<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Comments on: Doing it Live</title>
	<atom:link href="http://blog.beerriot.com/2009/02/03/doing-it-live/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.beerriot.com/2009/02/03/doing-it-live/</link>
	<description>The making of BeerRiot and other thoughts.</description>
	<lastBuildDate>Fri, 02 Dec 2011 02:06:46 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
	<item>
		<title>By: Geoff</title>
		<link>http://blog.beerriot.com/2009/02/03/doing-it-live/#comment-1424</link>
		<dc:creator><![CDATA[Geoff]]></dc:creator>
		<pubDate>Wed, 04 Feb 2009 22:27:10 +0000</pubDate>
		<guid isPermaLink="false">http://blog.beerriot.com/?p=67#comment-1424</guid>
		<description><![CDATA[You can also use the gen_(server&#124;fsm) code change stuff via the &#039;sys&#039; module. sys:suspend/1 the gen_servers running the module to be upgraded, load the new code, sys:change_code/4 and then sys:resume/1 them all. It&#039;s handy if you don&#039;t want to go to the hassle of a full release upgrade.]]></description>
		<content:encoded><![CDATA[<p>You can also use the gen_(server|fsm) code change stuff via the &#8216;sys&#8217; module. sys:suspend/1 the gen_servers running the module to be upgraded, load the new code, sys:change_code/4 and then sys:resume/1 them all. It&#8217;s handy if you don&#8217;t want to go to the hassle of a full release upgrade.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Bryan</title>
		<link>http://blog.beerriot.com/2009/02/03/doing-it-live/#comment-1423</link>
		<dc:creator><![CDATA[Bryan]]></dc:creator>
		<pubDate>Wed, 04 Feb 2009 20:47:38 +0000</pubDate>
		<guid isPermaLink="false">http://blog.beerriot.com/?p=67#comment-1423</guid>
		<description><![CDATA[Thanks, Nick - glad you liked it.  I agree with implementing reload/0.  Among other conveniences, it shortens the downtime.  No typing delay, no typo penalty, no chance of botching it bad enough that you have to spend time fixing something else!]]></description>
		<content:encoded><![CDATA[<p>Thanks, Nick &#8211; glad you liked it.  I agree with implementing reload/0.  Among other conveniences, it shortens the downtime.  No typing delay, no typo penalty, no chance of botching it bad enough that you have to spend time fixing something else!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Nick Gerakines</title>
		<link>http://blog.beerriot.com/2009/02/03/doing-it-live/#comment-1422</link>
		<dc:creator><![CDATA[Nick Gerakines]]></dc:creator>
		<pubDate>Wed, 04 Feb 2009 19:02:18 +0000</pubDate>
		<guid isPermaLink="false">http://blog.beerriot.com/?p=67#comment-1422</guid>
		<description><![CDATA[That&#039;s great. Very cool write up. I&#039;m quite the fan of rolling your own reload/0 function that iterates through your app&#039;s modules with a quick code:purge/1 and code:load_file/1.]]></description>
		<content:encoded><![CDATA[<p>That&#8217;s great. Very cool write up. I&#8217;m quite the fan of rolling your own reload/0 function that iterates through your app&#8217;s modules with a quick code:purge/1 and code:load_file/1.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Bryan</title>
		<link>http://blog.beerriot.com/2009/02/03/doing-it-live/#comment-1421</link>
		<dc:creator><![CDATA[Bryan]]></dc:creator>
		<pubDate>Wed, 04 Feb 2009 18:22:14 +0000</pubDate>
		<guid isPermaLink="false">http://blog.beerriot.com/?p=67#comment-1421</guid>
		<description><![CDATA[A very good point, Harish!  My usual way of dealing with this?  Let the process fail.  If the computation was necessary, it has been registered with a supervisor, and will be restarted, ready to grab the fresh data.

Also, I generally try to write long-running processes such that they don&#039;t hang onto data representations from other modules any longer than necessary.  For example, a process may keep a list of ids and names from a #person, but won&#039;t hold onto the whole record.  So, that process won&#039;t be affected by a change in the person record shape.  This doesn&#039;t account for those short periods of time when a process *is* holding onto an external data format, but in those cases, I just revert back to &quot;let it fail.&quot;

I haven&#039;t done an &quot;appup&quot; or &quot;rel&quot; yet, but you&#039;re right: even if gen_server:code_change does get hairy, it&#039;s still better than not being able to do it at all.

Thanks for the note.]]></description>
		<content:encoded><![CDATA[<p>A very good point, Harish!  My usual way of dealing with this?  Let the process fail.  If the computation was necessary, it has been registered with a supervisor, and will be restarted, ready to grab the fresh data.</p>
<p>Also, I generally try to write long-running processes such that they don&#8217;t hang onto data representations from other modules any longer than necessary.  For example, a process may keep a list of ids and names from a #person, but won&#8217;t hold onto the whole record.  So, that process won&#8217;t be affected by a change in the person record shape.  This doesn&#8217;t account for those short periods of time when a process *is* holding onto an external data format, but in those cases, I just revert back to &#8220;let it fail.&#8221;</p>
<p>I haven&#8217;t done an &#8220;appup&#8221; or &#8220;rel&#8221; yet, but you&#8217;re right: even if gen_server:code_change does get hairy, it&#8217;s still better than not being able to do it at all.</p>
<p>Thanks for the note.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Harish Mallipeddi</title>
		<link>http://blog.beerriot.com/2009/02/03/doing-it-live/#comment-1420</link>
		<dc:creator><![CDATA[Harish Mallipeddi]]></dc:creator>
		<pubDate>Wed, 04 Feb 2009 16:10:40 +0000</pubDate>
		<guid isPermaLink="false">http://blog.beerriot.com/?p=67#comment-1420</guid>
		<description><![CDATA[This is assuming you don&#039;t have any #person records stored anywhere in memory - for instance in the State of some gen_server? If yes then you&#039;ve to write code to migrate via gen_server:code_change, add &quot;appup&quot; file, add &quot;rel&quot; files, etc and very soon it becomes complicated (I guess it&#039;s better than those other languages which don&#039;t support hot code loading out of the box). But still very cool example of hot code loading in production!]]></description>
		<content:encoded><![CDATA[<p>This is assuming you don&#8217;t have any #person records stored anywhere in memory &#8211; for instance in the State of some gen_server? If yes then you&#8217;ve to write code to migrate via gen_server:code_change, add &#8220;appup&#8221; file, add &#8220;rel&#8221; files, etc and very soon it becomes complicated (I guess it&#8217;s better than those other languages which don&#8217;t support hot code loading out of the box). But still very cool example of hot code loading in production!</p>
]]></content:encoded>
	</item>
</channel>
</rss>

