<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.0.7" -->
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>Ebarbeito</title>
	<link>http://enrique.barbeito.org</link>
	<description>Página personal de Enrique Barbeito García</description>
	<pubDate>Sat, 26 Jan 2008 18:55:52 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0.7</generator>
	<language>es-es</language>
			<item>
		<title>Visual Basic vs Velneo</title>
		<link>http://enrique.barbeito.org/blog/visual-basic-vs-velneo/</link>
		<comments>http://enrique.barbeito.org/blog/visual-basic-vs-velneo/#comments</comments>
		<pubDate>Thu, 02 Nov 2006 12:48:11 +0000</pubDate>
		<dc:creator>Enrique Barbeito García</dc:creator>
		
		<category>Opiniones</category>

		<category>Programación</category>

		<category>Velneo</category>

		<guid isPermaLink="false">http://enrique.barbeito.org/blog/visual-basic-vs-velneo/</guid>
		<description><![CDATA[  Hace tan sólo unos cuatro años que empecé a interesarme en la programación de aplicaciones gráficas, de gestión y bases de datos. Adoro programar aunque mi dedicación a ésta ha sido, hasta hace muy poco, a nivel amateur. Como herramientas de desarrollo he utilizado Visual Basic 6, Access / VBA y Borland Delphi 6.

Velneo [...] ]]></description>
			<content:encoded><![CDATA[<p> Hace tan sólo unos cuatro años que empecé a interesarme en la programación de aplicaciones gráficas, de gestión y bases de datos. Adoro programar aunque mi dedicación a ésta ha sido, hasta hace muy poco, a nivel amateur. Como herramientas de desarrollo he utilizado Visual Basic 6, Access / <acronym title="Visual Basic for Applications">VBA</acronym> y Borland Delphi 6.</p>
<p><a id="more-579"></a></p>
<p>Velneo lo conocí en su versión 6.3.9, hace medio año aproximadamente cuando empecé a dar mis primeros pasos como programador profesional. Mi experiencia con Velneo ha sido más que satisfactoria; hice mi primera pequeña aplicación en menos de una semana, utilizando objetos de casi todo tipo incluyendo pequeños procesos, tablas y enlaces de distintos tipos que me dejaron boquiabierto en más de una ocasión (los hermanos contiguos, singular a plural y sobretodo los enlaces indirectos con los que sencillamente aluciné en colores). No me considero una persona demasiado inteligente, no más de lo estrictamente normal; creo que el secreto está en una buena base de programación y bases de datos, la curva de aprendizaje de Velneo casi plana y el considerable ahorro de desarrollo del que se encarga Velneo.</p>
<p>Debo decir que Velneo no debería ser comparado con productos que no se pueden considerar herramientas CASE o lenguajes de cuarta generación. Productos como Visual Basic, Delphi y parte de la filosofía .NET no sé si se podría considerar &#8220;de cuarta generación&#8221; pues para mí las herramientas CASE son aquellas que se implican en una programación asistida _real_ no simplemente en la gestión de ventanas, eventos y paso de mensajes o comunicación con SGBDs extenos. Velneo, si se compara con lo anterior, supone una revolución en el mundo del desarrollo de software de gestión pues el concepto de &#8220;programación asistida&#8221; se lleva casi al extremo.</p>
<p>Para empezar, el tamaño de los ficheros binarios generados por el compilador de Visual Basic resultan un tanto grandes. Ello unido a la dependencia de librerías dinámicas que en muchos casos hace un engorro la ejecución de software realizado en <acronym title="Visual Basic">VB</acronym> sobre ordenadores cliente donde no esté instalado la suite Visual Studio. Con Velneo la instalación y puesta a punto del software es bastante más sencilla y transparente, además de que el tamaño de los ficheros ejecutables (.vam) resulta mucho menor en comparación con <acronym title="Visual Basic">VB</acronym> gracias a la compresión de datos.</p>
<p>Por otra parte, la rapidez con la que se ejecutan aplicaciones <acronym title="Visual Basic">VB</acronym> es en muchos casos lenta. La experiencia que tengo en Velneo es que el tiempo de espera entre éste y <acronym title="Visual Basic">VB</acronym> es menor: hacer doble click sobre el icono de la aplicación, establecer la conexión con el <a href="http://www.velneo.com/web/p.pro?vdis=4&#038;p=21048&#038;vdis=">Velneo vMotor</a>, iniciar la aplicación con sus procesos de inicialización. Para mí Velneo supera a <acronym title="Visual Basic">VB</acronym> en inicialización y tiempos de espera en el uso del programa.</p>
<p>Además, la dependencia de herramientas y software externo en <acronym title="Visual Basic">VB</acronym> se dispara en comparación con Velneo, donde todo está integrado (incluso el desarrollo web dinámico se puede llevar todo dentro del mismo proyecto software). Con <acronym title="Visual Basic">VB</acronym> estás a merced de las raras cadenas de conexión, distintos sistemas gestores de bases de datos y/o librerías de terceros.</p>
<p>Hablando en términos de bases de datos, con <acronym title="Visual Basic">VB</acronym> sólo puedes atacar un mismo modelo de información: el Entidad/Relación. En Velneo dispones del modelo Relacional Avanzado que forma la base del desarrollo de aplicaciones con Velneo y, por otro lado, también puedes atacar bases de datos relaciones. Digamos que con <acronym title="Visual Basic">VB</acronym> tendrás que hacerte amigo del <acronym title="Structured Query Language">SQL</acronym> te guste o no, en Velneo con tener claro qué quieres hacer suele ser suficiente.</p>
<p>Otro tema es el antiguo concepto de los componentes <acronym title="Ole Control eXtension">OCX</acronym> de Visual Basic; siempre me resultó un poco engorroso. La programación de componentes de software para la posterior construcción de aplicaciones en base a módulos es en teoría una idea muy buena y un buen planteamiento de hacer las cosas desde un principio. Pero se debería utilizar POO, diseño de componentes &#8220;por contrato&#8221;, programación genérica, etc. Utilizar componentes <acronym title="Ole Control eXtension">OCX</acronym> de terceros resultaba complicado porque en muchas ocasiones fallaban, hacer los tuyos propios no era fácil ya que <acronym title="Visual Basic">VB</acronym> realmente no está pensado para el diseño de componentes. En Velneo no hay tantos problemas; hoy en día se dispone del Almacén de Objetos que te permite importar toda clase de objetos: tablas, relaciones, variables, formularios, tablas, rejillas, etc. Aunque la finalidad de los <acronym title="Ole Control eXtension">OCX</acronym> y el Almacén de Objetos no es del todo igual, el Almacén de Objetos sí permite al desarrollador ahorrar muchísimo tiempo; de cara a hacer aplicaciones de gestión es mucho más útil.</p>
<p>Con <acronym title="Visual Basic">VB</acronym> debes tener mucho más cuidado a la hora de llevar el control de los tipos de datos y la gestión de errores en tiempo de ejecución porque no sabes con qué te va a salir el usuario final (<em>ponte en lo peor y acertarás</em>, casi tan cierto como el &#8220;divide y vencerás&#8221;). La robustez de una aplicación final en Velneo es infinitamente superior a la de otra escrita en <acronym title="Visual Basic">VB</acronym>. Los errores en tiempo de ejecución, con <acronym title="Visual Basic">VB</acronym>, se multiplican y además no existe un verdadero control de excepciones (mejor dicho, no existe en absoluto). En la mayoría de los casos, con <acronym title="Visual Basic">VB</acronym> te tienes que amparar en el uso de sentencias GOTO (los famosos &#8220;On Error&#8221;) y rezar para que no se te haya pasado por alto ningún caso donde el programa pudiera romperse. Velneo proporciona binarios a prueba de bombas y rara vez nos encontraremos con que el ejecutor de aplicaciones de Velneo se cierre de manera inesperada o devuelva un mensaje de error y de que se cerrará.</p>
<p>Aunque <acronym title="Visual Basic">VB</acronym> es fácil de aprender, su sintaxis se vuelve infumable. Personalmente no me gusta, a parte de resultarme antiestética me hace escribir <a href="http://en.wikipedia.org/wiki/Spaghetti_code">código espaguetti </a> desde el principio y hasta el final. Esto para un programador que le encante programar y piense que &#8220;el código es poesía&#8221; resulta un tema importante. La programación en Velneo tampoco me resulta muy elegante que digamos pero su sintaxis se acerca más al lenguaje C (con una sintaxis que en mi opinión es muy buena) y sobretodo aún siendo poco estética, resulta igual de fácil de aprender y es una parte más del entorno de desarrollo, nada más. En <acronym title="Visual Basic">VB</acronym> todo es código, por lo que su infumable sintaxis se puede volver un problema. En Velneo, si llevas un desarrollo correcto, rara vez tendrás que escribir una línea de código (a menos que se necesiten hacer tareas críticas o temas muy personalizados que se escapen un poco de la finalidad de Velneo) por lo que no supone un problema tener que utilizar un lenguaje que de primeras no te pueda gustar: es fácil y es en muchos casos auxiliar, en Velneo casi todo está ya programado.</p>
<p>La escalabilidad en un sistema hecho con <acronym title="Visual Basic">VB</acronym> y Access (la base de datos que normalmente se emplea en desarrollos con <acronym title="Visual Basic">VB</acronym>) es muy inferior a la que se puede obtener con una solución Velneo. Y si no, que se lo pregunten a los que hoy día mantienen bases de datos enormes en Velneo, del por qué decidieron migrar&#8230;</p>
<p>En <acronym title="Visual Basic">VB</acronym> no se ha sabido llevar un buen y ordenado control de muchas cosas. Por ejemplo, para acceder a ficheros uno tiene muchas formas de hacerlo y esto no siempre es positivo porque no siempre sabes cómo será mejor, si con X función o con Y objeto. Digamos que <acronym title="Visual Basic">VB</acronym> ha crecido en algunas partes del lenguaje de un modo un tanto caótico y a la hora de consultar referencias o ayudas, te encuentras con que puedes solucionar tu problema de varias formas pero no lo tienes claro, no ves cuál es más apropiada o cuál más eficiente para tu caso. Con Velneo hay menos trampas donde poder meter la pata, te puedes preocupar más en las tareas de análisis y diseño del sistema y dejarte de empanadas mentales de ver si es mejor utilizar esta función o usar este otro procedimiento.</p>
<p>A la hora de actualizar una versión de un software hecho con Velneo, podrás estar bastante seguro de que el margen a errores será muy muy pequeño en comparación a actualizar una aplicación hecha con <acronym title="Visual Basic">VB</acronym>. En Velneo no digo que no haya que tener un poco de cuidao cuando se renombren tablas, campos de tablas o cosas así pero el tiempo y preocupaciones que uno se ahorra trabajando con Velneo es muy a tener en cuenta comparado con lo que a uno se le puede venir encima en otros entonos.</p>
<p>El desarrollo de software es un mundo en el que se intenta reducir costes de producción intentando hacer que los tiempos de programación sean cada vez menores. ¿Con Visual Basic se consigue esto en realidad? Comparado con Velneo me temo que no, ya que Velneo sí te permite centrarte de lleno en la construcción de una base de datos sólida y eficiente, sin preocuparte demasiado en los tiempos de pogramación pues ésta es asistida de verdad y uno no tiene que &#8220;picar demasiado&#8221;.</p>
<p><strong>Información adicional</strong> sobre esta anotación:</p>
<ul>
<li>Se ha intentado comparar en todo momento algunas de las características de Visual Basic 6 que, a nivel personal, no me terminaron nunca de gustar con algunas características de Velneo.</li>
<li>Este artículo fue originalmente escrito como <em>material de trabajo</em> para el <a href="http://enrique.barbeito.org/blog/dia-en-vigo-y-colaboracion-con-velneo/" title="Día en Vigo y colaboración con Velneo">pasado día 26</a>. Más información en el enlace anterior y en <a href="http://blog.velneo.com/web/index.pro?vdis=4" title="Velneo Existe!">esta otra entrada</a> publicada en la bitácora de Velneo.</li>
<li>El texto se publicó originalmente en la <a href="http://blog.velneo.com/" title="Velneo.com/Blog">bitácora de Velneo</a>:
<ul>
<li><a href="http://blog.velneo.com/web/p.pro?p=32295&#038;vdis=4" title="Visual Basic vs Velneo">En castellano</a></li>
<li><a href="http://english.velneo.com/web/p.pro?vdis=3&#038;p=32331" title="Visual Basic vs Velneo">Traducido al inglés</a></li>
</ul>
</li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://enrique.barbeito.org/blog/visual-basic-vs-velneo/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Delphi 6 (Guias Prácticas)</title>
		<link>http://enrique.barbeito.org/blog/delphi-6-guias-practicas/</link>
		<comments>http://enrique.barbeito.org/blog/delphi-6-guias-practicas/#comments</comments>
		<pubDate>Mon, 27 Mar 2006 22:21:51 +0000</pubDate>
		<dc:creator>Enrique Barbeito García</dc:creator>
		
		<category>Programación</category>

		<category>Libros</category>

		<guid isPermaLink="false">/?p=562</guid>
		<description><![CDATA[ 


Hace unas semanas me llevaba prestado de la Biblioteca Politécnica de la universidad un pequeño libro acerca de Borland Delphi 6 con la intención de pegarle un rápido repaso a lo fundamental de este entorno de desarrollo. La verdad que las populares guías prácticas de la editorial Anaya Multimedia no gozan de demasiada buena crítica, [...] ]]></description>
			<content:encoded><![CDATA[<p>
<div class="cajitaIzq"><a href="http://www.fcharte.com/Default.asp?libro84-415-1255-8" title="Guía práctica para usuarios de Delphi 6"><img src="http://enrique.barbeito.org/img/delphi6.jpg" alt="delphi6.jpg" border="0" /></a></div>
</p>
<p>Hace unas semanas me llevaba prestado de la <em>Biblioteca Politécnica</em> de la universidad un pequeño libro acerca de <a href="http://www.borland.com/us/products/delphi/index.html" title="Borland IDE : Delphi">Borland Delphi 6</a> con la intención de pegarle un rápido repaso a lo fundamental de este entorno de desarrollo. La verdad que las populares <a href="http://www.anayamultimedia.es/cgigeneral/coleccion.pl?id_clase=1050&#038;nivel=1&#038;id_sello_editorial_web=23&#038;id_criterio=1000004&#038;rutina=2" title="Anaya Multimedia - Colección: GUÍAS PRÁCTICAS"><em>guías prácticas</em></a> de la editorial <a href="http://www.anayamultimedia.es" title="Anaya Multimedia">Anaya Multimedia</a> no gozan de demasiada buena crítica, al menos no las que a mí me llegan. El caso que decidí darle una oportunidad a ésta en concreto puesto que al ver el índice de contenidos y comprobar que me podría valer perfectamente para repasar casi todo lo aprendido este año sobre Delphi 6. Y la conclusión es que no me arrepiento pues fue una lectura amena y al grano, rápida de leer.</p>
<p>El libro está dirigido a lectores sin conocimiento alguno de Delphi. Francamente, si lo único que se quiere tener es una introducción, sin demasiadas explicaciones, para comenzar a hacer tus primeros pinitos no es, entonces, una mala guía. Aunque pienso que siempre y cuando ya te hayas peleado con anterioridad con temas propios de la programación visual y tener una minúscula idea de orientación a objetos. Para partir desde cero y aprender Borland Delphi con bastante solidez recomendaría otro libro: <a href="http://www.classiquecentral.com/dsd4.zip" title="dsd4.zip">La Cara Oculta de Delphi 4</a>; bastante extenso, me lo he intentado leer casi todo y es incluso divertido a veces gracias a que su autor, <a href="http://www.marteens.com/" title="Calling Dr. Marteens">Ian Marteens</a>, introduce amenos ejemplos, bromas y comentarios personales :-) Y que no os eche para atrás que el libro se haya escrito para la versión 4 de Delphi, para neófitos de Delphi 6 lo recomendaría incluso _antes_ que su homólogo <a href="http://www.marteens.com/pdfs/dsd6idx.pdf" title="dsd6idx.pdf">La Cara Oculta de Delphi 6</a> (este lo teníamos en clase como material de consulta y, de nuevo, es muy bueno. Aunque, <abbr title="En Mi Humilde Opinión">EMHO</abbr>, no recomendable como libro inicial; más bien, para profundizar en el trabajo con Bases de datos)</p>
<p><a id="more-562"></a></p>
<p>El índice de contenidos de la <em>Guía Práctica de Delphi 6</em> se puede hallar [ <a href="http://www.fcharte.com/libros/84-415-1255-8.pdf" title="84-415-1255-8.pdf">aquí</a> ] a continuación, un resumen:
<ol>
<li>Instalación
<ol>
<li>Introducción</li>
<li>Consideraciones previas</li>
<li>Instalación de Delphi 6</li>
</ol>
</li>
<li>El entorno
<ol>
<li>Introducción</li>
<li>Elementos iniciales</li>
<li>El depósito de objetos</li>
<li>Obtener ayuda</li>
<li>Creación de la interfaz de un programa</li>
</ol>
</li>
<li>Gestión de proyectos
<ol>
<li>Introducción</li>
<li>Gestión de un proyecto</li>
<li>El archivo de proyecto</li>
<li>Archivos de ficha</li>
<li>Módulos de código</li>
<li>Grupos de proyectos</li>
<li>Otros elementos de un proyecto</li>
</ol>
</li>
<li>Fundamentos de Object Pascal
<ol>
<li>Introducción</li>
<li>Estructura general</li>
<li>Constantes y variables</li>
<li>Ámbito de los identificadores</li>
<li>Expresiones</li>
<li>Estructuras de control</li>
<li>Procedimientos y funciones</li>
<li>Fundamentos de orientación a objetos</li>
</ol>
</li>
<li>Manipulación de componentes
<ol>
<li>Introducción</li>
<li>Tipos de componentes</li>
<li>Instalación de un componente</li>
<li>Propiedades</li>
<li>Eventos</li>
<li>Métodos</li>
</ol>
</li>
<li>Componentes más habituales
<ol>
<li>Introducción</li>
<li>Trabajar con la ficha</li>
<li>Botones</li>
<li>Etiquetas de texto</li>
<li>Petición de datos</li>
<li>Entrada de texto</li>
<li>Selección de opciones</li>
<li>Selección de opciones exclusivas</li>
<li>Grupos de opciones exclusivas</li>
<li>Listas de elementos</li>
<li>Listas desplegables</li>
<li>Controles contenedores</li>
<li>Barras de desplazamiento</li>
<li>Elementos gráficos</li>
<li>Imágenes de mapas de bits</li>
<li>Listas de unidades, carpetas y archivos</li>
<li>Eventos periódicos</li>
<li>Construcción y uso de menús</li>
</ol>
</li>
<li>Depuración y excepciones
<ol>
<li>Introducción</li>
<li>Proceso de depuración</li>
<li>Control de excepciones</li>
</ol>
</li>
<li>Uso de múltiples ventanas
<ol>
<li>Introducción</li>
<li>Trabajo con múltiples fichas</li>
<li>Cuadros de diálogo de uso común</li>
<li>En la práctica</li>
</ol>
</li>
<li>Trabajo con bases de datos
<ol>
<li>Introducción</li>
<li>Gestión de alias</li>
<li>Creación de una tabla</li>
<li>Modificar la estructura de una tabla</li>
<li>Editar el contenido de una tabla</li>
<li>Consultas</li>
</ol>
</li>
<li>Componentes enlazados a datos
<ol>
<li>Introducción</li>
<li>Edición de una tabla</li>
<li>Tablas y consultas</li>
<li>Controles enlazados a datos</li>
<li>Acceso programático a los datos</li>
</ol>
</li>
<li>Creación de informes
<ol>
<li>Introducción</li>
<li>Funcionamiento general de QuickReport</li>
<li>El componente TQuickReport</li>
<li>El componente TQRBand</li>
<li>Contenido de las secciones</li>
<li>Un ejemplo</li>
</ol>
</li>
<li>Componentes avanzados
<ol>
<li>Introducción</li>
<li>Valores discretos y rangos</li>
<li>Curso de un proceso</li>
<li>Incrementar y decrementar valores</li>
<li>Cabeceras redimensionables</li>
<li>Barras de estado</li>
<li>Ventanas multipágina</li>
<li>Almacenes de imágenes</li>
<li>Listas jerárquicas</li>
<li>El control TListView</li>
<li>Barras de botones</li>
</ol>
</li>
<li>Reutilización del trabajo
<ol>
<li>Introducción</li>
<li>Listas de acciones</li>
<li>Componentes compuestos</li>
</ol>
</li>
</ol>
<p>La parte que me he visto por encima es la que trata el conjunto de componentes de uso más común a la hora de diseñar formularios y frames. Aunque no crea que sobra del todo, tampoco pienso que merezca mucho la pena (y mucho menos estudiársela. Para algo están las ayudas en línea). De las que menos me ha gustado es la que explica el trabajo con bases de datos. Sólo se centra en el, hoy por hoy obsoleto, <acronym title="Borland Delphi Engine">BDE</acronym> y el manejo del <em>Database Desktop</em> (una versión reducida de <a href="http://es.wikipedia.org/wiki/Paradox_%28base_de_datos%29" title="Wikipedia - Paradox (base de datos)">Paradox</a> &#8211;enlazo a la Wikipedia porque esto debería ya tener mero carácter enciclopédico jeje&#8211;). Creo que habría estado más acertado mostrar <a href="http://www.borland.com/interbase/" title="Borland InterBase">InterBase</a> como gestor de bases de datos y explicar los componentes <abbr title="InterBase eXpress">IBX</abbr> como controles de acceso a datos. La sección que le dedican a la programación orientada a objetos es, a lo sumo, anecdótica (creo recordar &#8211;ya no tengo el libro&#8211; que le dedicaban ¿un par de hojas?).</p>
<p>Partes que recuerdo me hayan gustado más han sido las del tratamiento de excepciones (bastante resumida), la gestión de proyectos Delphi o la dedicaba al uso de múltiples ventanas. También la de creación de informes creo recordar que me pareció interesante (aunque, también, algo desfasado el QReports).</p>
<p>En resumen, para repasar en <em>momentos REDOX</em> (aquellos que se viven sin tocar para nada el entorno y empiezas a oxidarte) me parece una rápida y concisa referencia. No está mal.</p>
<blockquote><p><strong>Título</strong>: Delphi 6 (Guias Practicas)<br />
<strong>Autor</strong>: Francisco Charte Ojeda <br />
<strong>ISBN</strong>: 84-415-1255-8<br />
<strong>Precio</strong>: 12,30 €<br />
<strong>Edición</strong>: Anaya Multimedia<br />
Impreso en España.</p></blockquote>]]></content:encoded>
			<wfw:commentRss>http://enrique.barbeito.org/blog/delphi-6-guias-practicas/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Mi primer proyecto en SourceForge.net</title>
		<link>http://enrique.barbeito.org/blog/mi-primer-proyecto-en-sourceforgenet/</link>
		<comments>http://enrique.barbeito.org/blog/mi-primer-proyecto-en-sourceforgenet/#comments</comments>
		<pubDate>Wed, 11 Jan 2006 18:17:20 +0000</pubDate>
		<dc:creator>Enrique Barbeito García</dc:creator>
		
		<category>Programación</category>

		<category>Personal</category>

		<guid isPermaLink="false">/?p=555</guid>
		<description><![CDATA[  Para los que aún no conozcan SourceForge.net, decir que se trata de la mayor y principal forja de software de código abierto que existe en Internet. Diría que es, y con diferencia, el sitio web de servicios de desarrollo de software &#8211;de código abierto, repito&#8211; por excelencia y que, incluso, me costaría creer que [...] ]]></description>
			<content:encoded><![CDATA[<p> Para los que aún no conozcan <a href="http://sourceforge.net/" title="SourceForge.net - Create, Participate, Evaluate">SourceForge.net</a>, decir que se trata de la mayor y principal <em>forja de software</em> de código abierto que existe en Internet. Diría que es, y con diferencia, el sitio web de servicios de desarrollo de software &#8211;de código abierto, repito&#8211; por excelencia y que, incluso, me costaría creer que cualquier programador entusiasta de Software Libre no lo conociese todavía. Vamos que, exagerándolo un poco, es al desarrollador lo que las mezquitas lo son a los musulmanes :-)</p>
<p>Una forja de software se podría definir como un punto de encuentro preparado para albergar un extenso y variado grupo de proyectos software. Dicho de otro modo, sería un repositorio de código fuente. Creo que todas estas forjas son accesibles a través de la web y, además de servir de repositorio de código, ofrecen una serie de servicios y herramientas para llevar a cabo el desarrollo de cada proyecto. <a href="http://sourceforge.net/" title="SourceForge.net - Create, Participate, Evaluate">SourceForge.net</a> está desarrollada con un software del mismo nombre y aporta útiles herramientas: diversos sistemas de seguimiento (de bugs, de solicitudes y de parches), foros, listas de correo y repositorio <acronym title="Concurrent Versions System">CVS</acronym> accesible por web. Bueno, y más cosas como servicio de alojamiento web, centro de descargas de cada proyecto albergado, descripciones e información de los mismos, posibilidad de unirse a otros proyectos y participar en ellos, información de desarrolladores, tablones de noticias&#8230; y un largo etcétera pues es un sitio muy muy amplio. Tiene de todo para llevar a buen puerto desarrollos de software en equipo, del modo más ágil y efectivo que se pueda.</p>
<p>Dicho esto, esta tarde he registrado lo que será el primer proyecto que quiero poner en marcha en SourceForge.net. Bueno, no es así del todo porque para que llegue a convertirse en un nuevo proyecto de esta forja, la propuesta del mismo que he enviado debe ser aceptada. Por lo que <strike>hasta el momento todavía está pendiente de ser revisado por el equipo humano de SF.net</strike>. [<abbr title="Actualización">act</abbr>: acabo de mirar y el proyecto ya ha sido aprobado, ¡Mola!]</p>
<div class="cajitaDcha"><img src="http://enrique.barbeito.org/img/mR-minilogo.jpg" alt="mR-minilogo.jpg" border="0" /></div>
<blockquote><div class="cita">Project Registration: Submission completed</p>
<p>Your request should be reviewed by SourceForge.net staff in the next two business days (9AM to 5PM, Monday through Friday). Response regarding your project (notice of rejection/approval) will be posted to your My SourceForge.net Projects page (accessible via the My SF.net link at the top of each site page). No email notification will be provided about approval/rejection of your project.</p>
<p>For your convenience, a copy of the details you submitted about your project has been sent to you via email. Please keep this information in a safe place, for future reference.</p>
<p>Should you have questions or concerns regarding the status of your project registration, please submit a Support Request.</p>
<p>You may check on the status of your project at any time using the My SF.net Projects page. Until your registration is reviewed by SourceForge.net staff, it will be shown in the list of Pending Projects on the My SF.net Projects page. After review has occurred, it will appear in the list of Active or Rejected projects, depending on the outcome of that review.</div>
<div class="cita">SourceForge.net: Project Registration.</div>
</blockquote>
<p>Y poco más que comentar hasta el momento. El objetivo con esto es reescribir por completo una aplicación de gestión de informes que en su día le hice a mi madre para su trabajo y hacerlo progresivamente a través de SF.net donde, finalmente, quedará <em>liberada</em> con una licencia <a href="http://es.wikipedia.org/wiki/GPL" title="GNU GPL - Wikipedia"><acronym title="GNU General Public License">GPL</acronym></a>. Por supuesto ya tengo el problema descrito y <em>analizado</em>, esquemas EER, diagramas de flujo de datos, diseños de la <acronym title="Graphical User Interface">GUI</acronym>, entradas, salidas y rollos varios. Para la, posible, sorpresa de algunos, el resultado será un aplicativo que corra sobre Microsoft Windows&#8217; que son las plataformas donde, se supone, funcionará. Del gestor de bases de datos todavía estoy decidiéndolo. Y el entorno de desarrollo elegido es <a href="www.borland.com/delphi/" title="Borland IDE : Delphi">Borland Delphi 6</a> que hoy día es una plataforma de desarrollo antigua y seguro que no la mejor opción para desarrollar, pero que en fin, para mí es suficiente y además es lo que me enseñan en clase. Este programa servirá como proyecto de fin de curso de una de mis asignaturas, así que ello mucho tiene que ver para que lo vaya a hacer en este entorno&#8230;</p>
<p>Como todavía no tengo más que <a href="http://es.wikipedia.org/wiki/Vaporware" title="Vaporware - Wikipedia">vaporware</a> y me ha hecho mucha ilusión la tontada de registrar un proyecto en SF.net pues por eso de escribir una nota así, sin dar grandes detalles. Si a medida que vaya terminando consigo algo <em>loable de ser reseñado aquí</em>, toma ya, de seguro escribiré más al respecto.</p>
<p>Para terminar, recomendar a los navegantes el darse una vuelta por <a href="http://sourceforge.net/" title="SourceForge.net - Create, Participate, Evaluate">SourceForge.net</a> porque seguro encuentran algo de mucha utilidad :-)
</p>]]></content:encoded>
			<wfw:commentRss>http://enrique.barbeito.org/blog/mi-primer-proyecto-en-sourceforgenet/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The Evolution of a Programmer</title>
		<link>http://enrique.barbeito.org/blog/the-evolution-of-a-programmer/</link>
		<comments>http://enrique.barbeito.org/blog/the-evolution-of-a-programmer/#comments</comments>
		<pubDate>Sun, 14 Aug 2005 18:39:23 +0000</pubDate>
		<dc:creator>Enrique Barbeito García</dc:creator>
		
		<category>Programación</category>

		<category>Humor</category>

		<guid isPermaLink="false">/?p=539</guid>
		<description><![CDATA[  Navegando sin rumbo fijo por la embravecida información contenida en del.icio.us, me topo con un gran documento que, doy por sentado, deleitará al público informático presente.
Se trata de The Evolution of a Programmer, un elocuente manifiesto en clave de humor que refleja el ciclo de vida de todo buen programador que se precie. Desde [...] ]]></description>
			<content:encoded><![CDATA[<p> Navegando sin rumbo fijo por la embravecida información contenida en <a href="http://del.icio.us" title="del.icio.us">del.icio.us</a>, me topo con un gran documento que, doy por sentado, deleitará al público informático presente.</p>
<p>Se trata de <a href="http://www.cse.ogi.edu/~diatchki/jokes/programmer.html" title="The Evolution of a Programmer">The Evolution of a Programmer</a>, un elocuente manifiesto en clave de humor que refleja el ciclo de vida de todo buen programador que se precie. Desde los más dulces inicios en tiempos de instituto y acné facial, enamorado del Spectrum y BASIC, hasta la decadencia del propio ser en el <em>lado oscuro de la fuerza</em> ;-) Cuando lo leáis, entenderéis mejor de lo qué estoy hablando jaja.</p>
<p>Aunque el texto apareció publicado originalmente en la página web de <a href="http://www.cse.ogi.edu/~diatchki/" title="Iavor S. Diatchki">Iavor S. Diatchki</a>, está firmado de forma anónima, por lo que a priori se desconoce el autor del mismo.</p>
<p>No revelo más, espero que disfruten del genuino (y sano, aunque no lo parezca :P) humor informático. Con todos ustedes, las etapas del un programador:</p>
<p><a id="more-539"></a></p>
<h5>High School/Jr.High</h5>
<p><pre class="vb"><span style="color: #cc66cc;">10</span> <span style="color: #b1b100;">PRINT</span> <span style="color: #ff0000;">&quot;HELLO WORLD&quot;</span>
<span style="color: #cc66cc;">20</span> <span style="color: #b1b100;">END</span></pre></p>
<h5>First year in College</h5>
<p><pre class="pascal"><span style="color: #000000; font-weight: bold;">program</span> Hello<span style="color: #66cc66;">&#40;</span>input, output<span style="color: #66cc66;">&#41;</span>
  <span style="color: #b1b100;">begin</span>
    <span style="">writeln</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'Hello World'</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #b1b100;">end</span>.</pre></p>
<h5>Senior year in College</h5>
<p><pre class="lisp"><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">defun</span> hello
  <span style="color: #66cc66;">&#40;</span>print
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> 'Hello <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> 'World<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></p>
<h5>New professional</h5>
<p><pre class="c"><span style="color: #339933;">#include &amp;lt;stdio.h&amp;gt;</span>
<span style="color: #993333;">void</span> main<span style="color: #66cc66;">&#40;</span><span style="color: #993333;">void</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
  <span style="color: #993333;">char</span> *message<span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span> = <span style="color: #66cc66;">&#123;</span><span style="color: #ff0000;">&quot;Hello &quot;</span>, <span style="color: #ff0000;">&quot;World&quot;</span><span style="color: #66cc66;">&#125;</span>;
  <span style="color: #993333;">int</span> i;
&nbsp;
  <span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span>i = <span style="color: #cc66cc;">0</span>; i &amp;lt; <span style="color: #cc66cc;">2</span>; ++i<span style="color: #66cc66;">&#41;</span>
    <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;%s&quot;</span>, message<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;
  <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></p>
<h5>Seasoned professional</h5>
<p><pre class="c"><span style="color: #339933;">#include &amp;lt;iostream.h&amp;gt;</span>
<span style="color: #339933;">#include &amp;lt;string.h&amp;gt;</span>
&nbsp;
class <span style="color: #993333;">string</span>
<span style="color: #66cc66;">&#123;</span>
private:
  <span style="color: #993333;">int</span> size;
  <span style="color: #993333;">char</span> *ptr;
&nbsp;
  <span style="color: #993333;">string</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> : size<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>, ptr<span style="color: #66cc66;">&#40;</span>new <span style="color: #993333;">char</span><span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span> ptr<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#93;</span> = <span style="color: #cc66cc;">0</span>; <span style="color: #66cc66;">&#125;</span>
&nbsp;
  <span style="color: #993333;">string</span><span style="color: #66cc66;">&#40;</span><span style="color: #993333;">const</span> <span style="color: #993333;">string</span> &amp;s<span style="color: #66cc66;">&#41;</span> : size<span style="color: #66cc66;">&#40;</span>s.<span style="color: #202020;">size</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#123;</span>
    ptr = new <span style="color: #993333;">char</span><span style="color: #66cc66;">&#91;</span>size + <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#93;</span>;
    strcpy<span style="color: #66cc66;">&#40;</span>ptr, s.<span style="color: #202020;">ptr</span><span style="color: #66cc66;">&#41;</span>;
  <span style="color: #66cc66;">&#125;</span>
&nbsp;
  ~<span style="color: #993333;">string</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#123;</span>
    delete <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span> ptr;
  <span style="color: #66cc66;">&#125;</span>
&nbsp;
  friend ostream &amp;operator &amp;lt;&amp;lt;<span style="color: #66cc66;">&#40;</span>ostream &amp;, <span style="color: #993333;">const</span> <span style="color: #993333;">string</span> &amp;<span style="color: #66cc66;">&#41;</span>;
  <span style="color: #993333;">string</span> &amp;operator=<span style="color: #66cc66;">&#40;</span><span style="color: #993333;">const</span> <span style="color: #993333;">char</span> *<span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>;
&nbsp;
ostream &amp;operator&amp;lt;&amp;lt;<span style="color: #66cc66;">&#40;</span>ostream &amp;stream, <span style="color: #993333;">const</span> <span style="color: #993333;">string</span> &amp;s<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
  <span style="color: #b1b100;">return</span><span style="color: #66cc66;">&#40;</span>stream &amp;lt;&amp;lt; s.<span style="color: #202020;">ptr</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #993333;">string</span> &amp;string::<span style="color: #202020;">operator</span>=<span style="color: #66cc66;">&#40;</span><span style="color: #993333;">const</span> <span style="color: #993333;">char</span> *chrs<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
  <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>this != &amp;chrs<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#123;</span>
    delete <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span> ptr;
    size = strlen<span style="color: #66cc66;">&#40;</span>chrs<span style="color: #66cc66;">&#41;</span>;
    ptr = new <span style="color: #993333;">char</span><span style="color: #66cc66;">&#91;</span>size + <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#93;</span>;
    strcpy<span style="color: #66cc66;">&#40;</span>ptr, chrs<span style="color: #66cc66;">&#41;</span>;
  <span style="color: #66cc66;">&#125;</span>
  <span style="color: #b1b100;">return</span><span style="color: #66cc66;">&#40;</span>*this<span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
  <span style="color: #993333;">string</span> str;
&nbsp;
  str = <span style="color: #ff0000;">&quot;Hello World&quot;</span>;
  <a href="http://www.opengroup.org/onlinepubs/009695399/functions/cout.html"><span style="color: #000066;">cout</span></a> &amp;lt;&amp;lt; str &amp;lt;&amp;lt; endl;
&nbsp;
  <span style="color: #b1b100;">return</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></p>
<h5>Master Programmer</h5>
<p><pre class="php"><span style="color: #66cc66;">&#91;</span>
uuid<span style="color: #66cc66;">&#40;</span>2573F8F4-CFEE-101A-9A9F-00AA00342820<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#93;</span>
library LHello
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #808080; font-style: italic;">// bring in the master library</span>
    importlib<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;actimp.tlb&quot;</span><span style="color: #66cc66;">&#41;</span>;
    importlib<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;actexp.tlb&quot;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
    <span style="color: #808080; font-style: italic;">// bring in my interfaces</span>
    <span style="color: #808080; font-style: italic;">#include &quot;pshlo.idl&quot;</span>
&nbsp;
    <span style="color: #66cc66;">&#91;</span>
    uuid<span style="color: #66cc66;">&#40;</span>2573F8F5-CFEE-101A-9A9F-00AA00342820<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#93;</span>
    cotype THello
 <span style="color: #66cc66;">&#123;</span>
 interface IHello;
 interface IPersistFile;
 <span style="color: #66cc66;">&#125;</span>;
<span style="color: #66cc66;">&#125;</span>;
&nbsp;
<span style="color: #66cc66;">&#91;</span>
exe,
uuid<span style="color: #66cc66;">&#40;</span>2573F890-CFEE-101A-9A9F-00AA00342820<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#93;</span>
module CHelloLib
<span style="color: #66cc66;">&#123;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">// some code related header files</span>
    importheader<span style="color: #66cc66;">&#40;</span>&amp;lt;windows.h&amp;gt;<span style="color: #66cc66;">&#41;</span>;
    importheader<span style="color: #66cc66;">&#40;</span>&amp;lt;ole2.h&amp;gt;<span style="color: #66cc66;">&#41;</span>;
    importheader<span style="color: #66cc66;">&#40;</span>&amp;lt;except.hxx&amp;gt;<span style="color: #66cc66;">&#41;</span>;
    importheader<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;pshlo.h&quot;</span><span style="color: #66cc66;">&#41;</span>;
    importheader<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;shlo.hxx&quot;</span><span style="color: #66cc66;">&#41;</span>;
    importheader<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;mycls.hxx&quot;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
    <span style="color: #808080; font-style: italic;">// needed typelibs</span>
    importlib<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;actimp.tlb&quot;</span><span style="color: #66cc66;">&#41;</span>;
    importlib<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;actexp.tlb&quot;</span><span style="color: #66cc66;">&#41;</span>;
    importlib<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;thlo.tlb&quot;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
    <span style="color: #66cc66;">&#91;</span>
    uuid<span style="color: #66cc66;">&#40;</span>2573F891-CFEE-101A-9A9F-00AA00342820<span style="color: #66cc66;">&#41;</span>,
    aggregatable
    <span style="color: #66cc66;">&#93;</span>
    coclass CHello
 <span style="color: #66cc66;">&#123;</span>
 cotype THello;
 <span style="color: #66cc66;">&#125;</span>;
<span style="color: #66cc66;">&#125;</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">#include &quot;ipfix.hxx&quot;</span>
&nbsp;
extern HANDLE hEvent;
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> CHello : public CHelloBase
<span style="color: #66cc66;">&#123;</span>
public:
    IPFIX<span style="color: #66cc66;">&#40;</span>CLSID_CHello<span style="color: #66cc66;">&#41;</span>;
&nbsp;
    CHello<span style="color: #66cc66;">&#40;</span>IUnknown *pUnk<span style="color: #66cc66;">&#41;</span>;
    ~CHello<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
    HRESULT  __stdcall PrintSz<span style="color: #66cc66;">&#40;</span>LPWSTR pwszString<span style="color: #66cc66;">&#41;</span>;
&nbsp;
private:
    <a href="http://www.php.net/static"><span style="color: #000066;">static</span></a> int cObjRef;
<span style="color: #66cc66;">&#125;</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">#include &amp;lt;windows.h&amp;gt;</span>
<span style="color: #808080; font-style: italic;">#include &amp;lt;ole2.h&amp;gt;</span>
<span style="color: #808080; font-style: italic;">#include &amp;lt;stdio.h&amp;gt;</span>
<span style="color: #808080; font-style: italic;">#include &amp;lt;stdlib.h&amp;gt;</span>
<span style="color: #808080; font-style: italic;">#include &quot;thlo.h&quot;</span>
<span style="color: #808080; font-style: italic;">#include &quot;pshlo.h&quot;</span>
<span style="color: #808080; font-style: italic;">#include &quot;shlo.hxx&quot;</span>
<span style="color: #808080; font-style: italic;">#include &quot;mycls.hxx&quot;</span>
&nbsp;
int CHello::<span style="color: #006600;">cObjRef</span> = <span style="color: #cc66cc;">0</span>;
&nbsp;
CHello::<span style="color: #006600;">CHello</span><span style="color: #66cc66;">&#40;</span>IUnknown *pUnk<span style="color: #66cc66;">&#41;</span> : CHelloBase<span style="color: #66cc66;">&#40;</span>pUnk<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
    cObjRef++;
    <span style="color: #b1b100;">return</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
HRESULT  __stdcall  CHello::<span style="color: #006600;">PrintSz</span><span style="color: #66cc66;">&#40;</span>LPWSTR pwszString<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
    <a href="http://www.php.net/printf"><span style="color: #000066;">printf</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;%ws&quot;</span>, pwszString<span style="color: #66cc66;">&#41;</span>;
    <span style="color: #b1b100;">return</span><span style="color: #66cc66;">&#40;</span>ResultFromScode<span style="color: #66cc66;">&#40;</span>S_OK<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
CHello::~CHello<span style="color: #66cc66;">&#40;</span>void<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
  <span style="color: #808080; font-style: italic;">// when the object count goes to zero, stop the server</span>
  cObjRef--;
  <span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span> cObjRef == <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">&#41;</span>
    PulseEvent<span style="color: #66cc66;">&#40;</span>hEvent<span style="color: #66cc66;">&#41;</span>;
&nbsp;
  <span style="color: #b1b100;">return</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">#include &amp;lt;windows.h&amp;gt;</span>
<span style="color: #808080; font-style: italic;">#include &amp;lt;ole2.h&amp;gt;</span>
<span style="color: #808080; font-style: italic;">#include &quot;pshlo.h&quot;</span>
<span style="color: #808080; font-style: italic;">#include &quot;shlo.hxx&quot;</span>
<span style="color: #808080; font-style: italic;">#include &quot;mycls.hxx&quot;</span>
&nbsp;
HANDLE hEvent;
&nbsp;
int _cdecl main<span style="color: #66cc66;">&#40;</span>
int argc,
char * argv<span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span>
<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
ULONG ulRef;
DWORD dwRegistration;
CHelloCF *pCF = <span style="color: #000000; font-weight: bold;">new</span> CHelloCF<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
hEvent = CreateEvent<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">NULL</span>, <span style="color: #000000; font-weight: bold;">FALSE</span>, <span style="color: #000000; font-weight: bold;">FALSE</span>, <span style="color: #000000; font-weight: bold;">NULL</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">// Initialize the OLE libraries</span>
CoInitializeEx<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">NULL</span>, COINIT_MULTITHREADED<span style="color: #66cc66;">&#41;</span>;
&nbsp;
CoRegisterClassObject<span style="color: #66cc66;">&#40;</span>CLSID_CHello, pCF, CLSCTX_LOCAL_SERVER,
    REGCLS_MULTIPLEUSE, &amp;dwRegistration<span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">// wait on an event to stop</span>
WaitForSingleObject<span style="color: #66cc66;">&#40;</span>hEvent, INFINITE<span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">// revoke and release the class object</span>
CoRevokeClassObject<span style="color: #66cc66;">&#40;</span>dwRegistration<span style="color: #66cc66;">&#41;</span>;
ulRef = pCF-&amp;gt;Release<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">// Tell OLE we are going away.</span>
CoUninitialize<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #b1b100;">return</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #66cc66;">&#125;</span>
&nbsp;
extern CLSID CLSID_CHello;
extern UUID LIBID_CHelloLib;
&nbsp;
CLSID CLSID_CHello = <span style="color: #66cc66;">&#123;</span> <span style="color: #808080; font-style: italic;">/* 2573F891-CFEE-101A-9A9F-00AA00342820 */</span>
    0x2573F891,
    0xCFEE,
    0x101A,
    <span style="color: #66cc66;">&#123;</span> 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>;
&nbsp;
UUID LIBID_CHelloLib = <span style="color: #66cc66;">&#123;</span> <span style="color: #808080; font-style: italic;">/* 2573F890-CFEE-101A-9A9F-00AA00342820 */</span>
    0x2573F890,
    0xCFEE,
    0x101A,
    <span style="color: #66cc66;">&#123;</span> 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">#include &amp;lt;windows.h&amp;gt;</span>
<span style="color: #808080; font-style: italic;">#include &amp;lt;ole2.h&amp;gt;</span>
<span style="color: #808080; font-style: italic;">#include &amp;lt;stdlib.h&amp;gt;</span>
<span style="color: #808080; font-style: italic;">#include &amp;lt;string.h&amp;gt;</span>
<span style="color: #808080; font-style: italic;">#include &amp;lt;stdio.h&amp;gt;</span>
<span style="color: #808080; font-style: italic;">#include &quot;pshlo.h&quot;</span>
<span style="color: #808080; font-style: italic;">#include &quot;shlo.hxx&quot;</span>
<span style="color: #808080; font-style: italic;">#include &quot;clsid.h&quot;</span>
&nbsp;
int _cdecl main<span style="color: #66cc66;">&#40;</span>
int argc,
char * argv<span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span>
<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
HRESULT  hRslt;
IHello        *pHello;
ULONG  ulCnt;
IMoniker * pmk;
WCHAR  wcsT<span style="color: #66cc66;">&#91;</span>_MAX_PATH<span style="color: #66cc66;">&#93;</span>;
WCHAR  wcsPath<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">2</span> * _MAX_PATH<span style="color: #66cc66;">&#93;</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">// get object path</span>
wcsPath<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#93;</span> = <span style="color: #ff0000;">'<span style="color: #000099; font-weight: bold;">\0</span>'</span>;
wcsT<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#93;</span> = <span style="color: #ff0000;">'<span style="color: #000099; font-weight: bold;">\0</span>'</span>;
<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span> argc &amp;gt; <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
    mbstowcs<span style="color: #66cc66;">&#40;</span>wcsPath, argv<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#93;</span>, <a href="http://www.php.net/strlen"><span style="color: #000066;">strlen</span></a><span style="color: #66cc66;">&#40;</span>argv<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span> + <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>;
    wcsupr<span style="color: #66cc66;">&#40;</span>wcsPath<span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#123;</span>
    fprintf<span style="color: #66cc66;">&#40;</span>stderr, <span style="color: #ff0000;">&quot;Object path must be specified<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #b1b100;">return</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">// get print string</span>
<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>argc &amp;gt; <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span>
    mbstowcs<span style="color: #66cc66;">&#40;</span>wcsT, argv<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#93;</span>, <a href="http://www.php.net/strlen"><span style="color: #000066;">strlen</span></a><span style="color: #66cc66;">&#40;</span>argv<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span> + <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #b1b100;">else</span>
    wcscpy<span style="color: #66cc66;">&#40;</span>wcsT, L<span style="color: #ff0000;">&quot;Hello World&quot;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<a href="http://www.php.net/printf"><span style="color: #000066;">printf</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Linking to object %ws<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>, wcsPath<span style="color: #66cc66;">&#41;</span>;
<a href="http://www.php.net/printf"><span style="color: #000066;">printf</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Text String %ws<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>, wcsT<span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">// Initialize the OLE libraries</span>
hRslt = CoInitializeEx<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">NULL</span>, COINIT_MULTITHREADED<span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>SUCCEEDED<span style="color: #66cc66;">&#40;</span>hRslt<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
  hRslt = CreateFileMoniker<span style="color: #66cc66;">&#40;</span>wcsPath, &amp;pmk<span style="color: #66cc66;">&#41;</span>;
  <span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>SUCCEEDED<span style="color: #66cc66;">&#40;</span>hRslt<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    hRslt = BindMoniker<span style="color: #66cc66;">&#40;</span>pmk, <span style="color: #cc66cc;">0</span>, IID_IHello, <span style="color: #66cc66;">&#40;</span>void **<span style="color: #66cc66;">&#41;</span>&amp;pHello<span style="color: #66cc66;">&#41;</span>;
 
  <span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>SUCCEEDED<span style="color: #66cc66;">&#40;</span>hRslt<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
    <span style="color: #808080; font-style: italic;">// print a string out</span>
    pHello-&amp;gt;PrintSz<span style="color: #66cc66;">&#40;</span>wcsT<span style="color: #66cc66;">&#41;</span>;
&nbsp;
    <a href="http://www.php.net/sleep"><span style="color: #000066;">Sleep</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">2000</span><span style="color: #66cc66;">&#41;</span>;
    ulCnt = pHello-&amp;gt;Release<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
  <span style="color: #66cc66;">&#125;</span>
  <span style="color: #b1b100;">else</span>
    <a href="http://www.php.net/printf"><span style="color: #000066;">printf</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Failure to connect, status: %lx&quot;</span>, hRslt<span style="color: #66cc66;">&#41;</span>;
 
  <span style="color: #808080; font-style: italic;">// Tell OLE we are going away.</span>
  CoUninitialize<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
 
<span style="color: #b1b100;">return</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></p>
<h5>Apprentice Hacker</h5>
<p><pre class="perl"><span style="color: #808080; font-style: italic;">#!/usr/local/bin/perl</span>
<span style="color: #0000ff;">$msg</span>=<span style="color: #ff0000;">&quot;Hello, world.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>;
<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>$<span style="color: #808080; font-style: italic;">#ARGV &amp;gt;= 0) {</span>
  <span style="color: #b1b100;">while</span><span style="color: #66cc66;">&#40;</span><a href="http://www.perldoc.com/perl5.6/pod/func/defined.html"><span style="color: #000066;">defined</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$arg</span>=<a href="http://www.perldoc.com/perl5.6/pod/func/shift.html"><span style="color: #000066;">shift</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">@ARGV</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
    <span style="color: #0000ff;">$outfilename</span> = <span style="color: #0000ff;">$arg</span>;
    <a href="http://www.perldoc.com/perl5.6/pod/func/open.html"><span style="color: #000066;">open</span></a><span style="color: #66cc66;">&#40;</span>FILE, <span style="color: #ff0000;">&quot;&amp;gt;&quot;</span> . <span style="color: #0000ff;">$outfilename</span><span style="color: #66cc66;">&#41;</span> || <a href="http://www.perldoc.com/perl5.6/pod/func/die.html"><span style="color: #000066;">die</span></a> <span style="color: #ff0000;">&quot;Can't write $arg: $!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>;
    <a href="http://www.perldoc.com/perl5.6/pod/func/print.html"><span style="color: #000066;">print</span></a> <span style="color: #66cc66;">&#40;</span>FILE <span style="color: #0000ff;">$msg</span><span style="color: #66cc66;">&#41;</span>;
    <a href="http://www.perldoc.com/perl5.6/pod/func/close.html"><span style="color: #000066;">close</span></a><span style="color: #66cc66;">&#40;</span>FILE<span style="color: #66cc66;">&#41;</span> || <a href="http://www.perldoc.com/perl5.6/pod/func/die.html"><span style="color: #000066;">die</span></a> <span style="color: #ff0000;">&quot;Can't close $arg: $!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>;
  <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#123;</span>
  <a href="http://www.perldoc.com/perl5.6/pod/func/print.html"><span style="color: #000066;">print</span></a> <span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$msg</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #cc66cc;">1</span>;</pre></p>
<h5>Experienced Hacker</h5>
<p><pre class="c"><span style="color: #339933;">#include &amp;lt;stdio.h&amp;gt;</span>
<span style="color: #339933;">#define S &quot;Hello, World\n&quot;</span>
main<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>exit<span style="color: #66cc66;">&#40;</span><a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #66cc66;">&#40;</span>S<span style="color: #66cc66;">&#41;</span> == strlen<span style="color: #66cc66;">&#40;</span>S<span style="color: #66cc66;">&#41;</span> ? <span style="color: #cc66cc;">0</span> : <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>;<span style="color: #66cc66;">&#125;</span></pre></p>
<h5>Seasoned Hacker</h5>
<p><pre class="php">% cc -o a.out ~/src/misc/hw/hw.c
% a.out</pre></p>
<h5>Guru Hacker</h5>
<p><pre class="php">% <a href="http://www.php.net/echo"><span style="color: #000066;">echo</span></a> <span style="color: #ff0000;">&quot;Hello, world.&quot;</span></pre></p>
<h5>New Manager</h5>
<p><pre class="vb"><span style="color: #cc66cc;">10</span> <span style="color: #b1b100;">PRINT</span> <span style="color: #ff0000;">&quot;HELLO WORLD&quot;</span>
<span style="color: #cc66cc;">20</span> <span style="color: #b1b100;">END</span></pre></p>
<h5>Middle Manager</h5>
<p><pre class="php"><a href="http://www.php.net/mail"><span style="color: #000066;">mail</span></a> -s <span style="color: #ff0000;">&quot;Hello, world.&quot;</span> bob@b12
Bob, could you please write me a program that prints <span style="color: #ff0000;">&quot;Hello, world.&quot;</span>?
I need it by tomorrow.
^D</pre></p>
<h5>Senior Manager</h5>
<p><pre class="php">% zmail jim
I need a <span style="color: #ff0000;">&quot;Hello, world.&quot;</span> program by this afternoon.</pre></p>
<h5>Chief Executive</h5>
<p><pre class="php">% letter
letter: Command not found.
% <a href="http://www.php.net/mail"><span style="color: #000066;">mail</span></a>
To: ^X ^F ^C
% help <a href="http://www.php.net/mail"><span style="color: #000066;">mail</span></a>
help: Command not found.
% damn!
!: Event unrecognized
% logout</pre></p>
<div class="referencia">The Evolution of a Programmer (<a href="http://www.cse.ogi.edu/~diatchki/jokes/programmer.html" title="The Evolution of a Programmer">#</a>)</div>
<p>Impresionante ¿eh? Yo me quedo con la última etapa, es genial :-D Y además de una gran verdad; en el momento que dejas de practicar, comienza tu proceso de oxidación (y, éste, tiene límites insospechados como se puede observar jajaja). Y la cosa no queda aquí, para quien quiera más dosis que no se pierda la <a href="http://www.cse.ogi.edu/~diatchki/jokes/" title="Fun stuff">sección de <em>jokes</em></a>, chistes, de Iavor.</p>
<p>Y para terminar, también os dejo con <a href="http://www.willamette.edu/~fruehr/haskell/evolution.html" title="The Evolution of a Haskell Programmer">The Evolution of a Haskell Programmer</a>, un enlace a un texto en la misma línea pero enfocado a programadores de <a href="es.wikipedia.org/wiki/Haskell" title="Haskell - Wikipedia">Haskell</a> y bastante más trabajado por cierto.</p>
<p>Anotaciones relacionadas:
<ul>
<li><a href="http://blog.enrique.barbeito.org/archivos/2003/12/19/el-cdigo-fuente-de-windows-publicado/" title="¡El código fuente de Windows publicado!">¡El código fuente de Windows publicado!</a></li>
<li><a href="http://blog.enrique.barbeito.org/archivos/2005/07/02/the-hello-world-collection/" title="The Hello World Collection">The Hello World Collection</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://enrique.barbeito.org/blog/the-evolution-of-a-programmer/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Programación en el entorno GNOME</title>
		<link>http://enrique.barbeito.org/blog/programacion-en-el-entorno-gnome/</link>
		<comments>http://enrique.barbeito.org/blog/programacion-en-el-entorno-gnome/#comments</comments>
		<pubDate>Thu, 11 Aug 2005 14:43:59 +0000</pubDate>
		<dc:creator>Enrique Barbeito García</dc:creator>
		
		<category>Programación</category>

		<category>Libros</category>

		<guid isPermaLink="false">/?p=535</guid>
		<description><![CDATA[ 

A través de DiarioLinux.com y Barrapunto encuentro un fantástico recurso en castellano sobre desarrollo de aplicaciones GNOME basadas en librerías como GLib o GTK+.
La escasez de una documentación en castellano lo suficientemente sólida tanto para desarrolladores en el entorno GNOME como para principiantes impulsó a varias personas de GNOME Hispano a iniciar la elaboración de [...] ]]></description>
			<content:encoded><![CDATA[<p>
<div class="cajitaDcha"><a href="http://libros.es.gnome.org/librognome/index.php" title="Libro de Programación en GNOME"><img src="http://enrique.barbeito.org/img/gnome-64.png" alt="gnome-64.png" border="0" /></a></div>
<p>A través de <a href="http://www.diariolinux.com/tiki-read_article.php?articleId=7008&#038;comzone=show" title="Libro de Programación GNOME, release 0.0.3">DiarioLinux.com</a> y <a href="http://barrapunto.com/article.pl?sid=05/08/10/1323258" title="Libro de Programación GNOME 0.0.3">Barrapunto</a> encuentro un fantástico recurso en castellano sobre desarrollo de aplicaciones GNOME basadas en librerías como GLib o GTK+.</p>
<p>La escasez de una documentación en castellano lo suficientemente sólida tanto para desarrolladores en el entorno GNOME como para principiantes impulsó a varias personas de <a href="http://es.gnome.org" title="GNOME Hispano">GNOME Hispano</a> a iniciar la elaboración de un libro que reuniera los conceptos necesarios para enseñar la programación de aplicaciones en este entorno. Los objetivos son ofrecer una documentación accesible para todo el mundo y actualizada, por ello es que el libro está publicado con licencia <acronym title="GNU Free Documentation License">GFDL</acronym> y se encuentra en su, recientemente lanzada, versión 0.0.3.</p>
<p><em>Programación en el entorno GNOME</em> se encuentra disponible en su <a href="http://libros.es.gnome.org/librognome/index.php" title="Libro de Programación en GNOME">página web</a>, en tres formatos:</p>
<ul>
<li><a href="http://libros.es.gnome.org/librognome/librognome/librognome/book1.html" title="Programación en el entorno GNOME">Versión en <acronym title="HyperText Markup Language">HTML</acronym></a> (ver en línea)</li>
<li><a href="http://libros.es.gnome.org/librognome/librognome/librognome.pdf" title="librognome.pdf">Versión en <acronym title="Portable Document Format">PDF</acronym></a></li>
<li><a href="http://libros.es.gnome.org/librognome/librognome/librognome-html.tar.gz" title="librognome-html.tar.gz">Versión en <acronym title="HyperText Markup Language">HTML</acronym> comprimido</a> (TGZ)</li>
</ul>
<p>Para mayor información, se recomienda echar un vistazo a la web del libro. Desde aquí felicitar y agradecer el trabajo desinteresado de toda la gente que, de cualquier modo, está detrás de este recurso.
</p>]]></content:encoded>
			<wfw:commentRss>http://enrique.barbeito.org/blog/programacion-en-el-entorno-gnome/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Context Free Design Grammar</title>
		<link>http://enrique.barbeito.org/blog/context-free-design-grammar/</link>
		<comments>http://enrique.barbeito.org/blog/context-free-design-grammar/#comments</comments>
		<pubDate>Fri, 08 Jul 2005 08:15:48 +0000</pubDate>
		<dc:creator>Enrique Barbeito García</dc:creator>
		
		<category>Programación</category>

		<category>Miscelánea</category>

		<guid isPermaLink="false">/?p=524</guid>
		<description><![CDATA[ 


Vía Microsiervos y Pau Iglesias doy con CFDG, una especie de lenguaje de programación para obtener, de un modo rápido y bastante sencillo, formas geométricas renderizadas. Las posibilidades son realmente infinitas ya que las imágenes que pueden llegar a obtenerse se limitan a la capacidad creativa de cada uno. Además, la figura obtenida puede llegar [...] ]]></description>
			<content:encoded><![CDATA[<p>
<div class="cajitaDcha"><a href="http://www.ozonehouse.com/ContextFree/gallery-page.php?1/snowflake-sil" title="snowflake by John Horigan"><img src="http://enrique.barbeito.org/img/snowflake-sil-small.png" alt="snowflake-sil-small.png" border="0" /></a></div>
</p>
<p>Vía <a href="http://www.microsiervos.com/archivo/ordenadores/programando-dibujos.html" title="Programando dibujos">Microsiervos</a> y <a href="http://www.pauiglesias.com/archives/?article_id=100" title="Context Free Design Grammar">Pau Iglesias</a> doy con <a href="http://chriscoyne.com/cfdg/" title="Context Free Design Grammar">CFDG</a>, una especie de <em>lenguaje de programación</em> para obtener, de un modo rápido y bastante sencillo, formas geométricas renderizadas. Las posibilidades son realmente infinitas ya que las imágenes que pueden llegar a obtenerse se limitan a la capacidad creativa de cada uno. Además, la figura obtenida puede llegar a ser de hasta 1 Gigapixel.</p>
<p>El lenguaje fue ideado por <a href="http://chriscoyne.com/" title="Chris Coyne . com">Chris Coyne</a> y, a groso modo, la codificación consiste en tres aspectos principales:</p>
<ol>
<li>Inclusión de una <em>directiva</em> <pre class="php">startshape</pre> con la que dar un <em>nombre lógico</em> al código de tu figura (Para los que conozcáis <a href="http://es.wikipedia.org/wiki/Lenguaje_de_programaci%C3%B3n_Pascal" title="Lenguaje de programación Pascal">Pascal</a>, podría decirse que es algo así como la directiva <pre class="php">PROGRAM</pre> en éste lenguaje)</li>
<li>Utilización de &#8220;bloques&#8221; <pre class="php">rule</pre>. Estos fragmentos de código, <pre class="php">rule <span style="color: #66cc66;">&#123;</span> <span style="color: #66cc66;">&#125;</span></pre> son los que contienen las características de cada elemento que forme el resultado final. Se le podría asemejar, de algún primitivo modo, al concepto de funciones en lenguajes de programación estructurados; de este modo, podríamos decir que debe haber al menos una función, <em>principal</em>, que tenga el mismo identificador que el usado para definir a <pre class="php">startshape</pre>. Podríamos decir que éste sería el &#8220;<em>constructor</em>&#8221; de nuestra <em>clase</em> (figura).</li>
<li>El círculo y el cuadrado: nuestros dos objetos predefinidos; elementos con los que nos valdremos para realizar nuestras figuras. Aunque estos sean los elementos básicos, es posible conformar otras formas geométricas, por ejemplo hexágonos u octógonos. CFDG tiene una sentencia <pre class="php"><span style="color: #b1b100;">include</span></pre> con la que poder incluir los bloques <pre class="php">rule <span style="color: #66cc66;">&#123;</span><span style="color: #66cc66;">&#125;</span></pre> de otros ficheros; por lo que sería posible crearse <em>librerías</em> de formas poligonales (o lo que deseemos) para utilizar como &#8220;elementos básicos&#8221; en nuestros diseños finales.</li>
</ol>
<p>A la hora de trabajar con este curioso lenguaje, tenemos disponible y de manera libre <a href="http://www.ozonehouse.com/ContextFree/info.html" title="Context Free">Context Free</a>, la herramienta con la que escribir el código y renderizarlo &#8220;al vuelo&#8221;, con la posibilidad de guardarlo y de generar imágenes en formato <acronym title="Portable Network Graphics"><acronym title="Portable Network Graphics">PNG</acronym></acronym>. Las características que ofrece son:</p>
<ul>
<li>Binarios multiplataforma para Macintosh, Windows y Posix/Unix.</li>
<li>Actualización progresiva en la generación de las imágenes.</li>
<li>Posibilidad de guardar los resultados en formato <acronym title="Portable Network Graphics">PNG</acronym>.</li>
<li>Renderizar imagenes de gran tamaño (hasta 100 Megapixeles).</li>
<li>Posibilidad de manejar imágenes generadas con infinidad de formas.</li>
<li>La aplicación viene con ejemplos didácticos de uso (realmente se podría decir que son <em>el manual de usuario</em>.</li>
<li><a href="http://www.ozonehouse.com/ContextFree/info.html" title="Context Free">etc.</a></li>
</ul>
<p>Como punto débil le veo la prácticamente nula documentación acerca del aprendizaje del lenguaje. Para los interesados en el uso de <em>Context Free</em> podéis echar un vistazo en:</p>
<ul>
<li><a href="http://www.ozonehouse.com/ContextFree/about.html" title="Acerca de Context Free">Acerca de Context Free</a>. Un buen punto inicial para comenzar a aprender sobre en qué consiste esta herramienta y cómo empezar a dar los primeros pasos.</li>
<li><a href="http://www.ozonehouse.com/ContextFree/gallery-index.php" title="Context Free - Our Work">Galería de ejemplos</a>. Además de ser realmente impresionante, cada ejemplo puede ser útil para aprender ya que se le han adjuntado su correspondiente fichero fuente.</li>
<li><a href="http://chriscoyne.com/cfdgforums/" title="Context Free (CFDG) Forums">Foro y soporte</a>. De lo mejorcito de la página, existen unos cuantos foros (incluso uno para hispanohablantes :)) donde obtener mucha información, más ejemplos y donde preguntar dudas.</li>
<li><a href="http://www.ozonehouse.com/ContextFree/download.html" title="Context Free - Download">Página de descarga</a></li>
</ul>
<p><a id="more-524"></a><br />
He estado jugando un rato con esto, aunque no creo que lo vaya a utilizar mucho más, y he llegado a crear &#8220;algo&#8221; :-) Bueno, inicialmente he intentado hacer una estructura en forma de &#8220;cromosoma&#8221; y utilizando para ello, digamos, dos &#8220;bandas de <em>ADN</em>&#8221; formadas por un par de cromosomas para cada una. No sé si me explico&#8230; en fin, la cuestión es que a medida que iba trasteando me ha ido saliendo otra forma distinta a la pensada inicialmente. Y como me ha gustado lo que me iba saliendo, he seguido hasta llegar a esto:</p>
<h5>Resultado</h5>
<div align="center"><a href="http://fotos.enrique.barbeito.org/sueltas/my_cfdg" title="Enrique B. García Digital Gallery - Fotos sueltas - my_cfdg"><img src="http://enrique.barbeito.org/img/my_cfdg_small.jpg" alt="my_cfdg_small.jpg" border="0" /></a></div>
<h5>Código</h5>
<pre class="codigo">startshape undefImg

/*
 * "programa" principal *
                        */

rule undefImg
{
	struct_a { } // espiral concava
	struct_b { } // espiral convexa

	debianize    // cabeza espiral
	{
		x 56 // coordenada eje x
		y 70 // coordenada eje y
	}
}

/*
 * parte superior de la imagen *
                               */

rule struct_a
{
	concavo_1 { }
	concavo_2 { }
	convexo_1 { }
}

/*
 * parte inferior de la imagen *
                               */
rule struct_b
{
	linea { }
	SQUARE { x 35 y 35 s 2 b .2 }
}

/*
 * parte individual superior derecha *
                                     */
rule debianize
{
	CIRCLE { b .2 }
	debianize { x 2 s 0.99 r -10 }
}

/*
 * la "magia potagia" (viva el ensayo-error) *
                                             */

rule concavo_1
{
	CIRCLE { b .2 }
	concavo_1 { x 2 s 0.99 r 2 }
}

rule convexo_1
{
	SQUARE { b .1 }
	convexo_1 { y 2 s 0.99 r -2 }
}

rule concavo_2
{
	SQUARE { b .1 }
	concavo_1 { x -2 s .99 r -2 }
}

rule linea
{
	SQUARE { b .2 }
	linea { x .5 y .5 s .99 }
}</pre>
<p>Inicialmente obtuve las formas en espiral cóncava y convexa en sus aberturas. Iba a dejarlo así y llamar a la creación &#8220;<em>Trompas de Falopio</em>&#8221; (cromosomas, trompas de falopio&#8230; bueno, algo tienen en común ¿no? XD). Luego pensé que ya que estaba, seguía y terminaba la <em>obra de arte</em> es una especie de tijeras utilizando para ello una línea que dividiera en dos partes simétricas mi anterior forma. Bueno, y lo de esa espiral suelta que aparece por arriba&#8230; ni idea, para rellenar más supongo. Al final no ha quedado tan mal, eso sin tener más que cuatro conceptos de la sintaxis que emplea el lenguaje, investigando unos cuantos ejemplos y poco más. Con más dedicación no es difícil conseguir aprender a crear verdaderas virguerías gráficas.</p>
<p>Para terminar, os recomiendo visitar las imágenes contenidas en <a href="http://www.flickr.com/" title="Flickr - Photo Sharing">Flickr</a> bajo la etiqueta <a href="http://www.flickr.com/photos/tags/contextfree/" title="Flickr: Photos tagged with contextfree">contextfree</a>. Se pueden ver ejemplos muy curiosos.
</p>]]></content:encoded>
			<wfw:commentRss>http://enrique.barbeito.org/blog/context-free-design-grammar/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Versión Cero</title>
		<link>http://enrique.barbeito.org/blog/version-cero/</link>
		<comments>http://enrique.barbeito.org/blog/version-cero/#comments</comments>
		<pubDate>Mon, 04 Jul 2005 21:17:31 +0000</pubDate>
		<dc:creator>Enrique Barbeito García</dc:creator>
		
		<category>Programación</category>

		<category>Weblogs</category>

		<guid isPermaLink="false">/?p=522</guid>
		<description><![CDATA[ 


El pasado 31 de mayo salía públicamente a la luz Versión Cero, una prometedora bitácora colectiva enfocada a la publicación de noticias y artículos sobre el mundo del desarrollo de software. La iniciativa viene de la mano de Juanjo Navarro, acompañado por un pequeño grupo de personas forofas de la programación, con amplios conocimientos y [...] ]]></description>
			<content:encoded><![CDATA[<p>
<div class="cajitaIzq"><a href="http://www.versioncero.com/" title="Versión Cero"><img src="http://enrique.barbeito.org/img/v_cero.png" alt="v_cero.png" border="0" /></a></div>
</p>
<p>El pasado 31 de mayo salía públicamente a la luz <em><a href="http://www.versioncero.com/" title="Versión Cero">Versión Cero</a></em>, una prometedora bitácora colectiva enfocada a la publicación de noticias y artículos sobre el mundo del desarrollo de software. La iniciativa viene de la mano de <a href="http://www.juanjonavarro.com" title="Juanjo Navarro">Juanjo Navarro</a>, acompañado por un pequeño grupo de <a href="http://www.versioncero.com/editores/" title="Editores en Versión Cero">personas</a> forofas de la programación, con amplios conocimientos y tiempo suficiente para mantener una buena relación calidad / cantidad de anotaciones.</p>
<p>Quizás, a día de hoy, prácticamente la totalidad de los lectores asiduos a esta bitácora ya conocierais la existencia de esta bitácora. De todos modos, no he podido resistir la ocasión de anotar una referencia a la misma ya que quería tenerla en mi <em>historial de archivos</em>.</p>
<p>Aunque actualmente cuente sólo con poco más de un mes de vida, el ritmo de publicación es realmente bueno y ya es posible visitar alrededor de doscientas anotaciones. El contenido de <em>Versión Cero</em>, aunque centrado en aspectos de programación y afines, es muy polivalente. Como en su misma <a href="http://www.versioncero.com/acerca/" title="Acerca de Versión Cero">página de información</a> comenta, se intenta que el contenido de la bitácora no esté atada a tecnologías, plataformas, metodologías ni, incluso, filosofías de ningún tipo; con el fin de ofrecer un sitio abierto, capaz de informar al mayor número de personas.</p>
<p>Los contenidos de Versión Cero se distribuyen bajo una licencia <a href="http://creativecommons.org/licenses/by-nc-sa/2.1/es/" title="Creative Commons Deed">Creative Commons</a> con la que se reservan algunos derechos. En <a href="http://www.versioncero.com/licencia/" title="Condiciones de uso, Versión Cero">esta página</a> se esclarecen las condiciones de uso, copia y distribución.</p>
<p>Un sitio muy recomendable para cualquier interesado en el mundo de la programación y desarrollo de software. Personalmente me parece de mucha utilidad la sección de <a href="http://www.versioncero.com/articulo/" title="Artículos en Versión Cero">artículos</a> que se mantiene. En la actualidad ya hay cinco disponibles y, a mi juicio, es la sección más prometedora. Con concisos escritos, los autores de Versión Cero nos muestran su punto de vista acerca de aspectos que preocupan e interesan a cualquier desarrollador o estudiante; además la sección de comentarios en esta sección está funcionando francamente bien, pudiendo leer otros puntos de vista que hasta el momento no hacen más que enriquecer cada artículo.</p>
<p>Desde aquí, agradecer el esfuerzo que están realizando los editores de <em>la criatura</em> y animarles a que continúen igual de bien que hasta ahora. Poco a poco aparecen más y más sitios en castellano dedicados exclusivamente a la programación o el desarrollo de software; así que ya no hay excusa para no estar informado de lo que se cuece en este apasionante mundo :-)</p>
<p>Enlace: <a href="http://www.versioncero.com/" title="Versión Cero">http://www.versioncero.com/</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://enrique.barbeito.org/blog/version-cero/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The Hello World Collection</title>
		<link>http://enrique.barbeito.org/blog/the-hello-world-collection/</link>
		<comments>http://enrique.barbeito.org/blog/the-hello-world-collection/#comments</comments>
		<pubDate>Sat, 02 Jul 2005 15:45:00 +0000</pubDate>
		<dc:creator>Enrique Barbeito García</dc:creator>
		
		<category>Programación</category>

		<category>Enlaces</category>

		<guid isPermaLink="false">/?p=521</guid>
		<description><![CDATA[  Parece que puede llegar a convertirse en cotidiano aquellas páginas que recopilan piezas de código sobre algoritmos o problemas planteados comunmente en el proceso de aprendizaje de la programación de ordenadores. Ya vimos un claro, y espectacular, ejemplo con Hanoimania!
Esta vez, a través de Microsiervos, doy con una página web que recopila un gran [...] ]]></description>
			<content:encoded><![CDATA[<p> Parece que puede llegar a convertirse en cotidiano aquellas páginas que recopilan piezas de código sobre algoritmos o problemas planteados comunmente en el proceso de aprendizaje de la programación de ordenadores. Ya vimos un claro, y espectacular, ejemplo con <a href="http://blog.enrique.barbeito.org/archivos/2005/02/06/hanoimania/" title="Hanoimania!">Hanoimania!</a></p>
<p>Esta vez, a través de <a href="http://www.microsiervos.com/archivo/ordenadores/hello-world-en-190-lenguajes.html" title="«Hello World» en 190 lenguajes">Microsiervos</a>, doy con una <a href="http://www.roesler-ac.de/wolfram/hello.htm" title="The Hello World Collection">página web</a> que recopila un gran puñado de ejemplos (190) para el popular programa &#8220;<em>Hello World</em>&#8221; (o también <em>Hola Mundo</em>) implementado en infinidad de lenguajes de programación.</p>
<p>Este suele ser el primer programa que uno es capaz de escribir cuando comienza a aprender un nuevo lenguaje de programación. Desde siempre, que yo sepa, se ha venido utilizando este ejercicio de programación como uno de los primeros, por no decir el primero, para mostrar en las primeras páginas de los libros introductorios a un lenguaje de programación. No todos los libros o textos al respecto recurren a este tradicional programa pero sí la mayoría y pienso que precisamente por eso: por tradición :-)</p>
<p>Como nota anecdótica / personal, creo haber escrito un &#8220;<em>Hola Mundo</em>&#8221; en al menos <acronym title="Active Server Pages">ASP</acronym>, C, C++, Delphi, Java, JavaScript, Pascal, <acronym title="Practical Extraction and Report Language">Perl</acronym>, <acronym title="Pre-Hypertext Processing">PHP</acronym>, Prolog, Tcl y Visual Basic 6 (que recuerde ahora). De la mayoría tengo al menos un libro y ojalá pudiera decir que sé y he aprendido a programar en todos ellos, cosa que obviamente no es así :-) ¿Cuántos &#8220;<em>hola mundo</em>&#8221; lleváis a vuestras espaldas?</p>
<p>Enlace: <a href="http://www.roesler-ac.de/wolfram/hello.htm" title="The Hello World Collection">http://www.roesler-ac.de/wolfram/hello.htm</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://enrique.barbeito.org/blog/the-hello-world-collection/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Las tres virtudes de un programador</title>
		<link>http://enrique.barbeito.org/blog/las-tres-virtudes-de-un-programador/</link>
		<comments>http://enrique.barbeito.org/blog/las-tres-virtudes-de-un-programador/#comments</comments>
		<pubDate>Tue, 26 Apr 2005 22:47:20 +0000</pubDate>
		<dc:creator>Enrique Barbeito García</dc:creator>
		
		<category>Programación</category>

		<guid isPermaLink="false">/?p=513</guid>
		<description><![CDATA[  Por medio del recientemente creado Wiki de Planeta Código doy con un grupo de virtudes, un tanto tergiversadas, que no dejan de tener su curiosidad:

PEREZA: La cualidad que te hace esforzarte para reducir el gasto de energía total. Te hace escribir programas de ayuda al trabajo que otros encontrarán útiles, y documentar lo que [...] ]]></description>
			<content:encoded><![CDATA[<p> Por medio del recientemente creado <a href="http://www.planetacodigo.com/wiki" title="inicio [Planeta Código]">Wiki de Planeta Código</a> doy con un grupo de <em>virtudes</em>, un tanto tergiversadas, que no dejan de tener su curiosidad:</p>
<ol>
<li><strong>PEREZA</strong>: <em>La cualidad que te hace esforzarte para reducir el gasto de energía total. Te hace escribir programas de ayuda al trabajo que otros encontrarán útiles, y documentar lo que escribiste para no tener que responder a preguntas sobre ello. Esta es la primera gran virtud de un programador.</em></li>
<li><strong>IMPACIENCIA</strong>: <em>La cólera que sientes cuando el ordenador está holgazaneando. Te hace escribir programas que no solo reaccionan a tus necesidades, si no que se anticipan a ellas. O al menos que simulan hacerlo. Esta es la segunda gran virtud de un programador.</em></li>
<li><strong>ORGULLO DESMEDIDO</strong>: <em>Orgullo excesivo, el tipo de actitud por la que Zeus te fulminaría. También, la cualidad que te hace escribir (y mantener) programas que nadie querrá criticar. Esta es la tercera gran virtud de un programador.</em></li>
</ol>
<p>He constatado que soy poseedor de al menos el primer par de ellas. Lo malo es que no consigo hacer lo suficiente como para poder hacer de ellas eso mismo: virtudes :-)
</p>]]></content:encoded>
			<wfw:commentRss>http://enrique.barbeito.org/blog/las-tres-virtudes-de-un-programador/feed/</wfw:commentRss>
		</item>
		<item>
		<title>ConnectionStrings.com</title>
		<link>http://enrique.barbeito.org/blog/connectionstringscom/</link>
		<comments>http://enrique.barbeito.org/blog/connectionstringscom/#comments</comments>
		<pubDate>Fri, 01 Apr 2005 17:48:45 +0000</pubDate>
		<dc:creator>Enrique Barbeito García</dc:creator>
		
		<category>Programación</category>

		<category>Enlaces</category>

		<guid isPermaLink="false">/?p=505</guid>
		<description><![CDATA[  Hace un momento, haciendo una revisión de mis marcadores, me he topado con una dirección bastante interesante para programadores asiduos a darse de tortas con los diversos sistemas gestores de bases de datos.
El sitio se llama ConnectionStrings.com y su intención no es otra que recopilar el mayor número de cadenas de conexión para conectar [...] ]]></description>
			<content:encoded><![CDATA[<p> Hace un momento, haciendo una revisión de mis marcadores, me he topado con una dirección bastante interesante para programadores asiduos a darse de tortas con los diversos sistemas gestores de bases de datos.</p>
<p>El sitio se llama <a href="http://www.connectionstrings.com" title="ConnectionStrings.com">ConnectionStrings.com</a> y su intención no es otra que recopilar el mayor número de <em>cadenas de conexión</em> para conectar con cualquier base de datos, 23 en concreto (<acronym title="Structured Query Language">SQL</acronym> Server, Access, Oracle, MySQL, Interbase, IBM DB2, Sybase, Informix, Ingres, Mimer <acronym title="Structured Query Language">SQL</acronym>, Lightbase, PostgreSQL, Paradox, &#8230;) además mediante <acronym title="Object Linking and Embedding Database">OLE DB</acronym> o su antecesor <acronym title="Open Database Connectivity">ODBC</acronym>.</p>
<p>Un listado completo ideal para quienes necesiten conectar con diferentes bases de datos con frecuencia a la hora de programar y también para quien no tenga ganas de aprender estos chorizos infumables que son las <em>connection strings</em>. Más vale dedicar las neuronas en aprender / memorizar otras cosas y utilizar esta lista a modo de chuleta o &#8220;<a href="http://blog.enrique.barbeito.org/archivos/2004/04/25/hojas-de-referencia/" title="Hojas de referencia">tarjeta de referencia</a> en línea&#8221; :-)</p>
<p>Enlace: <a href="http://www.connectionstrings.com" title="ConnectionStrings.com">http://www.connectionstrings.com</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://enrique.barbeito.org/blog/connectionstringscom/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
