jueves, 6 de abril de 2017

El arte de nombrar (parte 1)

En general, ponerle nombres a las cosas no suele ser tarea simple. En particular, hablando de programación, nombrar variables, clases, funciones, etc, no constituyen excepciones sino todo lo contrario. ¿Cuál es la verdadera importancia de un buen nombre en el código? ¿Qué haríamos sin "foo" y "bar"?

No cabe duda de que un nombre descriptivo es mejor que uno genérico. Obviamente "vel", "pos" y "acel" son mejores identificadores para una terna de variables que guardan el estado de un cuerpo rídigo que "a", "b" y "c". Pero... ¿alcanza? He aquí algunas consideraciones mayormente prácticas al respecto.

jueves, 16 de marzo de 2017

¿Existe el programador 10x?

Acabo de leer un post en otro blog sobre el "mítico programador 10x". El artículo discute la existencia de tal criatura (más abajo definición y resumen) y es muy interensante por sí mismo, pero más aún si se complementa con la discusión que aparece en sus comentarios. En la primera lectura me generó un cierto conjunto de pensamientos, y luego se fueron transformaron al empezar a leer esos comentarios.

Nota: no hace falta que lean aquel post para entender este, pero igual lo recomiendo.

martes, 7 de marzo de 2017

Reescribiendo PSeInt (parte 2.c): complicaciones

Si estuviera haciendo un intérprete para un lenguaje propio y para un uso real, seguramente tendría cuidado de ajustar el lenguaje para que sea simple de parsear. Esto es bueno por mil razones, pero la directa es facilitarle la vida al intérprete y a todas las demás herramientas que surjan junto al lenguaje. Es la clase de cosas que hacen que en un lenguaje como C++ algo tan simple como renombrar un método sea una pesadilla, mientras que en otros lenguajes más nuevos como Java en verdad es simple. En fin, volviendo al pseudocódigo, el pseudolenguaje que usamos no es de los súper simples para este punto de vista, y eso complica un poquito el nuevo diseño del intérprete.

miércoles, 22 de febrero de 2017

Reescribiendo PSeInt (parte 2.b): implementación

En la parte 2.a expliqué la estructura general del proceso de parseo e interpretación, indicando cuales serán las cuatro etapas y sus responsabilidades. En esta entrega, algunos detalles más sobre cómo implemento esto a nivel de clases y patrones de diseño.

viernes, 17 de febrero de 2017

Reescribiendo PSeInt (parte 2.a): arquitectura

Ya introduje en el primer post de esta serie los problemas que busco resolver en esta travesía de reescribir desde cero la parte más crítica de PSeInt. Ahora toca hablar un poco más en detalle de la nueva arquitectura interna de esta "parte".

viernes, 10 de febrero de 2017

Rehaciendo PSeInt (parte 1): motivación

Hace no mucho comenté que quería empezar a reescribir el código relacionado al parseo interno que hace el intérprete dentro de PSeInt. Todavía falta mucho para que el nuevo código llegue a "producción", pero ya hay varias cosas hechas y por ahora el cambio tiene buen color.

sábado, 31 de diciembre de 2016

¿Cómo empiezan ZinjaI, PSeInt y MotoGT el 2017?

Finalmente termina el año, y con él un cuatrimestre de trabajo, y llega un período de pseudo-descanso. El cuatrimestre que acaba de terminar, como todos, fue especialmente difícil: esta vez porque se me juntaron varias materias y terminé dando entre teorías y prácticas 6 clases por semana! Eso me dejo sin tiempo para mis proyectos libres... hasta hace unas semanas. Cuando terminó pude de a poco retomar los desarrollos. Ya leyeron las primeras novedades. Pero hay más en camino, y algunas muy importantes.

viernes, 16 de diciembre de 2016

Actualizando MinGW

El toolchain que incluía hasta hace 2 días el instalador de ZinjaI para Windows estaba muy desactualizado. En el momento en que lo armé, la versión más reciente de gcc disponible era la 4.8. Actualmente ya está por liberarse la 6.3, aunque las 5.x son las consideradas más estables. Hace rato que quería actualizar lo que uso en ZinjaI, pero en Windows, cada actualización implicaba muchísimos dolores de cabeza.

jueves, 3 de noviembre de 2016

Cómo "actualizar" la terminal con solo recompilar

