Para configurar un servidor de git local podemos seguir la guía oficial.
La guía nos muestra los pasos necesarios para acceder a un repositorio de git mediante ssh, que es la forma más común para acceder (leer y escribir) a un repositorio. Esto debido a la seguridad y eficiencia que ofrece el protocolo ssh. Puedes leer sobre los distintos protocolos (local, http[s], git, ssh) disponibles en git aquí.

Bueno, lo primero que necesitamos es tener un servidor de ssh

sudo apt-get install openssh-server

Luego tenemos que crear al usuario ‘git’. Yo especifiqué el directorio del usuario para que no me creara el directorio /home/git

sudo adduser --home /home/cirovladimir/Apps/git

nos va a pedir una contraseña y algunos datos, podemos dejar vacíos los demás campos.

Luego nos logeamos como el usuario git y creamos el directorio ‘.ssh/’

sudo su git
cd
mkdir .ssh

a continuación vamos a generar las llaves para nuestros usuarios

ssh keygen -t rsa -C 'usuario_1@gmail.com' -f usuario_1_rsa
ssh keygen -t rsa -C 'usuario_2@gmail.com' -f usuario_2_rsa

nos va a generar un par de llaves para cada usuario, una pública (extensión .pub) y una privada

Hay que agregar las llaves públicas al archivo .ssh/authorized_keys

cat usuario_1_rsa.pub >> .ssh/authorized_keys
cat usuario_2_rsa.pub >> .ssh/authorized_keys

Ahora vamos a iniciar un repositorio para nuestro proyecto

mkdir -p repos/proyecto.git
cd repos/proyecto.git
git --bare init

cerramos la sesión del usuario git

exit

si ya tenemos un repositorio local que queremos sincronizar con el servidor que acabamos de configurar, hacemos lo siguiente

cd miproyecto
git remote add origin git@localhost:repos/proyecto.git
git push origin master

en este caso el servidor es local, si lo configuras en otra máquina puedes sustituir localhost por el nombre de la máquina o su ip.

Si al ejecutar el ‘push’ te arroja un error parecido al siguiente

Error: Agent admitted failure to sign

lo puedes resolver con el comando

ssh-add /ruta/usuario1

y te va a pedir el passphrase que utilizaste cuando generaste la llave.

Fuentes:
http://git-scm.com/book/en/Git-on-the-Server-Setting-Up-the-Server
http://git-scm.com/book/ch4-1.html
https://help.github.com/articles/generating-ssh-keys
https://help.github.com/articles/error-agent-admitted-failure-to-sign

Anuncios

jQuery – desde un CDN o desde el servidor

En el enlace de abajo se hace un análisis sobre si cargar jQuery desde un CDN (como el de Google)

<script src=”//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js”></script>

o desde el servidor

<script src=”/path/to/jquery/1.8.2/jquery.min.js”></script>

Algo que no se menciona es que estamos confiando en que el archivo del CDN no contiene otro código además del de jQuery, seguramente Google guarda información acerca de los sitios que cargan la librería desde sus servidores. En fin, creo que estoy siendo un poco paranoico, de cualquier forma Google sigue la filosofía de “Don’t be evil” 🙂

via Cargar jQuery desde un CDN o desde servidor | EtnasSoft.

Cuando inicias algún proyecto, muy probablemente lo hayas creado localmente (en tu computadora). Si después quieres moverlo a un servidor para compartirlo y que los demás puedan contribuir a tu proyecto, necesitas mover tu repositorio local a un servidor compartido.

Para hacer esto, ejecuta el siguiente comando para crear un clon de tu repositorio

git clone –bare /path/to/repo /path/to/bare/repo.git

Luego copia esta carpeta al servidor -mediante usb, ftp, ssh o lo que puedas-.

Puedes comprimirla antes de copiarla con

tar -zcvf /path/to/bare/repo.git repo.tar.gz

y descopmrimirla en el servidor con

tar -zxvf repo.tar.gz

Ahora para poder sincronizar con este nuevo servidor, cambia el origen de tu directorio de trabajo (working tree)

git remote rm origin

git remote add origin ssh://user@dev.foo.com/path/to/bare/repo.git

suponiendo que tienes acceso al servidor mediante ssh y luego envía tus cambios al nuevo servidor

git push

