<?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>PANESAR.net &#187; Algorithms</title>
	<atom:link href="http://www.panesar.net/category/development/algorithms/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.panesar.net</link>
	<description>Making the world a better place with ColdFusion, Web Startup, and Software</description>
	<lastBuildDate>Wed, 07 Jul 2010 21:20:34 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>If you could unlearn everything you know, and start again&#8230;</title>
		<link>http://www.panesar.net/2010/03/03/if-you-could-unlearn-everything-you-know-and-start-again/</link>
		<comments>http://www.panesar.net/2010/03/03/if-you-could-unlearn-everything-you-know-and-start-again/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 06:59:58 +0000</pubDate>
		<dc:creator>Jas Panesar</dc:creator>
				<category><![CDATA[Algorithms]]></category>
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://www.panesar.net/?p=216</guid>
		<description><![CDATA[Einstein wasn't wrong when he said the only thing that got in the way of his learning was his education. Learning how to think -- creatively to solve problems, to find dots and connect them, are skills that are hard to find, hard to develop, especially when we can get into a trance with technology.

I think we're most alive when we create.]]></description>
			<content:encoded><![CDATA[<div>
<p>Einstein wasn&#8217;t wrong when he said the only thing that got in the way of his learning was his education. Learning how to think &#8212; creatively to solve problems, to find dots and connect them, are skills that are hard to find, hard to develop, especially when we can get into a trance with technology.</p>
<p>I think we&#8217;re most alive when we create.</p>
<p>So that&#8217;s all I&#8217;d do. Create, create, create. Solutions for lots of problems, in lots of ways, to realize that everyone just wants to answer one question with their solutions nearly every time. &#8220;Where is everything at?&#8221;</p>
<p>Learning how, and why to think from multiple perspectives when looking at solving a problem is infinitely more important than the tool(s) you pick to use them.</p>
<p>The tools you pick will be better based on the clarity and your ability to boil things down to their essence. Tools that increase clarity and decrease confusion are good. Tools that let you (and users) get more done with less effort, are good.</p>
<p>Helping people make the world a better place by letting the system manage the details, and letting people manage the system (and relationships with others) is what can empower software to change the world for the better, instead of dealing with the 70% of failing projects out there.If</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.panesar.net/2010/03/03/if-you-could-unlearn-everything-you-know-and-start-again/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ooops &#8211; Automation can be dangerous</title>
		<link>http://www.panesar.net/2010/02/24/automation-can-be-dangerous/</link>
		<comments>http://www.panesar.net/2010/02/24/automation-can-be-dangerous/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 06:55:19 +0000</pubDate>
		<dc:creator>Jas Panesar</dc:creator>
				<category><![CDATA[Algorithms]]></category>

		<guid isPermaLink="false">http://www.panesar.net/?p=213</guid>
		<description><![CDATA[So... had a bit of a mixup.

February was a bit of a busy month for me so I wrote some content in advance to publish for sure, and to add more when I had the chance..

Evidently, PHP and wordpress do not work out of the box to automaticaly publish scheduled content.

Maybe I should go to a ColdFusion blog. :)

In any event, my apologies, I'll post the rest and it should show up on the RSS feeds.
]]></description>
			<content:encoded><![CDATA[<p>So&#8230; had a bit of a mixup.</p>
<p>February was a bit of a busy month for me so I wrote some content in advance to publish for sure, and to add more when I had the chance..</p>
<p>Evidently, PHP and wordpress do not work out of the box to automaticaly publish scheduled content.</p>
<p>Maybe I should go to a ColdFusion blog. <img src='http://www.panesar.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>In any event, my apologies, I&#8217;ll post the rest and it should show up on the RSS feeds.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.panesar.net/2010/02/24/automation-can-be-dangerous/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Safety, security and storage of information and passwords</title>
		<link>http://www.panesar.net/2010/02/03/safety-security-and-storage-of-information-and-password/</link>
		<comments>http://www.panesar.net/2010/02/03/safety-security-and-storage-of-information-and-password/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 20:28:22 +0000</pubDate>
		<dc:creator>Jas Panesar</dc:creator>
				<category><![CDATA[Algorithms]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Startups]]></category>

		<guid isPermaLink="false">http://www.panesar.net/?p=208</guid>
		<description><![CDATA[In creating software, be it a startup or a client project, key decisions need to be made and implemented based on security.

In the world of security I have learnt a few things, usually the long way.]]></description>
			<content:encoded><![CDATA[<p>In creating software, be it a startup or a client project, key decisions need to be made and implemented based on security.</p>
<p>In building secure applications that let me sleep at night, I have learnt a few things:</p>
<ol>
<li><strong>Security is relative.</strong> You must keep up, and ahead of the curve.  Your thinking and design must be steps ahead of what&#8217;s happening and what may be possible in the near future.  In the end, if someone wants to, given enough of their time, resources and money (more than what you have spent) it, still, conceivably, is possible that security may be compromised.</li>
<li><strong>Security vs. Convenience. </strong> Unless you are a expert of making complex security disappear &#8220;under the covers&#8221;, there is still a fundamental  acknowledgment that has to be made.  The more security you implement in an application, the performance, and usability of that application becomes less than simple.</li>
<li><strong>The path of least resistance. </strong>Instead of building a big, thick wall of security, consider building many, thinner walls. Just like someone who asks you a question instead of googling it, someone wanting access to a system will want to do so the quickest way possible.  If they are out to find the next outpost, they will move on if there is layer after layer of security, like an onion skin.
<p>Why?  Most unscrupulous attempts to access a system aren&#8217;t really about you.  Most valuable is the most generic.  Your server resources to be illegitimately used to send out spam, etc, and not necessarily for what your application itself does.  The reality is most attempts to break into your site will be automated scripts/botnets that sweep the entire internet.  While you can build mega security features, a lot can be said by good design and putting up multiple &#8220;walls&#8221; instead of one big &#8220;wall&#8221;.  Design your application to inherently check and enforce security as much as it can internally.  Package it with smart public facing interfaces, properly hardened and tested with client and server side scrubbing and validation, and we have a start.</li>
<li><strong>Passwords be safe.</strong> Do your best, reasonably to secure the single, most vulnerable part of your system.  Relative to the sensitivity of what is behind the password, implement password security measures.  Logarithmic delays between failed attempts.  Log and report invalid attempts. Encrypt your passwords.
<p>One of the biggest things you can do if/where necessary is to store your passwords securely.  This is a great article on <a href="http://codahale.com/how-to-safely-store-a-password/" target="_blank">How to safely store a password</a>.</li>
</ol>
<p>If you have any ideas to add to this list, please leave them in the comments.. I&#8217;ll update the list!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.panesar.net/2010/02/03/safety-security-and-storage-of-information-and-password/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Great Software Systems</title>
		<link>http://www.panesar.net/2010/01/02/great-software-systems/</link>
		<comments>http://www.panesar.net/2010/01/02/great-software-systems/#comments</comments>
		<pubDate>Sat, 02 Jan 2010 19:21:20 +0000</pubDate>
		<dc:creator>Jas Panesar</dc:creator>
				<category><![CDATA[Algorithms]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Startups]]></category>

		<guid isPermaLink="false">http://www.panesar.net/?p=178</guid>
		<description><![CDATA[Happy New Year!
The past few weeks I&#8217;ve been thinking about how I&#8217;d like to continue to build in 2010.
Whether you are on the business side of technology, or the implementation side, there are some common elements to all projects no matter the viewpoint.
Great software systems:

Make users great. Make your users awesome at what they do [...]]]></description>
			<content:encoded><![CDATA[<p>Happy New Year!</p>
<p>The past few weeks I&#8217;ve been thinking about how I&#8217;d like to continue to build in 2010.</p>
<p>Whether you are on the business side of technology, or the implementation side, there are some common elements to all projects no matter the viewpoint.</p>
<p>Great software systems:</p>
<ul>
<li><strong>Make users great. </strong>Make your users awesome at what they do when they use your software.  If you don&#8217;t, you have a dud.</li>
<li><strong>Are mature.</strong> People manage the system, the system manages the details.    Immature: People make their own systems, manage their own details, nothing is connected, or consistent.</li>
<li><strong>Understand the data is the system: </strong>The data <strong>is</strong> the system to the end-user.  Not your software.  The software is merely packaging to the information they need.</li>
<li><strong>Understand the integrity of the data: </strong>What is the data. What does it mean.  What states does it exist in.  How does it interact with other data.  Why is this important?</li>
<li><strong>Keep the edge: </strong>Software is built around the competitive advantage of magnifying and fueling the existing best practices of &#8220;This is how we do it here&#8221;.  Don&#8217;t lose it by doing it your way.</li>
<li><strong>Are invisible</strong>: &#8220;Don&#8217;t make me think&#8221; when I use it.</li>
<li><strong>Self-Monitor</strong>: Bring things to my attention</li>
<li><strong>Master the Complex: </strong>It &#8217;s easy to make things complex.  It is hard to make complexity into something simple.  Understand that complexity is not the issue most of the time.  It&#8217;s confusion.</li>
</ul>
<p>Maybe this will become a growing list!  Add your own below!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.panesar.net/2010/01/02/great-software-systems/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Startup Lesson Learnt: Building a Web application vs Desktop</title>
		<link>http://www.panesar.net/2009/09/23/startup-lesson-learnt-building-a-web-application-vs-desktop/</link>
		<comments>http://www.panesar.net/2009/09/23/startup-lesson-learnt-building-a-web-application-vs-desktop/#comments</comments>
		<pubDate>Wed, 23 Sep 2009 22:08:43 +0000</pubDate>
		<dc:creator>Jas Panesar</dc:creator>
				<category><![CDATA[Algorithms]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Startups]]></category>

		<guid isPermaLink="false">http://www.panesar.net/?p=161</guid>
		<description><![CDATA[I build a Web application when I don't want to:

- be supporting a thousand environments each with their own quirks. Specifically, viruses, trojans, software interfering, and making it work the same everywhere.

- worry about applying upgrades and taking lots of calls]]></description>
			<content:encoded><![CDATA[<div>
<p>I build a Web application when I don&#8217;t want to:</p>
<p><strong>- be supporting a thousand environments each with their own quirks.</strong> Specifically, viruses, trojans, software interfering, and making it work the same everywhere.</p>
<p><strong>- worry about applying upgrades and taking lots of calls</strong></p>
<p><strong>- dealing with clients who lose their data</strong></p>
<p>I pick a thick client when the computation is intensive per transaction, that would be simultaneous, or there is significant data transfer per transaction.</p>
<p>I like fixing everyone&#8217;s problems with one upgrade. It might not be for everyone, but it&#8217;s where the quality of my life and those I work for goes up. Making a web app work on a few different browsers may be easier than a ton of different operating systems in different conditions.</p>
<p>With the advent of Flex/Air you can provide an entire application experience in the browser. The browser is becoming the universal interface, whether it&#8217;s installed locally or in the cloud.</p>
<p>Web apps have their cons too. I just am more motivated to build web apps as the pro&#8217;s seem to outweigh the cons for the projects I am choosing.</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.panesar.net/2009/09/23/startup-lesson-learnt-building-a-web-application-vs-desktop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Batch Processing and Data Parsing best practices in ColdFusion</title>
		<link>http://www.panesar.net/2009/07/07/batch-processing-and-data-parsing-best-practices-in-coldfusion/</link>
		<comments>http://www.panesar.net/2009/07/07/batch-processing-and-data-parsing-best-practices-in-coldfusion/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 00:23:37 +0000</pubDate>
		<dc:creator>Jas Panesar</dc:creator>
				<category><![CDATA[Algorithms]]></category>
		<category><![CDATA[Coldfusion]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://www.panesar.net/?p=155</guid>
		<description><![CDATA[One thing I've found myself doing more and more in ColdFusion is using it for it's integration powers to parse data, or do batch performing tasks.  With it's Java underbelly, ColdFusion does most things great, and if you want even more performance, tie into the Java layer!

I come from the group of people who pursue the dream that computers and technology should make people's lives easier.  That's why ruthless automation is at the center of most startups, or businesses that are growing.  Keep people dealing with people -- what they do best, and let your system handle the details for you!]]></description>
			<content:encoded><![CDATA[<div>
<p>One thing I&#8217;ve found myself doing more and more in ColdFusion is using it for it&#8217;s integration powers to parse data, or do batch performing tasks.  With it&#8217;s Java underbelly, ColdFusion does most things great, and if you want even more performance, tie into the Java layer!</p>
<p>I come from the group of people who pursue the dream that computers and technology should make people&#8217;s lives easier.  That&#8217;s why ruthless automation is at the center of most startups, or businesses that are growing.  Keep people dealing with people &#8212; what they do best, and let your system handle the details for you!</p>
<p>1) <strong>Maintain a file upload table (Parent table).</strong> For every file you upload you should be able to keep a list of each file and what status it is in (uploaded, processed, unprocessed)</p>
<p>2) <strong>Temp table to store all the rows of the data file. (child table)</strong> Import the entire data file into a temporary table. Attempting to do it all in memory will inevitably lead to some errors. Each row in this table will link to a file upload table entry above.</p>
<p>3) <strong>Maintain a processing status</strong> &#8211; For each row of the datafile you bring in, set a &#8220;process/unprocessed&#8221; tag. This way if it breaks, you can start from where you left off. As you run through each line, set it to be &#8220;processed&#8221;.</p>
<p>4) <strong>Transaction</strong> &#8211; use cftransaction if possible to commit all of it at once, or at least one line at a time (with your 5 queries). That way if something goes boom, you don&#8217;t have one row of data that is half computed/processed/updated/tested.</p>
<p>5) Once you&#8217;re done processing, set the file name entry in the table in step 1 to be &#8220;processed&#8221;</p>
<p>By using the approach above, if something fails, you can set it to start where it left off, or at least have a clearer path of where to start investigating, or worst case clean up in your data. You will have a clear way of displaying to the user the status of the current upload processing, where it&#8217;s at, and where it left off if there was an error.</p>
<p>If you have any questions, let me know.</p>
<p><strong>Other thoughts:</strong></p>
<ol>
<li>You can increase timeouts, give the VM more memory, put it in 64 bit but all of those will only increase the capacity of your system so much. It&#8217;s a good idea to do these per call and do it in conjunction with the above.</li>
<li>Java has some neat file processing libraries that are available as CFCS. if you run into a lot of issues with speed, you can use one of those to read it into a variable and then into the database</li>
<li>If you are playing with XML, do not use coldfusion&#8217;s xml parsing. It works well for smaller files and has fits when things get bigger. There are several cfc&#8217;s written out there (check riaforge, etc) that wrap some excellent java libraries for parsing xml data. You can then create a cfquery manually if need be with this data.</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.panesar.net/2009/07/07/batch-processing-and-data-parsing-best-practices-in-coldfusion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
