The Regex Coach: comprueba tus expresiones regulares

14 de diciembre de 2009 | Sin volcados de memoria | PHP, Programación, Web

Después de bastante tiempo sin programar nada “serio” con PHP, hoy lo he retomado para hacer unas cosillas. Cual es mi sorpresa al ver que en las últimas versiones (>= 5.3.0), las funciones para expresiones regulares en formato POSIX han pasado a ser obsoletas/eliminadas. Mi gozo en un pozo.

Pues nada, a repasar la sintaxis de las expresiones regulares de Perl… que tengo más que oxidada. Buscando una posible ayuda rápida por Internet, me he encontrado algo más útil que los tutoriales/cheat sheets de toda la vida: The Regex Coach. Éste programa es un banco de pruebas en el que puedes ir probando el funcionamiento de tu expresión regular en tiempo real, y él mismo te marca el resultado de lo que estás buscando. Además, puedes elegir entre una multitud de opciones: case sensitive, cadena multilínea, hacer un replace/split…

image
Filtrando las fechas de modificación en el resultado de un comando dir.

¡Y además está programado en Lisp! :D

La gente no sabe apreciar el valor de las cosas…

28 de noviembre de 2009 | Sin volcados de memoria | Frikismo, Videojuegos

28112009270

Encontrado en Cash Converters, a un precio de 1 €, mientras daba un paseo por el centro de Alicante con Miguel Ángel. Lástima que estas oportunidades se vean cada vez menos…

Disponible el vídeo del webcast

24 de noviembre de 2009 | Sin volcados de memoria | Programación, Shaders, XNA

Ya está publicada la grabación en vídeo del webcast sobre programación 3D con XNA que di el miércoles pasado. Podéis verlo aquí, y descargar los materiales necesarios para desarrollar el ejemplo aquí.

La verdad que me gustaría continuar con estas aportaciones para tratar de darle un empujón a XNA. Si tienes alguna idea o sugerencia que te gustaría ver desarrollada, contacta conmigo y trataré de encajarla en la temática de los siguientes eventos :D

Descarga electrónica: modelo de negocio ¿ventajoso?

20 de octubre de 2009 | Sin volcados de memoria | Random, WTF?

Ésta curiosidad viene de la mano de mi hermano, que fue quien se dio cuenta del “error”. Si entramos en la tienda online de Adobe, podemos adquirir cualquier producto tanto en versión física como digital. Hasta aquí todo correcto; sin embargo, si entramos en la tienda española en lugar de la estadounidense, hay una pequeña diferencia respecto a las versiones de los productos. Vamos a elegir, por ejemplo, una licencia completa de Adobe Photoshop CS4, en formato físico:

image

Ahora vamos a ver que ventaja tiene la versión digital. Porque tiene que tener, ¿no? Te ahorras el soporte físico, los gastos de envío y manipulación, etc:

image Whaaaat.

Eh, aquí falla algo. Vamos a revisar la sección “Descargar información e instrucciones”:

image El medidor de incongruencias acaba de explotar delante de mis narices.

Vaya, así que parece que después de todo, si te urge tener tu software cuanto antes, vas a tener que pagar un poco más en concepto de, digamos, “aprovechamiento instantáneo del producto”. O puede que sea un nuevo canon de la SGAE aplicado a productos enteramente digitales :P

Seguramente será un error del catálogo y en la pasarela de pago aparecerá el importe correcto… o no. ¿Alguien que haya adquirido un producto de Adobe recientemente para resolver la duda?

Coloreo de sintaxis para GLSL/HLSL/CG: NShader

15 de octubre de 2009 | Sin volcados de memoria | Programación, Shaders, Visual Studio

Otra extensión más para Visual Studio: NShader, que colorea la sintaxis del código fuente de los distintos lenguajes de programación de shaders existentes. Tiene soporte para las siguientes extensiones de archivos:

  • GLSL: .glsl, .frag, .vert, .fp, .vp
  • HLSL: .fx
  • CG: .cg, .cgfx

image La diferencia se nota

De momento sólo incluye el coloreo, pero están planeados, entre otras cosas, la inclusión de un analizador de sintaxis y un sistema de autocompletado. Y como es un proyecto de CodePlex, si algún usuario considera que necesita algo más, siempre puede añadirlo él mismo.

¿La única pega? Que como todas las demás extensiones, no se puede instalar en las versiones Express de VS.

Certificados digitales: problemas, problemas, problemas

22 de septiembre de 2009 | Sin volcados de memoria | Software, WTF?

