Corrector OrtoTRÁGICO

Esta fue de esas oportunidades en que el plan A en la prácticamente se vuelve totalmente opuesto.

Mi idea era realizar la tarea de Estructuras de Datos en no más de una semana, y así tener el resto del tiempo (3-4 semanas) libre para dedicarme a estudiar para las pruebas. Pero debido a complicaciones del más allá, el plan cambió radicalmente a “hacer la tarea como sea, y estudia la última semana, cuando llegan todas las pruebas”.

El enunciado del problema pedía hacer un script de corrección ortográfico, en C y que funcionara en Linux, que tomara un archivo de texto con las palabras (diccionario 1), con palabras erróneas y su corrección (diciconario 2) y un archivo de prueba, que se debe corregir en base a los diccionarios. La idea es usar TDA de Listas Enlazadas para las palabras.

Hasta ahí, me asuste un poco, porque pensé que al “anudar” los Nodos, recorrerlos, o agregar/eliminar se me iban a perder los punteros. Pero nada… todo eso era simple (finalmente ese era el objetivo de la tarea), sin embargo, fue un parto el manejo de cadenas. Pensé que mi experiencia en C++ podría ayudar, leí cuanto manual hablaba de punteros, arrays, cadenas de char, etc… pero me ocurrían fallos muy curiosos:

  • Las funciones estándar de ANSI C para cadenas se comportaban en forma errática con el caracter final de cadena (o caracter nulo ”)
  • Al pedir memoria para una cadena, se caía DENTRO de un malloc
  • Las funciones que s hacían llamada al malloc que se caía, funcionanban bien en forma asilada, pero cuando las ponía dentro de un ciclo comenzaban a aparecer comportamientos erráticos, siendo que ninguna variable era estática, ni habían funciones recursivas, como para que el efecto fuera acumulativo.
  • Al llamar a las funciones problemáticas, a veces se caía luego de llamadas posteriores a otras funciones que no tenían nada que ver.

Acá esta mi primera versión.

En fin, fue un infierno tratar con cadenas de texto en C. Finalmente, gracias a un usuario del irc Powers, pude completar la maldita tarea, el domingo pasado, día antes de la entrega. Este es el producto final.

En C++ no he estado libre de problemas.

Read the rest of this entry »

Posted in desarrollo. Etiquetas:. No Comments »

Como hacer una DLL en Visual C++ y que el mismo código funcione en otros compiadores.

Bueno, este problema es clásico, MS versus resto del mundo. Ya antes me ha ocurrido haciendo páginas web, tener que preocuparse de Internet Explorer y el resto de navegadores.

Mientras intentaba compilar GDT en Visual C++ 2005 Express, me encontré con un problema muy extraño.

Finalmente logre arreglar partes del código para que no me arrojara warnings en tiempo de compilación.

Pero en tiempo de enlazado (en el linker o vínculador) me daba mensajes raros cuando intentaba enlazar un programa de ejemplo con la librería.

El mensaje exactamente símbolo externo “símbolo” sin resolver. Ese símbolo podía ser una variable, una función, una clase, una una propiedad un método, etc…

El problema se produce porque en VC++ se deben exportar los métodos que se tomarán como “visibles” fuera de la librería dinámica (los métodos a los que el programa que se enlaza con ella tendrá acceso).

Según este tutorial de MSDN, la solución pasa por añadir __declspec(dllexport) antes de cada símbolo que se desea exportar a la DLL. El problema es que yo quiero que mi código sea multiplataforma, y esa sentencia claramente no me la va a tomar un compilador como GCC.

Esta es mi solución:

Read the rest of this entry »

Posted in desarrollo. Etiquetas:. No Comments »

Corto tiempo de las sesiones PHP en K/Ubuntu Feisty

PHP LogoEn este prolífico día de blog, me dí cuenta que mientras trabajaba con aplicaciones PHP en el servidor local Apache que tengo instalado en Kubuntu, al estar alejado mucho tiempo con una página abierta sin tocarla, se pierde muy rápido la sesión.

Lógicamente la página debe iniciar una sesión.

El problema es que si me demoro mucho en escribir un pedazo de código y probarlo, debo volver a hacer login.

La solución al parecer es bastante sencilla.

Read the rest of this entry »

Importancia de Modelar bien la base de datos ANTES de poblarla con datos

Supongamos que luego hemos iniciado un proyecto que involucra una base datos. Ya funciona el programa, busca/ingresa/edita/elimina datos como se suele hacer.

