jueves, 6 de febrero de 2014

Adecuar la navegación hjkl de VIM a una posición más cómoda.

Sólo quiero compartiles una configuración muy simple en VIM que podría ayudar a varios haciendo más fácil la navegación. En vez de usar el desnaturalizado HJKL que viene por defecto en VIM para subir, bajar, e ir a izquierda y derecha, prefiero usar JKLÑ en mi teclado o para los teclados ingleses JKL;.
He aquí el código que hay que agregar a .vimrc en nuestro directorio $HOME.

set nocompatible
noremap ñ l
noremap l k
noremap k j
noremap j h
 De esta manera podremos usar ñ para ir a la izquierda, j para ir a la derecha,  k para bajar y l para subir.

Contar líneas de código C

¿Quieres saber cuántas líneas de código en C que has escrito en tus archivos de código fuente en una carpeta dada? ¿Además quieres contar sólo las líneas de código sin contar los comentarios y las líneas en blanco? Aquí un pequeño comando en nuestra terminal GNU/Linux o en cualquier sistema *nix.
cat * | sed '/^\s*#/d;/^\s*$/d' | wc -l
Obviamente se puede ajustar a todas las necesidades.

miércoles, 5 de febrero de 2014

¿Por qué sigue usándose Turbo C/C++ en las escuelas?

Turbo C es un compilador creado por Borland en 1987 para el desarrollo en MS-DOS(aunque también hubo versiones para Atari y OS/2)  el cual fue reemplazado por Turbo C++ en 1990.La última versión de Turbo C++, la 3.01, en 1992, con lo que posteriormente se concentraría la empresa en su producto Borland C++ y C++ Builder.
A pesar de ser un compilador histórico, donde muchos de nosotros dimos nuestros primeros pasos en la programación en C y C++, se debe reconocer que nuestro compilador de 16bits ha pasado a la historia y su lugar es estar en una vitrina en el museo de la informática. 
Sin embargo, un gran número de escuelas, tienen como su compilador de cabezera ese viejo conocido: ¡Turbo C! No es extraño encontrarnos hoy en día, en diversos foros de programación código que usa las viejas bibliotecas.
¿Me pueden ayudar con este código? ... y se lee: gotoxy(23,5); clrscr(); etc. 

Parecería ser que el tiempo no ha cambiado en nada, que MS-DOS sigue siendo un sistema operativo, y no una terminal emulada por los sistemas windows modernos. A este ritmo no nos sorprendería ver código que invoque resoluciones de 320x200 con 256 colores indexados.

                            void SetVideo (void)
                            {
                                    asm{
                                                mov ah,0
                                                mov al,13h
                                                int 10h
                                          }
                            }


A pesar de que tenemos buenos recuerdos, y extrañamos los hacks del Modo 13h y Modo X, y otras curiosidades, es una verdadera barbaridad que a los alumnos no se enseñe a escribir código en compiladores modernos. Pareciera ser que los maestros, sin ganas de desarrollar nuevos retos de programación para sus alumnos, intentan reproducir una y otra vez los mismos ejercicios obsoletos.
El problema no solo es que la lógica no se puede reducir a producir cuadros de texto con colores en una consola de los años 90's sobre MS-DOS, sino que no dejan una verdadera experiencia de como se realiza la programación en C y C++ para sistemas modernos (lo cual no necesariamente quiere decir que se requiera una GUI.)
Recomiendo, para todos aquellos a quienes aún les estén enseñando con este compilador obsoleto, guardarlo en una carpeta llamada muso y descargar la versión del compilador GCC u otro compilador de nueva generación (como VC++ en Windowos) para su sistema operativo. Si requiere alguien de programación gráfica para ver los resultados de su lógica palpables en la pantalla puede usar SDL, que es una excelente biblioteca gráfica multiplataforma. 


  • Para Windows recomiendo ampliamente usar la distribución más actual de MingW, en concreto esta: http://nuwen.net/mingw.html (Evite usar Dev-C++ que su desarrollo ha sido parado, y si requiere un entorno gráfico use http://wxdsgn.sourceforge.net/ a pesar de también ya llevar 2 años sin actividad.)
  • En GNU/Linux: Instalar el compilador GCC desde su repositorio. ej. en debian like: sudo apt-get install build-essential
  • En Mac OS X: Instale sus herramientas de desarrollador que incluirán la versión más adecuada de GCC. 

viernes, 25 de noviembre de 2011

Tux4Kids: Mentor en Google Code-In


Nuevamente Tux4Kids ha sido aceptado en el Google Code-In que es un concurso para jóvenes menores a 18 años, en el cual pueden contribuir de diversas formas a proyectos se software libre y abierto. Desde imágenes, investigaciones, hasta código, los jóvenes pueden incorporar sus esfuerzos a diversos proyectos que todos conocemos. Este año participan, además de Tux4Kids, FreeBSD, GNOME, OpenSUSE, Perl, VideoLAN, PySoy, KDE, entro otros.
Los premios por participante comienzan al realizar una contribución, ganando 25 dólares y una playera. Pero los premios aumentan hasta 500 dolares y un viaje todo pagado a GooglePlex en Mountain View California.
Para cualquier ayuda o comentario, estaré de asesor para el Proyecto Tux4Kids y pueden ponerse en contacto por este blog o por la lista oficial del proyecto. Espero se animen.

