lunes, 28 de noviembre de 2011

Como hacer una aplicación Win32 "Hola Mundo" sobre Visual C++

Hace tiempo que no escribo por aquí. En parte gracias a nuestros viejos colegas los exámenes, en colaboración con el Sr. Trabajo y, claro, sin olvidar la maravillosa aportación de nuestras admiradoras, las Señoras Prácticas.

Durante este periodo de inactividad bloguera, he estado reflexionando. Este es un blog con el fin de comentar mis peripecias por esta maravillosa campina verde llena de conceptos que es la informática, y aún no he escrito ni una maldita línea de código, salvo por la entrada en la que maldecía mi inutilidad en la utilizacion de HTML.

Como últimamente uno de los proyectos a nivel personal en los que estoy enfrascado se trata de una pequeña aplicación Visual C++ sobre Windows me decantaré por mostraros como se codificaría un corto HolaMundo.

Para los que no sepan de que se trata un HolaMundo, o más conocido por HelloWorld por nuestros colegas anglosajones, decir que se trata, normalmente, del programa inicial que se realiza al usar por primera vez un lenguaje de programación (esto incluye la primera vez que tecleamos código) a modo de toma de contacto. Generalmente es algo tan simple como una cadena de caracteres que imprimimos por pantalla diciendo Hola Mundo. Nada complicado, pero todos hemos comenzado así.

En una aplicación de consola, un programita HolaMundo puede ocupar unas escasas 5 lineas de código, pero en las aplicaciones con interfaz gráfica el número asciende considerablemente. Muestra de ello el siguiente código. La inmensa mayoría ha sido vilmente copiada del manual oficial que puedes consultar aquí. Contiene algunos comentarios para posibles dudas que puedan surgir. Otros comentarios son una cutre y despiadada traducción propia de las observaciones que vienen en dicho manual.

viernes, 18 de noviembre de 2011

Saca rendimiento a lo que hagas

Observando mi viejo reloj de mesa me he armado de valor en hablar de una situación que tal vez todos hayamos pensado alguna vez pero que no hemos llegado a recitar con la importancia con la que se debería afrontar esta significativa reflexión. Se trata de un tema en el que muchos grandes literarios han centrado su interés: El tiempo es efímero.

Vivimos en una sociedad con un ideal al estilo Carpe Diem. No exactamente en el sentido de disfrutar puesto que somos simples pasajeros de esta alocada vida a la cual estamos sometidos, sino en el sentido de hacerlo todo, ya y ahora. Creo que fue Zaryn Dentzel (CEO de Tuenti) el que dijo algo así como: "El problema de esta sociedad es que no pensamos en días, semanas o años, sino en minutos". Es una más que interesante reflexión. Viene a decir que pensamos en el ahora y obviamos el mañana. Pensamos en la práctica que tenemos que entregar en pocos días para al acabarla ponernos inmediatamente con otra, no dudamos en usar el ordenador a diario para jugar a videojuegos o ponernos al día de noticias y ya de paso usar Redes Sociales, blogs o demás webs. En la mayoría de los casos evadimos una buena y renovada adquisición de conocimientos. Mejor jugar a un videojuego que coger un manual de HTML5, un compendio acerca de la nanotecnología o un libro de biología molecular. La mayoría pensareis: "Obviamente". Bastante duro y largo es el día como para llevarse el trabajo a casa y seguir recalentando el coco.

Uno nunca sabe dónde acabará el día de mañana. Cuando estás en el instituto no te das cuenta, o simplemente no quieres darte cuenta de ciertas actividades que pueden ser de vital importancia para tu futuro. Es algo injusto pensar así porque yo jamás me arrepentiré por pasar horas y horas pegado frente a mi vieja Game Boy Color jugando al Pokemon Oro, ni me arrepentiré de pasar las tardes muertas leyendo comics de Spiderman, ni me arrepentiré jamás de pasar la mayoría de mis fines de semanas cenando pizza ni viendo películas…

Pero sí que me arrepiento por no haber aprendido a programar a mayor nivel. El único nivel del que disponía era un pequeño curso de Visual Basic. Sí que me arrepiento de no haber aprovechado al máximo esas clases de inglés del instituto o no haber leído de una forma más legal los libros que mandaban. El tiempo es una unidad demasiado valiosa como para desperdiciarla. Antes hablé de mi tiempo gastado en videojuegos. No considero una pérdida de tiempo puesto que confío en que en un futuro mi pasión por los videojuegos, los comics y demás medios para contar historias me sirvan para algo en un futuro. Y si no es así... Al menos he pasado un buen rato, pero jamás pensaré que es un desaprovechamiento de tiempo. 

