<?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>Bosque Viejo</title>
	<atom:link href="http://bosqueviejo.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://bosqueviejo.net</link>
	<description>Sitio web sobre programación, software libre, redes, servidores, ofimática... y todo lo relacionado con la informática que nos rodea</description>
	<lastBuildDate>Thu, 22 Jul 2010 07:02:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Patrones de Análisis</title>
		<link>http://bosqueviejo.net/2010/07/22/patrones-de-analisis/</link>
		<comments>http://bosqueviejo.net/2010/07/22/patrones-de-analisis/#comments</comments>
		<pubDate>Thu, 22 Jul 2010 07:02:55 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[Libros]]></category>
		<category><![CDATA[desarrollo software]]></category>
		<category><![CDATA[martin fowler]]></category>
		<category><![CDATA[patrones de diseño]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/?p=460</guid>
		<description><![CDATA[Una de las personas que más ha aportado al mundo del desarrollo de software es, sin duda, Martin Fowler. Este autor, en su afán por facilitar dentro de lo posible el desarrollo de software para todo tipo, se ha introducido en las entrañas de lo que es el software de empresa típico y ha definido [...]


Entradas relacionadas:<ol><li><a href='http://bosqueviejo.net/2008/11/25/paradigmas-y-patrones/' rel='bookmark' title='Permanent Link: Paradigmas y Patrones'>Paradigmas y Patrones</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Una de las personas que más ha aportado al mundo del desarrollo de software es, sin duda, Martin Fowler.</p>
<div style="float:left;padding-right:10px;padding-bottom:10px;"><a href='http://openlibrary.org/b/OL7409173M' ><img src='http://covers.openlibrary.org/b/olid/OL7409173M-M.jpg' alt='Analysis Patterns' title='View this title in Open Library' /></a></div><div style="font-size:18px;font-weight:bold;"><a href='http://openlibrary.org/b/OL7409173M' title='View this title in Open Library' >Analysis Patterns: Reusable Object Models (The Addison-Wesley Object Technology Series)</a></div><div style="font-size:14px;"><a href='http://openlibrary.org/authors/OL27090A' title='View this author in Open Library' >Martin Fowler</a>; Addison-Wesley Professional 1996</div><div style="font-size:10px;"><a href="http://worldcat.org/isbn/9780201895421" title="Find in a library using WorldCat">WorldCat</a>&sdot;<a href="http://librarything.com/isbn/9780201895421" title="Connect with other readers at LibraryThing">LibraryThing</a>&sdot;<a href="http://books.google.com/books?as_isbn=9780201895421" title="Search for this title in Google Books">Google Books</a>&sdot;<a href="http://www.bookfinder.com/search/?st=xl&ac=qr&isbn=9780201895421" title="Search for the best price">BookFinder</a></div><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info%3Asid%2Fbosqueviejo.net%3AOpenBook&amp;rft.genre=book&amp;rft.btitle=Analysis+Patterns&amp;rft.isbn=9780201895421&amp;rft.au=Martin+Fowler&amp;rft.pub=Addison-Wesley+Professional&amp;rft.date=October+9%2C+1996&amp;rft.tpages=384"></span><p>
<p>Este autor, en su afán por facilitar dentro de lo posible el desarrollo de software para todo tipo, se ha introducido en las entrañas de lo que es el software de empresa típico y ha definido elementos, objetos, patrones y ayudas específicas que facilitan el análisis, diseño y programación en general de aplicaciones de este tipo. El libro es <strong>Analysis Patterns</strong>.</p>
<p>La obra nos introduce en el mundo de los patrones, los conceptos y modelos de los negocios e intenta dar una visión general del porqué estos patrones pueden ayudarnos a simplificar la creación de aplicaciones. A través de los capítulos, se van viendo, tema por tema, todos los aspectos que en toda empresa se suelen abordar: contabilidad, plannings, inventario, etc.</p>
<p>Como suele decir Richard Stallman: &#8220;<em>para leer buen código hay que leer buen código</em>&#8220;; y esta obra la considero un buen sistema de análisis para el que se quiera aventurar a realizar análisis de sistemas de información.</p>


<p>Entradas relacionadas:<ol><li><a href='http://bosqueviejo.net/2008/11/25/paradigmas-y-patrones/' rel='bookmark' title='Permanent Link: Paradigmas y Patrones'>Paradigmas y Patrones</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2010/07/22/patrones-de-analisis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Resolviendo Shikaku</title>
		<link>http://bosqueviejo.net/2010/07/11/resolviendo-shikaku/</link>
		<comments>http://bosqueviejo.net/2010/07/11/resolviendo-shikaku/#comments</comments>
		<pubDate>Sun, 11 Jul 2010 13:01:44 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[algoritmo voraz]]></category>
		<category><![CDATA[algoritmo vuelta atrás]]></category>
		<category><![CDATA[shikaku]]></category>
		<category><![CDATA[uned]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/?p=456</guid>
		<description><![CDATA[Esta es una práctica que realicé (y comenté) en diciembre de 2008 para la asignatura de Programación III de la UNED. La práctica se basaba en realizar un sistema para resolver tableros de shikaku, mediante el algoritmo de vuelta atrás. Mi solución es óptima pero no del todo correcta desde un punto de vista académico, [...]


Entradas relacionadas:<ol><li><a href='http://bosqueviejo.net/2008/12/13/algoritmos-heuristicos-y-algoritmos-voraces/' rel='bookmark' title='Permanent Link: Algoritmos heurísticos y algoritmos voraces'>Algoritmos heurísticos y algoritmos voraces</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Esta es una práctica que realicé (y <a href="http://bosqueviejo.net/2008/12/13/algoritmos-heuristicos-y-algoritmos-voraces/">comenté</a>) en diciembre de 2008 para la asignatura de Programación III de la UNED.</p>
<p>La práctica se basaba en realizar un sistema para resolver tableros de shikaku, mediante el algoritmo de vuelta atrás. Mi solución es óptima pero no del todo correcta desde un punto de vista académico, ya que el uso del algoritmo (de <em>backtracking</em>) es menos usado de lo que debería.</p>
<p>Para poder ver el código, este puede descargarse a través de un cliente de Subversion, en sistemas Unix/Linux es tan fácil como:</p>
<pre>svn co http://project.bosqueviejo.net/svn/shikaku/trunk</pre>
<h3>Explicación del código</h3>
<p>Bueno, tengo que reconocer que, después de algo más de un año de haberlo hecho, he tenido que releer y revisar de nuevo todo para acordarme (y reaprender) cómo hace lo que hace.</p>
<p>Por ello, voy a escribir una documentación básica sobre el código en sí, para tenerla como referencia, cuando tenga que volver al mismo otra vez, y para que sirva a todos aquellos que lo necesiten.</p>
<p>En principio, el código se divide en las siguientes clases:</p>
<ul>
<li><strong>shikaku.tablero.Combinacion</strong>: esta clase se encarga de almacenar combinaciones. Una combinación es un rectángulo que se sitúa ocupando un espacio de X*Y=N. La combinación debe de tener en alguna de sus casillas el número contenido, por lo que se almacena también la ordenada de N para comprobaciones.</li>
<li><strong>shikaku.tablero.Ordenada</strong>: es cada uno de los números que aparecen en el tablero. Se almacena su posición dentro del tablero y la representación numérica del mismo.</li>
<li><strong>shikaku.tablero.Tablero</strong>: almacena las dimensiones del tablero, la lista de combinaciones fijas (las que solo tienen una combinación válida detectada) y la lista de soluciones posibles para el tablero.</li>
</ul>
<p>Una ejecución de <strong>shikaku</strong> tiene los siguientes pasos:</p>
<ol>
<li>Entra en <em>main</em> de la clase <em>shikaku</em>, donde se detecta el origen de datos, hasta saber de donde se va a cargar el tablero.</li>
<li>En <em>run</em> se crea una instancia del tablero, y se ejecuta, para cada punto del tablero, el <em>generador</em> de la clase <em>Combinacion</em>.</li>
<li>El <em>generador</em> se encarga de buscar combinaciones válidas para el punto dado, dentro del tablero y validando su posición dentro del tablero (es decir, que no haya parte del rectángulo fuera) y con respecto al resto de puntos (que no tenga contenido nada más que el punto del que tiene que hacer la combinación).</li>
<li>El último paso para la resolución, es llamando a <em>buscaSoluciones</em>, de la clase <em>Tablero</em>, que se encarga de realizar el algoritmo de vuelta atrás para buscar las soluciones al tablero.</li>
</ol>
<p>Estos son los pasos más importantes dentro del código para resolver el tablero de shikaku.</p>
<h3>La depuración</h3>
<p>Uno de los motivos por los que el algoritmo no es del todo de tipo vuelta atrás, es precisamente por el uso de tres algoritmos voraces que se ejecutan antes que el último, de vuelta atrás. Estos algoritmos realizan una criba sobre las combinaciones basándose en tres premisas que debe cumplir cada combinación para ser válida:</p>
<ol>
<li><strong>Que no haya nada fuera del tablero</strong>: esto se realiza mediante una simple validación a la hora de generar las combinaciones. Es simple y rápida, y quita mucho procesamiento al algoritmo final.</li>
<li><strong>Combinaciones con un solo número</strong>: esto se refiere a que dentro del rectángulo que conforma la combinación, solo esté contenido el número objeto de la combinación y ningún otro. Esta validación también está incluida a la hora de generar las combinaciones, para lo que se necesita, en el generador, pasar todos los puntos del tablero.</li>
<li><strong>Eliminar combinaciones imposibles</strong>: imposibles, además de las que se descartan en los puntos anteriores, son las que <em>colisionan</em> con todas y cada una de las combinaciones posibles de otro número vecino. Si la combinación de un número colisiona con todas las combinaciones posibles de otro número, como es lógico, no podrá ser posible.</li>
</ol>
<p>Ciertamente, con estos algoritmos se llega a resolver un alto porcentaje de los tableros básicos, sin necesidad de realizar el algoritmo de vuelta atrás. Solo los tableros grandes y con dificultad alta, necesitan, además de estos algoritmos voraces, el de vuelta atrás.</p>
<h3>Mejoras</h3>
<p>En sentido académico, teniendo en cuenta uno de los requisitos que se pide, que es que sea un algoritmo de vuelta atrás, quizás sea más correcto que la depuradora actúe solo a nivel de rama y no en profundidad.</p>
<p>Hay que tener en cuenta que esto penalizaría el rendimiento y empeoraría en lo que a gestión de memoria se refiere, pero prima más cumplir con los requisitos <img src='http://bosqueviejo.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>


<p>Entradas relacionadas:<ol><li><a href='http://bosqueviejo.net/2008/12/13/algoritmos-heuristicos-y-algoritmos-voraces/' rel='bookmark' title='Permanent Link: Algoritmos heurísticos y algoritmos voraces'>Algoritmos heurísticos y algoritmos voraces</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2010/07/11/resolviendo-shikaku/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Clojure: más sobre concurrencia.</title>
		<link>http://bosqueviejo.net/2010/07/07/clojure-mas-sobre-concurrencia/</link>
		<comments>http://bosqueviejo.net/2010/07/07/clojure-mas-sobre-concurrencia/#comments</comments>
		<pubDate>Wed, 07 Jul 2010 20:45:03 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[programación]]></category>
		<category><![CDATA[clojure]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[programación concurrente]]></category>
		<category><![CDATA[programación funcional]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/?p=454</guid>
		<description><![CDATA[El término closure (clojure en francés y cláusula en castellano) se emplea en informática (según la wikipedia) como: una función que es evaluada en un entorno conteniendo una o más variables dependientes de otro entorno.; o dicho de otra forma, lo que se conoce como un código evaluado, es decir, procesado y/o compilado en caliente [...]


No hay entradas relacionadas.]]></description>
			<content:encoded><![CDATA[<p>El término closure (<em>clojure</em> en francés y <em>cláusula</em> en castellano) se emplea en informática (<a href="http://es.wikipedia.org/wiki/Clausura_(informática)">según la wikipedia</a>) como: <em>una función que es evaluada en un entorno conteniendo una o más variables dependientes de otro entorno.</em>; o dicho de otra forma, lo que se conoce como un código evaluado, es decir, procesado y/o compilado <em>en caliente</em> o tiempo de ejecución.</p>
<p>¿Por qué una introducción acerca de closure?, pues porque uno de los lenguajes que comienza a ser muy usado, es precisamente este: clo<em>j</em>ure.</p>
<h3>¿Qué es clo<em>j</em>ure?</h3>
<p>Es un lenguaje concurrente, en definición corta, según su <a href="http://clojure.org/">web oficial</a>, es un lenguaje de propósito general, que se compila y ejecuta sobre la JVM, dando la versatilidad de un lenguaje scripting, pero al mismo tiempo la robustez que requieren los programas multihilo.</p>
<p>Además, permite el acceso a frameworks Java, con lo que su integración con los entornos Java hace que sea un lenguaje que compita directamente con Scala, en este campo.</p>
<p>Para los que programan en Java, PHP, Perl, Python, Ruby&#8230; ver lenguajes como Haskell, Erlang, Lisp, Prolog o Clo<em>j</em>ure puede resultar en principio algo chocante, ya que la sintaxis es muy diferente. Es normal, su forma de actuación, lo que se puede hacer con ellos y no con los otros, es también distinto. El cambio de sintaxis, fuera de ser un impedimento, yo lo considero una forma de <em>obligarte a cambiar el chip</em>, antes de comenzar a programar.</p>
<h3>¿Y para qué sirve?</h3>
<p>Bueno, tanto hablar, tanto hablar&#8230; pero, ¿y qué hace este lenguaje?, ¿para qué es bueno? En un primer vistazo, los desarrolladores del mismo te pueden responder de forma rápida: <strong>para concurrencia</strong>.</p>
<p>Después, más detenidamente, te puedes dar cuenta de que es un tipo lenguaje tipo Lisp, con lo que, no solo es bueno con la concurrencia, sino también con la organización de datos e identificación de forma inteligente&#8230; o lo que se suele llamar la <em>inteligencia artificial</em>.</p>
<h3>Conclusiones</h3>
<p>Lisp es un lenguaje que tengo en la lista de tareas por aprender. A través de clo<em>j</em>ure, ahora, puedo darle una visión un poco más enfocada a los entornos que se usan actualmente para la programación, de modo que pueda ser más útil que simplemente aprender Lisp.</p>
<p>Por mi parte, recomiendo la elección de este lenguaje a todo aquél que tenga problemas a resolver en entornos que requieran de un procesamiento deductivo y con alta concurrencia, por ejemplo: videojuegos, elementos de telecomunicaciones, etc.</p>


<p>No hay entradas relacionadas.</p>]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2010/07/07/clojure-mas-sobre-concurrencia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Calidad Interna</title>
		<link>http://bosqueviejo.net/2010/07/01/calidad-interna/</link>
		<comments>http://bosqueviejo.net/2010/07/01/calidad-interna/#comments</comments>
		<pubDate>Thu, 01 Jul 2010 19:46:30 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[calidad]]></category>
		<category><![CDATA[desarrollo ágil]]></category>
		<category><![CDATA[deuda técnica]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/?p=451</guid>
		<description><![CDATA[el tema de la calidad ha llenado páginas y páginas de la literatura informática en todos los idiomas. Es tal la necesidad de la búsqueda de la calidad, que hay estudios, técnicas y departamentos dentro de empresas, e incluso empresas, que se dedican en cuerpo y alma a establecer parámetros de calidad a los productos [...]


No hay entradas relacionadas.]]></description>
			<content:encoded><![CDATA[<p>el tema de la calidad ha llenado páginas y páginas de la literatura informática en todos los idiomas. Es tal la necesidad de la búsqueda de la calidad, que hay estudios, técnicas y departamentos dentro de empresas, e incluso empresas, que se dedican en cuerpo y alma a establecer parámetros de calidad a los productos y proyectos que se realizan en las empresas de desarrollo de software.</p>
<p>Dentro del tema de la calidad, visto como un amplio abanico de elementos que la conforman, nos topamos con uno bastante confuso y complejo al principio: <strong>la calidad interna</strong>.</p>
<h3>¿Qué es la calidad interna?</h3>
<p>Cuando se desarrolla un software, se desarrolla con una calidad medida según sus requisitos que pueden determinar su alto grado de calidad, midiendo una serie de parámetros. Pero estos parámetros no reflejan ni tienen en cuenta la calidad del proceso de creación del software en sí, ni la calidad del software escrito, solo la calidad externa, es decir, la función que realiza el software.</p>
<p>La calidad interna, sin embargo, mide y tiene presente la forma en la que se ha desarrollado el código de modo que pueda mantenerse (corregirse, ampliarse y adaptarse) de forma rápida y sencilla, gracias a un diseño e implementación limpia, simple y clara.</p>
<p>La importancia que tiene este tipo de calidad se muestra de manifiesto en varios textos como <a href="/2010/03/08/scrum-y-xp-desde-las-trincheras/">Scrum y XP desde las trincheras</a> (de Henrik Kniberg) y algunos blogs como el de <a href="http://jmbeas.iexpertos.com/tag/agile/">José Manuel Beas</a>, <a href="http://secugest.blogspot.com/2007/11/calidad-interna-o-externa.html">Joseba Enjuto</a>, una entrada de Diego Gómez en la web <a href="http://www.dosideas.com/noticias/metodologias/189-como-hacer-yo-comprar-software-de-calidad.html">Dos Ideas</a>, o incluso en el propio estándar <a href="http://es.wikipedia.org/wiki/ISO/IEC_9126">ISO/IEC 9126</a>.</p>
<h3>¿Por qué es tan importante?</h3>
<p>Para un desarrollador, la calidad interna es tan o más importante que la calidad externa, puesto que si un software hace lo que debe, pero una de cada 1000 veces no funciona, puede deberse a un fallo interno difícil de detectar que, pueda incluso verse agravado por la mala calidad con la que se ha desarrollado (diseñado o implementado) el sistema en sí.</p>
<p>En base a tiempo, un software desarrollado con una calidad baja o nula, puede ser desarrollado en un tiempo muy pequeño, ya que no se tiene en consideración muchos aspectos necesarios y útiles, como por ejemplo, una buena orientación a objetos, modularización del código, reutilización, algoritmos excesivamente complejos u ofuscados, etc.</p>
<p>Cuando, por un fallo (mantenimiento correctivo) hay que volver al código para corregir un defecto, y se detecta un error de diseño, modificar un código <em>mal oliente</em>, es más complicado que corregir un defecto en un código que está mejor desarrollado en base a patrones y reglas básicas de análisis, diseño o codificación.</p>
<p>En otras palabras: <strong>un programa con calidad interna baja es un programa que generará <a href="/2010/06/20/deuda-tecnica/">deuda técnica</a>.</strong></p>


<p>No hay entradas relacionadas.</p>]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2010/07/01/calidad-interna/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Deuda técnica</title>
		<link>http://bosqueviejo.net/2010/06/20/deuda-tecnica/</link>
		<comments>http://bosqueviejo.net/2010/06/20/deuda-tecnica/#comments</comments>
		<pubDate>Sun, 20 Jun 2010 20:14:40 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[ward cunningham]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/?p=447</guid>
		<description><![CDATA[mi amigo Guillermo me remitió un email hace poco en el que detallaba un concepto que ya conocía hace tiempo, pero que no había visto tan bien explicado hasta el momento (sí, tenía que haber leído antes a Cunningham ), el tema era: La deuda técnica en scrum, en un resumen de cómo lo enunció [...]


No hay entradas relacionadas.]]></description>
			<content:encoded><![CDATA[<p>mi amigo Guillermo me remitió un email hace poco en el que detallaba un concepto que ya conocía hace tiempo, pero que no había visto tan bien explicado hasta el momento (sí, tenía que haber leído antes a Cunningham <img src='http://bosqueviejo.net/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> ), el tema era: <em>La deuda técnica en scrum</em>, en un resumen de cómo lo enunció <a href="http://en.wikipedia.org/wiki/Technical_debt">Ward Cunningham</a>:</p>
<p><cite>Hacer código de mala calidad a toda prisa, es como pedir un crédito: puede que obtengamos un beneficio a corto plazo pero si tenemos que seguir desarrollando ese código, tarde o temprano tendremos que pagar todo el tiempo que nos habíamos ahorrado y los intereses. Refactorizar código mal escrito es siempre más difícil que escribirlo bien desde el principio.</cite></p>
<p>Creo que se ve claro que, programar rápido no significa hacerlo bien, en la mayoría de los casos, es raro hacerlo rápido y bien. Por otro lado, lo que puede haber funcionado (incluso de milagro) en una ocasión, si necesita mejoras o cambios, puede dejar de funcionar, teniendo que invertir mucho más tiempo del que habría costado hacerlo bien desde el principio.</p>
<p>¿Hacerlo bien significa gastar muchas más horas? No realmente. Si llevásemos un cómputo de las horas invertidas en hacer un proyecto de forma rápida, a priori, podría parecer que se han invertido pocas horas y el trabajo está <em>hecho</em>. El problema viene después, cuando toca corregir los errores de cualquier índole que no se han tenido en cuenta, o simplemente, por la rapidez, se han cometido. </p>
<p>Normalmente, las horas invertidas en mantenimiento, superan con creces las horas invertidas en un desarrollo <em>basura</em>. La comparación con el <em>haberlo hecho bien</em>, es que el tiempo de desarrollo planificado crece, pero el de mantenimiento es nulo o muy, muy pequeño. Por lo que, a la larga (o al medio plazo) compensa.</p>


<p>No hay entradas relacionadas.</p>]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2010/06/20/deuda-tecnica/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lógica de negocio en la base de datos</title>
		<link>http://bosqueviejo.net/2010/06/09/logica-de-negocio-en-la-base-de-datos/</link>
		<comments>http://bosqueviejo.net/2010/06/09/logica-de-negocio-en-la-base-de-datos/#comments</comments>
		<pubDate>Tue, 08 Jun 2010 23:50:15 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[Base de Datos]]></category>
		<category><![CDATA[ingeniería de negocio]]></category>
		<category><![CDATA[postgresql]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/?p=444</guid>
		<description><![CDATA[Desde mi punto de vista, esto puede suponer una locura total y una falta de forma en lo que respecta al uso de un almacén de datos visto como tal. No obstante, hay sistemas de base de datos que implementan una capa de negocio bastante interesante, donde otros sistemas solo dan una opción de scripting [...]


Entradas relacionadas:<ol><li><a href='http://bosqueviejo.net/2009/01/07/base-de-datos-relacionales-sqlite-mysql-y-postgresql/' rel='bookmark' title='Permanent Link: Base de Datos Relacionales: SQLite, MySQL y PostgreSQL'>Base de Datos Relacionales: SQLite, MySQL y PostgreSQL</a></li>
<li><a href='http://bosqueviejo.net/2009/03/05/couchdb-rest-y-base-de-datos-documental/' rel='bookmark' title='Permanent Link: CouchDB: REST y Base de datos documental'>CouchDB: REST y Base de datos documental</a></li>
<li><a href='http://bosqueviejo.net/2008/09/19/inteligencia-de-negocio/' rel='bookmark' title='Permanent Link: Inteligencia de Negocio'>Inteligencia de Negocio</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Desde mi punto de vista, esto puede suponer una locura total y una falta de forma en lo que respecta al uso de un almacén de datos visto como tal. No obstante, hay sistemas de base de datos que implementan una capa de negocio bastante interesante, donde otros sistemas solo dan una opción de <em>scripting</em> que da algo de miedo.</p>
<p>En <em>postgresql</em>, por ejemplo, el sistema de lenguajes que se pueden usar e implementar para la creación de funciones: PL/pgSQL, PL/Tcl, PL/Python, PL/Perl, PL/PHP, PL/Java, PL/Ruby, &#8230;; todos ellos se pueden ver en la página de <a href="http://www.postgresql.org/docs/8.4/static/external-pl.html">documentación de PostgreSQL</a>.</p>
<p>Esto quiere decir que, en una llamada a una función SQL se puede emplear una función específica programada en cualquiera de estos lenguajes, así como el lanzamiento de un trigger, puede ser compuesto por una serie de llamadas a estos procedimientos.</p>
<p>No obstante, la gente suele tener bastante miedo a usar estos sistemas para lógica de negocio por varios motivos, pero principalmente porque <strong>el despliegue es complejo</strong>. </p>
<p>Sí, en ciertos SGBD, un despliegue y mantenimiento resulta algo complejo, el hecho de mantener unas versiones y saber exactamente qué hay en producción y qué no hay, así como el hecho de que un cambio pueda hacerse en cualquier momento y pueda desvirtuar lo que haya en el repositorio en sí. </p>
<p>No obstante, puede solventarse con el uso de sistemas como <a href="http://blog.aizatto.com/2007/05/27/activerecord-migrations-without-rails/">migrations de rails</a>, o similares. Es decir, no cargar nada directamente desde una interfaz abierta o desde la consola, sino desde una herramienta que permita controlar las subidas en forma de versiones.</p>
<p>En sí, el sistema de CHECK de PostgreSQL permite y da ventajas al usuario de desarrollar parte de la lógica de negocio. Allá donde no llegan los mecanismos típicos, es donde se puede comenzar a tirar de las funciones desarrolladas en cualquier lenguaje, con la potencia de que estas pueden ser lanzadas como CONSTRAINT, TRIGGERS o de forma inmediata en una consulta SQL.</p>
<p>En mi opinión, el uso de PostgreSQL como capa de datos, y además como capa de negocio, es una opción tan válida como extraer esa lógica a otros sistemas externos. La única nota negativa, es la interconexión, que obliga a que se haga con el conector de base de datos mientras que desarrollando la capa de negocio en otro tipo de framework, este acceso podría bien ser por mecanismos más orientados a RPC como SOAP o REST.</p>


<p>Entradas relacionadas:<ol><li><a href='http://bosqueviejo.net/2009/01/07/base-de-datos-relacionales-sqlite-mysql-y-postgresql/' rel='bookmark' title='Permanent Link: Base de Datos Relacionales: SQLite, MySQL y PostgreSQL'>Base de Datos Relacionales: SQLite, MySQL y PostgreSQL</a></li>
<li><a href='http://bosqueviejo.net/2009/03/05/couchdb-rest-y-base-de-datos-documental/' rel='bookmark' title='Permanent Link: CouchDB: REST y Base de datos documental'>CouchDB: REST y Base de datos documental</a></li>
<li><a href='http://bosqueviejo.net/2008/09/19/inteligencia-de-negocio/' rel='bookmark' title='Permanent Link: Inteligencia de Negocio'>Inteligencia de Negocio</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2010/06/09/logica-de-negocio-en-la-base-de-datos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SIP desmitificado</title>
		<link>http://bosqueviejo.net/2010/05/13/sip-desmitificado/</link>
		<comments>http://bosqueviejo.net/2010/05/13/sip-desmitificado/#comments</comments>
		<pubDate>Thu, 13 May 2010 20:08:29 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[Libros]]></category>
		<category><![CDATA[gonzalo camarillo]]></category>
		<category><![CDATA[sip]]></category>
		<category><![CDATA[telefonía]]></category>
		<category><![CDATA[voip]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/?p=438</guid>
		<description><![CDATA[Desde que comencé a trabajar en esto de la informática, hace ya seis años, me he dedicado a entornos que tienen que ver con la VoIP (Voz sobre IP) tocando los protocolos típicos de VoIP como son: SIP, H.323, MGCP (o megaco) y IAX; pero también con interconexiones de tipo RDSI (o ISDN en inglés) [...]


No hay entradas relacionadas.]]></description>
			<content:encoded><![CDATA[<p>Desde que comencé a trabajar en esto de la informática, hace ya seis años, me he dedicado a entornos que tienen que ver con la VoIP (Voz sobre IP) tocando los protocolos típicos de VoIP como son: SIP, H.323, MGCP (o megaco) y IAX; pero también con interconexiones de tipo RDSI (o ISDN en inglés) a través de BRI, o de E1 a través de PRI.</p>
<p>El caso es que muchos manuales y documentos me ayudaron a comprender los sistemas, su funcionamiento, estructura y elementos que se pueden encontrar en cada uno de los esquemas, o infraestructuras, que se pueden crear con ellos. Sin esta información hubiese sido difícil aprender tan rápidamente todo lo que concierne al mundo de la VoIP y sobre todo al mundo de SIP, uno de los protocolos que más y mejor permiten la convergencia entre los sistemas de telefonía y los sistemas informáticos.</p>
<div style="float:left;padding-right:10px;padding-bottom:10px;"><a href='http://openlibrary.org/b/OL7298814M' ><img src='http://covers.openlibrary.org/b/olid/OL7298814M-M.jpg' alt='SIP Demystified' title='View this title in Open Library. First Sentence: The telephone network, also known as the Public Switched Telephone Network (PSTN), reaches almost every country in the world.' /></a></div><div style="font-size:18px;font-weight:bold;"><a href='http://openlibrary.org/b/OL7298814M' title='View this title in Open Library' >SIP Demystified</a></div><div style="font-size:14px;"><a href='http://openlibrary.org/authors/OL1430449A' title='View this author in Open Library' >Gonzalo Camarillo</a>; McGraw-Hill Professional 2001</div><div style="font-size:10px;"><a href="http://worldcat.org/isbn/0071373403" title="Find in a library using WorldCat">WorldCat</a>&sdot;<a href="http://librarything.com/isbn/0071373403" title="Connect with other readers at LibraryThing">LibraryThing</a>&sdot;<a href="http://books.google.com/books?as_isbn=0071373403" title="Search for this title in Google Books">Google Books</a>&sdot;<a href="http://www.bookfinder.com/search/?st=xl&ac=qr&isbn=0071373403" title="Search for the best price">BookFinder</a></div><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info%3Asid%2Fbosqueviejo.net%3AOpenBook&amp;rft.genre=book&amp;rft.btitle=SIP+Demystified&amp;rft.isbn=0071373403&amp;rft.au=Gonzalo+Camarillo&amp;rft.pub=McGraw-Hill+Professional&amp;rft.date=August+28%2C+2001&amp;rft.tpages=320"></span><p>
<p>El libro que recomiendo es un documento que he leído varias veces y que me ha ayudado como guía en mi trabajo, sobre todo para entender ciertos problemas que se sucedían en los entornos de pruebas y en incidencias ya en producción.</p>
<p>Comienza con una explicación sobre la historia del propio protocolo, cómo surgió. Es interesante saber la historia de la tecnología que usamos, porque así comprendemos sus ventajas e inconvenientes, sus fortalezas y sus carencias.</p>
<p>Es pequeño (no tiene más allá de 264 páginas) pero con mucho contenido muy condensado y repleto de material gráfico que ayuda mucho más a comprender lo que explica el libro en sí.</p>
<p>Recomiendo su lectura a todos aquellos que necesiten trabajar en entornos VoIP con interconexiones SIP.</p>


<p>No hay entradas relacionadas.</p>]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2010/05/13/sip-desmitificado/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NoSQL: sistemas de almacenamiento en lugar de bases de datos</title>
		<link>http://bosqueviejo.net/2010/05/04/nosql/</link>
		<comments>http://bosqueviejo.net/2010/05/04/nosql/#comments</comments>
		<pubDate>Tue, 04 May 2010 13:29:18 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[Base de Datos]]></category>
		<category><![CDATA[base de datos]]></category>
		<category><![CDATA[bigtable]]></category>
		<category><![CDATA[hypertable]]></category>
		<category><![CDATA[mapreduce]]></category>
		<category><![CDATA[nosql]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/?p=433</guid>
		<description><![CDATA[Hace poco me topé con una definición que me causó un poco de desconcierto, no llegaba a entender bien el porqué había muchas empresas y profesionales que comenzaban a usar el NoSQL. Leyendo el blog de dos ideas con referencia a un artículo que publicaron llamado NoSQL: el movimiento en contra de las bases de [...]


Entradas relacionadas:<ol><li><a href='http://bosqueviejo.net/2009/01/07/base-de-datos-relacionales-sqlite-mysql-y-postgresql/' rel='bookmark' title='Permanent Link: Base de Datos Relacionales: SQLite, MySQL y PostgreSQL'>Base de Datos Relacionales: SQLite, MySQL y PostgreSQL</a></li>
<li><a href='http://bosqueviejo.net/2009/03/05/couchdb-rest-y-base-de-datos-documental/' rel='bookmark' title='Permanent Link: CouchDB: REST y Base de datos documental'>CouchDB: REST y Base de datos documental</a></li>
<li><a href='http://bosqueviejo.net/2010/06/09/logica-de-negocio-en-la-base-de-datos/' rel='bookmark' title='Permanent Link: Lógica de negocio en la base de datos'>Lógica de negocio en la base de datos</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Hace poco me topé con una definición que me causó un poco de desconcierto, no llegaba a entender bien el porqué había muchas empresas y profesionales que comenzaban a usar el <a href="http://es.wikipedia.org/wiki/NoSQL">NoSQL</a>.</p>
<p>Leyendo el blog de <a href="http://www.dosideas.com">dos ideas</a> con referencia a un artículo que publicaron llamado <a href="http://www.dosideas.com/noticias/base-de-datos/657-nosql-el-movimiento-en-contra-de-las-bases-de-datos.html">NoSQL: el movimiento en contra de las bases de datos</a>, se comenta una conferencia en la que grandes profesionales del sector de los sistemas, con necesidades de escalabilidad y alta capacidad de almacenaje, mencionaban sus soluciones NoSQL.</p>
<p>Entre ellos, representantes de empresas como Google, Amazon, Facebook, Twitter, LinkedIn, &#8230; pusieron en conocimiento de todos los asistentes sus soluciones ya desarrolladas y en funcionamiento para suplir las carencias que las bases de datos tradicionales no podían cubrir.</p>
<h3>Las ventajas de NoSQL</h3>
<p>Las ventajas de estos sistemas de almacenamiento (hay muchos integrantes de este movimiento que consideran una aberración llamarlos <em>bases de datos</em>) son las siguientes:</p>
<ul>
<li><strong>Pueden manejar enormes cantidades de datos</strong>: esto es debido a su propia estructura distribuida. Por ejemplo, <a href="http://www.hypertable.org/">HyperTable</a>, una implementación de código abierto basada en <a href="http://labs.google.com/papers/bigtable.html">BigTable</a> (de Google), puede escribir 1000 millones de celdas de datos por día. Al igual que BigTable, con <a href="http://es.wikipedia.org/wiki/MapReduce">MapReduce</a>, es capaz de manejar 20 petabytes diarios.</li>
<li><strong>Se ejecutan en clusters de máquinas baratas</strong>: estos sistemas no requieren de apenas computación, en comparación con los sitemas gestores de base de datos tradicionales y basados en SQL, por lo que se pueden montar en máquinas de un coste más reducido y en mayor número, gracias a su nivel de escalabilidad.</li>
<li><strong>No generan cuellos de botella</strong>: el problema de fondo de los sistemas SQL, es que deben de transcribir cada sentencia para poder ser ejecutada y, cada sentencia compleja requiere, además de un nivel de ejecución más concreto para poderse llevar a cabo, por lo que constituye un punto de entrada común, único y conflictivo en base a rendimiento.</li>
<li><strong>Solo lo estrictamente necesario</strong>: son sistemas simples que no tienen un sistema de consulta complejo ni con capacidad declarativa para en una sola línea realizar una cantidad interna de operaciones desorbitada.</li>
</ul>
<h3>Las desventajas</h3>
<p>Bueno, y después de poner estos sistemas por las nubes&#8230; ahora toca pegar un poco los pies al suelo y darse de cara con la realidad. Quiero decir que, sí, hay desventajas, esto no es una panacea que sirva para paliar la necesidad del almacenaje de datos para todos los casos. En entornos de sistemas de información, en gestión de cuentas, y entornos en los que es preferible que los datos puedan tener algo más de inteligencia, en lugar de algo más de rapidez, estos sistemas no son aconsejables, ya que la única, pero mayor desventaja de estos es que <strong>no respetan <a href="http://es.wikipedia.org/wiki/ACID">ACID</a></strong>.</p>
<h3>Conclusiones</h3>
<p>En mi caso particular, trabajando en un área de sistemas relacionado con la telefonía en el que premia más la velocidad de tratamiento de datos, así como la capacidad para poder manejar gran cantidad de los mismos, y en el que la integridad referencial es algo que ni se usa ni se tiene en cuenta, sí, es una solución real, una forma de ahorrarse gran cantidad de código y dolores de cabeza con respecto a la escalabilidad y concurrencia de la información dentro de la plataforma tecnológica.</p>
<p>Ahora, si mi trabajo fuese desarrollar sistemas CRM, ERP o similares, que dependen más de la integridad de los datos, así como su relación y unas reglas de negocio establecidas y programadas, es innegable que las bases de datos con soporte SQL agregan mucho valor en este sentido.</p>
<p>Por lo que, podemos concluir en que, para programación de sistemas son un recurso muy útil y que puede facilitar y paliar problemáticas relacionadas con el almacenaje de información, así como el tratamiento in-situ de la misma con cara a la lógica del servicio, y por otro lado, si lo que premia más es tener una lógica de negocio bien definida, en ese caso, quizás es mejor seguir usando los sistemas SQL.</p>


<p>Entradas relacionadas:<ol><li><a href='http://bosqueviejo.net/2009/01/07/base-de-datos-relacionales-sqlite-mysql-y-postgresql/' rel='bookmark' title='Permanent Link: Base de Datos Relacionales: SQLite, MySQL y PostgreSQL'>Base de Datos Relacionales: SQLite, MySQL y PostgreSQL</a></li>
<li><a href='http://bosqueviejo.net/2009/03/05/couchdb-rest-y-base-de-datos-documental/' rel='bookmark' title='Permanent Link: CouchDB: REST y Base de datos documental'>CouchDB: REST y Base de datos documental</a></li>
<li><a href='http://bosqueviejo.net/2010/06/09/logica-de-negocio-en-la-base-de-datos/' rel='bookmark' title='Permanent Link: Lógica de negocio en la base de datos'>Lógica de negocio en la base de datos</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2010/05/04/nosql/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Pretty URLs</title>
		<link>http://bosqueviejo.net/2010/04/27/pretty-urls/</link>
		<comments>http://bosqueviejo.net/2010/04/27/pretty-urls/#comments</comments>
		<pubDate>Tue, 27 Apr 2010 12:17:18 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[redes]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[rewrite]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/?p=430</guid>
		<description><![CDATA[Muchas veces hemos visto las URL de algunos sitios que tienen, tras una interrogación de cierre (?) una hilera de valores con iguales (=) separados por ampersand (&#038;). No obstante, hay otros muchos sitios que sus URLs, más específicamente sus URIs, son palabras en minúscula, con algunos guiones y números escasos, separados por barras inclinadas [...]


No hay entradas relacionadas.]]></description>
			<content:encoded><![CDATA[<p>Muchas veces hemos visto las URL de algunos sitios que tienen, tras una interrogación de cierre (?) una hilera de valores con iguales (=) separados por ampersand (&#038;). No obstante, hay otros muchos sitios que sus URLs, más específicamente sus URIs, son palabras en minúscula, con algunos guiones y números escasos, separados por barras inclinadas (/). Este último método es conocido con <em>pretty urls</em>.</p>
<p>Tener este tipo de URLs, o URIs en nuestro dominio, se puede hacer mediante la creación de directorios y especificando los ficheros dentro de los mismos que tengan los nombres (sin extensión) que queremos que se visualicen en la barra del navegador&#8230; pero no es nada útil y es complejo, sobre todo cuando se usan entornos como WordPress o similares, donde el contenido de la base de datos dicta lo que aparece en la página, y es totalmente dinámico.</p>
<p>La solución que se puede emplear: rewrite. En Apache, a través del módulo <em>mod_rewrite</em>, se pueden crear reglas de redireccionado de modo que una URL que es:</p>
<pre>http://midominio.com/?p=129&#038;a=crea-usuario</pre>
<p>Se puede convertir en:</p>
<pre>http://midominio.com/crea-usuario/129</pre>
<p>En el caso concreto, tan solo bastaría con agregar un bloque de configuración como el siguiente:</p>
<pre>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/(.+)/([0-9]+)$    /index.php?p=$2&#038;a=$1
</pre>
<p>Para más información vea <a href="http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html">la documentación oficial de Apache</a>.</p>


<p>No hay entradas relacionadas.</p>]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2010/04/27/pretty-urls/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Modelo de Dominio: la importancia de los nombres</title>
		<link>http://bosqueviejo.net/2010/04/26/modelo-de-dominio-la-importancia-de-los-nombres/</link>
		<comments>http://bosqueviejo.net/2010/04/26/modelo-de-dominio-la-importancia-de-los-nombres/#comments</comments>
		<pubDate>Mon, 26 Apr 2010 07:30:20 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[Empresa]]></category>
		<category><![CDATA[desarrollo software]]></category>
		<category><![CDATA[ingeniería de negocio]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/wordpress/?p=47</guid>
		<description><![CDATA[Actulizado: se ha corregido el concepto, ya que se confundía con la definición de glosario, cuando se quería detallar que era algo más que un glosario. En todas las empresas en las que he trabajado, siempre surge el problema de que, cuando sale algo nuevo o se crea un cierto programa, un sistema o una [...]


No hay entradas relacionadas.]]></description>
			<content:encoded><![CDATA[<p><strong>Actulizado</strong>: se ha corregido el concepto, ya que se confundía con la definición de glosario, cuando se quería detallar que era algo más que un glosario.</p>
<p>En todas las empresas en las que he trabajado, siempre surge el problema de que, cuando sale algo nuevo o se crea un cierto programa, un sistema o una forma de trabajo, si la persona que la ha motivado no sabe su nombre: se la inventa.</p>
<p>Esto pasa con mucha frecuencia, y no es malo, pero es común que toda la empresa termine usando el <em>vocablo</em> en muy poco tiempo y, toda persona que entre nueva, si ese <em>vocablo</em> le parece desconocido o le sugiere otra cosa distinta, le lleve a confusión hasta que se lo expliquen.</p>
<p>Para esto se suelen hacer glosarios o lo que, en ingeniería del software se conoce como: <strong>Modelo de Dominio</strong>.</p>
<p>Este documento tiene varias partes, una de ellas se especifica como un glosario, estando ordenado alfabéticamente, y recogiendo todas las palabras que se usan, comúnmente en el entorno profesional en el que se mueve la empresa, y las palabras referentes a productos y servicios específicos que se comercializan o adquieren por parte de la empresa. Otra de las partes es la relación que hay entre conceptos que se manejan en la empresa, definición de características de cada uno de los elementos y restricciones de uso de los mismos.</p>
<p>Ceñirse a estándares es una forma de no necesitar un modelo de dominio, pero es complicado no <em>saltarse las normas</em> alguna que otra vez, por lo que, aún tomando precauciones de llamar a todo por su nombre, es conveniente y productivo, sobre todo para las nuevas incorporaciones o subcontratas, tener este documento disponible.</p>


<p>No hay entradas relacionadas.</p>]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2010/04/26/modelo-de-dominio-la-importancia-de-los-nombres/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
