<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Bitácora de Vuelo (Publicaciones sobre directorios)</title><link>http://blog.taniquetil.com.ar/</link><description></description><atom:link href="http://blog.taniquetil.com.ar/categories/directorios.xml" rel="self" type="application/rss+xml"></atom:link><language>es</language><copyright>Contents © 2023 &lt;a href="mailto:facundo@taniquetil.com.ar"&gt;Facundo Batista&lt;/a&gt; CC BY-NC-SA</copyright><lastBuildDate>Mon, 29 May 2023 18:51:58 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>La estructura de un proyecto: ejemplo Encuentro</title><link>http://blog.taniquetil.com.ar/posts/0610/</link><dc:creator>Facundo Batista</dc:creator><description>&lt;p&gt;Un tema que se ha visto varias veces, tanto en la lista de PyAr como en la vida real, es que los desarrolladores que no estuvieron involucrados en proyectos grandes, o que sólo estuvieron metidos en uno o dos sistemas (más allá el tamaño), no saben muy bien qué estructura, o qué forma, darle a un proyecto nuevo.&lt;/p&gt;
&lt;p&gt;Es totalmente comprensible. La estructura a tener depende de muchos factores: de la complejidad del proyecto, de cuan listo lo deja uno para empaquetarlo, de la prolijidad del desarrollador, etc.&lt;/p&gt;
&lt;p&gt;Lo notable es que (en mi experiencia) el proyecto aunque nazca pequeño, siempre conviene que esté ordenado. Y que la forma de ordenarlo, qué estructura darle, cambia en función de las necesidades (como decía arriba) pero que siempre es bueno tener alguna.&lt;/p&gt;
&lt;p&gt;En función de todo esto es que paso a contarles qué estructura tiene hoy &lt;a class="reference external" href="http://encuentro.taniquetil.com.ar/"&gt;Encuentro&lt;/a&gt;. No es la mejor del mundo, pero es la que a mí me funciona en este y otros proyectos. Y es una buena base como para que alguien que no tiene idea sepa para qué lado ir ordenando los tantos.&lt;/p&gt;
&lt;p&gt;El código en sí lo pueden ver &lt;a class="reference external" href="http://bazaar.launchpad.net/~facundo/encuentro/trunk/files"&gt;acá&lt;/a&gt; o si tienen instalado &lt;em&gt;bazaar&lt;/em&gt; pueden hacer &lt;code class="docutils literal"&gt;bzr branch lp:encuentro&lt;/code&gt; y exploran el código de forma local.&lt;/p&gt;
&lt;p&gt;Bueno, a los bifes.&lt;/p&gt;
&lt;section id="el-codigo-util-en-si"&gt;
&lt;h2&gt;El código "útil" en sí&lt;/h2&gt;
&lt;p&gt;Tenemos dos archivos y varios directorios...&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;code class="docutils literal"&gt;test&lt;/code&gt;: Este es un script que básicamente ejecuta todas las comprobaciones que necesitamos para asegurarnos que el proyecto está "verde". En el caso de encuentro, corre las pruebas de unidad (las que están en el directorio &lt;code class="docutils literal"&gt;tests&lt;/code&gt;, ver abajo), luego corre un verificador estático de código genérico (&lt;code class="docutils literal"&gt;pylint&lt;/code&gt;) y finalmente otro verificador puntual para &lt;code class="docutils literal"&gt;pep 8&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code class="docutils literal"&gt;version.txt&lt;/code&gt;: La versión del programa. La tengo separada sólo por consistencia: me gusta que esté en un sólo lado así es la misma para todos los que la necesitan (&lt;code class="docutils literal"&gt;setup.py&lt;/code&gt;, para mostrarlo al arrancar, o cuando el usuario pide info del programa, etc).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code class="docutils literal"&gt;bin/&lt;/code&gt;: Aquí (normalmente) hay un sólo archivo, con el nombre del proyecto: &lt;code class="docutils literal"&gt;encuentro&lt;/code&gt;. Este es el script de inicio, el que arranca todo el sistema ya sea cuando lo ejecutamos desde el proyecto mismo, desde un &lt;em&gt;tarball&lt;/em&gt; descomprimido, e incluso es el que va a parar a &lt;code class="docutils literal"&gt;/usr/bin&lt;/code&gt; cuando se instala. Este es el único que es ejecutable, el resto del sistema son sólo módulos.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code class="docutils literal"&gt;encuentro/&lt;/code&gt;: Es el directorio principal del proyecto (por eso el nombre). Acá tenemos todo el código "de producción" del proyecto, con su estructura interna. Por lo pronto, en este mismo directorio están todos los módulos que tienen que ver con el funcionamiento interno de Encuentro.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code class="docutils literal"&gt;encuentro/ui/&lt;/code&gt;: Aquí tenemos todo el código que necesitamos para armar la Interfaz del Usuario del programa. También tiene que ver con el funcionamiento interno de Encuentro, pero es sólo el manejo de la interfaz. La separación de qué va aquí o qué va directamente en &lt;code class="docutils literal"&gt;encuentro/&lt;/code&gt; a veces es complicada.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code class="docutils literal"&gt;encuentro/ui/media/&lt;/code&gt;: Todas las imágenes, audios, etc, que necesitamos para que funcione la UI en sí.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code class="docutils literal"&gt;encuentro/logos/&lt;/code&gt;: También imágenes, pero que se usan como identificación del programa en sí. Aunque algunas se usan en la parte de UI, están todas acá porque también se usan en otros contextos (por ejemplo, en la instalación del paquete).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code class="docutils literal"&gt;tests/&lt;/code&gt;: Los tests de unidad del proyecto, normalmente un montón de archivos cuyo nombre arranca con &lt;code class="docutils literal"&gt;test_&lt;/code&gt; pero también pueden haber otros (módulos o no) para dar soporte a las pruebas.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="otros-directorios"&gt;
&lt;h2&gt;Otros directorios&lt;/h2&gt;
&lt;p&gt;Estos son directorios puntuales que tengo para Encuentro. Algunos se repiten con otros proyectos, otros no.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;code class="docutils literal"&gt;qtreactor&lt;/code&gt;: El módulo de integración entre Qt (el framework de interfaz gráfica que &lt;a class="reference external" href="http://blog.taniquetil.com.ar/posts/0603"&gt;estoy usando&lt;/a&gt;) y Twisted (una biblioteca asincrónica que uso para trabajar con la red).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code class="docutils literal"&gt;server&lt;/code&gt;: Cuando le decimos al programa "local" de Encuentro que actualice los episodios, se baja algunos archivos comprimidos de mi server, con toda la metadata. Estos archivos comprimidos se generan una vez al día a partir de los sitios webs de Encuentro, Conectate, BACUA, etc. El código para realizar todo esto está en este directorio.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code class="docutils literal"&gt;web&lt;/code&gt;: Todos los archivos necesarios para montar &lt;a class="reference external" href="http://encuentro.taniquetil.com.ar/"&gt;el sitio web del proyecto&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code class="docutils literal"&gt;windows&lt;/code&gt;: Imágenes, configuraciones, y explicaciones necesarias para armar el .exe en Windows y luego armar con eso el instalador final que se distribuye.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;section id="otros-archivos"&gt;
&lt;h2&gt;Otros archivos&lt;/h2&gt;
&lt;p&gt;Estos son otros archivos que no tienen demasiada relación entre sí, pero que son importantes en distintos momentos de la vida del proyecto:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;code class="docutils literal"&gt;AUTHORS, COPYING&lt;/code&gt;: Info legal: cuales son las personas que participaron del proyecto, y la licencia del mismo.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code class="docutils literal"&gt;LEEME.txt, README.txt, AYUDA.txt&lt;/code&gt;: Textos de ayuda para la persona que llega por primera vez al proyecto (viéndolo desde los archivos fuente). Está en dos idiomas, pero como Encuentro es inherentemente para personas que hablan castellano, el LEEME es el que tiene la info posta.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code class="docutils literal"&gt;anuncio.txt, pasos_release.txt&lt;/code&gt;: Recordatorios y textos preparados para mí (o para el que haga la release del proyecto... que vengo siendo siempre yo, :p).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code class="docutils literal"&gt;pylintrc&lt;/code&gt;: Un archivo de configuración para el verificador estático de código que mencionaba arriba.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code class="docutils literal"&gt;setup.py, MANIFEST.in&lt;/code&gt;: Script principal de empaquetamiento e instalación, más un archivo que podríamos decir de configuración del mismo.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code class="docutils literal"&gt;encuentro.desktop, source_encuentro.py&lt;/code&gt;: Dos archivitos necesarios en sistemas Debian/Ubuntu (al menos). El primero le pasa al sistema info para poner el programa en el menú del usuario, y el otro es usado en caso de que el programa crashee, para informar automáticamente del problema.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;</description><category>directorios</category><category>diseño</category><category>layout</category><category>software</category><guid>http://blog.taniquetil.com.ar/posts/0610/</guid><pubDate>Fri, 24 May 2013 00:43:56 GMT</pubDate></item></channel></rss>