martes, junio 28, 2005

Por fin

Ya por fin me han dado la ultima materia de la carrera, estos dos meses serán duros, pero ya cada vez falta menos. Por fin.

He estado pensando mucho en MonoUML, las cosas tan maravillosas que se podrían hacer... igual y me emociono mucho pero las posibilidades son infinitas a partir de un bueno diseñado, creo que me apasiono mucho.

Tengo una idea, cuando la logremos hacer seguro habremos hecho un excelente trabajo. Mi idea consiste en crear un modelo UML con dos clases, generar el código, implementar algo "útil" con ellas, compilarla y hacer ingeniería inversa, a partir de eso se generarían diagramas de secuencia y de colaboración de cada método, los casos de uso, y el diagrama de clases correspondiente, para luego generar la documentación completa de todo eso en formato Docboook, para después exportarlo a un formato leible por humanos, como HTML o PDF. ¡Excelente! ¿No?

Posiblemente dentro de un momento no habrá más programadores.

Y ya tengo proyecto de residencias profesionales... algo en JSP, a trabajar con el viejo Java :)

lunes, junio 27, 2005

2 días después

He regresado de mi viaje, un viaje de esos relámpago que usualmente hago, 2 días muy buenos :), me la pase excelente.

Ahora en el camino de regreso se me han ocurrido varias ideas para MonoUML, algunas cosas que al menos yo jámas he visto en otras CASE, es emocionante el pensar que mis ideas algún día estarán plasmadas.

Algo que veo con nostalgía es que Google no acepto nuestro proyecto como parte del Summer of Code, ya esperaba algo así pues las propuestas de Mono eran más de trabajo en el Core que aplicaciones, pero bueno ya para la otra.

Y si, sigo esperando la materia del curso de Verano, ¿Cuándo la darán? Supuestamente hoy, habrá que verse.

jueves, junio 23, 2005

A los viejos tiempos

He regresado a mi viejo Debian, nada como utilizar esta maravilla de distribución, estuve tentado a usar Gentoo, pero como que no. Nada como configurar todo a mano y saber que tienes instalado, cosa que con Ubuntu no sabías, es muy buena distribución no lo niego, pero me gustan más las cosas a la antigua.

Veo con agrado que la ultima versión de Mono en Debian unstable es 1.1.6-4, que se me hace una muy buena versión, pero aún así decidí instalar la versión de Mirco Bauer, también empaquetador de Mono Debian, que esta practicamente salida del horno, pero aún así hace explotar a MonoUML cuando se utiliza el teclado en el diálogo de Select Project.

Claro que los paquetes útiles como, i810switch para hacer salir al mismo tiempo en LCD y salida-CRT, muy útil en presentaciones, además del ndiswrapper-utils, para hacer funcionar tárjetas inálambricas (y posiblemente otras cosas) a partir de controladores de MS Windows, muy útil en tarjetas nuevas, no faltaron.

Faltan algunos detalles, pero ya quedarán. ¿Cómo va todo? muy bien... :)

martes, junio 21, 2005

JSEE y .NET

No se porque tener que escoger entre J2SE o .NET, ¿por qué casarse con alguno?.. y ser fieles para toda la vida. ¿Por qué no usar ambos? Utilizando una forma de comunicación estándar se crearía la solución, por ejemplo pensando en componentes distribuidos podríamos pensar en SOAP, y no pensar sólo en Bytecode o CIL.

Las tecnologías en Software ahora estan marcadas por dos pendientes: J2SE y .NET, no hay otras, ni el bello C++ con su potencia ni el popular Python entran en los ámbitos empresariales; y según muchos hay que escoger algún camino entre esas dos opciones. Toda la plataforma Java es muy buena, hay infinidad de cosas hechas y muy bien implementadas, es una tecnología tipo "UNIX" (por llamarla de una forma) que muchos años fue líder en desarrollo "pesado" (y probablemente lo sigue siendo) y que ahora tiembla por la "nueva" tecnología llamada .NET que viene a combatir por un gran trozo del mercado tomado por Sun y su Java. Es claro que poco a poco hay más desarrolladores .NET... ¿será bueno? ¿será malo?

