<?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>Faltan ideas!</title>
	<atom:link href="http://faltanideas.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://faltanideas.com</link>
	<description>Comentarios y opinión sobre TI y Computación</description>
	<lastBuildDate>Wed, 10 Mar 2010 23:34:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>ChileAyuda.com</title>
		<link>http://faltanideas.com/?p=294</link>
		<comments>http://faltanideas.com/?p=294#comments</comments>
		<pubDate>Thu, 04 Mar 2010 18:47:46 +0000</pubDate>
		<dc:creator>gacevedo</dc:creator>
				<category><![CDATA[Actualidad]]></category>
		<category><![CDATA[Español]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://faltanideas.com/?p=294</guid>
		<description><![CDATA[Estos días, tras el terremoto, viajé a Santiago a visitar a mi amigo personal JuanCri. Esto me ha permitido acercarme nuevamente a la tecnología (me robaron mi MacBook Pro el viernes pasado en Concepción) y comenzar a resolver algunos asuntos pendientes. En este viaje he tenido la oportunidad de encontrarme con un montón de geeks y [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://chileayuda.com/"><img class="aligncenter" title="ChileAyuda" src="http://chileayuda.com/wp-content/themes/chileayuda/images/banner-468x60.jpg" alt="" /></a></p>
<p>Estos días, tras el terremoto, viajé a Santiago a visitar a mi amigo personal <a title="Blog de JuanCri" href="http://juancri.com/" target="_blank">JuanCri</a>. Esto me ha permitido acercarme nuevamente a la tecnología (me robaron mi MacBook Pro el viernes pasado en Concepción) y comenzar a resolver algunos asuntos pendientes.</p>
<p>En este viaje he tenido la oportunidad de encontrarme con un montón de geeks y entusiastas que están haciendo un aporte importante en las gestiones necesarias para ayudar a los damnificados del terremoto del pasado Sábado 27. Se trata de la gente de <a href="http://chileayuda.com/" target="_blank">ChileAyuda.com</a>. Este portal mantiene diversos servicios informativos, búsqueda de personas, canalización de ayudas, etc. que son actualizados y mejorados minuto a minuto. En las horas que he estado en las oficinas de <a href="http://chileayuda.com/" target="_blank">ChileAyuda.com</a> he podido aportar en algunas cosas también, utilizando los skills que he recibido en mi formación profesional y personal.</p>
<p>Les invito a visitar el <a href="http://chileayuda.com/" target="_blank">sitio Web de ChileAyuda.com</a> y colaborar en lo que puedan para que Chile se levante.</p>
]]></content:encoded>
			<wfw:commentRss>http://faltanideas.com/?feed=rss2&amp;p=294</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>UML en Netbeans 6.8</title>
		<link>http://faltanideas.com/?p=291</link>
		<comments>http://faltanideas.com/?p=291#comments</comments>
		<pubDate>Thu, 25 Feb 2010 04:49:31 +0000</pubDate>
		<dc:creator>gacevedo</dc:creator>
				<category><![CDATA[Español]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://faltanideas.com/?p=291</guid>
		<description><![CDATA[Hasta hace poco utilizaba el plugin UML en Netbeans 6.7.1, para hacer diagramas de clases y casos de uso. Pero con la llegada de la versión 6.8 del IDE, el plugin dejó de existir (o al menos ya no tiene soporte oficial). Buscando un momento en Google, encontré una fuente de instalación para el plugin [...]]]></description>
			<content:encoded><![CDATA[<p><img style="float: left; margin: 2px; border: 0px initial initial;" title="UML" src="http://otroblogmas.com/wp-content/uploads/2010/03/uml_logo.jpg" alt="" width="133" height="102" />Hasta hace poco utilizaba el plugin UML en Netbeans 6.7.1, para hacer diagramas de clases y casos de uso. Pero con la llegada de la versión 6.8 del IDE, el plugin dejó de existir (o al menos ya no tiene soporte oficial).</p>
<p>Buscando un momento en Google, encontré una fuente de instalación para el plugin que, aunque no funcionó, me permitió encontrar la fuente correcta. Lo acabo de instalar y trabaja excelente.</p>
<blockquote><p>http://ea.ddns.com.br:8090/netbeans6.8/UML/catalog_ok.xml</p></blockquote>
<p>Una lástima que UML ya no esté soportado por Netbeans, pero se demuestra una vez más que la comunidad es un aporte fundamental en distintos aspectos del desarrollo de software y sistemas.</p>
<h6 style="font-size: 0.75em;">Fuente: http://otroblogmas.com/instalar-plugin-uml-netbeans-6-8/</h6>
]]></content:encoded>
			<wfw:commentRss>http://faltanideas.com/?feed=rss2&amp;p=291</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ejecución indirecta/remota de aplicaciones Java</title>
		<link>http://faltanideas.com/?p=283</link>
		<comments>http://faltanideas.com/?p=283#comments</comments>
		<pubDate>Mon, 22 Feb 2010 01:47:23 +0000</pubDate>
		<dc:creator>gacevedo</dc:creator>
				<category><![CDATA[Español]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[PHP 5]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://faltanideas.com/?p=283</guid>
		<description><![CDATA[Exception in thread &#8220;main&#8221; java.lang.InternalError: Can&#8217;t connect to window server &#8211; not enough permissions. El error anterior, oculto en el log de Apache HTTP Server, generado al intentar ejecutar Apache FOP desde PHP para generar informes para un proyecto que estoy desarrollando con Cx Networks, me mantuvo varios minutos preocupado y buscando soluciones para el problema. Al principio parecía [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Exception in thread &#8220;main&#8221; java.lang.InternalError: Can&#8217;t connect to window server &#8211; not enough permissions.</p></blockquote>
<p>El error anterior, oculto en el log de <a title="Apache HTTP Server" href="http://httpd.apache.org/" target="_blank">Apache HTTP Server</a>, generado al intentar ejecutar <a title="Apache FOP" href="http://xmlgraphics.apache.org/fop/" target="_blank">Apache FOP</a> desde <a title="PHP" href="http://php.net/" target="_blank">PHP</a> para generar informes para un proyecto que estoy desarrollando con <a title="Cx Networks" href="http://cxnet.cl/" target="_blank">Cx Networks</a>, me mantuvo varios minutos preocupado y buscando soluciones para el problema.</p>
<p>Al principio parecía un simple problema de permisos de archivo. Pero tras tomar las acciones comúnmente necesarias (el ya conocido modo diabólico), todo parecía ir de mal en peor. Y es que estaba por maldecir a Steve por hacerme perder el tiempo; ya que en los servidores de Cx Net (Linux) todo funcionaba bien, pero en mi Macbook sólo veía el error en cuestión.</p>
<p>Tras investigar un rato en la Internet (por estos días Google), encontré que el problema se generaba por la imposibilidad de la máquina virtual de Java de acceder a ciertos dispositivos de interfaz humana como el mouse, el display o el teclado. Al parecer esto ocurre cuando llamamos indirectamente a la aplicación Java. Por ejemplo con un usuario que no tiene acceso a una shell como www de Apache (o _www en Mac OS X). También podríamos enfrentarnos a esta situación cuando ejecutamos un proceso Java de manera remota a través de SSH.</p>
<p>La solución es más simple de lo esperado. Al ejecutar el proceso Java, debemos indicar que estamos en un ambiente headless (sin mouse, teclado o pantalla). Para lo anterior, utilizamos el siguiente argumento:</p>
<p><strong>-Djava.awt.headless=true</strong></p>
<p>Para más información sobre el modo headless, les invito a visitar el siguiente enlace:</p>
<p><a title="Java AWT Changes" href="http://java.sun.com/j2se/1.4.2/docs/guide/awt/AWTChanges.html#headless" target="_blank">http://java.sun.com/j2se/1.4.2/docs/guide/awt/AWTChanges.html#headless</a></p>
]]></content:encoded>
			<wfw:commentRss>http://faltanideas.com/?feed=rss2&amp;p=283</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP y PostgreSQL en Mac OS X 10.6</title>
		<link>http://faltanideas.com/?p=272</link>
		<comments>http://faltanideas.com/?p=272#comments</comments>
		<pubDate>Thu, 11 Feb 2010 20:05:21 +0000</pubDate>
		<dc:creator>gacevedo</dc:creator>
				<category><![CDATA[Español]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[PHP 5]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://faltanideas.com/?p=272</guid>
		<description><![CDATA[Junto a las críticas, burlas, y (envidia) aplausos de amigos geeks, hace ya varios meses, llegó a mi vida un MacBook Pro 13&#8221;. Siempre había sostenido que comprar un Mac era un lujo y que no gastaría tanto dinero en una computadora. Sin embargo, al estar en Estados Unidos era imposible resistir la tentación ante [...]]]></description>
			<content:encoded><![CDATA[<p>Junto a las críticas, burlas, y (envidia) aplausos de amigos geeks, hace ya varios meses, llegó a mi vida un <a title="Apple Store - MacBook Pro" href="http://store.apple.com/us/browse/home/shop_mac/family/macbook_pro" target="_blank">MacBook Pro 13&#8221;</a>. Siempre había sostenido que comprar un Mac era un lujo y que no gastaría tanto dinero en una computadora. Sin embargo, al estar en Estados Unidos era imposible resistir la tentación ante el descuento por ser alumno de la <a title="University of Illinois" href="http://illinois.edu/" target="_blank">University of Illinois</a> y el (iPad Nano) <a title="Apple Store - iPod Touch" href="http://store.apple.com/us/browse/home/shop_ipod/family/ipod_touch" target="_blank">iPod Touch 8GB</a> que venía de regalo.</p>
<p>Durante estos meses que he usado la laptop, no había sido necesario usarla para desarrollar sitios o aplicaciones Web. Hasta ahora sólo había programado en C, C++, Java. Para estos 3 lenguajes Mac OS X está preparador <em>out of the box</em>. Sin embargo, desde algunas semanas atrás estoy desarrollando un sistema Web como parte de mi Proyecto de Título y, como (me robaron) no tengo un computador de escritorio, he tenido que desarrollar usando el notebook. Hasta ahora lo hacía todo en la nube, pero como el tiempo apremia, y no tengo Internet 3G, he tenido la necesitad de preparar un ambiente de desarrollo en la laptop.</p>
<p>Mac OS X 10.6 viene con <a title="Apache HTTPd" href="http://httpd.apache.org/" target="_blank">Apache 2 (HTTP)</a> instalado y listo para ejecutar (apachectl start o desde System Preferences-&gt;Sharing). Entonces sólo era necesario instalar <a title="PostgreSQL" href="http://postgresql.org/" target="_blank">PostgreSQL</a> y <a title="PHP" href="http://php.net/" target="_blank">PHP 5</a> con los respectivos drivers. Si bien es cierto existen packages de PostgreSQL para Mac OS X, es mucho más &#8220;lindo&#8221; compilar el código fuente.</p>
<h3>Instalando PostgreSQL</h3>
<p>Antes de compilar PostgreSQL necesitamos un paquete llamado <a title="GNU readline" href="http://tiswww.case.edu/php/chet/readline/rltop.html" target="_blank">readline</a>. Para instalar esta utilidad de GNU podemos usar <a title="The Fink Project" href="http://www.finkproject.org/download/index.php" target="_blank">fink</a> o <a title="The MacPorts Project" href="http://www.macports.org/" target="_blank">MacPorts</a>.</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">$ sudo /sw/bin/fink install readline</pre></div></div>

<p>Una vez instalado readline, descargamos el código fuente de PostgreSQL. <em>Nota que el siguiente enlace corresponde a la última versión estable de Postgres al momento de escribir este post, y el mirror es para Chile.</em></p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">$ sudo bash
&nbsp;
# cd /usr/local/src
&nbsp;
# curl -O http://wwwmaster.postgresql.org/redir/394/h/source/v8.4.2/postgresql-8.4.2.tar.gz
&nbsp;
# tar xvfz postgresql-8.4.2.tar.gz
&nbsp;
# cd postgresql-8.4.2/</pre></div></div>

<p>Ahora ejecutamos el script configure con los argumentos del path donde se encuentra readline.</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;"># ./configure --with-includes=/sw/include/ --with-libraries=/sw/lib
&nbsp;
# make
&nbsp;
# make install</pre></div></div>

<p>Ahora que PostgreSQL está instalado, sólo resta configurarlo. El primer paso será crear una cuenta de usuario llamado <em>postgres.</em> Esa cuenta la podemos crear utilizando System Preferences-&gt;Accounts. Una vez creado el usuario, debemos crear un directorio donde PostgreSQL pueda escribir datos:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;"># mkdir /usr/local/pgsql/data
&nbsp;
# chown postgres /usr/local/pgsql/data</pre></div></div>

<p>Ahora en otra consola, usando el usuario <em>postgres</em> configuramos PostgreSQL:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">$ su -l postgres
&nbsp;
$ /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data</pre></div></div>

<p>Listo, ya podemos iniciar el servidor. Pero antes, algo muy útil será configurar el PATH de ejecución, agregando el directorio que contiene los binarios de PostgreSQL (como psql):</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">$ export PATH=$PATH:/usr/local/pgsql/bin</pre></div></div>

<p>Para no tener que escribir lo anterior cada vez que hagamos login, lo mejor será ponerlo en nuestro <em>~/.profile </em>(el de nuestro usuario regular, no postgres)<em>.</em></p>
<p>Iniciemos el servidor, usando el usuario postgres:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">$ /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start</pre></div></div>

<h3>Instalando PHP 5 y los drivers para PostgreSQL</h3>
<p>Necesitamos recompilar <a title="PHP" href="http://php.net/" target="_blank">PHP</a> con la opción adecuada para usar PostgreSQL. Como es habitual, descargamos el código fuente desde el sitio oficial <a title="PHP" href="http://php.net/" target="_blank">php.net</a>. Al momento de escribir este post, la última versión estable es la 5.3.1. Una vez descargada en <em>/usr/local/src</em>, procedemos a configurar y compilar:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;"># tar xvfz php-5.3.1.tar.gz
&nbsp;
# cd php-5.3.1/
&nbsp;
# ./configure --with-pgsql --with-apxs2
&nbsp;
# make
&nbsp;
# make install</pre></div></div>

<p>En el paso de compilación (make), en mi sistema arrojó un error relacionado a la biblioteca ICONV. Buscando en la Web encontré que se trababa de un bug (o al menos así <a title="PHP Bugs" href="http://bugs.php.net/bug.php?id=48195" target="_blank">está reportado</a> en el bugtracker de PHP). El workaround que funcionó para mi fue hackear iconv en las fuentes de PHP (ext/iconv/iconv.c); eliminar las líneas 185-187.</p>
<p>Finalmente, copiar php.ini al directorio adecuado</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;"># cp php.ini-development /usr/local/lib/php.ini</pre></div></div>

<h3>Instalando PDO para PostgreSQL</h3>
<p>Otra cosa que necesitamos quienes usamos frameworks como <a title="PRADO PHP Framework" href="http://pradosoft.com/" target="_blank">PRADO</a> o <a title="Symfony Project" href="http://www.symfony-project.org/" target="_blank">Symfony</a>, es instalar el driver PDO. El proceso es simple:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">$ pecl download pdo_pgsql
&nbsp;
$ tar xzf PDO_PGSQL-1.0.2.tgz</pre></div></div>

<p>Ahora necesitamos compilar e instalar la extensión:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">$ cd PDO_PGSQL-1.0.2
&nbsp;
$ phpize
&nbsp;
$ ./configure --with-pdo-pgsql=/usr/local/pgsql/
&nbsp;
$ make &amp;amp;&amp;amp; sudo make install</pre></div></div>

<p>Sólo resta editar la configuracion en php.ini:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">extension_dir = &quot;/usr/lib/php/extensions/no-debug-non-zts-20090626/&quot;
&nbsp;
extension = pdo_pgsql.so</pre></div></div>

<p>Reiniciamos apache (apachectl restart) y listo, ya tenemos nuestro sistema preparado para desarrollar aplicaciones y sistemas con PHP &amp; PostgreSQL.</p>
]]></content:encoded>
			<wfw:commentRss>http://faltanideas.com/?feed=rss2&amp;p=272</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Branch &amp; Bound, Graphical Models and Structured Grids patterns</title>
		<link>http://faltanideas.com/?p=263</link>
		<comments>http://faltanideas.com/?p=263#comments</comments>
		<pubDate>Thu, 12 Nov 2009 21:02:34 +0000</pubDate>
		<dc:creator>gacevedo</dc:creator>
				<category><![CDATA[CS 527]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://faltanideas.com/?p=263</guid>
		<description><![CDATA[Branch &#38; Bound This pattern is used for problems where you have a very large space and you need to search to make a decision or find an optimal solution. Of course the space is too large for enumerating every point. In order to find the solution to the problem, this pattern has four operations:  [...]]]></description>
			<content:encoded><![CDATA[<h4>Branch &amp; Bound</h4>
<p><img class="alignleft" style="margin: 2px;" title="Branching" src="http://nwirish.com/uploads/Branching_Out__167.jpg" alt="" width="81" height="80" />This pattern is used for problems where you have a very large space and you need to search to make a decision or find an optimal solution. Of course the space is too large for enumerating every point.</p>
<p>In order to find the solution to the problem, this pattern has four operations:  Branching, Evaluation, Bounding and Pruning.<br />
This kind of problems are good for parallelism, even thou synchronization is complicated. You will want to reduce communication and increase computation.</p>
<h4>Graphical Models</h4>
<h4><img class="alignleft" style="margin: 2px;" title="Image Manipulation" src="http://photoshoptutorials.ws/images/stories/250/how-to-create-an-abstract-photo-manipulation.jpg" alt="" width="84" height="84" /></h4>
<p>This pattern gave me a bad impression, because I thought I was going to read about graphics rather than statistics and probabilities. Also as some classmates mentioned, it lacked of a good and clear example.</p>
<h4>Structured Grids</h4>
<p><img class="alignleft" style="margin: 2px;" title="Grid" src="http://www.wyrmcorp.com/galleries/illusions/Hermann%20Grid.png" alt="" width="83" height="83" />This pattern was better written I think, at least it had several examples (thou I missed source code!). The main idea is to decompose (using geometric decomposition) the problem into smaller arrays and perform operations over the arrays in parallel.</p>
<p>The double buffering and adaptive mesh refinement idea was very interesting to me and seems to be very useful for image processing.</p>
]]></content:encoded>
			<wfw:commentRss>http://faltanideas.com/?feed=rss2&amp;p=263</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Questions on Task Parallelism, Recursive Splitting and Discrete Event patterns</title>
		<link>http://faltanideas.com/?p=255</link>
		<comments>http://faltanideas.com/?p=255#comments</comments>
		<pubDate>Mon, 02 Nov 2009 04:21:27 +0000</pubDate>
		<dc:creator>gacevedo</dc:creator>
				<category><![CDATA[CS 527]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://faltanideas.com/?p=255</guid>
		<description><![CDATA[This Tuesday I&#8217;ll be leading the Advanced Topics of Software Engineering class at the University of Illinois at Urbana-Champaign. People will blog about the following questions, which will also be discussed in class. Task Parallelism When you first saw this pattern title, did you feel like you knew the subject beforehand? After reading the pattern, [...]]]></description>
			<content:encoded><![CDATA[<p>This Tuesday I&#8217;ll be leading the Advanced Topics of Software Engineering class at the University of Illinois at Urbana-Champaign. People will <a title="CS527 Planet" href="http://cs527planet.cs.illinois.edu/" target="_blank">blog</a> about the following questions, which will also be discussed in class.</p>
<p><a href="http://parlab.eecs.berkeley.edu/wiki/patterns/task_parallelism" target="_blank">Task Parallelism</a></p>
<ol>
<li>When you first saw this pattern title, did you feel like you knew the subject beforehand? After reading the pattern, did you confirm your impression or did it surprise you? how?</li>
<li>In what category falls this pattern?</li>
<li>What platform do you have more experience programming parallel applications on? And what Task Management Mechanism? (Jobs over Networks, OS Processes, SW Task Queue, HW Task Queue)</li>
<li>Do you think that the lack of new hardware is preventing us of reaching better run times?</li>
<li>Do you think that this patterns requires you to learn more about hardware platforms in order to make a correct implementation?</li>
<li>Do you agree with the mapping the author made for the Monte Carlo example? Can you think of something else?</li>
</ol>
<p><a href="http://parlab.eecs.berkeley.edu/wiki/patterns/recursive_splitting" target="_blank">Recursive Splitting</a></p>
<ol>
<li>How to control task granularity in this pattern?</li>
<li>In which cases do you prefer to have a good load balancing rather than efficient tasks? Can we find the equilibrium?</li>
<li>Can you think of any other popular algorithm (besides Selection Sort) which this pattern can not be applied to?</li>
<li>The authors mention the idea of composing the Data Parallelism pattern inside of the Recursive Splitting pattern. Can you think of other patterns composition?</li>
<li>The authors mention that the ideas behind the Fork/Join and Task-queue strategy patterns are essential to any developer who wants an efficient implementation of the Recursive Splitting pattern. Why?</li>
</ol>
<p><a href="http://parlab.eecs.berkeley.edu/wiki/_media/patterns/discrete_event-pat-ver1.pdf" target="_blank">Discrete Event</a></p>
<ol>
<li>In the context of asynchronous communication of events, the authors mention two environments: message-passing and shared-memory. Which environment are you more familiarized with? Which one you like most?</li>
<li>Can you give examples of tasks which care about the order in which events arrive? Which approach (optimistic or pessimistic) would you use to deal with the ordering constraint in each one of those examples and why?</li>
<li>Do you agree with the authors on that, often, the best approach to deal with deadlocks is to use timeouts instead of accurate deadlock detection?</li>
<li>The authors encourage us not to confuse this pattern with the Event-based, Implicit Invocation pattern. Do you see any more differences beside the mentioned by the Discrete Event pattern authors?</li>
</ol>
<p>Thank you very much.</p>
]]></content:encoded>
			<wfw:commentRss>http://faltanideas.com/?feed=rss2&amp;p=255</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>About Computational Patterns</title>
		<link>http://faltanideas.com/?p=252</link>
		<comments>http://faltanideas.com/?p=252#comments</comments>
		<pubDate>Thu, 22 Oct 2009 22:00:41 +0000</pubDate>
		<dc:creator>gacevedo</dc:creator>
				<category><![CDATA[CS 527]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://faltanideas.com/?p=252</guid>
		<description><![CDATA[Definitely I understand most of structural patterns, but when it comes to computational patters it becomes fuzzy. Maybe because I don&#8217;t like much that field (although I recognize its value and importance) or maybe because I have no solid base on that field. If I must deal with Linear Algebra when solving a problem (linear [...]]]></description>
			<content:encoded><![CDATA[<p>Definitely I understand most of structural patterns, but when it comes to computational patters it becomes fuzzy. Maybe because I don&#8217;t like much that field (although I recognize its value and importance) or maybe because I have no solid base on that field.</p>
<p>If I must deal with Linear Algebra when solving a problem (linear operations on vectors or matrices), I will totally use a linear algebra library rather than trying to write functions and algorithms myself. That because is pointless to reinvent the wheel when I can save a lot of time using the standard mathematical operations and routines already packed in libraries where people have put a lot effort on.</p>
<p>Computation can help a lot when solving a problem. Graphs are a very good approach if the problem fits with a certain algorithm or known data structure. Experiments as in the Monte Carlo pattern is a technique that might be implemented more easily today using parallelism, since it requires the generation of thousands of experiments, it execution and to aggregate the results into relevant statistical solutions.</p>
<p>Computational patterns and structural patterns are clearly different to me. In structural patterns you are dealing with entities and its relationships and how to come up with good and efficient designs, while in computation patterns you are pushed to come up with mathematical models.</p>
]]></content:encoded>
			<wfw:commentRss>http://faltanideas.com/?feed=rss2&amp;p=252</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Armstrong Thesis Ch. 4: Programming Techniques</title>
		<link>http://faltanideas.com/?p=249</link>
		<comments>http://faltanideas.com/?p=249#comments</comments>
		<pubDate>Thu, 22 Oct 2009 21:26:40 +0000</pubDate>
		<dc:creator>gacevedo</dc:creator>
				<category><![CDATA[CS 527]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://faltanideas.com/?p=249</guid>
		<description><![CDATA[I agree with Armstrong that it is impossible to write concurrent code in a side effect free manner. You can be sure that the code you are writing is free of dead-locks, starvation and similar problems. Even your QA team can say so after testing the program 9 times. But in the 10th run, a [...]]]></description>
			<content:encoded><![CDATA[<p>I agree with Armstrong that it is impossible to write concurrent code in a side effect free manner. You can be sure that the code you are writing is free of dead-locks, starvation and similar problems. Even your QA team can say so after testing the program 9 times. But in the 10th run, a problem you didn&#8217;t expect might arise.</p>
<p>Thinking of the above paragraph, to abstract concurrency sounds like a very good idea. Factoring out concurrency code make it easy to create and maintain a solid base. The Armstrong idea is to have a generic component which deals with all the concurrency code and different plug-ins written in pure sequential code. That way, expert programmers can code concurrency, and beginners can code the sequential parts.</p>
<p>Software fault-tolerance is possible to achieve using basic techniques like crash catching and timeouts. The thesis also talks about a more advanced techniques using dedicated processes called supervisors, which only task is to handle error. That create two categories of processes: workers and supervisors. That way, workers have not to worry about handling errors.</p>
<p>I think that both, error handling and concurrency abstraction, is possible to achieve using other programming languages (not Erlang) as well. Java could be a good example. I have no experience with those patterns thou, but seems doable.</p>
<p>The Erlang view of the world, <em>everything is a process</em> and that processes can only interact by exchanging messages, helps a lot when creating an HTTP server; spawn a new process for each connection, accept a request from the client and respond appropriately. Lighttpd is a good example: high speed io-infrastructure, scalability and effective management of CPU load by using concurrency.</p>
<p>At the end of the chapter Armstrong talks about Intentional Programming, a style of programming where the reader of a program can easily see what the programmer intended by their code. This style is very useful when maintainability is about.</p>
]]></content:encoded>
			<wfw:commentRss>http://faltanideas.com/?feed=rss2&amp;p=249</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Event-based and Map_reduce patterns</title>
		<link>http://faltanideas.com/?p=246</link>
		<comments>http://faltanideas.com/?p=246#comments</comments>
		<pubDate>Tue, 20 Oct 2009 23:20:20 +0000</pubDate>
		<dc:creator>gacevedo</dc:creator>
				<category><![CDATA[CS 527]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://faltanideas.com/?p=246</guid>
		<description><![CDATA[The Event-based pattern presents the idea of components (announcers, listeners) that share events (signals, notifications) through a medium which registers components to receive events and dispatch those events to the registered parties. The medium should also include a communication fabric and a manager that fits the communication fabric and can do load balancing. The most [...]]]></description>
			<content:encoded><![CDATA[<p>The Event-based pattern presents the idea of components (announcers, listeners) that share events (signals, notifications) through a medium which registers components to receive events and dispatch those events to the registered parties. The medium should also include a communication fabric and a manager that fits the communication fabric and can do load balancing. The most known uses of this patterns are Windows or X11 GUIs</p>
<p>The Map_reduce pattern aims to hide the details of the parallelism from the programmer when dealing with a large number of computation and summarizing the results. The map reduce pattern solve the problem by applying independently a map function to every object (PLPP pattern, task parallelism) and then using a collective communication pattern to collect and summarize the results (PLPP, reduction). The most famous uses of this pattern are the applications of the map-reduce framework used at Google.</p>
]]></content:encoded>
			<wfw:commentRss>http://faltanideas.com/?feed=rss2&amp;p=246</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Armstrong Thesis Chap. 2: Fault Tolerant Architectures</title>
		<link>http://faltanideas.com/?p=243</link>
		<comments>http://faltanideas.com/?p=243#comments</comments>
		<pubDate>Tue, 20 Oct 2009 22:52:08 +0000</pubDate>
		<dc:creator>gacevedo</dc:creator>
				<category><![CDATA[CS 527]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://faltanideas.com/?p=243</guid>
		<description><![CDATA[According to Armstrong&#8217;s thoughts, the architecture for building fault-tolerant systems could be described as follow: Completely modular. Each module must be independent of the other modules and should run in a different process. Of course processes must run in parallel. Provide fault-isolation. Failure in one process should not adversely affect other processes (unless it has [...]]]></description>
			<content:encoded><![CDATA[<p>According to Armstrong&#8217;s thoughts, the architecture for building fault-tolerant systems could be described as follow:</p>
<ul>
<li>Completely modular. Each module must be independent of the other modules and should run in a different process. Of course processes must run in parallel.</li>
<li>Provide fault-isolation. Failure in one process should not adversely affect other processes (unless it has been intentionally designed).</li>
<li>Communication based on messages: Each process should have a unique identifier, and can communicate each other only using messages. There should be nothing shared among them. Also a communication protocol should exists and the messages passing should be asynchronous.</li>
</ul>
<p>Armstrong also mentions the fail-stop processor. Such processor should halt on failure (if a failure occurs it is pointless to continue), communicate the cause of the failure to other processors and have both stable and volatile storage.</p>
]]></content:encoded>
			<wfw:commentRss>http://faltanideas.com/?feed=rss2&amp;p=243</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