Luego nos damos que el programa comienza a dar síntomas extraños, como desplegar datos demás, mostrar datos cruzados, que no muestre lo que debería o derechamente nos tira errores. Entonces nos damos cuenta que la base datos es el problema, ya que hay datos cuyas relaciones se han quebrado por ingresar mal un dato, o borrar registros.

He acá la importancia de definir las restricciones ANTES de ocupar la base de datos.

Read the rest of this entry »

Posted in desarrollo. Etiquetas:. No Comments »

Ajax. No tan dificil como pensaba

Extraño, pero me vi en la NECESIDAD de implementar Ajax. y destaco necesidad, porque perfectamente se puede hacer una app basada en web sin una linea de javascript.

El problema surgió porque en el modulo de ingreso de ventas de mi “sistema-manejador-de-tiendas-sin-nombre” necesitaba un formulario que se pudiera llenar de productos, a partir de una lista de productos preexistente.

Podría haberlo hecho con un formulario con un campo select, y un boton añadir que al presionarlo  añadiera un producto, recargara la página y perder precioso tiempo en la tediosa tarea de ingresar los productos.

Sin embargo, con Ajax resulto mucho más rápido, y de un acabado más fino.

Read the rest of this entry »

GDT en OpenSuse 10.2

Así es. Logre compilar perfectamente GDT en OpenSuse. Realmente es lo mismo que en Kubuntu, salvo que en este caso, no todas las dependencias se encuentran en los repositorios que trae la distro por defecto.

El mismo driver de nvidia fué un dolor de cabeza.

De hecho no está el mismo cmake, que es vital para poder hallar las dependencias y poder compilar con ellas.

Acá un hay un screenshot del Juegodemo corriendo en Opensuse.

Read the rest of this entry »

Instalando Ruby On Rails en Kubuntu Feisty Fawn

Esto fue lo que hice para echar a andar Ruby on Rails en mi instalación de Kubuntu.

  1. Instalar la siguiente lista de Paquetes:
    sudo apt-get install ruby ruby1.8 ruby1.8-dev rdoc ri irb libgems-ruby1.8libopenssl-ruby1.8 rubygems rails
  2. Luego nos posicionamos en una carpeta donde guardaremos nuestros proyectos:

    mkdir proyectos_ror
    cd proyectos_ror
  3. Esta carpeta puede ser aquella donde tenemos nuestras páginas web como /home/usuario/public_html o quizas /var/www/

  4. Creamos nuestro proyecto con:

    rails mi_primer_proyecto_ror
  5. Para probarlo con el servidor Webrick, se puede hacer esto:

    cd mi_primer_proyecto_ror
    script/server
    Luego, para acceder a la aplicación, debemos ingresar con nuestro navegador web preferido por la url http://localhost:3000

Faltan detalles, pero en la marcha voy a completar (y complementar) este how-to.

Pasandome a Feisty

Bueno, otra vesz tuve un unfructuoso upgrade, y debi partir casi de 0. Digo casio porque hice una maña que no todos hacen.

Pero primero lo primero. Apenas vi que ya estaba disponible la versión final de Kubuntu Feisty Fawn, corri a buscar un mirror para la descarga. Entonces pensé “deben ser millones como yo haciendo esto, ¿habrá descarga por torrent?” y así fue que encontré e torrent en un mirror Austriaco. Bueno, deje la descarga allí. Mientras pensé “bueno, tengo la partición que era para Solaris, puedo entonces Instalar Kubuntu Feisty allí, y hacer el upgrade en mi partición linux” para ver que diferencia podía haber. Entonces fue cuando busque información y encontré las instrucciones para hacer upgrade.

Así comenzó entonces la aventura Edgy a Feisty.
Read the rest of this entry »

Guía para compilar GDT + demos

Con esta guía pretendo tener algo más al día los pasos necesarios para instalar GDT, y poder hacer juegos con el.

Como siempre, la máquina de pruebas es:

CPU: Intel Pentium 4 Presscot 3.2 Ghz
GPU: Nvidia FX5200, AGP 128 MB de RAM
Sistema Operativo: Kubuntu Edgy Eft.

Acá van los pasos, incluyendo los paquetes necesarios, para hacer una correcta instalación.
Read the rest of this entry »

Compilando GDT en Kubuntu con Kdevelop

Este vendría siendo el primer gran recordatorio, la primera manera que hallé para compilar GDT en Linux.

La idea es crear más adelante unos scripts que hagan toda esta pega más facil, y solo preocuparse de programar bien la librería, no de las mañas para poder compilar.

Read the rest of this entry »