Más sobre funciones en Oregano

Ya en el post pasado había comentado el nuevo feature de poder agregar funciones. Lo primero que surgió como necesidad fue modificar la forma en como se muestran las cosas en la lista de la izquierda de la ventana de ploteo, para poder separar aquellas que eran nodos, de las funciones. Todo esto para tener más comodidad a la hora de querer seleccionar las cosas.

El primer intento fue bastante desastroso visualmente, aunque funcionaba. Lo que realmente quería mostrar era lo siguiente :

Concepto

Lo cual no fue nada fácil encontrar como realizar. La solución llegó en #gnome-hackers de FreeNode, donde federico me dio el hack necesario para hacerlo, quedando finalmente así :

Concepto

No le presten mucha atención a los colores, pues es otro hack a medio hacer y que todavía no me convence :-), pero la idea es también mostrar de que color se está dibujando cada curva para poder identificarlas fácilmente.

No es exactamente la idea original, pero está cerca. Más adelante veré si es posible mejorar la disposición de las celdas para que queden como a mi me gusta 🙂

La principal ventaja de este nuevo método es que para elegir que curvas dibujar no se depende de una “selección en la lista” lo cual hace mucho menos traumática la tarea, ya que antes accidentalmente era muy fácil romper la selección y tener que comenzar desde 0.

Update
Finalmente he logrado hacer exactamente lo que quería 🙂 … hoy descubrí gtk_tree_view_column_pack_start, el resto fue cuestión de minutos.

Concepto

Funciones en Oregano!

Luego de una semana agitada en la facultad necesitaba algo para relajar la mente, ¿y qué tarea doméstica puede ser mejor para ello que programar ? 🙂

Hace ya varias semanas había recibido una consultar sobre como plotear diferencias de potencias entre dos nodos, y la respuesta que tuve que dar fue “no se puede”. El problema principal es que GNU Cap no lo soporta, NgSpice creo que sí, aunque nunca he probado, y eso limitaba. Es por eso que decidí agregar funciones para graficar.

La operatoria es simple, se simula el circuito, con tantas puntas de prueba como se quiera, y luego en el gráfico se agregan funciones. Por ahora solo implementé (hackeado en el código) la resta, para poder hacer diferencias de potencial. El resultado se puede ver a continuación :

Funciones !!

No me he puesto a analizar si los resultados son coherentes, pero no es algo que me preocupe a esta hora de la noche, lo importante es que funcione :-D. Por lo menos, las gráficas de v(1)-v(2) y v(2)-v(1) son simétricas respecto de X y el resultado se ve coherente.

Lo que se intentó simular fue como varía la tensión en C1, el de arriba. Hay dos C1 ya que apareció un lindo bug de numeración en la edición del esquemático 🙂

Cualquier comentario acerca de la validez del resultado será bienvenida. También será de utilidad si alguien compara el resultado con OrCad o algún otro producto privativo,

Por último y me voy a dormir :-D, a los electrónicos les pido que me instruyan en que funciones son útiles, me resuena en la cabeza la palabra “transferencia”, pero no estoy muy seguro de a que se refiere, y más aún, que funciones para cada tipo de análisis (AC, DC, Fourier, Tiempo) son utilizadas cuando se analizan circuitos.

En cuando complete medianamente el código, el parche será publicado.

DarcsWeb

Hoy por la mañana Alberto nos sorprendió con uno de sus nuevo chiches. Cansado de la fea interfaz web de darcs, decidió hacer una propia. El resultado de eso es DarcsWeb (seguro que a Alberto no le va a gustar que capitalize el nombre, pero es más cool).

Para la estética uso de modelo a GitWeb, un browser del controlador de versiones Git, utilizado para el desarrollo del kernel Linux, que empezaron a usar cuando dejaron BitKeeper.

La elección fue realmente muy buena, ya que la interfaz es muy prolija y estéticamente agradable.

Aún no ha liberado el código, pues quiere primero arreglar un par de problemas. El principal objetivo va a ser soportar múltiples repositorios (la versión actual deja configurar uno solo).

Los screenshots obligados, comparando darcs.cgi y darcsweb.cgi :

En cuanto esté listo para ver la luz, será cuestión de hacer el paquetito obligado para Ubuntu 🙂

Soporte para Cairo 0.5

Hoy en los entremedios de estudio (esta semana estoy en el horno con la facultad) estuve trabajando en dar soporte a cairo 0.5. No fue difícil, en la mayoría de los casos con reemplazar nombres de funciones alcanzó.

