<?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/"
	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>The Global Engineer&#039;s Notebook</title>
	<atom:link href="http://globalengineer.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://globalengineer.wordpress.com</link>
	<description>Notes on software engineering, digital design, and FPGAs,</description>
	<lastBuildDate>Fri, 06 Jan 2012 01:04:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='globalengineer.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>The Global Engineer&#039;s Notebook</title>
		<link>http://globalengineer.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://globalengineer.wordpress.com/osd.xml" title="The Global Engineer&#039;s Notebook" />
	<atom:link rel='hub' href='http://globalengineer.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Disable console bell in FreeBSD</title>
		<link>http://globalengineer.wordpress.com/2012/01/06/disable-console-bell-in-freebsd/</link>
		<comments>http://globalengineer.wordpress.com/2012/01/06/disable-console-bell-in-freebsd/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 01:04:27 +0000</pubDate>
		<dc:creator>globalengineer</dc:creator>
				<category><![CDATA[FreeBSD]]></category>

		<guid isPermaLink="false">http://globalengineer.wordpress.com/?p=595</guid>
		<description><![CDATA[I use Bash and frequently utilize tab completion. On my FreeBSD, when there are multiple options during tab completion, the annoying console bell rings. For C programmers, it is the &#8216;\a&#8217; that you included in your printf() calls when first learning C to drive others crazy. To disable it, as root user you can run: [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=globalengineer.wordpress.com&amp;blog=2361522&amp;post=595&amp;subd=globalengineer&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I use Bash and frequently utilize tab completion. On my FreeBSD, when there are multiple options during tab completion, the annoying console bell rings. For C programmers, it is the &#8216;\a&#8217; that you included in your printf() calls when first learning C to drive others crazy.</p>
<p>To disable it, as root user you can run:</p>
<blockquote><p># sysctl hw.syscons.bell=0<br />
hw.syscons.bel;: 1-&gt; 0</p></blockquote>
<p>Add that command to <strong>/etc/sysctl.conf</strong> to permanently disable it.  Good riddance!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/globalengineer.wordpress.com/595/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/globalengineer.wordpress.com/595/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/globalengineer.wordpress.com/595/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/globalengineer.wordpress.com/595/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/globalengineer.wordpress.com/595/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/globalengineer.wordpress.com/595/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/globalengineer.wordpress.com/595/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/globalengineer.wordpress.com/595/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/globalengineer.wordpress.com/595/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/globalengineer.wordpress.com/595/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/globalengineer.wordpress.com/595/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/globalengineer.wordpress.com/595/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/globalengineer.wordpress.com/595/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/globalengineer.wordpress.com/595/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=globalengineer.wordpress.com&amp;blog=2361522&amp;post=595&amp;subd=globalengineer&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://globalengineer.wordpress.com/2012/01/06/disable-console-bell-in-freebsd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6370396c5129eb47b3bccec6515adaaa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">globalengineer</media:title>
		</media:content>
	</item>
		<item>
		<title>Erlang Programming Exercise 12-3: The Database Server as an Application</title>
		<link>http://globalengineer.wordpress.com/2011/11/04/erlang-programming-exercise-12-3-the-database-server-as-an-application/</link>
		<comments>http://globalengineer.wordpress.com/2011/11/04/erlang-programming-exercise-12-3-the-database-server-as-an-application/#comments</comments>
		<pubDate>Thu, 03 Nov 2011 20:42:56 +0000</pubDate>
		<dc:creator>globalengineer</dc:creator>
				<category><![CDATA[Erlang]]></category>

		<guid isPermaLink="false">http://globalengineer.wordpress.com/?p=589</guid>
		<description><![CDATA[First create an OTP Application directory structure. The work flow resembles something like the following if you&#8217;re on UNIX. cd ~/work/erlang mkdir ~/work/erlang/chapter12/{src,ebin,include,priv} cp db_server_otp.erl db_server_sup.erl ~/work/erlang/chapter12/src cd ~/work/erlang/chapter12/src erlc *.erl mv *.beam ../ebin With the source code and BEAM files ready, now create an app file, db_server_app.erl: -module(db_server_app). -export([start/2,stop/1]). -behavior(application). start(_Type, _StartArgs) -&#62; db_server_sup:start(). [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=globalengineer.wordpress.com&amp;blog=2361522&amp;post=589&amp;subd=globalengineer&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>First create an OTP Application directory structure.  The work flow resembles something like the following if you&#8217;re on UNIX.</p>
<pre>
cd ~/work/erlang
mkdir ~/work/erlang/chapter12/{src,ebin,include,priv}
cp db_server_otp.erl db_server_sup.erl ~/work/erlang/chapter12/src
cd ~/work/erlang/chapter12/src
erlc *.erl
mv *.beam ../ebin
</pre>
<p>With the source code and BEAM files ready, now create an app file, db_server_app.erl:</p>
<pre>
-module(db_server_app).
-export([start/2,stop/1]).
-behavior(application).

start(_Type, _StartArgs) -&gt;
    db_server_sup:start().

stop(_State) -&gt;
    ok.
</pre>
<p>Compile this code and then move the BEAM file to the ebin folder.  Create an application resource file describing the application, db_server.app in the ebin folder:</p>
<pre>
{application,
 db_server,
 [{description, "Erlang Prgramming Ch. 12 DB Server"},
  {vsn, "1.0"},
  {modules, [db_server_otp, db_server_sup, db_server_app]},
  {registered, [db_server_sup]},
  {applications, [kernel, stdlib]},
  {env, []},
  {mod, {db_server_app, []}}
 ]
}.
</pre>
<p>The final directory structure should look like this:</p>
<pre>
~/work/erlang/chapter12$ ls -1
ebin
include
priv
src
~/work/erlang/chapter12$ ls -1 ebin
db_server.app
db_server_app.beam
db_server_otp.beam
db_server_sup.beam
~/work/erlang/chapter12$ ls -1 src
db_server_app.erl
db_server_otp.erl
db_server_sup.erl
</pre>
<p>With the BEAM files and app files in the ebin directory, the application can now be tested with the Erlang shell.</p>
<pre>
Erlang R13B03 (erts-5.7.4)  [64-bit] [smp:8:2] [rq:8] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.7.4  (abort with ^G)
1&gt; code:add_path("/home/bryan/work/erlang/chapter12/ebin").
true
2&gt; application:start(db_server).
ok
3&gt; db_server_otp:write("Ted", "7").
ok
4&gt; db_server_otp:read("Ted").
{ok,"7"}
5&gt; application:stop(db_server).
ok

=INFO REPORT==== 3-Nov-2011::16:32:08 ===
    application: db_server
    exited: stopped
    type: temporary
6&gt; whereis(db_server_sup).
undefined
</pre>
<p>Success! (Note: this was much easier than the first time I tried to get a Tomcat servlet working&#8230;)</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/globalengineer.wordpress.com/589/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/globalengineer.wordpress.com/589/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/globalengineer.wordpress.com/589/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/globalengineer.wordpress.com/589/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/globalengineer.wordpress.com/589/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/globalengineer.wordpress.com/589/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/globalengineer.wordpress.com/589/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/globalengineer.wordpress.com/589/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/globalengineer.wordpress.com/589/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/globalengineer.wordpress.com/589/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/globalengineer.wordpress.com/589/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/globalengineer.wordpress.com/589/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/globalengineer.wordpress.com/589/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/globalengineer.wordpress.com/589/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=globalengineer.wordpress.com&amp;blog=2361522&amp;post=589&amp;subd=globalengineer&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://globalengineer.wordpress.com/2011/11/04/erlang-programming-exercise-12-3-the-database-server-as-an-application/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6370396c5129eb47b3bccec6515adaaa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">globalengineer</media:title>
		</media:content>
	</item>
		<item>
		<title>Erlang Proramming Exercise 12-2: Supervising the Database Server</title>
		<link>http://globalengineer.wordpress.com/2011/11/03/erlang-proramming-exercise-12-2-supervising-the-database-server/</link>
		<comments>http://globalengineer.wordpress.com/2011/11/03/erlang-proramming-exercise-12-2-supervising-the-database-server/#comments</comments>
		<pubDate>Thu, 03 Nov 2011 17:33:05 +0000</pubDate>
		<dc:creator>globalengineer</dc:creator>
				<category><![CDATA[Erlang]]></category>

		<guid isPermaLink="false">http://globalengineer.wordpress.com/?p=586</guid>
		<description><![CDATA[-module(db_server_sup). -export([start/0,init/1]). -behavior(supervisor). start() -&#62; supervisor:start_link({local, ?MODULE}, ?MODULE, []). init(_Arguments) -&#62; DbServerOtp = {db_server_otp, %% Id {db_server_otp, start, []}, %% child process permanent, %% restart 30000, %% shutdown (ms) worker, %% type [db_server_otp]}, %% required modules {ok, {{one_for_all, %% terminate all children and restart 5, %% max of n restarts in MaxSeconds 3600}, %% MaxSeconds [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=globalengineer.wordpress.com&amp;blog=2361522&amp;post=586&amp;subd=globalengineer&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<pre>

-module(db_server_sup).
-export([start/0,init/1]).
-behavior(supervisor).

start() -&gt;
    supervisor:start_link({local, ?MODULE}, ?MODULE, []).

init(_Arguments) -&gt;
    DbServerOtp = {db_server_otp,                %% Id
                   {db_server_otp, start, []},   %% child process
                   permanent,                    %% restart
                   30000,                        %% shutdown (ms)
                   worker,                       %% type
                   [db_server_otp]},             %% required modules
    {ok,
     {{one_for_all,           %% terminate all children and restart
       5,                     %% max of n restarts in MaxSeconds
       3600},                 %% MaxSeconds (s)
      [DbServerOtp]}}.        %% child process list
</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/globalengineer.wordpress.com/586/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/globalengineer.wordpress.com/586/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/globalengineer.wordpress.com/586/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/globalengineer.wordpress.com/586/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/globalengineer.wordpress.com/586/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/globalengineer.wordpress.com/586/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/globalengineer.wordpress.com/586/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/globalengineer.wordpress.com/586/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/globalengineer.wordpress.com/586/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/globalengineer.wordpress.com/586/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/globalengineer.wordpress.com/586/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/globalengineer.wordpress.com/586/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/globalengineer.wordpress.com/586/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/globalengineer.wordpress.com/586/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=globalengineer.wordpress.com&amp;blog=2361522&amp;post=586&amp;subd=globalengineer&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://globalengineer.wordpress.com/2011/11/03/erlang-proramming-exercise-12-2-supervising-the-database-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6370396c5129eb47b3bccec6515adaaa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">globalengineer</media:title>
		</media:content>
	</item>
		<item>
		<title>EP Exercise 12-1: Database Server Revisited</title>
		<link>http://globalengineer.wordpress.com/2011/11/02/ep-exercise-12-1-database-server-revisited/</link>
		<comments>http://globalengineer.wordpress.com/2011/11/02/ep-exercise-12-1-database-server-revisited/#comments</comments>
		<pubDate>Wed, 02 Nov 2011 18:05:01 +0000</pubDate>
		<dc:creator>globalengineer</dc:creator>
				<category><![CDATA[Erlang]]></category>

		<guid isPermaLink="false">http://globalengineer.wordpress.com/?p=581</guid>
		<description><![CDATA[-module(db_server_otp). -export([start/0,stop/0]). -export([write/2,read/1,delete/1,match/1]). -export([init/1,terminate/2,handle_cast/2,handle_call/3]). -behavior(gen_server). %% %% Operations &#38; Maintenance API %% start() -&#62; gen_server:start({local, ?MODULE}, ?MODULE, [], []). stop() -&#62; gen_server:cast(?MODULE, stop). %% %% DB Server API %% write(Key, Data) -&#62; gen_server:call(?MODULE, {write, Key, Data}). read(Key) -&#62; gen_server:call(?MODULE, {read, Key}). delete(Key) -&#62; gen_server:call(?MODULE, {delete, Key}). match(Element) -&#62; gen_server:call(?MODULE, {match, Element}). %% %% OTP gen_server [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=globalengineer.wordpress.com&amp;blog=2361522&amp;post=581&amp;subd=globalengineer&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<pre>
-module(db_server_otp).
-export([start/0,stop/0]).
-export([write/2,read/1,delete/1,match/1]).
-export([init/1,terminate/2,handle_cast/2,handle_call/3]).
-behavior(gen_server).

%%
%% Operations &amp; Maintenance API
%%

start() -&gt;
    gen_server:start({local, ?MODULE}, ?MODULE, [], []).

stop() -&gt;
    gen_server:cast(?MODULE, stop).

%%
%% DB Server API
%%

write(Key, Data) -&gt;
    gen_server:call(?MODULE, {write, Key, Data}).

read(Key) -&gt;
    gen_server:call(?MODULE, {read, Key}).

delete(Key) -&gt;
    gen_server:call(?MODULE, {delete, Key}).

match(Element) -&gt;
    gen_server:call(?MODULE, {match, Element}).

%%
%% OTP gen_server Callback Functions
%%

init(_Arguments) -&gt;
    {ok, []}.

terminate(_Reason, _LoopData) -&gt;
    ok.

handle_cast(stop, LoopData) -&gt;
    {stop, normal, LoopData}.

handle_call({write, Key, Data}, _From, LoopData) -&gt;
    case lists:keymember(Key, 1, LoopData) of
        true -&gt;
            NewLoopData = lists:keyreplace(Key, 1, LoopData, {Key, Data}),
            Reply = ok;
        false -&gt;
            NewLoopData = LoopData ++ [{Key, Data}],
            Reply = ok
    end,
    {reply, Reply, NewLoopData};
handle_call({read, Key}, _From, LoopData) -&gt;
    case lists:keymember(Key, 1, LoopData) of
        true -&gt;
            {_, Value} = lists:keyfind(Key, 1, LoopData),
            Reply = {ok, Value};
        false -&gt;
            Reply = {error, instance}
    end,
    {reply, Reply, LoopData};

handle_call({delete, Key}, _From, LoopData) -&gt;
    case lists:keymember(Key, 1, LoopData) of
        true -&gt;
            NewLoopData = lists:keydelete(Key, 1, LoopData),
            Reply = ok;
        false -&gt;
            NewLoopData = LoopData,
            Reply = ok
    end,
    {reply, Reply, NewLoopData};

handle_call({match, Element}, _From, LoopData) -&gt;
    Matches = lists:filter(
                fun({_ ,Value}) -&gt;
                  if
                     Value =:= Element -&gt; true;
                     true -&gt; false
                  end end,
                LoopData),
   Reply = get_db_keys(Matches, []),
   {reply, Reply, LoopData}.

get_db_keys([], KeyList) -&gt; KeyList;
get_db_keys(ListOfTuples, KeyList) -&gt;
    [H|T] = ListOfTuples,
    {Key, _} = H,
    get_db_keys(T, KeyList ++ [Key]).
</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/globalengineer.wordpress.com/581/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/globalengineer.wordpress.com/581/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/globalengineer.wordpress.com/581/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/globalengineer.wordpress.com/581/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/globalengineer.wordpress.com/581/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/globalengineer.wordpress.com/581/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/globalengineer.wordpress.com/581/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/globalengineer.wordpress.com/581/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/globalengineer.wordpress.com/581/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/globalengineer.wordpress.com/581/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/globalengineer.wordpress.com/581/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/globalengineer.wordpress.com/581/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/globalengineer.wordpress.com/581/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/globalengineer.wordpress.com/581/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=globalengineer.wordpress.com&amp;blog=2361522&amp;post=581&amp;subd=globalengineer&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://globalengineer.wordpress.com/2011/11/02/ep-exercise-12-1-database-server-revisited/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6370396c5129eb47b3bccec6515adaaa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">globalengineer</media:title>
		</media:content>
	</item>
		<item>
		<title>EP Exercise 5-1: A Database Server</title>
		<link>http://globalengineer.wordpress.com/2011/11/02/ep-exercise-5-1-a-database-server/</link>
		<comments>http://globalengineer.wordpress.com/2011/11/02/ep-exercise-5-1-a-database-server/#comments</comments>
		<pubDate>Wed, 02 Nov 2011 14:27:10 +0000</pubDate>
		<dc:creator>globalengineer</dc:creator>
				<category><![CDATA[Erlang]]></category>

		<guid isPermaLink="false">http://globalengineer.wordpress.com/?p=578</guid>
		<description><![CDATA[-module(db_server). -export([start/0,stop/0,upgrade/1,code_upgrade/0]). -export([write/2,read/1,delete/1]). -export([init/0,loop/1]). -vsn(1.0). start() -&#62; register(deb_server, spawn(db_server, init, [])). stop() -&#62; db_server ! stop. upgrade(Data) -&#62; db_server ! {upgrade, Data}. write(Key, Data) -&#62; db_server ! {write, Key, Data}. read(Key) -&#62; db_server ! {read, self(), Key}, receive Reply -&#62; Reply end. delete(Key) -&#62; db_server ! {delete, Key}. code_upgrade(Data) -&#62; db_server ! {code_upgrade, Data}. init() [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=globalengineer.wordpress.com&amp;blog=2361522&amp;post=578&amp;subd=globalengineer&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<pre>

-module(db_server).
-export([start/0,stop/0,upgrade/1,code_upgrade/0]).
-export([write/2,read/1,delete/1]).
-export([init/0,loop/1]).
-vsn(1.0).

start() -&gt;
    register(deb_server, spawn(db_server, init, [])).

stop() -&gt;
    db_server ! stop.

upgrade(Data) -&gt;
    db_server ! {upgrade, Data}.

write(Key, Data) -&gt;
    db_server ! {write, Key, Data}.

read(Key) -&gt;
    db_server ! {read, self(), Key},
    receive Reply -&gt;
             Reply end.

delete(Key) -&gt;
    db_server ! {delete, Key}.

code_upgrade(Data) -&gt;
    db_server ! {code_upgrade, Data}.

init() -&gt;
    loop(db:new()).

loop(Db) -&gt;
    receive
        {write, Key, Data} -&gt;
            loop(db:write(Key, Data, Db));
        {read, Pid, Key} -&gt;
            Pid ! db:read(Key, Db),
            loop(Db);
        {delete, Key} -&gt;
            loop(db:delete(Key, Db));
        {upgrade, Data} -&gt;
            NewDb = db:convert(Data, Db),
            db_server:loop(NewDb);
        code_upgrade -&gt;
            loop(db:code_upgrade(Data));
        stop -&gt;
            db:destroy(Db)
    end.
</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/globalengineer.wordpress.com/578/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/globalengineer.wordpress.com/578/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/globalengineer.wordpress.com/578/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/globalengineer.wordpress.com/578/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/globalengineer.wordpress.com/578/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/globalengineer.wordpress.com/578/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/globalengineer.wordpress.com/578/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/globalengineer.wordpress.com/578/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/globalengineer.wordpress.com/578/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/globalengineer.wordpress.com/578/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/globalengineer.wordpress.com/578/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/globalengineer.wordpress.com/578/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/globalengineer.wordpress.com/578/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/globalengineer.wordpress.com/578/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=globalengineer.wordpress.com&amp;blog=2361522&amp;post=578&amp;subd=globalengineer&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://globalengineer.wordpress.com/2011/11/02/ep-exercise-5-1-a-database-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6370396c5129eb47b3bccec6515adaaa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">globalengineer</media:title>
		</media:content>
	</item>
		<item>
		<title>EP Exercise 4-2: The Process Ring</title>
		<link>http://globalengineer.wordpress.com/2011/11/02/ep-exercise-4-2-the-process-ring/</link>
		<comments>http://globalengineer.wordpress.com/2011/11/02/ep-exercise-4-2-the-process-ring/#comments</comments>
		<pubDate>Wed, 02 Nov 2011 14:23:58 +0000</pubDate>
		<dc:creator>globalengineer</dc:creator>
				<category><![CDATA[Erlang]]></category>

		<guid isPermaLink="false">http://globalengineer.wordpress.com/?p=574</guid>
		<description><![CDATA[My solution for Exercise 4-2 in the book Erlang Programming %% %% Erlang Programming Exercise 4-2 %% -module(ring). -export([start/3,create_node/3,stop/0]). create_node(M,N,Msg) -&#62; io:format("Creating node ~w (~w)~n", [N,self()]), if N-1 &#62; 0 -&#62; NextPid = spawn(ring,create_node,[M,N-1,Msg]); N-1 == 0 -&#62; NextPid = head end, print_m_times(NextPid,N,Msg,M), loop(NextPid). start(M, N, Msg) -&#62; io:format("Spawning ~w nodes!~n",[N]), Pid = spawn(ring,create_node,[M,N,Msg]), register(head, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=globalengineer.wordpress.com&amp;blog=2361522&amp;post=574&amp;subd=globalengineer&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>My solution for Exercise 4-2 in the book Erlang Programming</p>
<pre>%%
%% Erlang Programming Exercise 4-2
%%

-module(ring).
-export([start/3,create_node/3,stop/0]).

create_node(M,N,Msg) -&gt;
    io:format("Creating node ~w (~w)~n", [N,self()]),
    if
        N-1 &gt; 0  -&gt; NextPid = spawn(ring,create_node,[M,N-1,Msg]);
        N-1 == 0 -&gt; NextPid = head
    end,
    print_m_times(NextPid,N,Msg,M),
    loop(NextPid).

start(M, N, Msg) -&gt;
    io:format("Spawning ~w nodes!~n",[N]),
    Pid = spawn(ring,create_node,[M,N,Msg]),
    register(head, Pid),
    ok. 

stop() -&gt;
    head ! quit,
    ok. 

loop(NextPid) -&gt;
    receive
        {print, Pid, NodeNum, MsgContents} when Pid /= self() -&gt;
            io:format("(~w) msg from node ~w: ~s~n",[self(),NodeNum,MsgContents]),
            NextPid ! {print, Pid, NodeNum, MsgContents},
            loop(NextPid);
        quit -&gt;
            NextPid ! quit,
            io:format("Destroying node (~w)~n", [self()]),
            true
    end.

print_m_times(_,_,_,0) -&gt;
    true;
print_m_times(NextPid,FromNode,Msg,M_Times) -&gt;
    NextPid ! {print, self(), FromNode, Msg},
    print_m_times(NextPid,FromNode,Msg,M_Times-1).</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/globalengineer.wordpress.com/574/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/globalengineer.wordpress.com/574/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/globalengineer.wordpress.com/574/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/globalengineer.wordpress.com/574/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/globalengineer.wordpress.com/574/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/globalengineer.wordpress.com/574/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/globalengineer.wordpress.com/574/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/globalengineer.wordpress.com/574/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/globalengineer.wordpress.com/574/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/globalengineer.wordpress.com/574/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/globalengineer.wordpress.com/574/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/globalengineer.wordpress.com/574/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/globalengineer.wordpress.com/574/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/globalengineer.wordpress.com/574/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=globalengineer.wordpress.com&amp;blog=2361522&amp;post=574&amp;subd=globalengineer&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://globalengineer.wordpress.com/2011/11/02/ep-exercise-4-2-the-process-ring/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6370396c5129eb47b3bccec6515adaaa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">globalengineer</media:title>
		</media:content>
	</item>
		<item>
		<title>EP Exercise 4-1: An Echo Server</title>
		<link>http://globalengineer.wordpress.com/2011/11/02/ep-exercise-4-1-an-echo-server/</link>
		<comments>http://globalengineer.wordpress.com/2011/11/02/ep-exercise-4-1-an-echo-server/#comments</comments>
		<pubDate>Wed, 02 Nov 2011 14:21:10 +0000</pubDate>
		<dc:creator>globalengineer</dc:creator>
				<category><![CDATA[Erlang]]></category>

		<guid isPermaLink="false">http://globalengineer.wordpress.com/?p=572</guid>
		<description><![CDATA[My solution for Exercise 4-1 in the book Erlang Programming. %% %% Erlang Programming Exercise 4-1 %% -module(echo). -export([start/0,print/1,stop/0,loop/0]). start() -&#62; %% function specified in spawn/3 must be exported !! Pid = spawn(echo, loop, []), register(echo_server, Pid), ok. stop() -&#62; echo_server ! stop, ok. print(Term) -&#62; echo_server ! {print, Term}, ok. loop() -&#62; receive {print, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=globalengineer.wordpress.com&amp;blog=2361522&amp;post=572&amp;subd=globalengineer&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>My solution for Exercise 4-1 in the book Erlang Programming.</p>
<pre>
%%
%% Erlang Programming Exercise 4-1
%%

-module(echo).
-export([start/0,print/1,stop/0,loop/0]).

start() -&gt;
    %% function specified in spawn/3 must be exported !!
    Pid = spawn(echo, loop, []),
    register(echo_server, Pid),
    ok. 

stop() -&gt;
    echo_server ! stop,
    ok. 

print(Term) -&gt;
    echo_server ! {print, Term},
    ok. 

loop() -&gt;
    receive
        {print, Msg} -&gt; io:format("~s~n",[Msg]),
                        loop();
        stop -&gt; true
    end.</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/globalengineer.wordpress.com/572/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/globalengineer.wordpress.com/572/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/globalengineer.wordpress.com/572/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/globalengineer.wordpress.com/572/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/globalengineer.wordpress.com/572/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/globalengineer.wordpress.com/572/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/globalengineer.wordpress.com/572/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/globalengineer.wordpress.com/572/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/globalengineer.wordpress.com/572/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/globalengineer.wordpress.com/572/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/globalengineer.wordpress.com/572/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/globalengineer.wordpress.com/572/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/globalengineer.wordpress.com/572/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/globalengineer.wordpress.com/572/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=globalengineer.wordpress.com&amp;blog=2361522&amp;post=572&amp;subd=globalengineer&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://globalengineer.wordpress.com/2011/11/02/ep-exercise-4-1-an-echo-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6370396c5129eb47b3bccec6515adaaa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">globalengineer</media:title>
		</media:content>
	</item>
		<item>
		<title>WindowMaker as the X11 window manager</title>
		<link>http://globalengineer.wordpress.com/2011/10/20/windowmaker-as-the-x11-window-manager/</link>
		<comments>http://globalengineer.wordpress.com/2011/10/20/windowmaker-as-the-x11-window-manager/#comments</comments>
		<pubDate>Wed, 19 Oct 2011 20:14:11 +0000</pubDate>
		<dc:creator>globalengineer</dc:creator>
				<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[UNIX]]></category>

		<guid isPermaLink="false">http://globalengineer.wordpress.com/?p=556</guid>
		<description><![CDATA[My light-weight window manager of choice is WindowMaker.  It is simple, easy to modify, and stays out of the way.  The default window manager installed with X11 on FreeBSD, however, is twm.  I first experienced twm in the Virginia Tech Computer Science Dept. UNIX lab (all FreeBSD boxes), and tvm looks exactly the same today. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=globalengineer.wordpress.com&amp;blog=2361522&amp;post=556&amp;subd=globalengineer&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>My light-weight window manager of choice is WindowMaker.  It is simple, easy to modify, and stays out of the way.  The default window manager installed with X11 on FreeBSD, however, is twm.  I first experienced twm in the Virginia Tech Computer Science Dept. UNIX lab (all FreeBSD boxes), and tvm looks exactly the same today.  I cannot pick on it too much, however.  The guy in the office next door to me at work uses tvm on his Linux box.  I suppose I ought to call it an Emacs box, since he does everything out of emacs.  I digress&#8230;</p>
<p>Please read <a href="http://fluxbox-wiki.org/index.php?title=.xinitrc"> this excellent tutorial on xinit and .xinitrc files</a> from the Fluxbox project first.  The tutorial explains very clearly how the xinit program works and how .xinitrc files are processed.  In short, however, once the end of .xinitrc is reached, X11 is shutdown.  Thus you need a blocking command in xinitrc scripts that prevents the script from exiting.  In the default xinitrc script,  /usr/X11R6/lib/X11/xinit/xinitrc, I noticed towards the bottom of the script:</p>
<pre>twm &amp;</pre>
<p>It was followed by three xterm commands. The first two were also run in the background, but the final xterm was not run in the background, thus preventing X11 from terminating until that terminal is closed by the user.  No more twm on this box though!  I removed the xterm commands, and changed the twm line to the following:</p>
<pre>wmaker</pre>
<p>Now, WindowMaker is launched and until the user exits the WindowMaker session X11 will continue to run. All users on my FreeBSD will have WindowMaker when the execute startx.  I also created a .xinitrc in my user account home directory as follows:</p>
<pre>exec wmaker</pre>
<p>In reality, however, I have XDM to run as my &#8220;magic client&#8221; (see article linked above). Instead of managing a separate .xinitrc and .xsession file, I just symlinked the files together so that any changes are available in both files, in the cast that I ever disable XDM.</p>
<pre>ln -s .xinitrc .xsession</pre>
<p>After I log into the system via XDM, my .xsession file is executed and WindowMaker is launched.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/globalengineer.wordpress.com/556/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/globalengineer.wordpress.com/556/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/globalengineer.wordpress.com/556/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/globalengineer.wordpress.com/556/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/globalengineer.wordpress.com/556/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/globalengineer.wordpress.com/556/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/globalengineer.wordpress.com/556/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/globalengineer.wordpress.com/556/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/globalengineer.wordpress.com/556/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/globalengineer.wordpress.com/556/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/globalengineer.wordpress.com/556/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/globalengineer.wordpress.com/556/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/globalengineer.wordpress.com/556/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/globalengineer.wordpress.com/556/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=globalengineer.wordpress.com&amp;blog=2361522&amp;post=556&amp;subd=globalengineer&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://globalengineer.wordpress.com/2011/10/20/windowmaker-as-the-x11-window-manager/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6370396c5129eb47b3bccec6515adaaa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">globalengineer</media:title>
		</media:content>
	</item>
		<item>
		<title>Setting up XDM</title>
		<link>http://globalengineer.wordpress.com/2011/10/19/setting-up-xdm/</link>
		<comments>http://globalengineer.wordpress.com/2011/10/19/setting-up-xdm/#comments</comments>
		<pubDate>Wed, 19 Oct 2011 17:47:22 +0000</pubDate>
		<dc:creator>globalengineer</dc:creator>
				<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[UNIX]]></category>

		<guid isPermaLink="false">http://globalengineer.wordpress.com/?p=566</guid>
		<description><![CDATA[The X Display Manager, or XDM, is a program that allows one to log into a system using a GUI program.  Rather than logging into a system and then manually starting X, X comes up after boot and is ready to go.  While XDM (or GDM for GNOME or KDM for KDE) is not necessary [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=globalengineer.wordpress.com&amp;blog=2361522&amp;post=566&amp;subd=globalengineer&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>The X Display Manager, or XDM, is a program that allows one to log into a system using a GUI program.  Rather than logging into a system and then manually starting X, X comes up after boot and is ready to go.  While XDM (or GDM for GNOME or KDM for KDE) is not necessary on server systems, any system where X Windows is used on a regular basis benefits from XDM.  And XDM is easy to set up too.  With FreeBSD, one can simply build and install from the ports collections:</p>
<pre>cd /usr/ports/x11/xdm
make install clean</pre>
<p>Now one just needs to modify /etc/ttys to enable XDM. The XDM entry is already in this file, it is just disabled on the default install. To enable XDM after installing it, change &#8220;off&#8221; to &#8220;on&#8221; between the xterm and secure parameters.</p>
<pre>ttyv8 "/usr/local/bin/xdm -nodaemon" xterm on secure"</pre>
<p>Unlike GDM or KDM, XDM does not allow one to select a window manager. The window manager should be executed from a .xsession script in your home directory. I setup my system so that .xsession is a symlink to a .xinitrc file (read by startx when manually starting X11) in my home directory. If you need XDM and startx to have different startup methods, then you must provide separate files with customization for each program.</p>
<p>Without a .xsession file, XDM and startx default to /usr/X11R6/lib/X11/xinit/xinitrc. With my default install of FreeBSD, at the bottom of the script, the window manager twm is started, along with three xterms which are opened by default.</p>
<p>I cannot stand twm, so next I will look at setting up a different light-weight window manager. As my experience with Ubuntu and GNOME on this machine proved, I don&#8217;t have the memory on this machine for desktop environments like GNOME or KDE.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/globalengineer.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/globalengineer.wordpress.com/566/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/globalengineer.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/globalengineer.wordpress.com/566/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/globalengineer.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/globalengineer.wordpress.com/566/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/globalengineer.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/globalengineer.wordpress.com/566/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/globalengineer.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/globalengineer.wordpress.com/566/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/globalengineer.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/globalengineer.wordpress.com/566/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/globalengineer.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/globalengineer.wordpress.com/566/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=globalengineer.wordpress.com&amp;blog=2361522&amp;post=566&amp;subd=globalengineer&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://globalengineer.wordpress.com/2011/10/19/setting-up-xdm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6370396c5129eb47b3bccec6515adaaa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">globalengineer</media:title>
		</media:content>
	</item>
		<item>
		<title>nVidia graphics driver on FreeBSD 8.2</title>
		<link>http://globalengineer.wordpress.com/2011/10/19/nvidia-graphics-driver-on-freebsd-8-2/</link>
		<comments>http://globalengineer.wordpress.com/2011/10/19/nvidia-graphics-driver-on-freebsd-8-2/#comments</comments>
		<pubDate>Wed, 19 Oct 2011 00:51:00 +0000</pubDate>
		<dc:creator>globalengineer</dc:creator>
				<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[UNIX]]></category>

		<guid isPermaLink="false">http://globalengineer.wordpress.com/?p=558</guid>
		<description><![CDATA[First of all, find the proper driver for your device.  I used nVidia&#8217;s driver download page to get the right version: 96.43.20.  My card is an nVidia GeForce4 MX 420, and it is not supported on higher version number drivers that support more modern video cards. Download the driver tarball with your web brower or [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=globalengineer.wordpress.com&amp;blog=2361522&amp;post=558&amp;subd=globalengineer&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>First of all, find the proper driver for your device.  I used <a href="http://www.nvidia.com/Download/index.aspx?lang=en-us">nVidia&#8217;s driver download page</a> to get the right version: 96.43.20.  My card is an nVidia GeForce4 MX 420, and it is not supported on higher version number drivers that support more modern video cards.</p>
<p>Download the driver tarball with your web brower or wget and unarchive it.</p>
<pre>cd /root
tar -xzf NVIDIA-FreeBSD-x86-96.43.20
cd  /root/NVIDIA-FreeBSD-x86-96.43.20
vi doc/README</pre>
<p>As you can see in the documentation, you just need to do a &#8216;make install&#8217;.  Before doing so, however, comment out lines 25 through 36 as this check will prevent you from being able to build the driver.  (I don&#8217;t know why this check was in here&#8230;perhaps on more modern drivers this is not necessary)</p>
<pre>/*
#if __FreeBSD_version &gt;= 800000
#error This driver does not support FreeBSD 8.x/-CURRENT!
#endif
#if __FreeBSD_version &gt;= 700000 &amp;&amp; __FreeBSD_version &lt; 700055 #error This driver does not support FreeBSD 7.x/-CURRENT! #endif #if __FreeBSD_version &gt;= 600000 &amp;&amp; __FreeBSD_version &lt; 600034
#error This driver does not support FreeBSD 6.x/-CURRENT!
#endif
#if __FreeBSD_version &lt; 503000
#error This driver requires FreeBSD 5.3 or later!
#endif
*/</pre>
<p>Build and install the driver:</p>
<pre>make install</pre>
<p>If the driver builds with no errors, the driver kernel module should be installed in /boot/modules.  To test the driver and make sure that everything works,</p>
<p>I used the nvidia-xconfig tool to create a basic xorg.conf file. The tool automatically detected my video card and setup the correct information in the Device section.</p>
<pre>Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BoardName      "NV17 [GeForce4 MX 420]"
    BusID          "PCI:1:0:0"
EndSection</pre>
<p>The tool also added additional required modules by the driver.</p>
<pre>Section "Module"
	Load  "dbe"
	Load  "dri"
	Load  "dri2"
	Load  "extmod"
	Load  "glx"
	Load  "record"
EndSection</pre>
<p>I then had to customize the monitor settings. I have a wide-screen monitor that I like to run at 1920&#215;1200. I tried explicitly setting this in the Modes subsection of the Screen section, but was unable to get the setting to work (though 1024&#215;768 worked with no problems). Apparently, X is smart enough these days to figure out the max resolution on its own, so I simply commented out the Modes subsection.</p>
<pre>Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    DefaultDepth    24
    SubSection     "Display"
        Depth       24
#        Modes      "1920x1200" "1024x768" "800x600" "640x480"
    EndSubSection
EndSection</pre>
<p>I setup the Monitor section with more descriptive names as well as putting in the exact horizontal sync rate and vertical refresh rate from the instruction manual for my Samsung display.</p>
<pre>Section "Monitor"
    Identifier     "Monitor0"
    VendorName     "Samsung"
    ModelName      "Syncmaster P2250"
    HorizSync       30.0 - 81.0
    VertRefresh     56.0 - 60.0
    Option         "DPMS"
EndSection</pre>
<p>To test the configuration, use the -config option on the X program, passing it the customized X configuration.</p>
<pre>X -config /root/xorg.nvidia.conf</pre>
<p>Once satisfied with the settings, I copied the config file to <strong>/etc/X11/xorg.conf</strong> and tried to start X Windows.</p>
<pre>cp /root/xorg.nvidia.conf /etc/X11/xorg.conf
startx   # ugly tvm should start</pre>
<p>Finally, with the driver working, it can be added to load automatically during boot, allowing the use of graphical log-in programs such as XDM.  To load the driver during the boot stage, add the following to <strong>/boot/loader.conf</strong>:</p>
<pre>nvidia_load="YES"</pre>
<p>Next I shall look at configuring XDM so that I don&#8217;t have to always manually start X.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/globalengineer.wordpress.com/558/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/globalengineer.wordpress.com/558/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/globalengineer.wordpress.com/558/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/globalengineer.wordpress.com/558/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/globalengineer.wordpress.com/558/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/globalengineer.wordpress.com/558/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/globalengineer.wordpress.com/558/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/globalengineer.wordpress.com/558/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/globalengineer.wordpress.com/558/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/globalengineer.wordpress.com/558/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/globalengineer.wordpress.com/558/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/globalengineer.wordpress.com/558/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/globalengineer.wordpress.com/558/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/globalengineer.wordpress.com/558/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=globalengineer.wordpress.com&amp;blog=2361522&amp;post=558&amp;subd=globalengineer&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://globalengineer.wordpress.com/2011/10/19/nvidia-graphics-driver-on-freebsd-8-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/6370396c5129eb47b3bccec6515adaaa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">globalengineer</media:title>
		</media:content>
	</item>
	</channel>
</rss>
