<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Software Evolved</title>
	
	<link>http://www.peterfranza.com</link>
	<description />
	<lastBuildDate>Tue, 20 Jul 2010 15:37:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/SoftwareEvolved" /><feedburner:info uri="softwareevolved" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>GWT ScrollPanel for Touch Screens</title>
		<link>http://feedproxy.google.com/~r/SoftwareEvolved/~3/Xup5VzPqmS8/</link>
		<comments>http://www.peterfranza.com/2010/07/15/gwt-scrollpanel-for-touch-screens/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 18:27:37 +0000</pubDate>
		<dc:creator>pfranza</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[gwt]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.peterfranza.com/?p=508</guid>
		<description><![CDATA[Getting this working is easier than you think. Basically the only tricky bit is that the touch object allows for multiple fingers they are represented in the array &#8216;touches[]&#8216;. Since we are only scrolling we only need to worry about the first finger which is why I use touches[0].screenY. Enjoy. 1 2 3 4 5 [...]]]></description>
			<content:encoded><![CDATA[<p>Getting this working is easier than you think.  Basically the only tricky bit is that the touch object allows for multiple fingers they are represented in the array &#8216;touches[]&#8216;. Since we are only scrolling we only need to worry about the first finger which is why I use touches[0].screenY.  Enjoy.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
</pre></td><td class="code"><pre class="" style="font-family:monospace;">package com.peterfranza.gwt.mobileui.client.widgets;
&nbsp;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.user.client.ui.ScrollPanel;
&nbsp;
/**
 * 
 * @author peter.franza
 *
 */
public class TouchScrollPanel extends ScrollPanel <span class="br0">&#123;</span>
&nbsp;
	private int initialTouchX = -<span style="">1</span>;
	private int initialTouchY = -<span style="">1</span>;
	private int initialHorizontalOffset;
	private int initialVerticalOffset;
	private boolean moved = false;
&nbsp;
	<span class="br0">&#123;</span>
		attachTouch<span class="br0">&#40;</span>getElement<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;
	<span class="br0">&#125;</span>
&nbsp;
	public TouchScrollPanel<span class="br0">&#40;</span>VerticalPanel body<span class="br0">&#41;</span> <span class="br0">&#123;</span>
		super<span class="br0">&#40;</span>body<span class="br0">&#41;</span>;
	<span class="br0">&#125;</span>
&nbsp;
	private native void attachTouch<span class="br0">&#40;</span>JavaScriptObject ele<span class="br0">&#41;</span> /*-<span class="br0">&#123;</span>	
		var ref = this;
		ele.ontouchstart = function<span class="br0">&#40;</span>evt<span class="br0">&#41;</span><span class="br0">&#123;</span>
	  		evt.preventDefault<span class="br0">&#40;</span><span class="br0">&#41;</span>;	
	  		ref.@com.orci.datagateway.OpenIMWeb.mobile.client.widgets.TouchScrollPanel::setInitialTouch<span class="br0">&#40;</span>II<span class="br0">&#41;</span><span class="br0">&#40;</span>evt.touches<span class="br0">&#91;</span><span style="">0</span><span class="br0">&#93;</span>.screenX, evt.touches<span class="br0">&#91;</span><span style="">0</span><span class="br0">&#93;</span>.screenY<span class="br0">&#41;</span>;
		<span class="br0">&#125;</span>	
		ele.ontouchmove = function<span class="br0">&#40;</span>evt<span class="br0">&#41;</span><span class="br0">&#123;</span>
	  		evt.preventDefault<span class="br0">&#40;</span><span class="br0">&#41;</span>;	
	  		ref.@com.orci.datagateway.OpenIMWeb.mobile.client.widgets.TouchScrollPanel::doScroll<span class="br0">&#40;</span>II<span class="br0">&#41;</span><span class="br0">&#40;</span>evt.touches<span class="br0">&#91;</span><span style="">0</span><span class="br0">&#93;</span>.screenX, evt.touches<span class="br0">&#91;</span><span style="">0</span><span class="br0">&#93;</span>.screenY<span class="br0">&#41;</span>;
		<span class="br0">&#125;</span>		
		ele.ontouchend = function<span class="br0">&#40;</span>evt<span class="br0">&#41;</span><span class="br0">&#123;</span>
			evt.preventDefault<span class="br0">&#40;</span><span class="br0">&#41;</span>;
			ref.@com.orci.datagateway.OpenIMWeb.mobile.client.widgets.TouchScrollPanel::setEndTouch<span class="br0">&#40;</span>II<span class="br0">&#41;</span><span class="br0">&#40;</span>evt.pageX, evt.pageY<span class="br0">&#41;</span>;
		<span class="br0">&#125;</span>		
	<span class="br0">&#125;</span>-*/;
&nbsp;
	private native void fireClick<span class="br0">&#40;</span>int x, int y<span class="br0">&#41;</span> /*-<span class="br0">&#123;</span>	
		var theTarget = $doc.elementFromPoint<span class="br0">&#40;</span>x, y<span class="br0">&#41;</span>;
		if <span class="br0">&#40;</span>theTarget.nodeType == <span style="">3</span><span class="br0">&#41;</span> theTarget = theTarget.parentNode;
&nbsp;
		var theEvent = $doc.createEvent<span class="br0">&#40;</span>'MouseEvents'<span class="br0">&#41;</span>;
		theEvent.initEvent<span class="br0">&#40;</span>'click', true, true<span class="br0">&#41;</span>;
		theTarget.dispatchEvent<span class="br0">&#40;</span>theEvent<span class="br0">&#41;</span>;
	<span class="br0">&#125;</span>-*/;
&nbsp;
&nbsp;
	@SuppressWarnings<span class="br0">&#40;</span>&quot;unused&quot;<span class="br0">&#41;</span>
	private void setInitialTouch<span class="br0">&#40;</span>int x, int y<span class="br0">&#41;</span> <span class="br0">&#123;</span>
		initialVerticalOffset = getScrollPosition<span class="br0">&#40;</span><span class="br0">&#41;</span>;
		initialHorizontalOffset = getHorizontalScrollPosition<span class="br0">&#40;</span><span class="br0">&#41;</span>;
&nbsp;
		initialTouchX = x;
		initialTouchY = y;
		moved = false;
&nbsp;
	<span class="br0">&#125;</span>
&nbsp;
	@SuppressWarnings<span class="br0">&#40;</span>&quot;unused&quot;<span class="br0">&#41;</span>
	private void doScroll<span class="br0">&#40;</span>int x, int y<span class="br0">&#41;</span> <span class="br0">&#123;</span>
		if <span class="br0">&#40;</span>initialTouchY != -<span style="">1</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
			moved = true;
			int vDelta = initialTouchY - y;
			int hDelta = initialTouchX - x;
			setScrollPosition<span class="br0">&#40;</span>vDelta + initialVerticalOffset<span class="br0">&#41;</span>;
			setHorizontalScrollPosition<span class="br0">&#40;</span>hDelta + initialHorizontalOffset<span class="br0">&#41;</span>;
		<span class="br0">&#125;</span>
	<span class="br0">&#125;</span>
&nbsp;
	@SuppressWarnings<span class="br0">&#40;</span>&quot;unused&quot;<span class="br0">&#41;</span>
	private void setEndTouch<span class="br0">&#40;</span>int x, int y<span class="br0">&#41;</span> <span class="br0">&#123;</span>
		if <span class="br0">&#40;</span>!moved<span class="br0">&#41;</span> <span class="br0">&#123;</span>
			fireClick<span class="br0">&#40;</span>x, y<span class="br0">&#41;</span>;
		<span class="br0">&#125;</span>
		initialTouchX = -<span style="">1</span>;
		initialTouchY = -<span style="">1</span>;
	<span class="br0">&#125;</span> 
<span class="br0">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.peterfranza.com/2010/07/15/gwt-scrollpanel-for-touch-screens/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.peterfranza.com/2010/07/15/gwt-scrollpanel-for-touch-screens/</feedburner:origLink></item>
		<item>
		<title>GWT loading remote JSONP XSS</title>
		<link>http://feedproxy.google.com/~r/SoftwareEvolved/~3/rTassVP3lfk/</link>
		<comments>http://www.peterfranza.com/2010/06/09/gwt-loading-remote-jsonp-xss/#comments</comments>
		<pubDate>Wed, 09 Jun 2010 13:18:39 +0000</pubDate>
		<dc:creator>pfranza</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[gwt]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[xss]]></category>

		<guid isPermaLink="false">http://www.peterfranza.com/?p=502</guid>
		<description><![CDATA[In almost all browsers there is one thing that everybody wants to do, but you just can&#8217;t, Load cross site data. That is you can&#8217;t unless you are using JSONP. Basically you load the data into its own script tag tell the server you are loading it from to wrap the data in a callback [...]]]></description>
			<content:encoded><![CDATA[<p>In almost all browsers there is one thing that everybody wants to do, but you just can&#8217;t, Load cross site data.  That is you can&#8217;t unless you are using JSONP.  Basically you load the data into its own script tag tell the server you are loading it from to wrap the data in a callback that you have defined.  This will fire an event after the data has loaded.  Perfect.</p>
<p>I wanted to use it in GWT &#8230; now I can.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
</pre></td><td class="code"><pre class="" style="font-family:monospace;">package com.peterfranza.gwt.cle.client;
&nbsp;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.ui.RootPanel;
&nbsp;
public class JSONPLoader <span class="br0">&#123;</span>
&nbsp;
	private LoaderCallback callback;
&nbsp;
	public void load<span class="br0">&#40;</span>String jsonUrl, LoaderCallback callback<span class="br0">&#41;</span> <span class="br0">&#123;</span>
		this.callback = callback;
		String callbackString = &quot;jsonLoad_&quot; + 
			DOM.createUniqueId<span class="br0">&#40;</span><span class="br0">&#41;</span>.replace<span class="br0">&#40;</span>&quot;-&quot;, &quot;_&quot;<span class="br0">&#41;</span> + &quot;_callback&quot;;
		String url = jsonUrl + <span class="br0">&#40;</span>jsonUrl.contains<span class="br0">&#40;</span>&quot;?&quot;<span class="br0">&#41;</span> ? &quot;&amp;&quot; : &quot;?&quot;<span class="br0">&#41;</span> 
			+ &quot;_callback=&quot; + callbackString;
		publishCallbackMethod<span class="br0">&#40;</span>callbackString<span class="br0">&#41;</span>;
		Element fr1 = DOM.createElement<span class="br0">&#40;</span>&quot;script&quot;<span class="br0">&#41;</span>;		
		fr1.setAttribute<span class="br0">&#40;</span>&quot;src&quot;, url<span class="br0">&#41;</span>;
		RootPanel.get<span class="br0">&#40;</span><span class="br0">&#41;</span>.getElement<span class="br0">&#40;</span><span class="br0">&#41;</span>.appendChild<span class="br0">&#40;</span>fr1<span class="br0">&#41;</span>;
&nbsp;
	<span class="br0">&#125;</span>
&nbsp;
	private native void publishCallbackMethod<span class="br0">&#40;</span>String callback<span class="br0">&#41;</span> /*-<span class="br0">&#123;</span>
		var ptr = this;
  		$wnd<span class="br0">&#91;</span>callback<span class="br0">&#93;</span> = function<span class="br0">&#40;</span>obj<span class="br0">&#41;</span> <span class="br0">&#123;</span>
  			ptr.@com.peterfranza.gwt.cle.client.JSONPLoader::loadremotedata<span class="br0">&#40;</span>Ljava/lang/String;Lcom/google/gwt/core/client/JavaScriptObject;<span class="br0">&#41;</span><span class="br0">&#40;</span>callback, obj<span class="br0">&#41;</span>;
  		<span class="br0">&#125;</span>;
	<span class="br0">&#125;</span>-*/;
&nbsp;
	@SuppressWarnings<span class="br0">&#40;</span>&quot;unused&quot;<span class="br0">&#41;</span>
	private void loadremotedata<span class="br0">&#40;</span>String cbp, JavaScriptObject obj<span class="br0">&#41;</span> <span class="br0">&#123;</span>
	  callback.onLoad<span class="br0">&#40;</span>new JSONObject<span class="br0">&#40;</span>obj<span class="br0">&#41;</span><span class="br0">&#41;</span>;
	<span class="br0">&#125;</span>
&nbsp;
	public interface LoaderCallback <span class="br0">&#123;</span>
		void onLoad<span class="br0">&#40;</span>JSONObject object<span class="br0">&#41;</span>;
	<span class="br0">&#125;</span>
&nbsp;
<span class="br0">&#125;</span></pre></td></tr></table></div>

<p><strong>Usage:</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="" style="font-family:monospace;">JSONPLoader loader = new JSONPLoader<span class="br0">&#40;</span><span class="br0">&#41;</span>;
loader.load<span class="br0">&#40;</span>&quot;http://pipes.yahoo.com/pipes/pipe.run?_id=CPreCvz42xG4eaOWouNLYQ&amp;_render=json&amp;location=madison&amp;section=mcy&quot;, new LoaderCallback<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp;
	@Override
	public void onLoad<span class="br0">&#40;</span>JSONObject object<span class="br0">&#41;</span> <span class="br0">&#123;</span>
		Window.alert<span class="br0">&#40;</span>&quot;loaded &quot; + object.size<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;
	<span class="br0">&#125;</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span>;</pre></td></tr></table></div>

<p>Notice that the json url does not specify the _callback parameter, this is because it is added by the JSONPLoader class.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.peterfranza.com/2010/06/09/gwt-loading-remote-jsonp-xss/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.peterfranza.com/2010/06/09/gwt-loading-remote-jsonp-xss/</feedburner:origLink></item>
		<item>
		<title>Connecting Apache (httpd) To Active Directory</title>
		<link>http://feedproxy.google.com/~r/SoftwareEvolved/~3/zJvMkRcs8ks/</link>
		<comments>http://www.peterfranza.com/2010/04/30/connecting-apache-httpd-to-active-directory/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 14:18:22 +0000</pubDate>
		<dc:creator>pfranza</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[active directory]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[ldap]]></category>

		<guid isPermaLink="false">http://www.peterfranza.com/?p=496</guid>
		<description><![CDATA[Recently I went through a small effort to connect a subversion repository to active directory. This is a good thing because it means that you no longer will need to manage the usernames and password using the old htpasswd format. The htpasswd is fine for very controlled environments but the passwords it allows you to [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I went through a small effort to connect a subversion repository to active directory.  This is a good thing because it means that you no longer will need to manage the usernames and password using the old htpasswd format.  The htpasswd is fine for very controlled environments but the passwords it allows you to use are pretty weak and the encryption of the passwords is fairly weak also, so allowing the connection to happen using active directory as the authority is a good thing.  Also it keeps you from having to maintain more passwords, and I like that idea.</p>
<p><strong>In your /etc/httpd/conf.d/<em>filename</em>.conf</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
</pre></td><td class="code"><pre class="" style="font-family:monospace;">LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
&nbsp;
LDAPConnectionTimeout <span style="">15</span>
&nbsp;
LDAPSharedCacheSize <span style="">200000</span>
LDAPCacheEntries <span style="">1024</span>
LDAPCacheTTL <span style="">600</span>
LDAPOpCacheEntries <span style="">1024</span>
LDAPOpCacheTTL <span style="">600</span>
&nbsp;
  &lt;Location /server/cache-info&gt;
   SetHandler ldap-status
  &lt;/Location&gt;
&nbsp;
  &lt;Location /svn&gt;
    DAV svn
    SVNPath /subversion/repos
    SVNListParentPath on
&nbsp;
    AuthzSVNAccessFile /subversion/svnauthorz
    Satisfy Any
    AuthType Basic
    AuthName &quot;Members Only&quot;
    AuthzLDAPAuthoritative off
    AuthBasicProvider ldap
    AuthLDAPBindDN &quot;svn.user@domain.com&quot;
    AuthLDAPBindPassword &quot;svn.user.password&quot;
    AuthLDAPURL &quot;ldap://&lt;ldapserverip&gt;/DC=domain,DC=com?sAMAccountName?sub?<span class="br0">&#40;</span>objectClass=user<span class="br0">&#41;</span>&quot;
    Require valid-user
 &lt;/Location&gt;</pre></td></tr></table></div>

<p>However every couple of transactions I would get an error and this message would appear in my error log</p>
<p><strong>/var/log/httpd/error_log</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="" style="font-family:monospace;"><span class="br0">&#91;</span>Fri Apr <span style="">30</span> 09:<span style="">21</span>:<span style="">46</span> <span style="">2010</span><span class="br0">&#93;</span> <span class="br0">&#91;</span>warn<span class="br0">&#93;</span> <span class="br0">&#91;</span>client 192.168.100.105<span class="br0">&#93;</span> <span class="br0">&#91;</span><span style="">22578</span><span class="br0">&#93;</span> auth_ldap authenticate: user peter.franza authentication failed; URI /svnad/projects/ <span class="br0">&#91;</span>ldap_search_ext_s<span class="br0">&#40;</span><span class="br0">&#41;</span> for user failed<span class="br0">&#93;</span><span class="br0">&#91;</span>Operations error<span class="br0">&#93;</span>, referer: http://svn/svnad/projects/</pre></td></tr></table></div>

<p>The solution was to disable following referers</p>
<p><strong>/etc/openldap/ldap.conf</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="" style="font-family:monospace;">REFERRALS off</pre></td></tr></table></div>

<p>*Note this is in <em>/etc/openldap/</em> not the ldap.conf in <em>/etc</em> that file is used from pam authentication and not for mod_ldap</p>
]]></content:encoded>
			<wfw:commentRss>http://www.peterfranza.com/2010/04/30/connecting-apache-httpd-to-active-directory/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.peterfranza.com/2010/04/30/connecting-apache-httpd-to-active-directory/</feedburner:origLink></item>
		<item>
		<title>Non-blocking UDP datagram replicator</title>
		<link>http://feedproxy.google.com/~r/SoftwareEvolved/~3/PxybmQ6QhRg/</link>
		<comments>http://www.peterfranza.com/2010/02/15/non-blocking-udp-datagram-replicator/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 19:32:16 +0000</pubDate>
		<dc:creator>pfranza</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[networking]]></category>
		<category><![CDATA[NIO]]></category>
		<category><![CDATA[sockets]]></category>
		<category><![CDATA[UDP]]></category>

		<guid isPermaLink="false">http://www.peterfranza.com/?p=484</guid>
		<description><![CDATA[A class that listens to a UDP port and collects all the datagrams and then rebroadcasts those datagrams to other ports. This is useful for several reasons. I use it when stress testing UDP clients because I can subscribe to 1000 client sockets while only really having a single legitimate datasource. 1 2 3 4 [...]]]></description>
			<content:encoded><![CDATA[<p>A class that listens to a UDP port and collects all the datagrams and then rebroadcasts those datagrams to other ports.  This is useful for several reasons.  I use it when stress testing UDP clients because I can subscribe to 1000 client sockets while only really having a single legitimate datasource.<br />
<br/></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">public class Replicator <span style="color: #009900;">&#123;</span>
	private final AsyncDatagramServer aserver<span style="color: #339933;">;</span>
&nbsp;
	public Replicator<span style="color: #009900;">&#40;</span>final int port, 
			final Collection<span style="color: #339933;">&lt;</span>DataSinkPoint<span style="color: #339933;">&gt;</span> endPoints<span style="color: #009900;">&#41;</span> throws Exception <span style="color: #009900;">&#123;</span>
		aserver <span style="color: #339933;">=</span> new AsyncDatagramServer<span style="color: #009900;">&#40;</span>port, 
				new AsyncDatagramServer.<span style="color: #006633;">AsyncDatagramServerListener</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
			@Override
			public void recieveDatagram<span style="color: #009900;">&#40;</span>ByteBuffer buffer<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				try <span style="color: #009900;">&#123;</span>
					for<span style="color: #009900;">&#40;</span>final DataSinkPoint d<span style="color: #339933;">:</span> endPoints<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
						d.<span style="color: #006633;">send</span><span style="color: #009900;">&#40;</span>buffer.<span style="color: #006633;">duplicate</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					<span style="color: #009900;">&#125;</span>
				<span style="color: #009900;">&#125;</span> catch <span style="color: #009900;">&#40;</span>final Exception e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
					e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	private static class AsyncDatagramServer <span style="color: #009900;">&#123;</span>
&nbsp;
		private boolean running <span style="color: #339933;">=</span> true<span style="color: #339933;">;</span>
&nbsp;
		public AsyncDatagramServer<span style="color: #009900;">&#40;</span>final int port, 
				final AsyncDatagramServerListener listener<span style="color: #009900;">&#41;</span> throws Exception <span style="color: #009900;">&#123;</span>
&nbsp;
			new Thread<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
				@Override
				public void run<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
					try <span style="color: #009900;">&#123;</span>
						startSocket<span style="color: #009900;">&#40;</span>port, listener<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					<span style="color: #009900;">&#125;</span> catch <span style="color: #009900;">&#40;</span>final Exception e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
						throw new RuntimeException<span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					<span style="color: #009900;">&#125;</span>
				<span style="color: #009900;">&#125;</span>
&nbsp;
			<span style="color: #009900;">&#125;</span>.<span style="color: #006633;">start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #009900;">&#125;</span>
&nbsp;
		public interface AsyncDatagramServerListener <span style="color: #009900;">&#123;</span>
			void recieveDatagram<span style="color: #009900;">&#40;</span>ByteBuffer buffer<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		public void shutdown<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			running <span style="color: #339933;">=</span> false<span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		private void startSocket<span style="color: #009900;">&#40;</span>final int port,
				AsyncDatagramServerListener listener<span style="color: #009900;">&#41;</span> throws IOException,
				SocketException, ClosedChannelException, Exception <span style="color: #009900;">&#123;</span>
			DatagramChannel serverChannel <span style="color: #339933;">=</span> DatagramChannel.<span style="color: #006633;">open</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			Selector selector <span style="color: #339933;">=</span> Selector.<span style="color: #006633;">open</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			DatagramSocket sock <span style="color: #339933;">=</span> serverChannel.<span style="color: #006633;">socket</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			sock.<span style="color: #006633;">setReuseAddress</span><span style="color: #009900;">&#40;</span>true<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			sock.<span style="color: #006633;">bind</span> <span style="color: #009900;">&#40;</span>new InetSocketAddress <span style="color: #009900;">&#40;</span>port<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			serverChannel.<span style="color: #006633;">configureBlocking</span> <span style="color: #009900;">&#40;</span>false<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			serverChannel.<span style="color: #006633;">register</span><span style="color: #009900;">&#40;</span>selector, SelectionKey.<span style="color: #006633;">OP_READ</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			ByteBuffer buffer <span style="color: #339933;">=</span> ByteBuffer.<span style="color: #006633;">allocate</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2048</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
			while <span style="color: #009900;">&#40;</span>running<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				if<span style="color: #009900;">&#40;</span>selector.<span style="color: #006633;">select</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">500</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
					processData<span style="color: #009900;">&#40;</span>listener, selector, buffer<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
			<span style="color: #009900;">&#125;</span>
&nbsp;
			selector.<span style="color: #006633;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			serverChannel.<span style="color: #006633;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		private void processData<span style="color: #009900;">&#40;</span>AsyncDatagramServerListener listener,
				Selector selector, ByteBuffer buffer<span style="color: #009900;">&#41;</span> throws Exception <span style="color: #009900;">&#123;</span>
			Iterator<span style="color: #339933;">&lt;</span>SelectionKey<span style="color: #339933;">&gt;</span> it <span style="color: #339933;">=</span> selector.<span style="color: #006633;">selectedKeys</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">iterator</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
			while <span style="color: #009900;">&#40;</span>it.<span style="color: #006633;">hasNext</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				final SelectionKey key <span style="color: #339933;">=</span> it.<span style="color: #006633;">next</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
				if <span style="color: #009900;">&#40;</span>key.<span style="color: #006633;">isReadable</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
					DatagramChannel channel <span style="color: #339933;">=</span> 
						<span style="color: #009900;">&#40;</span>DatagramChannel<span style="color: #009900;">&#41;</span> key.<span style="color: #006633;">channel</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					buffer.<span style="color: #006633;">clear</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					if <span style="color: #009900;">&#40;</span>channel.<span style="color: #006633;">receive</span><span style="color: #009900;">&#40;</span>buffer<span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> null<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
						buffer.<span style="color: #006633;">flip</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
						listener.<span style="color: #006633;">recieveDatagram</span><span style="color: #009900;">&#40;</span>buffer.<span style="color: #006633;">duplicate</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					<span style="color: #009900;">&#125;</span>
				<span style="color: #009900;">&#125;</span>
				it.<span style="color: #006633;">remove</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
&nbsp;
	<span style="color: #009900;">&#125;</span>
&nbsp;
	public void shutdown<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		aserver.<span style="color: #006633;">shutdown</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	public interface DataSinkPoint <span style="color: #009900;">&#123;</span>
		void send<span style="color: #009900;">&#40;</span>ByteBuffer buffer<span style="color: #009900;">&#41;</span> throws IOException<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	private static class DataSinkPointImpl implements DataSinkPoint <span style="color: #009900;">&#123;</span>
		private final DatagramSocket socket<span style="color: #339933;">;</span>
&nbsp;
		public DataSinkPointImpl<span style="color: #009900;">&#40;</span>SocketAddress address<span style="color: #009900;">&#41;</span> throws Exception <span style="color: #009900;">&#123;</span>
			socket <span style="color: #339933;">=</span> new DatagramSocket<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			socket.<span style="color: #006633;">connect</span><span style="color: #009900;">&#40;</span>address<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		@Override
		public void send<span style="color: #009900;">&#40;</span>ByteBuffer buffer<span style="color: #009900;">&#41;</span> throws IOException <span style="color: #009900;">&#123;</span>
			socket.<span style="color: #006633;">send</span><span style="color: #009900;">&#40;</span>new DatagramPacket<span style="color: #009900;">&#40;</span>buffer.<span style="color: #006633;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>,
					<span style="color: #cc66cc;">0</span>, buffer.<span style="color: #006633;">limit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p><strong>Usage:</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">public static void main<span style="color: #009900;">&#40;</span>String<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> throws Exception <span style="color: #009900;">&#123;</span>
	Collection<span style="color: #339933;">&lt;</span>DataSinkPoint<span style="color: #339933;">&gt;</span> endPoints <span style="color: #339933;">=</span> new ArrayList<span style="color: #339933;">&lt;</span>DataSinkPoint<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	for<span style="color: #009900;">&#40;</span>int i <span style="color: #339933;">=</span> <span style="color: #cc66cc;">4000</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">5000</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		endPoints.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>new DataSinkPointImpl<span style="color: #009900;">&#40;</span>
				new InetSocketAddress<span style="color: #009900;">&#40;</span>&quot;127.0.0.1&quot;, i<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	final Replicator r <span style="color: #339933;">=</span> new Replicator<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">3000</span>, endPoints<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	Thread.<span style="color: #006633;">sleep</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">5000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	r.<span style="color: #006633;">shutdown</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	System.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>&quot;done.&quot;<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.peterfranza.com/2010/02/15/non-blocking-udp-datagram-replicator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.peterfranza.com/2010/02/15/non-blocking-udp-datagram-replicator/</feedburner:origLink></item>
		<item>
		<title>Announcing – “Announce” for Android</title>
		<link>http://feedproxy.google.com/~r/SoftwareEvolved/~3/fpe3mFLCGLo/</link>
		<comments>http://www.peterfranza.com/2010/02/03/announcing-announce-for-android/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 03:29:53 +0000</pubDate>
		<dc:creator>pfranza</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[coding]]></category>

		<guid isPermaLink="false">http://www.peterfranza.com/?p=479</guid>
		<description><![CDATA[Announce is an application for Android 2.0 and above.  It intercepts incoming calls and and reads the name of the caller aloud.  You can also record custom voice tags to use instead of the text to speech engine. Project Page: http://www.peterfranza.com/projects/announce-for-android/ Price: Free (That&#8217;s a good value) Enjoy.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.peterfranza.com/wp-content/uploads/2010/02/announce_qr.png" rel="lightbox[479]"><img class="size-full wp-image-473 alignright" title="announce_qr" src="http://www.peterfranza.com/wp-content/uploads/2010/02/announce_qr.png" alt="" width="135" height="135" /></a><a href="http://www.peterfranza.com/announce-for-android/">Announce</a> is an application for Android 2.0 and above.  It intercepts incoming calls and and reads the name of the caller aloud.  You can also record custom voice tags to use instead of the text to speech engine.</p>
<p><strong>Project Page: <a href="http://www.peterfranza.com/projects/announce-for-android/">http://www.peterfranza.com/projects/announce-for-android/</a></strong></p>
<p><strong>Price: Free </strong>(That&#8217;s a good value)<strong><br />
</strong></p>
<p>Enjoy.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.peterfranza.com/2010/02/03/announcing-announce-for-android/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.peterfranza.com/2010/02/03/announcing-announce-for-android/</feedburner:origLink></item>
		<item>
		<title>BitArrayInputStream</title>
		<link>http://feedproxy.google.com/~r/SoftwareEvolved/~3/AF6psc3iBUA/</link>
		<comments>http://www.peterfranza.com/2009/10/09/bitarrayinputstream/#comments</comments>
		<pubDate>Fri, 09 Oct 2009 14:43:31 +0000</pubDate>
		<dc:creator>pfranza</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[bitwise]]></category>
		<category><![CDATA[inputstream]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.peterfranza.com/?p=449</guid>
		<description><![CDATA[Sometime you just have to read the bits one by one at least now you don&#8217;t need to write your own class to do it. This class works for &#8216;Little Endian&#8217; or &#8216;Big Endian&#8217;. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 [...]]]></description>
			<content:encoded><![CDATA[<p>Sometime you just have to read the bits one by one at least now you don&#8217;t need to write your own class to do it. This class works for &#8216;Little Endian&#8217; or &#8216;Big Endian&#8217;.<br />
<br/></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">import <span style="color: #006699;">java.io.IOException</span><span style="color: #339933;">;</span>
import <span style="color: #006699;">java.io.InputStream</span><span style="color: #339933;">;</span>
&nbsp;
public class BitArrayInputStream <span style="color: #009900;">&#123;</span>
&nbsp;
	private final BitDirection direction<span style="color: #339933;">;</span>
	private final InputStream inputStream<span style="color: #339933;">;</span>
	private int currentByte<span style="color: #339933;">;</span>
	private int currentPosition <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
&nbsp;
	public BitArrayInputStream<span style="color: #009900;">&#40;</span>InputStream inputStream<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		this<span style="color: #009900;">&#40;</span>BitDirection.<span style="color: #006633;">HIGHLOW</span>, inputStream<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	public BitArrayInputStream<span style="color: #009900;">&#40;</span>BitDirection direction,
			InputStream inputStream<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		this.<span style="color: #006633;">inputStream</span> <span style="color: #339933;">=</span> inputStream<span style="color: #339933;">;</span>
		this.<span style="color: #006633;">direction</span> <span style="color: #339933;">=</span> direction<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	public int readBit<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> throws IOException <span style="color: #009900;">&#123;</span>
		if<span style="color: #009900;">&#40;</span>currentPosition <span style="color: #339933;">==</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			currentByte <span style="color: #339933;">=</span> inputStream.<span style="color: #006633;">read</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			if<span style="color: #009900;">&#40;</span>currentByte <span style="color: #339933;">==</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				return <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
			currentPosition <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		int c <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
&nbsp;
		if<span style="color: #009900;">&#40;</span>direction.<span style="color: #006633;">equals</span><span style="color: #009900;">&#40;</span>BitDirection.<span style="color: #006633;">HIGHLOW</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			c <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>currentByte <span style="color: #339933;">&lt;&lt;</span> currentPosition <span style="color: #339933;">&amp;</span> 0x80<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;&gt;</span> <span style="color: #cc66cc;">7</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> else <span style="color: #009900;">&#123;</span>
			c <span style="color: #339933;">=</span> currentByte <span style="color: #339933;">&gt;&gt;</span> currentPosition <span style="color: #339933;">&amp;</span> 0x1<span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		currentPosition <span style="color: #339933;">+=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
		if<span style="color: #009900;">&#40;</span>currentPosition <span style="color: #339933;">&gt;=</span> <span style="color: #cc66cc;">8</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			currentPosition <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		return c<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	public static enum BitDirection <span style="color: #009900;">&#123;</span>HIGHLOW, LOWHIGH<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>And here is a unit test for it:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">public class BitArrayInputStreamTest extends TestCase <span style="color: #009900;">&#123;</span>
&nbsp;
	public void testInit<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> throws Exception <span style="color: #009900;">&#123;</span>
		assertNotNull<span style="color: #009900;">&#40;</span>new BitArrayInputStream<span style="color: #009900;">&#40;</span>null<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	public void testReadBits<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> throws Exception <span style="color: #009900;">&#123;</span>
		BitArrayInputStream i <span style="color: #339933;">=</span> new BitArrayInputStream<span style="color: #009900;">&#40;</span>
				new ByteArrayInputStream<span style="color: #009900;">&#40;</span>new byte<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#40;</span>byte<span style="color: #009900;">&#41;</span> 0xA3<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
	<span style="color: #009900;">&#125;</span>
&nbsp;
	public void testReadBitsLowHigh<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> throws Exception <span style="color: #009900;">&#123;</span>
		BitArrayInputStream i <span style="color: #339933;">=</span> new BitArrayInputStream<span style="color: #009900;">&#40;</span>BitDirection.<span style="color: #006633;">LOWHIGH</span>,
				new ByteArrayInputStream<span style="color: #009900;">&#40;</span>new byte<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#40;</span>byte<span style="color: #009900;">&#41;</span> 0xA3<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
	<span style="color: #009900;">&#125;</span>
&nbsp;
	public void testReadBitsEnd<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> throws Exception <span style="color: #009900;">&#123;</span>
		BitArrayInputStream i <span style="color: #339933;">=</span> new BitArrayInputStream<span style="color: #009900;">&#40;</span>
				new ByteArrayInputStream<span style="color: #009900;">&#40;</span>new byte<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#40;</span>byte<span style="color: #009900;">&#41;</span> 0xA3<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
	<span style="color: #009900;">&#125;</span>
&nbsp;
	public void testReadBitsMultiByte<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> throws Exception <span style="color: #009900;">&#123;</span>
		BitArrayInputStream i <span style="color: #339933;">=</span> new BitArrayInputStream<span style="color: #009900;">&#40;</span>
				new ByteArrayInputStream<span style="color: #009900;">&#40;</span>
                                  new byte<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#40;</span>byte<span style="color: #009900;">&#41;</span> 0xA3, <span style="color: #009900;">&#40;</span>byte<span style="color: #009900;">&#41;</span> 0xB6<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		assertEquals<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, i.<span style="color: #006633;">readBit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.peterfranza.com/2009/10/09/bitarrayinputstream/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.peterfranza.com/2009/10/09/bitarrayinputstream/</feedburner:origLink></item>
		<item>
		<title>Look Mom, No Typing</title>
		<link>http://feedproxy.google.com/~r/SoftwareEvolved/~3/wDn2xx-0MhA/</link>
		<comments>http://www.peterfranza.com/2009/06/27/look-mom-no-typing/#comments</comments>
		<pubDate>Sat, 27 Jun 2009 20:25:57 +0000</pubDate>
		<dc:creator>pfranza</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.peterfranza.com/?p=406</guid>
		<description><![CDATA[Always wanted to leave a comment about something you&#8217;ve read on my site, but couldn&#8217;t be bothered to type a response. Well now you can using my new Google Voice Call widget. Now you don&#8217;t have to worry about carpel tunnel or any of that fancy spelling stuff. Really all you need is a mouth [...]]]></description>
			<content:encoded><![CDATA[<p>Always wanted to leave a comment about something you&#8217;ve read on my site, but couldn&#8217;t be bothered to type a response.  Well now you can using my new Google Voice Call widget.  Now you don&#8217;t have to worry about carpel tunnel or any of that fancy spelling stuff.  Really all you need is a mouth and a phone.<br />
<center><br />
<object type="application/x-shockwave-flash" data="https://clients4.google.com/voice/embed/webCallButton" width="230" height="85"><param name="movie" value="https://clients4.google.com/voice/embed/webCallButton" /><param name="wmode" value="transparent" /><param name="FlashVars" value="id=90835e93b32d9b8cb28b4b61c54ed3bea8b8b923&#038;style=0" /></object><br />
</center></p>
]]></content:encoded>
			<wfw:commentRss>http://www.peterfranza.com/2009/06/27/look-mom-no-typing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.peterfranza.com/2009/06/27/look-mom-no-typing/</feedburner:origLink></item>
		<item>
		<title>Ignore Compiler Warnings</title>
		<link>http://feedproxy.google.com/~r/SoftwareEvolved/~3/nFATsJ7fd3Y/</link>
		<comments>http://www.peterfranza.com/2009/05/11/ignore-compiler-warnings/#comments</comments>
		<pubDate>Mon, 11 May 2009 13:55:58 +0000</pubDate>
		<dc:creator>pfranza</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[coding]]></category>

		<guid isPermaLink="false">http://www.peterfranza.com/?p=381</guid>
		<description><![CDATA[Let me be upfront, I will be the first person to tell you that you should treat a warning as if it were an error. The compiler is trying to tell you something, it wants to help you. The very smart people who are designing our compiler aren&#8217;t identifying code patterns and exposing them as [...]]]></description>
			<content:encoded><![CDATA[<p>Let me be upfront, I will be the first person to tell you that you should treat a warning as if it were an error.  The compiler is trying to tell you something, it wants to help you. The very smart people who are designing our compiler aren&#8217;t identifying code patterns and exposing them as warnings for their health, so come on people &#8230; <strong>FIX YOUR WARNINGS</strong>!</p>
<p>Ok, now that I got that out of the way, we come to the special case.  Third party source code generation tools, I actually love generated source, don&#8217;t ask me why but I find it much easier to deal with than all the mucking around you could do in meta-code etc. Just give me a plain &#8216;ol class that I can use.  The drawback to generated source is some of the generators are pretty rough when it comes to warnings. They might have unneeded imports, referenced untyped classes, who knows.  We all can agree that it would be optimal if the generators would just produce warning free code, and if it is in your power join up with some of these open-source projects and actually fix them (you&#8217;d be my hero).  </p>
<p>When that isn&#8217;t an option I&#8217;d just ignore them, I&#8217;m adding an ant task that can read in a fileset and append warning suppression annotations to the class headings.  Just remember you have not fixed anything, but to be perfectly practical you may never fix these things.</p>
<p><strong>Download Jar File:</strong> <a href="http://www.peterfranza.com/wp-content/uploads/2009/05/suppresswarnings-05.jar">suppresswarnings-05.jar</a></p>
<p><strong>Usage:</strong><br />
<code lang="xml"><taskdef resource="suppresswarnings.properties" classpath="${suppresswarnings.jarfile}"/></p>
<p><suppressWarnings><br />
  <fileset dir="${src.dir}"><br />
     <include name="**/*.java"/><br />
  </fileset><br />
</suppressWarnings></code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.peterfranza.com/2009/05/11/ignore-compiler-warnings/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.peterfranza.com/2009/05/11/ignore-compiler-warnings/</feedburner:origLink></item>
		<item>
		<title>Integer IP Addresses</title>
		<link>http://feedproxy.google.com/~r/SoftwareEvolved/~3/w7R3ca0WS5A/</link>
		<comments>http://www.peterfranza.com/2009/03/04/integer-ip-addresses/#comments</comments>
		<pubDate>Wed, 04 Mar 2009 16:22:56 +0000</pubDate>
		<dc:creator>pfranza</dc:creator>
				<category><![CDATA[coding]]></category>

		<guid isPermaLink="false">http://www.peterfranza.com/?p=350</guid>
		<description><![CDATA[I know that every couple of years I need the snippet of code that helps me convert the integer version of an IP address back and forth to a string. You would think that after all this time I&#8217;d be able to write it blind. 1 2 3 4 5 6 7 8 9 10 [...]]]></description>
			<content:encoded><![CDATA[<p>I know that every couple of years I need the snippet of code that helps me convert the integer version of an IP address back and forth to a string.  You would think that after all this time I&#8217;d be able to write it blind.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">public static String convertIntegerToIp<span style="color: #009900;">&#40;</span>long ip<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
     StringBuffer buf <span style="color: #339933;">=</span> new StringBuffer<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      buf.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>ip <span style="color: #339933;">&gt;&gt;</span> <span style="color: #cc66cc;">24</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span> 0xFF<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span>&quot;.&quot;<span style="color: #009900;">&#41;</span>
          .<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>ip <span style="color: #339933;">&gt;&gt;</span> <span style="color: #cc66cc;">16</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span> 0xFF<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span>&quot;.&quot;<span style="color: #009900;">&#41;</span>
          .<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>ip <span style="color: #339933;">&gt;&gt;</span>  <span style="color: #cc66cc;">8</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span> 0xFF<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span>&quot;.&quot;<span style="color: #009900;">&#41;</span>
          .<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span> ip        <span style="color: #339933;">&amp;</span> 0xFF<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		
      return buf.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
 public static long convertStringToIntegerIp<span style="color: #009900;">&#40;</span>String ip<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
     String<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> parts <span style="color: #339933;">=</span> ip.<span style="color: #006633;">split</span><span style="color: #009900;">&#40;</span>&quot;\\.&quot;<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     return <span style="color: #009900;">&#40;</span>Long.<span style="color: #006633;">valueOf</span><span style="color: #009900;">&#40;</span>parts<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #cc66cc;">24</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span>
              <span style="color: #009900;">&#40;</span>Long.<span style="color: #006633;">valueOf</span><span style="color: #009900;">&#40;</span>parts<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #cc66cc;">16</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span>
              <span style="color: #009900;">&#40;</span>Long.<span style="color: #006633;">valueOf</span><span style="color: #009900;">&#40;</span>parts<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #cc66cc;">8</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span>
              <span style="color: #009900;">&#40;</span>Long.<span style="color: #006633;">valueOf</span><span style="color: #009900;">&#40;</span>parts<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>In C/C++ you can use an unsigned int instead of a long but in java there are no unsigned types and while I know that you can still do this calculation using a signed integer just as well in java, when you print out the address for visual inspection you will get a negative number and it won&#8217;t match the c++ printout so I&#8217;ve chosen to use a long to store the values.</p>
<p>Enjoy.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.peterfranza.com/2009/03/04/integer-ip-addresses/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.peterfranza.com/2009/03/04/integer-ip-addresses/</feedburner:origLink></item>
		<item>
		<title>Asynchronous Executor</title>
		<link>http://feedproxy.google.com/~r/SoftwareEvolved/~3/fLJJL-eRjtY/</link>
		<comments>http://www.peterfranza.com/2009/02/20/asynchronous-executor/#comments</comments>
		<pubDate>Fri, 20 Feb 2009 18:48:07 +0000</pubDate>
		<dc:creator>pfranza</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.peterfranza.com/?p=373</guid>
		<description><![CDATA[I hate that sometimes I have to make calls to systems outside of my own system, essentially outside of my own control. And not all of these calls allow me to detect and recover when an operation is taking longer than it should. So I&#8217;ve written a class that allows you to execute a task [...]]]></description>
			<content:encoded><![CDATA[<p>I hate that sometimes I have to make calls to systems outside of my own system, essentially outside of my own control.  And not all of these calls allow me to detect and recover when an operation is taking longer than it should.</p>
<p>So I&#8217;ve written a class that allows you to execute a task asynchronously and give it a maximum time to run, and you get a callback upon completion or upon failure. Now I can detect and recover when things happen that are outside of my control.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">package <span style="color: #006699;">com.peterfranza.synchro</span><span style="color: #339933;">;</span>
&nbsp;
public class AsyncExecutor <span style="color: #009900;">&#123;</span>
&nbsp;
	private static java.<span style="color: #006633;">util</span>.<span style="color: #006633;">concurrent</span>.<span style="color: #006633;">ExecutorService</span> pool <span style="color: #339933;">=</span> 
		java.<span style="color: #006633;">util</span>.<span style="color: #006633;">concurrent</span>.<span style="color: #006633;">Executors</span>.<span style="color: #006633;">newCachedThreadPool</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	public synchronized static void asyncExecuteTask<span style="color: #009900;">&#40;</span>
			final Runnable task, 
			final long timeout, 
			final AsyncExecutorCallback callback<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		pool.<span style="color: #006633;">execute</span><span style="color: #009900;">&#40;</span>new Runnable<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
			@Override
			public void run<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				java.<span style="color: #006633;">util</span>.<span style="color: #006633;">concurrent</span>.<span style="color: #006633;">Future</span><span style="color: #339933;">&lt;</span>AsyncExecutorCallback<span style="color: #339933;">&gt;</span> marker <span style="color: #339933;">=</span> 
					pool.<span style="color: #006633;">submit</span><span style="color: #009900;">&#40;</span>task, callback<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				try <span style="color: #009900;">&#123;</span>
					marker.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>timeout, 
						java.<span style="color: #006633;">util</span>.<span style="color: #006633;">concurrent</span>.<span style="color: #006633;">TimeUnit</span>.<span style="color: #006633;">MILLISECONDS</span><span style="color: #009900;">&#41;</span>
						.<span style="color: #006633;">taskCompleted</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span> catch <span style="color: #009900;">&#40;</span>Exception e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                                        marker.<span style="color: #006633;">cancel</span><span style="color: #009900;">&#40;</span>true<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					callback.<span style="color: #006633;">taskFailed</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span> 
			<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	public interface AsyncExecutorCallback <span style="color: #009900;">&#123;</span>
		void taskCompleted<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		void taskFailed<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p><strong>Usage</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">package <span style="color: #006699;">com.peterfranza.synchro</span><span style="color: #339933;">;</span>
&nbsp;
import <span style="color: #006699;">com.peterfranza.synchro.AsyncExecutor.AsyncExecutorCallback</span><span style="color: #339933;">;</span>
&nbsp;
public class Usage <span style="color: #009900;">&#123;</span>
&nbsp;
	public static void main<span style="color: #009900;">&#40;</span>String<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
		AsyncExecutorCallback callback <span style="color: #339933;">=</span> new AsyncExecutorCallback<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
			@Override
			public void taskCompleted<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				System.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>&quot;Task Completed&quot;<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
&nbsp;
			@Override
			public void taskFailed<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				System.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>&quot;Task Failed&quot;<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
		AsyncExecutor.<span style="color: #006633;">asyncExecuteTask</span><span style="color: #009900;">&#40;</span>new QuickTask<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, <span style="color: #cc66cc;">1000</span>, callback<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		AsyncExecutor.<span style="color: #006633;">asyncExecuteTask</span><span style="color: #009900;">&#40;</span>new LongTask<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, <span style="color: #cc66cc;">1000</span>, callback<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
	private static class QuickTask implements Runnable <span style="color: #009900;">&#123;</span>
		public void run<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			try <span style="color: #009900;">&#123;</span>Thread.<span style="color: #006633;">sleep</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
			catch<span style="color: #009900;">&#40;</span>Exception e<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>		
	<span style="color: #009900;">&#125;</span>
&nbsp;
	private static class LongTask implements Runnable <span style="color: #009900;">&#123;</span>
		public void run<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			try <span style="color: #009900;">&#123;</span>Thread.<span style="color: #006633;">sleep</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">100000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
			catch<span style="color: #009900;">&#40;</span>Exception e<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>		
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.peterfranza.com/2009/02/20/asynchronous-executor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.peterfranza.com/2009/02/20/asynchronous-executor/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 0.718 seconds. --><!-- Cached page generated by WP-Super-Cache on 2010-07-20 10:38:33 -->
