Concurso “NET Minds”

A veces a uno lo sorprenden (y cuando digo sorprenden es sorprenden). Y encima gratamente. Primero la imagen que os llevará a la web:

image

Se trata de un juego en el que los tres primeros en terminarlo tendrán un Visual Studio 2010 con suscripción a la MSDN Premium, todo ello valorado en muuuuuuuuuuuuuuuucha pasta gansa.

Como podréis comprender, yo no voy a participar porque si no sería el seguro ganador de no una, sino de las tres suscripciones.[tachado]

No se trata de un concurso de sapiencia sobre desarrollo (y si lo fuera volvería a ganar[tachado]), sino un concurso de inteligencia del estilo de

En el armario de un jefe de proyecto nos encontramos que todos los polos son blancos menos dos, todos son azules menos dos y todos son rosas menos dos.

¿Cuántos polos hay de cada color?

Por eso cualquiera puede participar, no tenéis que ser ni genios de la programación (como yo[tachado]) sino genios a pelo (también como yo[tachado]).

PS: Sí, ya sé, se me olvidó tomar las pastillas de humildad y modestia, y pero es que no tengo abuela y estoy de coña. No vaya nadie a mosqueárseme por un quítame allá esas pajas (mentales, digo, no de las otras).

NOTA: Las partes entre paréntesis en las que pongo mis tonterías, y el párrafo que empieza por «Como podéis comprender» los he escrito tachados, pero en la visualización no aparecen como tal. Cosas de los BUGS.

Salió QT 4.6

Pues eso, que ha salido hace nada la versión 4.6 de QT, con importantes añadidos como el soporte para dispositivos táctiles multitouch, grandes aceleraciones en el renderizado gráfico y soporte para Symbian, o eso es lo que dice, entre otras cosas, la noticia de la salida del mismo. Podemos obtenerlo desde aquí: http://qt.nokia.com/.

Si no queremos soporte para Visual C++, con instalar el paquete está todo listo para funcionar. No obstante, dado que el compilador de Visual C++ es significativamente mejor que el de GNU, es recomendable instalarse el AddOn para Visual Sutdio y compilarse una versión para él.

Compilar QT para Visual C++
Ya lo expliqué aquí, y parece ser que esta versión tiene el mismo bug a la hora de compilarnos la versión para Visual C++, por lo que hay que seguir los pasos descritos allí. De todos modos, voy a ampliar algo la información.

QT se instala por defecto en C:QT<versión>, y yo voy a asumir que lo has hecho así. En mi caso tengo un fichero BAT con el siguiente contenido:

cd %1qt
configure -debug-and-release -shared -no-qt3support –opensource
nmake
del src3rdpartywebkitWebCoretmpmocrelease_sharedmocinclude.tmp
del src3rdpartywebkitWebCoretmpmocdebug_sharedmocinclude.tmp
copy src3rdpartywebkitWebCoretmpmocrelease_sharedmoc_QnetworkReplyHandler.cpp src3rdpartywebkitWebCoretmpmocdebug_shared
nmake
cd ..
cd ..

Tan sólo hay que posicionarse en una consola de comandos en la carpeta de C:QT y ejecutar el comando configure <ruta>, picar “y” cuando se nos pregunte y esperar las varias horas que tarda a compilarse el tema.

La consola
Tenemos que abrir una consola de compilación, que trae listo un entorno de compilación para Visual C++. Si tenemos instalado el SDK, la consola está en su carpeta en el Menú Inicio, y si no usaremos la de Visual C++.

Una vez abierta tenemos que elegir el entorno deseado con el comando “setenv”, que reflejamos en la captura:

image

Debemos elegir entre “/Debug” o “/Release”, entre “/x86”, “/x64” o “/ia64”. También entre “/xp”, “/vista”, “/2003”, “/2008” o “/win7” como sistema operativo base. Hasta donde yo sé, esta última opción no afecta para nada al resultado de la compilación de QT, por lo que con poner “/xp” nos basta. Las otras sí que afectan, construyéndonos QT alrededor de un runtime de depuración o final, o un QT de 32 ó 64 bits. La opción “/ia64” no sé si generará algo útil o no.

Obtener tu propia versión

Muchos habréis observado que en las propiedades de un ejecutable o una DLL suelen aparecer, en la pestaña Detalles de las propiedades, una serie de nombres y de datos sobre la versión de dicho fichero.

Eso se consigue embebiendo en el ejecutable un recurso de versión, que en Win32 se llama RCVERSION y que consta de una serie de cadenas y valores predefinidos que podemos rellenar a nuestro gusto.

En las imágenes de abajo podemos ver un ejemplo añadido a un ejecutable, tanto desde C++ Builder como desde Visual C++.

image

image 

Si os fijáis, ambas tienen más o menos los mismos elementos, pero en el caso del C++Builder existe la opción de incrementar el número de Build automáticamente. Hasta donde yo sé, eso no lo permite Visual C++ (quizás se haga en conjunción con un CVS o cuando haya uno compatible), y básicamente consiste en incrementar automáticamente el último numerito cada vez que compilemos algo. A lo largo de diferentes versiones del producto, este incremento se producía cuando se hacía un Build, un Make o incluso nunca (debido a un bug). En la versión 2010 se hace cada vez que compilemos algo.

Bueno, una vez que hemos especificado nuestro recurso de versión, es tiempo de que podamos leerlo desde el propio ejecutable para poderlo poner, por ejemplo, en la pantalla de “Acerca”, en la de “Splash” o donde queramos. Si os dais cuenta, esos números suelen aparecer en muchas aplicaciones.