Hoy me he pasado por el Registro General de la Universidad de Alicante para obtener un certificado electrónico, puesto que carezco del nuevo DNI electrónico, y dicho sea de paso, no tengo ganas de pasar los trámites de renovación ni de comprar el trasto-lector por USB para sacarle partido. La señora que me ha atendido, muy amable y atenta ella, ha tardado apenas 5 minutos en generarme el certificado, y se ha quedado un poco desencajada cuando le he insistido en que lo quería en disquette, y no en una memoria USB.

- ¿Lo quieres en disquette o en USB?
- En disquette, por favor.
- [Mirada de “¿dónde está la cámara oculta?”] ¿¿¿Seguro??? Mira que el primero…
- Sí, si me he leído las condiciones, sé que la primera memoria es gratuita, pero no, quiero disquette, que me viene mejor. [Como si tuviera pocos USBs muertos de risa, encima, otro trasto más que se va a fundir cuando más falta me haga…]
- Bueno, bueno, toma…

Total, que me hago con mis certificados, una copia del contrato y unas instrucciones de instalación para Firefox. Todo bien (instalar certificados root y el programa Gestor Clauer) hasta llegar al paso 3, en el que hay que abrir una página HTML de autoconfiguración con el navegador:

image
¿Y entonces qué narices estoy usando ahora mismo? ¿Lynx?

Olé el testeo adecuado. Revisando el breve JavaScript que compone la página, y consultando la cuasi-esotérica API de extensiones de Firefox, parece ser que el acceso a las funciones pkcs11 ha cambiado un poquito de la versión 3.0 a la 3.5, dejando inútil el script. A configurar a mano tocan.

Primero, vamos a añadir el nuevo módulo de cifrado instalado por el Gestor Clauer para que Firefox interprete qué tiene que hacer con nuestros certificados. Así que nos vamos a Herramientas > Opciones > Pestaña Avanzado > Pestaña Cifrado y pinchamos en el botón Dispositivos de seguridad.

image

En la nueva ventana hacemos click en el botón Cargar y, aunque no es necesario, podemos cambiar el nombre que le daremos al nuevo módulo. Ahora, con el botón Examinar, tenemos que buscar la librería con las funciones de cifrado que ha instalado el gestor de claves. Se llama pkcs11-win.dll y se encuentra en la carpeta system32 (C:\Windows\system32, en caso de tener una instalación estándar).

image

Añadimos el nuevo módulo y ya sólo falta cargar nuestros certificados. Seguimos en la ventana Opciones de Firefox, pinchamos en el botón Ver certificados y vamos a la pestaña Sus certificados de la nueva ventana.

image

Botón Importar…, y buscamos el certificado llamado “XXXX_firma.p12”. Al añadirlo, una ventana emergente nos pedirá la contraseña del certificado, que no es ni más ni menos que el PIN especificado en la hoja del contrato.

image

Y ya tenemos nuestro certificado listo para usar con el navegador.

Ebay Anuncios: compra tu propio troyano

19 de septiembre de 2009 | Sin volcados de memoria | Frikismo, WTF?

No se ni por qué lo he hecho, quizá por curiosidad, pero hoy se me ha ocurrido entrar en Ebay Anuncios para ver en qué consistía. A primera vista parece una copia del clásico Craiglist (de la que parece ser también han abierto una sección para España, aunque un poco vacía por el momento), clásica web de anuncios clasificados. El caso es que navegando por los anuncios de Alicante me he encontrado esta joya, por la que el creador pide nada más y nada menos que 150 €. Y cito textualmente:

veno troyano de conexion inversa,viene equipado con keylogger,transmision de datos del keylogger directamente del server al cliente,apagado de pc,hacer sonar la bios,abrir el cd,mandar mensaje en forma de error,ejecutar archivos

Ufff, cuánta funcionalidad para ese precio, ¿no? El “h4x0r” también incluye una captura para que podamos apreciar el producto final que vamos a comprar:

image
… what?

Si la memoria no me falla (y la vista tampoco), estamos ante el Visual Studio con un proyecto de Visual Basic .NET abierto. Porque todos sabemos que Visual Basic es el mejor lenguaje para hacer aplicaciones complejas y con manejo de TCP/IP, ¿a que sí? ;)

Trollim: red social para programadores

17 de septiembre de 2009 | Sin volcados de memoria | General, Programación

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? :D

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

5 de agosto de 2009 | Sin volcados de memoria | C/C++, MFC, Programación

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

27 de mayo de 2009 | Sin volcados de memoria | Programación, Visual Studio

¿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 :D

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 ;)