21 de June del 2008

Camino de Santiago

Reflexión. Redención. Libertad. Reto de voluntad. Desaparecer temporalmente. Encontrarse a uno mismo. Reto fisico. Huir de lo que nos enajena para comprender. Conseguir más sabiduria. Ver lugares asombrosos. Aprender a valorar todo de lo que disponemos habitualmente y lo consideramos normal. Entrenamiento de supervivencia.

Existen miles de razones para hacer el camino de Santiago. ¿Cuales son las mías? Algunas están ahí arriba, otras no, pero en cualquier caso, me he marchado hoy sábado 21 de Junio un mes por el camino del Norte, con vuelta estimada entre el 17 y el 20 de Julio. ¡Va a ser una experiencia cojonuda!

Dicho esto, me despido de vosotros hasta la vuelta. No hagais nada que yo no haría (o si…)!

Posteado por crimsomshadow bajo Ocio | Commentarios... » (2) |
9 de June del 2008

Libros, libros, libros…

Se ve que me voy haciendo mayor. Que le voy a hacer, pero es lo que hay. Mientras que antes defendía a capa y espada la documentación electrónica y de uso ad-hoc, últimamente me estoy interesando mucho por leer libros técnicos y dejar la documentación electrónica para lo que de verdad se le da bien: la resolución de problemas in situ.

Así es como decidí plantear en la lista de distribución de los cracks de e-ghost hacer un hilo de libros recomendados lo que ha terminado por convertirse en una pequeña página de su wiki que esperemos vaya creciendo con las recomendaciones de los diversos maestros que pululan la lista. Yo he empezado a leer la segunda edición de Code Complete (en ingles, off course) y de momento me está gustando mucho. ¡A ver que tal sigue!

Según vaya leyendo libros, ya sean de los recomendados o no, ya iré haciendo alguna reseña por aqui para el que le interese. Y viniendo al tema: txipi, uno de los mayores cracks del e-ghost, tiene publicado en bubok, lulu y en su blog un curso de C para GNU/Linux que aunque aun no he leido, tengo total confianza de que va a ser cojonudo y en breve caerá en papel. Pena que no sea de tapa dura (friki que es uno para estas cosas), aunque al ser pocas páginas tampoco le hubiera hecho muy buen servicio, ¿no?

Hay ganas de publicar algo en alguno de los servicios que he enlazado antes. ¿Que friki no ha querido alguna vez publicar un escrito propio?

Posteado por crimsomshadow bajo Ocio, Opinión, Programación, Software libre | Commentarios... » (2) |
21 de May del 2008

Organización, sistema y trabajo

Hace algo más de un mes, tras ya mucho tiempo sabiendo de su existencia pero no acercándome demasiado, me atreví al fin a meterme con Subversion (SVN de ahora en adelante para acortar). ¡Y que puedo decir! Ha cambiado mi forma de concebir el desarrollo de proyectos no solo en grupo, sino también en individual. Fácil de montar, fácil de utilizar, miles de plug-ins disponibles para nuestros IDEs preferidos… El control de versiones no solo es una estupenda forma de mantener un historial vivo de nuestros proyectos y de facilitar el trabajo en grupo, sino que además permite organizar el trabajo de maravilla sin muchos dolores de cabeza y refuerza el sentido de que todos los cambios en el proyecto son para algo, y en especial, algo que dentro de unos meses querrás recordar o averiguar.

Poco después de mis dos primeras commits (verídico) me interesé por las posibilidades en cuanto a gestión de proyectos. Esto extraña a algunos, pues siempre he tendido al trabajo ad-hoc y a la organización ligera, haciendo mucho énfasis en el propio trabajo. Pero claro, siempre he buscado la forma de organizar más óptima y generalmente siempre se me ha antojado demasiado complicado, por lo que he tirado por donde he podido.

Y aquí es donde ha entrado el segundo invento: Trac. Trac es cojonudo. Trac es magnifico. Cada vez que abro la página de un proyecto me ilusiono y todo. Trac es un sistema de gestión de proyectos que para mi tiene la mejor de las características: es muy poco intrusivo. Se integra con SVN de maravilla, es también muy fácil de montar y de utilizar y no obliga a una forma de organización concreta, más bien trata de una forma muy sencilla de proveer al Project Manager de las herramientas suficientes para aplicar su filosofía de organización al proyecto.