Lo más complejo fue sin duda el manejo de superficies. Ahora cuando se crea un contexto cairo se le debe pasar la superficie sobre la cual dibujar (cambio muy lógico por cierto). Como usamos el backend Xlib, necesitamos 3 datos : Drawable, Display y Visual, cosas nada triviales de obtener un widget Gtk. En la documentación de Gdk está todo, pero costó encontrarlo. El resultado resumido a continuación :

  GdkDrawable* real_drawable;
  Display* dpy;
  Drawable drawable;
  gint x_off, y_off;
  gint width, height;
  gdk_window_get_internal_paint_info (window, &real_drawable, &x_off, &y_off);
  dpy = gdk_x11_drawable_get_xdisplay (real_drawable);
  drawable = gdk_x11_drawable_get_xid (real_drawable);
  gdk_drawable_get_size (real_drawable, &width, &height);
  target = cairo_xlib_surface_create (dpy, drawable,
      gdk_x11_visual_get_xvisual (gdk_drawable_get_visual (real_drawable)),
      width,
      height);
  cr = cairo_create (target);

Lindo, no?. El parche para probar está disponible acá (para aplicarlo : darcs apply oregano-cairo-0.5.patch). No lo voy a incluir en el repositorio hasta que Cairo 0.5 se empiece a ver estable en las distros. Por ahora solo lo he visto en Ubuntu Breezy (que es donde hice el trabajo).

Si alguien puede probarlo, se lo agradeceré. Aclaro que saque el exportar a PNG, aunque sería trivial rehacerlo.

Viaje a Cipolletti

El pasado fin de semana estuve en Cipolletti visitando a la familia. Como no podía ser de otra forma, mis sobrinos estan enormes y habladores. No paran un segundo 🙂

Ahora ya estoy de nuevo en carrera. Por suerte ayer me dieron la noticia de que aprobé Introducción a los Sistemas Distribuídos (el parcial), así que una preocupación menos.

Esta fue la oportunidad para volver a configurar el Gallery y subir las fotos. Ahora solo me resta volver a importar las fotos viejas.

Más PacMan!!

Si amigos!, mientras trato de hacer el código algo presentable, tengo nuevas novedades. Hoy Alan me hizo notar que mi juego estaba adaptado para celulares demasiados groso (pantallas de 240×240 pixels). Claro que no es la realidad de la mayoría.

Por lo tanto, me tuve que poner a implementar window-scrolling, y para que quede como a mi me gustaba, lo hice desde 0, logrando algo que realmente me gusta, tanto en código como visualmente.

Antes de liberarlo, les dejo un lindo swf mostrando como se ve en los distintos modelos, les voy a visando, son 4Mb.

UPDATE: Ya puse el código fuente disponible en mi repositorio de darcs. Para bajarlo (si tenés darcs instalado) : darcs get http://www.gazer.com.ar/repos/PacMan , Si no tenes darcs, no existís 🙂

Juegos con J2ME

PacMan!Ya he repetido una y otra vez lo que opino de Java, pero también en el último tiempo vengo diciendo que veía con buenos ojos J2ME, la edición para dispositivos móviles de esta plataforma. Mi interés inicial es hacer juegos con ella, por lo que en el último mes vengo lentamente avanzando en un juego totalmente innovador, nuevo y de concepto radical : un PacMan 🙂

La primera aproximación del juego es funcional, tenemos a PacMan que se mueve, detecta choques, come pastillitas y todo eso. También tenemos unos fantasmas medio lelos, que se mueven de manera pseduo-aleatoria, con una simple máquina de estados finidos.

Claro que el código apesta, es una mugre que fui toquetando a lo largo de un mes, mientras iba de tutorial en tutorial, pasando por la documentación de la API, pero se puede mejorar sin mucho esfuerzo. A nivel de implementación gráfico también apesta, ya que no uso backbuffering, lo que me obliga a redibujar la totalidad de la pantalla en cada iteración.

En fin, es un proyecto que me está gustando hacer, la plataforma está muy bien pensada (no así J2SE :-)) y creo que tiene un futuro en mis desarrollos. Lo interesante es toda la movida que se está lanzando sobre APIs 3D, que cada día más modelos de celulares soportan una calidad gráfica 3D que sorprende.

La imagen que adjunto es un screenshot del emulador de Sun con el juego en acción.