<?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>Elvis Stansvik &#187; gsoc</title>
	<atom:link href="http://estan.dose.se/tag/gsoc/feed" rel="self" type="application/rss+xml" />
	<link>http://estan.dose.se</link>
	<description>Random stuff on my mind, or reports from my trips</description>
	<lastBuildDate>Fri, 11 Nov 2011 19:36:13 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Brief GSoC Update &#8212; Interactive Table Resizing and Cell Selections</title>
		<link>http://estan.dose.se/2011/08/brief-gsoc-update-interactive-table-resizing-and-cell-selections</link>
		<comments>http://estan.dose.se/2011/08/brief-gsoc-update-interactive-table-resizing-and-cell-selections#comments</comments>
		<pubDate>Fri, 05 Aug 2011 15:49:37 +0000</pubDate>
		<dc:creator>estan</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[gsoc]]></category>
		<category><![CDATA[planetkde]]></category>
		<category><![CDATA[scribus]]></category>
		<category><![CDATA[tables]]></category>

		<guid isPermaLink="false">http://estan.dose.se/?p=254</guid>
		<description><![CDATA[Hi everybody, In the coming days, I&#8217;ll try to write a longer post with more technical details about my recent work on the project. Until then, here&#8217;s a short screencast showing some of the new features; interactive table resizing and &#8230; <a href="http://estan.dose.se/2011/08/brief-gsoc-update-interactive-table-resizing-and-cell-selections">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Hi everybody,</p>
<p>In the coming days, I&#8217;ll try to write a longer post with more technical details about my recent work on the project. Until then, here&#8217;s a short screencast showing some of the new features; interactive table resizing and cell selections. This time it includes me speaking a bit (!). And the format is now WebM/VP8 instead of Ogg/Theora. White areas in the capture got some weird tinting, but that&#8217;s a screencasting problem and not my code :)</p>
	<video id="wp_mep_1"   width="512" height="384"  controls="controls" preload="true"  >
		
		
		<source src="http://www.strongspace.com/estan/public/gsoc2011/resizing_and_selections.webm" type="video/webm" />
		
		
		
		
		<object width="512" height="384" type="application/x-shockwave-flash" data="http://estan.dose.se/wp-content/plugins/media-element-html5-video-and-audio-player/mediaelement/flashmediaelement.swf">
			<param name="movie" value="http://estan.dose.se/wp-content/plugins/media-element-html5-video-and-audio-player/mediaelement/flashmediaelement.swf" />
			<param name="flashvars" value="controls=true&amp;file=" />			
		</object>		
	</video>
<script type="text/javascript">
jQuery(document).ready(function($) {
	$('#wp_mep_1').mediaelementplayer({
		m:1
		
		,features: ['playpause','current','progress','duration','volume','tracks','fullscreen']
		
	});
});
</script>

<p><a href="http://www.strongspace.com/estan/public/gsoc2011/resizing_and_selections.webm">Download Video (~12 MB WebM)</a></p>
<p>Bye &#8217;til next time!</p>
]]></content:encoded>
			<wfw:commentRss>http://estan.dose.se/2011/08/brief-gsoc-update-interactive-table-resizing-and-cell-selections/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>A Story with a Happy Ending</title>
		<link>http://estan.dose.se/2011/07/a-story-with-a-happy-ending</link>
		<comments>http://estan.dose.se/2011/07/a-story-with-a-happy-ending#comments</comments>
		<pubDate>Fri, 08 Jul 2011 13:18:44 +0000</pubDate>
		<dc:creator>estan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[gsoc]]></category>
		<category><![CDATA[planetkde]]></category>
		<category><![CDATA[scribus]]></category>
		<category><![CDATA[tables]]></category>

		<guid isPermaLink="false">http://estan.dose.se/?p=204</guid>
		<description><![CDATA[Hi again, Just a quick follow-up post to give a happy end to my previous woes. Without further ado, I give you Scribus rendering all 43 cases of border joins mentioned in the previous post (I had forgot two of &#8230; <a href="http://estan.dose.se/2011/07/a-story-with-a-happy-ending">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Hi again,</p>
<p>Just a quick follow-up post to give a happy end to my <a href="http://estan.dose.se/2011/07/bordering-on-the-insane-a-story-of-a-near-collapse">previous woes</a>. Without further ado, I give you Scribus rendering all 43 cases of border joins mentioned in the previous post (I had forgot two of them before):</p>
<p><a href="http://estan.dose.se/wp-content/uploads/2011/07/43_cases.png"><img src="http://estan.dose.se/wp-content/uploads/2011/07/43_cases-331x300.png" alt="The 43 Cases of Border Joins in Scribus" title="The 43 Cases of Border Joins in Scribus" width="331" height="300" class="aligncenter size-medium wp-image-217" /></a></p>
<p>Cheers.</p>
]]></content:encoded>
			<wfw:commentRss>http://estan.dose.se/2011/07/a-story-with-a-happy-ending/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Bordering on the Insane &#8212; A Story of a Near Collapse</title>
		<link>http://estan.dose.se/2011/07/bordering-on-the-insane-a-story-of-a-near-collapse</link>
		<comments>http://estan.dose.se/2011/07/bordering-on-the-insane-a-story-of-a-near-collapse#comments</comments>
		<pubDate>Tue, 05 Jul 2011 13:58:04 +0000</pubDate>
		<dc:creator>estan</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[gsoc]]></category>
		<category><![CDATA[planetkde]]></category>
		<category><![CDATA[scribus]]></category>
		<category><![CDATA[tables]]></category>

		<guid isPermaLink="false">http://estan.dose.se/?p=193</guid>
		<description><![CDATA[You&#8217;ll have to excuse the witty title, but I&#8217;ve been working on table borders. Specifically collapsed multi-line borders, properly joined at intersections. It is hard work I tell you. No, really, it&#8217;s downright ridiculous. Some Background Since a table cell &#8230; <a href="http://estan.dose.se/2011/07/bordering-on-the-insane-a-story-of-a-near-collapse">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>You&#8217;ll have to excuse the witty title, but I&#8217;ve been working on table borders. Specifically collapsed multi-line borders, properly joined at intersections. It is hard work I tell you. No, really, it&#8217;s downright ridiculous.</p>
<h2>Some Background</h2>
<p>Since a table cell may span multiple rows or columns, along each side of the cell, it may share its border on that side with N neighboring cells, or with the table border. Along each such shared border segment, the neighboring border along that segment must be identified and collapsed with the cell border according to certain rules. The most commonly used rules are those specified in the CSS collapsing border model, sometimes with slight modifications. This is also what I&#8217;m aiming for in my implementation.</p>
<p>Lines in Scribus can traditionally be represented by an arbitrary number of lines, each with its own color, width and style, drawn on top of each other, thin over thick. Like this:</p>
<div id="attachment_194" class="wp-caption aligncenter" style="width: 496px"><img src="http://estan.dose.se/wp-content/uploads/2011/07/scribus_multi_line.png" alt="A multi-line in Scribus" title="A multi-line in Scribus" width="486" height="118" class="size-full wp-image-194" /><p class="wp-caption-text">A multi-line in Scribus</p></div>
<p>In trying to keep in style, I&#8217;d of course like to support these types of lines in my implementation of table borders. This is also supported by competing products such as InDesign.</p>
<p>Borders from different cells, or from the table itself, meeting at an intersection in the table should optionally be joined. Joining is the process of adjusting the start and end points of the border, as well as adjusting the start and end points of the individual lines constituting the border, in order to make a &#8220;best effort&#8221; join with any other borders meeting at the intersection.</p>
<p>This is where the fun begins. I&#8217;ve identified at least these 41 possible cases of joins:</p>
<div id="attachment_195" class="wp-caption aligncenter" style="width: 510px"><a href="http://estan.dose.se/wp-content/uploads/2011/07/table_border_join_cases.png"><img src="http://estan.dose.se/wp-content/uploads/2011/07/table_border_join_cases.png" alt="Table Border Join Cases" title="Table Border Join Cases" width="500" height="3127" class="size-full wp-image-195" /></a><p class="wp-caption-text">Table Border Join Cases</p></div>
<h2>The Past ~Two Weeks</h2>
<p>In the past two weeks most of my work has been trying to find a joining/painting algorithm that correctly identifies all the cases above and performs the necessary adjustments.</p>
<p>To paint an entire table, the painting algorithm must iterate over all cell edges in the table, and for each edge, iterate over all shared border segments. For each segment, the segment is collapsed with the correct neighboring border. Next, each of the, possibly six, other border segments meeting the segment at its start and end point must also be identified. This means identifying all the cells surrounding the segment and collapsing the appropriate shared border segments between them.</p>
<p>Let&#8217;s take a simple case as an example. In the example below we want to paint the top border of the green-tinted cell, which spans two columns. The thin red dotted line represents the underlying table grid.</p>
<div id="attachment_196" class="wp-caption aligncenter" style="width: 510px"><img src="http://estan.dose.se/wp-content/uploads/2011/07/painting_a_top_border.png" alt="Painting a Top Border" title="Painting a Top Border" width="500" height="652" class="size-full wp-image-196" /><p class="wp-caption-text">Painting a Top Border</p></div>
<p>In the first iteration above, in addition to collapsing the shared border segment between the cell itself and  the cell above it, the five border segments coming in to meet it at the two intersections must be identified and collapsed correctly. After that, adjustments for joining can be made to the segment start and end, before the segment is finally painted.</p>
<p>Similarly, in the second iteration, there are four additional collapses that needs to be done before joining adjustments and finally painting can be done.</p>
<p>Needless to say, it&#8217;s been quite a chore trying to get this to work. Especially the joining algorithm has been a tough nut to crack. I&#8217;ve used up numerous sketch pads trying to figure it out. When working on something like this, pen and paper is invaluable. But, although there are some cases it can&#8217;t quite handle in a pleasing way, I think I finally have an approach that will work. I&#8217;ve intentionally made the code for collapsing and joining strictly separated from the rest of the code, to ease unit testing.</p>
<p>To not get too complicated the algorithm I&#8217;ve settled on imposes a strict painting order &#8212; horizontal borders must be painted on top of vertical ones. This means two iteration across the table. Iteration is quite fast though, and besides, I&#8217;d rather spend my time optimizing cell accesses on the table than convoluting the joining algorithm with added complexity.</p>
<p>So without further ado, here&#8217;s a screenshot of some collapsed joined and non-joined borders on a table in Scribus:</p>
<div id="attachment_198" class="wp-caption aligncenter" style="width: 310px"><a href="http://estan.dose.se/wp-content/uploads/2011/07/scribus_table_joins.png"><img src="http://estan.dose.se/wp-content/uploads/2011/07/scribus_table_joins-300x205.png" alt="Joined Borders in Scribus" title="Joined Borders in Scribus" width="300" height="205" class="size-medium wp-image-198" /></a><p class="wp-caption-text">Joined Borders in Scribus</p></div>
<p>Although there are some bugs in there, I have other fish to fry at the moment, so I&#8217;m going to leave painting for a while. And if there&#8217;s anyone out there who, after looking at that picture with the 41 join cases I&#8217;ve identified, get a brilliant idea for an algorithm that covers them all with a minimal amount of code, then contact me! Please!</p>
<p>That&#8217;s all for now. Bye &#8217;til next time!</p>
]]></content:encoded>
			<wfw:commentRss>http://estan.dose.se/2011/07/bordering-on-the-insane-a-story-of-a-near-collapse/feed</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Scribus Tables GSoC &#8212; First Steps</title>
		<link>http://estan.dose.se/2011/06/scribus-tables-gsoc-first-steps</link>
		<comments>http://estan.dose.se/2011/06/scribus-tables-gsoc-first-steps#comments</comments>
		<pubDate>Tue, 07 Jun 2011 10:07:24 +0000</pubDate>
		<dc:creator>estan</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[gsoc]]></category>
		<category><![CDATA[planetkde]]></category>
		<category><![CDATA[scribus]]></category>
		<category><![CDATA[tables]]></category>

		<guid isPermaLink="false">http://estan.dose.se/?p=180</guid>
		<description><![CDATA[Hi all, This is the first in a series of blog posts detailing my work with bringing proper support for tables to Scribus as part of Summer of Code 2011. I&#8217;ll try to keep the posts in roughly the same &#8230; <a href="http://estan.dose.se/2011/06/scribus-tables-gsoc-first-steps">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Hi all,<br />
This is the first in a series of blog posts detailing my work with bringing proper support for tables to Scribus as part of Summer of Code 2011. I&#8217;ll try to keep the posts in roughly the same format as the reports I&#8217;m sending off to my mentor Craig each week. This will make it easier for me to reuse some of the material, saving hacking time :) Each post will be divided into the following sections:</p>
<ul>
<li><b>Work Report</b>, a report on what I&#8217;ve been up to since my last report.</li>
<li><b>Project Status</b>, how I&#8217;m standing with regard to the schedule in my <a href="http://wiki.scribus.net/canvas/GSoC_2011_Tables_Proposal">project proposal</a>.</li>
<li><b>Upcoming Work</b>, a rough outline of my next steps.</li>
</ul>
<p>As this is the very first blog post about my project, I&#8217;ll start with a little introduction with general information about my project.</p>
<h2>Introduction</h2>
<p>Tables provide a compact way of representing tabular information in a page layout, and is a common design element in books, magazines and advertisements. Scribus currently has a shortcut for creating an automatically grouped table-like array of text frames. These are not proper tables. To stay competitive, Scribus needs better support for tables. Support that enables the user to create and edit tables as distinct items with their own set of properties as commonly found in other table implementations. This is the rationale for my Summer of Code project, in which I&#8217;ll add a new table page item to Scribus.</p>
<div id="attachment_182" class="wp-caption aligncenter" style="width: 279px"><a href="http://estan.dose.se/wp-content/uploads/2011/06/scribus_tables_first_glimpse.png"><img src="http://estan.dose.se/wp-content/uploads/2011/06/scribus_tables_first_glimpse-269x300.png" alt="First glimpse of new tables" title="First glimpse of new tables" width="269" height="300" class="size-medium wp-image-182" /></a><p class="wp-caption-text">First glimpse of new tables</p></div>
<p>The user should be able to perform common table operations such as inserting rows and columns, merging and splitting cells, formatting borders and backgrounds as well as editing the text of the table. The table will represent the text of the cells using standard Scribus text frames.</p>
<p>More information can be found in my <a href="http://wiki.scribus.net/canvas/GSoC_2011_Tables_Proposal">project proposal</a>.</p>
<p>So without further ado, here follows my first report.</p>
<h2>Work Report</h2>
<ul>
<li><b>Bootstrapping</b>: Drafted an initial <a href="http://wiki.scribus.net/canvas/GSoC_2011_Tables_Design">design document</a> including some mockups on the Scribus wiki and <a href="http://lists.scribus.net/pipermail/scribus-dev/2011-May/000917.html">discussed</a> the ideas in detail on the scribus-dev mailing list. Also set up a development environment (using Qt Creator this time even though I&#8217;m a die-hard Vim junkie).</li>
<li><b>Added</b> a skeleton of a <b>table style</b>. This was way back in April, just to see what work is involved in creating a new type of style. The style is the most basic one imaginable. At the moment I think it has a single property for background color. Instances of the new table style can be managed in the Style Manager. It doesn&#8217;t do style inheritance yet, though that should be relatively easy to fix.</li>
<li><b>Added</b> class <code>PageItem_Table</code>, a new page item for tables. The class represents a grid of table cells by keeping a few lists with row / column geometries.</li>
<li><b>Added</b> ability to insert a new <code>PageItem_Table</code> from <b>toolbar</b> or <b>Insert</b> menu followed by mouse dragging. Just like the current &#8220;tables&#8221;.</li>
<li><b>Added API</b> to <code>PageItem_Table</code> for the basic table operations
<ul>
<li>insert and remove rows and columns,</li>
<li>resize rows and column.</li>
</ul>
</li>
<li><b>Added</b> support for <b>merging cells</b> to <code>PageItem_Table</code> as well as an accompanying helper class <code>CellArea</code> used when keeping track of areas of merged cells. The <code>CellArea</code> class also comes with what I think is the very first unit tests in Scribus. The tests are in <code>tests/</code> and can be runned using <code>make test</code>.</li>
<li><b>Added</b> some rudimentary <b>painting</b> to <code>PageItem_Table</code>, just to be able to see the cells. Still a long way to go for proper table / cell painting, which is kind of non-trivial.</li>
<li>As <b>scriptability</b> allows me to experiment with tables before any UI is done, I&#8217;ve added the following new scripting methods. These have been added to the old scripter, but should be easy enough to port to ScripterNG later on.
<ul>
<li><code>createTable(x, y, width, height, numRows, numColumns, ["name"])</code></li>
<li><code>getTableRows(["name"])</code></li>
<li><code>getTableColumns(["name"])</code></li>
<li><code>insertTableRows(index, numRows, ["name"])</code></li>
<li><code>removeTableRows(index, numRows, ["name"])</code></li>
<li><code>getTableRowHeight(row, ["name"])</code></li>
<li><code>setTableRowHeight(row, height, ["name"])</code></li>
<li><code>insertTableColumns(index, numColumns, ["name"])</code></li>
<li><code>removeTableColumns(index, numColumns, ["name"])</code></li>
<li><code>getTableColumnWidth(column, ["name"])</code></li>
<li><code>setTableColumnWidth(column, width, ["name"])</code></li>
<li><code>mergeTableCells(row, column, numRows, numColumns, ["name"])</code></li>
</ul>
</li>
</ul>
<h2>Project Status</h2>
<p>The goal in the schedule for this first week was simply <em>Data structures for tables</em>. Intentionally a quite moderate goal, as I didn&#8217;t know how long it would take to get up to speed. So unsurprisingly, I think I&#8217;m a little ahead of schedule. Worth noting though is that the tables are currently only skeletal in their nature; they hold no content and are simply a grid of empty cells. This is all according to plan though, and integration with text frames is scheduled for later.</p>
<h2>Upcoming Work</h2>
<p>The goals for next week according to the schedule is</p>
<ul>
<li>Basic table layout with fixed column widths and mock content in cells.</li>
<li>Insertion/removal of rows/columns.</li>
<li>Basic drawing of table.</li>
</ul>
<p>but as at least some of this has already been done, I think I&#8217;ll start looking at other things as well. Right now I&#8217;m looking at proper table / cell border painting, as well as fixing a couple of bugs in the code I have so far.</p>
<p>I have an installation of Adobe InDesign CS5.5 running in VirtualBox and I&#8217;ve been looking at what border model they&#8217;re using and how they&#8217;re doing border conflict resolution. It seems to be a variant of the CSS2 collapsing border model, which is probably what I&#8217;ll try to go for initially in Scribus as well.</p>
<p>That&#8217;s all for now folks! I&#8217;ll conclude with a little screencast showing me playing around with a table using the new scripting methods. I highly recommend you download the <a href="http://blip.tv/file/get/Estan-FirstGlimpseOfNewTables863.ogv">source OGV</a> instead of watching it here, as the quality turned out quite bad in the blip.tv conversion.</p>
<div style="text-align: center;">
<embed src="http://blip.tv/play/AYLAtUMA" type="application/x-shockwave-flash" width="320" height="270" wmode="transparent" allowscriptaccess="always" allowfullscreen="true" ></embed></div>
]]></content:encoded>
			<wfw:commentRss>http://estan.dose.se/2011/06/scribus-tables-gsoc-first-steps/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="http://blip.tv/file/get/Estan-FirstGlimpseOfNewTables863.ogv" length="16205501" type="video/ogg" />
		</item>
		<item>
		<title>So it seems my&#8230;</title>
		<link>http://estan.dose.se/2011/04/so-it-seems-my</link>
		<comments>http://estan.dose.se/2011/04/so-it-seems-my#comments</comments>
		<pubDate>Mon, 25 Apr 2011 20:00:12 +0000</pubDate>
		<dc:creator>estan</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[gsoc]]></category>
		<category><![CDATA[planetkde]]></category>
		<category><![CDATA[scribus]]></category>

		<guid isPermaLink="false">http://estan.dose.se/?p=178</guid>
		<description><![CDATA[&#8230;summer of 2011 will come in a distinct 2009 flavor. Can&#8217;t wait to get started ;) I&#8217;ll probably blog my progress here. What do you guys think; OK for me to have it aggregated on p.k.o? Scribus KDE-ish enough for &#8230; <a href="http://estan.dose.se/2011/04/so-it-seems-my">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>&#8230;<a href="http://wiki.scribus.net/canvas/Blog:Scribus_Times_and_Gazette/Scribus_Team's_Google_Summer_of_Code_2011_Students_and_Projects_announced">summer of 2011</a> will come in a distinct <a href="http://techbase.kde.org/Projects/Summer_of_Code/2009/Projects/Basic_tables_support_for_KWord">2009 flavor</a>. Can&#8217;t wait to get started ;)</p>
<p>
I&#8217;ll probably blog my progress here. What do you guys think; OK for me to have it aggregated on p.k.o? Scribus KDE-ish enough for you?
</p>
<p>
<em><br />
PS. For those of you who didn&#8217;t understand or can&#8217;t be bothered to click the links; I&#8217;ve been accepted into GSoC this year to improve the tables support of Scribus. You might remember me doing the same for KWord as part of GSoC back in 2009. DS.<br />
</em></p>
]]></content:encoded>
			<wfw:commentRss>http://estan.dose.se/2011/04/so-it-seems-my/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tables GSoC Update</title>
		<link>http://estan.dose.se/2009/08/tables-gsoc-update</link>
		<comments>http://estan.dose.se/2009/08/tables-gsoc-update#comments</comments>
		<pubDate>Wed, 05 Aug 2009 18:50:26 +0000</pubDate>
		<dc:creator>estan</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[gsoc]]></category>
		<category><![CDATA[koffice]]></category>
		<category><![CDATA[planetkde]]></category>

		<guid isPermaLink="false">http://estan.dose.se/?p=156</guid>
		<description><![CDATA[Here&#8217;s a little update on my GSoC progress. Time really flies and we have less than two weeks left until pencils down! Some of the things that has happened in KOffice tables land since last time is: Fixed a bug &#8230; <a href="http://estan.dose.se/2009/08/tables-gsoc-update">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Here&#8217;s a little update on my GSoC progress. Time really flies and we have less than two weeks left until pencils down!</p>
<p>Some of the things that has happened in KOffice tables land since last time is:</p>
<ul>
<li>Fixed a bug in relative table width loading.</li>
<li>Further improved KoTextDebug to work with the new styles for tables, rows, columns and cells.</li>
<li>Added support for column width and relative column width. Up until now all columns were hard coded to equal widths.</li>
<li>A KoTableAndRowStyleManager has been added for managing column and row styles.</li>
<li>Fixed a bug where two subsequent tables were painted on top of each other.</li>
<li>Added support for minimum row height.</li>
<li>I began to re-factor the table layout to use a list of rectangles that describes the table instead of a simple rectangle, and started thinking about table breaking. Pretty soon though I realized that I was probably in over my head, and passed the torch to Casper, who has been hard at work trying to get the first pieces in the breaking puzzle, hard row breaks, to work. I just got word on IRC that he may just have it working (!).</li>
<li>Finally fixed the issue with an empty line above tables. This text block is there by necessity; it&#8217;s mandated by Qt Scribe. Me, Thomas and Casper discussed a bit on how to best handle this. And at least for now, we&#8217;ve chosen to solve it like Qt does in its own layout engine, which is putting the empty block to the left of the table. We might do some improvements to the user interaction here though.</li>
<li>Added three new classes; KoTableFormat and its subclasses KoTableColumnFormat and KoTableRowFormat. These are very much like the QTextFormat classes in Qt in that they&#8217;re simple implicitly shared classes that hold a set of properties. They are not used yet, but will be soon.</li>
<li>Fixed bug in justify aligned tables when an explicit width is also specified.</li>
<li>Fixed up the table layout code to handle nested tables, as it was totally oblivious to them up until now.</li>
</ul>
<p>In addition to these things there were some other small fixes, and I&#8217;ve also worked a bit on the tests, which all needed fixing after Casper&#8217;s re-factor. More work to be done on testing though and right now I&#8217;m looking at adding some loading tests to the test suite that Girish created.</p>
<p>On Tuesday last week I fell terribly ill, with high fever, and was mostly in bed or on the couch for a good two days. I&#8217;m back to full health now though. I think it might have been food poisoning.</p>
<p>The future of the column and row style manager I mentioned above is unsure though. At the moment it&#8217;s just a container for pointers to the styles, and the loading code tosses them in there and decorates the QTextTable with a property containing a pointer to the manager. Not really the prettiest of setups, and we need to find a better solution. The format classes I added are a part of this puzzle, but the question is; where do we store these formats?</p>
<p>I&#8217;m sure we&#8217;ll work it out though, and now I need to get back to coding. Sorry if this post was a little duller than my previous ones, but to cheer you up, here&#8217;s a screencast in which I save a set of nested tables in OpenOffice.org Writer and open them in KWord to edit them a bit :)</p>
<p><div id="attachment_157" class="wp-caption aligncenter" style="width: 510px"><a href="http://nya-doxa.se/elvis/gsoc-tables-nested.ogv"><img src="http://estan.dose.se/wp-content/uploads/2009/08/nested-screencast-intro.png" alt="Nested Tables from OO.o to KWord" title="Nested Tables from OO.o to KWord" width="500" height="385" class="size-full wp-image-157" /></a><p class="wp-caption-text">Nested Tables from OO.o to KWord</p></div><br />
<a href="http://nya-doxa.se/elvis/gsoc-tables-nested.ogv">Direct link</a> (15 MB, Ogg/Theora)</p>
]]></content:encoded>
			<wfw:commentRss>http://estan.dose.se/2009/08/tables-gsoc-update/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