Es bien sabido que muchos (en exceso) puristas del Software Libre creen que apoyar una tecnología como .NET, la cual es estandarte del desarrollo de software del gigante del monopolio, es un pecado mortal, y que no es más que tratar de "copiar" lo que ya esta y siempre querer imitar, al contrario de eso creo que se busca la superación, hablando en términos de software, para los entornos libres. A veces pienso que mono podría ser considerado como un arma de doble filo y que de alguna forma sólo se esta creando una compatibilidad hacia MS Windows haciendo de alguna forma compatibles las aplicaciones Windows en UNIX, pero luego sonrio viendo que de esa forma podremos "aprovecharnos" de que está escrita en .NET y es capaz de funcionar también en UNIX, es un arma de doble filo para ambos lados: tener más aplicaciones en UNIX es sin duda una idea maravillosa, pero ahora se comienzen a popularizar las aplicaciones en UNIX con costo suena peligroso... y no porque cuesten, sino porque lo más probable es que sean propietarias. La idea más tenebrosa de muchos es pensar que veran funcionar bajo mono un MS Office .NET o algo más escabroso... el MS Windows Media Player.

Yo se que con Java eres más productivo que con Python, Perl, PHP e incluso C, y no sólo eso también te creas carácter al escribir tu código, buscas hacerlo más limpio y haces aplicaciones más rápidamente (las aplicaciones gráficas no entran en esta categoría... porque Swing es un martirio si no tienes un RAD) y con menos riesgos, pero te tambíen te creas defectos que arrastras de ahí en adelante, como no liberar espacio, pues en Java no necesitas hacerlo, no declarar inicialmente variables, pues en Java es automático, y en sobretodo comienzas a necesitar más requerimientos de hardware para que tus aplicaciones funcionen normalmente sin congelamientos por rendering o loading, pero bueno, de todo lo bueno algo malo tendría que haber.

La selección de una u otra tecnología no debe ser por fanátismo sino por las necesidades que se nos presenten, si queremos escribir una aplicación a muy bajo nivel lo más probable es que escojamos Managed C# sobre Java o sobre C inclusive, aunque aquí de nuevo entran los purismos.

Ahora que la moda es hacer aplicaciones Web y aplicaciones para dispositivos móviles, no dudaria tomar .NET para las aplicaciones Web y J2SE para los dispositivos móviles, simplemente hay que mirar el soporte de las compañias para con Java, la mayoría de los teléfonos celulares actuales traen el JME y hacer aplicaciones Web con ASP.NET es una maravilla, JSP es bueno pero sinceramente muy lento en ejecución, el mismo detalle, más recursos por lo mismo.

Esto es como con las mujeres, a algunos les gustan voluminosas, con gran busto y enorme trasero, algunos las preferimos finas y con bonita sonrisa, pero si en alguno estamos de acuerdo ambos lados es que nos gustan las mujeres, es lo mismo: Queremos una tecnología con la que nos sintamos confortables, simplemente felices :)

En fin, hay de gustos a gustos... ¿Cual sufrir? Si con IKVM Java es totalmente usable desde .NET

Ah.. y MonoUML va muy bien...

domingo, junio 19, 2005

Documentando

No hay nada más agradable que utilizar tu aplicación para realizar tus tareas, y ahora que es momento de documentar MonoUML que mejor oportunidad que documentar tu aplicación con tu misma aplicación X-).

Entre Miguel Huerta y yo hemos terminado un demo que estará contenido en la documentación oficial de MonoUML (y que ahora sólo esta para un documento del Concurso de Creatividad de mi U) que busca como objetivo mostrar las maravillas de Mono y MonoUML, para esto hicimos 4 clases en 4 diferentes lenguajes, una clase por lenguaje, así de esta forma tenemos una clase escrita en Boo, una en Java, una en VB.NET y otra en C#.

La idea de esto crear una aplicación (muy breve en verdad) que esta realmente Orientada a Objetos y sirva como ejemplo para ser utilizada por MonoUML, en pocas palabras, un ejemplo más real. ¿Qué hace la aplicación? Pues calcula el valor máximo, mínimo y medio de una matriz de número fraccionarios.

Es decir, algo como esto:

Claro que no podía faltar un ejemplo de diagramas de caso de uso, este es de un método de la clase escrita en VB.NET, este diagrama será base para cuando implementemos los Diagramas de Secuencia y Diagramas de Colaboración, para hacer sus correspondientes ejemplos.

El código no es tan complejo en realidad:


Public Sub Calculate ()
  Dim sum As FractionalNumber
  sum = new FractionalNumber (0, 0)
  _maximum = _matrix (0, 0)
  _minimum = _matrix (0, 0)
  Dim i As Integer
  For i = 0 To _rows - 1
    Dim j As Integer
    For j = 0 To _columns - 1
      sum = sum.Addition (_matrix (i, j))
      If _matrix (i, j).GreaterThan (_maximum) Then
        _maximum = _matrix (i, j)
        End If
        If _matrix (i, j).LessThan (_minimum) Then
          _minimum = _matrix (i, j)
        End If
    Next
  Next
  _medium = sum.Division (new FractionalNumber (_rows * _columns, 1))