El código es muy sencillo:

DWORD handle;
DWORD size = GetFileVersionInfoSize(Application->ExeName.w_str(), &handle);
wchar_t *buffer = new wchar_t[size + 1];
GetFileVersionInfo(Application->ExeName.w_str(), 0, size, buffer);
VS_FIXEDFILEINFO *pFixedInfo;
UINT uVersionLen;
if (VerQueryValue(buffer, L"\", (void**) & pFixedInfo, (UINT*) & uVersionLen) != 0)
{
    String version = L" " + String(HIWORD(pFixedInfo->dwFileVersionMS)) + L"." + String(LOWORD(pFixedInfo->dwFileVersionMS)) + L"." + String
    (HIWORD(pFixedInfo->dwFileVersionLS)) + L"." + String(LOWORD(pFixedInfo->dwFileVersionLS));
    m_caption = Caption + version + L" - ";
    Caption = m_caption + m_document->FileName;
}
delete[] buffer;

El ejemplo que he puesto es para C++ Builder Unicode, pero resulta trivial convertirlo a C ó C++ estándar. Tan sólo hay que cambiar el tipo de las cadenas por las adecuadas.

Primero se hace una llamada a GetFileVersionInfoSize() pasando la ruta de nuestro ejecutable y un DWORD que de nada sirve. Con el tamaño del recurso, llamamos a GetFileVersionInfo() volviendo a pasar la ruta del ejecutable y un buffer con el tamaño adecuado.

Después creamos un puntero a una estructura del tipo VS_FIXEDFILEINFO y la pasamos a la función VerQueryValue(), que también recibe el buffer original, qué parte del recurso queremos sacar (“\”, es decir, la versión raíz –los recursos de versión se pueden embeber unos dentro de otros) y algún que otro valor más.

Si esta función encuentra lo que le decimos, entonces podemos usar el puntero de la estructura y formatear una cadena con los cuatro números de versión.

Lo que hagamos con esa cadena es cosa nuestra. En este caso la añadimos al título de la ventana actual y lo guardamos en una variable miembro que usaremos cada vez que cambiemos de documento.

Y no nos olvidemos de liberar la cadena asignada.

Manifiesto en defensa de los derechos fundamentales en internet

Origen: http://fernand0.blogalia.com/historias/65244

Ante la inclusión en el Anteproyecto de Ley de Economía sostenible de modificaciones legislativas que afectan al libre ejercicio de las libertades de expresión, información y el derecho de acceso a la cultura a través de Internet, los periodistas, bloggers, usuarios, profesionales y creadores de internet manifestamos nuestra firme oposición al proyecto, y declaramos que…
1.- Los derechos de autor no pueden situarse por encima de los derechos fundamentales de los ciudadanos, como el derecho a la privacidad, a la seguridad, a la presunción de inocencia, a la tutela judicial efectiva y a la libertad de expresión.
2.- La suspensión de derechos fundamentales es y debe seguir siendo competencia exclusiva del poder judicial. Ni un cierre sin sentencia. Este anteproyecto, en contra de lo establecido en el artículo 20.5 de la Constitución, pone en manos de un órgano no judicial -un organismo dependiente del ministerio de Cultura-, la potestad de impedir a los ciudadanos españoles el acceso a cualquier página web.
3.- La nueva legislación creará inseguridad jurídica en todo el sector tecnológico español, perjudicando uno de los pocos campos de desarrollo y futuro de nuestra economía, entorpeciendo la creación de empresas, introduciendo trabas a la libre competencia y ralentizando su proyección internacional.
4.- La nueva legislación propuesta amenaza a los nuevos creadores y entorpece la creación cultural. Con Internet y los sucesivos avances tecnológicos se ha democratizado extraordinariamente la creación y emisión de contenidos de todo tipo, que ya no provienen prevalentemente de las industrias culturales tradicionales, sino de multitud de fuentes diferentes.
5.- Los autores, como todos los trabajadores, tienen derecho a vivir de su trabajo con nuevas ideas creativas, modelos de negocio y actividades asociadas a sus creaciones. Intentar sostener con cambios legislativos a una industria obsoleta que no sabe adaptarse a este nuevo entorno no es ni justo ni realista. Si su modelo de negocio se basaba en el control de las copias de las obras y en Internet no es posible sin vulnerar derechos fundamentales, deberían buscar otro modelo.
6.- Consideramos que las industrias culturales necesitan para sobrevivir alternativas modernas, eficaces, creíbles y asequibles y que se adecuen a los nuevos usos sociales, en lugar de limitaciones tan desproporcionadas como ineficaces para el fin que dicen perseguir.
7.- Internet debe funcionar de forma libre y sin interferencias políticas auspiciadas por sectores que pretenden perpetuar obsoletos modelos de negocio e imposibilitar que el saber humano siga siendo libre.
8.- Exigimos que el Gobierno garantice por ley la neutralidad de la Red en España, ante cualquier presión que pueda producirse, como marco para el desarrollo de una economía sostenible y realista de cara al futuro.
9.- Proponemos una verdadera reforma del derecho de propiedad intelectual orientada a su fin: devolver a la sociedad el conocimiento, promover el dominio público y limitar los abusos de las entidades gestoras.
10.- En democracia las leyes y sus modificaciones deben aprobarse tras el oportuno debate público y habiendo consultado previamente a todas las partes implicadas. No es de recibo que se realicen cambios legislativos que afectan a derechos fundamentales en una ley no orgánica y que versa sobre otra materia.