<enclosure url="http://nya-doxa.se/elvis/gsoc-tables-nested.ogv" length="15038305" type="video/ogg" />
		</item>
		<item>
		<title>Tables Sprint in Copenhagen</title>
		<link>http://estan.dose.se/2009/07/tables-sprint-in-copenhagen</link>
		<comments>http://estan.dose.se/2009/07/tables-sprint-in-copenhagen#comments</comments>
		<pubDate>Tue, 21 Jul 2009 11:03:18 +0000</pubDate>
		<dc:creator>estan</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[gsoc]]></category>
		<category><![CDATA[koffice]]></category>
		<category><![CDATA[planetkde]]></category>

		<guid isPermaLink="false">http://estan.dose.se/?p=133</guid>
		<description><![CDATA[Hello again everybody. Lots of stuff has happened since my last blog. It&#8217;s Monday afternoon when I&#8217;m writing this and I&#8217;m on the train back from the sprint that Casper Boemann and I had at his place outside Copenhagen this &#8230; <a href="http://estan.dose.se/2009/07/tables-sprint-in-copenhagen">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Hello again everybody.</p>
<p>Lots of stuff has happened since my last blog. It&#8217;s Monday afternoon when I&#8217;m writing this and I&#8217;m on the train back from the sprint that Casper Boemann and I had at his place outside Copenhagen this weekend.</p>
<p>Since Casper is now working on tables support as part of his employment with KO GmbH, we both agreed that it would be a good idea to have a meeting to make plans for our cooperation during the rest of my GSoC, but also do get some hacking done.</p>
<p>The weekend has been intense to say the least, and we&#8217;ve added support for several essential features of tables, such as:</p>
<ul style="list-style: none; margin-left: 0;">
<li style="overflow: auto;"><a href="http://estan.dose.se/wp-content/uploads/2009/07/spanning-big.png"><img src="http://estan.dose.se/wp-content/uploads/2009/07/spanning.png" style="float: left; padding-right: 1em;" alt="Row and Column Spanning" title="Row and Column Spanning" width="210" height="210" /></a><br />
<h4>Row and Column Spanning</h4>
<p>Cells can span multiple rows or columns. The row height calculations have been updated to handle the case where a cell that spans multiple rows grows vertically from a text insertion; the last row that is spanned into will grow in height along with the spanned cell.</p>
</li>
<li style="overflow: auto;">
<h4>Table and Cell Styles</h4>
<p>Thanks to hard work from Casper, we now have KoTableStyle and KoTableCellStyle, which are proper styles for tables and cells, respectively. Work is underway for row and column styles.</p>
</li>
<li style="overflow: auto;"><img src="http://estan.dose.se/wp-content/uploads/2009/07/document-open.png" style="float: left; padding-right: 1.5em;" alt="Loading" title="Loading" width="150" height="150" /><br />
<h4>Loading</h4>
<p>Casper also took the plunge on loading and quite quickly got stuff up and working, and with the commit he did right before I left his apartment, most of the features here should now be loading correctly from ODF.</p>
</li>
<li style="overflow: auto;"><a href="http://estan.dose.se/wp-content/uploads/2009/07/alignment-big.png"><img src="http://estan.dose.se/wp-content/uploads/2009/07/alignment.png" style="float: right; padding-left: 1em;" alt="Table Alignment and Margins" title="Table Alignment and Margins" width="210" height="210" /></a><br />
<h4>Table Alignment and Margins</h4>
<p>Tables should now support all the alignment options in ODF; right, left, center and margins (justified), and they can have a left, right, top and bottom margin.</p>
</li>
<li style="overflow: auto;"><a href="http://estan.dose.se/wp-content/uploads/2009/07/table-background-big.png"><img src="http://estan.dose.se/wp-content/uploads/2009/07/table-background.png" style="float: left; padding-right: 1em;" alt="Table Background" title="Table Background" width="210" height="210" /></a><br />
<h4>Table Background</h4>
<p>Tables can have a global background color set.</p>
</li>
<li style="overflow: auto;"><a href="http://estan.dose.se/wp-content/uploads/2009/07/relative-width-big.png"><img src="http://estan.dose.se/wp-content/uploads/2009/07/relative-width.png" style="float: right; padding-left: 1em;" alt="Relative Table Width" title="Relative table width" width="210" height="210" /></a><br />
<h4>Relative Table Width</h4>
<p>Tables can now have a percentual width that is relative to the page width.</p>
</li>
<li style="overflow: auto;"><a href="http://estan.dose.se/wp-content/uploads/2009/07/cell-background-big.png"><img src="http://estan.dose.se/wp-content/uploads/2009/07/cell-background.png" style="float: right; padding-left: 1em;" alt="Cell Background" title="Cell Background" width="210" height="210" /></a><br />
<h4>Cell Background</h4>
<p>Individual cells can have a background color set.</p>
</li>
<li style="overflow: auto;"><a href="http://estan.dose.se/wp-content/uploads/2009/07/cell-borders-big.png"><img src="http://estan.dose.se/wp-content/uploads/2009/07/cell-borders.png" style="float: left; padding-right: 1em;" alt="Cell Borders" title="Cell Borders" width="210" height="210" /></a><br />
<h4>Cell Borders</h4>
<p>Cells can have borders, including double borders with a spacing between them.</p>
</li>
<li style="overflow: auto;"><a href="http://estan.dose.se/wp-content/uploads/2009/07/padding-big.png"><img src="http://estan.dose.se/wp-content/uploads/2009/07/padding.png" style="float: right; padding-left: 1em;" alt="Cell Padding" title="Cell padding" width="210" height="210" /></a><br />
<h4>Cell Padding</h4>
<p>Individual cells can have a left, right, top and bottom padding.</p>
</li>
</ul>
<p>During our sprint, Casper focused on loading, styles and drawing, and also sat with me for some pair programming when we implemented spanning, while I worked mostly on the layout part and unit testing of the features.</p>
<p>All in all it&#8217;s been a great weekend. Of course there are bugs to be worked out, but the basics of these features are all there and working. Casper is a very friendly host and a great programmer. I have a lot to learn :) He also did all the cooking and made me feel right at home. Thanks Casper!</p>
<p>The weekend ended with a couple of hours of planning, and we made a detailed list of ODF table features that we want for 2.1.</p>
<p>It&#8217;s quite pleasing to see that the approach to tables in KOffice that we&#8217;ve chosen seems to be holding up, and I&#8217;m pretty sure it will work out for all the remaining features that we need to implement, of which proper table breaking across pages is perhaps the most tricky one, from a layout point of view. But that&#8217;s for later; right now I&#8217;m going home for some resting up, and I think Casper is doing the same back at his place.</p>
<p>Anyway, kids are screaming like crazy here on the train, so I think I&#8217;ll end this blog with a little screencast showing off some of the new features, and then put on my headphones and doze off.</p>
<p>So long!</p>
<div id="attachment_140" class="wp-caption aligncenter" style="width: 510px"><a href="http://nya-doxa.se/elvis/tables-sprint-features.ogv"><img src="http://estan.dose.se/wp-content/uploads/2009/07/sprint-screencast-intro.png" alt="Copenhagen Sprint Features Screencast" title="Copenhagen Sprint Features Screencast" width="500" height="400" class="size-full wp-image-140" /></a><p class="wp-caption-text">Copenhagen Sprint Features Screencast</p></div>
<p><a href="http://nya-doxa.se/elvis/tables-sprint-features.ogv">Direct link</a> (2:40 min, 15.2 MB Ogg/Theora)</p>
]]></content:encoded>
			<wfw:commentRss>http://estan.dose.se/2009/07/tables-sprint-in-copenhagen/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