Fuentes:
http://stackoverflow.com/questions/4860166/how-to-synchronize-two-git-repositories
http://kovshenin.com/2011/transfer-your-existing-git-repository-to-github/
http://stackoverflow.com/questions/1402390/git-push-clone-to-new-server/1402783#1402783
http://www.wetware.co.nz/2009/07/pull-a-git-branch-from-remote/ 
http://www.kernel.org/pub/software/scm/git/docs/git-clone.html#_git_urls_a_id_urls_a 

La forma de filtrar los datos de un ListGrid en el cliente dependerá de la fuente de datos, es decir, si utilizas un DataSource o no. Aquí explicare la primera opción, ya que en nuestro caso utilizamos un RestDataSource. Si quieres saber como filtrar un ListGrid que contiene datos locales puedes consultar esta pregunta y la documentación.

Supongamos que tenemos un servicio REST que regresa un listado de usuarios con los campos id y oficina. Para poder filtrar los datos en el cliente, configuramos el ListGrid de la siguiente manera:

ListGrid grdUsuarios=new ListGrid();
grdUsuarios.setDataSource(new RestDataSource(){
{
    setDataURL("api/rest/usuarios");
    setDataFormat(DSDataFormat.JSON);
    DataSourceField fldId=new DataSourceField("id", FieldType.TEXT);
    fldId.setPrimaryKey(true);
    DataSourceField fldOficina=new DataSourceField("oficina", FieldType.TEXT);
    setFields(fldId, fldOficina);
}
});
grdUsuarios.setAutoFetchData(true);
grdUsuarios.setDataProperties(new ResultSet(){
    {
        setFetchMode(FetchMode.LOCAL);
        setUseClientFiltering(true);
    }
});
grdUsuarios.setShowFilterEditor(true);
grdUsuarios.setFilterOnKeypress(true);

Fuentes:
http://forums.smartclient.com/showthread.php?p=84118#post84118 

Hay ocasiones que no es necesario obtener los datos de un SelectItem desde el servidor porque ya conocemos los valores que pudiera tener. Por ejemplo, si queremos desplegar un SelectItem con los meses del año para que el usuario seleccione alguno, tendríamos el siguiente código:

private enum Mes{
ENERO, FEBRERO, MARZO, ABRIL, MAYO, JUNIO, JULIO, AGOSTO,
SEPTIEMBRE, OCTUBRE, NOVIEMBRE, DICIEMBRE
}

LinkedHashMap getMonthsValueMap(){
    LinkedHashMap monthsValueMap=new LinkedHashMap();
    for(int i=0;i<Mes.values().length;i++){
        monthsValueMap.put(String.valueOf(i+1), Mes.values()[i].toString());
    }
    return monthsValueMap;
}

SelectItem itmMes = new SelectItem("mes", "Mes");
itmMes.setValueMap(getMonthsValueMap());

Pero, ¿qué pasa si quisieramos filtrar los meses para mostrar solamente hasta el mes actual? Definitivamente tendríamos que descartar los métodos setPickListCriteria, setOptionCriteria o sobreescribir el método getPickListFilterCriteria. Esto debido a que todos estos métodos funcionan solamente para controles enlazados a un DataSource. Incluso el método setFilterLocally requiere lo mismo y dice en su documentación que si se establece en true los datos serán solicitados una sola vez al servidor y después aplicará el filtro localmente. Nada de esto nos sirve ya que el control contiene los datos de un ValueMap.

Lo que tendríamos que hacer es construir el ValueMap de forma dinámica en el cliente de la siguiente manera

private enum Mes{
ENERO, FEBRERO, MARZO, ABRIL, MAYO, JUNIO, JULIO, AGOSTO,
SEPTIEMBRE, OCTUBRE, NOVIEMBRE, DICIEMBRE
}

LinkedHashMap getMonthsValueMap(Integer maxMonth){
    LinkedHashMap monthsValueMap=new LinkedHashMap();
    for(int i=0;i<maxMonth;i++){
        monthsValueMap.put(String.valueOf(i+1), Mes.values()[i].toString());
    }
    return monthsValueMap;
}

Date fecha=new Date();
Integer currentMonth=fecha.getMonth()+1;
SelectItem itmMes = new SelectItem("mes", "Mes");
itmMes.setValueMap(getMonthsValueMap(currentMonth));

