Valkertown Blog

Redirección a el nuevo blog en 5 segundos...

jueves, septiembre 29, 2005

Ya esta en la página del proyecto:



Esta terminal me quedo realmente bonita, espero que la sepan aprovechar.
Tengo que actualizar la página de este proyecto.


He logrado reducir el core de LUA eliminando el parser y el compilador, eso da como
resultado:

AVR Memory Usage:
-----------------
Device: atmega128

Program: 44363 bytes (33.8% Full)
(.text + .data + .bootloader)

Data: 1937 bytes (47.3% Full)
(.data + .bss + .noinit)


Lo que en comparación con el anterior es bastante bueno, sin embargo sigue siendo un poco
grande teniendo en cuenta que solamente el núcleo, aun faltan las librerias adicionales.

Creo que esto no dejará de ser más que una bonita idea para los AVR pues el uso de recursos es
excesivo para estos. De todas formas voy a dejar el port completo con una guia
especifica de como hacer que este lenguaje funcione.
Para una plataforma ARM es francamente muy conveniente.


EOT

miércoles, septiembre 28, 2005

Genial, Lua me ha compilado sin problemas para el ATMEGA128, algunos warnings
que hay que corregir, sobre todo que el piensa que int es por defecto de 32bits
y para los AVR int es de 8 bits, por lo que hay que hacer un monton de corrección
de tipos, adicionalmente hace llamadas localizadas que definitivamente no existen en
el AVR, y el accesso a archivos.

Hubo de eliminarse parte de las librerias math y io pues presentaron errores.

La math es posible hacerla funcionar por que el AVR tiene soporte para algunas
funciones matematicas.

Con esto el port se hace posible en poco tiempo, pronto publicare los resultados
pero pinta muy bien este scripting embedido.

$ avr-mem liblualib.a atmega128
AVR Memory Usage:
-----------------
Device: atmega128

Program: 24212 bytes (18.5% Full)
(.text + .data + .bootloader)

Data: 2572 bytes (62.8% Full)
(.data + .bss + .noinit)

$avr-mem liblua.a atmega128
AVR Memory Usage:
-----------------
Device: atmega128

Program: 66239 bytes (50.5% Full)
(.text + .data + .bootloader)

Data: 3009 bytes (73.5% Full)
(.data + .bss + .noinit)

Existen grandes problemas con el uso de la RAM, aunque aun liblua.a tiene el
parser y otras cosas que no se necesitan.

Es posible que toque reducir aun más el uso de RAM por que se queda sin ram para algo útil :P
Aunque igual se cuenta con la RAM externa es mejor dejar todo dentro de los primeros 4K de RAM
y el programa principal entre los primeros 64K, así que aún toca hacer bastante antes
de sacar una conclusión.

Para los targets ARM es bastante adecuado el uso de RAM pero el de ROM es un poco grande
toca optimizarlo.


EOT

martes, septiembre 27, 2005

Saludos, bien ya aceptaron el nuevo proyecto para todas
las herramientas no relacionadas conel yaucp el URL es:

Bandicoot, Bandicoot is a collection of organizing tools.

Aun no le he hecho una página, espero hacer una mejor que la del yaucp. :P
Estoy moviendo todo el desarrollo a este nuevo proyecto.

Acabo de terminar una pequeña terminal muy versatil para el puerto serie,
se llama MagicTerm esta escrita completamente en python
y depende de pyserial. El objetivo de esta terminal es apoyar el desarrollo
de aplicaciones y ayudar a procesar la información proveniente de los programas.

Este magic term tiene las siguientes capacidades ya disponibles:

  • Coincidir patrones y guardar en archivos diferentes según el patron

  • Reemplazar con multiples reglas antes de escribir en el archivo

  • Triggers de comandos de shell ante patrones


Quiero implementarle estas:

  • Triggers de respuestas ante patrones

  • Reemplazos antes de imprimir en la terminal

  • Keybindings para enviar comandos


Actualmente tiene una limitación pues esta utilizando readline para recibir del puerto serie
así que seria muy dificil trabajar con sniffers de protocolos sería practicamente imposible
trabajar ya que estos no traen consigo retornos de carro, necesito pensar otra forma
de capturar los caracteres para la coincidencia de patrones.

Encontre este lenguaje de scripting, LUA


Parece ser mucho más directo para "encajar" en un uC pequeño tipo AVR, ARM.
Voy a empezar con el port del AVR, ciertamente no alcanza a caber en un
target pequeño así que hay que pensar directamente en un atmega64 por lo menos.

