<?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>Polymath Programmer</title>
	
	<link>http://polymathprogrammer.com</link>
	<description>Where entrepreneurship, mathematics and programming meet</description>
	<lastBuildDate>Fri, 25 May 2012 13:27:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/PolymathProgrammer" /><feedburner:info uri="polymathprogrammer" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Design philosophy of a software library</title>
		<link>http://feedproxy.google.com/~r/PolymathProgrammer/~3/-c_oxOsR2lY/</link>
		<comments>http://polymathprogrammer.com/2012/05/25/design-philosophy-software-library/#comments</comments>
		<pubDate>Fri, 25 May 2012 13:22:57 +0000</pubDate>
		<dc:creator>Vincent</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[spreadsheet]]></category>

		<guid isPermaLink="false">http://polymathprogrammer.com/?p=3630</guid>
		<description><![CDATA[Recently, I received an email from a customer. &#8220;Where are the Workbook and Worksheet class variables?&#8221; (I&#8217;m paraphrasing). The background is that I sell a spreadsheet software library (check it out here). My answer is &#8220;I don&#8217;t want you to worry about them.&#8221; (I&#8217;m paraphrasing my reply). From hours of looking at source code from [...]]]></description>
			<content:encoded><![CDATA[<p>Recently, I received an email from a customer. &#8220;Where are the Workbook and Worksheet class variables?&#8221; (I&#8217;m paraphrasing). The background is that I sell a spreadsheet software library (<a href="http://polymathprogrammer.com/store/spreadsheetlight/">check it out here</a>).</p>
<p>My answer is &#8220;I don&#8217;t want you to worry about them.&#8221; (I&#8217;m paraphrasing my reply).</p>
<p>From hours of looking at source code from other spreadsheet libraries, I&#8217;ve come to the conclusion that spreadsheets are kind of hard to create programmatically (read: super flying fishball noodly tedious). From hours of looking at hundreds of Excel spreadsheets, I&#8217;ve come to the conclusion that Excel makes spreadsheets <em>ridiculously</em> easy for users.</p>
<p>Why are programmers working harder than Excel users?</p>
<p>So here&#8217;s my story. Back in my last job, I dealt with lots of financial data. Millions of rows of data in databases, with information on how long a satellite call was, how much data in megabytes that email was and how many instant messages were sent. And each row had a price attached to it.</p>
<p>The marketing department wanted to know what products and services were up. The sales people wanted to know their commissions. The customer service officers wanted to know if the customer exceeded the usage limit. The directors wanted to know the quarterly results.</p>
<p>I maintained internal websites for the staff to get and update all that information. I also maintained public websites for customers to get information about their usage. Business logic and requirements were flying at me all over the place.</p>
<p>Now ASP.NET allows me to throw a bunch of data at a DataGrid (or GridView, or whatever it&#8217;s called now) and it&#8217;s nicely displayed on a web page.</p>
<p>Then people wanted to download all that tabular data into an Excel spreadsheet. Oh the horror&#8230;</p>
<p>I&#8217;m a programmer. I can write text files, schedule emails, update information into Sybase or SQL Server or Oracle databases, but I haven&#8217;t a clue about Excel spreadsheets.</p>
<p>The most complicated thing I&#8217;ve had to do in Excel was create a rectangular grid with numeric data and do a sum. There&#8217;s a SUM function in Excel. I know that much.</p>
<p>I survived that by doing a ton of research and testing. And what eventually resulted was an <a href="http://polymathprogrammer.com/store/spreadsheet-open-xml/">Open XML reference manual for spreadsheets</a>, but that&#8217;s a different story.</p>
<p>I&#8217;m not much of an Excel user. I&#8217;m guessing you&#8217;re not too.</p>
<p>So when I did research on what an actual spreadsheet library can do, I was appalled at the amount of code I still had to write and figure out. &#8220;What do you mean I have to write 20 lines of code? I can do that in Excel with a few clicks on the mouse!&#8221;.</p>
<p>Those spreadsheet libraries carefully exposed classes and functions and interfaces that Excel uses internally. But you know what? The Excel user sees none of that.</p>
<p>A common part is that all the libraries require the programmer to keep track of worksheet classes. Such as workbook.worksheets[0] or workbook.worksheets["Sheet1"] or something similar.</p>
<p>Do you see Excel forcing the user to keep track? No. The user sees a bunch of tabs that represent the existing worksheets, but she always only see the actively selected worksheet, <strong>because that&#8217;s the one she&#8217;s concerned about</strong>.</p>
<p>So while internally, <a href="http://polymathprogrammer.com/store/spreadsheetlight/">SpreadsheetLight</a> (my library) has a Workbook class and a Worksheet class, the programmer doesn&#8217;t have to worry about it. <strong>My design philosophy is that you should be able to do whatever you need in the spreadsheet as easily as you can in Excel</strong>.</p>
<p>Here&#8217;s how you create a table with Open XML SDK:</p>
<div class="codediv">
<pre>
Table table1 = new Table(){ Id = (UInt32Value)2U, Name = "Table2", DisplayName = "Table2", Reference = "I2:O13", TotalsRowCount = (UInt32Value)1U };
table1.AddNamespaceDeclaration("x", "http://schemas.openxmlformats.org/spreadsheetml/2006/main");
AutoFilter autoFilter1 = new AutoFilter(){ Reference = "I2:O12" };

SortState sortState1 = new SortState(){ Reference = "I3:O12" };
SortCondition sortCondition1 = new SortCondition(){ Descending = true, Reference = "K3:K12" };

sortState1.Append(sortCondition1);

TableColumns tableColumns1 = new TableColumns(){ Count = (UInt32Value)7U };
TableColumn tableColumn1 = new TableColumn(){ Id = (UInt32Value)1U, Name = "Col9", TotalsRowLabel = "Totals" };
TableColumn tableColumn2 = new TableColumn(){ Id = (UInt32Value)2U, Name = "Col10" };
TableColumn tableColumn3 = new TableColumn(){ Id = (UInt32Value)3U, Name = "Col11" };
TableColumn tableColumn4 = new TableColumn(){ Id = (UInt32Value)4U, Name = "Col12" };
TableColumn tableColumn5 = new TableColumn(){ Id = (UInt32Value)5U, Name = "Col13" };
TableColumn tableColumn6 = new TableColumn(){ Id = (UInt32Value)6U, Name = "Col14" };
TableColumn tableColumn7 = new TableColumn(){ Id = (UInt32Value)7U, Name = "Col15", TotalsRowFunction = TotalsRowFunctionValues.Sum };

tableColumns1.Append(tableColumn1);
tableColumns1.Append(tableColumn2);
tableColumns1.Append(tableColumn3);
tableColumns1.Append(tableColumn4);
tableColumns1.Append(tableColumn5);
tableColumns1.Append(tableColumn6);
tableColumns1.Append(tableColumn7);
TableStyleInfo tableStyleInfo1 = new TableStyleInfo(){ Name = "TableStyleDark4", ShowFirstColumn = true, ShowLastColumn = true, ShowRowStripes = true, ShowColumnStripes = true };

table1.Append(autoFilter1);
table1.Append(sortState1);
table1.Append(tableColumns1);
table1.Append(tableStyleInfo1);
return table1;
</pre>
</div>
<p>Here&#8217;s how you do it with my library:</p>
<div class="codediv">
<pre>
SLTable tbl = new SLTable("I2", "O12");

tbl.HasTotalRow = true;
// 1st table column, column I
tbl.SetTotalRowLabel(1, "Totals");
// 7th table column, column O
tbl.SetTotalRowFunction(7, SLTotalsRowFunctionValues.Sum);
tbl.SetTableStyle(SLTableStyleTypeValues.Dark4);

tbl.HasBandedColumns = true;
tbl.HasBandedRows = true;
tbl.HasFirstColumnStyled = true;
tbl.HasLastColumnStyled = true;

// sort by the 3rd table column (column K) in descending order
tbl.Sort(3, false);
</pre>
</div>
<p>&#8220;Wait, where do I set the table name?&#8221; Don&#8217;t worry about it.</p>
<p>&#8220;Shouldn&#8217;t I need to set the table column IDs and values? Where do I set &#8216;Col9&#8242; and &#8216;Col10&#8242; and the others?&#8221; Don&#8217;t worry about it.</p>
<p>&#8220;How do I know what string value to use for the table style?&#8221; Don&#8217;t worry about it. Use one of the built-in enumerations.</p>
<p>&#8220;You know, the section on sorting doesn&#8217;t include the header row. Shouldn&#8217;t I&#8230;&#8221; Don&#8217;t. Worry. About. It.</p>
<p>You know what happens in Excel? You select a bunch of cells, decide to make it a table, select a table style and POOF! A table appears. I want the programmer to feel just as awesome.</p>
<p>Frankly speaking, this library of mine is what I wish I had when I was doing all that coding in my last job. The last thing I needed was figuring out how to database dump tabular data onto an Excel spreadsheet. The company I worked for was a telecommunications company, working with satellite providers, service providers, content producers. The core business doesn&#8217;t involve making Excel spreadsheets, but sharing information inevitably involves Excel spreadsheets being passed around.</p>
<p>If you&#8217;re designing a software library, consider going beyond &#8220;allow the programmer to do X&#8221;. Consider &#8220;allow the programmer to do X in like, one line&#8221;, or at least very easily. Because the programmer might not care about X as much as you do.</p>
<p>Unless X is &#8220;make spreadsheet library&#8221; of course.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/PolymathProgrammer?a=-c_oxOsR2lY:FXdwJIdHd7A:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/PolymathProgrammer?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PolymathProgrammer?a=-c_oxOsR2lY:FXdwJIdHd7A:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/PolymathProgrammer?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PolymathProgrammer?a=-c_oxOsR2lY:FXdwJIdHd7A:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/PolymathProgrammer?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/PolymathProgrammer/~4/-c_oxOsR2lY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://polymathprogrammer.com/2012/05/25/design-philosophy-software-library/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://polymathprogrammer.com/2012/05/25/design-philosophy-software-library/</feedburner:origLink></item>
		<item>
		<title>Squeezing solutions</title>
		<link>http://feedproxy.google.com/~r/PolymathProgrammer/~3/-Xj65RJz_wA/</link>
		<comments>http://polymathprogrammer.com/2012/05/21/squeezing-solutions/#comments</comments>
		<pubDate>Mon, 21 May 2012 13:03:46 +0000</pubDate>
		<dc:creator>Vincent</dc:creator>
				<category><![CDATA[Curiosita]]></category>
		<category><![CDATA[different approaches]]></category>
		<category><![CDATA[math]]></category>
		<category><![CDATA[orcasquall]]></category>
		<category><![CDATA[solving problems]]></category>
		<category><![CDATA[squeeze-theorem]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://polymathprogrammer.com/?p=3621</guid>
		<description><![CDATA[In which I tell you about solving problems with at least 2 different approaches. And the squeeze theorem.]]></description>
			<content:encoded><![CDATA[<p><iframe width="560" height="315" src="http://www.youtube.com/embed/ZZzYVJPzFNs" frameborder="0" allowfullscreen></iframe></p>
<p>In which I tell you about solving problems with at least 2 different approaches. And the <a href="http://en.wikipedia.org/wiki/Squeeze_theorem">squeeze theorem</a>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/PolymathProgrammer?a=-Xj65RJz_wA:HbgIy8SvbnE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/PolymathProgrammer?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PolymathProgrammer?a=-Xj65RJz_wA:HbgIy8SvbnE:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/PolymathProgrammer?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PolymathProgrammer?a=-Xj65RJz_wA:HbgIy8SvbnE:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/PolymathProgrammer?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/PolymathProgrammer/~4/-Xj65RJz_wA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://polymathprogrammer.com/2012/05/21/squeezing-solutions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://polymathprogrammer.com/2012/05/21/squeezing-solutions/</feedburner:origLink></item>
		<item>
		<title>Dot notation dropdown hell</title>
		<link>http://feedproxy.google.com/~r/PolymathProgrammer/~3/gtjNc9EOFSs/</link>
		<comments>http://polymathprogrammer.com/2012/05/18/dot-notation-dropdown-hell/#comments</comments>
		<pubDate>Fri, 18 May 2012 11:14:50 +0000</pubDate>
		<dc:creator>Vincent</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[dot]]></category>
		<category><![CDATA[dropdown]]></category>
		<category><![CDATA[menu]]></category>
		<category><![CDATA[notation]]></category>

		<guid isPermaLink="false">http://polymathprogrammer.com/?p=3611</guid>
		<description><![CDATA[Have you written something like this: body.LeftArm.ForeArm.Hand.Pinky.Twitch() Would this be easier? body.Twitch(BodyPart.LeftPinky) I&#8217;ve been thinking about this a lot, because I&#8217;m writing a software library. You know what&#8217;s hard? Deciding what classes, functions and properties to expose to the programmer. My software library deals with spreadsheets, and for uhm, research, I downloaded 2 free open-source [...]]]></description>
			<content:encoded><![CDATA[<p>Have you written something like this:<br />
<code>body.LeftArm.ForeArm.Hand.Pinky.Twitch()</code></p>
<p>Would this be easier?<br />
<code>body.Twitch(BodyPart.LeftPinky)</code></p>
<p>I&#8217;ve been thinking about this a lot, because I&#8217;m writing a software library. You know what&#8217;s hard? <strong>Deciding what classes, functions and properties to expose to the programmer.</strong></p>
<p><a href="http://polymathprogrammer.com/store/spreadsheetlight/">My software library deals with spreadsheets</a>, and for uhm, research, I downloaded 2 free open-source libraries for comparison. Then I looked at sample code for 2 commercial libraries too.</p>
<p>You know what I found?</p>
<p>For the most part, the libraries just expose the underlying class structures to the programmer.</p>
<p>While this gives the programmer ultimate coding power, <em>I personally find this exhausting</em>. It&#8217;s like the first time I encountered the .NET Framework. There&#8217;s an overwhelming number of classes with their own functions and enumerations&#8230; &#8220;I just want to write one single sentence to a file!&#8221; Even that took me a few minutes to get used to. Luckily there&#8217;s extensive documentation, or I&#8217;d just collapse under the weight.</p>
<p>Do you remember Nokia? It&#8217;s a telecommunications company, but I know it as a mobile phone maker. My experience with Nokia phones were that they were probably designed by engineers and programmers. There were a lot of dropdown menus.</p>
<p>We programmers can think in hierarchies. But users don&#8217;t usually think in hierarchies (I think there&#8217;s research showing dropdown menus on web sites confuse users).</p>
<p>Consider the basic task in programming: declaring a variable. Here&#8217;s how you do this in VB:<br />
<code>Dim asdf as Int32</code></p>
<p>Here&#8217;s how you do this in C# (and any C-family):<br />
<code>int asdf;</code></p>
<p>When I want a variable, I already know what type it should be. The type matters to me and the compiler. The name matters a little to me, and practically none to the compiler. By the time I type &#8220;Dim asdf as&#8221; I already forgot what type I wanted, because I was so busy coming up with a variable name.</p>
<p>I feel this is backwards. Yes, I kinda have a thing about VB in this case&#8230;</p>
<p>Remember the pinky twitching example?</p>
<p><code>body.LeftArm.ForeArm.Hand.Pinky.Twitch()</code><br />
This forces the programmer to go all the way back to the root class, and then traverse the properties down again to reach the Twitch() function.</p>
<p><code>body.Twitch(BodyPart.LeftPinky)</code><br />
This shortcuts a lot of the traversing.</p>
<p>I have a lot of respect for the programmers working on open-source projects. They give their time and effort to improving software without pay. I just feel the design sometimes leave a little to be desired.</p>
<p>Have you looked at an iPhone? The interface allows the user to reach something within a couple of taps.</p>
<p>Do you know Google recommends that website links be no more than 3 levels deep? This means every page should be available from every other page via no more than 3 clicks.</p>
<p>So why did the first twitching example need 5 levels to reach my Twitch() function?</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/PolymathProgrammer?a=gtjNc9EOFSs:Y4b2aODdGmA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/PolymathProgrammer?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PolymathProgrammer?a=gtjNc9EOFSs:Y4b2aODdGmA:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/PolymathProgrammer?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PolymathProgrammer?a=gtjNc9EOFSs:Y4b2aODdGmA:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/PolymathProgrammer?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/PolymathProgrammer/~4/gtjNc9EOFSs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://polymathprogrammer.com/2012/05/18/dot-notation-dropdown-hell/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://polymathprogrammer.com/2012/05/18/dot-notation-dropdown-hell/</feedburner:origLink></item>
		<item>
		<title>I was at Barcamp Singapore 8!</title>
		<link>http://feedproxy.google.com/~r/PolymathProgrammer/~3/RwHcs5OmeGw/</link>
		<comments>http://polymathprogrammer.com/2012/05/16/barcamp-singapore-8/#comments</comments>
		<pubDate>Wed, 16 May 2012 03:40:40 +0000</pubDate>
		<dc:creator>Vincent</dc:creator>
				<category><![CDATA[Curiosita]]></category>
		<category><![CDATA[barcamp]]></category>
		<category><![CDATA[barcampsg8]]></category>
		<category><![CDATA[orcasquall]]></category>
		<category><![CDATA[singapore]]></category>
		<category><![CDATA[tembusu college]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[vlogging]]></category>
		<category><![CDATA[youtube]]></category>

		<guid isPermaLink="false">http://polymathprogrammer.com/?p=3602</guid>
		<description><![CDATA[I attended some talks at Barcamp Singapore 8 held at Tembusu College. I also gave a talk on &#8220;Vlogging on YouTube&#8221;, which had less-than-enthusiastic reviews.]]></description>
			<content:encoded><![CDATA[<p><iframe width="560" height="315" src="http://www.youtube.com/embed/s8DEz4N-9d0" frameborder="0" allowfullscreen></iframe></p>
<p>I attended some talks at Barcamp Singapore 8 held at Tembusu College. I also gave a talk on &#8220;Vlogging on YouTube&#8221;, which had less-than-enthusiastic reviews.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/PolymathProgrammer?a=RwHcs5OmeGw:Fyw01jnvpeU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/PolymathProgrammer?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PolymathProgrammer?a=RwHcs5OmeGw:Fyw01jnvpeU:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/PolymathProgrammer?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PolymathProgrammer?a=RwHcs5OmeGw:Fyw01jnvpeU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/PolymathProgrammer?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/PolymathProgrammer/~4/RwHcs5OmeGw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://polymathprogrammer.com/2012/05/16/barcamp-singapore-8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://polymathprogrammer.com/2012/05/16/barcamp-singapore-8/</feedburner:origLink></item>
		<item>
		<title>Losing weight in different cultures</title>
		<link>http://feedproxy.google.com/~r/PolymathProgrammer/~3/pIF8078Jurg/</link>
		<comments>http://polymathprogrammer.com/2012/05/08/losing-weight-in-different-cultures/#comments</comments>
		<pubDate>Tue, 08 May 2012 12:42:45 +0000</pubDate>
		<dc:creator>Vincent</dc:creator>
				<category><![CDATA[Curiosita]]></category>
		<category><![CDATA[asian]]></category>
		<category><![CDATA[culture]]></category>
		<category><![CDATA[dieting]]></category>
		<category><![CDATA[eating]]></category>
		<category><![CDATA[food]]></category>
		<category><![CDATA[losing weight]]></category>
		<category><![CDATA[orcasquall]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[western]]></category>

		<guid isPermaLink="false">http://polymathprogrammer.com/?p=3593</guid>
		<description><![CDATA[Generally speaking, &#8220;losing weight&#8221; is a bad thing in Asian cultures, because it means you don&#8217;t have enough food to eat.]]></description>
			<content:encoded><![CDATA[<p><iframe width="560" height="315" src="http://www.youtube.com/embed/zAGj86YMjRs" frameborder="0" allowfullscreen></iframe></p>
<p>Generally speaking, &#8220;losing weight&#8221; is a bad thing in Asian cultures, because it means you don&#8217;t have enough food to eat.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/PolymathProgrammer?a=pIF8078Jurg:CXKLUKfTT1g:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/PolymathProgrammer?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PolymathProgrammer?a=pIF8078Jurg:CXKLUKfTT1g:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/PolymathProgrammer?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PolymathProgrammer?a=pIF8078Jurg:CXKLUKfTT1g:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/PolymathProgrammer?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/PolymathProgrammer/~4/pIF8078Jurg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://polymathprogrammer.com/2012/05/08/losing-weight-in-different-cultures/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://polymathprogrammer.com/2012/05/08/losing-weight-in-different-cultures/</feedburner:origLink></item>
		<item>
		<title>Are you afraid to start your own business because…</title>
		<link>http://feedproxy.google.com/~r/PolymathProgrammer/~3/mWKqRU7Ul6k/</link>
		<comments>http://polymathprogrammer.com/2012/05/05/are-you-afraid-to-start-your-own-business-because/#comments</comments>
		<pubDate>Sat, 05 May 2012 10:51:18 +0000</pubDate>
		<dc:creator>Vincent</dc:creator>
				<category><![CDATA[Curiosita]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[paycheck]]></category>
		<category><![CDATA[refund]]></category>

		<guid isPermaLink="false">http://polymathprogrammer.com/?p=3589</guid>
		<description><![CDATA[you&#8217;re afraid people will ask for refunds, and you don&#8217;t make any money at all. If you have a steady paycheck, the company paying you your salary is not going to ask for your salary back, right? But if you have your own business, and if your customers ask for a refund? Then you&#8217;d have [...]]]></description>
			<content:encoded><![CDATA[<p>you&#8217;re afraid people will ask for refunds, and you don&#8217;t make any money at all.</p>
<p>If you have a steady paycheck, the company paying you your salary is not going to ask for your salary back, right?</p>
<p>But if you have your own business, and if your customers ask for a refund? Then you&#8217;d have rendered a service or provided a product, but you don&#8217;t get paid.</p>
<p>If that&#8217;s the case, why are there so many food stalls here in Singapore? Singaporeans are notoriously picky eaters. It can&#8217;t be that every single food stall sells delicious food, right?</p>
<p>What are you truly scared of?</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/PolymathProgrammer?a=mWKqRU7Ul6k:zDbzBdNHdVI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/PolymathProgrammer?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PolymathProgrammer?a=mWKqRU7Ul6k:zDbzBdNHdVI:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/PolymathProgrammer?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PolymathProgrammer?a=mWKqRU7Ul6k:zDbzBdNHdVI:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/PolymathProgrammer?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/PolymathProgrammer/~4/mWKqRU7Ul6k" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://polymathprogrammer.com/2012/05/05/are-you-afraid-to-start-your-own-business-because/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://polymathprogrammer.com/2012/05/05/are-you-afraid-to-start-your-own-business-because/</feedburner:origLink></item>
		<item>
		<title>Collision detection in merging Excel cells</title>
		<link>http://feedproxy.google.com/~r/PolymathProgrammer/~3/dIFydtjacP4/</link>
		<comments>http://polymathprogrammer.com/2012/05/04/collision-detection-merging-excel-cells/#comments</comments>
		<pubDate>Fri, 04 May 2012 12:25:36 +0000</pubDate>
		<dc:creator>Vincent</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[cell]]></category>
		<category><![CDATA[collision detection]]></category>
		<category><![CDATA[excel]]></category>
		<category><![CDATA[hyperplane separation theorem]]></category>
		<category><![CDATA[maths]]></category>
		<category><![CDATA[merge]]></category>
		<category><![CDATA[separating axis theorem]]></category>

		<guid isPermaLink="false">http://polymathprogrammer.com/?p=3577</guid>
		<description><![CDATA[You can merge cells in Excel. &#8220;Duh!&#8221; you say. So how does Excel ensure that the cells you want to merge don&#8217;t overlap any existing merged cells? How do you check programmatically that the cells you want to merge won&#8217;t overlap any existing merged cells? Well, that was the problem I faced while writing my [...]]]></description>
			<content:encoded><![CDATA[<p>You can merge cells in Excel. &#8220;Duh!&#8221; you say. So how does Excel ensure that the cells you want to merge don&#8217;t overlap any existing merged cells? How do you check <em>programmatically </em>that the cells you want to merge won&#8217;t overlap any existing merged cells?</p>
<p>Well, that was the problem I faced while writing my spreadsheet library software (<a href="http://polymathprogrammer.com/store/spreadsheetlight/">check out SpreadsheetLight here!</a>). The inkling of an idea was formed when I visited <a href="http://stackoverflow.com/">StackOverflow</a>. Can&#8217;t remember what I was there for, but the answer page wasn&#8217;t about Excel or spreadsheets. It was about collision detection.</p>
<p>Yes, the type of collision detection used in games so you don&#8217;t walk through walls and stuff.</p>
<p>And thus I learnt a new mathematical theorem: the separating axis theorem (or <a href="http://en.wikipedia.org/wiki/Hyperplane_separation_theorem">hyperplane separation theorem</a>). From what I understand, given two N-dimensional thingies, if you can find one (N-1)-dimensional hyperplane that separates those two thingies, then those two thingies are separate (or not overlapping).</p>
<p>Yes, &#8220;thingies&#8221; is a technical term.</p>
<p>For example, given two 3D objects, if you can find one 2D plane that separates them, then the 3D objects are not overlapping. Another example is when you&#8217;re given two 2D objects, and if you can find one line (which is 1D) that separates them, then the 2D objects are not overlapping.</p>
<p>There are some conditions to be fulfilled, such as the objects being convex and disjoint and whatever. (yes I&#8217;m a mathematician&#8230;) I&#8217;ll leave it to you to do your own reading.</p>
<p>But for our purposes, how do we check if that rectangle of Excel cells we want to merge won&#8217;t overlap with any existing merged cells? We have these conditions that make our lives easier:</p>
<ul>
<li>The merged cells are rectangular</li>
<li>The 4 end points (top-left, top-right, bottom-left, bottom-right) of a merged cell are in whole numbers</li>
<li>The (merged) cells map strictly to a 2D rectangular grid</li>
</ul>
<p>Since the merged cells are rectangular, they&#8217;re also convex (I&#8217;m not going to explain why, just trust me). Since the 4 end points are in whole numbers, line boundaries can be easily calculated (it&#8217;s easy to check if something is <7 or >=8 for example). And since they map strictly to a 2D rectangular grid, the separating axis is a line. And even better, you can always find a subset of solutions of those separating axes that are either horizontal or vertical.</p>
<p>Ok, diagrams are in order.</p>
<p><img src="http://polymathprogrammer.com/images/blog/201205/collisiondetectionmergedcells.png" alt="Collision detection in merged cells" /></p>
<p>So in our case, as long as you can find <em>one</em> horizontal line or <em>one</em> vertical line that separates the 2 merged cells we&#8217;re checking, then the 2 merged cells are separate.</p>
<p>Let&#8217;s try an example. Excel uses cell references that are in the A1 format, which means row 3 column 4 becomes &#8220;D3&#8243;. The column index uses alphabets and is in base-26. <a href="http://polymathprogrammer.com/2011/11/08/calculating-excel-column-names/">Read more here</a>.</p>
<p>We&#8217;re going to simplify that. Let&#8217;s say our existing set of merged cells only has one entry. This merged cell has the top-left corner at row 1 column 1, and the bottom-right corner at row 3 column 4. Suppose we want to check if this merge cell overlaps: top-left corner at row 7 column 8, bottom-right corner at row 10 column 10.</p>
<p>The horizontal line of 5 fits the bill, or the line y=5 if you want to be mathematical about it (but y goes from negative to positive downwards instead of the usual <a href="http://polymathprogrammer.com/2008/09/01/cartesian-coordinates-and-transformation-matrices/">Cartesian</a> y). Or y=6. Or even y=7 (note that the line can &#8220;touch&#8221; one of the merged cells, but not <em>both</em>. This is where the &#8220;whole number&#8221; condition comes in).</p>
<p>The vertical lines x=5, x=6 or x=8 also fit the bill.</p>
<p>Thus, our 2 merged cells don&#8217;t overlap.</p>
<p>So what&#8217;s the programmatic way to check? You&#8217;d be surprised at the simplicity. To make it easier, the variables with &#8220;StartRowIndex&#8221; mean the top row of the merged cell, &#8220;EndRowIndex&#8221; mean the bottom row of the merged cell. And &#8220;StartColumnIndex&#8221; mean the left-most column of the merged cell, and &#8220;EndColumnIndex&#8221; mean the right-most column of the merged cell.</p>
<div class="codediv">
<pre>
if (!(iEndRowIndex < mc.StartRowIndex || iStartRowIndex > mc.EndRowIndex || iEndColumnIndex < mc.StartColumnIndex || iStartColumnIndex > mc.EndColumnIndex))
{
    // there's an overlap!
}
</pre>
</div>
<p>So the merge cell we want to check has top-left corner at (iStartRowIndex, iStartColumnIndex) and bottom-right corner at (iEndRowIndex, iEndColumnIndex).</p>
<p>The variable &#8220;mc&#8221; refers to a custom class I use to represent merged cells. Obviously, you&#8217;d run that condition in a loop through all your existing merged cells. If you can&#8217;t find an overlap after running through that loop, then the merge cell you&#8217;re checking is good to go.</p>
<p>Let&#8217;s run through the individual conditions.</p>
<ul>
<li>(iEndRowIndex < mc.StartRowIndex) means our merged cell is completely above the existing merged cell</li>
<li>(iStartRowIndex > mc.EndRowIndex) means our merged cell is completely below the existing merged cell</li>
<li>(iEndColumnIndex < mc.StartColumnIndex) means our merged cell is completely to the left of the existing merged cell</li>
<li>(iStartColumnIndex > mc.EndColumnIndex) means our merged cell is completely to the right of the existing merged cell</li>
</ul>
<p>The first 2 conditions check for the existence of a horizontal separating axis. The next 2 conditions check for the existence of a vertical separating axis.</p>
<p>Note the negation of the entire boolean condition. Those 4 conditions check for existence of solutions. Negation means checking for overlaps.</p>
<p>Note also that we use strictly greater than or strictly less than checks. If the merge cells share a row or column, then they overlap, right?</p>
<p>Did you know my first draft of writing the code had me checking 6 different conditions? Each condition had its own if statements. This one just had one. I&#8217;m so lucky to have learnt the separating axis theorem. I was checking if a point was above, within or below the merge cell, then I had to check if the point was to the left, within or to the right of the merge cell, and &#8230; urgh, it was horrible&#8230;</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/PolymathProgrammer?a=dIFydtjacP4:ojAiL83K6KY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/PolymathProgrammer?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PolymathProgrammer?a=dIFydtjacP4:ojAiL83K6KY:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/PolymathProgrammer?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PolymathProgrammer?a=dIFydtjacP4:ojAiL83K6KY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/PolymathProgrammer?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/PolymathProgrammer/~4/dIFydtjacP4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://polymathprogrammer.com/2012/05/04/collision-detection-merging-excel-cells/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://polymathprogrammer.com/2012/05/04/collision-detection-merging-excel-cells/</feedburner:origLink></item>
		<item>
		<title>$100 Startup bundle</title>
		<link>http://feedproxy.google.com/~r/PolymathProgrammer/~3/yisBX3HsfXI/</link>
		<comments>http://polymathprogrammer.com/2012/05/01/100-dollar-startup-bundle/#comments</comments>
		<pubDate>Tue, 01 May 2012 05:18:04 +0000</pubDate>
		<dc:creator>Vincent</dc:creator>
				<category><![CDATA[Curiosita]]></category>
		<category><![CDATA[100 dollar]]></category>
		<category><![CDATA[bundle]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[chris guillebeau]]></category>
		<category><![CDATA[only72]]></category>
		<category><![CDATA[startup]]></category>

		<guid isPermaLink="false">http://polymathprogrammer.com/?p=3573</guid>
		<description><![CDATA[I respect Chris Guillebeau a lot (possibly even a raving fan). His book $100 Startup is going to be on sale soon. But the more important reason is that you can get that together with a bunch of business-y stuff at Only72 right now for $100 total (yes, that&#8217;s totally an affiliate link). Out of [...]]]></description>
			<content:encoded><![CDATA[<p>I respect Chris Guillebeau a lot (possibly even a raving fan). His book $100 Startup is going to be on sale soon. But the more important reason is that you can get that together with a bunch of business-y stuff at <a href="http://only72.com/a/t9sOcb7z">Only72</a> right now for $100 total (yes, that&#8217;s totally an affiliate link).</p>
<p>Out of all the products in the bundle, I&#8217;m interested in the &#8220;How To Make iPhone Apps With No Programming Experience&#8221; ebook, the small business infrastructure ebook, and guide to publishing ebook.</p>
<p>You want to start a business? This&#8217;ll get you started. Hurry, it&#8217;s <a href="http://only72.com/a/t9sOcb7z">only on sale for 72 hours</a> (hence the name).</p>
<p>Can&#8217;t wait to read Chris&#8217;s new book. Have I mentioned that&#8217;s a hardcover that will be shipped anywhere you live if you buy the bundle now?</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/PolymathProgrammer?a=yisBX3HsfXI:Og66akDjawE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/PolymathProgrammer?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PolymathProgrammer?a=yisBX3HsfXI:Og66akDjawE:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/PolymathProgrammer?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PolymathProgrammer?a=yisBX3HsfXI:Og66akDjawE:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/PolymathProgrammer?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/PolymathProgrammer/~4/yisBX3HsfXI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://polymathprogrammer.com/2012/05/01/100-dollar-startup-bundle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://polymathprogrammer.com/2012/05/01/100-dollar-startup-bundle/</feedburner:origLink></item>
		<item>
		<title>Counting in Chinese</title>
		<link>http://feedproxy.google.com/~r/PolymathProgrammer/~3/fojOtVWE784/</link>
		<comments>http://polymathprogrammer.com/2012/04/30/counting-in-chinese/#comments</comments>
		<pubDate>Mon, 30 Apr 2012 12:49:40 +0000</pubDate>
		<dc:creator>Vincent</dc:creator>
				<category><![CDATA[Curiosita]]></category>
		<category><![CDATA[cantonese]]></category>
		<category><![CDATA[chinese]]></category>
		<category><![CDATA[counting]]></category>
		<category><![CDATA[hokkien]]></category>
		<category><![CDATA[japanese]]></category>
		<category><![CDATA[numbers]]></category>
		<category><![CDATA[numerals]]></category>
		<category><![CDATA[orcasquall]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://polymathprogrammer.com/?p=3570</guid>
		<description><![CDATA[You learn the basics of counting numbers in Chinese. Also, there was a lot of wind. And my camera battery threatened to die on me, hence the hurried nature. I also counted from 1 to 10 in Cantonese, Hokkien and Japanese. To those participating in VEDA, you made it! VEDA stands for &#8220;Vlog Every Day [...]]]></description>
			<content:encoded><![CDATA[<p><iframe width="560" height="315" src="http://www.youtube.com/embed/LPinHAUm9dQ" frameborder="0" allowfullscreen></iframe></p>
<p>You learn the basics of counting numbers in Chinese. Also, there was a lot of wind. And my camera battery threatened to die on me, hence the hurried nature. I also counted from 1 to 10 in Cantonese, Hokkien and Japanese.</p>
<p>To those participating in VEDA, you made it! VEDA stands for &#8220;Vlog Every Day (in) April&#8221;. It appears to be a thing that happens on YouTube. There&#8217;s also VlogMAFIA, which stands for &#8220;Vlogs May Appear Frequently In April&#8221;. YouTube people are fun&#8230;</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/PolymathProgrammer?a=fojOtVWE784:g3DSWyZaSGY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/PolymathProgrammer?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PolymathProgrammer?a=fojOtVWE784:g3DSWyZaSGY:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/PolymathProgrammer?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PolymathProgrammer?a=fojOtVWE784:g3DSWyZaSGY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/PolymathProgrammer?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/PolymathProgrammer/~4/fojOtVWE784" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://polymathprogrammer.com/2012/04/30/counting-in-chinese/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://polymathprogrammer.com/2012/04/30/counting-in-chinese/</feedburner:origLink></item>
		<item>
		<title>FTP clients for Mac</title>
		<link>http://feedproxy.google.com/~r/PolymathProgrammer/~3/byh9HbCApKw/</link>
		<comments>http://polymathprogrammer.com/2012/04/26/mac-ftp-clients/#comments</comments>
		<pubDate>Thu, 26 Apr 2012 14:01:03 +0000</pubDate>
		<dc:creator>Vincent</dc:creator>
				<category><![CDATA[Curiosita]]></category>
		<category><![CDATA[cyberduck]]></category>
		<category><![CDATA[fetch]]></category>
		<category><![CDATA[filezilla]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[rackspace]]></category>
		<category><![CDATA[rbrowser]]></category>
		<category><![CDATA[smartftp]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://polymathprogrammer.com/?p=3564</guid>
		<description><![CDATA[I use an FTP client to transfer my web files to my web server. And I hardly have to do even that. That said, the in-built interface of web hosting companies can leave a lot to be desired&#8230; So I use an FTP client. I didn&#8217;t search very hard, and found something that works well [...]]]></description>
			<content:encoded><![CDATA[<p>I use an FTP client to transfer my web files to my web server. And I hardly have to do even that. That said, the in-built interface of web hosting companies can leave a lot to be desired&#8230;</p>
<p>So I use an FTP client. I didn&#8217;t search very hard, and found something that works well for me. It&#8217;s <a href="http://www.smartftp.com/">SmartFTP</a> and you can check it out.</p>
<p>But I&#8217;m a Windows user. What if you&#8217;re a Mac user? (I understand a certain percentage of people read my blog on Mac machines. Ok, I&#8217;m basing it on users on Safari and iPad/iPhone, but still, it&#8217;s a relatively good assumption&#8230;).</p>
<p>So here are 5 Mac FTP clients. <strong>Disclaimer</strong>: this is an article from Rackspace. I&#8217;m not paid.</p>
<h3>FTP For Free: Top 5 Mac FTP Clients You Won&#8217;t Pay For</h3>
<p>Every organization seems to have its head in the cloud. The off-site, third-party solution for hosting, sharing files and archiving data is fast becoming the de facto tool method for individuals and organizations seeking to collaborate and share files.</p>
<p>But the truth is &#8220;the cloud&#8221; is simply a newer, more sophisticated version of a seasoned technology that&#8217;s been in place for years. Individuals and organizations have been using off-site and third-party resources and technology like File Transfer Protocol (FTP) servers and clients to store and share data for decades. The Cloud and <a href="http://www.rackspace.com/">cloud storage</a> continue to make headlines, but FTP is still widely used behind the scenes as an easy way to transfer, share and synchronize large files.</p>
<p>One of the reasons FTP use has declined is its inherent lack of security. According to technology blogger Milton Keynes, Buckinghamshire, United Kingdom, FTP is <a href="http://alblue.bandlem.com/2009/02/why-do-people-still-use-ftp.html">an anachronistic protocol</a> and should be abandoned in favor of more secure technologies.</p>
<p>But for quickly and easily transferring large files like data sets and high-resolution photos and video, FTP can’t be beat. Additionally, many FTP solutions are available for free; here are five of our favorite FTP clients for Mac.</p>
<h3>FileZilla</h3>
<p>By far the most popular free FTP client, and not just for Mac users. FileZilla is an open-source FTP client that supports Mac, Microsoft Windows and GNU/Linux, according to the <a href="http://filezilla-project.org/">FileZilla Project</a>. One drawback: while the FileZilla client is platform-independent, the FTP Server is Microsoft Windows-specific.</p>
<p><strong>Ed</strong>: I&#8217;m a .NET programmer. This isn&#8217;t that bad a drawback&#8230; But I&#8217;m not a Microsoft fan either. Be fanatic about what you can do with the platform, not the platform itself.</p>
<p>Support is plentiful for FileZilla, and available through the FileZilla website as well as an associated wiki, user and developer forums, bug fix requests and tracker reports.</p>
<h3>Fetch Softworks</h3>
<p>This is the original FTP client for the Mac, dating back to 1989. Fetch supports both FTP and SFTP, as well as FTP with TLS/SSL (FTPS), according to the <a href="http://fetchsoftworks.com/">Fetch website</a>. One of Fetch&#8217;s greatest strengths is its ease of use; as with most things Macintosh, synchronizing and transferring files is as easy as drag-and-drop, and Fetch includes intuitive features like automatically resuming downloads of stalled or failed transfers. Fetch is compatible with nearly all FTP servers.</p>
<p>The Fetch website includes links to support resources, user forums, FAQs and message boards for users. The catch? Fetch is only free for a fifteen-day trial period, after which you must purchase the software.</p>
<p><strong>Ed</strong>: I kinda like this one. What&#8217;s my reason? <em>There&#8217;s a dog</em>. Ok fine, the software looks competent. Most (if not all) purchases are based on emotions. On first impressions, I feel Fetch is better than the other 4 simply because I can imagine feeling comfortable using it. Understand that &#8220;free&#8221; is also a price. (I have nothing against free open-source projects)</p>
<h3>Cyberduck</h3>
<p>CNET.com editors call <a href="http://download.cnet.com/Cyberduck/3000-2160_4-10246246.html">Cyberduck a &#8220;lean, mean, file managing machine,&#8221;</a> and with good reason. The free, open-source software can interface with standard FTP servers as well as cloud-based solutions like Google Docs and Rackspace Cloud Files. Cyberduck, while an entry level (read: easy-to-use with limited functionality) client, nonetheless handles basic transfers, synchronization and interoperability quickly and easily.</p>
<p>If you’re looking for an agnostic, simple FTP client without a lot of unnecessary bells and whistles, give Cyberduck a try.</p>
<h3>RBrowser</h3>
<p>RBrowser is a UNIX-based, free, full-featured FTP and SFTP client designed with a simple graphic interface. RBrowser is more advanced than other SFTP clients; it combines all the secure tools available on both users’ local and remote systems, as well as maintaining a continuous secure connection to create links, according to the <a href="http://www.rbrowser.com/">RBrowser website</a>. With RBrowser, users are empowered to  move and edit files quickly, and can make changes to files using direct remote-to-remote operations.</p>
<p>For more skilled users and UNIX-savvy administrators, RBrowser is the way to go.</p>
<h3>Built-in Mac OS X FTP</h3>
<p>While it’s not as full-featured as stand-alone FTP clients, Apple’s built-in FTP client works great if you’re looking for a simple way to transfer files quickly. It can be accessed directly from your Mac OS X desktop. The OS X Daily website offers <a href="http://osxdaily.com/2011/02/07/ftp-from-mac/">step-by-step instructions with detailed screenshots</a>. Once connected, you can browse files as though you’re looking at any local folder on your desktop, and transferring files is drag-and-drop.</p>
<p><em><strong>Rackspace® Hosting</strong> is the service leader in cloud computing and founder of <strong>OpenStack™</strong>, an open source cloud platform. The San Antonio-based company provides <strong>Fanatical Support®</strong> to its customers, across a portfolio of IT services, including Managed Hosting and Cloud Computing. For more information, visit www.rackspace.com.</em></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/PolymathProgrammer?a=byh9HbCApKw:XhwlBNGwE54:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/PolymathProgrammer?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PolymathProgrammer?a=byh9HbCApKw:XhwlBNGwE54:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/PolymathProgrammer?d=I9og5sOYxJI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/PolymathProgrammer?a=byh9HbCApKw:XhwlBNGwE54:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/PolymathProgrammer?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/PolymathProgrammer/~4/byh9HbCApKw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://polymathprogrammer.com/2012/04/26/mac-ftp-clients/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://polymathprogrammer.com/2012/04/26/mac-ftp-clients/</feedburner:origLink></item>
	</channel>
</rss>

