<?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>Jason's Computer Science Blog &#187; Jason B. Ernst</title>
	<atom:link href="http://www.jasonernst.com/tag/jason-b-ernst/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jasonernst.com</link>
	<description>By Jason Ernst</description>
	<lastBuildDate>Wed, 25 Jan 2012 14:04:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Upcoming PhD QE Progress</title>
		<link>http://www.jasonernst.com/2011/07/27/upcoming-phd-qe-progress/</link>
		<comments>http://www.jasonernst.com/2011/07/27/upcoming-phd-qe-progress/#comments</comments>
		<pubDate>Wed, 27 Jul 2011 17:26:38 +0000</pubDate>
		<dc:creator>Jason Ernst</dc:creator>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Wireless Networks]]></category>
		<category><![CDATA[3G]]></category>
		<category><![CDATA[4G]]></category>
		<category><![CDATA[Handover]]></category>
		<category><![CDATA[Heterogeneous]]></category>
		<category><![CDATA[Jason B. Ernst]]></category>
		<category><![CDATA[Network]]></category>
		<category><![CDATA[Seamless]]></category>
		<category><![CDATA[Wireless]]></category>

		<guid isPermaLink="false">http://www.jasonernst.com/?p=1739</guid>
		<description><![CDATA[So I&#8217;ve been doing my PhD for over two years now, and I haven&#8217;t posted a reflective &#8220;state of the thesis&#8221; post in quite some time, so here it is. I have maxed out my 50 pages (not included ToC and references) for some time now, it&#8217;s just been in the process of revision for [...]]]></description>
			<content:encoded><![CDATA[<p>So I&#8217;ve been doing my PhD for over two years now, and I haven&#8217;t posted a reflective &#8220;state of the thesis&#8221; post in quite some time, so here it is. I have maxed out my 50 pages (not included ToC and references) for some time now, it&#8217;s just been in the process of revision for the last month or so! I have more or less settled on what my research actually is now and am getting a clearer picture of it in my head all the time.</p>
<p>Officially the topic is &#8220;Radio Resource Management for Quality of Service in Heterogeneous Wireless Networks&#8221;. This is quite the mouthful, I know. Really what it boils down to is: Making various wireless technologies (Bluetooth, WiFi, WiMAX, 3G, 4G, &#8230; , etc) seamlessly work together. Many devices are capable of connecting to many of these radio access technologies (RATs), but often it is not <em>seamless</em>. What do I mean by this? Well suppose I am inside a university building, deep in the basement (where they tend to put CS students <img src='http://www.jasonernst.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ) where there is no mobile reception (3G, 4G etc.). I start downloading a large file, or call someone via wifi. Now I want to walk to my car because it&#8217;s time to go home for the day. Many networks now are not able to handle this, and it is interrupted after you change networks. Furthermore, you often have to manually tell the device you want to leave one network and join another. <em>Seamless</em> means this should all happen without you noticing. This is the focus of my research.</p>
<p>The biggest problem that I am concerned with is called handoff or handover. This is when the switch between RATs occurs. Traditionally, this also occurs when a mobile device switches from one tower to another, and it usually involved predicting the motion of the device along with some other factors for Quality of Service (QoS). For a vertical handover, we may or may not need to predict motion. If the heterogeneous wireless network (HWN) is densely covered, many RATs are available throughout the coverage region (as opposed to a sparsely covered where a given location may have access to one technology at once). In a dense HWN, the problem becomes a multi-criteria question.</p>
<ol>
<li>Which network is most economical for me to connect to?</li>
<li>Which configuration of (network, client) pairs is most profitable for the operator?</li>
<li>Which network is able to provide me with the required QoS?</li>
</ol>
<p>More technical details to follow&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jasonernst.com/2011/07/27/upcoming-phd-qe-progress/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tutorial: sockets &#8211; 3 ways to listen</title>
		<link>http://www.jasonernst.com/2011/03/22/tutorial-sockets-3-ways-to-listen/</link>
		<comments>http://www.jasonernst.com/2011/03/22/tutorial-sockets-3-ways-to-listen/#comments</comments>
		<pubDate>Tue, 22 Mar 2011 14:53:27 +0000</pubDate>
		<dc:creator>Jason Ernst</dc:creator>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[Client]]></category>
		<category><![CDATA[fork()]]></category>
		<category><![CDATA[forking]]></category>
		<category><![CDATA[Jason B. Ernst]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[select()]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[socket()]]></category>
		<category><![CDATA[source]]></category>
		<category><![CDATA[system]]></category>

		<guid isPermaLink="false">http://www.jasonernst.com/?p=1507</guid>
		<description><![CDATA[As you may know, I have been ta-ing a course in operating systems. We just finished covering sockets and in the last lab I gave a socket demo where I show three different ways a server can listen on a socket. First is a very basic case where the server can only accept and process [...]]]></description>
			<content:encoded><![CDATA[<p>As you may know, I have been ta-ing a course in operating systems. We just finished covering sockets and in the last lab I gave a socket demo where I show three different ways a server can listen on a socket. First is a very basic case where the server can only accept and process one connection at a time. Second I show the fork()ing case where multiple connections can be processed concurrently using multiple processes. Lastly, the multiple connection case is handled with select() so that everything can be handled in a single connection.</p>
<p><strong>Single connection server</strong><br />
This server is a basic echo server. A client connects to it on a specific port and enters strings on the stdin. The server maintains the connection until the client terminates the connection with a blank line.</p>
<p>The major weakness of this server is that it can only handle a single connection at once. So if the first connection is very slow, any subsequent connections must wait, even if they are ready to be handled. In the case of this server, the first user to connect may be very slow to type their strings, and even if the second user has already entered a string, it will not be displayed until the first user connection in completed.</p>
<p><center>
<div class="image"><a href="http://www.jasonernst.com/wp-content/uploads/2011/03/server.png"><img src="http://www.jasonernst.com/wp-content/uploads/2011/03/server-300x225.png" alt="" title="server" width="300" height="225" class="aligncenter size-medium wp-image-1519" /><br/>Single connection server</a></div>
<p></center></p>
<div class="snippet"><pre><code>#include &lt;sys/types.h&gt;
#include &lt;sys/socket.h&gt;
#include &lt;netinet/in.h&gt;
#include &lt;unistd.h&gt;
#include &lt;netdb.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;
#include &lt;errno.h&gt;
#include &lt;string.h&gt;

#define ERROR(x) do { perror(x); exit(1); } while(0)

#define NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 257
#define BUFSIZE&nbsp;&nbsp;&nbsp;&nbsp;257
#define MAXPENDING 1

int main(int argc, char *argv[])
{
&nbsp;&nbsp;unsigned short port;&nbsp;&nbsp;&nbsp;&nbsp;/* Port to which server will bind */
&nbsp;&nbsp;char servhost[NAME];&nbsp;&nbsp;&nbsp;&nbsp;/* Local host name */
&nbsp;&nbsp;struct sockaddr_in sock;&nbsp;&nbsp;/* INTERNET socket space */
&nbsp;&nbsp;struct hostent *server;&nbsp;&nbsp;&nbsp;&nbsp;/* Local host information */
&nbsp;&nbsp;int S;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* fd for socket */
&nbsp;&nbsp;int NS;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* fd for connected socket */
&nbsp;&nbsp;char buf[BUFSIZE];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* Input buffer */
&nbsp;&nbsp;FILE *fp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* Stream (converted file des.) */

&nbsp;&nbsp;if (argc != 2)
&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&quot;usage: server &lt;port&gt;\n&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;exit(1);
&nbsp;&nbsp;}

&nbsp;&nbsp;port = atoi(argv[1]);

&nbsp;&nbsp;/*
&nbsp;&nbsp; * Get socket - INTERNET DOMAIN - TCP
&nbsp;&nbsp; */
&nbsp;&nbsp;if ((S = socket(AF_INET, SOCK_STREAM, 0)) &lt; 0)
&nbsp;&nbsp;&nbsp;&nbsp;ERROR(&quot;server: socket&quot;);

&nbsp;&nbsp;/*
&nbsp;&nbsp; * Obtain host name &amp; network address
&nbsp;&nbsp; */
&nbsp;&nbsp;gethostname(servhost, sizeof(servhost));
&nbsp;&nbsp;if ((server = gethostbyname(servhost)) == NULL)
&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&quot;%s: unknown host\n&quot;,servhost);
&nbsp;&nbsp;&nbsp;&nbsp;exit(1);
&nbsp;&nbsp;}

&nbsp;&nbsp;/*
&nbsp;&nbsp; * Bind to server address - in network byte order
&nbsp;&nbsp; */
&nbsp;&nbsp;sock.sin_family = AF_INET;
&nbsp;&nbsp;sock.sin_port = htons(port);
&nbsp;&nbsp;memcpy(&amp;sock.sin_addr, server-&gt;h_addr, server-&gt;h_length);

&nbsp;&nbsp;/*
&nbsp;&nbsp; * Bind socket to port/addr
&nbsp;&nbsp; */
&nbsp;&nbsp;if (bind(S, (struct sockaddr *)&amp;sock, sizeof(sock)) &lt; 0)
&nbsp;&nbsp;&nbsp;&nbsp;ERROR(&quot;server: bind&quot;);

&nbsp;&nbsp;/*
&nbsp;&nbsp; * Listen on this socket
&nbsp;&nbsp; */
&nbsp;&nbsp;if (listen(S,MAXPENDING) &lt; 0)
&nbsp;&nbsp;&nbsp;&nbsp;ERROR(&quot;server: listen&quot;);
&nbsp;&nbsp;
&nbsp;&nbsp;
&nbsp;&nbsp;//loop to continue handling connections
&nbsp;&nbsp;while(1)
&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;/*
&nbsp;&nbsp;&nbsp;&nbsp; * Accept connections.&nbsp;&nbsp;Once connected, the client will be
&nbsp;&nbsp;&nbsp;&nbsp; * connected on fd NS, a second and third parameter may be passed
&nbsp;&nbsp;&nbsp;&nbsp; * to accept which will be filled in with information regarding the
&nbsp;&nbsp;&nbsp;&nbsp; * client connection if desired.
&nbsp;&nbsp;&nbsp;&nbsp; *
&nbsp;&nbsp;&nbsp;&nbsp; * In this example, once connected the server is done with the
&nbsp;&nbsp;&nbsp;&nbsp; * master socket (so closes it).
&nbsp;&nbsp;&nbsp;&nbsp; */
&nbsp;&nbsp;&nbsp;&nbsp;if ((NS = accept(S,NULL,NULL)) &lt; 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ERROR(&quot;server: accept&quot;);

&nbsp;&nbsp;&nbsp;&nbsp;/*
&nbsp;&nbsp;&nbsp;&nbsp; * Using stdio library to read from socket
&nbsp;&nbsp;&nbsp;&nbsp; */
&nbsp;&nbsp;&nbsp;&nbsp;if (!(fp = fdopen(NS,&quot;r&quot;)))
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&quot;&gt;&gt;&gt; Error converting file des. to stream &lt;&lt;&lt;\n&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;while (fgets(buf,BUFSIZE,fp))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;%s&quot;, buf);

&nbsp;&nbsp;&nbsp;&nbsp;/*
&nbsp;&nbsp;&nbsp;&nbsp; * DONE - simply close() connection
&nbsp;&nbsp;&nbsp;&nbsp; */
&nbsp;&nbsp;&nbsp;&nbsp;fclose(fp);
&nbsp;&nbsp;&nbsp;&nbsp;close(NS);
&nbsp;&nbsp;}
&nbsp;&nbsp;
&nbsp;&nbsp;return(0);
}</code></pre></div>
<p><strong>fork() &#8211; Multiple connection, multiple process</strong><br />
In this case, the server can now handle multiple connections successfully. If the first connection has a long processing time or the user is slow at entering data, the second connection may now continue freely without waiting in line. The downside to this approach is: 1) If the server must handle a large number of connections simultaneously, the server may run out of processes since each connection fork()s. 2) Since a fork() call duplicates variables, file descriptors etc., the server may run out of memory if each connection requires any significant processing.</p>
<p>Notice that the processing portion of the code has been moved into a function which is called when the fork() is executing within the child processes.</p>
<p><center>
<div class="image"><a href="http://www.jasonernst.com/wp-content/uploads/2011/03/fork-server.png"><img src="http://www.jasonernst.com/wp-content/uploads/2011/03/fork-server-300x236.png" alt="" title="fork-server" width="300" height="236" class="aligncenter size-medium wp-image-1517" /></a><br/>Fork Server</div>
<p></center></p>
<div class="snippet"><pre><code>#include &lt;sys/types.h&gt;
#include &lt;sys/socket.h&gt;
#include &lt;netinet/in.h&gt;
#include &lt;unistd.h&gt;
#include &lt;netdb.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;
#include &lt;errno.h&gt;
#include &lt;string.h&gt;