End Sub

Ahora con este documento que se escribio, me he dado cuenta de varias cosas:

  • No se porque la gente programa en Visual Basic .NET, entiendo a aquellos que vienen de MS Windows con el viejo Visual Basic, pues ahí en realidad ni programabas sólo arrastrabas "componentes", ¡pero vamos! muchos de los que comienzan en .NET prefieren VB.NET, lo bueno es que los que comienzan con mono se crean más carácter con C# (y si fuiste desarrollador Java ¡que mejor!). Di no a VB.NET
  • Boo es muy parecido a Python y es sencillo de aprender, pero no me gusta, no me agrada la idea de que los bloques se indiquen por indentación, pero bueno, cada quien tiene sus gustos.
  • La suma de Java + IKVM + mono posiblemente pronto sea algo que los programadores Java tomen en cuenta.
  • MonoUML necesita mejoras de usabilidad, hay que trabajar duro.
  • Si que hace falta un generador de documentación para MonoUML, unos tres clicks y tener toda tu documentación lista.
  • Creo que la solución al FN+Pet Sis (en portátiles Dell) = Congelamiento esta en un post viejo de BarraPunto.

Me emociona ver que ahora se pueden hacer cosas realmente útiles, claro, con un poco de hacking ;) pero se pueden. Ya estamos cumpliendo uno de los viejos objetivos que algún día Rodolfo y yo nos plantemos: Diagramas de Casos de Uso y Diagramas de Clases.

Debido a que el logo del Mono de MonoUML sale caro para hacer una serigrafía, decidí hacer un logo más sencillo, el resultado me gusto pero aun así necesita un poco más de pincelado para mejorarlo y que no se vea tan cuadrado en algunos aspecto, lo haré con más calma pronto.

jueves, junio 16, 2005

Recuento final

Por fin puedo decir que ha terminado el semestre, después de 2 semanas extras, ha terminado. El fin fue bueno, no excelente. Ahora a seguir con los demás planes.

Mañana sabré si fui aceptado en el curso de Verano. Si no es así, no importa, lo más probable es que haga mis Residencias Profesionales en un lugar local así que no habrá sufrimiento por el rechazo del curso de verano. Hay dos escenarios en cuestión a si soy o no aceptado, el primero es que sin duda apoyaré notablemente a la comunidad, y el otro es que estaré más metido a la U este duro, caluroso y corto mes. Cualquier escenario me conviene, terminar es la prioridad.

Hay algunas cosas que tengo planteado hacer, muchas relacionadas a MonoUML, una idea que esta dándome vueltas y vueltas por la cabeza es una que me menciono Katia 'KFC' Canépa, de una aplicación que actua como 'mentor' mientras vas realizando tu modelado, llamada WayPointer, por los demos se ve muy interesante, posiblemente sería un componente extra para nuestro proyecto, algo de IA no caé mal. La documentación debe estar terminada lo más pronto posible, yo siempre peleo que la documentación es lo más importante (y aunque esté al usuario no parece importarle y no la lea hay que hacerla) así que hay que marcar las trazas necesarias para esto, Jacob Cervantes ha bautizado este componente como MUDoc, osea MonoUML Documentor, una cosa interesante también. Además voy a comenzar a hacer la parte de Forward Engineering: Documentation, ¿Qué bonito sería hacer un modelado en UML y que a partir de este se genere el código en X lenguaje (cosa que ya esta :D) y que además te genere una bonita documentación en Docbook que tenga los famosos links entre objetos que tengan relación (como las clases), los comentarios escritos (owned comments), además de una captura de cada objeto, por ejemplo, si es un diagrama de clases una captura de ella, y demás cosas (estoy abierto a sugerencias), cosas cómo esas hacen verdaderamente productivo al Ingeniero de Software, pensar en sentarse a programar sin antes haber plasmado una solución implementable ya no sirve, pensar la solución mientras se programa es ineficiente. También hay que mejorar la usabilidad de MonoUML, hay varios diálogos que necesitan un retoque, corregir los bugs, mejorar el rendimiento, hacer la documentación MonoDoc y demás cosas que salgan.

