1. Voy a traducir Foundations of Programming 2 a castellano!

    He decidido comenzar un proyecto interesante. Voy a traducir Foundations of Programming 2, un libro que aun está en trabajo, por Karl Seguin.

    Karl también escribió hace algún tiempo la primera parte de este libro, y si desean la pueden acceder de manera gratuita en http://www.openmymind.net/FoundationsOfProgramming.pdf

    Gracias a que Karl utiliza GitHub para este proyecto, es muy fácil comenzar a traducir su trabajo, incluso mientras lo realiza. Además la licencia permite no solo traducirlo, sino que compartirlo y distribuirlo de manera gratuita.

    Estoy muy entusiasmado, debido a que la primera parte fue muy buena, además porque siempre me ha interesado a contribuir en la disponibilidad de material de calidad en la lengua castellana.

    Mi ortografía no será la mejor ni tampoco mi redacción, pero ya pueden comenzar a ver mi trabajo, también en Github, mediante la dirección: https://github.com/davidlaym/Foundations-of-Programming-2 y la versión original la pueden ver en https://github.com/karlseguin/Foundations-of-Programming-2

    Estaré publicando los capítulos en el blog http://delm.wordpress.com/ a medida los termine, y si bien ya tengo el primero traducido, quiero hacer algunas revisiones de ortografía y redacción antes de publicarlo.

    La idea es obtener opiniones y dar a conocer este esfuerzo.

     
  2. Porqué odio sharepoint.

    Primero, quiero dejar claro que esta experiencia ha sido con la versión WSS 3.0 de Sharepoint. Esto es importante debido a que existen varias versiones más nuevas, incluida una 2010 que ha sido lanzada hace solo 15 días, y que dice haber solucionado varios de estos problemas. Sin embargo, WSS (Windows Sharepoint Services) es la única que viene incluida con Windows Server (“gratis”). Todas las demás, excepto la 2010 recién mencionada (que no he probado) según lo leído en Internet, presentan los mismos problemas aquí expuestos y además son muy costosas.

    Share que?

    No muchos conocen Sharepoint, ya que es un producto puramente corporativo. Sharepoint es uno de los productos estrella de Microsoft, junto a Windows y Office1. Es un portal web, originalmente pensado para administración de contenidos, pero que ha crecido de manera exponencial presentándose como un portal de colaboración y Middleware empresarial.

    Según bien lo resume la Wikipedia en su artículo sobre Sharepoint, si bien es una valiosa herramienta, es conocida por sus problemas para modificación. Pero eso suena completamente inofensivo. La realidad es que es totalmente imposible de modificar y mantener de una forma profesional, menos productiva.

    Problemas

    Sharepoint fue pensado para ser usado, no para ser modificado. Primero que nada, no hay herramientas de desarrollo. Si bien Sharepoint utiliza ASP.Net y SQLServer (tecnologías maduras y conocidas) la arquitectura de la aplicación impide cualquier forma de modificación con las herramientas existentes. Sharepoint tiene incluido su propio sistema de versionamiento de contenidos, pero extrañamente, considera que las paginas que uno crea también son contenidos así que guarda el código en la base de datos, y utiliza los archivos del disco duro solo como referencia, o punto base.

    Pero no solo es eso, sino que adicionalmente utiliza un montón de librerías que no son expuestas mediante SDK. Sharepoint debe estar en la máquina de desarrollo para poder usar Visual Studio para hacer desarrollo. Esto significa desarrollar en un Windows Server 2003 o superior.

    A eso hay que sumarle, que si no usas Visual Studio, el desarrollo de WebParts (pequeños trozos de funcionalidad que se despliegan como bloques en las páginas y pueden ser reusados) involucra la edición de complejos XSLT 1.0 con extensiones especiales de Sharepoint, casi no documentadas. Afortunadamente en la universidad me hicieron sufrir con XSLT tanto que hoy aun lo recuerdo, pero no deja de ser sufrido.

    El Origen

    Dicho todo esto ustedes se preguntarán, ¿Porqué estoy trabajando con Sharepoint entonces? habiendo tanta herramienta más flexible y tanto o más funcional. Bueno, Resulta que hoy en día, “Intranet” es sinónimo de “Sharepoint” en las empresas invadidas por Microsoft. No me entiendan mal, yo soy programador en .Net hace varios años, y me agrada mucho serlo porque tenemos varias ventajas sobre otras plataformas, pero Sharepoint es simplemente una tortura para los programadores.

    Si lo van a usar, olvídense que pueden modificarlo a sus gustos, o que podrán hacer alguna de esas lindas webparts que se supone le dan componentización. Porque en el mejor de los casos si lo llegan a lograr, habran invertido mucho más de lo que les hubiera costado hacer lo mismo desde cero.

    Palabras finales

    ¿Saben que es lo peor de todo? A mi me gustó en un principio y pensé que era la solución correcta para este problema concreto con nuestro cliente. Cuando me dí cuenta en el lío que me estaba metiendo, ya no se podía echar para atrás la máquina (comercial, política) debido a que ya habían compromisos y se habían levantado expectativas al cliente de que tendría Sharepoint, esta súper herramienta moderna a su disposición, y todo eso que dicen quienes venden. Que no le pase a Ud.

     
  3. 21:35 6th Apr 2010

    notes: 1

    tags: agilidad

    Agilidad: Cultura por sobre el método

    Estos días, en la lista de ChileAgil (http://groups.google.com/group/chileagil) hemos tenido una discusión bien interesante sobre la adopción de la agilidad en equipos de software.

    A partitir de esta discusión, surgió el tema de que es lo que significa agilidad, en el contexto de que entendíamos que no es una metodología ya que una metodología dicta una serie de pasos que se deben seguir basado en una doctrina, lo que es casi completamente opuesto al concepto de agilidad, en el cual todos debemos aportar para modificar nuestra forma de hacer las cosas segun mejor acomode al equipo y al proyecto.

    Es así como llegamos al consenso que la Agilidad es una cultura, compuesta de principios y prácticas.

    Me quedo contento con esta definición, me reafirma que el agilismo es algo que va más allá que cambiarse de camiseta y que realmente es entender el desarrollo de una manera distinta y más humanista.

     
  4. Realizar merge entre dos ramas en SVN

    Una de las grandes diferencias que quiso hacer el equipo de SVN con CVS, fue facilitar la creación de ramas de código y habilitar la reincorporación (merge) de estas ramas en el tronco. Y claro que hicieron una gran diferencia, CVS, al mejorar los algoritmos de comparación y mezcla, pero en cuanto al proceso en sí, continuó siendo engorroso (aunque se podría decir que también mejoró un poco) Es por eso que necesito poner esto al aire, para que no se me olvide como hacerlo: El flujo de trabajo es el siguiente:

    1. Crear la rama
    2. Hacer cambios en la rama
    3. Hacer cambios en el trunk (correcciones, mantención)
    4. Traspasar cambios del trunk a la rama
      1. commit y update en rama y trunk (sincronizar ambos directorios a la misma revisión sin cambios pendientes)
      2. merge desde trunk HEAD hacia rama en la revisión de la última sincronización. (ver código más abajo)
      3. corregir cualquier conflicto producido
      4. commit de la rama
      5. update en el trunk
    5. Repetir 2 a 4 hasta que el trabajo en la rama esté listo.
    6. Traspasar los cambios de la rama hacia el trunk.
      1. commit y update en rama y trunk (sincronizar ambos directorios a la misma revisión sin cambios pendientes)
      2. merge desde rama HEAD hacia trunk en la revisión de la última sincronización. (ver código más abajo)
      3. corregir cualquier conflicto producido
      4. commit del trunl
      5. update en la rama

    Como ven, el proceso sigue siendo engorroso al utilizar copias locales y es fácil equivocarse entre las revisiones. El siguiente ejemplo, es un merge del estilo 4.b (desde trunk hacia rama). El directorio de la rama es el directorio actual, y el trunk se encuentra en un directorio más abajo llamado “principal”. El último commit (en en trunk) se hizo en la revisión 3455(HEAD) y el último merge se hizo en la revisión 3452. Entre estas tres revisiones hubieron cambios tanto en el trunk como en la rama, pero solo vamos a traspasar los del trunk hacia la rama.

     
  5. git-svn y cómo recuperarse de una corrupción

    Bueno, siguiendo con mis experimentos en git-svn, tengo que decir que la implementación para windows frecuentemente corrompe los repositorios de svn al hacer el dcommit (enviar los cambios desde git hacia svn uno a uno según fueron hechos en git).

    Afortunadamente estas corrupciones (hasta ahora) han sido sencillas de reparar gracias al comando

     
    
    #svnadmin recover /home/svn/repository/your_repository_name 
    
    

    Recuerden que luego del dcommit fallido, deben hacer un rebase ya que probablemente el dcommit tuvo éxito y fue el rebase el que falló ;)

     
  6. Por qué los tables/pad/slates deben tener cámara.

    Quizás al pensar en una cámara para un tablet (o ipad, slate; de ahora en adelante, sinónimos para todos los efectos) tienen un propósito lúdico o secundario al estar al frente para mostrar la imagen del usuario y compartirla con una audiencia remota o para grabar tomas en similar perspectiva.

    Pero una cámara en la parte posterior de estos aparatos, tendría un propósito mucho más práctico, como el de leer códigos de barra de dos dimensiones o para generar los primeros intentos comercialmente masivos de realidad aumentada.

    De manera similar y con propósitos complementarios a los expuestos para las cámaras, se puede presentar un proyector en los tablets para aumentar aun más las posibilidades de interacción y presentación de datos (dado que la pantalla del equipo es limitada en tamaño)

    El futuro de estos aparatos es bastante auspicioso, y a pesar que tablets existían hace mucho tiempo, tenemos que agradecerle a Apple, Steve Jobs y su iPad el hecho que lo hayan replanteado completamente.

     
  7.  
  8. A git-svn en windows no le gusta el https

    Normalmente trabajo con svn en la oficina, debido a que es estable, es sencillo de usar, se integra muy bien con otras herramientas y funciona muy bien bajo windows.

    Pero he estado probando git para hacer trabajos locales, experimientos y cosas locas y tener un mini control de versiones local antes de subir todo al trunk en svn. es la raja.

    El único problema que tuve, fue que a git-svn no le gustó que el repositorio estubiera publicado en https. Al hacer el git svn fetch se caia, no bajaba nada y quedaba el repositorio corrupto. una mierda.

    El arreglo: habilitar un servidor svn local apuntando hacia una ruta compartida en donde están los repositorios. (afortunadamente tengo acceso a ese servidor para configurar los accesos y todo eso).

    En resumen:

         #habilitar share en servidor hacia repositorios

    \\servidor\repos\



    #iniciar servidor svn local

    $c/program files/Subversion/bin/svnserve -i \\servidor\repos



    #(en otra shell) iniciar repositorio mixto local

    $cd c/gitrepos

    $mkdir proyecto

    $cd proyecto

    $git svn init -s "svn://localhost/proyecto"

    $git svn fetch



    #iniciar programación!

    $git checkout -b trabajo

    El unico problema que veo, es que no es un proceso automático, y cada vez que quiera interactuar con svn voy a tener que iniciar el servidor local. A menos que configure svnserve como un servicio siempre apuntando a ese directorio, pero eso me parece mucho por ahora.

    Más info (en inglés) sobre svn+git en:

    http://www.jonmaddox.com/2008/03/05/cleanly-migrate-your-subversion-repository-to-a-git-repository/

    http://andy.delcambre.com/2008/03/04/git-svn-workflow.html

    http://blog.shinetech.com/?p=150

    http://notes.jimlindley.com/2008/3/25/git-svn-that-works-for-me