#define ERROR(x) do { perror(x); exit(1); } while(0)

#define NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 257
#define BUFSIZE&nbsp;&nbsp;&nbsp;&nbsp;257
#define MAXPENDING 1

void handle_connection(int NS);

int main(int argc, char *argv[])
{
&nbsp;&nbsp;unsigned short port;&nbsp;&nbsp;&nbsp;&nbsp;/* Port to which server will bind */
&nbsp;&nbsp;char servhost[NAME];&nbsp;&nbsp;&nbsp;&nbsp;/* Local host name */
&nbsp;&nbsp;struct sockaddr_in sock;&nbsp;&nbsp;/* INTERNET socket space */
&nbsp;&nbsp;struct hostent *server;&nbsp;&nbsp;&nbsp;&nbsp;/* Local host information */
&nbsp;&nbsp;int S;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* fd for socket */
&nbsp;&nbsp;int NS;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* fd for connected socket */
&nbsp;&nbsp;int pid;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* used to determine parent or child */

&nbsp;&nbsp;if (argc != 2)
&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&quot;usage: fork-server &lt;port&gt;\n&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;exit(1);
&nbsp;&nbsp;}

&nbsp;&nbsp;port = atoi(argv[1]);

&nbsp;&nbsp;/*
&nbsp;&nbsp; * Get socket - INTERNET DOMAIN - TCP
&nbsp;&nbsp; */
&nbsp;&nbsp;if ((S = socket(AF_INET, SOCK_STREAM, 0)) &lt; 0)
&nbsp;&nbsp;&nbsp;&nbsp;ERROR(&quot;fork-server: socket&quot;);