lunes, 21 de noviembre de 2011

Flask: Un mundo poderoso y minimalista para la programación Web


He descubierto el mundo de los "microframework"s en Python. Estoy tratando de escribir un nuevo proyecto web, con la intención de hacerlo a mi medida. La herramienta tradicional: Django. que suelo utilizar me ha comenzado a poner piedras en el camino al querer hacer ciertas cosas que no están dentro del estándar.

Al investigar, me tomé la molestia de experimentar con varias alternativas. Entre ellas TG, pyramid, cherrypy, web2py, etc... Pero me encantó la elegancia de Flask. Ya con anterioridad había llegado a la página, pero no me había tomado la molestia de revisar su documentación. Resulta ser una de las aplicaciones mejor documentadas, minimalistas, pero a la vez flexibles para todo los que necesito.

En mi proyecto utilizaré Jinja2 (que es por cierto mi sistema de Templates preferido) y que viene integrado desde la caja con Flask, junto con el ORM SQLAlchemy, que tiene una exención hecha para Flask. Les presento un rápido extracto de código para que se puedan dar una idea de lo confortable que es trabajar con este microframework.


from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
return 'Index Page'

@app.route('/hello')
def hello():
return 'Hello World'

if __name__ == '__main__':
app.run()


Para más información pueden visitar la página de Flask en http://flask.pocoo.org/ Estaré informando de las diversas dificultades, que seguramente enfrentaré, al desarrollar mi proyecto.

sábado, 3 de septiembre de 2011

Usuarios independientes en el Admin de Django

Muchas veces los programadores de Django quieren usar la poderosa herramienta del Admin para permitir funcionar como un centro de administración para los diversos usuarios que se registran en un sitio. Pero al generar usuarios de staff con acceso al admin, estos pueden editar cualquier campo, a pesar de no ser el suyo. Para evitar esto, es posible configurar nuestro archivo admin.py para sobre heredar el administrador y sobre escribir dos funciones. Veamos el código:


from django.contrib import admin
from myproject.pages.models import pagesPage



class pagesPageAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
if getattr(obj, 'added_by', None) is None:
obj.added_by = request.user
obj.last_modified_by = request.user
obj.save()

def queryset(self, request):
qs = super(pagesPageAdmin, self).queryset(request)

#If super-user, shows all rows
if request.user.is_superuser:
return qs
return qs.filter(added_by=request.user)


admin.site.register(pagesPage, pagesPageAdmin)

Tomando en cuenta que hemos declarado en models.py los necesarios campos, como lo es added_by como foreign key a User, de Auth. Espero ayude!

lunes, 4 de julio de 2011

Autocompletado de Django en VIM

Para poder usar el autocompletado de VIM en projectos Django es necearios tener estas lineas en nuestro archivo .vimrc


syntax on

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


Y con esto listo, copiar este script que podemos colocar en alguna dirección dentro del path como lo es /usr/local/bin o crear un directorio para el path local en el home.


#!/bin/bash

# Name: djvim
# Description: Script to automate the setup of the
# enviroment vars to use omicomplete in vim
# for Django projects.
# Usage: djvim filename
#
# Author: Jesús Manuel Mager Hois
# Copyright: GPL v3 or later


#Set the global vars to the Django project
function startvim(){
local arr=$(echo $1 | tr "/" "\n")
for x in $arr
do
#echo "[$x]"
local PROJECT=$x
done
echo $PROJECT
cd ..
local DIR=`pwd`
export PYTHONPATH=$PYTHONPATH:$DIR
export DJANGO_SETTINGS_MODULE=$PROJECT.settings
vim $ARGS
}

#Iter the directory tree to find setting.py
function finddjbase(){
cd ..
local DIRF=`pwd`
local FILEF=`echo "$DIRF/settings.py"`
if [ $DIRF == '/' ]
then
echo "Couldn't find the Django base directory"
exit
fi
echo "Trying in $DIRF"
if ( ! fileexists $FILEF )
then
finddjbase
else
startvim "$DIRF"
exit
fi
}

#Check if we can find setting.py
function fileexists(){
local f="$1"
if [ ! -f $f ]
then
echo "This is not the Django base directory... trying"
return 1
else
echo "settings.py FOUND at $1"
return 0
fi
}

#Main block

ARGS=$@
DIRN=`pwd`
FILEN=`echo "$DIRN/settings.py"`

if ( ! fileexists $FILEN )
then
finddjbase
else
startvim $DIRN
exit
fi



Y listo, podemos abrir nuestro archivo con fjvim nombredelarchivio.py