La idea del lenguaje de scripting es reducir un poco el tiempo de diseño de algunas tareas
tontas o de permitir diseñar ciertas tareas no criticas en menos tiempo, ampliando un
poco así la prestación del dispositivo, no es el objetivo de este reemplazar un
lenguaje de programación real.


EOT

lunes, septiembre 26, 2005

Finalmente alguien encontro este modo de emacs para hacer
algo que vi en Kate y en otros editores pero no tenia ni idea
de como realizarlo en emacs, aunque los "keybindings" por defectos
son terribles aquí va un poco de código para añadir al ~/.emacs

66 (add-hook 'c-mode-hook 'hs-minor-mode)
67 (add-hook 'c++-mode-hook 'hs-minor-mode)
68 (add-hook 'c++-mode-hook 'cc++-keys)
69 (add-hook 'c-mode-hook 'cc++-keys)
70 ;;;;;;;;;;;;;;;;;;;;;; Complementar los modos de C y C++
71 (global-unset-key [f1])
72 (global-unset-key [f2])
73 (global-unset-key [f3])
74 (global-unset-key [f4])
75
76 (defun cc++-keys ()
77 (defvar c++-mode-map nil) ;; No-op actually
78 (defvar c-mode-map nil) ;; No-op actually
79 (define-key c-mode-map [f1] 'hs-toggle-hiding)
80 (define-key c-mode-map [f2] 'hs-show-block)
81 (define-key c-mode-map [f3] 'hs-hide-block)
82 (define-key c-mode-map [f4] 'hs-hide-all)
83 (define-key c-mode-map [\C-f2] 'hs-hide-level)
84 (define-key c-mode-map [\C-f4] 'hs-show-all)
85 (define-key c++-mode-map [f1] 'hs-toggle-hiding)
86 (define-key c++-mode-map [f2] 'hs-show-block)
87 (define-key c++-mode-map [f3] 'hs-hide-block)
88 (define-key c++-mode-map [f4] 'hs-hide-all)
89 (define-key c++-mode-map [\C-f2] 'hs-hide-level)
90 (define-key c++-mode-map [\C-f4] 'hs-show-all)
91 )

Con esto se añaden unos bonitos keybindings para las teclas f1 a f4 pero
solo en los modos c y c++, como es posible que los modos de otros lenguajes
se entiendan con el hs-minor-mode, quiza seria mejor así el código:

66 (add-hook 'c-mode-hook 'hs-minor-mode)
67 (add-hook 'c++-mode-hook 'hs-minor-mode)
68 (add-hook 'cperl-mode-hook 'hs-minor-mode)
69 ;;;;;;;;;;;;;;;;;;;;;; Complementar los modos de C y C++
70 (global-unset-key [f1])
71 (global-unset-key [f2])
72 (global-unset-key [f3])
73 (global-unset-key [f4])
74
75 (global-set-key [f1] 'hs-toggle-hiding)
76 (global-set-key [f2] 'hs-show-block)
77 (global-set-key [f3] 'hs-hide-block)
78 (global-set-key [f4] 'hs-hide-all)
79 (global-set-key [\C-f2] 'hs-hide-level)
80 (global-set-key [\C-f4] 'hs-show-all)


El problema es que los keybindings quedarian enlazados para todos los otros modos que
no soportan el hs-minor-mode y quiza se podrian utilizar para esto...
¿A ver alguna idea para hacer esto más bonito?

EOT

domingo, septiembre 25, 2005

Finalmente he publicado un el release oficial 1.0alpha para el name-changer

https://sourceforge.net/projects/yaucp/

Con esto ya dejo por ahora de trabajar en este proyecto de la forma que he trabajado
en el ya que esta casi completo, por ahora me dedicare a corregir los errores
que se encuentren y a mejorar el código.

Espero que lo sepan apreciar ya que es terriblemente útil aunque como resuelve
los problemas tan efectivamente es de poco uso.

El log que salio de mi colección de musica fue de 13M y le cambio el nombre a
casi todo, pero, ahora todos los nombres de estos archivos son DECENTES!.


EOT

martes, septiembre 20, 2005

Snap! Bueno por fin le puse contador de visitas a esta
página, es algo bueno para mi aunque un poco inoficioso.

Bien acabo de subir al CVS dentro del repo tools las
primeras versiones de un programa que he querido escribir
desde hacer rato:

Name Changer

Herulor me ha estado ayudando mucho con el diseño,
las especificaciones y como siempre con la corrección de los errores
de reddacción que a él le parezcan, usualmente confio bastante en su juicio
para esas cosas.
Supongo que como ahora soy yo el que ha creado más código Herulor esta un poco
relegado en esa parte pero es solo cuestión de tiempo para que él participe.

Hasta ahora lo he llevado bastante orientado a objetos y esta escrito completamente
en python, por ahora lo que llevo al momento de este envio es bastante sofisticado pero
de uso muy simple.

Features :



  • Can use Config file for rules that let define naming schemes
    or character replacements.

  • CLI Based, since it's intended for CLI lovers.

  • Can read parameters from CLI for replacements.

  • Log capabilities.




==> TODO <==



  • Interactive Mode.

  • Rules that makes single replacement interactive.

  • Rules that can make name changer ignore some entries

  • Color Logs.

  • Undo abilitiy.




Bueno eso es todo, quizá este programa junto con los otros que he creado
queden pronto completados para crearles su propio poyecto en sourceforgue.



EOT

lunes, septiembre 12, 2005


Bien, en estos dias me he dedicado a un proyecto sencillo y un poco apartado de lo
usual, me puse a hacer esto:



http://valkertown.sytes.net/deepspawn/CurrentPlayList.php



El link para escuchar la radio funciona, aunque es una pena que el streaming desde XMMS
consuma tantos recursos(CPU), pero igual solo tengo AB para tres clientes...
Así que si les interesa algo de la lista, click the link.
No funcionaria todo el tiempo pues a veces necesito CPU o AB de subida.
Para hacer streaming se utiliza y recomiendo estos paquetes, igual hacen falta
los encoders sobre los que dependen Ices y oddcast:


  1. IceCast

  2. Ices

  3. oddcast-xmms




Aquí va un link a una animación que hizo Humberto un compañero de la U, como
el se tomo el tiempo de hacerla, espero que la vean.



Animación Tonta





EOT

miércoles, septiembre 07, 2005


Bien, hoy va una idea que me ha resultado muy agradable, aunque
mientras escogí el intervalo necesario llego a ser una molestia.



Usualmente trabajo en tantos proyectos o tengo tantas ideas
que es difícil llevar la cuenta o no perderme demasiado tiempo
en proyectos y desatender otros, de esta forma se me ocurrió
utilizar XOSD para
imprimir ocasionalmente una lista de tareas o ideas en la pantalla.



Actualmente yo utilizo el XOSD en bastantes programas, desde el
uso más simple usando el plugin para XMMS para ver algunos mensajes
de XMMS como la identificación del archivo en reproducción
el volumen, y algunos otros mensajes que traen información útil.



Ocasionalmente utilizo el osd_cat en unión con tail -f para
imprimir algún log del que me interese estar enterado, algo así:



$tail -f /var/log/secure | osd_cat



Ahora el uso de osd_cat es muy sencillo, no lo voy
a explicar aquí sin embargo voy a colocar un pequeño script
que pone una lista TODO en la pantalla:



Listing: xosd_TODO

-------------------------------------------------------------------------------

#!/bin/sh



FONT="-*-courier-*-r-normal-*-*-*-*-*-*-*-*-*"

OPTIONS="-p top -A left -f $FONT -c red -s black -O 3 -d 1 -l 20 -w "

TODO_FILE=$HOME/TODO

/usr/local/bin/osd_cat $OPTIONS $TODO_FILE

-------------------------------------------------------------------------------


Así ahora es crear el archivo $HOME/TODO y luego de esto llamar
el xosd_TODO, la fuente puede ser cambiada según lo que entrega
el xfontsel, el -l n dice que ubique n lineas en la pantalla y haga
scroll sobre estas, para hacer un scroll limpio de la primera a la última
linea del archivo, recomiendo añadir algo así como n lineas en blanco
al principio y final del archivo así se pueden leer
cómodamente desde la primera a la última linea



Como la idea es que este método nos recuerde constantemente
la lista de tareas el paso a seguir es añadir una tarea en el
cron del usuario.



$crontab -e


Y se añade esta linea


*/60 * * * * DISPLAY=localhost:0.0 $HOME/bin/xosd_TODO 2>&1 > /dev/null


El */60 le dice que cada 60 minutos dispare nuestro script y se redirigen
tanto la salida y el error al vacío para evitar correos molestos provenientes
del cron.


Ahora por qué DISPLAY=localhost:0.0 ?
La respuesta es por que el cron no tiene acceso al servidor X, así
que este método requiere añadir al .xinitrc (o en algún otro sitio
donde no tengamos que preocuparnos por dar este comando a mano):


$xhost +localhost


Esto si se confía plenamente en los usuarios que se registran en la máquina
simultáneamente, pues esto les permitiría dirigirnos programas
que se conecten al servidor X y puede llegar a ser molesto, en
sí no es una buena idea y pensaría que es una falla en la seguridad pero
aún no he encontrado un método que me permita restringir la conexión a un
programa o activar el cron con acceso al servidor particular X.


Es bueno recordar que el 0.0 es el identificador tradicional para
el primer servidor X que se inicia en la máquina si se trabaja con otro
identificador para el servidor X en uso hay que cambiarlo en la linea
del cron.


No complico más este HOWTO pero creo que se puede
mejorar aun más el método que uso para ponerlo a funcionar
automatizar un poco y sobre todo arreglar los
problemas de seguridad.



EOT

martes, septiembre 06, 2005

Bien, un resumen en desorden de lo que he estado haciendo


Modulador/Demodulador 8QAM usando un AVR-ATMega8535 y un montón de
integrados más es un proyecto de la U, so nada realmente interesante,
voy a crear un repo más en el CVS para poner esta clase de proyectos
de la U que no son realmente interesantes pero son una oportunidad más
para aprender herramientas nuevas.

En esta ocasión añadí al
desarrollo del proyecto dos herramientas nuevas

  1. Graphviz Hacer gráficas en este lenguaje es
    muy simple y ahorra mucho tiempo a los que no tenemos habilidad alguna
    para hacer buenos layouts de ideas organizadas
  2. Circuit
    Macros
    A pesar de tener una sintaxis hedionda, fue sencillo
    escribir un interprete de netlist sencillo y que los pase a estos circuit
    macros

así que viva la automatización de la generación de documentación,
cada vez es más tiempo al
diseño y menos a realizar esas tareas hediondas de repetición.

Luego:
I tried to run uCLinux on a small target but
it's stupidly incomplete, I almost had to do the whole porting by hand
cuz the incom pletness of the project, then noticed the need of a c++
compiler that didn't co mpile at all for the required version of the libc,
and I broke my eCos
cross compiler to do that, then I need to recompile my crosscompilers
for c/c++ for my target again.
I will try uCLinux again but when
I have a proper target with proper support like the one around JuiceBox



He estado probando algunas herramientas de desarrollo interesantes.

  1. PyGTK- Glade Es un buen entorno de desarrollo,
    ahorra mucho trabajo, hice un pequeño programa para hacer interfase con
    el celular usando herramientas libres, no es la gran cosa, no creo que
    lo publique
  2. OGRE-PyOGRE Excelente API para
    crear escenas, me gustaría mucho crear un demo haciendo uso de estas
    herramientas pero no tengo tiempo suficiente para crear nada, solo he
    escrito un par de ejemplos y mi juego favorito de escribir en cuanto
    lenguaje/API aprendo, PONG
  3. Embedded Python
    Ya hice un pequeño programa en C que incluye el interprete de Python,
    es sencillo y me da un grupo de ideas muy interesantes, sin embargo he
    leído el código fuente de Python con la esperanza de poder llevarlo a
    un nivel tipo AVR/ARM, es posible(¿?) pero realmente me tomaría mucho
    tiempo hacerlo, sin embargo esto me lleva a pensar en otro lenguaje de
    scripting que quizá si pueda encajar(embed) en los AVR, sobre los ARM es mucho
    más sencillo por lo que no me atrae tanto el hacerlo.


Medrano trajo una extensión de Firefox interesante: ForecastFox, me
ha resultado útil. Voy a colocar un tab nuevo en el blog para colocar
mis sugerencias de extensiones/temas de FireFox/ThunderBird.



El grupo Pandesmos ya lleva mucho tiempo sin página web, es hora de
empezar a reunir fondos y gente para revivir el grupo... Me gustaría
intentar un nuevo entorno CMS llamado PLONE, sin embargo
no todos los hostings pagos soportan este CMS, dependiendo de lo que se
consiga se decidirá sobre el CMS para este portal.

En estos
días publico algunas ideas "nuevas" para el desktop y herramientas que
utilizo regularmente en mi box (no solo yo, Herulor y medrano usualmente
las usan también). Usualmente estas herramientas o ideas, ayudan en la
organización o en la comodidad de GNU(Linux/BSD). Les recomiendo ver
el último Enlightenment, se ve demasiado bien, aunque sigue sin gustarme
:P




EOT