¿Y como funciona todo esto? El proyecto se hospeda en único punto, el servidor de SVN,y lo hace en forma de repositorio. Básicamente hay dos operaciones básicas que podemos hacer sobre el repositorio o sobre un elemento dentro del repositorio:

  • Update -> Actualizar nuestra versión local, si tenemos, con la del repositorio si es que esta ultima es superior. Dicho de otra forma, es la forma de obtener la última versión de lo que necesitemos.
  • Commit -> Actualizar la versión del repositorio con los cambios que hemos efectuado. Lo bonito aquí es que primero comprueba que la versión de la que hemos partido para hacer las modificaciones es la actual del repositorio. Si no es así es evidente que otro programador ha actualizado el repositorio y por lo tanto es vital que primero recojas sus cambios y los valides junto a los tuyos. Lo que pasa es que esto ocurre de una forma semiautomática que quita muchas preocupaciones. Opcionalmente (aunque yo lo considero obligatorio xD) se puede adjuntar un mensaje a la commit describiendo los cambios efectuados, lo cual refuerza el historial y la organización.

A nivel básico, eso es SVN. En cuanto a Trac, se trata de una aplicación web con los siguientes elementos:

  • Wiki: Una práctica wiki en la que podemos ir documentando el proyecto y añadiendo contenido importante para la gestión del proyecto. Extremadamente fácil de usar.
  • Timeline: Lista todos los eventos relacionados con el proyecto: edición de la wiki, commits de SVN, creación y cierre de tickets… Aquí se ve todo lo que se ha hecho con sus correspondientes explicaciones de forma muy rápida
  • Roadmap: Nos facilita la creación de milestones, que son metas que llevan asociadas conjuntos de tickets. Se pueden poner fechas estimadas y además se va llenando la barra porcentual según se cierran tickets. Da un buen vistazo del estado del proyecto
  • Browse Source: Permite explorar el repositorio SVN enlazado y ver los cambios entre versiones.
  • Tickets: Los tickets son el motor de Trac y la magia organizativa para nuestros proyectos. Un ticket puede ser cualquier cosa: una tarea, una mejora, un bug, un comentario a tener en cuenta… Cada ticket se asocia a un milestone y es posible comentar sobre cada ticket como si fuera un hilo de un foro. Además, si queremos organizar más, podemos asignar un ticket a un programador concreto.

De esta forma, Trac se convierte en la página principal de nuestro proyecto y el lugar de referencia a la hora de que hacer y donde. Cada vez que una tarea de subdivide en otras unidades, creamos tickets. Cuando terminamos algo, cerramos tickets. Todo con su historial y en orden. Adicionalmente, existen scripts de enganche (hook scripts) con los que podemos automatizar el cierre de tickets, backups incrementales por revisión y muchas otras cosas.

Algunos enlaces interesantes:

http://ariejan.net/2006/12/01/how-to-setup-a-ubuntu-development-server-part-1/

http://ariejan.net/2006/12/02/how-to-setup-a-ubuntu-development-server-part-2/

http://cachi.temiga.org/2008/02/11/montando-apache-ssl-subversion-webdav-websvn-en-ubuntu-server/

http://blog.odonnell.nu/32.html

http://www.reviewingit.com/index.php/content/view/62/1/

http://www.hosted-projects.com/trac/TracDemo/Demo

http://subclipse.tigris.org/

http://ankhsvn.open.collab.net/

http://www.assembla.com

Posteado por crimsomshadow bajo Opinión, Programación, Software, Software libre | Commentarios... » (3) |
13 de May del 2008

Diversión a raudales

Hasta hace algún tiempo yo tenía una visión muy clásica de los juegos de mesa y de cartas. Al pensar en un juego de mesa, me venían a la cabeza cosas como Monopoly, Trivial Pursuit o Scattergories. Y he de decir que me parece raro, pues he sido jugador y director de juego de rol interpretativo (nada de quemar posadas, mofas continuas o rol por jugar a algo como la mayoria) desde hace unos 10 años y por lo tanto he estado bastante cerca de otro tipo de juegos de mesa y de cartas que han pasado desapercibidos para mi durante mucho tiempo. Bueno, podria plantear Magic como una corta excepción.

