<?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>Barnabas Kendall &#187; How To</title>
	<atom:link href="http://bkendall.biz/category/how-to/feed/" rel="self" type="application/rss+xml" />
	<link>http://bkendall.biz</link>
	<description>Technology Consultant</description>
	<lastBuildDate>Fri, 15 Jul 2011 14:56:14 +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>A Free Phone Screen/Interview App With Twilio</title>
		<link>http://bkendall.biz/2009/10/phone-screen-twilio/</link>
		<comments>http://bkendall.biz/2009/10/phone-screen-twilio/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 21:42:26 +0000</pubDate>
		<dc:creator>Barnabas</dc:creator>
				<category><![CDATA[How To]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[twilio]]></category>

		<guid isPermaLink="false">http://bkendall.biz/?p=241</guid>
		<description><![CDATA[<a href="http://bkendall.biz/2009/10/phone-screen-twilio/" title="A Free Phone Screen/Interview App With Twilio"></a>I have thoroughly enjoyed working with Twilio for the last 6 months or so on an open-source project that will soon be released (can&#8217;t wait!). Now that my part in that project has wrapped up, I&#8217;ve got some extra time &#8230;<p class="read-more"><a href="http://bkendall.biz/2009/10/phone-screen-twilio/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://bkendall.biz/2009/10/phone-screen-twilio/" title="A Free Phone Screen/Interview App With Twilio"></a><p>I have thoroughly enjoyed working with Twilio for the last 6 months or so on an open-source project that will soon be released (can&#8217;t wait!). Now that my part in that project has wrapped up, I&#8217;ve got some extra time to play around with my own projects and look for my next job. Over on the Twilio support forums, <a href="http://getsatisfaction.com/twilio/topics/using_twilio_to_automate_phone_interviews_please_help">someone recently requested help</a>, and it caught my eye:</p>
<blockquote><p>I have to conduct a lot of phone interviews every year for my company with fairly standard questions. Would there be a way to use Twilio to manage this in an automated fashion? I don&#8217;t want to spend the time actually conducting the interviews but would rather listen to them when I have a chance. [...]<br />
During the call, I would like to have the user enter the # sign or something when they have finished answering the question, to prompt the next question. This way, I could have my 10 standard questions recorded in Mp3, and then have the whole process managed through Twilio ideally where i enter the interviewee&#8217;s phone number and a time for the call ideally.</p></blockquote>
<p>Someone posted a link there that lead me to this service: <a href="http://www.voicescreener.com/">VoiceScreener</a> which starts at $169/month. Yikes! Twilio, on the other hand, is 3¢/minute and $5/month/phone number. I got to thinking: this is incredibly easy to set up with Twilio&#8217;s API; why not just whip it up? So I did.</p>
<p><a href="http://interview.bkendall.biz/">Here&#8217;s a demo</a> where you can try a sample phone interview and <a href="http://interview.bkendall.biz/PhoneInterview.zip">here&#8217;s where you can download the code</a>. To install and customize it, just follow these directions:</p>
<ol>
<li>Unzip the file to a directory on a web server that runs PHP 5</li>
<li>Edit the file inc/config.php with your own Twilio authentication credentials and the email address that will receive reports.</li>
<li>I have included my sample MP3 files in the files directory, but you should replace them with your own. The file names should be self explanatory: <a href="http://interview.bkendall.biz/files/intro.mp3">intro.mp3</a>, <a href="http://interview.bkendall.biz/files/thanks.mp3">thanks.mp3</a>, <a href="http://interview.bkendall.biz/files/conclusion.mp3">conclusion.mp3</a>, and question_XX.mp3, where XX is a two-digit number.</li>
</ol>
<p>As it is written now, this works without any database at all because we can use Twilio&#8217;s REST API to query the call details and list of associated recordings. This project is more of a starter and proof of concept, although for simple interview scenarios it would work just fine. Other possible upgrades (some requiring a database) could be:</p>
<ul>
<li>Account for unanswered questions in the report</li>
<li>Allow interviewers to hang up in the middle of the interview and call back later to pick up where they left off</li>
<li>Allow the interviewer to review their answer and re-record</li>
<li>Allow for question branching, where the user enters a touch-tone response for yes/no on some answers and is asked only relevant questions from then on</li>
<li>Set up multiple types of interviews</li>
<li>Show the text of the question in the interviewer&#8217;s web browser  while they are listening to it on the phone using AJAX</li>
<li>Make the interview conclusion a menu, as in: &#8220;To hear more about the company, press 1. To hear more about this position, press 2&#8230;&#8221;</li>
</ul>
<p>If you are interested in having me work on this for you, please <a href="mailto:barnabas@bkendall.biz">contact me</a> and I&#8217;d be happy to help you out. If you have any suggestions or improvements, please send them my way too.</p>
]]></content:encoded>
			<wfw:commentRss>http://bkendall.biz/2009/10/phone-screen-twilio/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
<enclosure url="http://interview.bkendall.biz/files/intro.mp3" length="763609" type="audio/mpeg" />
<enclosure url="http://interview.bkendall.biz/files/thanks.mp3" length="67529" type="audio/mpeg" />
<enclosure url="http://interview.bkendall.biz/files/conclusion.mp3" length="495613" type="audio/mpeg" />
		</item>
		<item>
		<title>Deleting Duplicate Records in MySQL</title>
		<link>http://bkendall.biz/2009/04/mysql-dupes/</link>
		<comments>http://bkendall.biz/2009/04/mysql-dupes/#comments</comments>
		<pubDate>Thu, 02 Apr 2009 00:18:55 +0000</pubDate>
		<dc:creator>Barnabas</dc:creator>
				<category><![CDATA[How To]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://bkendall.biz/?p=198</guid>
		<description><![CDATA[<a href="http://bkendall.biz/2009/04/mysql-dupes/" title="Deleting Duplicate Records in MySQL"></a>I am writing this post to remind myself of a cool trick that I rediscovered today. When you are scrubbing a database table, there is the common problem of removing duplicate data. In my case, I had a table of &#8230;<p class="read-more"><a href="http://bkendall.biz/2009/04/mysql-dupes/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://bkendall.biz/2009/04/mysql-dupes/" title="Deleting Duplicate Records in MySQL"></a><p>I am writing this post to remind myself of a cool trick that I rediscovered today. When you are scrubbing a database table, there is the common problem of removing duplicate data. In my case, I had a table of ZIP codes, city names, and state codes, along with the latitude and longitude values. The problem was that there were a few thousand records where the lat/lon data was slightly off leading to multiple duplicate zip code rows with slightly different data. I have seen solutions for other databases that require a temporary ID field and self joins. It turns out that for MySQL the solution is much simpler. If you use the ALTER IGNORE TABLE command to add a unique index, then your duplicate rows will be silently deleted. Here was the command I used:<br />
<code>ALTER IGNORE TABLE `zip_codes`<br />
ADD UNIQUE INDEX dupes (`region_code`, `city`, `zipcode`);</code><br />
Finally, just drop the temporary index and you&#8217;re done. <a href="http://dev.mysql.com/doc/refman/5.1/en/alter-table.html">Here&#8217;s the official word from the manual</a>:</p>
<blockquote><p>IGNORE is a MySQL extension to standard SQL. It controls how <a title="12.1.7. ALTER TABLE Syntax" href="http://dev.mysql.com/doc/refman/5.1/en/alter-table.html">ALTER TABLE</a> works if there are duplicates on unique keys in the new table or if warnings occur when strict mode is enabled. If IGNORE is not specified, the copy is aborted and rolled back if duplicate-key errors occur. If IGNORE is specified, only the first row is used of rows with duplicates on a unique key, The other conflicting rows are deleted. Incorrect values are truncated to the closest matching acceptable value.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://bkendall.biz/2009/04/mysql-dupes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tools of My Trade</title>
		<link>http://bkendall.biz/2009/03/tools-of-my-trade/</link>
		<comments>http://bkendall.biz/2009/03/tools-of-my-trade/#comments</comments>
		<pubDate>Tue, 17 Mar 2009 23:11:34 +0000</pubDate>
		<dc:creator>Barnabas</dc:creator>
				<category><![CDATA[How To]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[programs]]></category>

		<guid isPermaLink="false">http://bkendall.biz/?p=189</guid>
		<description><![CDATA[<a href="http://bkendall.biz/2009/03/tools-of-my-trade/" title="Tools of My Trade"></a>I am a former Windows-only developer happily using my iMac and running OS X all the time, rarely booting into Windows anymore. Here is a list of software and services that I use to do my day-to-day development, besides Mail.app &#8230;<p class="read-more"><a href="http://bkendall.biz/2009/03/tools-of-my-trade/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://bkendall.biz/2009/03/tools-of-my-trade/" title="Tools of My Trade"></a><p>I am a former Windows-only developer happily using my iMac and running OS X all the time, rarely booting into Windows anymore. Here is a list of software and services that I use to do my day-to-day development, besides Mail.app and Terminal.app which seem too obvious to include:</p>
<ul>
<li><a href="http://www.activestate.com/komodo_edit/">Komodo Edit 5.0</a>: Good cross-platform IDE, was using Aptana Studio and Eclipse too</li>
<li>Smultron: quick plain text editor</li>
<li><a href="http://cyberduck.ch/">Cyberduck</a>: FTP and then some</li>
<li>1Password: $ manage all the passwords to all the sites</li>
<li>Pixelmator: $ great Mac-only image editor</li>
<li>MacPorts: for everything not already in OS X</li>
<li><a href="http://www.mamp.info/en/index.html">MAMP</a>, which includes Apache, MySQL, and phpMyAdmin</li>
<li>Firefox + <a href="http://getfirebug.com/">Firebug</a> + <a href="http://developer.yahoo.com/yslow/">YSlow</a>: for web debugging. All other surfing through Safari</li>
<li>Skype: video conferencing</li>
<li>Chicken of the VNC: VNC client</li>
<li><a href="http://www.ambrosiasw.com/utilities/snapzprox/">Snapz Pro X</a>: $ screencasts and screenshots</li>
<li>iWork: $ Pages and Numbers work great &#8211; who needs MS Office?</li>
<li>VMWare Fusion: $ emulator for booting into Windows occasionally</li>
<li>MediaTemple.com: $ hosting</li>
<li>Unfuddle.com: Subversion hosting and issue tracking for my own projects</li>
<li>WordPress: you are here</li>
</ul>
<p>$ = commercial software/service that I paid for</p>
]]></content:encoded>
			<wfw:commentRss>http://bkendall.biz/2009/03/tools-of-my-trade/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How ThisLineIsSecure.com was built</title>
		<link>http://bkendall.biz/2009/03/how-tlis-was-built/</link>
		<comments>http://bkendall.biz/2009/03/how-tlis-was-built/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 23:09:08 +0000</pubDate>
		<dc:creator>Barnabas</dc:creator>
				<category><![CDATA[How To]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[kohana]]></category>
		<category><![CDATA[komodo]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://bkendall.biz/?p=181</guid>
		<description><![CDATA[<a href="http://bkendall.biz/2009/03/how-tlis-was-built/" title="How ThisLineIsSecure.com was built"></a>Here is a quick rundown of how my recently launched site ThisLineIsSecure.com was built. First of all, it would not have been possible without the Twilio API. Besides that: Written in PHP 5 using the Kohana Framework, the able successor to &#8230;<p class="read-more"><a href="http://bkendall.biz/2009/03/how-tlis-was-built/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://bkendall.biz/2009/03/how-tlis-was-built/" title="How ThisLineIsSecure.com was built"></a><p>Here is a quick rundown of how my recently launched site <a href="http://ThisLineIsSecure.com">ThisLineIsSecure.com</a> was built. First of all, it would not have been possible without the <a href="http://www.twilio.com/">Twilio API</a>. Besides that:</p>
<ul>
<li>Written in <a href="http://www.php.net/">PHP 5</a> using the <a href="http://www.kohanaphp.com/">Kohana Framework</a>, the able successor to CodeIgniter.</li>
<li>Hosted at <a href="http://www.mediatemple.net/go/order/?refdom=thislineissecure.com">MediaTemple</a> using the Grid Service (like this blog).</li>
<li>Developed on my iMac using <a href="http://www.activestate.com/komodo_edit/">Active State&#8217;s Komodo Edit</a>.</li>
<li>Graphics done using <a href="http://www.pixelmator.com/">Pixelmator</a>, stock art from <a href="http://us.fotolia.com/partner/201009234">Fotolia</a>.</li>
<li>Web Template adapted from <a href="http://www.nuviotemplates.com/template.php?template=impress-05">Impress 05</a> <a href="http://www.nuviotemplates.com/">Nuvio</a>.</li>
<li>Some icons taken from the <a href="http://wefunction.com/2008/07/function-free-icon-set/">Function Icon Set</a>.</li>
<li>Using the <a href="http://wpaudioplayer.com/standalone">Standalone version of the WordPress Audio Player</a>.</li>
<li><a href="https://checkout.google.com/">Google Checkout</a> &amp; <a href="http://www.google.com/analytics/index.html">Google Analytics</a> for payments.</li>
<li>Version control and issue tracking via <a href="http://unfuddle.com/">Unfuddle&#8217;s free version</a>, which is enough for me. I have used this on huge projects, though, it&#8217;s very good. Think Basecamp + Beanstalk.</li>
<li>SFTP uploads via the finest Mac shareware FTP client available, <a href="http://cyberduck.ch/">Cyberduck</a>. The &#8220;synchronize&#8221; option is golden.</li>
</ul>
<p>I need to tally up my expenses, but besides my time I&#8217;m probably out less than $200 for this whole thing so far. Unbelievable. I think that the Kohana project, Nuvio, the WordPress Audio Player, and Cyberduck each deserve at least a $20 donation, which will be forthcoming.</p>
]]></content:encoded>
			<wfw:commentRss>http://bkendall.biz/2009/03/how-tlis-was-built/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sharepoint Locked for Editing</title>
		<link>http://bkendall.biz/2007/12/sharepoint-lock/</link>
		<comments>http://bkendall.biz/2007/12/sharepoint-lock/#comments</comments>
		<pubDate>Thu, 27 Dec 2007 22:06:58 +0000</pubDate>
		<dc:creator>Barnabas</dc:creator>
				<category><![CDATA[How To]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[sharepoint]]></category>

		<guid isPermaLink="false">http://barnabas.wordpress.com/2007/12/27/sharepoint-lock/</guid>
		<description><![CDATA[<a href="http://bkendall.biz/2007/12/sharepoint-lock/" title="Sharepoint Locked for Editing"></a>While I was working on a document through our new Sharepoint team site at GWC, Word crashed due to some permission changes. After trying unsuccessfully to open it again many times, I came across this MS support article: You receive &#8230;<p class="read-more"><a href="http://bkendall.biz/2007/12/sharepoint-lock/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://bkendall.biz/2007/12/sharepoint-lock/" title="Sharepoint Locked for Editing"></a><p>While I was working on a document through our new Sharepoint team site at GWC, Word crashed due to some permission changes. After trying unsuccessfully to open it again many times, I came across <a title="MS KB Article 899709" href="http://support.microsoft.com/kb/899709">this MS support article</a>:</p>
<blockquote>
<h3>You receive a &#8220;(Filename) is locked for editing by &#8216;another user&#8217;&#8221; message when you try to modify a document in Windows SharePoint Services even though you are the user who previously opened the document</h3>
<p>&#8230;</p>
<h4>CAUSE</h4>
<p>When a document is opened by a client program, Windows SharePoint Services puts a write lock on the document on the server. The write lock times out after 10 minutes. Users cannot modify the document during the time when the document is locked.</p>
<p>In a scenario where the program that opens the document unexpectedly quits or crashes and you try to open the document again before the write lock times out, the message that you receive says that the document is locked by another user. This behavior occurs even though you are user who previously opened the document.</p>
<h4>WORKAROUND</h4>
<p>To work around this behavior, <em>wait 10 minutes before you click Edit in ProgramName to open the document again</em>. (dismayed emphasis mine)</p></blockquote>
<p>God Bless Microsoft, and bless their arbitrary 10-minute timeout that protects me from myself. I have six minutes and counting. (<em>Hums impatiently to self</em>)</p>
]]></content:encoded>
			<wfw:commentRss>http://bkendall.biz/2007/12/sharepoint-lock/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Forcing Logout in Forms Authentication</title>
		<link>http://bkendall.biz/2007/10/forcing-logout-in-forms-authentication/</link>
		<comments>http://bkendall.biz/2007/10/forcing-logout-in-forms-authentication/#comments</comments>
		<pubDate>Fri, 19 Oct 2007 21:26:57 +0000</pubDate>
		<dc:creator>Barnabas</dc:creator>
				<category><![CDATA[How To]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[VB.NET]]></category>

		<guid isPermaLink="false">http://barnabas.wordpress.com/2007/10/19/forcing-logout-in-forms-authentication/</guid>
		<description><![CDATA[<a href="http://bkendall.biz/2007/10/forcing-logout-in-forms-authentication/" title="Forcing Logout in Forms Authentication"></a>Here&#8217;s a simple fix to a common ASP.NET development problem. The only code you really need to put on a log out page is &#8220;FormsAuthentication.SignOut()&#8221;. However, any controls or code that change based on authentication (such as the LoginView control &#8230;<p class="read-more"><a href="http://bkendall.biz/2007/10/forcing-logout-in-forms-authentication/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://bkendall.biz/2007/10/forcing-logout-in-forms-authentication/" title="Forcing Logout in Forms Authentication"></a><p>Here&#8217;s a simple fix to a common ASP.NET development problem. The only code you really need to put on a log out page is &#8220;FormsAuthentication.SignOut()&#8221;. However, any controls or code that change based on authentication (such as the LoginView control or the LoginStatus control) will not reflect that the user is logged out until the following web page. This is bad for usability because you may be presenting links that are technically un-clickable. I&#8217;ve seen forum posts that advocate redirecting to another page, but there&#8217;s a simpler fix:</p>
<pre class="brush: vb">
Private Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
	FormsAuthentication.SignOut()
	Context.User = Nothing
End Sub
</pre>
<p>Setting the Context.User to nothing does the trick.</p>
]]></content:encoded>
			<wfw:commentRss>http://bkendall.biz/2007/10/forcing-logout-in-forms-authentication/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Directory synchronization batch file</title>
		<link>http://bkendall.biz/2007/10/dir-sync/</link>
		<comments>http://bkendall.biz/2007/10/dir-sync/#comments</comments>
		<pubDate>Thu, 04 Oct 2007 23:15:47 +0000</pubDate>
		<dc:creator>Barnabas</dc:creator>
				<category><![CDATA[How To]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://barnabas.wordpress.com/2007/10/04/dir-sync/</guid>
		<description><![CDATA[<a href="http://bkendall.biz/2007/10/dir-sync/" title="Directory synchronization batch file"></a>Today I ran into a problem that required two directories to be synchronized. This is more than just copying all of the files from one directory to another, which XCOPY does very well. I had to ensure that there were &#8230;<p class="read-more"><a href="http://bkendall.biz/2007/10/dir-sync/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://bkendall.biz/2007/10/dir-sync/" title="Directory synchronization batch file"></a><p><img src="http://bkendall.biz/wp-content/uploads/2007/10/batch.png" alt="Batch Icon" align="right" />Today I ran into a problem that required two directories to be synchronized. This is more than just copying all of the files from one directory to another, which <a href="http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/xcopy.mspx" title="XCOPY documentation">XCOPY</a> does very well. I had to ensure that there were no orphaned files in the destination that were not already in the source. The closest thing XCOPY comes to this is to copy only files that already exist in the destination. This can be a problem when deploying ASP.NET projects over and over, because &#8220;XCOPY deployment&#8221; does not account for deleted or renamed files.</p>
<p>There are many shareware GUI programs that can synchronize two directories like I wanted, but that seemed like overkill. I basically wanted a Windows version of <a href="http://rsync.samba.org/">rsync</a> that would work out of the box (if you know of one, please share in the comments). I had already fired up the old source control editor and was about to code up a quick console program to do this when I realized that the same thing could be accomplished with a recursive batch file. Ten minutes later, I had this little script:<span id="more-153"></span></p>
<pre class="brush: cpp">
@echo off

if &quot;%3&quot;==&quot;&quot; (
echo Syncing %1 with %2
xcopy %1 %2 /d /i /y /s
)

for /D %%d in (%2\*) do (
if not exist &quot;%1\%%~nd&quot; (
echo Deleting directory %%~nd
rd &quot;%%d&quot; /s /q
)
)

for %%f in (%2\*) do (
if not exist &quot;%1\%%~nf%%~xf&quot; (
echo Deleting file %%~nf%%~xf
del &quot;%%f&quot;
)
)

for /D %%d in (%1\*) do call dir_sync.bat &quot;%1\%%~nd&quot; &quot;%2\%%~nd&quot; 0</pre>
<p>Save this text as dir_sync.bat and <strike>remove the double-backslashes that WordPress adds in</strike>. The command syntax is: dir_sync.bat &#8220;source directory&#8221; &#8220;destination directory&#8221;. Be sure to enclose the paths in quotation marks if there are any spaces.</p>
<p>If this command saves you ten minutes or spares you a pointless purchase, I&#8217;m happy to be able to pay it forward. If I just killed your shareware company, I&#8217;m really sorry.</p>
]]></content:encoded>
			<wfw:commentRss>http://bkendall.biz/2007/10/dir-sync/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>I like my Blackjack</title>
		<link>http://bkendall.biz/2007/09/i-like-my-blackjack/</link>
		<comments>http://bkendall.biz/2007/09/i-like-my-blackjack/#comments</comments>
		<pubDate>Fri, 21 Sep 2007 21:44:53 +0000</pubDate>
		<dc:creator>Barnabas</dc:creator>
				<category><![CDATA[How To]]></category>
		<category><![CDATA[at&t]]></category>
		<category><![CDATA[blackjack]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[microsoft live]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[Skweezer]]></category>
		<category><![CDATA[Windows Mobile]]></category>
		<category><![CDATA[Yahoo]]></category>

		<guid isPermaLink="false">http://barnabas.wordpress.com/2007/09/21/i-like-my-blackjack/</guid>
		<description><![CDATA[<a href="http://bkendall.biz/2007/09/i-like-my-blackjack/" title="I like my Blackjack"></a>I got a new phone a few weeks ago: the Samsung Blackjack, otherwise known as the SGH-i607. It works great with Skweezer, and since it&#8217;s a Windows Mobile device, I&#8217;ve also gotten a chance to see it in action with &#8230;<p class="read-more"><a href="http://bkendall.biz/2007/09/i-like-my-blackjack/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://bkendall.biz/2007/09/i-like-my-blackjack/" title="I like my Blackjack"></a><p><img src="http://bkendall.biz/wp-content/uploads/2007/09/samsung_blackjack_small.jpg" alt="Samsung Blackjack" align="right" />I got a new phone a few weeks ago: the Samsung Blackjack, otherwise known as the <a href="http://www.phonescoop.com/phones/phone.php?p=1066">SGH-i607</a>. It works great with <a href="http://www.skweezer.net">Skweezer</a>, and since it&#8217;s a Windows Mobile device, I&#8217;ve also gotten a chance to see it in action with the <a href="http://mobile.yahoo.com/go">Yahoo! Go</a> and <a href="http://mobile.search.live.com/about/download/default.aspx">Live</a> applications, both of which have their pluses (Flickr/Maps &amp; Directions respectively) and minuses. Overall I&#8217;m very pleased with the new phone though.</p>
<p>One thing that has been a little odd has been the fact that sometimes my network connection has trouble restarting. After the phone has been idle for a while, and more often when I&#8217;ve traveled (perhaps switching cell towers?) my phone&#8217;s browser would be unable to make any connections. Navigating to new pages would show &#8220;Connecting&#8221; in the status bar for a few minutes before returning an error. Network-enabled applications such as Yahoo! Go would also stop working, showing time-out errors or &#8220;unable to refresh&#8221; messages. I called up <strike>Cingular</strike> AT&amp;T tech support and they told me it was probably a coverage problem: they claimed you need at least four bars to browse the web, whereas you can send SMS and talk with fewer bars of course. That is only half the story, as this problem sometimes crops up even with great signal. Fortunately, I finally found the cause and solution. <span id="more-151"></span></p>
<p>After downloading a utility from Microsoft that tests the network, I concluded that it was probably an IP/DHCP problem. If it were a computer, I could renew my IP address at the command line or use the &#8220;repair my network connection&#8221; utility in Windows which does the same behind the scenes. How do you renew your IP address on a Windows Mobile phone? You can restart the phone for ten minutes, buy network utility apps for this, or you can use this little trick, which is quick and free.</p>
<ol>
<li>Access the Wireless Manager application. You can quickly get to it on the Blackjack by pressing the power button on the top and then selecting #2.</li>
<li>Disable the phone. This is &#8220;airplane mode&#8221;.</li>
<li>Enable the phone.</li>
<li>Wait until the phone displays the network is available. On my phone at my house, it shows &#8220;Home Service&#8221; (which is a lie) then &#8220;Emergency Service&#8221; (which is disturbing) before settling on &#8220;AT&amp;T&#8221;.</li>
<li>Resume network-dependent activities. It is usually not necessary to restart the offending application, just retry whatever it was that failed, such as refreshing content or navigating to a link.</li>
</ol>
<p>I can not yet figure out how to make YouTube mobile work with the built-in Media Player. However I stopped trying to make it work after I realized that I do not care to watch YouTube on my mobile phone.</p>
]]></content:encoded>
			<wfw:commentRss>http://bkendall.biz/2007/09/i-like-my-blackjack/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Fix for SOAP reflection error in VS 2005 web projects</title>
		<link>http://bkendall.biz/2007/07/soap-reflection-error-vs2005/</link>
		<comments>http://bkendall.biz/2007/07/soap-reflection-error-vs2005/#comments</comments>
		<pubDate>Thu, 05 Jul 2007 23:14:20 +0000</pubDate>
		<dc:creator>Barnabas</dc:creator>
				<category><![CDATA[How To]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[ASP.NET]]></category>

		<guid isPermaLink="false">http://barnabas.wordpress.com/2007/07/05/soap-reflection-error-vs2005/</guid>
		<description><![CDATA[<a href="http://bkendall.biz/2007/07/soap-reflection-error-vs2005/" title="Fix for SOAP reflection error in VS 2005 web projects"></a>Today we found a fix for a strange error experienced while deploying a web project built in Visual Studio 2005 that has a web reference (SOAP), specifically to the Microsoft Live search service. We were using a web deploy project, &#8230;<p class="read-more"><a href="http://bkendall.biz/2007/07/soap-reflection-error-vs2005/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://bkendall.biz/2007/07/soap-reflection-error-vs2005/" title="Fix for SOAP reflection error in VS 2005 web projects"></a><p><img src="http://bkendall.biz/wp-content/uploads/2007/07/vs2005.png" alt="VS 2005" align="right" border="0" />Today we found a fix for a strange error experienced while deploying a web project built in Visual Studio 2005 that has a web reference (SOAP), specifically to the <a href="http://dev.live.com/livesearch/">Microsoft Live search service</a>. We were using a web deploy project, and although everything compiled all right and ran well on the local development server, on pre-deployment testing the following error stack would be raised:<span id="more-125"></span></p>
<ul>
<li>CustomAttributeFormatException: Binary format of the specified custom attribute was invalid.</li>
<li>InvalidOperationException: There was an error reflecting type &#8216;com.msn.search.soap.SourceRequest&#8217;.</li>
<li>InvalidOperationException: There was an error reflecting property &#8216;Requests&#8217;.</li>
<li>InvalidOperationException: There was an error reflecting type &#8216;com.msn.search.soap.SearchRequest&#8217;.</li>
<li>InvalidOperationException: There was an error reflecting &#8216;Request&#8217;.</li>
<li>InvalidOperationException: Method MSNSearchService.Search can not be reflected.</li>
</ul>
<p>It turns out that good old web projects do a lot of things for you in the background. When you create a web reference, the only thing that gets stored with the web project is the .disco file and the WSDL output. Something somewhere dynamically creates and compiles the web proxy class for you on the fly, and I suspected this mechanism is broken. Without finding an exact answer, <a href="http://blogs.msdn.com/netcfteam/archive/2007/02/01/why-your-netcf-apps-fail-to-call-some-web-services.aspx">this post</a> from the blog of Andrew Arnott of the MS .NET CF team illuminated the possible problem: the proxy class needs to be created with certain arguments, specifically with an explicit order. The command-line tool that is being invoked behind the scenes is called <a href="http://msdn2.microsoft.com/en-us/library/7h3ystb6(vs.80).aspx" title="WSDL.EXE documentation @ MSDN">WSDL.EXE</a>.</p>
<p>To fix our problem, we first removed the web reference from the project. By invoking the following command, we could manually create a VB.NET proxy class, which we were then able to save in the App_Code directory and check in to the project:</p>
<p>wsdl.exe /out:MSNSearch.vb /language:VB  <strong>/order</strong> http://soap.search.msn.com/webservices.asmx?wsdl</p>
]]></content:encoded>
			<wfw:commentRss>http://bkendall.biz/2007/07/soap-reflection-error-vs2005/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>How to make your EDGE connection 4.7 times faster</title>
		<link>http://bkendall.biz/2007/07/edge-47x-faster/</link>
		<comments>http://bkendall.biz/2007/07/edge-47x-faster/#comments</comments>
		<pubDate>Wed, 04 Jul 2007 05:46:56 +0000</pubDate>
		<dc:creator>Barnabas</dc:creator>
				<category><![CDATA[How To]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[mobilizing]]></category>
		<category><![CDATA[Skweezer]]></category>

		<guid isPermaLink="false">http://barnabas.wordpress.com/2007/07/03/edge-47x-faster/</guid>
		<description><![CDATA[<a href="http://bkendall.biz/2007/07/edge-47x-faster/" title="How to make your EDGE connection 4.7 times faster"></a>I just saw Jeff Atwood&#8217;s entry from last week on why you don&#8217;t want an iPhone, and his well-reasoned advice boils down to this: EDGE is painfully slow compared to 3G, and you should wait until they iron out the &#8230;<p class="read-more"><a href="http://bkendall.biz/2007/07/edge-47x-faster/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://bkendall.biz/2007/07/edge-47x-faster/" title="How to make your EDGE connection 4.7 times faster"></a><p><a class="DiggThisButton DiggMedium" href="http://digg.com/submit?url=http%3A%2F%2Fbkendall.biz%2F2007%2F07%2Fedge-47x-faster%2F&amp;title=How+to+make+your+EDGE+connection+4.7+times+faster"></a>I just saw Jeff Atwood&#8217;s entry from last week on <a href="http://www.codinghorror.com/blog/archives/000896.html">why you don&#8217;t want an iPhone</a>, and his well-reasoned advice boils down to this: EDGE is painfully slow compared to 3G, and you should wait until they iron out the bugs in v2.0. For these reasons, <a href="http://theappleblog.com/2007/06/29/waiting-for-rev-b-of-the-iphone/">even the Apple faithful are sitting v1.0 out. </a>Sprint is obviously <a href="http://www.sprintahead.com/">thrilled</a> right now.</p>
<p>As far as I can figure, the difference between EDGE and 3G networks like EVDO is presently 4-5x, accounting for the <a href="http://www.engadgetmobile.com/2007/06/28/atandt-customers-seeing-sudden-boost-in-edge-speeds/">recent boost</a>. There is a free and easy way to get 4-5x faster downloads on any network, even EDGE: <a href="http://www.skweezer.net/">Skweezer</a>. Because content is pre-compressed on our servers before it even starts down the thin invisible tube to your phone, there&#8217;s less overall data transmitted, which translates into a faster browsing experience. It is the equivalent of turning your 200 kbit connection into a 1 mbit connection. Basic web surfing will be loads faster with Skweezer than without.</p>
<p>You still don&#8217;t believe me? It&#8217;s been a while since we did a  site comparison, so I ran a few sites through <a href="http://www.getfirebug.com/">Firebug</a> this evening (July 3, 2007) to compare their total original page weight with the Skweezed versions, with images on and off. Unfortunately the figures aren&#8217;t as dramatic as they once were because server-side content compression (gzip and deflate) is more commonplace now, and that used to be an easy win for us. Nevertheless, Skweezer still always brought the page weight down, as follows:</p>
<p style="text-align:center;"><img src="http://bkendall.biz/wp-content/uploads/2007/07/page_size_comparison_table1.png" alt="Page size comparison" border="0" /></p>
<p> The worst value in each column is in red, and the best value is green. The fastest way to browse is without images, but that&#8217;s only useful if you&#8217;re just information hunting. Even with images on, the median speedup for browsing sites through Skweezer was <strong>4.7 x</strong>, if we assume that the network is the main bottleneck. If you want to run your own tests, be aware that IE reports uncompressed page size in the page properties dialog, while Firefox reports the number of bytes received for the main HTML document, reflecting compression. The best way to compare total page weight accurately is to use a tool like Firebug or a proxy like <a href="http://www.fiddler2.com/fiddler2/">Fiddler2</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://bkendall.biz/2007/07/edge-47x-faster/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

