<?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>DP Learning Management System</title>
	<atom:link href="http://dplms.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://dplms.com</link>
	<description>Next Generation Open Source LMS</description>
	<lastBuildDate>Mon, 07 Dec 2009 12:01:13 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Student Grades &#8211; Percentages and Overall</title>
		<link>http://dplms.com/?p=44</link>
		<comments>http://dplms.com/?p=44#comments</comments>
		<pubDate>Mon, 07 Dec 2009 12:01:13 +0000</pubDate>
		<dc:creator>Jim</dc:creator>
				<category><![CDATA[New Features]]></category>
		<category><![CDATA[Rev 124]]></category>

		<guid isPermaLink="false">http://dplms.com/?p=44</guid>
		<description><![CDATA[I added percentages for grades in the student view, as well as the student&#8217;s overall grade in the course so far.
I modified the grades controller to get the overall grade, and I modified the view to display the percentages.
This further addresses issue 11.
]]></description>
			<content:encoded><![CDATA[<p>I added percentages for grades in the student view, as well as the student&#8217;s overall grade in the course so far.</p>
<p>I modified the grades controller to get the overall grade, and I modified the view to display the percentages.</p>
<p>This further addresses <a href="http://code.google.com/p/dplms/issues/detail?id=11" target="_blank">issue 11</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://dplms.com/?feed=rss2&amp;p=44</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Class Assignment Averages</title>
		<link>http://dplms.com/?p=40</link>
		<comments>http://dplms.com/?p=40#comments</comments>
		<pubDate>Mon, 07 Dec 2009 10:35:46 +0000</pubDate>
		<dc:creator>Jim</dc:creator>
				<category><![CDATA[New Features]]></category>
		<category><![CDATA[123]]></category>
		<category><![CDATA[average]]></category>
		<category><![CDATA[Revision 123]]></category>

		<guid isPermaLink="false">http://dplms.com/?p=40</guid>
		<description><![CDATA[I added the class average for each assignment to the grades view for teachers and TAs.
I wrote a new query to replace the way assignments were being retrieved so that the averages could be obtained along with the rest of the assignment information.
This is to partially address issue 11.
]]></description>
			<content:encoded><![CDATA[<p>I added the class average for each assignment to the grades view for teachers and TAs.</p>
<p>I wrote a new query to replace the way assignments were being retrieved so that the averages could be obtained along with the rest of the assignment information.</p>
<p>This is to partially address issue <a href="http://code.google.com/p/dplms/issues/detail?id=11" target="_blank">11</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://dplms.com/?feed=rss2&amp;p=40</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IE8 Compatibility</title>
		<link>http://dplms.com/?p=35</link>
		<comments>http://dplms.com/?p=35#comments</comments>
		<pubDate>Sun, 06 Dec 2009 02:03:32 +0000</pubDate>
		<dc:creator>Jim</dc:creator>
				<category><![CDATA[Bugfixes]]></category>
		<category><![CDATA[122]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[IE8]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Revision 122]]></category>

		<guid isPermaLink="false">http://dplms.com/?p=35</guid>
		<description><![CDATA[I&#8217;ve been working on making DPLMS compatible with IE, since we originally developed with Firefox and Safari. IE handles CSS slightly differently than the other browsers, particularly when it comes to making an assumption about a rule. So I went through and made rules more explicit, instead of letting the browsers interpret in their own ]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been working on making DPLMS compatible with IE, since we originally developed with Firefox and Safari. IE handles CSS slightly differently than the other browsers, particularly when it comes to making an assumption about a rule. So I went through and made rules more explicit, instead of letting the browsers interpret in their own way. Also, adding a Doctype declaration on top of the header helped out quite a bit. It&#8217;s something that&#8217;s easy to forget to include, but IE behaves very differently with javascript and css when a valid Doctype is defined.</p>
<p>I just committed the changes, but they aren&#8217;t live on the demo site yet, as there is still some more thorough testing to do.</p>
<p>This addresses Issue <a href="http://code.google.com/p/dplms/issues/detail?id=13">13</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://dplms.com/?feed=rss2&amp;p=35</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Security: Application-Wide Access Control</title>
		<link>http://dplms.com/?p=32</link>
		<comments>http://dplms.com/?p=32#comments</comments>
		<pubDate>Sun, 15 Nov 2009 18:56:23 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[118]]></category>
		<category><![CDATA[access control]]></category>
		<category><![CDATA[action helper]]></category>
		<category><![CDATA[bugs]]></category>
		<category><![CDATA[feature]]></category>
		<category><![CDATA[Revision 118]]></category>

		<guid isPermaLink="false">http://dplms.com/?p=32</guid>
		<description><![CDATA[I created an Action Helper&#8211; essentially a class that is accessible from all implementations of the Zend_Controller_Action abstract class. This class currently implements a simple method that given a user id, course section id, and minimal user level, it will either do nothing, or halt execution and redirect the user.
This is to address Issue 17.
]]></description>
			<content:encoded><![CDATA[<p>I created an Action Helper&#8211; essentially a class that is accessible from all implementations of the Zend_Controller_Action abstract class. This class currently implements a simple method that given a user id, course section id, and minimal user level, it will either do nothing, or halt execution and redirect the user.</p>
<p>This is to address Issue <a href="http://code.google.com/p/dplms/issues/detail?id=17">17</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://dplms.com/?feed=rss2&amp;p=32</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bugfix: Course Content &amp; Uploads</title>
		<link>http://dplms.com/?p=27</link>
		<comments>http://dplms.com/?p=27#comments</comments>
		<pubDate>Sun, 15 Nov 2009 16:56:32 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Bugfixes]]></category>
		<category><![CDATA[117]]></category>
		<category><![CDATA[bugs]]></category>
		<category><![CDATA[course content]]></category>
		<category><![CDATA[Revision 117]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://dplms.com/?p=27</guid>
		<description><![CDATA[The ability to have structured course content stored in the database and maintain efficient lookups of what files are in what directories as well as traversing the path to the tree root is a little complicated.
Each entry in the database has left and right counts as well as a tag indicating whether or not it ]]></description>
			<content:encoded><![CDATA[<p>The ability to have structured course content stored in the database and maintain efficient lookups of what files are in what directories as well as traversing the path to the tree root is a little complicated.</p>
<p>Each entry in the database has left and right counts as well as a tag indicating whether or not it is a directory (which isn&#8217;t entirely necessary). For example, if you have a root node and two children, the database might look like this:<br />
<code><br />
ID / NODE NAME / LEFT / RIGHT / DIR<br />
1 / Root / 1 / 6 / 1<br />
2 / Left Child / 2 / 3 / 0<br />
3 / Right Child / 4 / 5 / 0<br />
</code></p>
<p>This requires modifying existing rows when adding new data, but given that the changing of content is a much less common occurrence than accessing data, it makes sense for the cost to be up front. This is essentially a modified preorder traversal data structure. One side effect is the queries are a bit harder to write than an adjacency list data structure. For instance, returning just the immediate child nodes of any parent node requires the following SQL query:<br />
<code><br />
SELECT node.name, node.id, node.lft, node.file_name, node.file_ext, node.dir, (COUNT(parent.name) - (sub_tree.depth + 1)) AS depth<br />
            FROM section_content AS node,<br />
                section_content AS parent,<br />
                section_content AS sub_parent,<br />
                (<br />
                    SELECT node.name, (COUNT(parent.name) - 1) AS depth<br />
                    FROM section_content AS node,<br />
                    section_content AS parent<br />
                    WHERE node.lft BETWEEN parent.lft AND parent.rgt<br />
                    AND node.lft = ?<br />
                    AND node.section_id = ?<br />
					AND parent.section_id = ?<br />
                    GROUP BY node.name<br />
                    ORDER BY node.lft<br />
                )AS sub_tree<br />
            WHERE node.lft BETWEEN parent.lft AND parent.rgt<br />
                AND node.lft BETWEEN sub_parent.lft AND sub_parent.rgt<br />
                AND sub_parent.name = sub_tree.name<br />
                AND node.section_id = ?<br />
				AND parent.section_id = ?<br />
				AND node.lft != '1'<br />
            GROUP BY node.name<br />
            HAVING depth = 1<br />
            ORDER BY node.lft<br />
</code></p>
<p>Issue <a href="http://code.google.com/p/dplms/issues/detail?id=15">15</a> noted that uploading course content did not work. This has been resolved for the simple case (uploading to a single section). Uploading to all sections in a course will require the addition of a loop.</p>
]]></content:encoded>
			<wfw:commentRss>http://dplms.com/?feed=rss2&amp;p=27</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bugfix: Improved Forms</title>
		<link>http://dplms.com/?p=24</link>
		<comments>http://dplms.com/?p=24#comments</comments>
		<pubDate>Sun, 08 Nov 2009 05:34:08 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Bugfixes]]></category>
		<category><![CDATA[115]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[bugs]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[forms]]></category>
		<category><![CDATA[Revision 115]]></category>
		<category><![CDATA[xhtml]]></category>

		<guid isPermaLink="false">http://dplms.com/?p=24</guid>
		<description><![CDATA[Issue 12 has been largely accounted for. As forms were dynamically generated, they were being exempted from CSS control. This has been fixed and additional structural elements added. 
This build also marks the beginning of improving non-compliant XHTML. Some elements with duplicate id&#8217;s have been classed, which is why most template files have had to ]]></description>
			<content:encoded><![CDATA[<p><a href="http://code.google.com/p/dplms/issues/detail?id=12">Issue 12</a> has been largely accounted for. As forms were dynamically generated, they were being exempted from CSS control. This has been fixed and additional structural elements added. </p>
<p>This build also marks the beginning of improving non-compliant XHTML. Some elements with duplicate id&#8217;s have been classed, which is why most template files have had to be re-checked in.</p>
]]></content:encoded>
			<wfw:commentRss>http://dplms.com/?feed=rss2&amp;p=24</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Feature: Salted Passwords</title>
		<link>http://dplms.com/?p=9</link>
		<comments>http://dplms.com/?p=9#comments</comments>
		<pubDate>Sun, 08 Nov 2009 04:07:56 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[New Features]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[113]]></category>
		<category><![CDATA[feature]]></category>
		<category><![CDATA[hash]]></category>
		<category><![CDATA[password]]></category>
		<category><![CDATA[Revision 113]]></category>
		<category><![CDATA[salt]]></category>

		<guid isPermaLink="false">http://dplms.com/?p=9</guid>
		<description><![CDATA[Based on a suggestion by Ryan Govostes, I have implemented salted passwords. If the database is compromised by some sort of attack &#8212; SQL injection, or otherwise &#8212; the attacker will be unable to use a pre-made collision table.
Now, there is an application salt in addition to a per-user salt. The idea behind the application-wide ]]></description>
			<content:encoded><![CDATA[<p>Based on a suggestion by Ryan Govostes, I have implemented salted passwords. If the database is compromised by some sort of attack &#8212; SQL injection, or otherwise &#8212; the attacker will be unable to use a pre-made collision table.</p>
<p>Now, there is an application salt in addition to a per-user salt. The idea behind the application-wide salt is that if the database is compromised but the application data is not, it will be extremely difficult, if not impossible to generate collisions against the hashed passwords. The per-user salt is stored in the database and increases the complexity of collision-generation while not significantly affecting application performance.</p>
]]></content:encoded>
			<wfw:commentRss>http://dplms.com/?feed=rss2&amp;p=9</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Demo Installation Online</title>
		<link>http://dplms.com/?p=16</link>
		<comments>http://dplms.com/?p=16#comments</comments>
		<pubDate>Sun, 08 Nov 2009 04:04:28 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[demo]]></category>
		<category><![CDATA[login]]></category>
		<category><![CDATA[password]]></category>
		<category><![CDATA[student]]></category>
		<category><![CDATA[teacher]]></category>

		<guid isPermaLink="false">http://dplms.com/?p=16</guid>
		<description><![CDATA[Build 112 is currently live at http://demo.dplms.com.
You may log in as a student or teacher with the following credentials:
    student / student
    teacher / teacher
Database will be sanitized on a semi-regular basis.
]]></description>
			<content:encoded><![CDATA[<p>Build 112 is currently live at <a href="http://demo.dplms.com">http://demo.dplms.com</a>.</p>
<p>You may log in as a student or teacher with the following credentials:<code><br />
    student / student<br />
    teacher / teacher<br />
</code>Database will be sanitized on a semi-regular basis.</p>
]]></content:encoded>
			<wfw:commentRss>http://dplms.com/?feed=rss2&amp;p=16</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Code</title>
		<link>http://dplms.com/?p=6</link>
		<comments>http://dplms.com/?p=6#comments</comments>
		<pubDate>Sun, 08 Nov 2009 02:30:40 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[bugs]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[repository]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[wiki]]></category>

		<guid isPermaLink="false">http://dplms.com/?p=6</guid>
		<description><![CDATA[Our subversion repository, bug-tracker and wiki are all hosted on Google Code.
The project is hosted here.
]]></description>
			<content:encoded><![CDATA[<p>Our subversion repository, bug-tracker and wiki are all hosted on Google Code.</p>
<p>The project is hosted <a href="http://code.google.com/p/dplms">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://dplms.com/?feed=rss2&amp;p=6</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