En resúmen, si que hay cosas que hacer y falta mencionar todos esos proyectos de ganancia, los "laborales", además como que siento que Mono Hispano necesita un retoque gráfico... ¿no?

lunes, junio 13, 2005

¡Que calor!

¡QUE CALOR! No puede ser que haya tanto calor, estos días han estado tremendos, a pesar de que vivo en un lugar caluroso y estoy acostumbrado ahora si no puedo aguantar el calor, un calor de esos desesperantes, de picazón y que te hacen sudar considerablemente... lo bueno es que al menos hay aire y en la sombra casi no se nota...

Hay que seguir las indicaciones:

sábado, junio 11, 2005

Como la vida misma

A pesar de que esta semana no hubo clases, mejor dicho, a pesar de que esta semana ya estoy en vacaciones y sigo yendo a la U porque aún no termino de "liberar" todas mis materias, ando cansado, deben ser los efectos secundarios de tan agotador semestre. Este ha sido mi peor semestre, hablando en términos de calificaciones y demas egocentrismos sin razón, pero a pesar de lo malo de la escuela me he llevado muy buenas experiencias, buenos viajes, buenas cosas, crecimiento profesional y humano, el balanceo de este semestre en cuanto a todo lo que hice fue bueno pues todo salio bien, pero me hubiera gustado que hubiera salido mejor.

Prácticamente estoy a una materia de terminar mis estudios, falta menos cada vez... que rápido se va el tiempo.

Estos días he estado jugando un poco con XMLHttpRequest, un objeto para hacer llamadas en background utilizando JavaScript, interesante en verdad, ahora que las aplicaciones web estan de moda y todo mundo quiere tener su aplicación web, (cosa que años atrás dije que pasaría y por fin esta ocurriendo) es interesante usar tecnologías de este tipo para hacer aplicaciones más usables, como GMail o Flickr. Lo más interesante de esto es el XML de XMLHttpRequest, así por ejemplo el consumir un servicio Web enviando el clásico mensaje SOAP y esperando recibir una respuesta, lo hace útil, una solución lista para usarse. Si unimos esta tecnología con cosas viejas pero que dan un aspecto agradable a nuestro entorno, como CSS, podremos tener sin duda una aplicación construida dentro de los estándares, que funcione bien y que por supuesto, sirva correctamente. Lo único malo del desarrollo web desde mi punto de vista es que es muy tardado, aunque bueno con Ruby on Rails.

He estado viendo que no es tan difícil exportar de Gnome Canvas a una imagen JPEG o PNG, lo que si es difícil es tomar la parte a exportar, es decir tomar todo el canvas no sólo lo que se aprecia, actualmente la exportación de MonoUML de los diagramas se hace de la forma: "sólo lo que se ve se exporta", cosa que no me gusta, y estoy seguro que a nadie le gusta, aunque sigue la investigación de como tomar todo el dibujo de la instancia de Gnome.Canvas para salvarla posteriormente. Hay tantos detalles que he visto, desde el hecho que en ocasiones se exporta correctamente, en otras aparece el diálogo previo a la exportación dentro de la imagén exportada, he intentado con Application.EventsPending y a veces pasa y en otras no, en fin... habrá que seguir probando. Creo que cuando este listo UMLCanvas# 2.0, todos seremos verdaderamente felices.

Export Diagram

Mala exportación: Bad exportation
Buena exportación:

Pronto saldré de viaje, a distraerme, creo que ya es justo :) ¡Me toca!

domingo, junio 05, 2005

Configurando MonoUML

Ahora estoy un poco más libre en referente a la U, me faltan únicamente 3 materias y ¡listo! Terminará el semestre, pero a pesar de eso no tendré vacaciones, tomaré mi última materia en el curso de Verano, para terminar todas las materias (¡por fin!) y hacer tranquilamente las prácticas profesionales.

Pero mientras sabemos que es lo que pasará he avanzado un poco con cosas que son necesarias dentro de MonoUML, y eso es la configuración, he resuelto un viejo error mio, el viejo error del cargado después de la ingeniería inversa. Vamos avanzando pero faltan cosas muy importantes por hacer, como la documentación, Jacob se esta encargando de eso, haciendo un visor para navegar por nuestra documentación además de poder escribir y contribuir directamente desde esté, me gusta más la idea de usar estándares y creo que el estándar de la documentación dentro de Yelp es importante de tomar en cuenta, si queremos integrarnos totalmente a GNOME lo más importante es seguir esas ideas aunque la idea de contribuir desde el mismo visor me gusta también.