Pero la cosa cambió cuando probé Arkham Horror. Siendo además muy de mi gusto las partidas de terror e investigación con toques de ocultismo estilo “La Llamada de Cthulhu“, me pareció un juego muy interesante y con un montón de elementos. Sin constar de una profundidad inusitada, se trata desde luego de un juego mucho más profundo que la mayoría de los juegos de mesa clásicos, con grandes posibilidades de ampliación gracias a las expansiones y desde luego, una mezcla de interes y diversión explosiva. Aun con la positiva experiencia que supuso, aun no entré en el terreno de estos juegos. Ya era muy difícil conseguir encontrar gente comprometida para jugar a rol interpretativo, pues ya conseguir además más tiempo para jugar a este tipo de juegos parecía utópico.

El tiempo siguió pasando y entonces pude probar “Fairy Tales“, “Erase una vez” y el excelentísimo “Ciudadelas“, todo cortesía de Atrus. Los dos primeros me gustaron mucho, y el tercero directamente me encantó, lo cual no era de extrañar dado como habían conseguido un juego tan fácil de aprender, tan amigable para cualquiera pero lo suficientemente profundo para hacer partidas muy interesantes y diferentes. Cada vez encontraba más gente a la que le gustaba jugar a estos juegos y la idea se iba haciendo tentadora. Estaba claro que los juegos de mesa eran en cierto modo más exclusivos en cuanto a que requieren gente con más ganas, más tiempo de aprendizaje y más tiempo de partida (tanto para el montaje como para la idea en si) aunque daban más profundidad a cambio, mientras que los de cartas hacian un poco el efecto contrario (hablando siempre en lineas generales).

Y ya hace poco tome la decisión, compré Arkham Horror y las expansiones al dia y Bang! The Bullet, mientras que Atrus, el cual ya poseía varios juegos pero también estaba emocionado por ver que cada vez más gente cercana a el los jugaba, compró Doom y su expansión. Y de momento, lo probado ha resultado ser una gran compra. Arkham Horror ha resultado en varias partidas muy interesantes y divertidas y unos muy buenos recuerdos para todos los jugadores. Bang! por su lado también ha dado unas cuantas partidas muy divertidas, aunque al menos el juego básico no parece muy profundo (¡aunque no por ello menos divertido!). Doom lo probaré seguramente mañana, y promete ser otro juegazo. Así da gusto.

Está bien haber descubierto este nuevo mundillo de ocio, tan complementario además a otras de mis aficiones como el rol o los videojuegos. Recomiendo a todo el mundo probar algunos, la diversión está asegurada.

Enlaces varios:

www.boardgamegeek.com/

www.planetongames.com/

Posteado por crimsomshadow bajo Ocio | Commentarios... » (4) |
16 de April del 2008

¿Mi lado BOFH?: Hoy, los lusers universitarios

Soy bastante tolerante con los usuarios. Tanto que he de confesar que esta es la primera vez que utilizo la palabra “luser”. Mantengo una pequeña red con servidor y una serie de aplicaciones en una empresa pequeña y trabajo de becario en la universidad en la que estudio como monitor de programación. Y mientras que soy relativamente más comprensible con el primer lugar de trabajo, en el segundo sitio me pongo enfermo. Para mi, no hay nada peor que alguien que estudia informática y es como si estuviera en un FP de plantar patatas.

Y es que vale, siempre está bien pensar que el 99% de la gente que se matricula en Ing. Informática no sabe lo que se va a encontrar, que es duro de pronto que te intenten meter en la cabeza las normas que rigen el mundo digital… Pero hay cosas que solo merecen una buena patada en el culo y un “Aquí no vuelvas” o bien “En esta carrera sobra la gente como tu”. Y no os creáis que esto es a la mínima, considero que soy de los que se esfuerzan para que la gente entienda y se integre.

Caso 1: El repetidor minúsculo

Estaba yo vigilando alegremente el primer examen práctico de Programación de primero cuando un chico, muy tímido, levanta la mano. Me acerco y con cara de verdadera duda me pregunta:

