JCeb's Blog

Programación, investigación, proyectos, vida y mas…

Proyecto de Software colaborativo online

with 4 comments

Muchas veces sucede que decimos “vamos a trabajar en linea”, trabajar en línea es muy recomendable, pero hay que saber cómo hacerlo, ya que de ello depende el éxito de nuestro proyecto.

Existen herramientas sugeridas para hacer este desarrollo, personalmente recomiendo:

Un administrador de versiones

¿Qué es?, bueno el administrador de versiones sirve para que cuando programamos un código vayamos controlando el progreso que vayamos obteniendo conforme el paso del tiempo.

Administrador de versiones colaborativo
¿Qué es?, así como podemos controlar nuestro código por persona, puede ser que cada participante quiera controlar su progreso, pero además, plantiemos la siguiente pregunta:
¿Cómo le hacemos para que Juanito Perez me pase la parte que le tocó?, bueno para resolver ese problema podemos usar uno de muchos administradores de versiones colaborativos que hay, por mencionar algunos:

-GIT
-SVN(Subversion)
-CVS
-HG(Mercurial)

Con estos administradores de versiones colaborativo podemos responder la pregunta anteriormente planteada y resolvemos la administración de nuestro producto al ír generando versiones.

Administrador de proyectos
¿Qué es?, bueno el administrador de proyectos sirve para que allí se anoten y establezcan las tareas y responsabilidades por proyectos y por persona, tambien sirven para medir el progreso de un proyecto, en lo personal porqué los he usado recomiendo 2:

-Project Pier
-Active Collab

Wiki
Uno de los últimos sistemas para administrar contenido que han surgido, lo interesante en las wikis es que se pueden hacer contenidos colaborativos de manera muy sencilla.

¿Para que nos puede servir?, la wiki puede sernos de utilidad para expresar los objetivos del proyecto a las personas que se vayan incorporando conforme la marcha. También puede servirnos para colocar temas acerca de colaboraciones que cada integrante desee aportar, ha aportado y hacer documentación que ayude a los desarrolladores que en futuro se deseen integrar.

Lista de correos
La comunicación es muy importante, por ello debe existir una lista de correo, donde con enviar el mensaje a la lista, este se distribuye entre todos los integrantes de la lista y no es necesario mandar mensajes a cada persona del equipo de trabajo.
Las herramientas que puedo recomendar porqué las conozco son:
– Mailman
– google groups

Salas de conferencia
Muy bien en determinados momentos es necesario tener que vernos y hablarnos, por ello existen sistemas de conferencia como skype, dimdim, entre muchos otros para hacer conferencias por voz y/o video.

Administrador de bugs
Cómo ninguna herramienta es perfecta, es necesario tener un sistema para administrar los bugs que tanto usuarios como desarrolladores logren detectar, así también como sugerencias para el mejoramiento continuo del producto. Personalmente porqué estoy familiarizado recomiendo BugZilla, que es fácil de usar y muy completa funcionalmente.

Ejemplo práctico
Como no todo es simplemente explicar y ya con ello entenderan todo, aquí va un ejemplo práctico.

El proyecto se llama “test”

primero se crea el proyecto, uno del equipo lo crea y… ¿Cómo lo creo?, bueno simplemente basta con entrar a github.com y abrir la cuenta, luego nos dice github si queremos crear un nuevo repositorio, por lo que debemos llenar la información que se nos requiere y una vez realizado esto nos da las instrucciones github.com paso a paso.

Pero no nos dice nada más respecto a como trabajar con nuestro equipo.

Para poder trabajar en equipo debemos de realizar lo siguiente:

Cómo administrador
1. Ir al repositorio del proyecto en este caso llamado “test”
2. Presionar el boton que dice “admin”
3. Ir a la sección que dice “colaboradores”
4. Añadir al/los colaboradores

Como colaborador
1. Ir a las configuraciones de nuestra cuenta
2. Clic en donde dice Llaves SSH públicas
3. Clic en agregar llave pública ssh
… ¿Cómo creo mi llave publica?, bueno github nos dice cómo en estas ligas:
http://help.github.com/mac-key-setup/ para OSX
http://help.github.com/msysgit-key-setup/ para Windows
http://help.github.com/linux-key-setup/ Para Linux