<enclosure url="http://nya-doxa.se/elvis/tables-sprint-features.ogv" length="15967016" type="video/ogg" />
		</item>
		<item>
		<title>On the train to Copenhagen</title>
		<link>http://estan.dose.se/2009/07/on-the-train-to-copenhagen</link>
		<comments>http://estan.dose.se/2009/07/on-the-train-to-copenhagen#comments</comments>
		<pubDate>Fri, 17 Jul 2009 07:02:34 +0000</pubDate>
		<dc:creator>estan</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[gsoc]]></category>
		<category><![CDATA[koffice]]></category>
		<category><![CDATA[planetkde]]></category>

		<guid isPermaLink="false">http://estan.dose.se/?p=130</guid>
		<description><![CDATA[Hi again, Right now I&#8217;m on the train down to Copenhagen for a little sprint/coordination meeting with Casper. As it turns out, he&#8217;ll be working on tables too and therefore we thought it would be good to get together and &#8230; <a href="http://estan.dose.se/2009/07/on-the-train-to-copenhagen">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Hi again,</p>
<p>Right now I&#8217;m on the train down to Copenhagen for a little sprint/coordination meeting with Casper. As it turns out, he&#8217;ll be working on tables too and therefore we thought it would be good to get together and coordinate a little. And code like crazy of course.</p>
<p>I&#8217;ll be going home Monday afternoon, and hopefully there will be something blog worthy coming out of this. *yAwn*. Got up at 5 AM, so a little tired, but no rest for the wicked right? :)</p>
<p>Later, Elvis.</p>
<p><img src="http://estan.dose.se/wp-content/uploads/2009/07/copenhagen.jpg" alt="" title="Copenhagen" width="336" height="167" class="aligncenter size-full wp-image-131" /></p>
]]></content:encoded>
			<wfw:commentRss>http://estan.dose.se/2009/07/on-the-train-to-copenhagen/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tables Update &#8211; Heights</title>
		<link>http://estan.dose.se/2009/07/tables-update-heights</link>
		<comments>http://estan.dose.se/2009/07/tables-update-heights#comments</comments>
		<pubDate>Wed, 15 Jul 2009 13:50:13 +0000</pubDate>
		<dc:creator>estan</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[gsoc]]></category>
		<category><![CDATA[koffice]]></category>
		<category><![CDATA[planetkde]]></category>

		<guid isPermaLink="false">http://estan.dose.se/?p=117</guid>
		<description><![CDATA[Hello again, As you may remember from my last post, I was cheating in my screencast; the table height was hard-coded and the cell heights were not adjusted to content height. What I needed to do was to handle the &#8230; <a href="http://estan.dose.se/2009/07/tables-update-heights">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Hello again,</p>
<p>As you may remember from my last post, I was cheating in my screencast; the table height was hard-coded and the cell heights were not adjusted to content height. What I needed to do was to handle the following case:</p>
<div id="attachment_118" class="wp-caption aligncenter" style="width: 490px"><img src="http://estan.dose.se/wp-content/uploads/2009/07/table-insert-row-height.png" alt="Cell Heights Adjustment" title="Cell Heights Adjustment" width="480" height="400" class="size-full wp-image-118" /><p class="wp-caption-text">Cell Heights Adjustment</p></div>
<p>I have just commited the beginnings of this in <a href="http://websvn.kde.org/?view=rev&#038;revision=997173">r997173</a>. TableLayout now has an updateCellContentHeight(QTextTableCell&#038;) API, which is called once the content of a cell has been laid out in Layout::nextParag().</p>
<p>There are a lot of rough edges, and my tests of course broke left and right, but it principally works, fingers crossed ;) Here&#8217;s a video demonstration:</p>
<div id="attachment_126" class="wp-caption aligncenter" style="width: 510px"><a href="http://nya-doxa.se/elvis/gsoc-content-heights.ogv"><img src="http://estan.dose.se/wp-content/uploads/2009/07/gsoc-content-heights1.png" alt="Cell Heights Calculations" title="Cell Heights Calculations" width="500" height="400" class="size-full wp-image-126" /></a><p class="wp-caption-text">Cell Heights Calculations</p></div>
<p><a href="http://nya-doxa.se/elvis/gsoc-content-heights.ogv">Direct link</a> (1:30 min, 7.6 MB Ogg/Theora).</p>
<p>I skipped uploading to Vimeo this time, as it&#8217;s so clunky. I don&#8217;t think anyone will miss Flash right?</p>
<p>Anyway, my dear mom just appeared and is taking me out to eat, then I need to start fixing/extending those tests, so bye for now!</p>
]]></content:encoded>
			<wfw:commentRss>http://estan.dose.se/2009/07/tables-update-heights/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