&nbsp;&nbsp;/*
&nbsp;&nbsp; * Obtain host name &amp; network address
&nbsp;&nbsp; */
&nbsp;&nbsp;gethostname(servhost, sizeof(servhost));
&nbsp;&nbsp;if ((server = gethostbyname(servhost)) == NULL)
&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&quot;%s: unknown host\n&quot;,servhost);
&nbsp;&nbsp;&nbsp;&nbsp;exit(1);
&nbsp;&nbsp;}

&nbsp;&nbsp;/*
&nbsp;&nbsp; * Bind to server address - in network byte order
&nbsp;&nbsp; */
&nbsp;&nbsp;sock.sin_family = AF_INET;
&nbsp;&nbsp;sock.sin_port = htons(port);
&nbsp;&nbsp;memcpy(&amp;sock.sin_addr, server-&gt;h_addr, server-&gt;h_length);

&nbsp;&nbsp;/*
&nbsp;&nbsp; * Bind socket to port/addr
&nbsp;&nbsp; */
&nbsp;&nbsp;if (bind(S, (struct sockaddr *)&amp;sock, sizeof(sock)) &lt; 0)
&nbsp;&nbsp;&nbsp;&nbsp;ERROR(&quot;server: bind&quot;);

&nbsp;&nbsp;/*
&nbsp;&nbsp; * Listen on this socket
&nbsp;&nbsp; */
&nbsp;&nbsp;if (listen(S,MAXPENDING) &lt; 0)
&nbsp;&nbsp;&nbsp;&nbsp;ERROR(&quot;server: listen&quot;);
&nbsp;&nbsp;
&nbsp;&nbsp;while(1)
&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;/*
&nbsp;&nbsp;&nbsp;&nbsp; * Accept connections.&nbsp;&nbsp;Once connected, the client will be
&nbsp;&nbsp;&nbsp;&nbsp; * connected on fd NS, a second and third parameter may be passed
&nbsp;&nbsp;&nbsp;&nbsp; * to accept which will be filled in with information regarding the
&nbsp;&nbsp;&nbsp;&nbsp; * client connection if desired.
&nbsp;&nbsp;&nbsp;&nbsp; *
&nbsp;&nbsp;&nbsp;&nbsp; * In this example, once connected the server is done with the
&nbsp;&nbsp;&nbsp;&nbsp; * master socket (so closes it).
&nbsp;&nbsp;&nbsp;&nbsp; */
&nbsp;&nbsp;&nbsp;&nbsp;if ((NS = accept(S,NULL,NULL)) &lt; 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ERROR(&quot;server: accept&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;if((pid = fork()) &lt; 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ERROR(&quot;server: fork&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;if(pid == 0)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handle_connection(NS);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(0);
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;close(NS);
&nbsp;&nbsp;}

&nbsp;&nbsp;return(0);
}

void handle_connection(int NS)
{
&nbsp;&nbsp;char buf[BUFSIZE];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* Input buffer */
&nbsp;&nbsp;FILE *fp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* Stream (converted file des.) */
&nbsp;&nbsp;
&nbsp;&nbsp;/*
&nbsp;&nbsp; * Using stdio library to read from socket
&nbsp;&nbsp; */
&nbsp;&nbsp;if (!(fp = fdopen(NS,&quot;r&quot;)))
&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&quot;&gt;&gt;&gt; Error converting file des. to stream &lt;&lt;&lt;\n&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;exit(1);
&nbsp;&nbsp;}

&nbsp;&nbsp;while (fgets(buf,BUFSIZE,fp))
&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;%s&quot;, buf);

&nbsp;&nbsp;/*
&nbsp;&nbsp; * DONE - simply close() connection
&nbsp;&nbsp; */
&nbsp;&nbsp;fclose(fp);
&nbsp;&nbsp;close(NS);
}</code></pre></div>
<p><strong>select() &#8211; Multiple connection, single process</strong><br />
The last case still has the benefits of fork() but does so in a single process. In this case, select() is used. In this case, each socket descriptor is monitored by select which determines if any of the sockets are ready for I/O. Rather than sitting idly waiting for input on sockets that are not ready, data is processed as it arrives. The drawback to this approach is that it is little trickier to implement and understand, but if you start with a basic case like this it can be quite simple to get the hang of it. When using select(), we need to specify the groups of sockets we wish to monitor. This is done using the fd_set which you can see in the source.</p>
<p><center>
<div class="image"><a href="http://www.jasonernst.com/wp-content/uploads/2011/03/select-server.png"><img src="http://www.jasonernst.com/wp-content/uploads/2011/03/select-server-300x238.png" alt="" title="select-server" width="300" height="238" class="aligncenter size-medium wp-image-1520" /></a><br/>Select Server</div>
<p></center></p>
<div class="snippet"><pre><code>#include &lt;sys/types.h&gt;
#include &lt;sys/socket.h&gt;
#include &lt;netinet/in.h&gt;
#include &lt;unistd.h&gt;
#include &lt;netdb.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;
#include &lt;errno.h&gt;
#include &lt;string.h&gt;