4. Clonar el proyecto, esto se hace de la siguiente forma:
Se accede al sitio del proyecto por ejemplo:
http://github.com/julianceballos/test
Ahí dice en un cuadro la ruta a copiar y conectarse por medio de ssh, algo así: git@github.com:julianceballos/test.git
Así que para clonar el proyecto debemos hacer:

$ git clone git@github.com:julianceballos/test.git

Hecho esto debe de crearse una carpeta llamada test
5. Una vez clonado nuestro proyecto, podemos comenzar a hacer colaboraciones, como modificar los archivos existentes o crear nuevos archivos, por ejemplo si hemos creado un nuevo archivo o aun más, una carpeta con archivos dentro simplemente basta con hacer:

$ git add carpeta/*
$ git add archivo_nuevo

6. Establecer punto de resguardo, esto es una vez que digamos tener una etapa de nuestro desarrollo, lista, hacemos un commit, para que sirve el commit?, es como un punto de respaldo, siempre que querramos podemos navegar entre los commit y podemos ver como quedó nuestra aplicación en un momento determinado, para hacer commit solo basta con:

$ git commit -am 'he llegado a un punto de satisfaccion'

7. Subir los cambios o continuar trabajando. Cuando hayamos terminado una mejora en nuestra parte del proyecto podemos subir los cambios o continuar trabajando en local y hacer commits cada vez que sintamos que es necesario guardar un historico de nuestro desarrollo. Si en cambio sentimos que ya estamos listos para subir las mejoras porqué se acerca una fecha de revisión o algo, solo basta con hacer:

$ git push origin master

8. No olvidar antes de hacer un push, primero hacer un pull, es decir primero jalar el repositorio para comprobar que tenemos una versión de todas las fuentes actualizadas.

Hasta este punto todo bien, a excepción de cuanto no hacemos pull, dejamos de revisar las actualizaciones del repositorio, modificamos archivos que a otra persona le han correspondido, usamos el master para experimentar, etc. Usualmente si se distribuye bien el código por módulos, se puede tener durante el proceso de desarrollo una programación correcta y jamás habrá problemas, pero como bien dicen “Si hay la probabilidad de que suceda, sucederá”, así que veamos una manera de resolver el problema de incompatibilidades en las versiones, fechas y nombres de los archivos. Para esto existen las famosas RAMAS de desarrollo, por ejemplo:

Partamos de un tronco común que es este caso en github se llama MASTER, este tiene ramas(sip, como un árbol), las ramas pueden ser:

– MASTER
– Modelos
– Vistas
– Controladores

Pero Modelos puede tener ramas y esas ramas son los desarrolladores que participan en esta capa del proyecto, por ejemplo:

– MASTER
– Modelos
– Juan
– Emmanuel
– Paco
– Vistas
– Controladores

¿Y qué son las ramas?, simplemente son una copia de su origen, por ejemplo Emmanuel es una copia de Modelos, que a su vez Modelos es una copia de MASTER, lo que sucede es que Modelos es una composición de MASTER con código nuevo que se ha generado por el equipo dedicado a esa área, la rama Juan es una composición de MASTER+Modelos + Código que Juan ha agregado para evitar que haya incompatibilidades entre los código que sus otros compañeros estan escribiendo.
Para generar branches solo basta con hacer:

$ git branch myBranch

Para cambiar entre branches solo basta con escribir:

$ git checkout myBranch

Para ver en que branch nos encontramos:

git branch

Aparecerá marcada con un * la rama en la que nos encontramos.

Una vez programadas las cosas el administrador del proyecto es quien tiene que mezclar todos los códigos de los participantes, esto se hace con un merge:

$ git merge mybranch

Lo que sucede es que lo que se haya programado en mybranch se mezcla con lo que se tiene en el branch donde te encuentras ubicado.

Listo, hacemos push y ya quedó nuestro proyecto, basicamente eso estará sucediendo todo el tiempo, cada quien hace su parte, se mezclan y se lanzan por versiones.

Para establecer las versiones solo basta con hacer:

$ git tag -a v1.0 -m 'Test 1.0'

Para subir el tag:

$ git push origin v1.0

Para subir todos los tags:

$ git push origin --tags

Al bajar desde la página de Github todos los tags apareceran listados, disponibles para descargar el de tu preferencia.

Por otra parte, el wiki que tiene github es útil y nos evita tener que crear uno, para que sirve?, es posible ahí escribir todas las partes en que consiste el proyecto e incluso escribir a quien le corresponde cada parte, por otro lado no es la mejor manera, por lo que para asignar y autoasignarse tareas es preferible utilizar el project pier, la lista de correos es para ponerse de acuerdo y la wiki simplemente para escribir objetivos, las caracteristicas del producto por versión y muchas otras cosas, como el equipo de desarrollo, etc.

Los medios de comunicación sean de voz o video son geniales para tener reuniones pseudo presenciales con el equipo de desarrollo, para tomar desiciones sobre lo que se puede mejorar, agregar al producto, etc.

Bueno espero este post sea de utilidad, no es una guía definitiva, es para tener una ídea de como trabajar en equipo, en lo personal me ha servido todo lo mencionado y no he tenido probemas =). Saludos.

Anuncios

Written by JCeb

3 septiembre, 2010 at 11:36 pm

Nacnati A.C.

with one comment

Hola, el mótivo de este post es para platicarles un poco de lo que estoy trabajando en mi parte altruísta con una asociación civil que hemos creado con la sede en Mérida, Yucatán, MX.

El objetivo de nuestra asociación civil es localizar productos de Software Libre a los diferentes idíomas nacionales, realizar actividades de promoción de estos productos y a su vez generar programas en colaboración con instituciones públicas y privadas para su implementación en la sociedad.

Como primer proyecto de nuestra asociación civil hemos realizado un proyecto en conjunto con Mozilla México, la localización de Firefox a Nahuatl, Maya, Zapoteco y Tarahumara. Este proyecto pretende llevar este navegador a las 4 primeras variantes lingüísticas seleccionadas de las 364 en total.

Necesitamos del apoyo de instituciones de gobierno, iniciativa privada, de educación entre otras muchas para que sea posible este esfuerzo.

Cómo parte de esta busqueda de apoyos hemos inscrito el proyecto a Iniciativa México, donde puedes visitarla y si deseas otorgarnos votos para que quedemos entre unas de las iniciativas más populares.

Apoyanos con un voto: http://bit.ly/firefox-imx

Para más información puedes visitar la página de nacnati en:

http://nacnati.org.mx

Written by JCeb

17 agosto, 2010 at 4:58 pm

Publicado en Uncategorized

Módulo SQLite para Jetpack nueva implementación

with one comment

Hola amigos, he desarrollado un pequeño módulo como ayer comenté, los amigos de mozilla Labs han dado opiniones al respecto y sin duda el manejar consultas asincronas es uno de los temas más relevantes hoy en día, por lo que el equipo de Firefox ha estado modificando ciertas bibliotecas para ofrecer esta posibilidad en el navegador.
Bueno debido a ello los amigos de labs me han solicitida si se puede que las consultas en el módulo pudieran ser asincronas y por supuesto que se puede, así que ahora la implementación es un poquito diferente ;).

var sql = require("sqlite")

sql.connect("jceb.sqlite");

sql.execute("create table features(id integer primary key autoincrement, name text);");

sql.execute('insert into features(name) values("hola");');

sql.execute("select * from features;",function(result,status){
  for(var i=0;i<result.rows;i++){
    for(var j=0;j<result.cols;j++){
      console.log(result.data[i][j]);
    }
  }
});

Si se dan cuenta lo único que cambia es que ahora al hacer execute con una consulta que devuelva resultados, se tiene que agregar una función que nos ayuda a manejar la solicitud asincrona, es decir al agregar esta función ya no habrá el caso en que se pierda la información porqué no la leímos en el momento apropiado.

Para más información:
https://wiki.mozilla.org/Labs/Jetpack/Reboot/JEP/121

Visiten http://mozilla-mexico.org

Written by JCeb

7 agosto, 2010 at 2:56 am

Publicado en Uncategorized

Módulo SQLite para Jetpack

with one comment

Hola, he realizado la noche de ayer un pequeño módulo para Jetpack, quería hacer unas conexiones al sqlite que tiene el browser y me dí cuenta que resulta un tanto engorrozo hacer esta conexion, en lo personal como desarrollador en python me gustan las cosas directas de 2 o 3 métodos que me ayuden a hacer mi trabajo lo más pronto posible, por ello escribí una API para hacer conexiones de manera más rápida e inmediata a SQLite en Jetpack, el código se puede hallar en este gist.

El modulo aún no ha sido aprobado pero esperemos pronto lo sea, por lo pronto puede bajarlo y pegarlo en su jetpack, para usarlo ;).

La implementación realmente es muy fácil, solo basta con esto:

var sql = require("sqlite");

sql.connect("jceb.sqlite");

sql.execute("create table features(id integer primary key autoincrement, name text);");

sql.execute('insert into features(name) values("rapido");');

sql.execute("select * from features;");

var result = sql.fetchall();

for(var i=0;i<result.rows;i++){
  for(var j=0;j<result.cols;j++){
    console.log(result.data[i][j]);
  }
}

Saludos.

Written by JCeb

5 agosto, 2010 at 10:40 pm

Publicado en Uncategorized

Los objetivos cumplidos 2010

with one comment

Bueno me puse como objetivos de este año, fundar Nacnati A.C., una asociación civil encargada de desarrollar y acercar la tecnología a las comunidades que hablan alguno de los otros 364 idiomas oficiales de México. Cosa que ya se ha logrado ahora hay que trabajar mucho para que logre andar sobre ruedas y se puedan lograr muchisimas cosas con este nuevo organismo.

Por otro lado otro objetivo fue iniciar una empresa de tecnología, logística y planeación, este objetivo ya va tomando forma, poco a poco pero ahí vamos los que queremos realizar este sueño.

Por otro lado me propuse evangelizar desarrollo de addons y ubiquity en México y ya he logrado ser el encargado de la parte de desarrollo en Mozilla México =) y ya ando haciendo mis pequeñas contribuciones al SDK de Jetpack, pero aún no ha empezado el verdadero trabajo, ya que tenemos que hallar espacios para dar los talleres y conferencias sobre desarrollo, pero así fue como se comenzó mozilla México, así que ya sabemos el camino a andar.

Esos fueron mis objetivos del año y unos ya estan hechos, otros estan en proceso pero ahí vamos y ojalá todo salga bien :). Saludos a todos y gracias por leer el blog ;).

Written by JCeb

4 agosto, 2010 at 2:21 pm

Publicado en Uncategorized

Ordenador de carpetas en Cocoa

with 6 comments

Bueno este post es para compartirles una pequeña aplicación que he realizado junto a Mario Canto para Mac OS.

El programita todo lo que hace es colocarse en tu statusbar

lo único que debes hacer es arrastrar una carpeta que tengas desordenada al icono verde, en mi caso la carpeta de Descargas que siempre tengo hecha un tiradero

Bueno arrastras la carpeta al iconito verde y la suelta =)

Una vez soltada la carpeta, la utilería comenzará a ordenar por extensión y ya tendremos nuestra carpeta medio ordenada, sin tanto trabajo

Espero les haya gustado el post, pueden dejar sus comentarios son bien recibidos y pues pensamos vender la aplicación a 2 dolares y agregarle más opciones de ordenamiento para que no tengan que hacer nada =).

Written by JCeb

3 agosto, 2010 at 1:24 am

Publicado en Desarrollo, Investigación

No confundas tu vaso XD

leave a comment »

Bueno este artículo es una cosa ociosa que surgió de mi mente.

Seguramente les ha pasado que van con los amigos y uno va a rellenar los vasos y siempre buscan una manera de diferenciarlo. Bueno esta es una manera de no confundirlo, si se dan cuenta en la tapa hay 3 indicadores para saber el contenido del vaso.

Si analizamos la tapa con esos 3 indicadores podemos tener 8 combinaciones posibles de estados. Usenlos para diferencias los vasos 😉 y nunca más se confundan jeje! =D.

P.D. Si le quitan la tapa se chingan XD JAJAJAJAJA!. Saludos a todos.

Written by JCeb

2 agosto, 2010 at 2:31 am

Publicado en Ocio

Tagged with , , ,