viernes, 26 de noviembre de 2010

Google Code-In en acción!

Muchos jovenes de menos de 18 años están participando en un verdadero maratón, resolviendo las tareas más variadas que les ponen en el mundo del software libre y abierto. El premio: $500 dólares y una invitación a google de los jóvenes más destacados. Tux4Kids, con todos sus proyectos también está participando, y los primeros resultados son muy halagadores.
En este momento me encuentro subiendo al repositorio un arquero que un joven creó para TuxHistory. también tuxMath ha tenido un avance muy importante; la reorganización de sus asteroides en niveles.
Inivito a todos lo interesados a darse una vuelta por www.google-melange.com para participar, o simplemente para observar el avance del concurso.

jueves, 12 de agosto de 2010

El verano ha terminado: TuxHistory



Les muestro la primera versión de prueba, limitada, pero funcional como resultado del Google Summer of Code. Falta mucho camino por recorrer para volver a este juego en una opción real de entretenimiento, pero las bases han sido creadas. Lo veo después de mucho esfuerzo, y siento que falta aún tanto.

sábado, 7 de agosto de 2010

Corrupción de memoria? La solución es

Esto será una entrada corta. Programando en C uno no puede menos que pensar que en algún momento los punteros, allocs y por supuesto los arreglos no funcionarán como uno espera. Pero encontrar estos errores entre míles de líneas de código definitivamente no es algo agradabale, claro. sin la ayuda de buenas herramientas.
Programando Tuxhistory me encontré con una muy desagradable sorpresa, un fallo de segmentación que se daba en los lugares mas diversos. Parecería como si hubiera una sinfín de ellos esparcidos por tódo el código. El debugging simple no daba con el responsable, gdb arrojaba lugares exactos donde sedaban, pero nada parecía estar mal, hasta que, gdb señaló al culpable a glib, malloc, etc... Esto no parecía ser más que una corrupción grave de memoria.
Por suerte logré encontrar el fabuloso VALGRIND! Wow! Una estupenda herramienta para poder identificar el verdadero orígen del problema y analizar las errores de escritura, lectura, corrupcion y leaks de memoria. Logré descubrir que el verdadero problema se encontraba en un arreglo que se debordaba con el paso del tiempo y corrompía la memoria aledaña. En verdad, si se encuentran en una situación como esta, les recomiendo ampliamente usar Valgrind http://valgrind.org/ y su excelente documentación: http://valgrind.org/docs/manual/manual.html
Y lo mejor es LIBRE bajo GPL!

jueves, 22 de julio de 2010

Mi configuración VIM

Agrego mi configuración de mi archivo .vimrc Lo hago para compartirlo con el todos y sobre todo para poderlo usar en otras computadoras.


syntax on
set hls
set expandtab
set textwidth=0
set tabstop=4
set softtabstop=4
set shiftwidth=4
set autoindent
set backspace=indent,eol,start
set incsearch
set ignorecase
set ruler
set wildmenu
set smarttab
set nu
set mouse=a

filetype indent on
filetype on
filetype plugin on

let g:pydiction_location = '/home/julio/.vim/after/ftplugin/pydiction/pydiction-1.2/complete-dict'

autocmd FileType python set omnifunc=pythoncomplete#Complete
autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS
autocmd FileType html set omnifunc=htmlcomplete#CompleteTags
autocmd FileType css set omnifunc=csscomplete#CompleteCSS
autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags
autocmd FileType php set omnifunc=phpcomplete#CompletePHP
autocmd FileType c set omnifunc=ccomplete#Complete

map <C-s>:setlocal spell spelllang=es_mx<CR>
map <C-e>:setlocal spell spelllang=en_us<CR>
map <C-q>:setlocal nospell<CR>

miércoles, 14 de julio de 2010

Arreglos dinámicos multidimensionales en C

En muchas ocaciones no queremos crear un arreglo que se utilice sólo la menoria necesaria en tiempo de ejecución. Sin embargo no resulta tan claro crear este tipo de arreglos de forma dinámica. Peor aún, si creamos un arreglo dentro de una función y queremos revolver el valor de un arreglo estatico esto sería imposible, ya que como es una variable local de la función se elimina antes de poder pasar el valor. Por lo tanto incluyo este pequeño código para poder realizar estas funciones.



#include <stdlib.h>
#define FREE(p) do { free(p); (p) = NULL; } while(0)

int **alloc_array(int, int);
void free_array(int **, int);

int **alloc_array(int x_size, int y_size)
{
int i;
int **array;
array = malloc(x_size * sizeof(int *));
if(array == NULL)
{
return NULL;
}
for(i = 0; i < x_size; i++)
{
array[i] = malloc(y_size * sizeof(int));
if(array[i] == NULL)
{
return NULL;
}
}
return array;
}