Repetidor minúsculo: Oye, ¿cual es este símbolo? (Señalando el enunciado un sitio donde estaba el carácter $)
crimsomshadow:
El dólar… ¬_¬
Repetidor minúsculo: Ahhhh. Ya. ¿Y como se escribe?
crimsomshadow: ¬_¬! Con Shift y 4
Repetidor minúsculo:
Repetidor minúsculo:
Repetidor minúsculo: ¿Y cual es la tecla Shift?
crimsomshadow: ¬_¬!!!!!

Lo triste de todo es que para quitarle peso al asunto comenté que 1º de carrera es durillo, a lo que me contestó que era repetidor. Me faltan las palabras.

Caso 2: Identificación

crimsomshadow: ¡Atended todos aquí! Todavía no está corriendo el tiempo de examen, así que atención a esto. Lo que teneis que programar debe quedar en un solo fichero que ubicareis en D:\Alumno\ExProg1A y lo llamareis tudni.dpr. Vamos, vuestro dni y la extensión dpr. Recordad, todo examen que no se haga en donde hemos dicho y con el nombre de fichero tal y como hemos indicado, no se corregirá. ¿Alguna duda?

La clase mira jocosa en una mezcla de “nos tratas como a tontos” y “dejanos hacer el examen, payaso” que tira para atrás. Dejamos un par de minutos para que hagan el fichero y nos puedan llamar si falla algo y todo va bien. No exagero si digo que un 20% de la clase grabó en mal sitio el fichero, y un 5% grabaron el fichero literalmente como “tudni.dpr” o_O

Caso 3: Ficheros y directorios

Esta ocurrió en el tercer examen práctico de programación, con 3 prácticas completas y dos examenes a espaldas de los alumnos.

raingna: Teneis que bajaros de Moodle los siguientes ficheros y dejarlos en D:\Alumno\ExProg3A, como siempre. Os dejo las rutas de los ficheros en internet y las rutas de como debe quedar aqui en el proyector-

En el proyector aparecen 3 rutas a los ficheros en moodle y 3 rutas del tipo d:\alumno\ExProg3A\fichero1.ext

Dejamos que la gente se los baje y no tardan en levantarse no una o dos manos, que ya sería grave, sino 6 manos. Voy hacia la primera en levantar y me dice:

Chica confundida: No me deja poner \ en el nombre del fichero.
crimsomshadow: Es que todo lo que hay hasta la última \ es la ruta en la que grabar el fichero, que es lo que hay despúes o_O
Chica confundida: ???
crimsomshadow: Mira, es así (Pongo los ficheros en su sitio)

Tras esto, intuyendo lo que se avecinaba, me alejé de la chica y dije en voz alta como debían grabar los ficheros descargados de Moodle. Todas las manos bajan al instante y yo con una cara de subnormal increíble. Todavía no diferenciaban entre directorio y fichero…

Caso 4: Compilar o ejecutar, esa es la cuestión

Fue gracioso cuando un chico nada más ni nada menos que de 4º de carrera declaró que su programa Java no compilaba porque le lanzaba una excepción de NullPointerException en su código. La cosa mejoró cuando demostró ni siquiera saber que era el modificador static y no tener muy claro lo que era instanciar un objeto. ¡Y de estos también los hay en 5º!

Podría aburriros con más historias de este pelo, pero mejor dejarlas para otra entrada más adelante, asi dosificamos ;-). Que triste, que triste…

Posteado por crimsomshadow bajo Opinión | Commentarios... » (8) |
11 de April del 2008

Java me odia

Java para mi es un poco como una buena dieta: es saludable y te viene bien seguirla pero tiene esas pequeñas grandes cosas que te dan por el culo con todas las de la ley. El caso es que este año las pocas asignaturas que puedo considerar de informática real de mi carrera (Ing. en Informática, 4º curso) todas tienen prácticas/proyectos en Java, y en todos los casos todo está pensado para que uses Eclipse.

Pero no me gusta Eclipse. Bueno, miento, Eclipse tiene algunas grandes cosas, pero su antifacilidad para mover proyectos de un lado a otro, el plugin tipico para hacer interfaces de usuario (Jigloo), y su muchas veces no tan bueno sistema de perspectivas hace que al final para mi se convierta en una experiencia de amor/odio trabajar con él. Sobre todo si las aplicaciones son gráficas. Para aplicaciones de consola Eclipse hace mejor su papel, desde luego.