Supongamos que estoy dando clases, resolviendo un ejemplo en el proyector. Me gusta armar las soluciones en vivo, para que se vea el proceso, las decisiones, y hasta las equivocaciones. Entonces, supongamos que empiezo a resolver una partecita de un problema y la pruebo. Si anda paso a otra, si falla retoco el código y vuelvo a probar. En cualquier caso, el ejemplo suele requerir unas cuantas ejecuciones de ese mismo código que va evolucionando de a poco. Estaría bueno tener en ZinjaI una facilidad como la PSeInt: que si mantengo la terminal abierta, al cambiar el código el programa se re-ejecuta automáticamente en esa terminal, "actualizando" el resultado.

No quiero algo tan complejo como esto o esto, ni cerca, sino algo bien bien simple, que no requiera nada de instrumentación, y que tampoco agregue ruido a la clase. Con ZinjaI y la ayuda de bash, es posible, hoy, sin esperar a actualizaciones.

lunes, 24 de octubre de 2016

El hardware y yo

El hardware y yo usualmente no nos llevamos bien. Se me da mejor con el software. Podría decir que he tenido mala suerte con las tres notebooks que tuve. La tercera, una Samsung, parecía ser la vencida, hasta que la semana pasada decidió tildarse para nunca volver a encender. Y por eso tuve que volver que a la segunda, una Vaio con mil problemas, sobre la cual podía hacerme una hamburguesa con solo apoyarla en el teclado y mandar a compilar un proyecto acorde al tiempo de cocción. Traté de solucionarlo, y pasó algo curioso.

miércoles, 31 de agosto de 2016

Aplicando cambios sin reiniciar en C/C++ (toma 2 -cont.)

Hace poco les conté cómo usar bibliotecas dinámicas para emular una suerte de "edit and continue" en cierto tipo de programas. La idea es simple: la parte que quería poder editar durante la ejecución (conjunto de clases y funciones) va a parar a una biblioteca dinámica. En lugar de dejar que el compilador la enlace al ejecutable, voy por la vía complicada y realizo la carga de la biblioteca "manualmente". Esto me da la posibilidad de descargarla y volverla a cargar en cualquier momento (cuando cambie). El post detallaba cómo hacerlo en GNU/Linux; pero ahora me di cuenta que en Windows hay cuatro problemas nuevos e interesantes para tener en cuenta.

lunes, 22 de agosto de 2016

Los Lunes de Software Libre

A partir de ahora los lunes serán los días en que más movimiento vean relacionado a ZinjaI, PSeInt, o incluso en este foro. Resulta que en este cuatrimestre estoy participando en el dictado de 3 materias en simultáneo, en lugar de 1 o 2 como venía ocurriendo hasta el pasado. Esto consume casi toda mi semana y me deja muy poco tiempo libre para repartir entre estos proyectos y muchas otras actividades personales. Así que decidí asignar un espacio de tiempo mínimo pero fijo para ZinjaI y PSeInt, de modo que al menos le dedique algunas horas cada semana.

lunes, 1 de agosto de 2016

Dedicado a ustedes, nuestros futuros pioneros...

Cucarachas Racing es un blog sobre programación, software libre y cosas técnicas, pero también se desliza cada tanto algún post diferente, a veces relacionado a la docencia o a la educación... como este.

viernes, 15 de julio de 2016

Aplicando cambios sin reiniciar en C/C++ (toma 2)

Hace ya un tiempo les mostré en este blog dos trucos interesantes que puede hacer ZinjaI durante la depuración: uno para modificar atributos de objetos mientras el programa corre, y otro para modificar el ejecutable durante una pausa en la depuración y continuar sin reiniciar. Ambos se basan en automatizar y esconder ciertas secuencias de comandos gdb, y ambos tienen serias limitaciones, especialmente el segundo. Hoy les traigo una nueva alternativa, que resulta bastante más flexible, pero a diferencia de las anteriores, se basa en instrumentar el código. Vean primero el resultado en el siguiente video, y después les explico cómo se logra.

martes, 28 de junio de 2016

Errores más a mano en ZinjaI

Estuve implementando algunos cambios en ZinjaI para poder hacer más cosas de las que hago con la lista de warnings y errores que da el compilador. Hasta hace poco, toda la salida se concentraba en el panel de resultados exclusivamente, pero ahora agregué otra forma de ver los errores que puede ser mucho más cómoda para pequeños programas autocontenidos, como los que hacemos en el aula en las clases de programación.