#define ERROR(x) do { perror(x); exit(1); } while(0)

#define NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 257
#define BUFSIZE&nbsp;&nbsp;&nbsp;&nbsp;257
#define MAXPENDING 1

void handle_connection(int NS, fd_set * activefds);

int main(int argc, char *argv[])
{
&nbsp;&nbsp;fd_set readfds, activefds;&nbsp;&nbsp;/* the set of read descriptors */
&nbsp;&nbsp;unsigned short port;&nbsp;&nbsp;&nbsp;&nbsp;/* Port to which server will bind */
&nbsp;&nbsp;char servhost[NAME];&nbsp;&nbsp;&nbsp;&nbsp;/* Local host name */
&nbsp;&nbsp;struct sockaddr_in sock;&nbsp;&nbsp;/* INTERNET socket space */
&nbsp;&nbsp;struct hostent *server;&nbsp;&nbsp;&nbsp;&nbsp;/* Local host information */
&nbsp;&nbsp;int S;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* fd for socket */
&nbsp;&nbsp;int NS;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* fd for connected socket */
&nbsp;&nbsp;int i;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* counter to go through FDs in fdset */

&nbsp;&nbsp;if (argc != 2)
&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&quot;usage: select-server &lt;port&gt;\n&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;exit(1);
&nbsp;&nbsp;}

&nbsp;&nbsp;port = atoi(argv[1]);

&nbsp;&nbsp;/*
&nbsp;&nbsp; * Get socket - INTERNET DOMAIN - TCP
&nbsp;&nbsp; */
&nbsp;&nbsp;if ((S = socket(AF_INET, SOCK_STREAM, 0)) &lt; 0)
&nbsp;&nbsp;&nbsp;&nbsp;ERROR(&quot;select-server: socket&quot;);

&nbsp;&nbsp;/*
&nbsp;&nbsp; * Obtain host name &amp; network address
&nbsp;&nbsp; */
&nbsp;&nbsp;gethostname(servhost, sizeof(servhost));
&nbsp;&nbsp;if ((server = gethostbyname(servhost)) == NULL)
&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&quot;%s: unknown host\n&quot;,servhost);
&nbsp;&nbsp;&nbsp;&nbsp;exit(1);
&nbsp;&nbsp;}

&nbsp;&nbsp;/*
&nbsp;&nbsp; * Bind to server address - in network byte order
&nbsp;&nbsp; */
&nbsp;&nbsp;sock.sin_family = AF_INET;
&nbsp;&nbsp;sock.sin_port = htons(port);
&nbsp;&nbsp;memcpy(&amp;sock.sin_addr, server-&gt;h_addr, server-&gt;h_length);

&nbsp;&nbsp;/*
&nbsp;&nbsp; * Bind socket to port/addr
&nbsp;&nbsp; */
&nbsp;&nbsp;if (bind(S, (struct sockaddr *)&amp;sock, sizeof(sock)) &lt; 0)
&nbsp;&nbsp;&nbsp;&nbsp;ERROR(&quot;server: bind&quot;);

