Trollim: red social para programadores

Aunque la noticia tiene unos días, hoy me he encontrado con esta entrada de TechCrunch en la que presenta su nueva apuesta, Trollim.

Trollim consiste en una mezcla de red social y juego online en la que puedes demostrar tus conocimientos de programación en distintos lenguajes (de momento sólo están disponibles C++, C# y Java). Tras registrarte y especificar los años de experiencia,  hay que completar correctamente una serie de tests en los que se evalúa tu conocimiento real sobre la programación, que suelen consistir en depurar pequeños programas o terminar de implementar la funcionalidad que se pide.

image Prueba de nivel 1 de C++

Tras pasar los tests, se obtiene una calificación de 1 a 5 estrellas, y se desbloquea la opción de retar a otros usuarios en duelo. De esta manera puedes incrementar tu puntuación en el ránking, visible para otros usuarios mediante un widget personalizado.

También se plantea la posibilidad de usarlo como plataforma para concursos de programación, y como un método fiable para que las compañías encuentren candidatos para puestos de trabajo que necesiten una determinada base de conocimientos.

De momento somos 24 trolls españoles. ¿Alguien más se apunta? 😀

[Old School] Acceso a bases de datos ODBC desde MFC

Descargar código fuente

El verano. Esa época en la que crees que por fin tendrás algo de tiempo libre para hacer cosas como actualizar el blog, y resulta que acabas estando más ocupado que durante el curso. Y para colmo, las 2 o 3 horas muertas que tienes al día se van al traste cuando haciendo limpieza encuentras un CD lleno de ROMs y emuladores de consolas de 16 bits. Emuladores que misteriosamente son compatibles con el mando cableado de XBox 360. Razones más que de sobra para volver a machacar píxeles como antaño…

En fin. Entre rato y rato, y debido a, como viene siendo costumbre desde hace 5 años, estar contratado por cierta empresa postal cuyo nombre no quiero mencionar, he vuelto a la programación para no terminar de oxidarme del todo. La razón ha sido la necesidad de actualizar el callejero del que se dispone en la oficina para corregir las cartas que llegan mal direccionadas; actualmente se disponía de unas hojas mecanografiadas con una antigüedad de unos 20 años en las que se habían ido escribiendo y tachando una larga lista de correcciones (nuevas calles, cambios de domicilio, etc). Pues bien, decidí recopilar todos los datos más actuales y, ya puestos, compilarlos en una base de datos bien estructurada, y no un documento de Word u hoja de Excel como suele ser la costumbre. Los problemas no habían hecho nada más que empezar.

Bien. En la oficina se disponen de varios PCs, y uno de ellos es de uso exclusivo por el personal de reparto. La base de datos estaría almacenada únicamente en este equipo, con la “gracia” de contar con las siguientes peculiaridades:

  1. Sistema operativo Windows XP. Vale, no está mal, yo mismo sigo usándolo.
  2. Ausencia total de cualquier .NET Framework (hala, a olvidarse de tener las cosas fáciles).
  3. Únicos programas del paquete Office 2003 instalados: Word y Excel (adiós, base de datos de Access editable por los usuarios).
  4. Ausencia total de permisos de instalación de aplicaciones y de acceso al Panel de Control (para terminar de arreglar las cosas, vamos).

O lo que es lo mismo: adiós C#, adiós SQL Server, adiós Rapid Application Development. Pero bueno, no estaba todo perdido.

Dándole vueltas a qué API podía usar para hacer algo con un GUI mínimamente decente, me acordé de mis inicios con VC++ y la programación gráfica: MFC. Si compilaba el proyecto con las librerías en modo estático (Link as static library), el tamaño final del ejecutable se incrementaría notablemente, pero me ahorraría el problema de tener que comprobar si las DLLs ya estaban presentes en el sistema. Por otra parte, el problema del acceso a la BD también estaba solucionado; aunque no podía acceder al Panel de Control y por tanto añadir un origen de datos ODBC, sí podía conectar en tiempo de ejecución gracias al driver de Microsoft Access que todas las instalaciones de Windows XP traen por defecto.

Ya sólo quedaba ponerse manos a la obra: se crea una nueva aplicación MFC basada en diálogos (nada de modelo documento-vista, no es necesario complicarse la vida) y se añade el soporte para bases de datos:

29 #include <afxdb.h>

30 #pragma comment(lib, «odbc32.lib»)

Creamos un objeto CDatabase y lo abrimos mediante Open, especificándole una cadena de conexión válida en nuestro caso.

80 if (!m_pDb.Open(_T(«bdprueba»),FALSE,FALSE,_T(«DBQ=.\bdprueba; DefaultDir=.\; Driver={Microsoft Access Driver (*.mdb)}; DriverId=25; FIL=MS Access; MaxBufferSize=2048; MaxScanRows=8; PageTimeout=5; SafeTransactions=0; Threads=3; UID=admin; UserCommitSync=Yes;»),FALSE))

81 {

82 AfxMessageBox(_T(«Error al conectar con la BD!»));

83 SendMessage(WM_CLOSE,0,0);

84 }

Y una vez abierto, operamos mediante objetos CRecordset, que podemos instanciar directamente para pasarles consultas SQL, o crear clases derivadas de éste para añadir funcionalidades que vayamos a usar frecuentemente.

185 CRecordset resultado;

186 CString query;

187 query.Format(_T(«SELECT Nombre FROM Juegos WHERE Nombre LIKE ‘%%%s%%'»), buscar);

188

189 if (resultado.Open(CRecordset::dynaset, query, CRecordset::none) && resultado.GetRecordCount() > 0)

190 {

191 // La consulta ha devuelto registros, recorrerlos…

192 }

Como viene siendo costumbre, adjunto un pequeño programa de ejemplo que demuestra las funcionalidades explicadas. Aunque el uso de MFC ha decaído bastante desde el nacimiento de .NET, espero que a alguien le sirva de provecho 🙂

CopySourceAsHTML: formatea tu código como HTML

¿Alguna vez os habéis encontrado redactando un artículo o tutorial, y al tener que insertar código fuente sólo habéis conseguido copiar un amasijo de caracteres sin tabulación y con los retornos de línea a su libre albedrío? Seguramente habéis acabado sacando una captura de pantalla e insertando el susodicho como una imagen estática. Pues esto se va a acabar, gracias al add-in CopySourceAsHTML disponible para Visual Studio.

Éste add-in ha pasado casi desapercibido a pesar de tener unas cuantas versiones a su espalda, siendo la primera de ellas para VS .NET 2003 (aún disponible para descargar por si alguien sigue usándolo 😉 ). Su uso es tán fácil como descargarlo, ejecutar el instalador, y la próxima vez que abramos el Visual Studio dispondremos de una nueva opción en el menú Edición (y en el emergente también) llamada Copy As HTML…

image

Cuando pinchemos en ella, accederemos a un diálogo con distintas opciones sobre el formato final:

image

Las pestañas File Style, Line Style y Block Style sirven para definir estilos personalizados para cada uno de los elementos nombrados, pero las opciones interesantes están en la pestaña General. En ella podemos seleccionar si queremos numerar las líneas y en qué número empezarían (Number lines from), limitar la longitud de la línea (Wrap lines), quitar la tabulación (Remove line indentation) o cambiar el tamaño de tabulación y fuente. También es recomendado desactivar Embed styles para evitar que incluya los estilos como propiedades de los tags HTML, porque puede resultar en un código bastante largo y redundante. Es más bonito y práctico que los agrupe dentro de un <style> en forma de clases 😀

Y por último, incluyo un trozo de código de ejemplo formateado usando CopySourceAsHTML, para que podáis comprobar lo efectivo que es:

1 using System;

2 using System.Collections.Generic;

3 using System.Linq;

4 using System.Text;

5

6 namespace ColoreoSintaxis

7 {

8 /// <summary>

9 /// También colorea comentarios y summary

10 /// </summary>

11 class Program

12 {

13 static void Main(string[] args)

14 {

15 System.Console.Out.Write(«Hola, mundo!»);

16 }

17 }

18 }

No sé vosotros, pero yo pienso sacarle bastante provecho a partir de ahora 😉