<?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>Notion Learning &#187; postgresql</title>
	<atom:link href="http://blog.notionlearning.com/tag/postgresql/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.notionlearning.com</link>
	<description>The low-cost cloud-based Learning Management System</description>
	<lastBuildDate>Wed, 12 May 2010 09:56:46 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Infrastructure</title>
		<link>http://blog.notionlearning.com/2010/02/04/infrastructure/</link>
		<comments>http://blog.notionlearning.com/2010/02/04/infrastructure/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 11:55:56 +0000</pubDate>
		<dc:creator>dimitris</dc:creator>
				<category><![CDATA[Technical discussion]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[postgresql]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[zend]]></category>

		<guid isPermaLink="false">http://blog.notionlearning.com/?p=225</guid>
		<description><![CDATA[It is very common for us when we talk to customers and attend events for people to ask us questions about our infrastructure and the rationale behind our choices. It is a very common question in the startup ecosystem for different reasons such as getting the feel for the company&#8217;s profile or as a source [...]]]></description>
			<content:encoded><![CDATA[<p>It is very common for us when we talk to customers and attend events for people to ask us questions about our infrastructure and the rationale behind our choices. It is a very common question in the startup ecosystem for different reasons such as getting the feel for the company&#8217;s profile or as a source of inspiration for people&#8217;s projects.</p>
<p>This post goes into detail on our entire development stack from top to bottom.</p>
<p>At a glance:</p>
<ul>
<li><a href="#source_control">Source Control</a>: Subversion</li>
<li><a href="#programming_language">Programming Language and OS</a>: PHP on Ubuntu</li>
<li><a href="#programming_framework">Framework</a>: Zend</li>
<li><a href="#javascript_library">Javascript Library</a>: jQuery</li>
<li><a href="#programming_ide">Programming IDE</a>: Eclipse</li>
<li><a href="#build_system">Build System</a>: Phing</li>
<li><a href="#DBMS">Data Base Management System</a>: PostgreSQL</li>
<li><a href="#backup_and_restore">Backup and Restore</a>: Backup Ninja and GPG</li>
</ul>
<p>More detailed:</p>
<p><a name="source_control">Source Control</a></p>
<div id="attachment_287" class="wp-caption alignnone" style="width: 138px"><img class="size-full wp-image-287" title="svn-mini-logo" src="http://blog.notionlearning.com/wp-content/uploads/2010/02/svn-mini-logo.jpg" alt="Subversion Logo" width="128" height="18" /><p class="wp-caption-text">  </p></div>
<p>There are many choices here and all are supported with very good arguments. based on our organizational structure and the decision to support linear development (which means minimal branching), the choice was for traditional source control tools (instead of distributed ones such as GIT/perforce). Because of extensive exposure to  <a href="http://subversion.tigris.org/">subversion</a> and it&#8217;s general acceptance, we chose this.<br />
Because we are a SaaS company and we generally prefer using services, we also have an on-line hosting package for it.</p>
<p><a name="programming_language">Programming Language and OS</a></p>
<div id="attachment_279" class="wp-caption alignnone" style="width: 130px"><img class="size-full wp-image-279" title="php_language_logo" src="http://blog.notionlearning.com/wp-content/uploads/2010/02/php_language_logo.gif" alt="" width="120" height="67" /><p class="wp-caption-text">  </p></div>
<p>This is a very open discussion and there is a nice chapter titled &#8220;So Many Platforms, So Many Options&#8221;,  from <a href="http://blog.notionlearning.com/2009/09/09/review-the-web-startup-success-guide-by-bob-walsh/">The Web Startup Sucess Guide</a>, by Bob Walsh. We had decided before to use PHP on top of linux. Our distribution of choice is <a href="http://www.ubuntu.com/">ubuntu</a>, with which we are very familiar.</p>
<p><a name="programming_framework">Framework</a></p>
<div id="attachment_300" class="wp-caption alignnone" style="width: 66px"><img class="size-full wp-image-300" title="zend_framework_logo_small" src="http://blog.notionlearning.com/wp-content/uploads/2010/02/zend_framework_logo_small.gif" alt="" width="56" height="39" /><p class="wp-caption-text">  </p></div>
<p>In PHP, the choices are really endless. We chose <a href="http://framework.zend.com/">Zend Framework</a> for the following reasons:</p>
<ol>
<li>Familiarity: already used it in (smaller) projects in the past</li>
<li>Leverage as much or as little of it as we want</li>
<li>Supplementary tools available as we upscale, such as the rest of the Zend platform</li>
</ol>
<p>The best element inside the Zend framework is that a software house can use as many features of it as they want, without getting into trouble. You can use the <a href="http://framework.zend.com/manual/en/zend.controller.quickstart.html">MVC</a>, or you can just do it on your own with mod-rewrites. This goes all along the framework, which is good both in terms of being able to do custom development on what we needed different, as well as a smaller learning curve: when the project had to do some things urgently, the fastest approach was taken, and then when familiarity and exposure to the framework was better,  we re-implemented those features in the framework&#8217;s ontology.</p>
<p><a name="javascript_library">Java Script Library</a></p>
<div id="attachment_277" class="wp-caption alignnone" style="width: 225px"><img class="size-full wp-image-277" title="logo_jquery_215x53" src="http://blog.notionlearning.com/wp-content/uploads/2010/02/logo_jquery_215x53.gif" alt="" width="215" height="53" /><p class="wp-caption-text">  </p></div>
<p><a href="http://jquery.com/">jQuery</a> Simple, easy choice <img src='http://blog.notionlearning.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> . Better supported, large user base, ease of use, number of plugins, nice and diverse community (eg. designers, coders, etc). We could not have thought of anything else, although we considered <a href="http://mootools.net/">MooTools</a> because of the Zend Framework integration.</p>
<p><a name="build_system">Build System</a></p>
<div id="attachment_309" class="wp-caption alignnone" style="width: 210px"><a href="http://blog.notionlearning.com/wp-content/uploads/2010/02/phing_logo-e1265638489594.gif"><img src="http://blog.notionlearning.com/wp-content/uploads/2010/02/phing_logo-e1265638489594.gif" alt="" title="phing_logo" width="200" height="60" class="size-full wp-image-309" /></a><p class="wp-caption-text">  </p></div>
<p>Given the rest of the choices, the options available are limited, so we used <a href="http://phing.info/trac/">Phing</a> for build automation.</p>
<p><a name="programming_ide">Programming IDE</a></p>
<p><img class="alignnone size-full wp-image-276" title="php_eclipse_logo" src="http://blog.notionlearning.com/wp-content/uploads/2010/02/php_eclipse_logo.jpg" alt="" width="54" height="48" /></p>
<p>There are many custom builds for Eclipse, our main one is the following: <a href="http://www.eclipse.org/downloads/?tab=developer">Eclipse for PHP Developers</a>, which is tailored to our needs and has nice features such as code completion, subversion integration and many others.<br />
We also use <a href="http://www.activestate.com/komodo_edit/">Komodo edit</a> from Active state, which may be a good candidate for a future IDE. Both of those are cross platform. In each developer&#8217;s platform the following mini-IDEs/editors are utilized:</p>
<ul>
<li>Linux: geany and gEdit</li>
<li>OS-X: TextMate</li>
<li>Windows: Textpad</li>
</ul>
<p><a name="DBMS">Data Base Management System</a></p>
<p><img class="size-full wp-image-263" title="postgre_logo_95x51_4" src="http://blog.notionlearning.com/wp-content/uploads/2010/02/postgre_logo_95x51_4.gif" alt="PostgreSQL logo" width="95" height="51" /></p>
<p>There is a very old post about that <a href="http://blog.notionlearning.com/2009/07/03/choice-of-dbms/">here</a>. Many things have changed since then, but the choice remains the same: <a href="http://www.postgresql.org/">PostgreSQL</a>. Now I have more arguments in favour of it:</p>
<ul>
<li>Cohesive and easy to find documentation</li>
<li>Clear licensing &#8211; see what&#8217;s going on with MySQL/Sun/Oracle</li>
<li>Feature Set</li>
</ul>
<p>But most of all it is very dependable and stable. I know that it is not the most popular choice and that we have issues with software that runs on top of MySQL only, but we are very happy and confident for our choice and no company can take it away from us.</p>
<p><a name="backup_and_restore">Backup and Restore</a></p>
<div id="attachment_280" class="wp-caption alignnone" style="width: 234px"><img class="size-full wp-image-280" title="backupninja" src="http://blog.notionlearning.com/wp-content/uploads/2010/02/backupninja.png" alt="BackupNinja Logo" width="224" height="68" /><p class="wp-caption-text"> </p></div>
<p>We chose <a href="https://labs.riseup.net/code/projects/show/backupninja">Backup Ninja</a> because it had a very small learning curve.<br />
We might evaluate more options in the future, when we re-evaluate our backup strategy. Also <a href="http://www.gnupg.org/"><br />
Gnu Privacy Guard</a> is being use to encrypt the backups so that they can be transmitted and stored remotely.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.notionlearning.com/2010/02/04/infrastructure/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Choice of DBMS</title>
		<link>http://blog.notionlearning.com/2009/07/03/choice-of-dbms/</link>
		<comments>http://blog.notionlearning.com/2009/07/03/choice-of-dbms/#comments</comments>
		<pubDate>Fri, 03 Jul 2009 16:40:03 +0000</pubDate>
		<dc:creator>dimitris</dc:creator>
				<category><![CDATA[Technical discussion]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[dbms]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[postgresql]]></category>
		<category><![CDATA[rdbms]]></category>

		<guid isPermaLink="false">http://blog.notionlearning.com/?p=21</guid>
		<description><![CDATA[At every start-up/project that is based on Linux one of the first and biggest decisions is which database to use.
In the Linux world there are many options, but considering our needs we had two choose between the two&#8230; usual suspects, PostgreSQL  and MySQL.
For those of you who just want the answer, we chose the one [...]]]></description>
			<content:encoded><![CDATA[<p>At every start-up/project that is based on Linux one of the first and biggest decisions is which database to use.</p>
<p>In the Linux world there are many options, but considering our needs we had two choose between the two&#8230; usual suspects, PostgreSQL  and MySQL.<br />
For those of you who just want the answer, we chose the one with the elephant logo, PostgreSQL <img src='http://blog.notionlearning.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p>
<p style="text-align: center;"><img class="size-full wp-image-25 aligncenter" title="postgresql" src="http://blog.notionlearning.com/wp-content/uploads/2009/07/postgresql.jpg" alt="postgresql" width="123" height="123" /></p>
<p>Now, how we got there: <span id="more-21"></span><br />
Initially we had an idea on what we wanted to store in our database system and what functionality we would like to use from them.<br />
Both databases supported (or claimed they did, but we will discuss this later) all the required features, which made our choice more difficult since the capabilities are similar.<br />
Then we roamed the Internet searching for comparison articles and researches as well as asking friends. A good informative link was the wikivs one:<br />
<a id="xwo4" title="WikiVS comparison" href="http://www.wikivs.com/wiki/MySQL_vs_PostgreSQL" target="_blank">http://www.wikivs.com/wiki/MySQL_vs_PostgreSQL</a>. One important factor on making a decision is the size as well as the requirements<br />
of the application. This is an issue for us since we do not have an estimation of the data we will use since we are still in prototyping phase.</p>
<p>At the end of the day, it became a matter of personal preference, buzz as well as the history of those two projects. <br />
<strong>History</strong>: MySQL has a history of having more features, while PostgreSQL has the fame of being more stable and rolling out features in a more conservative pace. Since both have the features we need, we preferred PostgreSQL. <br />
<strong>Fear of the future</strong>: At the time of writing this blog post, Sun systems, that owns the company that owns MySQL is being merged with Oracle, which does not own now only Sun, but&#8230; Oracle. MySQL might be fragmented, since one of it&#8217;s founding members is rolling a new product. All these have been extensively reported in the news. Summarising all those, we have the fear of further fragmentation of the RDBMS or even it&#8217;s death (if Oracle&#8217;s boss says so). We are a very small company to cope with someone forcing us to change our RDBMS, or worse even people mocking us for not using the Microsoft stack. <br />
<strong>Stored Procedures</strong>: PL/SQL, one of the languages that you can write stored procedures in PostgreSQL, is very similar to Oracle&#8217;s similar language. Accidentally both members of the Notion Learning team had some Oracle stored procedure experience. That is a plus we have already utilised, in some pair programming sessions. <br />
<strong>Documentation</strong>: This is a quality versus quantity issue. Working with MySQL one can google up to thousands of pages with tutorials and help, generally of good quality, but some of not so good and many in total beginner level. On the PostgreSQL side, the situation is different: few resources but of very high quality. That has the immediate outcome that all the information is being stored into few locations, saving time to search for answers, something vital in a start-up. Eventually that was true: In the first month of using the language whichever question came up, the answer was at either the official manual, or at stackoverflow (<a id="oz1l" title="Stack Overflow" href="http://stackoverflow.com/">http://stackoverflow.com/</a>) or a few google clicks away. This reminds of the *BSD vs linux situation where many pro-BSD advocates argue that there are not so many tutorials and pages about BSD unices, mainly because the man-pages are of such high quality that people just read those. <br />
<strong>Tools</strong>: Exactly the same landscape as documentation, few (and free) of high quality for PostgreSQL, more, of various levels for MySQL. Some commercial ones might be purchased in the future. The commercial ones existing add value to the product, instead of trying to clone MySQLs original but more expensive enterprise tool-chain.</p>
<p>This is a summary of our DBMS choosing. But there are some arguments in favour of MySQL worthwhile to mention:</p>
<p>MySQL is everywhere and there are many good bundles for every OS platform (eg. MAMP for Mac and WAMP for windows). It took us many hours to make a stack on an XP development machine. MySQL has more people around it so a larger pool of potential developers, who we won&#8217;t have to train after hiring them. Although it is not yet necessary, the ability to choose database engines seems very appealing.</p>
<p>Hope you found this posting informative, please drop us a line with your opinion.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.notionlearning.com/2009/07/03/choice-of-dbms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