&nbsp;&nbsp;/*
&nbsp;&nbsp; * Listen on this socket
&nbsp;&nbsp; */
&nbsp;&nbsp;if (listen(S,MAXPENDING) &lt; 0)
&nbsp;&nbsp;&nbsp;&nbsp;ERROR(&quot;server: listen&quot;);
&nbsp;&nbsp;
&nbsp;&nbsp;/* Initialize the set of active sockets. */
&nbsp;&nbsp;&nbsp;&nbsp;FD_ZERO (&amp;activefds);
&nbsp;&nbsp;&nbsp;&nbsp;FD_SET (S, &amp;activefds);
&nbsp;&nbsp;
&nbsp;&nbsp;while(1)
&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;/* Block until input arrives on one or more active sockets. */
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;readfds = activefds;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (select (FD_SETSIZE, &amp;readfds, NULL, NULL, NULL) &lt; 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perror (&quot;select&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit (EXIT_FAILURE);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;/* Service all the sockets with input pending. */
&nbsp;&nbsp;&nbsp;&nbsp;for (i = 0; i &lt; FD_SETSIZE; ++i)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (FD_ISSET (i, &amp;readfds))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (i == S)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* Connection request on original socket. */

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * Accept connections.&nbsp;&nbsp;Once connected, the client will be
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * connected on fd NS, a second and third parameter may be passed
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * to accept which will be filled in with information regarding the
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * client connection if desired.
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * In this example, once connected the server is done with the
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * master socket (so closes it).
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ((NS = accept(S,NULL,NULL)) &lt; 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ERROR(&quot;server: accept&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FD_SET(NS, &amp;activefds);&nbsp;&nbsp;//add the new socket desc to our active connections set
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* Data arriving on an already-connected socket. */
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handle_connection(i, &amp;activefds);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;} /* //end of for */
&nbsp;&nbsp;} /* //end of while */

&nbsp;&nbsp;return(0);
}

void handle_connection(int NS, fd_set * activefds)
{
&nbsp;&nbsp;char buf[BUFSIZE];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* Input buffer */
&nbsp;&nbsp;FILE *fp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* Stream (converted file des.) */
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;/*
&nbsp;&nbsp; * Using stdio library to read from socket
&nbsp;&nbsp; */
&nbsp;&nbsp;if (!(fp = fdopen(NS,&quot;r&quot;)))
&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,&quot;&gt;&gt;&gt; Error converting file des. to stream &lt;&lt;&lt;\n&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;exit(1);
&nbsp;&nbsp;}

&nbsp;&nbsp;//if fgets fails we have end of line, quit
&nbsp;&nbsp;if(!(fgets(buf,BUFSIZE,fp)))
&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;/*
&nbsp;&nbsp;&nbsp;&nbsp; * DONE - simply close() connection
&nbsp;&nbsp;&nbsp;&nbsp; */
&nbsp;&nbsp;&nbsp;&nbsp;fclose(fp);
&nbsp;&nbsp;&nbsp;&nbsp;close(NS);
&nbsp;&nbsp;&nbsp;&nbsp;FD_CLR(NS, activefds);
&nbsp;&nbsp;}
&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;%s&quot;, buf);
}</code></pre></div>
<p><strong>Additional Information</strong><br />
<a href="http://www.uoguelph.ca/~jernst/cis3110/cis3310-lab4.pdf">http://www.uoguelph.ca/~jernst/3110/cis3310-lab4.pdf</a><br />
<a href="http://www.socs.uoguelph.ca/~dbm/teaching/CIS3110/">http://www.socs.uoguelph.ca/~dbm/teaching/CIS3110/</a><br />
<a href="http://beej.us/guide/bgnet/">http://beej.us/guide/bgnet/</a><br />
manpages!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jasonernst.com/2011/03/22/tutorial-sockets-3-ways-to-listen/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Updates: Publications, Guelph ACM, Teaching, Thesis</title>
		<link>http://www.jasonernst.com/2010/08/18/updates-publications-guelph-acm-teaching-thesis/</link>
		<comments>http://www.jasonernst.com/2010/08/18/updates-publications-guelph-acm-teaching-thesis/#comments</comments>
		<pubDate>Wed, 18 Aug 2010 14:20:35 +0000</pubDate>
		<dc:creator>Jason Ernst</dc:creator>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[ACM]]></category>
		<category><![CDATA[ICPC]]></category>
		<category><![CDATA[Jason B. Ernst]]></category>
		<category><![CDATA[Ph.D.]]></category>
		<category><![CDATA[Publications]]></category>
		<category><![CDATA[Teaching]]></category>
		<category><![CDATA[Thesis]]></category>

		<guid isPermaLink="false">http://www.jasonernst.com/?p=1070</guid>
		<description><![CDATA[Just a short post with some updates since I&#8217;ve been quite busy as usual. I have submitted the final draft of an adaptive scheduling algorithm for wireless networks to BWCCA conference in Japan. I intend to present my findings in November. The ACM Group I am chair of is organizing a computer programming contest at [...]]]></description>
			<content:encoded><![CDATA[<p>Just a short post with some updates since I&#8217;ve been quite busy as usual. </p>
<p>I have submitted the final draft of an adaptive scheduling algorithm for wireless networks to <a href="http://www.lsi.upc.edu/~net4all/BWCCA-2010/">BWCCA conference</a> in Japan. I intend to present my findings in November.</p>
<p>The ACM Group I am chair of is organizing a computer programming contest at Guelph for the fall semester. We are also planning to try to field a team for <a href="http://cm.baylor.edu/welcome.icpc">ACM ICPC</a>* Update * We have been featured in the ACM student publication crossroads: <a href="http://tinyurl.com/25u5vxt">http://tinyurl.com/25u5vxt</a>.</p>
<p>A few days ago I found out I am the teaching assistant for CIS2030 at Guelph for the second time! I am excited to be back, and expect to do a good job since I am becoming familiar with the course.</p>
<p>Lastly, my thesis has been progressing slowly this semester. I am still in the stage where I am deciding where to focus my work. The general area I am exploring is heterogeneous wireless networks, however there are many problems and it is difficult to choose one to focus on. Since I worked in scheduling for my MSc. thesis, I intend to move in a bit different of a direction so that I expand my knowledge. (although I still may publish some more scheduling papers since I still have some ideas in that area)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jasonernst.com/2010/08/18/updates-publications-guelph-acm-teaching-thesis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ICC 2010 &#8211; Cross-Layer Mixed Bias Scheduling for Wireless Mesh Networks</title>
		<link>http://www.jasonernst.com/2010/06/04/icc-2010-cross-layer-mixed-bias-scheduling-for-wireless-mesh-networks/</link>
		<comments>http://www.jasonernst.com/2010/06/04/icc-2010-cross-layer-mixed-bias-scheduling-for-wireless-mesh-networks/#comments</comments>
		<pubDate>Fri, 04 Jun 2010 15:30:29 +0000</pubDate>
		<dc:creator>Jason Ernst</dc:creator>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Research]]></category>
		<category><![CDATA[Wireless Networks]]></category>
		<category><![CDATA[2010]]></category>
		<category><![CDATA[Bias]]></category>
		<category><![CDATA[Guelph]]></category>
		<category><![CDATA[ICC 2010]]></category>
		<category><![CDATA[Jason B. Ernst]]></category>
		<category><![CDATA[Mieso Denko]]></category>
		<category><![CDATA[Mixed]]></category>
		<category><![CDATA[Presentation]]></category>
		<category><![CDATA[Publication]]></category>
		<category><![CDATA[Scheduling]]></category>
		<category><![CDATA[Wireless]]></category>

		<guid isPermaLink="false">http://www.jasonernst.com/?p=845</guid>
		<description><![CDATA[This post is somewhat motivated by Prof. Andrew Eckford&#8217;s post that encourages graduate students and faculty members to post more about their work on sites like Twitter. Since I attended the same conference (ICC 2010), I thought it would be good to share a bit about my presentation and my experience at the conference. While [...]]]></description>
			<content:encoded><![CDATA[<p>This post is somewhat motivated by <a href="http://andreweckford.blogspot.com/2010/06/you-should-be-tweeting.html">Prof. Andrew Eckford&#8217;s post</a> that encourages graduate students and faculty members to post more about their work on sites like Twitter. Since I attended the same conference (ICC 2010), I thought it would be good to share a bit about my presentation and my experience at the conference.</p>
<p>While I don&#8217;t have a video for you to watch the entire presentation, I do have some pictures, and I&#8217;ll post the paper and slides I presented in case any one is interested. If you have any questions feel free to post on here or email me directly and I&#8217;ll be happy to answer any of them.</p>
<p><span id="more-845"></span></p>
<p>J.B. Ernst and M.K. Denko, &#8220;Cross-Layer Mixed Bias Scheduling for Wireless Mesh Networks,&#8221; in <em>Proc. IEEE International Conference on Communications (ICC)</em>, Cape Town, South Africa, 2010.</p>
<p><center>
<div class="image"><img src="http://www.jasonernst.com/wp-content/uploads/2010/06/icc2010-presentation-300x225.jpg" alt="ICC 2010 - Jason Ernst"/></div>
<p></center></p>
<p><em>Abstract</em>—In this paper we propose a mixed bias approach which makes use of cross layer optimization. The cross-layer parameters are based on conditions in the network from multiple layers and are used to determine resource and time allocation for nodes in the network. Unlike existing proposals, we propose to bias against several parameters such as link quality and queue size in addition to node distance. We also propose a combined mixed bias approach which takes into account multiple parameters together. The scheme is evaluated using simulation experiments. The performance results are reported in this paper.</p>
<p><a href="http://www.jasonernst.com/wp-content/uploads/2010/06/icc2010.pdf">Download the paper (pdf)</a><br />
<a href="http://www.jasonernst.com/wp-content/uploads/2010/06/ICC2010-presentation.pdf">Download the presentation slides (pdf)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jasonernst.com/2010/06/04/icc-2010-cross-layer-mixed-bias-scheduling-for-wireless-mesh-networks/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>AINA 2009 Conference Presentation</title>
		<link>http://www.jasonernst.com/2009/06/01/aina-2009-conference-presentation/</link>
		<comments>http://www.jasonernst.com/2009/06/01/aina-2009-conference-presentation/#comments</comments>
		<pubDate>Mon, 01 Jun 2009 18:04:29 +0000</pubDate>
		<dc:creator>Jason Ernst</dc:creator>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Research]]></category>
		<category><![CDATA[Wireless Networks]]></category>
		<category><![CDATA[2009]]></category>
		<category><![CDATA[AINA 2009]]></category>
		<category><![CDATA[Bradford]]></category>
		<category><![CDATA[Fair Scheduling]]></category>
		<category><![CDATA[Jason B. Ernst]]></category>
		<category><![CDATA[Mesh]]></category>
		<category><![CDATA[Mieso Denko]]></category>
		<category><![CDATA[Networks]]></category>
		<category><![CDATA[Publication]]></category>
		<category><![CDATA[Simulation]]></category>
		<category><![CDATA[UK]]></category>
		<category><![CDATA[Wireless]]></category>

		<guid isPermaLink="false">http://www.jasonernst.com/?p=673</guid>
		<description><![CDATA[This past week I travelled to the UK to present at my first International Conference &#8211; Advanced Information Networking and Applications (AINA 2009) in Bradford, UK. My presentation was on &#8220;Fair Scheduling in Wireless Mesh Networks with Multiple Gateways&#8221;. The paper for the conference was published in the main AINA conference and I presented on [...]]]></description>
			<content:encoded><![CDATA[<p>This past week I travelled to the UK to present at my first International Conference &#8211; Advanced Information Networking and Applications (AINA 2009) in Bradford, UK. My presentation was on &#8220;Fair Scheduling in Wireless Mesh Networks with Multiple Gateways&#8221;. The paper for the conference was published in the main AINA conference and I presented on the first day, in the first session. It was nice to have it over with right away so that I could relax and focus on meeting as many people as possible at the conference. </p>
<p><span id="more-673"></span></p>
<p>There were people from 40 different countries there and I feel like I met someone from almost every one of them at some point. There were over 300 people at AINA this year, which apparently is down from the last couple of years (where they had 4-500) but it was still a great conference for me. I will post my slides from my presentation in this post in case anyone is interested, along with a link to the paper once it is available. I submitted another paper last night for a conference in Toronto and am working on two more papers, so hopefully I&#8217;ll be travelling soon. I am trying to aim for ICC in South Africa next year.</p>
<p>Here are a few pictures from the conference. </p>
<div class="image"><img src="http://www.jasonernst.com/wp-content/uploads/2009/06/aina03-300x225.jpg" alt="" title="aina03" width="300" height="225" class="alignnone size-medium wp-image-678" /></div>
<div class="image"><img src="http://www.jasonernst.com/wp-content/uploads/2009/06/aina02-300x225.jpg" alt="" title="aina02" width="300" height="225" class="alignnone size-medium wp-image-677" /></div>
<div class="image"><img src="http://www.jasonernst.com/wp-content/uploads/2009/06/aina01-300x225.jpg" alt="" title="aina01" width="300" height="225" class="alignnone size-medium wp-image-676" /></div>
<p><strong>Abstract:</strong><br />
This paper addresses the problem of scheduling  in Wireless Mesh  Networks (WMNs). The paper first discusses existing scheduling algorithms and classifies them based on the technique they use and their implementation frameworks.Then detailed discussions of the proposed scheduling method are presented. Simulation experiments are conducted to compare the performance of fair scheduling with the method that does not use fair scheduling. The simulation results confirm that the proposed scheduling method has better performance with respect to the metrics used for  performance evaluation.</p>
<p>J.B. Ernst, M.K. Denko, &#8220;Fair Scheduling with Multiple Gateways in Wireless Mesh Networks&#8221;, in Proc. of the 22nd IEEE Int. Conf. on Advanced Information Networking and Applications (AINA 2009), Bradford UK, 2009.</p>
<p>The paper itself is available through <a href="http://ieeexplore.ieee.org/xpls/abs_all.jsp?tp=&#038;arnumber=5076187&#038;isnumber=5076162">IEEE Xplore</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jasonernst.com/2009/06/01/aina-2009-conference-presentation/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Thesis Defense a Success!</title>
		<link>http://www.jasonernst.com/2009/05/19/thesis-defense-a-success/</link>
		<comments>http://www.jasonernst.com/2009/05/19/thesis-defense-a-success/#comments</comments>
		<pubDate>Wed, 20 May 2009 03:10:15 +0000</pubDate>
		<dc:creator>Jason Ernst</dc:creator>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Research]]></category>
		<category><![CDATA[Wireless Networks]]></category>
		<category><![CDATA[Defense]]></category>
		<category><![CDATA[Guelph]]></category>
		<category><![CDATA[Jason B. Ernst]]></category>
		<category><![CDATA[M.Sc.]]></category>
		<category><![CDATA[Mesh]]></category>
		<category><![CDATA[Network]]></category>
		<category><![CDATA[Scheduling]]></category>
		<category><![CDATA[Thesis]]></category>
		<category><![CDATA[Wireless]]></category>

		<guid isPermaLink="false">http://www.jasonernst.com/?p=656</guid>
		<description><![CDATA[Last Friday I successfully defended my thesis at Guelph. The room was full with lots of friends, students and faculty and everything went fairly smoothly. It definitely feels great to be done after almost two years building up to this. Today I finished the final revisions and submitted all of the copies with an insane [...]]]></description>
			<content:encoded><![CDATA[<p>Last Friday I successfully defended my thesis at Guelph. The room was full with lots of friends, students and faculty and everything went fairly smoothly. It definitely feels great to be done after almost two years building up to this. Today I finished the final revisions and submitted all of the copies with an insane amount of paperwork to Grad Program Services. Two to three weeks from now I should get my final bound copy of my thesis and it should soon be available online and in libraries <img src='http://www.jasonernst.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . For anyone interested in reading it, email me and I can send you a pdf copy. </p>
<p><span id="more-656"></span></p>
<p>Here are some pictures from the day:</p>
<p><center>
<div class="image"><img src="http://www.jasonernst.com/wp-content/uploads/2009/05/defense1-300x225.jpg" alt="M.Sc. Thesis Defense Jason Ernst, University of Guelph, May 15th 2009"/><br/>Preparing for the Defense before Everyone Arrives</div>
<p></center></p>
<p><center>
<div class="image"><img src="http://www.jasonernst.com/wp-content/uploads/2009/05/perwin-300x225.jpg" alt="Pervasive Computing and Wireless Network (PerWin) Research Group, University of Guelph"/><br/>Some Members of Pervasive Computing and Wireless Network (PerWin) Research Group, University of Guelph</div>
<p></center></p>
<p><center>
<div class="image"><img src="http://www.jasonernst.com/wp-content/uploads/2009/05/defense2-300x225.jpg" alt="M.Sc. Thesis Defense Jason Ernst, University of Guelph, May 15th 2009"/><br/>Answering Questions from the Committee at Guelph</div>
<p></center></p>
<p>After some relaxing, a conference in UK and some business related projects I will finally have some time (hopefully) to update the site with all the projects, articles and source I have been slowly working on the past few months in between working like crazy on my M.Sc. This fall I start my Ph.D. which will likely at least start from the work I just worked on.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jasonernst.com/2009/05/19/thesis-defense-a-success/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>COCOA 2008 Paper</title>
		<link>http://www.jasonernst.com/2008/08/15/cocoa-2008-paper/</link>
		<comments>http://www.jasonernst.com/2008/08/15/cocoa-2008-paper/#comments</comments>
		<pubDate>Fri, 15 Aug 2008 20:45:31 +0000</pubDate>
		<dc:creator>Jason Ernst</dc:creator>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Research]]></category>
		<category><![CDATA[2008]]></category>
		<category><![CDATA[COCOA]]></category>
		<category><![CDATA[Conference]]></category>
		<category><![CDATA[Hongbing Fan]]></category>
		<category><![CDATA[Jason B. Ernst]]></category>
		<category><![CDATA[Laurier]]></category>
		<category><![CDATA[Publication]]></category>
		<category><![CDATA[Wilfrid]]></category>

		<guid isPermaLink="false">http://www.jasonernst.com/?p=45</guid>
		<description><![CDATA[Just a small update, my first conference paper &#8220;Algorithms and Implementation for Interconnection Graph Problem&#8221; by Hongbing Fan, Christian Hundt, Yu-Liang Wu and myself, will be presented at COCOA 2008 in St. John&#8217;s Newfoundland on Friday, August 22nd at 9:40am by Dr. Fan. I am unable to attend since I am quite busy working on [...]]]></description>
			<content:encoded><![CDATA[<p>Just a small update, my first conference paper &#8220;Algorithms and Implementation for Interconnection Graph Problem&#8221; by Hongbing Fan, Christian Hundt, Yu-Liang Wu and myself, will be presented at COCOA 2008 in St. John&#8217;s Newfoundland on Friday, August 22nd at 9:40am by Dr. Fan.  I am unable to attend since I am quite busy working on my thesis and other work. You can view the program for the rest of the conference at the <a href="http://www.cs.uregina.ca/cocoa08/index.php?page=program" target="_blank" title="COCOA 2008 Program">COCOA website</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jasonernst.com/2008/08/15/cocoa-2008-paper/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Customized Reconfigurable Interconnection Network Paper Accepted to COCOA &#8217;08</title>
		<link>http://www.jasonernst.com/2008/05/01/customized-reconfigurable-interconnection-network-paper-accepted-to-cocoa-08/</link>
		<comments>http://www.jasonernst.com/2008/05/01/customized-reconfigurable-interconnection-network-paper-accepted-to-cocoa-08/#comments</comments>
		<pubDate>Thu, 01 May 2008 13:38:02 +0000</pubDate>
		<dc:creator>Jason Ernst</dc:creator>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Research]]></category>
		<category><![CDATA[Simulation]]></category>
		<category><![CDATA[2008]]></category>
		<category><![CDATA[COCOA]]></category>
		<category><![CDATA[Conference]]></category>
		<category><![CDATA[Hongbing Fan]]></category>
		<category><![CDATA[Jason B. Ernst]]></category>
		<category><![CDATA[Paper]]></category>
		<category><![CDATA[Progress]]></category>

		<guid isPermaLink="false">http://jasonernst.com/?p=19</guid>
		<description><![CDATA[Yesterday I found out that a paper I helped out with got accepted to COCOA 2008 Conference in St. John&#8217;s Newfoundland. This is the first academic paper I have worked on, and also the first one that has been accepted to a conference so I am extremely excited. The paper is on a greedy reduction [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday I found out that a paper I helped out with got accepted to <a href="http://www.cs.uregina.ca/cocoa08/index.php?page=home" title="COCOA 2008"target="_blank">COCOA 2008 Conference</a> in St. John&#8217;s Newfoundland. This is the first academic paper I have worked on, and also the first one that has been accepted to a conference so I am extremely excited. </p>
<p><span id="more-19"></span></p>
<p>The paper is on a greedy reduction algorithm that finds the minimum number of connections required for a set of routing requirements. I have probably mentioned something about it in earlier posts. The algorithm has quite a few applications. My advisor, Dr. Fan plans to use it for designing circuits, networks-on-chip and FPGAs and I have used it in a simulation for wireless networks. I will post the paper sometime after I get the go-ahead from my advisor, which I imagine will be sometime after it has been officially published.</p>
<div class="image" style="float:right;"><img src="http://www.jasonernst.com/wp-content/uploads/2008/05/st-john-2-small-300x225.jpg" alt="" title="st-john-2-small" width="300" height="225" class="alignnone size-medium wp-image-923" /></div>
<p>
I realize this post is somewhat sort and theres not much to it but theres not much time for posting these days since the advisors are pushing me to decide on a new direction for my thesis within the next couple of days. So back to work for me, yay reading!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jasonernst.com/2008/05/01/customized-reconfigurable-interconnection-network-paper-accepted-to-cocoa-08/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Customized Reconfigureable Interconnection Network (CRIN) Paper</title>
		<link>http://www.jasonernst.com/2008/03/08/customized-reconfigureable-interconnection-network-crin-paper/</link>
		<comments>http://www.jasonernst.com/2008/03/08/customized-reconfigureable-interconnection-network-crin-paper/#comments</comments>
		<pubDate>Sat, 08 Mar 2008 19:02:58 +0000</pubDate>
		<dc:creator>Jason Ernst</dc:creator>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Research]]></category>
		<category><![CDATA[Simulation]]></category>
		<category><![CDATA[CRIN]]></category>
		<category><![CDATA[Customized]]></category>
		<category><![CDATA[Hongbing Fan]]></category>
		<category><![CDATA[Interconnection]]></category>
		<category><![CDATA[Jason B. Ernst]]></category>
		<category><![CDATA[Networks]]></category>
		<category><![CDATA[Paper]]></category>
		<category><![CDATA[Progress]]></category>
		<category><![CDATA[Reconfigurable]]></category>

		<guid isPermaLink="false">http://jasonernst.com/?p=5</guid>
		<description><![CDATA[Recently, I have begun working on a new research project dealing with some graph theory with Dr. Hongbing Fan at Wilfrid Laurier University. As the title suggests the problem works with customized reconfigurable interconnection networks (CRINs). Dr. Fan has proposed an algorithm which attempts to minimize the connections within a network based on a set [...]]]></description>
			<content:encoded><![CDATA[<p>Recently, I have begun working on a new research project dealing with some graph theory with <a href="http://physcomp1.wlu.ca/~hfan/">Dr. Hongbing Fan</a> at Wilfrid Laurier University.  As the title suggests the problem works with customized reconfigurable interconnection networks (CRINs).  Dr. Fan has proposed an algorithm which attempts to minimize the connections within a network based on a set of routing requirements.</p>
<p style="text-align: center"><a href="http://jasonernst.com/wp-content/uploads/2008/03/interconnection-graph.gif"><img src="http://jasonernst.com/wp-content/uploads/2008/03/interconnection-graph.thumbnail.gif" alt="This is an example of an Interconnection Graph Problem" /></a></p>
<p align="center">An example Interconnection Graph Problem, Click to Enlarge</p>
<p>Since December of 2007 I have been working at implementing, testing and experimenting the algorithm as well as providing feedback and new ideas for improvements.  The paper is almost ready to be submitted for publication this so hopefully I will be able to provide a link to it in the future.</p>
<p>In relation with my thesis, I am planning on making use of the CRIN algorithm to attempt to optimize wireless network protocols. There still needs to be some experimentation and research to determine if in fact the algorithm can be used in this way however I feel optimistic that this is the case.</p>
<p>There is also the potential that the source code for the CRIN implementation may be made open source and released for use by anyone. If this is the case it will be uploaded to this site in the future.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jasonernst.com/2008/03/08/customized-reconfigureable-interconnection-network-crin-paper/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