Si crees que no estás aprovechando tu tiempo todo lo que pudieras deja lo que estés haciendo y pasa a otra cosa, pero nadie puede permitirse el lujo de perder el tiempo. El tiempo pasado nunca volverá, aspira a invertirlo en algo que sepas que te servirá, pero nunca lo desperdicies.

Aún así no vale la pena volverse loco y cegarse en la productividad. Una de las mejores cosas que tiene mi semana es cuando veo a mi novia (que no es tan a menudo como quisiera), y en ese momento no estoy mejorando mis conocimientos en materia de Software pero necesito ese momento para caminar día a día y tener fuerzas para seguir. Dicho esto es un buen momento para destacar una frase del dramaturgo británico William Shakespeare
Tan a destiempo llega el que va demasiado deprisa como el que se retrasa demasiado.

No podemos controlar el tiempo, así que, qué puñetas, sácale rendimiento a lo que hagas.

miércoles, 16 de noviembre de 2011

Informático, ¿Qué quieres ser de mayor?

El pasado martes al final del día, durante mis últimas horas de jornada en el trabajo me hicieron una pregunta que hacía bastante tiempo que hacía largo tiempo que no me cuestionaba: ¿A qué te quieres dedicar cuando acabes la carrera? Lo que viene siendo la típica pregunta de: ¿Qué quieres ser de mayor? Sinceramente, estoy en 3er año de carrera y aún no se cómo responder a esa pregunta.

Hace ya 3 o 4 años tenía clarísimo que quería estudiar una ingeniería, más concretamente informática. Solo titubee en el último momento ante la duda de realizar una carrera de Matemáticas, gracias a Dios, no opté por esa vía. Tenía clarísimo que quería ser informático. Cuan confundido estaba al usar ese término y cuan grande era mi ignorancia acerca de la informática... No digo que no supiera absolutamente nada antes de iniciar la carrera, pero el aluvión de información que se produjo en primer año de carrera fue, cuanto menos, estratosférico.

Sun, no tenía ni idea que era Sun. Ni una llamada al sistema, ni ensamblador, ni Steve Wozniak, ni un array, ni Ubuntu, ni Eclipse, ni tan si quiera que diantres era una máquina virtual. Para alguien con madera para ser informático estos términos debían de ser aprendidos desde muy temprana edad, no como aprendizaje (que también) sino como medio de vida. En este momento trato de ponerme al día mediante la lectura de antiguos manuales de programación y otros textos, sobretodo relacionados con la historia de la computación. Sin descuidar el presente (a ver cuando saco tiempo para toquetear la API de Facebook y Twitter…) gracias en parte a más que recomendables blogs como puedan ser Genbeta o Xataka del grupo WeblogsSL.

Y ahora que estoy dentro de este extraordinario mar de conocimientos como pueda ser esta Ingeniería Informática, no tengo ni pajolera idea a que dedicarme exactamente de mayor. Me gusta programar, lo considero un arte, pero no me gustaría pasarme la vida picando código… Las redes de computadoras es un gran mercado pero no me acaba de convencer, y eso que la asignatura referida a esta disciplina me pareció sumamente interesante. ¿Ingeniero del Software? No está mal pero es un trabajo muy de oficina…

Demasiado donde elegir, pero ahí radica lo bello de este sector. Puedes desarrollar Software Libre, dedicarte al mundo de las Social Media, crear los nuevos mecanismos de la era Post-PC, investigar sobre la bio-computación…  Incluso tenemos una vasta cantidad de conocimientos para trabajar en sector del videojuego. Siempre han sido una motivación para muchos de mis compañeros, y desde aquí les deseo que consigan ese objetivo.  Y ya de paso que me regalen alguna copia cuando esten desarrollándolos.

Sigo sin saber a que me quiero dedicar. Aún dispongo de unos escasos años de carrera para decidirme, pero tened seguro que elegiré algo con lo que esté conforme todos los días de mi vida. Porque no hay nada más grande que dedicarte a algo que te gusta, con lo que disfrutas, y si ya de paso dispones de tiempo y recursos para regalar alguna que otra consola a tus jóvenes descendientes, mejor que mejor.

sábado, 12 de noviembre de 2011

Similitudes entre maquinas y hombres