MonoUML Settings

He andado un poco inquieto... hasta hice en una noche un tutorial de lo que presente ahora que fui a la visita del GLIB en Irapuato, tristemente el sistema de regeneración de Mono Hispano tiene algunos problemas y se ha quedado colgada la regeneración del sitio, el CVS lo contiene así que se puede tomar de ahí, aunque se supone que ese error ya estaba resuelto habrá que esperar hasta que se resuelva para ver los cambios.

El tutorial es acerca de como consumir un Servicio Web escrito en C# a través de una aplicación Gtk#, también escrita en C#, por supuesto que todo funcionando con las maravillas de mono.

... espero que todo salga bien mañana. Suerte y ánimo.

sábado, junio 04, 2005

Al otro día

Ayer fue mi "mojada", es un tipo de tradición en mi universidad, que por lo que veo sólo nosotros la celebramos, se trata de que cada especialidad lleva una camión de agua en el ultimo día de clases (marcado por el calendario escolar) y se comienzan a mojar, es una locura, pues todas las especialidades andan corriendo de aquí para alla mojando a sus demás compañeros. Supongo que aquí es un tradición por el inmenso calor que en esta temporada hace, aunque también en el fin de semestre de invierno se realiza. Me queda la curiosidad cuando fue que comenzo esto.

Fue divertido, me la pasé bien, aunque entro la nostalgia de terminar los estudios... nos la pasamos muy bien todos. Ahora sólo falta terminar la entrega de las ultimas materias y todo listo.

¡Salud!

jueves, junio 02, 2005

No más cables :)

IOGEAR GWP512Finalmente he podido comprar mi tarjeta inalámbrica :D. Todo gracias al dinero que se obtuvo del premio del concurso de mi U. Compré una tarjeta modelo GWP512 de la marca IOGEAR, marca de la cual jamás habia escuchado, pero resulta servir bien la tarjeta (bueno... apenas van unos minutos que la tengo funcionando :P). De primera instancia no funciona directamente en Linux, hay que cargarla a partir de su driver para MS Windows XP utilizando el magnífico ndiswrapper, después de apt-get install ndiswrapper-utils hay que seguir toda la información de como instalarlo, la cual se encuentra en la página oficinal, en verdad que sirve. El driver que se necesita es mrv8k51, contenido en el CD de drivers de MS Windows de la tarjeta.

También ya tengo el libro que Rodolfo me recomendo mucho tiempo atrás, por fin llego, UML: Gota a gota, no es el libro más actualizado, pero es de fácil lectura y por las primeras páginas que leí se ve muy interesante, además de ese compre otro más: El Proceso Unificado de Desarrollo de Software, de los 3 amigos. Buenos libros en realidad. Este verano los leeré con detalle.

miércoles, junio 01, 2005

Más MonoUML

Pues con la novedad que hemos pasado a la siguiente ronda del concurso de mi Universidad, creo que la explicación sirvio, aunque estoy seguro que lo que más gusto fueron los demos. Felicidades al equipo, lo hemos hecho bien.

He pensado en comenzar a hacer la exportación de diagramas a SVG, me gusta utilizar formatos estándar además SVG es un formato que ya esta siendo soportado por la mayoria de editores gráficos, claro que exportar a JPEG o PNG seria más viable así que también será tomado en cuenta. Buscando por ahí encontre dos proyectos que actualmente pueden convertir un XMI a SVG, uml2svg y xmi2svg aunque hay unos detalles... nosotros implementamos el estándar de DI pero tal parece que se quejan al respecto y no pueden generar el SVG, uml2svg sólo permite XMI 1.2 mientras que xmi2svg soporta XMI 2.0 pero de todos modos no pueden realizar la exportación, espero mirar con más calma el XSLT para ver que se puede tomar de ahí y comenzar a hacer algo al respecto.

Claro que antes de eso, a solucionar un pequeño error en la Ingeniería Inversa, no se nota, por un truco que ahora esta en el SVN, pero debe de ser corregido para hacer más fluida la ingeniería inversa. Por cierto, que bien vamos con las descargas, desde que salió han habido más de 120 descargas, espero que pronto se reporten errores o peticiones para ver que se puede hacer.

Por otro lado, Rodolfo implemento una cosa maravillosa, la herencia en Actores, que sería lo mismo en otros objetos, en verdad se ve genial, y para muestra una pequeña captura de pantalla:

Use Cases

Creo que abriré un blog en personal de escritura exclusiva en inglés... como que hace falta, ¿no?