<enclosure url="http://nya-doxa.se/elvis/gsoc-content-heights.ogv" length="7961205" type="video/ogg" />
		</item>
		<item>
		<title>Tables GSoC Status</title>
		<link>http://estan.dose.se/2009/07/tables-gsoc-status</link>
		<comments>http://estan.dose.se/2009/07/tables-gsoc-status#comments</comments>
		<pubDate>Wed, 08 Jul 2009 15:41:18 +0000</pubDate>
		<dc:creator>estan</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[gsoc]]></category>
		<category><![CDATA[koffice]]></category>
		<category><![CDATA[planetkde]]></category>

		<guid isPermaLink="false">http://estan.dose.se/?p=103</guid>
		<description><![CDATA[Hi all, I hope everyone had a nice time on Gran Canaria. It seems like it&#8217;s been a really successful event from all the posts I&#8217;ve read. I&#8217;m not one of the frequent GSoC bloggers here on p.k.o, but as &#8230; <a href="http://estan.dose.se/2009/07/tables-gsoc-status">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Hi all,</p>
<p>I hope everyone had a nice time on Gran Canaria. It seems like it&#8217;s been a really successful event from all the posts I&#8217;ve read.</p>
<p>I&#8217;m not one of the frequent GSoC bloggers here on p.k.o, but as we are in mid-term now I thought I&#8217;d make a little summary of my thoughts around the project so far and give a little status report.</p>
<p>Initially my idea was to divide this post into two sections; &#8220;The Good&#8221; and &#8220;The Bad&#8221;, with a summary at the end. But then I realized that for almost every bad thing I could think of, I could find a good side to it, and vice versa. There&#8217;s always two sides to a coin. So instead I&#8217;ve decided to make a table. How appropriate ;)</p>
<table>
<caption align="bottom"><em>(The table is styled and probably looks better at my blog page)</em></caption>
<thead>
<tr>
<td colspan="2">GSoC experiences so far</td>
</tr>
<tr>
<td class="negative">-</td>
<td class="positive">+</td>
</thead>
<tbody>
<tr>
<td>Table layout is hard. There are just so many things to consider, and a lot of side cases to take care of. Just look at <a href="http://qt.gitorious.org/qt/qt/blobs/master/src/gui/text/qtextdocumentlayout.cpp">Qt Scribe&#8217;s implementation</a>. Lord knows I have :)</td>
<td>But extremely fun and a very rewarding thing to work on. The feedback is quite immediate, which is very gratifying.</td>
</tr>
<tr>
<td>Unit testing is an art. You have to be very careful what you test for and how you go about it. Just writing the tests is not enough, you have to put a lot of thought into it.</td>
<td>But it&#8217;s an invaluable tool when starting out and trying to focus on a specific aspect of a complex thing such as table layout. By the way, anyone who can recommend a short little book on unit testing? Preferably something as concise and &#8220;hands-on&#8221; as e.g. Meyers&#8217; Effective C++.</td>
</tr>
<tr>
<td>I have probably over-estimated my abilities as a programmer. I tend to try to consider all the consequences of the changes I do at once and look into the future, instead of focusing on the actual problem at hand, and this tend to be a real show stopper for productivity. As my good mentor Thomas put it; perfection is the enemy of productivity.
</td>
<td>But I&#8217;ve learnt a lot about my abilities and limitations, and I feel that I&#8217;m improving. I&#8217;m confident that by the end of this summer, I will have grown as a programmer.</td>
</tr>
<tr>
<td>Git can be confusing. Coming from centralized VCSs like SVN and CVS, wrapping your head around this new-fangled distributed VCS can be quite daunting, especially as the user interface is a veritable swiss army knife of funky names and idioms. A text that really helped me understand how Git works was <a href="http://tom.preston-werner.com/2009/05/19/the-git-parable.html">The Git Parable</a>. And for the more technically inclined I&#8217;ve heard good things about <a href="http://eagain.net/articles/git-for-computer-scientists/">Git for Computer Scientists</a></td>
<td>But it is a God-send after all, and I can&#8217;t wait until all of KOffice (and KDE) is on Git. Things like cherrypicking, interactive rebasing and extremely easy branching/merging is just too good to say no to. I&#8217;d like to make a parallel to when I first learned Vim. No pain no gain right? ;) Recent posts here on the planet, if I understand them correctly, indicates that there are talks about hosting KDE Git repos at Gitorious, which sounds like a good idea to me.</td>
<tr>
<td>The payment schedule of Summer of Code is kind of unfortunate. At least if you have high fixed expenses every month, as you&#8217;ll have to go all through June without any money. This is something to think about if you&#8217;re considering participating. I was lucky to be able to loan money for my rent/Internet/electricity/phone bill.</td>
<td>But this is definitely understandable. Having monthly payments would mean having monthly evaluations and a lot more work for both mentors and Google staff members. I guess a lot of students in the program live with their parents and don&#8217;t have a lot of expenses. But I&#8217;m (almost) an old fart as far as students go ;) Just bringing this up, as it can become an extra stress factor.</td>
</tbody>
</table>
<p></p>
<p>All in all, I&#8217;m having a great GSoC so far, and I think it can only get better.</p>
<h2>Progress</h2>
<p>Now on to some information about my progress. What I&#8217;ve been working on is getting some first basic table layout working. The design is quite simple so far, and looks very roughly something like this:</p>
<div id="attachment_105" class="wp-caption aligncenter" style="width: 491px"><img src="http://estan.dose.se/wp-content/uploads/2009/07/gsoc-overview.png" alt="Table Layout Design Overview" title="Table Layout Design Overview" width="481" height="401" class="size-full wp-image-105" /><p class="wp-caption-text">Table Layout Design Overview</p></div>
<p>The Layout class is the innermost class of the text layout engine in KOffice, and is the one responsible for most of the nitty gritty details of text layout. It is declared as an inner class of KoTextDocumentLayout, which has an instance of this class called <em>m_state</em>.</p>
<p>KoTextDocumentLayout in turn is a higher level class that derives from Qt&#8217;s abstract document layout class QAbstractTextDocumentLayout. Qt&#8217;s own document layout engine, QTextDocumentLayout, which is not shown in the diagram above, derives from this same ABC. I&#8217;ve also included KWTextDocumentLayout, which is a specialized KoTextDocumentLayout used in KWord. It adds support for letting text flow around other shapes, among other things.</p>
<p>What this all means is that KOffice&#8217;s layout engine, while still working with an underlying QTextDocument, is completely separate from Qt&#8217;s. Now, because of poor research on my part in the weeks leading up to the GSoC start, I actually thought I&#8217;d be able to leverage at least some of the built-in support for table layout in Qt. But I have only myself to blame for that, and it&#8217;s nothing to cry over now. What I do get is QTextTable, which can be considered a blueprint for a table, and my task is to lay out this table according to its properties, which I&#8217;ll later have to extend to support ODF features that don&#8217;t have a 1:1 equivalent in QTextTable and its associate classes.</p>
<p>I&#8217;ve modified Layout to have an instance of the new class TableLayout, which is responsible for doing layout and drawing of tables. It takes a QTextTable and lays it out, storing the layout information, such as table and cell geometries in an associated TableData instance. It actually caches TableData instances per-table internally. TableLayout offers an API to be used from Layout to obtain cell content rectangles to direct the layout engine into, as well as an API for adjusting cell heights based on the cell contents.</p>
<p>It&#8217;s a simple design, but one that I think will work out fine for all the requirements that will come later, and I already have ideas on how e.g. cell spanning should be implemented. Things on my TODO are too many to even enumerate, but what I&#8217;m working on right this minute is row heights calculations and finding a good way to let the layout process in Layout notify the TableLayout of cell content height changes. After that comes, among other things:</p>
<ul>
<li>Margins/paddings/borders.</li>
<li>Variable column widths.</li>
<li>Tests, tests and more tests.</li>
</ul>
<p>Now let&#8217;s see, this post has had a table, a diagram and a list. What&#8217;s missing? A video of course :) Take 50 seconds and marvel at me pasting a basic table from Firefox into KWord and editing the cell contents:</p>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=5507473&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=5507473&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></p>
<p><a href="http://nya-doxa.se/elvis/gsoc-midterm-basic-tables.ogv">Direct link</a> (5.7 MB Ogg/Theora).</p>
<p>Actually I&#8217;m cheating in the above video, as the table height is hard coded, but don&#8217;t tell anyone! ;)</p>
<p>Finally, I&#8217;d like to  be honest and admit that progress really haven&#8217;t been as fast as I thought it would be, but I do feel that I&#8217;m on the right track. And even though the road ahead is longer than what I would have wanted, at least it seems pretty straight, all things considered.</p>
<p>Now if you&#8217;ll excuse me, I really need to get back to coding!</p>
<p>Bye &#8217;til next time!</p>
]]></content:encoded>
			<wfw:commentRss>http://estan.dose.se/2009/07/tables-gsoc-status/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
<enclosure url="http://nya-doxa.se/elvis/gsoc-midterm-basic-tables.ogv" length="5930078" type="video/ogg" />
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk

 Served from: estan.dose.se @ 2013-06-20 05:06:26 by W3 Total Cache -->