Es curiosa la similitud entre un Robot y un Ser Humano. Asisto todos los viernes a una asignatura Transversal en la que a partir de un paquete LEGO® MINDSTORMS® NXT 2.0 realizamos prototipos robóticos los cuales deben ser capaces de escalar una rampa con una pendiente relativamente alta, un robot que siga una línea negra, un robot velocista, un robot que siga una pared... Hay una cosa muy importante que nos dice el profesor para ayudarnos a superar las pruebas con éxito: Pensad en que haríais vosotros en esa situación.

Usamos el lenguaje de alto nivel C para programarlos con lo que las sentencias se acercan en cierta medida al lenguaje coloquial (salvando distancias, obviamente) y en consecuencia es relativamente fácil programar un robot de esas características.

Normalmente, la mayoría de personas al programar sobre un robot por primera vez tienden a realizar un código denominado todo o nada. Esto quiere decir que si queremos que un robot se detenga delante de una pared a exactamente 30 cm le decimos al robot que cuando la distancia entre el sensor y la pared sea mayor que 30 cm que avance, sino que retroceda. Recuerdo aquella prueba, era bastante cómico ver como todos nuestros robots avanzaban y retrocedían indefinidamente hasta que, en el mejor de los casos, se quedaba finalmente quietos para moverse al poco tiempo e iniciar otra vez este bucle.

Realmente si nos ponemos en el lugar del robot no actuaríamos así. Iríamos calculando la distancia y a medida que nos aproximáramos iríamos reduciendo la velocidad. Dicho esto y con una leve pero inestimable ayuda del profesor al final conseguimos realizar unos prototipos muy competentes.

No quiero seguir aburriéndoos con pequeñas batallitas, a donde quiero dirigirme es a la idea que suministra el título a este post: existen muchísimas similitudes entre hombres y maquinas. El ser humano está absolutamente obsesionado con realizar una copia de sí mismo, ya sea biológicamente a través de clones o mecánicamente/electrónicamente a través de Robots Humanoides.

¿Llegará un momento en el que sea indiferenciables las máquinas a los hombres? Da verdadero miedo pensar en esa situación. Una situación mil veces representada en el cine o en la literatura: cuando las maquinas se levantan y se rebelan frente a sus creadorers. ¿Y no es un poco lo que estamos haciendo nosotros? Muchos científicos y/o religiosos sostienen una interesante y, al mismo tiempo, muy respetable teoría que lo que ansía hacer el hombre mediante la creación de clones o robots no es más que un intento por  llegar a conseguir algo que solo está al alcance de Dios: dar vida.

Yo no lo veo del todo así. Es cierto que jugar a ser Dios es muy peligroso, pero yo no veo ningún problema en que el día de mañana una persona que no tiene brazo pueda ser intervenido y se le implante un nuevo brazo. U otra persona que sea incapaz de tener hijos por motivos biológicos, sea intervenida para que sea posible. La necesidad de mejorar es lo que nos empuja a ser mejores y debemos confiar en ella para hacer de este mundo un lugar en el que sea más fácil vivir. Todos los gobiernos del mundo deberían invertir más en I+D puesto que este es un punto de capital importancia en el camino a la prosperidad, no solo económica, también en torno a una mejoría sustancial en la calidad de vida.

Cierto es que llegará un momento en el que habrá que decidir parar o continuar, y espero que en ese momento el Ser Humano sea sensato y sepa que al fin y al cabo todos somos humanos.

viernes, 4 de noviembre de 2011

Windows 8: Primera toma de contacto

En primer momento puntualizar que no deseo realizar un análisis exhaustivo de Windows 8. Voy a tratar de plasmar mis primeras experiencias con esta Developer Preview desde un punto de vista híbrido usuario-desarrollador e intentar acercaros un poco el nuevo sistema operativo Microsoft Windows 8.

Para la realización de este análisis he utilizado como software de vitalización Oracle VM VirtualBox 4.1.4. Dotando al SO virtualizado de 1524 MB de RAM, 20 GB de capacidad dinámica a 64 MB de memoria de video a una resolución de 800x600. Se trata de una version Developer Preview x64, por lo que muchos de los errores que se encuentran (que los hay a montones) serán previsiblemente subsanados en las posteriores versiones.

Lo diré desde el principio para que nadie se lamente dentro de unos meses cuando salga la versión final de Windows 8. Esta nueva versión de las ventanas de Microsoft es un intento (bastante acertado a mi parecer) de unir dos mundos como son un Tablet y un PC. No os esperéis un pequeño salto, esperaos una revolución en toda regla.

Al tratarse de una vitalización no he podido comprobar en mis carnes el paso de BIOS a UEFI (Unified Extensible Firmware Interface), por lo que seguiré esperando para ver ese inicio fulgurante de unos 8 segundos como nos hacen prometer desde Redmond.