Hay algunas dependencias que no podrás encontrar en repositorios públicos por alguna razón, como las librerías OJDBC de Oracle. Seguro que puedes instalarlas en tu máquina, pero -en una organización- no quisieras hacer esto en la computadora de cada desarrollador por cada librería que necesiten. Bueno, entonces lo que necesitas es tener tu propio repositorio donde puedas poner todas las librerías comunes que utilicen en tu empresa (las que desarrollen y las de terceros). Por suerte, existe Nexus.
Para instalarlo simplemente descargalo, descomprimelo y ejecutalo.

mkdir nexus
cd nexus
wget http://nexus.sonatype.org/downloads/nexus-oss-webapp-1.9.2.3-bundle.tar.gz
tar -xvzf nexus-oss-webapp-1.9.2.3-bundle.tar.gz
./nexus-oss-webapp-1.9.2.3/bin/jsw/linux-x86-32/nexus start

Asegurate que la última línea corresponda a tu arquitectura, busca el ejecutable que corresponda en el directorio ./nexus-oss-webapp-1.9.2.3/bin/jsw/

Después de ejecutar el último comando debes ver algo como

2011-09-21 15:37:21 INFO [er_start_runner] - org.mortbay.log - Started SelectChannelConnector@0.0.0.0:8081

Abre un navegador y ve a http://localhost:8081/nexus. Debes poder ver la consola de administración. Listo, ya tienes tu propio repositorio instalado.

Ingresa con el usuario “admin” y contraseña “admin123” para ver las opciones administrativas (cambia la contraseña de paso). Te conviene activar la opción “Download Remote Indexes” en la configuración de los repositorios, al menos para Maven Central. Con esto las búsquedas serán más rápidas.
Para ver el Log da clic en la opción “System Files” y selecciona el documento “nexus.log”.

Para que este repositorio sea utilizado dentro de la organización, en la PC de cada desarrollador edita el archivo ${user.home}/.m2/settings.xml y pon el contenido

<?xml version="1.0"?>
<settings>
	<mirrors>
		<mirror>
			<id>nexus.acme.com</id>
			<name>Acme</name>
			<url>http://nexus.acme.com:8081/nexus/content/groups/public/</url>
			<mirrorOf>*</mirrorOf>
		</mirror>
	</mirrors>
</settings>

Por supuesto nexus.acme.com puede ser sustituído por la IP del servidor, p. ej. 192.168.0.250
Ten en cuenta que al poner <mirrorOf>*</mirrorOf> tu repositorio sera utilizado para cualquier dependencia, incluso las de proyectos que tengan configurado otro repositorio en el archivo pom.xml, por lo que si no tienes configurados esos repositorios en Nexus, las dependencias no serán encontradas. Podrías especificar sólo ciertos repositorios de la siguiente forma: <mirrorOf>central,google,apache-snapshots</mirrorOf>
Finalmente, para utilizar el repositorio en tus proyectos, agrega las siguientes líneas al archivo pom.xml

  <repositories>
    <repository>
      <id>nexus.acme.com</id>
      <url>http://nexus.acme.com:8081/nexus/content/groups/public/</url>
    </repository>
  </repositories>

Fuentes:

http://my.safaribooksonline.com/
http://maven.apache.org/guides/mini/guide-mirror-settings.html

Últimamente estoy utilizando Maven para administrar las dependencias de mis proyectos. La mayoría de dependencias las obtengo de sus repositorios oficiales, p. ej.

<repositories>
<repository>
<id>smartclient</id>
<name>smartclient.com</name>
<url>http://www.smartclient.com/maven2</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.smartgwt</groupId>
<artifactId>smartgwt</artifactId>
<version>2.5</version>
</dependency>
</dependencies>

Pues la mayoría de proyectos con los que trabajo utilizan una conexion a bases de datos de Oracle, por lo que necesito agregar como dependencia la libreria OJDBC. El problema es que por cuestiones de licenciamiento no se puede redistribuir y, por tanto, ponerla disponible en un repositorio público de maven. Lo que tienes que hacer es instalarla manualmente en tu repositorio local.
Primero descarga el archivo ojdbc6.jar (existen otras versiones con distintas funcionalidades pero esta es la que utilizo frecuentemente).
Luego en una terminal ve al directorio donde lo descargaste y ejecuta el siguiente comando:

mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.2.0 -Dpackaging=jar -Dfile=ojdbc6.jar -DgeneratePom=true

Asegurate que la versión corresponda a la del archivo que descargaste. Una vez hecho esto, basta con agregar la dependencia en nuestro archivo pom.xml

<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.2.0</version>
</dependency>

Fuentes:
http://stackoverflow.com/questions/

[Caption]