Así que como iba diciendo, no me gusta Eclipse y si miramos a la otra acera tenemos Netbeans, el entorno propio de Sun. Este entorno, no carente de sus propios problemas, soluciona parcialmente el tema de las UI (y es más amigable con mi preferencia total a no usar layouts, técnica que creo muy útil cuando no tienes un diseñador). Pero aún con todo, la herramienta que teóricamente debería facilitarte el trabajo al final te ralentiza y enfurece.

Soy plenamente consciente (por desgracia) que bastante parte de mi desdén hacia el diseño de UIs con Java es culpa de la propia API de Java, la cual esta pensada para los layouts, utiliza modelos en los componentes de datos sin ni siquiera hacer un par de métodos para las operaciones comunes (añadir y quitar un objeto del componente al menos). Ya prefiero no hablar, aunque no sea tema de UI, el que Date esté deprecado en contra de GregorianCalendar, punto típico para obtener la fecha actual.

Pero bueno, al lio. Uno de los proyectillos consiste en implementar con sockets un protocolo de control de paneles informativos en una ciudad, y el cliente requiere cuatro o cinco ventanas, la primera, la de login.

Diseñando la ventana de login

Bien, estoy en la situación bien representada aquí arriba y quiero meter los botones de Salir y de Entrar al sistema.

Colocando el botón

Colocando el botón donde yo quiero que esté el botón

Vale, me dispongo a poner el botón y al soltarlo en el sitio en el que quiero independientemente de las lineas guia que me muestra el editor, ocurre lo siguiente:

Vaya, como no ¬_¬

Vale, ya sabía lo que me iba a encontrar. Netbeans tiende a situar los controles creando dependencias entre ellos, de forma que en cuanto se mueve uno o se elimina o se pone otro al lado, te cambia toda la ventana. Ya independientemente de lo que se pueda hacer tuneando la configuración (y yo no he encontrado mucho), creo que está clara la problemática. Esta es una ventana mínima. Y cuando haces una interfaz compleja, es para morirse.

Al final, vale, la solución está en distanciar los componentes y colocarlos a mano cambiando las coordenadas. En ningún momento he dicho que no se pueda subsanar, pero ¿a caso el editor no tiene como misión facilitar al diseñador de UIs crearlas como quiere, fácil y rápidamente? Netbeans va por su versión 6, y este problema no es nuevo precisamente.

Otra cosa que me hace mucha gracia es cuando el IDE decide que no puedes cambiar su código fuente:

No importa cuanto pulses Enter…

A mi personalmente me gustan las llaves en la misma linea vertical. Cuando el código engorda facilita visualizar los bloques (independientemente del tabulado) y evita problemas de pasarse o quedarse corto en cierres. Ocupa más el código, pero yo lo prefiero así, vaya. Pues no hay cojones. Tengo prohibido editar el código de la interfaz a mano, aunque sea bajo mi propio riesgo (salvo en un editor externo xD)

Estas pequeñas cosas y otras muchas son las que hacen que me de pereza trabajar con Java. Porque al final en vez de poder preocuparme de lo que quiero hacer, tengo que preocuparme de los problemas que me da el IDE y de las rarezas de la API, y al final retrasarme por cosas que no deberían preocuparme. Y es una pena, porque Java es multiplataforma, completo, con facilidad de integración y con un montón de buenas características. A ver si Mono y Monodevelop mejoran (sobre todo el segundo, que todavía les falta el debugger y mejorar mucho el diseñador) y se lo ponen más duro a Java.

Posteado por crimsomshadow bajo Opinión, Programación, Software | Comentarios... » (Uno) |
5 de April del 2008

Libertad para elegir

Todavía recuerdo cuando hace algunos años me molestaba tanto el activismo de la gente que seguía el software libre. Y he de decir que aunque menos, me sigue molestando bastante, y no quiero que se me confunda, pues lo apoyo y sigo: mi sistema operativo de elección es Debian, utilizo alternativas libres cuando la situación lo permite y prefiero utilizarlas salvo honrosas excepciones, lo que programo es libre…