Dicho esto, la primera gran diferencia que notamos respecto a W7 es su pantalla de inicial. Más típica de un dispositivo Tablet que de un PC. Una preciosa imagen típica de Microsoft en la que debemos hacer scroll con el ratón para descubrir la pantalla de selección de Usuario.

Ahora tendremos a nuestra disposición la interfaz Metro (más grande, minimalista) y la interfaz Aero (la usada por Microsoft desde Windows Vista), aunque con mayor protagonismo de la primera. Ahora más que nunca nuestro PC se simplifica al máximo mostrándonos las aplicaciones (parece que la palabra "programas" no volverá a ser usada mucho más...) más importantes del sistema en la pantalla inicial, podremos movernos de izquierda a derecha.

Nos sorprenderá comprobar que ahora el escritorio Desktop es tratado ahora como una aplicación. Nunca más volveremos a pulsar el botón Inicio para desplegar la famosa barra, ahora el botón tiene otra función. La manera más rápida y acertada de moverse entre el Desktop y la pantalla Metro será el botón de Inicio. Sí, ahora no habrá "barra de Inicio" sino una pantalla de Inicio". Personalmente pienso que este es un cambio muy acertado por Microsoft. Sinceramente, desde Windows Vista nadie a vuelto a utilizar el menú de Inicio de la misma manera. Únicamente para buscar un documento o para apagar el PC. Puede haber alguna excepción que confirme la regla, pero por lo normal ese era el uso actual. Ahora se le dará el mismo uso pero será más intuitivo

Uno de los problemas de intentar juntar Tablet y PC es que a veces puede chirriar muchas de las maneras utilizadas para unirlos. De esta manera tendremos programas versiones Metro y programas versiones Aero. Si queremos un programa versión Metro solo tendremos que clickar en el icono correspondiente y no habrá problemas, todo será muy fluido. El problema viene al ejecutar aplicaciones Aero... Digamos que si lo hacemos desde el Desktop, no hay problema, es como hacerlo desde Win7. Pero si lo intentamos desde el menú de Inicio este pasará al Desktop y desde ahí se ejecutará. Puede que sea porque el SO esta virtualizado y se ralentiza, pero no encuentro esta manera de ejecutar aplicaciones demasiado fluida. Además, teniendo en cuenta que ahora mismo el 98% de aplicaciones corren sobre Aero, es muy arriesgado tener un método de transición tan corriente. Veremos qué problemas les da esta situación.


No voy a centrarme en hablar de las aplicaciones que vienen predefinidas en el SO (el antiguo y el nuevo Paint, nuevos y entretenidos juegos..) pero hay una a la que he prestado especial atención. Se trata de Tweet@rama, el nuevo servicio nativo de Twitter de Microsoft. Y la verdad es que responde bastante bien.


Otro cambio importante es la implementación del interfaz Ribbon para el explorador de archivos de Windows. Si tenéis Windows 7, os invito a abrir Paint o WordPad y comprobar su interfaz. Esa va a ser la nueva interfaz de archivos para W8. Ocupa más espacio pero teóricamente desde Redmond nos tratan de vender que "ganamos" espacio... Bajo mi humilde punto de vista yo creo que no está mal, puesto que la actual de Win7 apenas la utilizamos y si nos cansamos de Ribbon siempre podremos pulsar en la flechita de la parte superior derecha para ocultarla. Para los que usamos atajos de escritorio (supongo que la inmensa mayoría de los mortales) algunas como Pegar/Cortar/Suprimir nos importan poco, pero añadir botones como "Copy path" pueden cambiarlo todo. Todo es acostumbrarse y yo creo que es un paso adelante, darle más opciones al usuario siempre es bueno (o al menos dárselas mas claras).

Conclusiones: Seguramente me deje muchas cosas e ideas en el tintero pero para una pequeña toma de contacto está bien. El paso a este estilo PC-Tablet-PC puede acabar por sentarle bien a W8, el uso de una nueva interfaz para el menú de Inicio es todo un acierto pero puede rechinar en algunas ocasiones. La nueva interfaz Ribbon aporta las mismas opciones que antes pero de una forma más clara y si nos cansamos de él siempre podremos ocultarlo. Visualmente es un SO más bonito y minimalista. Es intuitivo y fácil de utilizar. Veremos el salto que se produce en la futurible BETA, si la gente acoge con buen grado su nuevo estilo (aunque no fuera tan grande ya lo hicieron del 98 a XP...) este será el nuevo líder de Microsoft.

