Embedded Resources

Sometimes your assembly on runtime depends on a file, like a image or a simple text file. To manage this file, you could store its location in the application configuration file, and then load your file by reading its location from configuration. Another option is to embedded the file as a resource in your assembly and then use the following code snippet to load it.

System.IO.Stream s = this.GetType().Assembly.GetManifestResourceStream(«NameOfTheFile»);

Lets see an example. Suppose an assembly called Model.dll that requires a file called TextFile.txt that is part of the same visual studio project. First of all you should define that file as an embedded resource (properties->build action = embedded resource). Then in your code, when you need to access this file you can load it this way:

System.IO.Stream fileStream = this.GetType().Assembly.GetManifestResourceStream(«Model.TextFile.txt»);
System.IO.StreamReader sr = new System.IO.StreamReader(s);
string fileContent = sr.ReadToEnd();
fileStream.Close();

Note that the name of the assembly has been appended to the of the file. One you have read the contents of the file, remember to close the stream

Desarrollo con .NET 1.1: Herramientas de soporte

A pesar de que la versión actual de .NET es la 3.5, algunos clientes aún continúan trabajando con la versión 1.1. Precisamente en este momento me encuentro trabajando en uno proyecto así. Adicionalmente al uso de dicha tecnología, nos hemos visto impedidos de utilizar nuestro ambiente de desarrollo típico, montado sobre TFS, lo cual nos obligó a montar un ambiente alternativo. Después de un breve repaso de las necesidades del proyecto terminamos armando nuestro ambiente con los siguientes componentes.

El hecho de trabajar con .NET 1.1, ya de movida nos lleva a utilizar Visual Studio 2003.

Como framework de pruebas unitarias, elegimos NUnit y logramos integrarlo con VS2003 para poder depurar mientras ejecutamos las pruebas.

Como controlador de versiones decidimos utilizar Subversion, por considerarlo la mejor alternativa descontando TFS y suma a su amplia difusión.

Como cliente del subversión estamos utilizando TortoiseSVN, ya que las experiencias que hemos tenido con el plug-in the ANK no han satisfactorias.

Para la automatización de los builds, estamos utilizando NAnt.

Como es herramienta colaborativa estamos utilizando Trac. De esta herramienta utilizamos principalmente la funcionalidad de wiki y la planificación de milestones. Si bien esta herramienta cuenta con un sistema de tickets que puede utilizarse para tracker el progreso del proyecto, hemos preferido utilizar un SUPER excel ajustado para trabajar a lo SCRUM.

La programación como disciplina central del desarrollo del software (introducción)

Parte 1: La programación, la academia y la industria

Claramente si trazáramos un paralelismo entre el desarrollo de software y las construcción de edificios, bien podríamos decir que en cierto modo, el programador es al desarrollo de software lo que el albañil es a la construcción de edificios. Al mismo tiempo, resulta que el trabajo llevado a cabo por los programadores insume aproximadamente la mitad del esfuerzo total del desarrollo del software.

Si uno analiza la situación actual del mercado IT en Argentina rápida se encuentra con la escasez programadores, como uno de los principales problemas para el crecimiento de la industria.

Curiosamente, si uno mira la oferta académica actual de las universidad nacionales (no estoy al tanto de las universidad privadas, pero supongo que la situación debe ser similar), se encuentra con abundantes opciones de licenciaturas / ingenierías en sistemas, pero ninguna carrera enfocada en la formación de programadores. Si bien es cierto que todo licenciado / ingeniero en sistemas debería ser capaz de programar, para ser programador no basta con ser capaz de programar. Las universidades enseñan programación en la primera mitad de la carrera, tratándola más como una base necesaria para las materias del ciclo superior que como una disciplina en si misma.La falta de una carrera de programador hace que aquellos jóvenes con aspiraciones de ser programadores se vean obligados a estudiar una licenciatura/ingeniería que no los formará como programadores, provocando una deserción temprana en la carrera. Como consecuencia de todo esto, la academia no forma programadores, sino ingenieros/licenciados capaces de programar.

Por su parte la industria asume que la formación general de los programadores es responsabilidad de la academia y por ello en el mejor de los casos solo invierte en la especialización del programador en una tecnología particular.

Estas posiciones adoptadas por la industria y la academia posiblemente sean consecuencia de la subestimación de la tarea del programador y por una falta de conciencia de la importancia de la actividad.

Personalmente creo que resulta necesaria una revalorización (en la academia y la industria) de la programación como disciplina fundamental del desarrollo de software y es por ello que he decidido escribir una serie de artículos centrada en programación como actividad fundamental del desarrollo de software dejando en claro la diferencias entre ser capaz de programar y ser programador.