miércoles, 28 de marzo de 2012

Primeros pasos con Git

Git es básicamente un sistema de control de versiones. Es decir, ayuda a centralizar y administrar los cambios en el código de un proyecto. Lo usan pesos pesados como el mismo kermel de linux... E incluso Microsoft le da soporte en codeplex. Histeria y controversia aparte...

Para esta guía, sería bueno que vieras mi post sobre DNS, que aún no esta escrito.
En tanto porque puede ser más cómodo trabajar con nombres DNS que con direcciones IP

Instalación

Necesitamos git obviamente, y activar su soporte para ssh.
aptitude install apache2 git-core gitweb openssh-server
Sin embargo, puede que el ssh ya lo estés usando desde hace rato. Y el servidor Apache suelo instalarlo desde el principio. Esto puede bastar.
aptitude install git-core  gitweb

Configuración inicial.

Por razones de seguridad, es necesario que crees un usuario con contraseña en el sistema.
useradd git -c "Usuario Git" -m  passwd git
Nota: Por ahora no he podido hacer que este usuario funcione del todo. Mi vergüenza es infinita.
Use el usuario sin privilegio que cree al instalar Debian.

Configurando Apache

Intenté hacerlo más interesante usando Virtual Host para Apache. En resumen, apache en Debian usa dos directorios para guardar la configuración de los Virtual Host: sites-available y  sites-enabled, ambos dentro de /etc/apache/
Mi fichero se llama gitweb y se encuentra en ambos directorios. Puede servir de ejemplo para la configuración de otro VirtualHost
su root
cd /etc/apache2/
cp sites-available/{default,gitweb}

cat >gitweb <<EOF
<VirtualHost *:80>
ServerName git.xibalba.com
ServerAdmin webmaster@mail
DocumentRoot /usr/share/gitweb
<Directory /usr/share/gitweb>
Allow from all
AllowOverride none
Order allow,deny
<Files gitweb.cgi>
Options FollowSymLinks +ExecCGI
AddHandler cgi-script .cgi
</Files>
</Directory>
#DirectoryIndex /usr/share/gitweb/gitweb.cgi
SetEnv GITWEB_CONFIG /etc/gitweb.conf
ErrorLog ${APACHE_LOG_DIR}/error.log 
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
EOF

cp sites-available/gitweb sites-enabled/
service apache2 reload
Esto es lo que ves cuando apuntas a la dirección especificada en la configuración
Tengo otro post que aún no he escrito donde explico un poco más como funciona Virtual host. Existen otras combinaciones, para el caso esta sirve.
Debes hacer una entrada en el DNS que apunte hacia este host. Sí, la puedes ver en el post que aún no he escrito pero te adelanto que es sobre usar Webmin un poco.

Configuración de Git en el servidor.

De ahora en adelante usaremos el usuario que hemos creado por seguridad.
su- git
Encendemos el servicio
git daemon --base-path=/var/cache/git --detach --syslog --export-all
Nos movemos un poco
cd /var/cache/git

Creamos el directorio del repo. El nombre vienen dado por *.git. En este caso se llama
mkdir proyectophp.git
Entremos.
cd proyectophp/git
Iniciamos el repositorio en toda regla
git init
Le damos un poco de personalidad con una pequeña y corta descripción
echo "Este es el nuevo repositorio"> .git/description
Configuramos el usuario que va a mostrarse en todos los log y en la interfaz web.
git config --global user.name "Alexander Ortíz"
git config --global user.mail "vtacius@mail.com"

Este es nuestro proyecto. Vacío por ahora
Lo que sigue es la forma más básica de trabajar con los ficheros. 
Creamos el primer archivo. Usualmente un README es necesario en cualquier proyecto. Excusa al menos.
vim README
Agregamos el fichero.
git add README
Haces el envío de este a la copia del repositorio que tenemos en nuestro repo (En este caso el servidor)
git commit -a -m "Este es el primer envío de Administrador"
Acá se encuentra ya nuestro primer envío

Configuración de Git en el cliente. 

La siguiente es una de las tantas formas de exportar un repo. Hay bastante documentación al respecto, a veces quisiera tener la paciencia de leerla toda. Básicamente esto es la configuración de los clientes.

git clone \
 vtacius@git.xibalba.com:/var/cache/git/proyectophp.git proyectophp
cd proyectophp
Te darás cuenta que el archivo README esta en el directorio. Esa es la magia de Git

Configuras algunos aspectos, útiles para saber quién es realmente quién envía cada cambio y cosa
 
git config --global user.name "Anibal Barca"
git config --global user.mail "aníbal@mail.com"