void free_array(int **array, int x_size)
{
int i;
for(i = 0; i < x_size; i++)
FREE(array[i]);
FREE(array);
}


Como vemos, tambien es necesario liberar la memoria que hemos reservado para nuestra memoria. Es necesario hacer esto para cada una de las variables y a su vez referenciar todos los punteros a NULL.

viernes, 11 de junio de 2010

Grep Recursivo

Agrego una rápida entrada, que es mas bien para provecho personal :P El comando grep en UNIX nos permite encontrar texto en archivos, una herramienta muy util a la hora de programar. Sin embargo esta magnífica herramienta no tiene una forma de iterar por los directorios hijos. Por lo tanto agrego una combinación entre find y grep que nos permite esto. Sientanse libres de jugar con el comando:

find . -type f -print | xargs grep "lo que se desea buscar" 

martes, 27 de abril de 2010

Aceptado otra vez en Google Summer of Code

Con la noticia de que he sido aceptado para este Google Summer of Code 2010, con Tux4Kids. Este año inscribí dos proyectos, uno en Oregon State University Open Source Lab con la idea de un Web Crawler Distribuido basado en Pydra, y otro para Tux4Kids, con la idea de crear un Juego RTS (Real Time Strategy) estilo Age of Empires para enseñar historia.
Fue aceptada el projecto para Tux4Kids. Espero sea del interés ver como se va creando el juego. Es un projecto ambicioso, y espero tener la capacidad para poder complirlo, pero creo que el gusto por este tipo de juegos es más importante que otra cosa :).
En este blog iré publicando los avances que trendré. Mientras tanto espero terminar el semestre lo antes posible y así dedicarme de lleno.
Saludos!

viernes, 16 de abril de 2010

Google Dev Fest 2010 México: ¿A donde llegaremos?

Hace algunas semanas me enteré de la existencia de este evento, que al parecer ya se viene celebrando en méxico desde hace algún tiempo. Se realizó en el Centro Banamex y trajo Don Dodge (ex empleado de Microsoft y vicepresidente de Napster jaja lol ), Ossama Alami, Chris Messina, Pamela Fox (se ve que es la pura fiesta), Chris Ramsdale y Chris Schalk como los principales desarrolladores. Los temas que se trataron fueron las tecnologías que ofrece google para el mundo de los desarrolladores: Google Web Toolkit, App Engine, Android API, Geo API, Google Wave API.
Las conferencias comenzaron tarde, algo que me tuvo que extrañar de sobremanera, con la asitencia de grupos de programadores (¿enviados de sus empresas?), amantes de Google y muchos programadores amantes de su oficio.
Lo imperdonable: La comida no fue de la calidad a la que nos acostumbra google. ¿Será porque somos simples programadores de México? Y la conexión wifi estuvo inaccesible casi todo el tiempo, incluso para las demos en vivo de los expositores.
En general, me dejó un mal sabor de boca. Google utiliza muchas tecnologías Open/Free Source como Python, pero gran parte de su tecnología (Excepto Chrome y Android) parecen estar restringidas, App Engine nos mantiene atados no a un API, a sus servidores y sus modelos, existen muchos mejores bibliotecas JavaScript que Google Web Toolkit (GWT), y OpenMaps debe volverse superior en los próximos años a Google Maps si queremos que pare la invasión a la privasidad (Google Street que horror!). Y Wave? Nada impresionante, solo se pretende que los desarrolladores contribuyan al desarrollo de Adds y Robots.
Lo se, google aporta mucho a la comunidad del Software Libre/Abierto con eventos como Google Summer of Code, GHOP y los financiamientos que realiza. Pero... el las áreas más importantes de esta empresa son software propietario aprovechando las ventajas del software libre, dando un manejo dudoso a la información(el 70%+ de la información del mundo) que manejan.
Si tanto nos costó a algunos dejar de depender de las tecnologías de una empresa (Microsoft) para caer en las garras de otra, NO GRACIAS.
Que mejor que escribir código en GPL, con herramientas GPL, listas para compliarse desde GNU/Linux para los sistemas operativos que queramos. Ahí si me sientiría bien.
Más info: http://www.googledevfest.com.mx/

jueves, 18 de febrero de 2010

Ortografía en VIM

VIM 7 viene con una grán novedad. Es un spell checker instalado por defecto. Antes, teníamos que descargar plugins opara poder usar estas características. Ahora es múcho más fácil utilizar VIM como editor LATEX, HTML, etc... En el momento en que VIM encuentra una falta de ortografía en nuestro texto podrá esta palabra con fondo rojo. Para usar vim-spell-checker utilizaremos los siguientes comandos:

:setlocal spell spelllang=es_MX

En algunas distribuciones modernas no se tiene los paquetes para español de ispell. Por lo tanto será necesario descargarlos. Ubuntu, en mi caso, intenta descargar los paquetes pero falla en ello. Descargue los paquetes de http://ftp.vim.org/vim/runtime/spell/ y colóquelos en /usr/share/vim/vim72/spell/ donde vim72 puede variar (esto para sistemas tipo debian, asegúrese de saber donde se encuentran los archivos shared de vim en su sistema).

Ahora que ya sirve el spell checker podemos utilizar una serie de comandos:

  • ]s Siguiente error ortográfico.
  • [s Errór ortográfico anterior.
  • zg Aprender palabra.
  • zw marcar palabra como error.
  • zug y zuw Deshace los comandos respectivos.
  • z= Muestra una lista de tamaño completo de palabras sugeridas
  • Ctrl-X s Muestra una lista de autocompletado con las palabra sugerdias. Esto en modo incerción.
Para quitar el corrector simplemente use:

:setlocal nospell

jueves, 28 de enero de 2010

Tux4Kids Cambia su repositorio de Subversion a Git

El fin de semana pasado Tux4Kids migra de subversion a Git. Definitivamene, uno de los problemas en el mundo es que existen ¡demasiados! sistemas de control de versiones, cada uno "mejor" que la otra. Yo hasta el momento no tengo autoridad para hablar del tema. Únicamente conozco CVS y Subversion. Éste último me encantó por su excelente libro online. Pero es hora de aprender un poco de Git. Comparto con ustedes una referencia rápida de comandos útiles para trabajar sobre este sistema:

git init crea un repositorio.
git clone clona un repositorio remoto.
git add Añade un archivo o directorio al repo. (Si lo agrega de forma recursiva)
git rm -f Elimina un archivo o directorio del arbol. La opción -f fuerza la elimiación de archivos locales.
git mv -f Mueve un directorio o archivo (Misma opción -f)
git checkout [rev] file -f Restaura archivo del branch o revisión (Si se indica) con la misma opción -f
git status Muestra el estatus del actual arbol.
git diff Diferecnias entre el arbol con respecto al remoto.
git commit -a "Subir" (commit) un archivo o todos con la opción
git reset --hard Regrear el arbol al pasado commit y --soft deshacer el commit pero mantener los archivos en arbol
git clean Elimiar archivos que no son del arbol
git blame Obtener lineas modificadas
git fetch Obtener archivos remotos
git pull Obtener archivos remotos y hacer merge con los locales
git checkout branch Cambiar el arbol a un branch indicado
git branch Lista de branch locales
git merge branche Lleva a cabo un merge del barnch con el arbol ptincipal.
git apply < file Aplicar un parche.
git archivo rev > fileExporta un parche de en contraste a una revisión data al archivo.


Para acercarnos a git en verdad que recomiendo: http://cworth.org/hgbook-git/tour/
Es un Tour fácil para adquirir los conocimientos necesarios para comenzar a trabajar sobre un proyecto.
Tambien recomiendo una referencia rápida (Sobre la cual está basada esta entrada): http://jonas.nitro.dk/git/quick-reference.html
Y por último, claro está, la documentación oficial de Git: http://www.kernel.org/pub/software/scm/git/docs/user-manual.html
Suerte probando y jugando con Git!

martes, 26 de enero de 2010

Proyecto Kickapoo

En los pasados días he trabajado para desempolvar un viejo proyecto que he tenido guardado. Se trata de Kickapoo, un web spider que extrae información de páginas MySpace utilizando BeautifulSoup, guardando la información en una base de datos mappeada con SQLALchemy. En lo general ya funcion, pero, claro está que hay que pulir el web spider aún más para no perder tanta información hasta ahora.
Principalmente busca por páginas con información acerca de native american, trata de clasificar de que tríbu son utilizando los lugares de residencia. Esto es una presunción que realiza el programa.
El siguiente paso en el proyecto es lograr llevar esta información a un algoritmo de clustering de aprenizaje no asistido para poder agrupar a las diversas personas en categorías de intereses.
Tambien pretendo realizar, con la información estable del MySpace un poco de estadística descriptiva ilustrando los resultados de la investigación.
He publicado el código bajo GPLv3 para que todos puedan ver y reusar el código.
Lo pueden encontrar bajo: https://sourceforge.net/projects/kickapoo/
y pueden navegar por código en: http://kickapoo.svn.sourceforge.net/viewvc/kickapoo/
Por último pueden crear una copia local con: svn co https://kickapoo.svn.sourceforge.net/svnroot/kickapoo kickapoo