Pero no siempre se trata del gusto por el software libre y su filosofía. Muchas veces se tiene un objetivo a desarrollar y ese no es momento para pegarse o para buscar. En esas situaciones, la herramienta que más rápida e indoloramente te soluciona el problema es la que vale. Porque si en un momento dado necesito convertir unos vídeos a toda leche y tengo un programa libre que en este caso no me lo deja tan fácil (y dejando claro que en ese ámbito soy un canelo) o uno no libre que me lo hace fácil y de una forma que yo entiendo, para mi en ese momento la elección está clara. Claro que después, una vez hecha la tarea y en un rato libre, la búsqueda de una herramienta libre similar está garantizada.

Ya al borde incluso de este tipo de situaciones, existe (yo diría que muy excepcionalmente) software propietario que por una o varias de sus características favorece el trabajo. A mi personalmente me cuesta olvidarme de que cuando quiero hacer algo el software que uso es una herramienta, y por tanto escojo la que me da más comodidad o me evita más problemas. ¿Soy por eso alguien que señalar con el dedo o alguien con poco criterio? ¿Desde cuando en un entorno en el que lo que se defiende es la libertad se puede juzgar a alguien precisamente por utilizar su libertad a elegir?

Comprendo y lucho también con la idea de que estamos en un mundo que aun con una capacidad comunicativa brutal (siendo internet el gran pilar de esta capacidad) cunde la desinformación. Hay mucha gente que realmente no elige porque no conoce las alternativas existentes o se les ha dado una información irreal o manipulada. Pero eso no excusa que al querer evitar un extremo caigamos en el otro. Todo el mundo tiene derecho a elegir, y lo que hace falta es intentar que la gente tenga información y educación suficiente para hacerlo, porque imponer algo, por mejor que sea en cualquiera de sus campos, no deja de ser una imposición y una privación de la libertad.

Por ejemplo, y lo reconozco abiertamente, me gusta .NET. No me gusta nada la política de Microsoft, ¿pero por ello he de dejar de programar en C# y utilizar una API para mi gusto mejor que la de Java? Claro, ahora que está avanzado el proyecto Mono estoy pasando todos mis proyectos que puedo de .NET al mismo y lo prefiero, pero dentro de la elección Java y .NET, ¿porque he de quedarme con Java si .NET en muchos casos favorece mi trabajo? Si, muchos pensaran en filosofía y sacrificio. Pero no creo que haya que echar piedras sobre algo por su origen. Creo que hay una no tan delgada linea que separa seguir la filosofía del software libre con exigir que todo el software que se utilice sea libre.

No quiero un mundo en el que el software libre se haya establecido por activismo y por presión. Yo quiero un mundo en el que se haya establecido porque la gente así lo elige por su propio criterio, por un software mejor construido, más fiable y más flexible y porque de verdad, cuando tenga que elegir entre Visual Studio 20xx o un entorno libre, no tenga que poner en la balanza la libertad contra un mejor IDE, sino que pueda decir: “¡Para que elegir el Visual Studio si xxxxx es mucho mejor!”. Hagamos mejor software y menos campañas “políticas”. Demosle al software libre el lugar que se merece haciéndolo más y más fuerte.

Posteado por crimsomshadow bajo Opinión, Software libre | Commentarios... » (4) |
2 de April del 2008

Hola mundo!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public class DivisionEntreCero
{
  public static void main()
  {
    InterestLevel blogInterestLevel;
    ActivityLevel activityLevel;
 
    System.Console.WriteLine("Hola mundo!");
 
    try
    {
      blogInterestLevel = InterestLevel.High;
      activityLevel = ActivityLevel.High;
      int index = Math.PI * 2 / 0;
    }
    catch(CannotReachInterestLevelException ex)
    {
      System.Console.WriteLine("Exception: The Operating System
                        will keep trying to provide interesting
                        contents to this blog. Thanks for being
                        patient and for your time.");
    }
    catch(NoEnoughActivityException ex)
    {
      System.Console.WriteLine("Exception: The task stack is
                           full and the dispatcher can´t get
                           everything done that fast. Please
                           be patient while the Operating
                           System solves this problem. Thanks
                           for being patient and for your time.");
    }
    finally
    {
      System.Console.WriteLine("Bienvenido a Division entre Cero.
                                Disfruta de tu estancia!");
    }
  }
}

Posteado por crimsomshadow bajo Sin categoria | Commentarios... » (5) |