jueves, 3 de noviembre de 2011

Piratas de Silicon Valley

Ayer por la noche visioné por primera vez "Piratas de Silicon Valley". Se trata de una TV-Movie de 1999. Este docudrama nos muestra los comienzos de los ordenadores personales durante la decada de los 70 hasta a mediados de los 80, bajo el punto de vista de dos frentes: Microsoft (bajo la narración de Steve Ballmer) y Apple (bajo la narración de Steve Wozniak).

Es interesante comprobar los inicios de las grandes multinacionales como son Apple y Microsoft. Ambas comparten que salieron de la nada, en una época en la que IBM eran los más poderosos, en la que eran los malos. Jóvenes emprendedores que ansiaban el éxito y que finalmente lo consiguieron.

En una historia basada en hechos reales nunca se debe cometer el error de creérselo todo, pero en este caso probablemente la historia fuera bastante similar. Bill Gates comprando DOS por 50000$ para luego utilizarlo en los computadores de IBM y ganar millones por la licencia de software, Apple robando ideas a Xerox para luego implementarlo en sus futuros ordenadores, luego Microsoft robándoles la idea a Apple y llegando primeros...

Se trata de una película digna de ver que sirve para, entre otras cosas, enseñar otra cara de Jobs. Recientemente por su muerte todo han sido alabanzas, y todas bien merecidas ya que se trataba de un grandísimo hombre. Pero no me dejo de extrañar por esa cara, hasta ahora oculta para mí, de Jobs. La cara de un jefe que ejerce una brutal presión, a veces casi insultiva, hacia sus empleados. Repito, está basada en hechos reales, es una película, no es real, pero no se puede descartar muchos de los detalles de esta película.

Cuesta pensar ahora que Bill Gates sea el hombre más rico del mundo. Era un nerd. Un empedernido jugador de Póker. Un tipo listo, eso nadie lo puede poner en duda. Compartía esa ambición con Jobs en cuanto al éxito y a conseguirlo bajo todo pronóstico.

De hecho, hay un momento en la escena final, cuando Jobs descubre que Gates les ha engañado y les ha robado ideas para su Windows en las que existe un breve intercambio de frases bastante interesante y soberbiamente significativo:
Steve Jobs: Somos mejores que tú... Nuestro producto es mejor.
Bill Gates: ¿No lo entiendes, Steve? Eso no importa.

miércoles, 2 de noviembre de 2011

Es dificil hablar de la muerte

La muerte de un ser vivo, de una persona, nunca deja a nadie indiferente. Es habitual hacer menciones o rendir homenajes de cualquier forma a la persona que ya no está entre nosotros. Para un ser cercano, es reconfortante ver esas muestras de cariño y a su vez es triste, porque significa que esa persona ya nunca más estará.

A lo largo de este año, y con extraña intensidad en la última mitad, nos han ido dejado celebridades que tal vez no conociéramos en persona, pero que sin lugar a dudas más de una habrá dejado huella en nuestros corazones. Hablo de Steve Jobs, Elizabeth Taylor, Marco Simoncelli, Dennis Ritchie, Henry Cooper, Peter FalkY me dejo muchos más en el tintero.

Pero esta entrada no está escrita debido a su muerte, sino a la de otro ser, que no es cercano, pero que si que era una persona a la que conocía. Hacia donde quiero arrastrar esta conversación es al pensamiento que no hace falta conocer en demasía o tener exceso de confianza para sentir tristeza por la muerte.

La muerte ha estado siempre ahí, y citando a Steve Jobs: “La muerte es el mejor invento de la vida”. Todos tenemos miedo a la muerte, quien lo niegue debe ser un necio. Y la perspectiva que tenemos de la vida cambia si la comparamos con la muerte. Nada es más importante que nuestros seres queridos: familiares, amigos, parejas. Y sé que si alguno de ellos se fuera… No es fácil hablar de estas cosas asique corto aquí.

Pero antes debo hacer mención a una famosa frase que habla de la muerte como un símbolo. Trasladando el ideal que cuando muramos, iremos tranquilos y en paz. La frase es dicha por un compañero y amigo a un guerrero cuando la muerte se cierne sobre ambos:

No. El viaje no concluye aquí. La muerte es otro sendero que recorreremos todos. El velo gris de este mundo se levanta y todo se convierte en plateado cristal. Es entonces cuando se ve... La blanca orilla, y más allá la inmensa campiña verde tendida ante un fugaz amanecer.
                                                                                                                                             Gandalf el Blanco