<?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>Taras Mankovski Blog &#187; Architecture</title>
	<atom:link href="http://taras.cc/index.php/category/architecture/feed/" rel="self" type="application/rss+xml" />
	<link>http://taras.cc</link>
	<description>Building Beecoop and generaly making developer&#039;s lives easier and more productive.</description>
	<lastBuildDate>Wed, 25 Nov 2009 03:41:59 +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>How to deploy: database, source and binary changes in 1 patch?</title>
		<link>http://taras.cc/index.php/2009/11/24/how-to-deploy-database-source-and-binary-changes-in-1-patch/</link>
		<comments>http://taras.cc/index.php/2009/11/24/how-to-deploy-database-source-and-binary-changes-in-1-patch/#comments</comments>
		<pubDate>Wed, 25 Nov 2009 03:40:15 +0000</pubDate>
		<dc:creator>Taras</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[Drupal]]></category>
		<category><![CDATA[Joomla]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://taras.cc/?p=183</guid>
		<description><![CDATA[Today, was an exciting day for me, again.  
I was working on several client&#8217;s projects and something seems to have crystalized in my brain today. This crystallization created a new question that I posted on stackoverflow: How to deploy: database, source and binary changes in 1 patch?
Amazingly, 6 hours went by and I only [...]]]></description>
			<content:encoded><![CDATA[<p>Today, was an exciting day for me, again. <img src='http://taras.cc/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>I was working on several client&#8217;s projects and something seems to have crystalized in my brain today. This crystallization created a new question that I posted on stackoverflow: <a href="http://stackoverflow.com/questions/1791426/how-to-deploy-database-source-and-binary-changes-in-1-patch">How to deploy: database, source and binary changes in 1 patch?</a></p>
<p>Amazingly, 6 hours went by and I only got 20 views and 0 answers. You know what this says to me? To me this says that people do not have an easy answer to this question. I know for myself, i usually look for questions that I have quick answers to, I think this is not one of those questions.</p>
<p>Well, this actually was a test to see if something like this already exists, because I think I have an answer to this question. I outlined it in my conversation with Trevor today. I put it to your for consideration, I would love to get feedback so please tell me what you think.</p>
<p>A transcript of this conversation is in this post:</p>
<p><span id="more-183"></span></p>
<blockquote><p><strong>Taras Mankovski</strong></p>
<p>I have multiple developers checking out projects from repository, the repo contains db dump of the project, they import the db, make changes to code, dump db, commit changes and db back to repo, problem is that sql dump site is pretty much useless in terms of figuring out what has changed in db</p>
<p>diff, is a well established mechanism for comparing text files. It works pefectly. I can at any point, check what&#8217;s changed between revision of a project. This is especially nice with git because I can choose arbitrary commits and see their changes.</p>
<p>This brings us back to db. DB sql dump is pretty much useless in determining what has changed in the DB because of the nature of the file. It&#8217;s long it&#8217;s wordy, it plain sucks to read.</p>
<p>So here is the solution:</p>
<p>I think it would be possible to represent the database as a directory with files in it. Every table in the database would be a directory. Every record a text file that contains in it the data from the record, represented as JSON.</p>
<p>What this means is that it would be extremely easy to commit the database into the repository and see what has changed.</p>
<p>We can use existing established mechanisms to determine the changes in the database.</p>
<p>The information included in the file system can be quiet extensive. For example, every directory can contain a schema file, that represents the schema of the table as json file. Again, it would be very easy to compare schema changes from revision to revision by comparing the schema files.</p></blockquote>
<blockquote><p><strong>Trevor Twining</strong><br />
I think it&#8217;s a really interesting solution to the problem, just trying to work out how implementation details would work with Drupal&#8217;s architecture and how it might support or conflict with other partial solutions to the problem.</p>
<p>There&#8217;s been a push in drupal lately to allow more config to be exported as code for just that reason, but a lot of it is happening at the object level. There&#8217;s a growing number of modules that are using OOP principles in their code even though Drupal is procedural, so they&#8217;re basically providing var exports for some of those objects some of that work is for reusability of code as well, so that configurations can be saved and implemented in different projects</p></blockquote>
<blockquote><p><strong>Taras Mankovski</strong><br />
Ok, so there is more. The title of this wave is Unified Patching. The problem with what we have right now is that &#8220;It&#8217;s very difficult to deploy changes to the server.&#8221;</p>
<p>The problem actually is that deployment is easy, if you&#8217;re doing it wrong. Deployment is hard if you&#8217;re doing it right.</p>
<p>What do I mean by that?<br />
It&#8217;s easy to make changes to client&#8217;s site by working directly on client site. That in many many many ways is very wrong. If you break something you&#8217;re essentially screwed, it looks bad and it&#8217;s just extremely unprofessional. But it&#8217;s so damn easy.</p>
<p>The hard part is to do it right &#8211; do all development offline, test the changes, show the changes to the client on demo server, stage the changes and then finally apply them to client&#8217;s site without impacting the live site. This is hard.</p>
<p>I&#8217;m finding that deployment takes as much time as development. This is what I want to change. This is where Unified Patching will come in.</p>
<p>I&#8217;m breaking up project changes into 4 categories.</p>
<ul>
<li>Database Structure</li>
<li>Database Data</li>
<li>Source Code</li>
<li>Binary Files</li>
</ul>
<p>Actually, when working with CMS, Database Data can be broken up into 2 categories: Content Changes and Structural Changes. In Drupal, this would be defining the content types and the actual content data. We will ignore this point for now.</p>
<p>I think it would be possible to systematically apply all 4 of these changes using a unified tool, that would apply them in a reliable and predictable manner.</p>
<p>What&#8217;s I&#8217;m talking about is unix &#8216;patch&#8217; utitility on steroids.</p>
<p>I have an idea of how this could be done in a very simple and reliable way.</p>
<p>Ok, so I think it would be possible to use diff to generate Unified Patches.</p>
<p>Diff is a very simple format that can be generated from any VCS.</p>
<p>Git&#8217;s diff includes information about the changes that happened between version with source code, binary files and permissions. It has no capacity to handle database changes.</p>
<p>I think if we were to use the solution outlined above, then we could create a Unified Patch generator that would parse the diff to determine changes in the 4 data types that were outlined above.</p>
<p>For example:</p>
<p>Let&#8217;s assume that we have all of the database dumpted as files onto the files system. We are going to run DIFF between 2 revisions.</p>
<ol>
<li>Parse the diff to determine if any of the schema files have changed in the /db directory have changed. If changed then generate ALTER statements that correspond to the changes made to the schema.</li>
<li>Parse the diff to determine if any files in the /db directory have changed, if they have then create a corresponding REPLACE or DELETE/INSERT statement for each changed file</li>
<li>If binary files were added/removed or modified, then include the modifed files a temprorary location</li>
<li>Include standard patch for source code or text files</li>
</ol>
<p>Now that we have all of the data types processed, put them together into 1 directory and tar.gz the directory.</p>
<p>Now you have an Unified Patch.</p>
<ol>
<li>Upload the patch to the server.</li>
<li>run upatch ourpatch.tar.gz</li>
</ol>
<p>upatch will perform the following actions.</p>
<ol>
<li>dry-run database schema changes (possibly inside of a trasaction)</li>
<li>dry-run database content import</li>
<li>dry-run binary file move</li>
<li>dry-run patch</li>
</ol>
<p>I don&#8217;t know how to do step 1 and 2. Step 3 could be fairily simple, we just need to know if have permissions to overwrite these files.</p>
<p>If dry-run succeds, then it&#8217;s fairily safe to perform live update.</p></blockquote>
<blockquote><p><strong>Trevor Twining</strong><br />
I don&#8217;t know if you could do a dry run, but you could make changes in a test version (makes a dump of current live db and changes that instead of live)</p>
<p>transactional support might allow you to do the rollback, but you&#8217;d need to be able to do several operations before the commit, shouldn&#8217;t be a problem, but dummy database might be more useful because you can connect to it and actually see if anything is messed up, which you couldn&#8217;t do with a transactional approach.</p></blockquote>
<blockquote><p><strong>Taras Mankovski</strong><br />
We really just want to know if the query succeeded. The other approach would be use to test, like you said, but actual make it a staging environment where you can push the changes to and test if the site is working before you apply the same change to the live site</p></blockquote>
<blockquote><p><strong>Trevor Twining</strong><br />
Here&#8217;s a question though, what about the cases where the database is storing some serialized version of a code-object for persistance? Not looking for an immediate answer, but it&#8217;s an important question</p></blockquote>
<blockquote><p><strong>Taras Mankovski</strong><br />
Is the data stored as php serialized object?</p></blockquote>
<blockquote><p><strong>Trevor Twining</strong><br />
a portion, yes, and it&#8217;s how code is shared/exported, basically via a var_export call. code for views can then be moved out of the database and stored as modules</p></blockquote>
<blockquote><p><strong>Taras Mankovski</strong><br />
ok, let&#8217;s take a few example:<br />
Multiple developers are working on same site<br />
Developer A checked out changes from repo, made changes in the view and commited them.<br />
At the same time, Developer B also made changes to the db and try to commit them. Now, for Developer B, his commit would fail because his dbfiles are out of date. He needs to perform merge. I do not know how you would merge 2 view exports or if it&#8217;s at all possible, but atleast the developers know that there is a conflict in the views right away.</p></blockquote>
<p>That&#8217;s it for today, not bad for 1 days, work.</p>
<p>Ok, what do you guys think about this?</p>
]]></content:encoded>
			<wfw:commentRss>http://taras.cc/index.php/2009/11/24/how-to-deploy-database-source-and-binary-changes-in-1-patch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Architecture of our Infrastructure</title>
		<link>http://taras.cc/index.php/2009/09/30/architecture-of-our-infrastructure/</link>
		<comments>http://taras.cc/index.php/2009/09/30/architecture-of-our-infrastructure/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 20:29:16 +0000</pubDate>
		<dc:creator>Taras</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Beecoop]]></category>

		<guid isPermaLink="false">http://taras.cc/?p=157</guid>
		<description><![CDATA[My main goal is to create a system that will scale easily and allow us to use commodity infrastructure elements. These commodity infrastructure elements each have their advantages and disadvantages. The architecture of the system aims to utilize the advantages and minimize the disadvantages.Here is a list different functions performed by our system.

Public User Interface
Collection
Processing
Storing

Public [...]]]></description>
			<content:encoded><![CDATA[<p>My main goal is to create a system that will scale easily and allow us to use commodity infrastructure elements. These commodity infrastructure elements each have their advantages and disadvantages. The architecture of the system aims to utilize the advantages and minimize the disadvantages.<span id="more-157"></span>Here is a list different functions performed by our system.</p>
<ul>
<li>Public User Interface</li>
<li>Collection</li>
<li>Processing</li>
<li>Storing</li>
</ul>
<h4>Public User Interface</h4>
<p>Running on <a href="http://www.cherokee-project.com/">Cherokee Web Server</a>. Cherokee is a high efficiency web server that has low requirements and can handle very high loads. This element can be served sufficiently well by an inexpensive virtualized web server running in the cloud. </p>
<h4>Collection</h4>
<p>Collection element of the system will be performed by <a href="http://scrapy.org/">scrapy</a> spiders which will get their tasks from the Task Server and store the result in the Beecoop Data Store.</p>
<h4>Processing</h4>
<p>Processing is done by workers that, like Collection, get their tasks from the Task Server and either store their data in Beecoop Data Store or PUI database.</p>
<p>Both Processing and Collection require a lot of RAM and CPU. We&#8217;re going to attempt to use commodity hardware to fulfill these functions. Core Networks has inexpensive hardware that we can try to use. If this fails then we can use Amazon EC2.</p>
<h4>Storing</h4>
<p>The collection element will capture a lot of different kinds of data. In our testing, 1 week of execution, we collected over 500,000 units of data. To handle this volume of information we&#8217;re going to utilize Google Data Store, because it will give us a huge database that we will not have to scale ourselves. </p>
<h3>Visual Representation of our Infrastructure</h3>
<p><img src="http://taras.cc/wp-content/uploads/2009/09/architecture1.jpg" alt="architecture.jpg" border="0" width="693" height="512" /></p>
]]></content:encoded>
			<wfw:commentRss>http://taras.cc/index.php/2009/09/30/architecture-of-our-infrastructure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building python development environment</title>
		<link>http://taras.cc/index.php/2009/09/30/building-python-development-environment/</link>
		<comments>http://taras.cc/index.php/2009/09/30/building-python-development-environment/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 15:30:52 +0000</pubDate>
		<dc:creator>Taras</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Beecoop]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[open]]></category>

		<guid isPermaLink="false">http://taras.cc/?p=130</guid>
		<description><![CDATA[I&#8217;m preparing to start development on beecoop and anonymous websites and I would like to establish a comfortable python development environment to make development and deployment of different applications easier.
There are several factors that I need to consider:

I&#8217;m going to be working on several different projects at the same time.
Each project is going to be [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m preparing to start development on beecoop and anonymous websites and I would like to establish a comfortable python development environment to make development and deployment of different applications easier.</p>
<p>There are several factors that I need to consider:</p>
<ul>
<li>I&#8217;m going to be working on several different projects at the same time.</li>
<li>Each project is going to be using different python modules.</li>
<li>Some projects will run on apache, others on cherokee.</li>
<li>Cherokee does not have installer for Mac OS X, so I can not replicate our production environment locally.</li>
<li>I would like to start working in TDD</li>
<li>Last and not least, I have to make it easy for our sysadmin to deploy these projects.</li>
</ul>
<p><span id="more-130"></span>Here are technologies that I&#8217;ve found so far and how I would like to combine them together.</p>
<p><a href="http://pypi.python.org/pypi/virtualenv">Virtualenv</a> with <i>&#8211;no-site-packages</i> switch allows you to create virtual environments that are seperate from your system. This forces you to be conscious of what packages your application is using. This is particularly useful when you&#8217;re doing development of applications that require different versions of python. We&#8217;re going to stick to python2.5 for the near future so this is not a major concern for us.</p>
<p><a href="http://pypi.python.org/pypi/zc.buildout">Buildout</a> is the tool that i think we&#8217;re actually going to be using. It makes it easy for sysadmin to deploy the applications, while maintaining the benefit of forcing us to be conscious of what packages particular application requires. Buildout makes virtualenv unnecessary for us because it simulates virtualenv&#8217;s functionality by including the paths for all necessary packages in sys.path of every project.</p>
<p><a href="http://pypi.python.org/pypi/PasteScript">Paste Script</a> allows to create packages that we can include inside of our applications. It makes it easy to integrate multiple modules that are under development into our applications while keeping things clean and modular.</p>
]]></content:encoded>
			<wfw:commentRss>http://taras.cc/index.php/2009/09/30/building-python-development-environment/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Symphony, Joomla and Drupal</title>
		<link>http://taras.cc/index.php/2009/09/30/symphony-joomla-and-drupal/</link>
		<comments>http://taras.cc/index.php/2009/09/30/symphony-joomla-and-drupal/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 15:30:33 +0000</pubDate>
		<dc:creator>Taras</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Drupal]]></category>
		<category><![CDATA[Joomla]]></category>

		<guid isPermaLink="false">http://taras.cc/?p=122</guid>
		<description><![CDATA[Currently, we have 3 established systems that can be used to build very good websites.
These are Symphony, Joomla and Drupal.
Symphony is a framework that has scaffolding, ORM(Object Relational Mapper), command line builder tool and integrated unit testing. It allows rapid development and prototyping of php based websites. Symphony is an attractive option for a company [...]]]></description>
			<content:encoded><![CDATA[<p>Currently, we have 3 established systems that can be used to build very good websites.</p>
<p>These are Symphony, Joomla and Drupal.<br />
<span id="more-122"></span>Symphony is a framework that has scaffolding, ORM(Object Relational Mapper), command line builder tool and integrated unit testing. It allows rapid development and prototyping of php based websites. Symphony is an attractive option for a company that would like to offer professional development services to their clients. The problem with it is that it quickly gets very expensive. Because even the simple site ecommerce or forum site requires a lot of development.</p>
<p>Joomla consists of Joomla framework and Joomla CMS. Joomla CMS is built on top of Joomla framework and consists of Joomla Frontend and Administrator web applications. Joomla comes with several basic components out of the box, which can be used to create simple CMS websites. Joomla is a very popular CMS because it&#8217;s very easy to install components to the site that add complete functionality. For example, if you wanted to add an ecommerce site, all you have to do is install com_virtuemart. The site will not necessarily look pretty, but you will be able to sell products within a few hours. After some modification you can have a pretty nice looking ecommerce sites. This out of the box functionality comes at the expense of flexibility, control and ease of maintenance. These issues become a problem as your business grows and you need to implement processes to optimize your implementation process.</p>
<p>Drupal is a CMS that is much more flexible then joomla. Drupal modules are smaller and more granular. This allows the developers great flexibility but comes at the expense of steep learning curve and black box effect. One of the other issue, that makes it difficult to involve many developers on Drupal projects is the fact that Drupal stores information about it&#8217;s structure in the database. This becomes a problem in the following scenario: when 2 developers are working locally on a drupal project and one of them added a field to a CCK node, while the other create a CCK node, then these 2 database are out of sync. Synchronizing these databases is a major hurdle. The steep learning curve makes it difficult to introduce junior developers to a project, putting additional demand on Senior Drupal Developers, thereby increasing their cost.</p>
<p>Obviously, none of these options are perfect and there isn&#8217;t one system that will satisfy everyone, but I think that something in the middle would be very useful.</p>
<p>Look at the question and tell me what you think is in the &#8220;<strong>?</strong>&#8220;.</p>
<p><img src="http://taras.cc/~/domains/taras.cc/html/wp-content/uploads/2009/02/whatis1.png" border="0" alt="whatis.png" width="467" height="377" /></p>
<p><strong>What would this system look like?</strong></p>
<p><strong>What would this system allow you to do?</strong></p>
<p><strong>What functionality would it have?</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://taras.cc/index.php/2009/09/30/symphony-joomla-and-drupal/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Hosted Development Environments</title>
		<link>http://taras.cc/index.php/2008/07/16/hosted-development-environments/</link>
		<comments>http://taras.cc/index.php/2008/07/16/hosted-development-environments/#comments</comments>
		<pubDate>Wed, 16 Jul 2008 04:22:56 +0000</pubDate>
		<dc:creator>Taras</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Beecoop]]></category>
		<category><![CDATA[Thoughts]]></category>

		<guid isPermaLink="false">http://taras.cc/?p=33</guid>
		<description><![CDATA[In process of building projects I am beginning to notice some patterns emerging in the requirements that we have for development environments. I think in most cases we need very similar features. I would love to be able to create a service that makes it easy for us work on projects together.
Here is a list [...]]]></description>
			<content:encoded><![CDATA[<p>In process of building projects I am beginning to notice some patterns emerging in the requirements that we have for development environments. I think in most cases we need very similar features. I would love to be able to create a service that makes it easy for us work on projects together.<span id="more-33"></span></p>
<p>Here is a list of things that I would like to see this service do.</p>
<ol>
<li>Easy to add and create development environments</li>
<li>Development environment must be pre configured for the type of development that is going to be done (this is important because Joomla, Drupal, Wordpress development is slightly different &#8211; same for most part, but Python is very different)</li>
<li>It must have an api that allows us to manage permissions on each individual development environment quickly and efficiently</li>
<li>It must be secure, giving access to source code only by people involved in the project</li>
<li>Must allow SSH access</li>
<li>Must use Public Keys for authentication to make authentication quicker and easier (this applies to both ssh and mysql)</li>
<li>Must replica-table on many different servers &#8211; this will allow us to create a grid of computers working together to server individual development environments</li>
</ol>
<div>Some necessary tools</div>
<div>
<ul>
<li>svn, git, baazar</li>
<li>screen</li>
<li>xdebug for php remote debugging</li>
</ul>
</div>
<div>These are my thoughts. I&#8217;m going to be changing them around, but for now here they are</div>
]]></content:encoded>
			<wfw:commentRss>http://taras.cc/index.php/2008/07/16/hosted-development-environments/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Development of Joomla Commenting Component</title>
		<link>http://taras.cc/index.php/2008/07/16/development-of-joomla-commenting-component/</link>
		<comments>http://taras.cc/index.php/2008/07/16/development-of-joomla-commenting-component/#comments</comments>
		<pubDate>Wed, 16 Jul 2008 04:00:22 +0000</pubDate>
		<dc:creator>Taras</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Joomla]]></category>

		<guid isPermaLink="false">http://taras.cc/?p=29</guid>
		<description><![CDATA[One of the recent projects that we were involved in required us to create a commenting component that allowed to leave comments and upload variations to the original post.
Basically here are the specs:

Create or modify existing commenting component to allow creation of 2 types of comments
Variation and Comments are shown in the same list of [...]]]></description>
			<content:encoded><![CDATA[<p>One of the recent projects that we were involved in required us to create a commenting component that allowed to leave comments and upload variations to the original post.<span id="more-29"></span></p>
<p>Basically here are the specs:</p>
<ul>
<li>Create or modify existing commenting component to allow creation of 2 types of comments</li>
<li>Variation and Comments are shown in the same list of comments</li>
<li>We need to be able to moderate the comments</li>
<li>Variations are comments that have Title, Description and upload field that allows the visitor to upload a text, doc or pdf document</li>
<li>Comments have Title, Description and Rating (users can only rate once per item)</li>
</ul>
<div>We had a very limited time to implement these features, approximately 15 hours including styling the frontend.</div>
<div>So we began our investigation and quickly found that we don&#8217;t really have many options. There is JomComment &amp; Joomla Comment. </div>
<div>JomComment has a license that requires us to purchase a license per domain, so we would not be able to reuse or redistribute the code.</div>
<div>Joomla Comment is kinda messy.</div>
<div>So we decided to write something from scratch. The problem with writing something like this from scratch is that we would have to create an administrative interface that would allow us to moderate these comments, but this is time consuming.</div>
<div>So we devised a pretty ingenious plan that I think worked out pretty well.</div>
<div>
<ol>
<li>We decided to store all comments (title &amp; description) as content items under Section &amp; Category &#8211; Comments.</li>
<li>We created a simple component for managing attachments. These attachments are linked to specific content items thereby allowing us to maintain a relationship to comments. ( cool thing is that we can actually use this separately outside of the commenting function )</li>
<li>Rating was integrated using default joomla rating system. </li>
</ol>
</div>
<div>In the end, we were done on time and on budget. It&#8217;s a pretty neat solution, considering that that we were able to leverage all of the standard joomla code to be able to create this implementation and it&#8217;s actually not very hackish, which is kinda surprising.</div>
<div>I think Vitalik (our lead developer) and Alex (our lead CSS dev) did a great Job. </div>
<div>Good Job guys!</div>
<div>Thanks <img src='http://taras.cc/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </div>
]]></content:encoded>
			<wfw:commentRss>http://taras.cc/index.php/2008/07/16/development-of-joomla-commenting-component/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
