<?xml version="1.0" encoding="UTF-8"?>
<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/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Nosolopau</title>
	<atom:link href="http://nosolopau.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://nosolopau.com</link>
	<description></description>
	<lastBuildDate>Tue, 24 Apr 2012 20:21:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Bicingstats: un registro histórico de los datos de ocupación del Bicing</title>
		<link>http://nosolopau.com/2012/04/15/bicingstats-un-registro-historico-de-los-datos-de-ocupacion-del-bicing/</link>
		<comments>http://nosolopau.com/2012/04/15/bicingstats-un-registro-historico-de-los-datos-de-ocupacion-del-bicing/#comments</comments>
		<pubDate>Sun, 15 Apr 2012 17:56:40 +0000</pubDate>
		<dc:creator>Pau</dc:creator>
				<category><![CDATA[On the Rails]]></category>
		<category><![CDATA[apis]]></category>
		<category><![CDATA[bicingstats]]></category>

		<guid isPermaLink="false">http://nosolopau.com/?p=204</guid>
		<description><![CDATA[Una de las cosas con las que he andado perdiendo el tiempo últimamente es Bicingstats, un proyecto muy sencillo que consiste en una aplicación que mantiene un registro histórico de datos del Bicing, el servicio público de alquiler de bicicletas de Barcelona, y ofrecerlo a través de una API REST en XML y en JSON. [...]]]></description>
			<content:encoded><![CDATA[<p>Una de las cosas con las que he andado perdiendo el tiempo últimamente es <a href="http://bicingstats.heroku.com/">Bicingstats</a>, un proyecto muy sencillo que consiste en una aplicación que mantiene un registro histórico de datos del Bicing, el servicio público de alquiler de bicicletas de Barcelona, y ofrecerlo a través de una API REST en XML y en JSON.</p>
<p>Utilizando la <a href="http://rocboronat.net/index.php/es/projectes/48-bicing-api">Bicing API</a> de <a href="http://rocboronat.net/">Roc Boronat</a>, Bicingstats obtiene regularmente (generalmente cada hora) datos sobre la ocupación de las estaciones, obteniendo el número de bicicletas ancladas y el número de espacios libres. Mantiene también un listado de estaciones disponibles con su posición en coordenadas. El código fuente de Bicingstats es libre y se puede <a href="https://github.com/nosolopau/bicingstats">descargar de GitHub</a>.<br />
<span id="more-204"></span><br />
¿Cuál es la utilidad de todo esto? En general bien poca, si quitamos la diversión de desarrollar la aplicación. Mi idea inicial era poder obtener diagramas de ocupación, como los que se pueden consultar ahora mismo, sólo que con datos promedio:</p>
<p><a href="http://nosolopau.com/2012/04/15/bicingstats-un-registro-historico-de-los-datos-de-ocupacion-del-bicing/bicing/" rel="attachment wp-att-206"><img src="http://nosolopau.com/wp-content/uploads/2012/04/bicing-1024x671.png" alt="" title="bicing" width="540" height="353" class="alignleft size-large wp-image-206" /></a></p>
<p>Del estudio de los datos de ocupación promedio obtener información como la siguiente:</p>
<ul>
<li>¿Qué estaciones se quedan vacías con más frecuencia?</li>
<li>¿A qué horas suele quedarse vacía una estación? (y lo más interesante: ¿qué probabilidad hay de que una estación tenga bicicletas disponibles cierto día a cierta hora?)</li>
<li>¿Qué estaciones permanecen llenas más horas al día? (impidiendo dejar bicicletas)</li>
</ul>
<p>Pienso en estos datos como una fuente de información que podría servir para mejorar el servicio y a su vez, como una fuente de datos para otras aplicaciones.</p>
<p>De momento, lo siguiente que me gustaría hacer es una aplicación que me anticipe cada noche qué probabilidades tengo al día siguiente de encontrar una bicicleta cerca de casa, para saber si tengo que levantarme un poco antes para llegar al metro :-P. Combinado con la predicción del tiempo sería simplemente perfecto :-).</p>
]]></content:encoded>
			<wfw:commentRss>http://nosolopau.com/2012/04/15/bicingstats-un-registro-historico-de-los-datos-de-ocupacion-del-bicing/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Removing files from a GIT repository</title>
		<link>http://nosolopau.com/2012/04/12/removing-files-from-a-git-repository/</link>
		<comments>http://nosolopau.com/2012/04/12/removing-files-from-a-git-repository/#comments</comments>
		<pubDate>Thu, 12 Apr 2012 20:25:12 +0000</pubDate>
		<dc:creator>Pau</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[filter-branch]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[remove files]]></category>

		<guid isPermaLink="false">http://nosolopau.com/?p=193</guid>
		<description><![CDATA[A little trick for removing sensitive (or unnecessary) files from the history of a GIT repository. For example, to remove the file db/development.sqlite3 from the repo: Very useful :-)]]></description>
			<content:encoded><![CDATA[<p>A little trick for <a href="http://help.github.com/remove-sensitive-data/">removing sensitive (or unnecessary) files</a> from the history of a GIT repository. For example, to remove the file db/development.sqlite3 from the repo:</p>
<pre class="brush: bash; title: ; notranslate">git filter-branch --index-filter '
  git rm --cached --ignore-unmatch db/development.sqlite3
'</pre>
<p>Very useful :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://nosolopau.com/2012/04/12/removing-files-from-a-git-repository/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sending e-mail from an Heroku app with GMail</title>
		<link>http://nosolopau.com/2012/04/03/sending-e-mail-from-an-heroku-app-with-gmail/</link>
		<comments>http://nosolopau.com/2012/04/03/sending-e-mail-from-an-heroku-app-with-gmail/#comments</comments>
		<pubDate>Tue, 03 Apr 2012 20:51:57 +0000</pubDate>
		<dc:creator>Pau</dc:creator>
				<category><![CDATA[On the Rails]]></category>

		<guid isPermaLink="false">http://nosolopau.com/?p=185</guid>
		<description><![CDATA[Recently I needed to send e-mail notifications through a GMail account from a Rails 3 app hosted on Heroku. The article that explains the procedure is out of date, but after some minutes of fighting, I arrived to the correct configuration. So here it comes :-). First of all, I needed to set SMTP as [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I needed to send e-mail notifications through a GMail account from a <strong>Rails 3</strong> app hosted on <a href="http://heroku.com" target="_blank">Heroku</a>. <a href="https://devcenter.heroku.com/articles/smtp" target="_blank">The article</a> that explains the procedure is out of date, but after some minutes of fighting, I arrived to the correct configuration. So here it comes :-).</p>
<p>First of all, I needed to set SMTP as prefered delivery method in the application.rb:</p>
<pre class="brush: ruby; title: ; notranslate">
# config/application.rb

module MyApp
  class Application &lt; Rails::Application
    ...
    config.action_mailer.delivery_method = :smtp
    ...
  end
end </pre>
<p>And then, I created a smtp.rb initializer (at config/initializers) as follows:</p>
<pre class="brush: ruby; title: ; notranslate">
# config/initializers/smtp.rb

ActionMailer::Base.smtp_settings = {
  :address =&gt; &quot;smtp.gmail.com&quot;,
  :port =&gt; 587,
  :domain =&gt; 'mydomain.com',
  :user_name =&gt; &quot;myaccount@mydomain.com&quot;,
  :password  =&gt; &quot;mypassword&quot;,
  :authentication =&gt; 'plain',
  :enable_starttls_auto =&gt; true
}
</pre>
<p>That&#8217;s all!</p>
]]></content:encoded>
			<wfw:commentRss>http://nosolopau.com/2012/04/03/sending-e-mail-from-an-heroku-app-with-gmail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mi Moleskine de Lego</title>
		<link>http://nosolopau.com/2012/04/01/mi-moleskine-de-lego/</link>
		<comments>http://nosolopau.com/2012/04/01/mi-moleskine-de-lego/#comments</comments>
		<pubDate>Sun, 01 Apr 2012 15:11:47 +0000</pubDate>
		<dc:creator>Pau</dc:creator>
				<category><![CDATA[On the Rails]]></category>

		<guid isPermaLink="false">http://nosolopau.com/?p=177</guid>
		<description><![CDATA[El otro día en la tienda del CosmoCaixa Barcelona encontré una cosa genial y no pude resistirme a llevármela a casa. Se trata de una auténtica Moleskine&#8230; ¡de Lego! Se trata de una Moleskine normal y corriente, salvo por la particularidad de que la cubierta dispone de un pequeño bloque de Lego. Esto tiene unas [...]]]></description>
			<content:encoded><![CDATA[<p>El otro día en la tienda del CosmoCaixa Barcelona encontré una cosa genial y no pude resistirme a llevármela a casa. Se trata de una auténtica Moleskine&#8230; ¡de Lego!</p>
<p>Se trata de una Moleskine normal y corriente, salvo por la particularidad de que la cubierta dispone de un pequeño bloque de Lego. Esto tiene unas cuantas posibilidades. De hecho te permite convertir tu libreta en una nave alien :-P.</p>
<p><a href="http://nosolopau.com/2012/04/01/mi-moleskine-de-lego/img_5273/" rel="attachment wp-att-179"><img class="size-medium wp-image-179 aligncenter" title="IMG_5273" src="http://nosolopau.com/wp-content/uploads/2012/04/IMG_5273-300x199.jpg" alt="" width="300" height="199" /></a></p>
<p><a href="http://nosolopau.com/2012/04/01/mi-moleskine-de-lego/img_5270/" rel="attachment wp-att-178"><img class="size-medium wp-image-178 aligncenter" title="IMG_5270" src="http://nosolopau.com/wp-content/uploads/2012/04/IMG_5270-300x199.jpg" alt="" width="300" height="199" /></a></p>
<p>Estoy encantado de la vida :-).</p>
]]></content:encoded>
			<wfw:commentRss>http://nosolopau.com/2012/04/01/mi-moleskine-de-lego/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Breve historia de la ingeniería de requisitos</title>
		<link>http://nosolopau.com/2011/11/27/breve-historia-de-la-ingenieria-de-requisitos/</link>
		<comments>http://nosolopau.com/2011/11/27/breve-historia-de-la-ingenieria-de-requisitos/#comments</comments>
		<pubDate>Sun, 27 Nov 2011 22:31:10 +0000</pubDate>
		<dc:creator>Pau</dc:creator>
				<category><![CDATA[Ingeniería]]></category>
		<category><![CDATA[análisis de sistemas]]></category>
		<category><![CDATA[historia]]></category>
		<category><![CDATA[ingeniería de requisitos]]></category>

		<guid isPermaLink="false">http://nosolopau.com/?p=172</guid>
		<description><![CDATA[Antes de la aparición de la ingeniería de requisitos, éstos eran competencia exclusiva del análisis de sistemas. En esta área se elaboraron algunos métodos de desarrollo estructurado como SA/SD (análisis y diseño estructurados) (De Marco, 1978), SADT (análisis de sistemas y técnica de diseño) (Ross y Schoman, 1977) o SSADM (análisis estructurado de sistema y [...]]]></description>
			<content:encoded><![CDATA[<p>Antes de la aparición de la ingeniería de requisitos, éstos eran competencia exclusiva del<strong> análisis de sistema</strong>s. En esta área se elaboraron algunos métodos de desarrollo estructurado como SA/SD (análisis y diseño estructurados) (De Marco, 1978), SADT (análisis de sistemas y técnica de diseño) (Ross y Schoman, 1977) o SSADM (análisis estructurado de sistema y método de diseño) (Downs et al., 1992). La idea general de todos estos métodos consiste en comenzar analizando los requisitos mediante un enfoque “<strong>divide y vencerás</strong>” que permita ir fraccionando el sistema en piezas más pequeñas y después definir las funciones u objetivos que cada parte del sistema debería realizar.</p>
<p>¿El análisis de sistemas no era suficientemente bueno? ¿Era realmente necesaria una nueva sub-disciplina como la ingeniería de requisitos? Parte de la respuesta hay que encontrarla en la comunidad académica. <strong>El análisis de sistemas está profundamente enraizado con los sistemas de información</strong>, una comunidad centrada en las metodologías y el modelado conceptual, de modo que probablemente el concepto de análisis de los requisitos surgió ligado a los esquemas tradicionales de descomposición funcional <em>top-down</em>. Los requisitos eran capturados y listados como objetivos del usuario, y después elaborados como un conjunto de funciones representados en diagramas de flujo de datos, procesos SADT o cualquier otra técnica de modelado.</p>
<p>El enfoque de los métodos estructurados para el análisis de requisitos fue desafiado en los 80 por las técnicas JAD (<em>Joint Applications Development</em>, Desarrollo Conjunto de Aplicaciones en español) (DSDM Consortium, 1995), que trataron de superar el incómodo y lento proceso de modelado involucrando a los usuarios en el diseño a través de reuniones, tormentas de ideas y escenarios. El enfoque del análisis funcional <em>top-down</em> sería también desafiado por la comunidad partidaria de la orientación a objetos, más inclinada por modelar el dominio del problema antes que establecer objetivos y funciones. Esto <strong>allanó el camino a la generación actual de métodos orientados a objetos</strong>: ingeniería de sistemas orientados a objetos (Jacobson et al., 1992), la técnica de modelado de objetos (Rumbaugh, 1991) y el análisis y el diseño orientados a objetos (Coad y Yourdon, 1991), sólo por citar algunos. Más recientemente, la comunidad de la orientación a objetos definió un estándar de desarrollo con la creación de UML y del Proceso Unificado, aunque sin aportar nada en cuanto al análisis de requisitos más allá de los casos de uso y escenarios.</p>
<p>La otra influencia de la ingeniería de requisitos la encontramos en la <strong>ingeniería del software</strong>, una comunidad tradicionalmente interesada en la especificación formal y en la entrega de productos software fiables, a menudo para sistemas de telecomunicaciones en tiempo real y aplicaciones críticas. Los ingenieros de software se encontraron con que, a pesar de contar con detalladas especificaciones formales, algunos sistemas no eran aceptados o fallaban en circunstancias que no habían podido predecirse.</p>
<p>La ingeniería de requisitos ha crecido a partir de estas áreas, a las que además ha contribuido de manera muy significativa. Asimismo, se ha centrado en investigar técnicas y herramientas que complementen los métodos de ingeniería del software.</p>
<p>La fundación de la ingeniería de requisitos puede encontrarse en una colección de artículos (Thayer y Dorfman, 1990) y ediciones especiales de <em>Transactions on Software Engineering</em> (IEEE-TSE, 1991) (Davies y Hsai, 1994), seguidos por las conferencias del IEEE (Filkenstein y Fickas, 1993). Estos eventos revelaron una importante diversidad de temas de investigación y prácticas industriales que estaban más relacionados con el qué construir que con el cómo construirlo. En 1993 Lubas, Potts y Ritcher (Lubars et al., 1993), en el marco de una investigación sobre las prácticas de ingeniería de requisitos en las empresas, expusieron que los requisitos ambiguos y cambiantes constituían un problema constante y que los desarrolladores preferían <strong>soluciones organizacionales</strong> antes que tecnológicas para hacer frente a los problemas relacionados con la ingeniería de requisitos. Más recientemente, algunos estudios de campo (El Emam y Madhavji, 1995) han determinado que la falta de personal cualificado y los métodos inadecuados son responsables de posteriores defectos en los sistemas.</p>
<h3>Referencias</h3>
<p>Para terminar, algunas referencias bibliográficas interesantes que he citado durante el post:</p>
<p>Coad, P., y Yourdon, E. E. (1991). <em>Object-oriented analysis.</em> Englewood Cliffs, NJ: Yourdon Press.</p>
<p>Davies, A. M., y Hsai, P. (1994). <em>Proceedings IEEE International Conference on Requirements Engineering</em> .</p>
<p>De Marco, T. (1978). <em>Structured analysis and systems specification.</em> Englewood, NJ: Prentice Hall.</p>
<p>Downs, E., Clase, P., y Coe, I. (1992). <em>Structured systems analysis and design method: Application and context</em> (2ª edición ed.). Nueva York: Prentice Hall.</p>
<p>DSDM Consortium. (1995). <em>Dynamic Systems Development Method.</em>Farnham Surrey: Tesseract Publishers.</p>
<p>El Emam, K., y Madhavji, N. H. (1995). A field study of requirements engineering practices in information systems development. <em>Proceedings on 1995 IEEE International Symposium on Requirements Engineering (RE95)</em> .</p>
<p>Filkenstein, A. C., y Fickas, S. (1993). <em>Proceedings on 1993 IEEE International Symposium on Requirements Engineering (RE93).</em></p>
<p>Lubars, M., Potts, C., y Ritcher, C. (1993). A review of the state of the proactive in requirement modeling. <em>Proceedings 1st International Symposium on Requirements Engineering</em>.</p>
<p>Ross, D. T., y Schoman, K. E. (1977). Structured analysis for requirements definition. <em>IEEE Transactions on Software Engineering</em> (3), 23-47.</p>
<p>Rumbaugh, J. (1991). <em>Object oriented modelling and design.</em> Englewood Cliffs, NJ: Prentice Hall.</p>
<p>Thayer, y Dorfman. (1990). <em>Systems and Software Requirements Engineering.</em> IEEE.</p>
]]></content:encoded>
			<wfw:commentRss>http://nosolopau.com/2011/11/27/breve-historia-de-la-ingenieria-de-requisitos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Por qué los requisitos</title>
		<link>http://nosolopau.com/2011/11/22/por-que-los-requisitos/</link>
		<comments>http://nosolopau.com/2011/11/22/por-que-los-requisitos/#comments</comments>
		<pubDate>Tue, 22 Nov 2011 21:26:06 +0000</pubDate>
		<dc:creator>Pau</dc:creator>
				<category><![CDATA[Ingeniería]]></category>
		<category><![CDATA[ingeniería de requisitos]]></category>

		<guid isPermaLink="false">http://nosolopau.com/?p=165</guid>
		<description><![CDATA[Nadie duda de que los cimientos son importantes. Por supuesto, se puede construir un edificio sin cimientos, siempre que ese edificio sea una pequeña cabaña de madera o siempre que no nos importe que se derrumbe mientras lo construimos. En cualquier otro caso, necesitaremos una base consistente sobre la que levantar nuestra construcción. Los cimientos [...]]]></description>
			<content:encoded><![CDATA[<p>Nadie duda de que los cimientos son importantes. Por supuesto, se puede construir un edificio sin cimientos, siempre que ese edificio sea una pequeña cabaña de madera o siempre que no nos importe que se derrumbe mientras lo construimos. En cualquier otro caso, necesitaremos una base consistente sobre la que levantar nuestra construcción.</p>
<p>Los cimientos no son importantes sólo en la arquitectura. Desde los años 70 se sabe que el coste de reparar un defecto una vez entregado el producto software es <strong>entre 60 y 100 veces</strong> superior al coste que hubiera representado el mismo cambio durante las fases tempranas del proyecto. Este hecho, verificado de forma independiente y empírica por Fagan (Fagan, 1997), Boehm (Boehm, 1977) y Daly (Daly, 1977), confirma la necesidad de un enfoque de calidad en las primeras fases del proyecto, relacionadas generalmente con la obtención y especificación de los requisitos del sistema.</p>
<h3>Es la economía, estúpido</h3>
<p>Aunque las tareas relativas a ingeniería de requisitos suponen entre el 10 y el 15 por ciento del coste medio del desarrollo de un sistema, las consecuencias de una captura de requisitos defectuosa pueden tener un impacto extremadamente alto. <strong>El coste de corregir un error es proporcional al tiempo que permanece sin ser detectado</strong>: modificar un requisito apenas requiere editar una o dos líneas en lenguaje natural; alterar el diseño implica revisar las especificaciones y comprobar las ramificaciones de los nuevos requisitos; modificar el código significa malgastar el tiempo de los programadores y la realización de cambios que podrían desestabilizar el diseño.</p>
<p>Existen multitud de estudios que demuestran la incidencia directa de las tareas de ingeniería de requisitos en la calidad final del software desarrollado (Bernárdez, 2003). En los años 80, De Marco y Filkelstein estudiaron las causas de los errores encontrados en los sistemas software, encontrando que <strong>sólo el 7% de los errores se producía en la fase de implementación</strong>, mientras que el 56% del total tenía su origen en la fase de ingeniería de requisitos.</p>
<p>En 1993, durante una investigación sobre la seguridad en los sistemas de control de las sondas espaciales Galileo y Voyager, Robin R. Lutz concluyó (Lutz, 1993) que una de las principales causas de errores era la existencia de requisitos incorrectos, no documentados o desconocidos.</p>
<p>El coste de omitir la ingeniería de requisitos es alto. No sólo porque los sistemas puedan fallar, sino porque pueden no aprovecharse correctamente o resultar bastante más caros de lo estrictamente necesario: estudios sobre sistemas bancarios muestran que los usuarios sólo utilizan el 30 por ciento de las funciones proporcionadas (Eason, 1988). Las clásicas historias sobre fallos catastróficos y espectaculares apuntan a menudo a errores en las especificaciones de requisitos, o <strong>al simple hecho de no haber llevado a cabo ningún intento serio por capturar las necesidades de los usuarios</strong>. ¿Se trata simplemente por ello de un problema de motivación y educación? Aunque no resulten tan espectaculares como los desastres, muchos sistemas han sido desarrollados satisfactoriamente, y hoy en día la mayoría de empresas dispone de sistemas automáticos para gestionar partes de su negocio.</p>
<h3>Caminar sobre el agua</h3>
<p>La verdadera clave del problema hay que buscarla en el cambio. Si las organizaciones mantuvieran siempre los mismos procedimientos y el mundo permaneciera inalterable, la gestión de los requisitos sería muy sencilla, <strong>aunque de hecho no lo es</strong>: los directivos necesitan mejorar las prácticas de la organización, los gobiernos cambian los impuestos, las empresas necesitan responder a los desafíos de la competencia… La consecuencia más inmediata de esto es que rara vez se puede decir que los requisitos están terminados, así que los desarrolladores están condenados a disparar a un objetivo en movimiento.</p>
<p>En 1996, el ESI (Instituto Europeo del Software, <em>European Software Institute</em>), publicó los resultados de una encuesta realizada a empresas europeas en el marco del proyecto ESPITI (<em>European Software Process Improvement Training Initiative</em>). Según las conclusiones del estudio posterior, los ingenieros de software encuentran las mayores dificultades durante la especificación y la gestión de requisitos. El resto de las fases de desarrollo presentaban, en la mayoría de los casos, problemas menores poco significativos.</p>
<p>La ingeniería de requisitos nos ayuda a construir cimientos sólidos para nuestro software, enfocándose en un área fundamental:<strong> la definición de lo que se desea desarrollar</strong>. Para ello, nos permite diseñar especificaciones concretas que describan con claridad, sin ambigüedades, de forma consistente y compacta las necesidades de los promotores de un sistema. Una especificación correcta de requisitos formará una base sólida sobre la que podamos levantar un edificio con garantías. Según G. Ñistal, “la calidad no puede implementarse al final del desarrollo o en las etapas finales de los procesos de desarrollo sino que es una característica intrínseca al propio producto. La carrera de la calidad debe iniciarse en las especificaciones de los productos, continuando en las fases posteriores&#8230;” (Ñistal, 1999).</p>
<p>La ingeniería de requisitos permite asimismo <strong>gestionar las necesidades del proyecto de forma estructurada</strong>, mejora la capacidad de realizar una planificación temporal del proyecto, disminuye los costes y retrasos del proyecto, y en general incrementa la calidad del software, facilita la comunicación entre el equipo y evita rechazos por parte de los usuarios finales.</p>
<p><strong>Invertir en los cimientos al principio ahorrará dinero más tarde</strong>, aunque esta tarea no está exenta de problemas: por un lado, los usuarios tienden a descubrir nuevos requisitos justo cuando el analista piensa que tiene todo cuanto necesita. Por otro lado, está el “problema del mundo en movimiento”, comentado con anterioridad. Todo lo que el analista puede hacer es intentar obtener la mejor fotografía posible del mundo cuando realiza la captura de requisitos, tratar de anticipar el futuro y diseñar software que sea flexible y pueda adaptarse a los cambios. Aunque como recuerda Alistair Sutcliffe en (Sutcliffe, 2002), anticipar el futuro sea un arte oscuro.</p>
<h3>Referencias</h3>
<p>Algunos artículos interesantes que he citado:</p>
<p>Bernárdez, B. (2003). Una Aproximación Empírica a la Verificación de Especificaciones de Requisitos para Sistemas de Información. Sevilla. Universidad de Sevilla.</p>
<p>Boehm, B. W. (1977). Some Experience with Automated Aids to the Design of Large-Scale Reliable software. IEEE Transactions on Software Engineering-<br />
Daly, E. (1977). Management of Software Development. IEEE Transactions on Software Engineering.</p>
<p>Fagan, M. (1997). Design and Code Inspections and Process Control in the Development of Programs. IBM.</p>
<p>Lutz, R. R. (1993). Analyzing Software Requirements Errors in Safety-Critical Embedded Systems. Proceedings of IEEE International Symposium on Requirements Engineering.</p>
<p>Ñistal, G. (1999). Calidad del software, punto de vista y experiencias de la Administración Pública. Novática (137), 50-53.</p>
<p>Sutcliffe, A. (2002). User-centred requirements engineering. Springer.</p>
]]></content:encoded>
			<wfw:commentRss>http://nosolopau.com/2011/11/22/por-que-los-requisitos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Disabling autocomplete in Rails forms</title>
		<link>http://nosolopau.com/2010/12/17/disabling-autocomplete-in-rails-forms/</link>
		<comments>http://nosolopau.com/2010/12/17/disabling-autocomplete-in-rails-forms/#comments</comments>
		<pubDate>Fri, 17 Dec 2010 11:02:38 +0000</pubDate>
		<dc:creator>Pau</dc:creator>
				<category><![CDATA[On the Rails]]></category>
		<category><![CDATA[autocomplete]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[forms]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://nosolopau.com/?p=118</guid>
		<description><![CDATA[Sometimes might be helpful disable the forms autocomplete feature, specially for the password fields. Just add to the field tag: For example: This adds the parameter autocomplete=&#8221;off&#8221; to the HTML tag.]]></description>
			<content:encoded><![CDATA[<p>Sometimes might be helpful disable the forms autocomplete feature, specially for the password fields.</p>
<p>Just add to the field tag:</p>
<pre class="brush: ruby; title: ; notranslate">
:autocomplete =&gt; 'off'
</pre>
<p>For example:</p>
<pre class="brush: ruby; title: ; notranslate">
 'off' %&gt;
</pre>
<p>This adds the parameter autocomplete=&#8221;off&#8221; to the HTML tag.</p>
]]></content:encoded>
			<wfw:commentRss>http://nosolopau.com/2010/12/17/disabling-autocomplete-in-rails-forms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Herencia en una única tabla</title>
		<link>http://nosolopau.com/2010/05/28/herencia-en-una-unica-tabla/</link>
		<comments>http://nosolopau.com/2010/05/28/herencia-en-una-unica-tabla/#comments</comments>
		<pubDate>Fri, 28 May 2010 07:39:54 +0000</pubDate>
		<dc:creator>Pau</dc:creator>
				<category><![CDATA[On the Rails]]></category>
		<category><![CDATA[herencia]]></category>
		<category><![CDATA[orientación a objetos]]></category>

		<guid isPermaLink="false">http://blog.nosolopau.com/?p=70</guid>
		<description><![CDATA[Rails proporciona un mecanismo de herencia entre modelos dependientes de ActiveRecord::Base bastante interesante, denominado Single Table Inheritance (STI). La idea fundamental queda bastante bien reflejada en el siguiente diagrama (que hábilmente he plagiado de la web de Martin Fowler): Como queda bastante claro, Rails utiliza una única tabla donde almacena juntos los atributos de todos [...]]]></description>
			<content:encoded><![CDATA[<p>Rails proporciona un mecanismo de herencia entre modelos dependientes de ActiveRecord::Base bastante interesante, denominado Single Table Inheritance (STI). La idea fundamental queda bastante bien reflejada en el siguiente diagrama (que hábilmente <a href="http://www.martinfowler.com/eaaCatalog/singleTableInheritance.html" target="_blank">he plagiado de la web de Martin Fowler</a>):</p>
<p style="text-align: center;"><a href="http://nosolopau.com/2010/05/28/herencia-en-una-unica-tabla/sti/" rel="attachment wp-att-111"><img title="Single Table Inheritance" src="http://nosolopau.com/wp-content/uploads/2010/05/sti.png" alt="" width="438" height="186" /></a></p>
<p>Como queda bastante claro, Rails utiliza una única tabla donde almacena juntos los atributos de todos los objetos participantes en la jerarquía de herencia. Este enfoque puede ser válido para una jerarquía de clases en la que las subclases no añaden muchos atributos, limitándose a modificar aspectos relativos al comportamiento. Pero para jerarquías grandes con muchos atributos puede generar tablas más grandes de lo recomendable (y con más espacio vacío que información), por lo que lo veo poco generalizable.</p>
<p>¿Alternativas? El enfoque más natural desde el punto de vista de la orientación a objetos consiste en utilizar <a href="http://railscasts.com/episodes/154-polymorphic-association" target="_blank">asociaciones polimórficas</a>, a través de relaciones de tipo has_many :through, especificando una relación entre las una subclase y otra a través de la superclase de la segunda.</p>
]]></content:encoded>
			<wfw:commentRss>http://nosolopau.com/2010/05/28/herencia-en-una-unica-tabla/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Where is rails?</title>
		<link>http://nosolopau.com/2010/05/19/where-is-rails/</link>
		<comments>http://nosolopau.com/2010/05/19/where-is-rails/#comments</comments>
		<pubDate>Wed, 19 May 2010 07:36:55 +0000</pubDate>
		<dc:creator>Pau</dc:creator>
				<category><![CDATA[On the Rails]]></category>

		<guid isPermaLink="false">http://blog.nosolopau.com/?p=68</guid>
		<description><![CDATA[In my Mac OS 10.6, the rails intallation is in: /Library/Ruby/Gems/1.8/gems/rails-2.3.4/]]></description>
			<content:encoded><![CDATA[<p>In my Mac OS 10.6, the rails intallation is in: /Library/Ruby/Gems/1.8/gems/rails-2.3.4/</p>
]]></content:encoded>
			<wfw:commentRss>http://nosolopau.com/2010/05/19/where-is-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cappuccino</title>
		<link>http://nosolopau.com/2010/05/12/cappuccino/</link>
		<comments>http://nosolopau.com/2010/05/12/cappuccino/#comments</comments>
		<pubDate>Wed, 12 May 2010 09:13:04 +0000</pubDate>
		<dc:creator>Pau</dc:creator>
				<category><![CDATA[Interfaces de usuario]]></category>
		<category><![CDATA[cappuccino]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.nosolopau.com/?p=66</guid>
		<description><![CDATA[Cappuccino es un framework para desarrollar aplicaciones web con características de aplicaciones de escritorio. Está desarrollado sobre Objective-J, una variante de Objective-C escrita en Javascript. Se distribuye con licencia GPL. Interesante&#8230;]]></description>
			<content:encoded><![CDATA[<p><a href="http://cappuccino.org/" target="_blank">Cappuccino</a> es un framework para desarrollar aplicaciones web con características de aplicaciones de escritorio. Está desarrollado sobre Objective-J, una variante de Objective-C escrita en Javascript. Se distribuye con licencia GPL.</p>
<p>Interesante&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://nosolopau.com/2010/05/12/cappuccino/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