Digamos que tu quieres hacer un aporte serio al proyecto.

 
vim index.php
git add index.php
git commit -a -m "Este es el prímer envío de Aníbal Barca"
git push
Pero no funciona. Te tira un mensaje en Inglés de la siguiente forma:
  remote: error: refusing to update checked out branch: refs/heads/master
  remote: error: By default, updating the current branch in a non-bare repository
  remote: error: is denied, because it will make the index and work tree inconsistent
  remote: error: with what you pushed, and will require 'git reset --hard' to match
  remote: error: the work tree to HEAD.
  remote: error: 
  remote: error: You can set 'receive.denyCurrentBranch' configuration variable t
  remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
  remote: error: its current branch; however, this is not recommended unless you
  remote: error: arranged to update its work tree to match what you pushed in some
  remote: error: other way.
  remote: error: 
  remote: error: To squelch this message and still keep the default behaviour, set
  remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
  To vtacius@git.xibalba.com:/var/cache/git/persona.git
  ! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to 'vtacius@git.xibalba.com:/var/cache/git/persona.git'

Yo y mi deficiente inglés llegamos a la conclusión que esto es lo que quería:
Ejecutas en el servidor.

git config receive.denyCurrentBranch warn
De ahora en adelante, cada vez que algunos de los clientes envíe algo, debe ejecutarse lo siguiente en el servidor
git reset --hard
Esta es la prueba que todo valió la pena
Por ahora creo que me reservo otra entrada para que sigamos aprendiendo sobre esta onda. Al menos me ha para
Agradezco a Casidiablo.net y Pixhero, porque mi posts es casi una copia descarada de ambos post 

martes, 13 de marzo de 2012

El último que quedaba: Google Groups se entra a la onda moderna

Será que a muchos ya les habrá llegado la notificación hace tiempo, pero recién me entero que Google Groups ya entra en el mundo de los cambios que de diseño.

¿Soy el único al tantas superficies lisas y colores neutros es demasiado iCool?

Esto lo voy a extrañar. Cutre pero me encantaba
Ahora todo va más en la onda de las listas, como queriendo adaptar todo a interfaces más reducidas. Bien por los que lo usan desde dispositivos móviles
Recuerdo haber tenido otros grupos. Recuerdo el spam también
Pero bien, el trauma de apenas acostumbrarte a algo nuevo. Al menos ha dado un salto hacia la simplicidad.
Obvio, la compañía necesita unificar su imagen.
Se que este pasará por el post más SOSO que he hecho.

martes, 21 de febrero de 2012

Ripeando cd de música desde consola. Algunos apuntes de Multimedia

Esta es prácticamente una entrada obligatoria en cualquier blog linuxero, y como se supone que ese es el motivo de este blog, ahí les va:

En el casi improbable caso que tengan un CD de música que les ande por allí y que quieran ripear en archivos mp3 -u ogg, que no esta nada mal-, y en vista que quizá ya estén tan acostumbrados a la consola que posiblemente estén leyendo esto desde links, lo que hay que hacer se resume en dos sencillos pasos.

Primero, hay que ripear propiamente todo el CD. Usamos cdparanoia desde Se hace así:
cdparanoia -vsZB
Donde v es el típico verbose de la mayoría de comandos. El s es para escanear donde hay un CD, y no es necesario si no tienes más que un lector.
B es la opción. Básicamente, es el único necesario para ripear. Pero le agregamos Z para que vaya más rápido evitando la verificación de datos y características de corrección de errores.
Ahora hay que convertir a mp3 propiamente dicho, pues lo que tenemos ahora son un montón de archivos wav que si bien es cierto son teóricamente la mejor calidad posible, son demasiado grandes.
Para convertirlo es necesario usar lame.
lame -hb 192 track01.cdda.wav track01.mp3
h es la opción de la esperanza. Trata de hacer un ripeo de calidad con valores predeterminados, y b es el famoso bitraje que le hemos seteado en 192. Si se setea a 160 por ejemplo, el peso del archivo disminuye un 16%, pero no he comprobado nada de la calidad con que queda.

Podemos darle más opciones para que salga algo más acabado. Veamos las etiquetas ID3 tag más interesantes.

--tt Titulo de la canción (30 caracteres máximo)
--ta Nombre del artista (30 caracteres máximo. Creo)
--tl Album     
--tn Número de track.
--tg Género

Por ejemplo, una canción podría ir de esta forma.
lame -h -b 192 --tt "Morningstar" --ta "Gehena" --tl \
"First Spell" --tn 5 track01.cdda.wav Gehena\ -\ Morningstar.mp3

Y bien, eso es todo por ahora. Lo puedes hacer en forma de script para varias canciones, vamos, esa es de las partes divertidas. Por ejemplo
for i in $(ls *.wav ); 
do 
  lame -h -b 192 --tt $(basename $i cdda.wav) --ta "Oradores" \ 
--tl "Vocabulario en Inglés" $i $(basename $i cdda.wav)mp3; done

Que logra su cometido. Alguien más avispado podrá resolver lo del nombre para cada uno... Algo con dialog, quizá...

Tomando en cuanta que se puede usar Rhytmbox, Banshee o EasyTAG para cambiar las etiquetas, creo que es bastante ayuda.

La fuente es esta. Incluso el script final, -que solo modifique un poco-.

Otros apuntes interesantes

Otros apuntes interesantes