<?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; Computer Science</title>
	<atom:link href="http://www.jasonernst.com/category/computer-science/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>Why Blanket Wireless Coverage in Waterloo Failed, and Potential Solutions</title>
		<link>http://www.jasonernst.com/2011/07/22/why-blanket-wireless-coverage-in-waterloo-failed-and-potential-solutions/</link>
		<comments>http://www.jasonernst.com/2011/07/22/why-blanket-wireless-coverage-in-waterloo-failed-and-potential-solutions/#comments</comments>
		<pubDate>Fri, 22 Jul 2011 15:46:04 +0000</pubDate>
		<dc:creator>Jason Ernst</dc:creator>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Wireless Networks]]></category>
		<category><![CDATA[Atria]]></category>
		<category><![CDATA[Blanket Coverage]]></category>
		<category><![CDATA[KW Record]]></category>
		<category><![CDATA[Waterloo Region]]></category>
		<category><![CDATA[Wireless]]></category>

		<guid isPermaLink="false">http://www.jasonernst.com/?p=1723</guid>
		<description><![CDATA[Today the KW Record ran an article entitled &#8220;Blanket Wi-Fi plans unplugged in Waterloo Region and Guelph, but growing in Stratford&#8221;. I thought I&#8217;d throw in my two cents since this issue is very related to some of my research. Overall to me, the biggest factor that contributed to the failure of blanket wireless access [...]]]></description>
			<content:encoded><![CDATA[<p>Today the KW Record ran an article entitled <a href="http://www.therecord.com/news/local/article/567110--blanket-wi-fi-plans-unplugged-in-waterloo-region-and-guelph-but-growing-in-stratford">&#8220;Blanket Wi-Fi plans unplugged in Waterloo Region and Guelph, but growing in Stratford&#8221;</a>. I thought I&#8217;d throw in my two cents since this issue is very related to some of my research. Overall to me, the biggest factor that contributed to the failure of blanket wireless access in the Region of Waterloo was the cost of the service for users. From what I remember, it was on part with many high speed Internet plans. Why would someone pay the same price to have potentially slower, less secure service than competing wired services? </p>
<p>The Atria plan used large WiFi cells, with very expensive antennas (see the apartment building near University Plaza, which I believe was one of them).</p>
<p>Many other cities (much larger ones) have been very successful in providing blanket WiFi, using a completing different coverage model and cost model. The best example is San Francisco where a company named Meraki provides free wifi for over 100,000 people using their Mesh Router devices. These devices cost<a href="http://meraki.com/products/wireless/mr16#compare"> between $399 and $1500 each</a>, which is still expensive, but likely much cheaper than anything used by Atria. These devices likely have much lower range and handle dense areas compared with the atria cells which seem to be designed for large areas, and require many people to subscribe to pay for their costs. The argument in the article that WiFi coverage in metropolitan areas is difficult seems like a terrible attitude to have for an area that has a reputation as a high tech leader. San Francisco likely has much greater challenges in this regard compared to our tiny city. </p>
<p><center>
<div class="image"><a href="http://www.jasonernst.com/wp-content/uploads/2011/07/meraki_sf.jpg"><img src="http://www.jasonernst.com/wp-content/uploads/2011/07/meraki_sf-300x216.jpg" alt="" title="meraki_sf" width="300" height="216" class="aligncenter size-medium wp-image-1731" /></a><br/>Example coverage map in San Francisco</div>
<p></center></p>
<p>Instead of using these expensive devices, much cheaper devices such as linksys wrt routers could be used. These routers support linux, and because of this much customization is possible such as mesh networking. While these devices are less reliable than the previous more expensive solutions, it may be a good way to at least get the network started cheaply. Additionally, areas which are not used by as many people could be covered with cheaper routers, while areas with more dense traffic may be covered by expensive ones.</p>
<p>The argument in the article that WiFi networks are unnecessary because of cellular networks is ludicrous! If that is the case, why are every smartphone and other device including WiFi radios in them? It&#8217;s because data on cellular networks is way to expensive. Any place where a device can get free or low cost WiFi should be used instead of the cellular network. One large problem with this at the moment, however is that it is not seamless to go from a cellular network to a wifi network. For example, it is often not possible to carry on a phone call while switching networks, or continue downloading or steaming without interruption. This will change with much of the <a href="http://www.uoguelph.ca/~jernst/research.shtml" title="Heterogeneous Wireless Research">research in heterogeneous networks</a>.</p>
<p>One potential model that hasn&#8217;t been explored much is community wireless networks. In this case, devices could be provided to anyone willing to provide access to their own home network for the community. The incentive could be either donations from users, or a very small fee (2 &#8211; 5 dollars per month) which is distributed to providers. Additionally, anyone who provides a part of the network is able to get on free to other parts of the network. Of course, there&#8217;s nothing to stop the larger companies like Rogers and Bell from creating the same type of value added service. Since so many people already have wireless in their home using Rogers and Bell, they could create some type of login where you take your bandwidth quota with you and have access to anyone else&#8217;s network who is also participating. This way, you are not using their bandwidth cap (only their &#8220;speed&#8221; &#8211; which may introduce a whole other range of problems <img src='http://www.jasonernst.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> )</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jasonernst.com/2011/07/22/why-blanket-wireless-coverage-in-waterloo-failed-and-potential-solutions/feed/</wfw:commentRss>
		<slash:comments>0</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>Points to consider for Usage Based Billing (UBB) in Canada</title>
		<link>http://www.jasonernst.com/2011/02/08/points-to-consider-for-usage-based-billing-ubb-in-canada/</link>
		<comments>http://www.jasonernst.com/2011/02/08/points-to-consider-for-usage-based-billing-ubb-in-canada/#comments</comments>
		<pubDate>Tue, 08 Feb 2011 20:23:57 +0000</pubDate>
		<dc:creator>Jason Ernst</dc:creator>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Wireless Networks]]></category>
		<category><![CDATA[2011]]></category>
		<category><![CDATA[Canada]]></category>
		<category><![CDATA[ICC 2010]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[ISP]]></category>
		<category><![CDATA[Price]]></category>
		<category><![CDATA[Service]]></category>
		<category><![CDATA[UBB]]></category>
		<category><![CDATA[Usage Based Billing]]></category>

		<guid isPermaLink="false">http://www.jasonernst.com/?p=1273</guid>
		<description><![CDATA[While I make no claims to understand the economics of the agreements between ISPs for forwarding traffic between each other, the point of this article is to provide a unique perspective since I am a graduate student in the networking field. I also briefly outline some potential techniques that could improve the situation (although none [...]]]></description>
			<content:encoded><![CDATA[<p>While I make no claims to understand the economics of the agreements between ISPs for forwarding traffic between each other, the point of this article is to provide a unique perspective since I am a graduate student in the networking field. I also briefly outline some potential techniques that could improve the situation (although none can really solve the problem of the alleged gap forming between revenue and expense). My personal opinion is against UBB since I believe it is against innovation and will make Canada less competitive. Charging per-byte rates will become far too expensive for many people to use the Internet in the same way as people in other countries (or those people with lots of extra money). It will result in contributing to the gap between have and have-nots where poorer people in the country are excluded from the same access to content and opportunity that others have. I try not to focus on arguing for UBB in this article because there are several existing articles which argue this quite well. (<a href="http://opinion.financialpost.com/2011/02/07/internet-usage-debate-the-real-myths/">Financial Post</a> <a href="http://www.theglobeandmail.com/news/technology/tech-news/ubb-internet/the-public-is-right-to-be-cynical-of-internet-usage-regulators/article1898151/">The Globe and Mail</a>).</p>
<p>In May of 2010, I attended an IEEE conference called the International Communications Conference (ICC 2010) in Capetown, South Africa. This conference is considered the one of the top conferences by the IEEE communications society and is attended by many experts in the communications field. I found one of the keynote speeches by Dr. Steven D. Gray, Head &#038; Vice President Corporate Research, Huawei Technologies to be especially relevant to the current debate in Canada over usage based billing (UBB). The keynote is available free online from the <a href="http://www.comsoc.org/webcasts/view/accelerating-growth-future-services-media-centric-networks">IEEE ComSoc</a> (please note, the keynote I am referencing here starts at about 51 minutes in the presentation). </p>
<p>While the key point about profitability deals with wireless carriers, it may also be relevant to wired network providers. Especially in Canada for the following reasons:</p>
<ol style="margin-left: 20px; margin-bottom: 10px; ">
<li>The vast, sparse country which must be connected</li>
<li>The constant upgrades to equipment required</li>
<li>The limited capabilities of backbone and infrastructure networks &amp; increasing speeds of user connections</li>
<li>Steady growth in traffic from users</li>
</ol>
<h2>1. The vast, sparse country which must be connected</h2>
<p>Compared to other countries in the world, Canada is very sparse. According to a <a href="http://en.wikipedia.org/wiki/List_of_sovereign_states_and_dependent_territories_by_population_density">Wikipedia article surveying population density around the world</a>, Canada places 228 in the world. According to <a href="http://cache.gawker.com/assets/images/gizmodo/2009/10/raw.jpg">this figure</a> (from Gizmodo), Canada ranks 8th in the world for average broadband speeds. Compared with the USA, which ranks 15th (and has a population density almost 10 times higher than Canada), we have less than twice the average speed for roughly the double the cost. Considering our low density and similar geographic size, one would expect we would pay much more.</p>
<div class="image" style="float:left;"><a href="http://www.jasonernst.com/wp-content/uploads/2011/02/connection-map.png"><img src="http://www.jasonernst.com/wp-content/uploads/2011/02/connection-map-300x300.png" alt="" title="connection-map" width="300" height="300" class="aligncenter size-medium wp-image-1285" /></a>
<p style="text-align: center;">Map of the Internet [<a href="http://www.opte.org/maps/">http://www.opte.org/maps/</a>]</p>
</div>
<h2>2. The constant upgrades to equipment required</h2>
<p>The communications industry is constantly evolving as engineers and scientists figure out how to make faster connections or find new ways to communicate (for example, 10 mbps ethernet to 100 mbps to gigabit and beyond), (example 2: Ethernet to fibre optic, or even next generation wireless networks). Every time something new comes out or improvements are made, the companies must put money into making it work with what they already have, deploy new equipment and so forth. Often because the networks are becoming more complex it requires hiring more people to manage them (which may eventually be solved by autonomous networking, but that&#8217;s a different story). </p>
<p>Another example of expense to keep up to date in Canada is Bell Canada. Many people with Bell Internet also have wireless access points provided by Bell. Unfortunately, these access points default to (or in some cases only support) WEP encryption. This encryption is not secure at all and can be broken by your average teenager with instruction off <a href="http://www.youtube.com/watch?v=3seUWVK_Tb0">youtube</a>. However it could be argued in hindsight this type of expense is the company&#8217;s fault.</p>
<p>Furthermore, to increase capacity in the network, it is not as simple as just adding another link between an under-supplied area. Consider a small town where a few people make use of the majority of the connection cause poor performance for the others in the town. This town may be a candidate for increased capacity, but by adding another connection the company does not stand to gain any increase in subscribers and thus may stand to lose money. Now expand this example to larger cities where higher and higher proportions of the population are using more and more of their connection to the point where almost everyone is straining the infrastructure. There are solutions to this type of problem though. Some companies in the US and other places make use of traffic shaping (which while unpopular is a cheaper alternative to the user). Perhaps two types of plans could be put in place, one with traffic shaping and unlimited usage, or one with no traffic shaping and limited usage.</p>
<h2>3. The limited capabilities of backbone and infrastructure networks &amp; increasing speeds of user connections</h2>
<p>One of the problems with the increased cost to the providers is the increased speed of user connections. Allowing users to have faster connections means they can request more information at once. Imagine many people flushing their toilets at the same time where the pipe at the road isnt big enough to handle all of the water at once. This is what has been allowed to happen. The problem is further compounded because it is not as simple as water simply flowing through pipes. At each junction, decisions must be made on the direction of the flow. If too much traffic arrives at once junction, the time it takes to make a decision is slower than the rate new traffic is appearing and big problems happen.</p>
<h2>4. Steady growth in traffic from users</h2>
<p>As can be seen in some of the figures in the ICC keynote, traffic from users is growing exponentially. Unfortunately, the service providers&#8217; revenue is usually growing linearly, so there is eventually a point where it is not profitable for the companies to provide Internet service (assuming the cost to provide exponential traffic grows exponentially). This is the most compelling point for usage based-billing. Unless we can somehow find a way to reduce the growth of data, the only way to retain profitable ISPs is to increase the revenue. </p>
<div class="image" style="float:right;"><a href="http://www.jasonernst.com/wp-content/uploads/2011/02/cisco.jpg"><img src="http://www.jasonernst.com/wp-content/uploads/2011/02/cisco-300x202.jpg" alt="" title="cisco" width="300" height="202" class="aligncenter size-medium wp-image-1289" /></a>
<p style="text-align: center;">Internet growth [<a href="http://www.cisco.com/en/US/solutions/collateral/ns341/ns525/ns537/ns705/ns827/white_paper_c11-481374_ns827_Networking_Solutions_White_Paper.html">Cisco</a>]</p>
</div>
<h2>5. Conflicting interests between user service and shareholders profits &amp; the disconnect between what you get and what is advertised</h2>
<p>This is another important problem with ISPs. Perhaps this is the reason that the infrastructure managed to get into its current state (where it cannot handle everyone making full use of their advertised connections). In order to gain a competitive advantage over competing ISPs, each company often advertises their maximum potential connection speeds. There is never any mention of the network past the point where your house connects to the ISP. Sure if no one else in your neighbourhood is using the connection you might get close to the advertised speed, but as many people know, you often don&#8217;t get close. From the shareholder point of view, you want the company to spend as little as possible on infrastructure. Perhaps it may be necessary the enforce a rule that companies must be able to provide the full advertised speed, regardless of how many other people are on the network. Of course, this would make the Internet much more expensive.</p>
<h2>6. Potential Solutions instead of UBB</h2>
<p>There are many promising technical solutions to some of the problems that are causing the gap between cost and revenue in Internet technologies, however many of them may not make enough of an impact, or are still too premature to cause a difference yet. So in the meantime something must be done.</p>
<p>In the case of providing video services or other multimedia streaming services such as Netflix, LastFM etc. technologies such as multi-casting may be used to deliver common data to a group of users with one packet (in the unicast model, one packet is sent over and over again for every user, even if they are watching the same content).</p>
<p>To reduce the cost of human maintenance and  oversight over the networks, applying autonomic computing techniques to networks so that they can self-manage, self-protect etc. may be beneficial.</p>
<p>Exploiting peer-to-peer, caching and other technologies that reduce communications over the large distances on the Internet may help reduce the cost of delivering traffic on the Internet.</p>
<p>Providing tiered Internet service, where users pay for different service levels may be another model altogether that allows companies to remain competitive without usage based billing. Make traffic that causes high strain on the networks (such as streaming video, real-time traffic etc.) more expensive than traffic that is delay tolerant and has lower requirements (web, email etc.)</p>
<p>Perhaps the government itself should take a more active role in providing Internet infrastructure in Canada if the Internet is seen as another piece of infrastructure like roads, bridges and electricity.</p>
<h2>Concluding remarks</h2>
<p>Of course, there are many assumptions to the case for UBB. The assumption that the cost for service providers is growing exponentially is the biggest and most important. Wired network access doesn&#8217;t have the same problems wireless has (the broadcast, limited bandwidth medium, interference etc.) so the comparisons may not actually be valid. The case becomes complicated by the fact that many ISPs are also in the business of providing wireless service, media services (tv, radio, newspaper etc.) that causes conflicts of interest.</p>
<p>The trouble I have with charging the heaviest users is that everyone seems to be trending towards using more and more traffic. In my own experience with large ISPs I feel like I&#8217;m always getting less for more money (usage caps have been getting lower and lower, yet the bill keeps going up). The advertised speeds of the networks are going up, but the capacity seems to be falling since we can get more faster, but less overall.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jasonernst.com/2011/02/08/points-to-consider-for-usage-based-billing-ubb-in-canada/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>IEEE Format References &amp; Citations for MS Word</title>
		<link>http://www.jasonernst.com/2010/11/29/ieee-format-references-citations-for-ms-word/</link>
		<comments>http://www.jasonernst.com/2010/11/29/ieee-format-references-citations-for-ms-word/#comments</comments>
		<pubDate>Mon, 29 Nov 2010 19:36:59 +0000</pubDate>
		<dc:creator>Jason Ernst</dc:creator>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Research]]></category>
		<category><![CDATA[2010]]></category>
		<category><![CDATA[Format]]></category>
		<category><![CDATA[IEEE]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Office]]></category>
		<category><![CDATA[Reference]]></category>
		<category><![CDATA[Word]]></category>

		<guid isPermaLink="false">http://www.jasonernst.com/?p=1186</guid>
		<description><![CDATA[Today I was working on my thesis / QE document and wanted to have IEEE style referencing included in my document (using the built in references features). At first I started trying to modify one of the existing templates (found in /Program Files/Microsoft Office/Office12/Bibliography/Styles) but quickly found this would take too much time. So when [...]]]></description>
			<content:encoded><![CDATA[<p>Today I was working on my thesis / QE document and wanted to have IEEE style referencing included in my document (using the built in references features). At first I started trying to modify one of the existing templates (found in /Program Files/Microsoft Office/Office12/Bibliography/Styles) but quickly found this would take too much time. So when I googled, I found some clever people had already done the work for this. See the following two XSL styles that are based on the IEEE referencing format:</p>
<p>Bradley Farnsworth: <a href="http://bfarns.blogspot.com/2008/02/ieee-bibliography-xsl-style-sheet-for.html">http://bfarns.blogspot.com/2008/02/ieee-bibliography-xsl-style-sheet-for.html</a></p>
<p>Bibword: <a href="http://bibword.codeplex.com/releases/view/15365">http://bibword.codeplex.com/releases/view/15365</a></p>
<p>I found the second version to be what I was looking for, since the first version did something weird with the city and publisher that I wasn&#8217;t fond of. Note: if you use the second link, make sure you enter the names in the correct format or else you will also end up with weirdness&#8230;the format is: lastname1, firstname1; lastname2, firstname2; &#8230;</p>
<p>Note2: This was tested with MS Word 2007. I&#8217;m not sure if it works with the latest, so if you find out, post a comment!</p>
<p>Here is an example of what the result looks like:<br />
<center>
<div class="image"><a href="http://www.jasonernst.com/wp-content/uploads/2010/11/ieee-ref.jpg"><img src="http://www.jasonernst.com/wp-content/uploads/2010/11/ieee-ref-300x158.jpg" alt="IEEE Word 2007 - Example Reference Style" title="IEEE Word 2007 - Example Reference Style" width="300" height="158" class="aligncenter size-medium wp-image-1265" /></a></div>
<p></center></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jasonernst.com/2010/11/29/ieee-format-references-citations-for-ms-word/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BWCCA 2010 &#8211; Adaptive Mixed Bias Resource Allocation for Wireless Mesh Networks</title>
		<link>http://www.jasonernst.com/2010/11/04/bwcca-2010-adaptive-mixed-bias-resource-allocation-for-wireless-mesh-networks/</link>
		<comments>http://www.jasonernst.com/2010/11/04/bwcca-2010-adaptive-mixed-bias-resource-allocation-for-wireless-mesh-networks/#comments</comments>
		<pubDate>Thu, 04 Nov 2010 05:24:39 +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[Allocation]]></category>
		<category><![CDATA[Bias]]></category>
		<category><![CDATA[BWCCA]]></category>
		<category><![CDATA[Ernst]]></category>
		<category><![CDATA[Fukuoka]]></category>
		<category><![CDATA[Japan]]></category>
		<category><![CDATA[Jason]]></category>
		<category><![CDATA[Mesh]]></category>
		<category><![CDATA[Mixed]]></category>
		<category><![CDATA[Network]]></category>
		<category><![CDATA[Nkwe]]></category>
		<category><![CDATA[Resource]]></category>
		<category><![CDATA[Thabo]]></category>
		<category><![CDATA[Wireless]]></category>

		<guid isPermaLink="false">http://www.jasonernst.com/?p=1164</guid>
		<description><![CDATA[Today I presented a recent paper on &#8220;Adaptive Mixed Bias Resource Allocation for Wireless Mesh Networks&#8221; at the BWCCA conference in Fukuoka Japan. The paper is authored by myself and Thabo Nkwe from the University of Guelph. The abstract is below: Abstract: In wireless networks, conditions may change rapidly and unpredictably. Often wireless networks are [...]]]></description>
			<content:encoded><![CDATA[<p>Today I presented a recent paper on &#8220;Adaptive Mixed Bias Resource Allocation for Wireless Mesh Networks&#8221; at the BWCCA conference in Fukuoka Japan. The paper is authored by myself and Thabo Nkwe from the University of Guelph. The abstract is below:</p>
<p>Abstract:<br />
In wireless networks, conditions may change rapidly and unpredictably. Often wireless networks are not designed to adapt to these changing conditions and perform poorly when they become congested. The multi-hop broadcast nature of wireless mesh networks amplifies the problem of poor wireless performance. Mixed bias scheduling has previously been applied successfully to wireless mesh networks however, it still suffers from similar problems when conditions change rapidly. In this work we propose an adaptive mixed bias (AMB) algorithm which uses a tabu search approach to change based on delay and dropped packets in the network. The proposed scheduling approach consists of three important algorithms, namely, the tabu search algorithm, move generation, and utility function. The adaptive mixed bias approach is compared against IEEE 802.11 and the non-adaptive mixed bias approach. The performance is evaluated using the packet delivery ratio and average end-to-end delay metrics.</p>
<p>Here are the slides from the talk: <a href='http://www.jasonernst.com/wp-content/uploads/2010/11/BWCCA-NGWMN2010-final.pdf'>BWCCA-NGWMN2010-final (pdf)</a><br />
and here is the link to the pdf from the conference: <a href="http://www.computer.org/portal/web/csdl/doi/10.1109/BWCCA.2010.144">Adaptive Mixed Bias Resource Allocation for Wireless Mesh Networks (pfd)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jasonernst.com/2010/11/04/bwcca-2010-adaptive-mixed-bias-resource-allocation-for-wireless-mesh-networks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ACM Events &amp; Website</title>
		<link>http://www.jasonernst.com/2010/10/07/acm-events-website/</link>
		<comments>http://www.jasonernst.com/2010/10/07/acm-events-website/#comments</comments>
		<pubDate>Thu, 07 Oct 2010 14:21:46 +0000</pubDate>
		<dc:creator>Jason Ernst</dc:creator>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Education]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[ACM]]></category>
		<category><![CDATA[Association for Computing Machinery]]></category>
		<category><![CDATA[Dan Ashlock]]></category>
		<category><![CDATA[Programming Contest]]></category>
		<category><![CDATA[Speaker Series]]></category>
		<category><![CDATA[University of Guelph]]></category>
		<category><![CDATA[Website]]></category>

		<guid isPermaLink="false">http://www.jasonernst.com/?p=1115</guid>
		<description><![CDATA[Recently the ACM Student Group at the University of Guelph (which I am currently chair of) has been busy with some of our first events. The first was a programming contest modeled after the ACM-ICPC. The event was briefly featured in the fall issue of XRDS (crossroads magazine) (look for the article &#8220;ACM Chapter News: [...]]]></description>
			<content:encoded><![CDATA[<p>Recently the ACM Student Group at the University of Guelph (which I am currently chair of) has been busy with some of our first events. The first was a programming contest modeled after the ACM-ICPC. The event was briefly featured in the fall issue of <a href="http://mags.acm.org/crossroads/fall2010">XRDS (crossroads magazine)</a> (look for the article &#8220;ACM Chapter News: From Ontario to Hyderabad&#8221;). The purpose of the event was to gain enough interest within the department to field a couple of teams for the annual competition. Our school has not had a team for many years. Overall the event was a success. We managed to attract two sponsors: <a href="http://www.freshbooks.com/">Freshbooks</a> and the <a href="http://www.socs.uoguelph.ca/">School of Computer Science at the University of Guelph</a> who provided us with great prizes and t-shirts and refreshments for the participants. We now have many students interested in the programming contest teams. Below are some of the pictures from the event.</p>
<p><center>
<div class="image"><a href="http://www.jasonernst.com/wp-content/uploads/2010/10/1.jpg"><img src="http://www.jasonernst.com/wp-content/uploads/2010/10/1-300x225.jpg" alt="ACM Guelph Programming Contest" title="ACM Guelph Programming Contest" width="300" height="225" class="aligncenter size-medium wp-image-1118" /></a><a href="http://www.jasonernst.com/wp-content/uploads/2010/10/2.jpg"><img src="http://www.jasonernst.com/wp-content/uploads/2010/10/2-300x225.jpg" alt="ACM Guelph Programming Contest" title="ACM Guelph Programming Contest" width="300" height="225" class="aligncenter size-medium wp-image-1119" /></a></div>
<div class="image"><a href="http://www.jasonernst.com/wp-content/uploads/2010/10/3.jpg"><img src="http://www.jasonernst.com/wp-content/uploads/2010/10/3-300x225.jpg" alt="ACM Guelph Programming Contest" title="ACM Guelph Programming Contest" width="300" height="225" class="aligncenter size-medium wp-image-1120" /></a><a href="http://www.jasonernst.com/wp-content/uploads/2010/10/4.jpg"><img src="http://www.jasonernst.com/wp-content/uploads/2010/10/4-300x225.jpg" alt="ACM Guelph Programming Contest" title="ACM Guelph Programming Contest" width="300" height="225" class="aligncenter size-medium wp-image-1121" /></a></div>
<div class="image"><a href="http://www.jasonernst.com/wp-content/uploads/2010/10/5.jpg"><img src="http://www.jasonernst.com/wp-content/uploads/2010/10/5-300x225.jpg" alt="ACM Guelph Programming Contest" title="ACM Guelph Programming Contest" width="300" height="225" class="aligncenter size-medium wp-image-1122" /></a><a href="http://www.jasonernst.com/wp-content/uploads/2010/10/6.jpg"><img src="http://www.jasonernst.com/wp-content/uploads/2010/10/6-300x225.jpg" alt="ACM Guelph Programming Contest" title="ACM Guelph Programming Contest" width="300" height="225" class="aligncenter size-medium wp-image-1116" /></a></div>
<p></center></p>
<p>On top of the programming event, we have begun a speaker series at the University of Guelph. The goal here is to get enough people coming out so that we can eventually host an ACM distinguished speaker. Our first speaker was Dr. Dan Ashlock from the department of Mathematics at the University of Guelph. His talk was on video game content creation and was quite interesting. The slides for the talk are available on the ACM guelph website. The turnout was very good for the first talk and we hope it continues in the future. (for anyone interested in attending we also provide snacks!) There are more talks scheduled for throughout the semester from professors, students and industry speakers.</p>
<p>Lastly, we have launched a first version of our website: <a href="http://guelph.acm.org">http://guelph.acm.org</a>. The main purpose of this page is to display upcoming and past events. In the future we also intend on having a vote available for the distinguished speaker we are inviting to Guelph as well as the ability to vote on dates for upcoming events so that we can get the highest attendance possible.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jasonernst.com/2010/10/07/acm-events-website/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Research Day &#8211; Summer 2010</title>
		<link>http://www.jasonernst.com/2010/08/30/research-day-summer-2010/</link>
		<comments>http://www.jasonernst.com/2010/08/30/research-day-summer-2010/#comments</comments>
		<pubDate>Mon, 30 Aug 2010 14:36:21 +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[Access]]></category>
		<category><![CDATA[Heterogeneous]]></category>
		<category><![CDATA[Radio]]></category>
		<category><![CDATA[RAT]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Wireless]]></category>

		<guid isPermaLink="false">http://www.jasonernst.com/?p=1093</guid>
		<description><![CDATA[Tomorrow I present at Research Day at University of Guelph at 1:30pm. Here is the abstract for the presentation: Title: Radio Resource Management in Heterogeneous Wireless Networks Abstract: Wireless networks are quickly becoming pervasive allowing users to stay connected anytime anywhere. However, current implementations are not seamless. There are many different radio access technologies (RATs), [...]]]></description>
			<content:encoded><![CDATA[<p>Tomorrow I present at Research Day at University of Guelph at 1:30pm. Here is the abstract for the presentation:</p>
<p><strong>Title</strong>: Radio Resource Management in Heterogeneous Wireless Networks</p>
<p><strong>Abstract</strong>: <em>Wireless networks are quickly becoming pervasive allowing users to stay connected anytime<br />
anywhere. However, current implementations are not seamless. There are many different radio<br />
access technologies (RATs), for example 802.11 (Wifi), 802.15 (Bluetooth, Zigbee), 802.16 (WiMAX)<br />
and 3g cellular / mobile technologies which are not inter-operable. The aim of heterogeneous<br />
wireless networking is to bridge the technological gap between the existing equipment and software.<br />
When this occurs, the wireless spectrum may be used more efficiently and it is expected users will<br />
have a better experience using the networks. Ideally, the devices should be able to select the best<br />
RAT at a given moment in time based on some criteria, for example cost or capacity. A background<br />
on the architecture of heterogeneous networks will be presented. Problems such as handover, radio<br />
resource management and quality of service (QoS) will be discussed and a direction for further<br />
study will be established.</em></p>
<p>Update: Here are the slides from the presentation for those who are interested:<a href='http://www.jasonernst.com/wp-content/uploads/2010/08/researchday2010.pdf'>Research Day 2010 (pdf) &#8211; Jason Ernst</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jasonernst.com/2010/08/30/research-day-summer-2010/feed/</wfw:commentRss>
		<slash:comments>0</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>
	</channel>
</rss>

