<?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"
	>

<channel>
	<title>Senses: A blog about the Thirdi Software perception</title>
	<atom:link href="http://senses.thirdi.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://senses.thirdi.com</link>
	<description>Welcome to Senses: a place for Thirdi Software to explore what's seen, heard, and felt about technology, software development, and life experiences.</description>
	<pubDate>Wed, 05 Nov 2008 17:43:31 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Movember</title>
		<link>http://senses.thirdi.com/posts/16-movember/</link>
		<comments>http://senses.thirdi.com/posts/16-movember/#comments</comments>
		<pubDate>Wed, 05 Nov 2008 17:43:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[charity]]></category>

		<category><![CDATA[movember]]></category>

		<category><![CDATA[mustache]]></category>

		<guid isPermaLink="false">http://senses.thirdi.com/?p=16</guid>
		<description><![CDATA[It&#8217;s been a while since the last post, but have no fear - Movember is here!
Abe and I have decided to help raise money and awareness for men&#8217;s health this month by taking part in the global charity event Movember.
Check out our Movember blog for the details and daily updates&#8230;

]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been a while since the last post, but have no fear - Movember is here!</p>
<p>Abe and I have decided to help raise money and awareness for men&#8217;s health this month by taking part in the global charity event <a title="Movember (formerly known as November)" href="http://movember.com" target="_blank">Movember</a>.</p>
<p>Check out our <a title="Thirdi Movember" href="http://movember.thirdi.com" target="_self">Movember blog</a> for the details and daily updates&#8230;</p>
<p><img style="vertical-align: middle;" src="http://senses.thirdi.com/wp-content/uploads/2008/11/mustache.jpg" alt="Movember Mustache" width="200" height="200" /></p>
]]></content:encoded>
			<wfw:commentRss>http://senses.thirdi.com/posts/16-movember/feed/</wfw:commentRss>
		</item>
		<item>
		<title>A Midsummer Night&#8217;s Dream</title>
		<link>http://senses.thirdi.com/posts/15-a-midsummer-nights-dream/</link>
		<comments>http://senses.thirdi.com/posts/15-a-midsummer-nights-dream/#comments</comments>
		<pubDate>Wed, 23 Jul 2008 22:06:02 +0000</pubDate>
		<dc:creator>Matt Friesen</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[change]]></category>

		<category><![CDATA[growth]]></category>

		<category><![CDATA[metamorphosis]]></category>

		<category><![CDATA[team]]></category>

		<guid isPermaLink="false">http://senses.thirdi.com/?p=15</guid>
		<description><![CDATA[

Have you ever been in &#8220;the zone&#8221;?
That headspace that lies somewhere between complete focus and mind numbing obsession.  Well, I snapped out of it two days ago and realized the first half of summer has just disappeared.
The past few weeks have been intense and over night Thirdi has gone through a complete metamorphosis.
First, Thirdi says [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://senses.thirdi.com/wp-includes/images/sunset600.jpg" alt="A Midsummer Night's Dream" /><br />
<br/><br />
Have you ever been in &#8220;the zone&#8221;?</p>
<p>That headspace that lies somewhere between complete focus and mind numbing obsession.  Well, I snapped out of it two days ago and realized the first half of summer has just disappeared.</p>
<p>The past few weeks have been intense and over night Thirdi has gone through a complete metamorphosis.</p>
<p>First, Thirdi says goodbye to the teams first developer: Ivan Sim. He has moved on to explore new technologies at <a title="MDA Corporation" href="http://www.mdacorporation.com/" target="_blank">MDA Corporation</a>.  We wish him the best of luck in his new adventures.</p>
<p>Second, Thirdi has a few new faces.</p>
<p><strong>Andrea Tam - Project Manager</strong><br />
Andrea has been involved with Thirdi since the beginning as manager and contact point for <a title="Chosen Stock" href="http://www.chosenstock.com" target="_blank">Chosen Stock</a>.  Her intimate knowledge of client relations with Thirdi will go a long way in redefining our process and improving the way we do business.</p>
<p><strong>Charles Iliya Krempeaux - <em>Very</em> Senior Developer</strong><br />
Let me start off by saying his title is not a reference to his age. Charles is a recent graduate of <a title="Navarik " href="http://www.navarik.com" target="_blank">Navarik</a>.  Their loss is our gain and his senior level skill set is a welcome addition to the team. Not to mention his intimidating bouncer like presence.</p>
<p><strong>Rado Gazo - Senior Developer</strong><br />
According to <a title="Tony Burbage" href="http://burbaget.blogspot.com/" target="_blank">Tony Burbage</a>, Rado is a yoda. Charles classifies him as &#8220;one of the top 3 developers I&#8217;ve ever worked with&#8221;. That&#8217;s high praise. &#8216;Nuff said.</p>
<p>So here we are in the middle of summer with the makings of an incredible team. The future of web software is bright and Thirdi is poised to make a difference.</p>
]]></content:encoded>
			<wfw:commentRss>http://senses.thirdi.com/posts/15-a-midsummer-nights-dream/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The forecast calls for summer</title>
		<link>http://senses.thirdi.com/posts/14-the-forecast-calls-for-summer/</link>
		<comments>http://senses.thirdi.com/posts/14-the-forecast-calls-for-summer/#comments</comments>
		<pubDate>Mon, 09 Jun 2008 23:06:58 +0000</pubDate>
		<dc:creator>Matt Friesen</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[bonus]]></category>

		<category><![CDATA[summer]]></category>

		<category><![CDATA[vacation]]></category>

		<guid isPermaLink="false">http://senses.thirdi.com/posts/14-the-forecast-calls-for-summer/</guid>
		<description><![CDATA[With summer around the corner, here at Thirdi we&#8217;ve decided to add a few days of vacation. It&#8217;s not so much a throwback to school vacation, but a chance to take advantage of the weather and enjoy some extra sun.
Each developer is given 3 Summer Days (one for each month of summer) and allowed to [...]]]></description>
			<content:encoded><![CDATA[<p>With summer around the corner, here at <a href="http://www.thirdi.com" title="Thirdi Software" target="_blank">Thirdi</a> we&#8217;ve decided to add a few days of vacation. It&#8217;s not so much a throwback to school vacation, but a chance to take advantage of the weather and enjoy some extra sun.</p>
<p>Each developer is given 3 Summer Days (one for each month of summer) and allowed to use them as they see fit. There is no restriction on consecutive days used, nor on notice of absence. The only restriction is that their escape doesn&#8217;t affect crunch time.</p>
<p>So keep your eyes open around the trails of UBC, the hills of North Burnaby and the Central Park pitch &amp; putt - you just may see a developer on the loose!</p>
]]></content:encoded>
			<wfw:commentRss>http://senses.thirdi.com/posts/14-the-forecast-calls-for-summer/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Unit Testing - Autoload Classes</title>
		<link>http://senses.thirdi.com/posts/12-unit-testing-autoload-classes/</link>
		<comments>http://senses.thirdi.com/posts/12-unit-testing-autoload-classes/#comments</comments>
		<pubDate>Mon, 12 May 2008 23:47:06 +0000</pubDate>
		<dc:creator>Stanley</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[lazy]]></category>

		<category><![CDATA[php]]></category>

		<category><![CDATA[symfony tip]]></category>

		<category><![CDATA[unit testing]]></category>

		<guid isPermaLink="false">http://senses.thirdi.com/posts/12-unit-testing-autoload-classes/</guid>
		<description><![CDATA[I like test driven development. I don&#8217;t like adding required files to test script manually because it&#8217;s tedious and I am lazy. I really like Symfony&#8217;s autoloading feature. Unfortunately, this feature is not available for running unit tests. Running symfony test-unit without including any of the required files, tests will not run.
Fortunately, there is an [...]]]></description>
			<content:encoded><![CDATA[<p>I like test driven development. I don&#8217;t like adding required files to test script manually because it&#8217;s tedious and I am lazy. I really like Symfony&#8217;s autoloading feature. Unfortunately, this feature is not available for running unit tests. Running <em>symfony test-unit</em> without including any of the required files, tests will not run.</p>
<p>Fortunately, there is an elegant solution. The idea is based on the Symfony CLI environment. At the top of the test script, add the following lines (or put them in a file and include that file):</p>
<p><em><strong>&lt;?php<br />
require_once &#8216;PHPUnit/Framework.php&#8217;;</strong></em></p>
<p><em><strong>define(&#8217;SF_ROOT_DIR&#8217;,      realpath(dirname(__file__).&#8217;/../..&#8217;));<br />
define(&#8217;SF_APP&#8217;,           &#8216;frontend&#8217;);<br />
define(&#8217;SF_ENVIRONMENT&#8217;,   &#8216;cli&#8217;);<br />
define(&#8217;SF_DEBUG&#8217;,          false);</strong></em></p>
<p><em><strong>require_once(SF_ROOT_DIR.DIRECTORY_SEPARATOR.&#8217;apps&#8217;.<br />
DIRECTORY_SEPARATOR.SF_APP.DIRECTORY_SEPARATOR.&#8217;config&#8217;.<br />
DIRECTORY_SEPARATOR.&#8217;config.php&#8217;);<br />
?&gt;</strong></em></p>
<p>These lines should be familiar if you have worked with Symfony CLI. Basically, they are boilerplate code for any Symfony CLI app. With any luck, Symfony should load classes for you automagically.</p>
]]></content:encoded>
			<wfw:commentRss>http://senses.thirdi.com/posts/12-unit-testing-autoload-classes/feed/</wfw:commentRss>
		</item>
		<item>
		<title>My Laziness and sfPropelMigrationsLightPlugin</title>
		<link>http://senses.thirdi.com/posts/11-my-laziness-and-sfpropelmigrationslightplugin/</link>
		<comments>http://senses.thirdi.com/posts/11-my-laziness-and-sfpropelmigrationslightplugin/#comments</comments>
		<pubDate>Sat, 03 May 2008 00:15:59 +0000</pubDate>
		<dc:creator>Stanley</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[database migration]]></category>

		<category><![CDATA[laziness]]></category>

		<category><![CDATA[lazy programmer]]></category>

		<category><![CDATA[sfPropelMigrationsLightPlugin]]></category>

		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://senses.thirdi.com/posts/11-my-laziness-and-sfpropelmigrationslightplugin/</guid>
		<description><![CDATA[I have a confession to make: I am lazy. My colleagues know this. One of the things I hate doing when starting on an existing project is setting up the database. Sure, database schema and update scripts should be somewhere in the repository. Chances are good that they are not kept up-to-date with all database [...]]]></description>
			<content:encoded><![CDATA[<p>I have a confession to make: I am lazy. My colleagues know this. One of the things I hate doing when starting on an existing project is setting up the database. Sure, database schema and update scripts should be somewhere in the repository. Chances are good that they are not kept up-to-date with all database changes. Even if they are, I just can&#8217;t apply all the update scripts at once because of dependencies or changes have already been applied. 99.9% of the time, I ended up dumping the staging or development database and importing it into mine.</p>
<p>I was going to write a tool that will solve this problem, but my laziness would have none of it. Instead, I searched the Internet and found this cool little tool: sfPropelMigrationsLightPlugin, a Symfony plug-in. It works like this. Whenever there is a database change, you would initialize a migration and the plug-in creates a PHP file for you to add the database changes. To update the database, just run &#8220;<em>symfony migrate &lt;app name&gt;</em>&#8221; and the tool will automagically apply all missing updates to the database. This feature is particularly useful if there is more than one person working on the project at the same time. Team members just run &#8220;<em>symfony migrate &lt;app name&gt;</em>&#8221; and viola, their databases are synchronized with yours. No fuss. It couldn&#8217;t have been more simple.</p>
<p>Checkout the plugin at <a href="http://trac.symfony-project.com/wiki/sfPropelMigrationsLightPlugin" title="sfPropelMigrationsLightPlugin" target="_blank">http://trac.symfony-project.com/wiki/sfPropelMigrationsLightPlugin</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://senses.thirdi.com/posts/11-my-laziness-and-sfpropelmigrationslightplugin/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Right Tool for the Job</title>
		<link>http://senses.thirdi.com/posts/9-right-tool-for-the-job/</link>
		<comments>http://senses.thirdi.com/posts/9-right-tool-for-the-job/#comments</comments>
		<pubDate>Wed, 23 Apr 2008 16:56:05 +0000</pubDate>
		<dc:creator>Stanley</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[integration]]></category>

		<category><![CDATA[java and php]]></category>

		<category><![CDATA[lucene]]></category>

		<category><![CDATA[xmlrpc]]></category>

		<guid isPermaLink="false">http://senses.thirdi.com/posts/9-right-tool-for-the-job/</guid>
		<description><![CDATA[In one of the projects, our client wanted an auto-complete function in one of the search forms. At first we implemented it with SQL queries because it was the simplest and logical solution. It worked well with small data set containing about a hundred records. The response was fairly snappy - it took less than [...]]]></description>
			<content:encoded><![CDATA[<p>In one of the projects, our client wanted an auto-complete function in one of the search forms. At first we implemented it with SQL queries because it was the simplest and logical solution. It worked well with small data set containing about a hundred records. The response was fairly snappy - it took less than a second to fetch data and display the results. However, this solution did not scale well with large data set containing several hundred thousands of records. The response time was about half a minute - clearly not acceptable for an auto-complete widget.</p>
<p>The problem had to be solved from a different angle. Rather querying the database with  select statements, we used a free text search engine called <a href="http://lucene.apache.org/java/docs/index.html" target="_blank">Lucene</a> via the <a href="http://trac.symfony-project.com/wiki/sfLucenePlugin" target="_blank">sfLucenePlugin</a>. Execution time was reduced substantially but it was still too slow. Since Lucene was originally written in Java, we did a quick test to see how well the Java implementation performed. To our delight, it performed very well - results were returned in less than a second.</p>
<p>The challenge was how to make Java and PHP talk to each other. We experimented with a number of alternatives. In the end we chose <a href="http://www.xmlrpc.com/" target="_blank">XMLRPC</a> over HTTP to bridge the language gap. The protocol is well supported by both languages. It only takes a few lines to create an XMLRPC request object, send it to the XMLRPC Java server and get back an array of PHP objects. No home-brewed, string delimited request/response protocol! The architecture also allows the two processes to run on separate servers or have one Lucene server service multiple PHP servers for better scalaliblity and hardware utilization.</p>
<p>What was the lesson we learned? Use the right tool for the job: if a library suck in one language, try libraries written in other languages (or write one yourself in another language).</p>
]]></content:encoded>
			<wfw:commentRss>http://senses.thirdi.com/posts/9-right-tool-for-the-job/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Open Web Conference. Hello Vancouver!</title>
		<link>http://senses.thirdi.com/posts/8-open-web-conference-hello-vancouver/</link>
		<comments>http://senses.thirdi.com/posts/8-open-web-conference-hello-vancouver/#comments</comments>
		<pubDate>Wed, 16 Apr 2008 16:32:19 +0000</pubDate>
		<dc:creator>isim</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[deployment process]]></category>

		<category><![CDATA[open source]]></category>

		<category><![CDATA[open web conference 2008]]></category>

		<category><![CDATA[web security]]></category>

		<guid isPermaLink="false">http://senses.thirdi.com/posts/8-open-web-conference-hello-vancouver/</guid>
		<description><![CDATA[The Thirdi team just came back from the 2008 Open Web Conference. It was my first time attending this type of conference. I really enjoyed most of the sessions as they allowed me to unleash the geek within. It was definitely a refreshing time of personal update. I picked up some important new lessons and [...]]]></description>
			<content:encoded><![CDATA[<p>The Thirdi team just came back from the <a href="http://www.openwebvancouver.ca/">2008 Open Web Conference</a>. It was my first time attending this type of conference. I really enjoyed most of the sessions as they allowed me to <em>unleash the geek within</em>. It was definitely a refreshing time of personal update. I picked up some important new lessons and cool tools as well as being reminded and re-affirmed of best practices in web software development.</p>
<p>The conference also helped to raise my personal awareness of the open source community. There were definitely some very bright minds in the conference. Listening to presentations and case studies where these people tackled and solved hard problems in elegant and practical ways was inspiring. The impact and influence that this community will continue to have in shaping our society is unfathomable.</p>
<p>I&#8217;ll like to share some of the important lessons I have picked up at the conference.</p>
<ol>
<li>Security on web applications (by <a href="http://www.openwebvancouver.ca/user/damien-seguy">Damien Seguy</a>). Security is a key requirement in all web applications that is often overlooked (or at least not dealt with until it was too late). In his presentation, Daimen was able to demonstrate how a lot of software security compromises in the code can be avoided by using very simple tool such as <code>grep</code>. Best practices include:-
<ol>
<li> getting rid of unneeded files (.doc, .zip, .old) from the <code>web</code> directory,</li>
<li>moving configuration files out of the <code>web</code> directory,</li>
<li>paying special attention to code such as <code>var_dump</code>, <code>print_r</code>, <code>mysqli_query</code> etc., and make sure their presence don&#8217;t open up any potential security breach.</li>
</ol>
<p>The idea is to avoid exposure of confidential information to unauthorized personnel.</li>
<li> Deployment (by <a href="http://www.openwebvancouver.ca/user/chris-hartjes">Chris Hartjes</a>). This was one of my favourite talks. In his presentation, Chris shared with us his 6 rules of deployment. The one that I found most prominent can be paraphrased as <em><strong>&#8220;if a deployment process was not repeatable and not automated, mistakes will happen&#8221;</strong></em>. Chris went on to say <em>&#8220;manual deployment is for suckers&#8221;</em>. These are strong but truthful words. We might be able to get away with manual deployment for small projects. But if these projects ever grow and scale across multiple servers, manual deployment is out of the question. Another insightful statement by Chris was <em><strong>&#8220;</strong><strong>a good deployment process is a one-step process; not a two-, three-step process&#8221;.</strong></em></li>
<li>Engineering of internal process (by <a href="http://www.openwebvancouver.ca/user/ronn-abueg">Ronn Abueg</a> and James Andres). Ronn and James implemented a social intranet tool using <a href="http://drupal.org/">Drupal</a>. Interestingly, there isn&#8217;t much CMS-related content in this presentation. They were able to implement a solution to help facilitate transfer of internal knowledge and information without <strong><em>re-engineering people</em></strong> such as forcing the CEO to turn on his laptop, open up his browser, fill in a form etc. <strong><em>It was a solution that fits seamlessly and painlessly into their existing work flow</em></strong>. Thirdi has been searching for a simple, accurate and cheap (in terms of human effort) mean to track the number of development hours per project. Perhaps something we can implement is to tweak our IDE to keep track of how many hours we spent on a project, or a script to keep track of the number of commits per day, or duration between the early-morning update and end-of-day commit etc. Little things like these can be integrated seamlessly into our existing dev process without imposing additional overhead on our team.</li>
</ol>
<p>I also picked up some interesting web tools (google gear, phpundercontrol, capistrano, maven, APC) from the conference. But I won&#8217;t talk about them here as all of them can easily be found on Google.</p>
<p>Overall, I enjoyed my time at the conference and was able to walk away with a lot of useful tips and tools.</p>
]]></content:encoded>
			<wfw:commentRss>http://senses.thirdi.com/posts/8-open-web-conference-hello-vancouver/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Does Thirdi have Good Programmers?</title>
		<link>http://senses.thirdi.com/posts/7-does-thirdi-have-good-programmers/</link>
		<comments>http://senses.thirdi.com/posts/7-does-thirdi-have-good-programmers/#comments</comments>
		<pubDate>Wed, 27 Feb 2008 19:56:11 +0000</pubDate>
		<dc:creator>mdeepwell</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[framworks]]></category>

		<category><![CDATA[good programmer]]></category>

		<category><![CDATA[passion]]></category>

		<category><![CDATA[self-taught]]></category>

		<category><![CDATA[technologies]]></category>

		<category><![CDATA[the team]]></category>

		<guid isPermaLink="false">http://senses.thirdi.com/posts/7-does-thirdi-have-good-programmers/</guid>
		<description><![CDATA[Hello, just a quick introduction, my name is Mark Deepwell, and I work for the best software company on the planet, Thirdi Software Inc.
I recently read Daniel Tenner’s blog post on How to recognise a good programmer, and I was curious to see if we do have good programmers according to his criteria.
First I thought [...]]]></description>
			<content:encoded><![CDATA[<p>Hello, just a quick introduction, my name is Mark Deepwell, and I work for the best software company on the planet, Thirdi Software Inc.</p>
<p>I recently read Daniel Tenner’s blog post on <a href="http://www.inter-sections.net/2007/11/13/how-to-recognise-a-good-programmer/" target="_blank">How to recognise a good programmer</a>, and I was curious to see if we do have good programmers according to his criteria.</p>
<p>First I thought about the passion each of us has for our job, and asked each member of the team if they love what they do, and in fact, I quickly found that each one of us here at Thirdi loves what we do.</p>
<p>Ivan likes the whole software development process, from requirements and design to the final high quality product. Stan enjoys solving programs with an elegant solution. Abe, our QA guy, is passionate about delivering the best possible software to our clients  and is not satisfied with a product until it is bug free. Matt loves his job so much he says it doesn&#8217;t feel like he has a job anymore. And I enjoy creating what we call <strong>painless software</strong>, software that is simple, easy and straightforward to use.</p>
<p>From talking with the team, I learned that self-teaching is a pretty strong part of our culture. Stan, a Java programmer, learned PHP on his own for a new project and Ivan picked up the Zen Cart framework when he created an online store. Learning a new framework or technology is relatively easy, but being able to leverage it appropriately is a challenge. We don&#8217;t use the latest technology buzzword just because it&#8217;s the current hot item, but we would use it if the scenario were appropriate. Each of us are self learners because we enjoy it, and we can use the added skills to build better products.</p>
<p>Each of us has worked with a variety of technologies, from bash shell scripting, to JavaBeans, we have used a wide variety of tools and languages: Java, Ruby, Bash, C++, Hibernate, JV2, JV3, Struts, Perl, PHP, Symfony, JMS, Propel, Torque, SOAP, Lucene, and many more. This is just a subset of all the technologies and experiences various members of our team have gained.</p>
<p>Even for a new project each of us will be working on, we have decided that it will be built on Ruby on Rails, an up-and-coming web framework that we&#8217;ve been wanting to try.</p>
<p>Does Thirdi Software have good programmers? I believe we do, and the breadth of skill and experience we each bring to the table surprised me.</p>
]]></content:encoded>
			<wfw:commentRss>http://senses.thirdi.com/posts/7-does-thirdi-have-good-programmers/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Non-Functional Constraints</title>
		<link>http://senses.thirdi.com/posts/6-non-functional-constraints/</link>
		<comments>http://senses.thirdi.com/posts/6-non-functional-constraints/#comments</comments>
		<pubDate>Sat, 23 Feb 2008 05:35:34 +0000</pubDate>
		<dc:creator>isim</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[efficient computation]]></category>

		<category><![CDATA[java]]></category>

		<category><![CDATA[non-functional constraints]]></category>

		<category><![CDATA[non-functional requirements]]></category>

		<category><![CDATA[php]]></category>

		<category><![CDATA[software development]]></category>

		<category><![CDATA[software maintainability]]></category>

		<category><![CDATA[software performance]]></category>

		<category><![CDATA[Thirdi Software]]></category>

		<guid isPermaLink="false">http://senses.thirdi.com/posts/6-non-functional-constraints/</guid>
		<description><![CDATA[As a software developer, I always find it challenging to account for non-functional requirements while developing software. All software clients and project managers will tell us they want their software to be efficient, effective, fast, secure, scalable, maintainable (not restricted to codes), usable, and resilient. A lot of times (though not always), these constraints are [...]]]></description>
			<content:encoded><![CDATA[<p>As a software developer, I always find it challenging to account for <a href="http://en.wikipedia.org/wiki/Non-functional_requirement">non-functional requirements</a> while developing software. All software clients and project managers will tell us they want their software to be efficient, effective, fast, secure, scalable, maintainable (not restricted to codes), usable, and resilient. A lot of times (though not always), these constraints are vague, unquantifiable, and contradictory (for example, the most effective way of doing things may not necessarily be the fastest).</p>
<p>It is not uncommon for software developers (myself included), who have been programmed to think and work with logical, tangible, and quantifiable entities, to sweep these constraints under the rug until, one day they come back to haunt us. Yet I religiously believe these constraints, to some extent, can be implemented in the software. A lot of them can be accounted for during the design phase of development.</p>
<p>For example, we are 2 weeks into the <a href="http://www.gamboozle.com">Gamboozle</a> Fantasy Sports project, and here are 3 non-functional constraints that stood out during the design phase.</p>
<p>1.      Potential Performance Deterioration As A result Of Data Growth. The way we decided to deal with this constraint was to implement an archive module, which is scheduled to migrate old data from some of the &#8220;bigger&#8221; tables to new tables. Ideally, a simple SQL INSERT.. SELECT statement will do the job. Since this archived data will still be accessed, we need a mechanism to identify which tables (current vs. archive, and if archive, which archive) the end-users are trying to access. A naming convention for these archive tables is needed too.</p>
<p>2.      Efficient Computation. As part of the business requirement, a number of aggregate values have to be displayed regularly to the end-users. Instead of computing these values on-the-fly, we decided to devise a calculate-once-display-often mechanism to help lighten the frequency of number crunching.</p>
<p>3.      Code Maintainability. Since this project involves PHP and JAVA components sharing the same database, there will definitely be some redundant code in the object-relation mapping (ORM) layer. We have decided to use <a href="http://propel.phpdb.org/trac/">Propel</a> and <a href="http://db.apache.org/torque/">Torque</a> as the PHP and JAVA ORM layers respectively. Since Propel is ported from Torque, their XML database schema files are very similar. So we will be able to generate 1 common XML database schema file for both components. In this way, any modification to the database schema, for example, adding new columns, dropping existing columns, type change etc., can be easily propagated to both the PHP and JAVA ORM classes.</p>
]]></content:encoded>
			<wfw:commentRss>http://senses.thirdi.com/posts/6-non-functional-constraints/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Hello World</title>
		<link>http://senses.thirdi.com/posts/3-hello-world/</link>
		<comments>http://senses.thirdi.com/posts/3-hello-world/#comments</comments>
		<pubDate>Tue, 08 Jan 2008 23:07:35 +0000</pubDate>
		<dc:creator>Matt Friesen</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[Senses]]></category>

		<category><![CDATA[Thirdi Software]]></category>

		<category><![CDATA[Welcome]]></category>

		<guid isPermaLink="false">http://senses.thirdi.com/?p=3</guid>
		<description><![CDATA[I&#8217;m pleased to welcome you to Senses, the new voice of Thirdi Software.

This is our very own soapbox. Throughout the lifetime of this site you will have a chance to hear about the world as seen through our eyes.

A small taste of things to come include software development, design, best practices, and products we build [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m pleased to welcome you to Senses, the new voice of <a href="http://www.thirdi.com" title="Thirdi Software">Thirdi Software</a>.</p>
<p class="western"><font color="#000000"><br />
This is our very own soapbox. Throughout the lifetime of this site you will have a chance to <strong><em>hear</em></strong> about the world as <strong><em>seen</em></strong> through our eyes.<br />
</font><br />
<font color="#000000">A small <strong><em>taste</em></strong> of things to come include software development, design, best practices, and products we build or like. The blog isn&#8217;t limited to this list, but will <strong><em>touch</em></strong> on anything we find interesting. What I&#8217;m trying to say is if it <strong><em>smells</em></strong> funny - we&#8217;ll let you know. Thirdi is home to some fascinating minds, and it&#8217;s time to unleash them on the internet at large. So sit back and <strong><em>listen</em></strong> to our rants, praises, and general nonsense. We hope to offer a feast to your senses from ours. </font></p>
]]></content:encoded>
			<wfw:commentRss>http://senses.thirdi.com/posts/3-hello-world/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
