<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" 
   xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" 
   xmlns:html="http://www.w3.org/1999/html" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
<channel>
   <title>Semantic Window Compositing journal</title>
   <link>http://tuukka.iki.fi/2006/summercode/blog</link>
   <description>Journal of the Semantic Window Compositing project</description>
   <language>en</language>
   <copyright>Copyright 2006 Tuukka Hastrup</copyright>
   <ttl>60</ttl>
   <pubDate>Tue, 15 Aug 2006 04:46 GMT</pubDate>
   <managingEditor>Tuukka.Hastrup@iki.fi</managingEditor>
   <generator>PyBlosxom http://pyblosxom.sourceforge.net/ 1.3.2 2/13/2006</generator>
<item>
   <title>Seventh report</title>
   <guid isPermaLink="false">report7</guid>
   <link>http://tuukka.iki.fi/2006/summercode/blog/report7.html</link>
   <description><![CDATA[

<div style="float: right; margin-left: 1em;">
<a href="http://tuukka.iki.fi/2006/summercode/wiki/FrontPage?action=AttachFile&amp;do=view&amp;target=whirl-2006-08-15.png">
<img src="http://tuukka.iki.fi/2006/summercode/wiki/FrontPage?action=AttachFile&amp;do=get&amp;target=whirl-2006-08-15.png" alt="Screenshot with web page relations" width="450" height="337" border="0" />
</a>
<p>
<i>Web page relations.</i>
</p>
</div>
<p>
After too much procrastination, I have something to report for a change. 
The Compiz plugin and the Firefox extension are fleshed out to the extent 
that curious and helpful people might want to alpha-test them. I don't have 
precompiled binaries or even source packages yet, but compiling shouldn't be 
laborous 
(see <a href="http://tuukka.iki.fi/2006/summercode/wiki/InstallationGuide">
InstallationGuide</a> in the wiki).
</p>
<p>
Otherwise, I needed to merge upstream changes of Compiz to the plugin,
which meant getting more experience with Git. Some is still pending, as
the documentation work isn't properly merged yet. Comparisons of version 
control systems seldom extend on the different work-flows they imply. The
closest this far and thus useful reading was
<a href="http://use.perl.org/~mugwumpjism/journal/30615">
What people Love about their VCS - Part 3 of 4. git</a>, which a friend
pointed to me.
</p>
<p>
Something historical I hope someone would've reminded me of earlier when I 
told of my debugging setup is <em>core dumps</em>. They're off by default
these days, but tell <code>ulimit -c unlimited</code> to bash before running
a program, and you can start the debugger <em>after</em> the crash. This is
good for big processes such as Xgl or Firefox, but it also removes the 
need of remote debugging in case of Compiz. Just start Compiz again, and
examine the core file with <code>gdb ~/inst/bin/compiz core</code>.
</p>
<p>
While I'd like to think there's still a month left of the summer, there's 
actually less than three weeks. I don't expect to get the project fully 
closed down the last day of the month anymore. Luckily the semester starts
slowly in the Finnish universities, so I'll have time to finish documentation
and revise patches. But before that, I need to achieve a couple of major
sprints. I'd almost hope the summer weather of the century to turn into
focusing autumn rains. I'll try to add more features to the Firefox extension,
and make the Compiz plugin look acceptable if not good.
</p>

]]></description>
   <category domain="http://tuukka.iki.fi/2006/summercode/blog"></category>
   <pubDate>Tue, 15 Aug 2006 04:46 GMT</pubDate>
</item>
<item>
   <title>Sixth report</title>
   <guid isPermaLink="false">report6</guid>
   <link>http://tuukka.iki.fi/2006/summercode/blog/report6.html</link>
   <description><![CDATA[

<p>
I don't have much to report since last week. The Firefox extension start is 
just about ready for publishing but the <code>Makefile</code> for compiling it 
won't be pretty and there is not much to see when you install it. I'm
contemplating whether to add some kind of user interface to the extension, 
or if it's acceptable that the only way to see the operation is via 
the Compiz plugin or debug tools (<code>xprop</code>).
</p>
<p>
Actually, I got distracted, and hacked the "documents" interface of Gimmie to
show the data from the extension. Unfortunately, based on my earlier 
experiments and the PyGTK documentation, I thought I could get notifications 
for window property changes, but I seem to be able to get them only as 
<code>GDK_NOTHING</code>s. Probably a PyGTK thing, I should ask around.
</p>
<p>
That's about it. I also followed the discussions on the Compiz mailing list,
and updated the project wiki pages on the 
<a href="http://tuukka.iki.fi/2006/summercode/wiki/DevelopmentEnvironment">
development environment</a> and on 
<a href="http://tuukka.iki.fi/2006/summercode/wiki/CheckingMyCode">
checking out my code</a>, following the transition to Git. I know a demo 
release of code would be more anticipated.
</p>

]]></description>
   <category domain="http://tuukka.iki.fi/2006/summercode/blog"></category>
   <pubDate>Fri, 21 Jul 2006 13:23 GMT</pubDate>
</item>
<item>
   <title>Fifth report</title>
   <guid isPermaLink="false">report5</guid>
   <link>http://tuukka.iki.fi/2006/summercode/blog/report5.html</link>
   <description><![CDATA[

<p>
During the past week I completed the communication path from a Firefox 
extension to the Compiz plugin and visualizing the results. It was about time
as the summer is half-way through, and there's still a lot of extending and
polishing left to do. I want to publish a demo version of the extension soon
along a version of the plugin code that works with it.
</p>
<p>
After my last report, it turned out getting the native window was not as easy
as it seemed. Even though <code>nsIBaseWindow</code> has it as a property, 
there's some code for accessing it, and trying to access the property makes
the code give you a ... segfault. Luckily the code could be worked around
by using <code>GetMainWidget</code> and 
<code>GetNativeData(NS_NATIVE_WIDGET)</code>. The native code now does all
I need, and the JavaScript part uses it to publish the address and title of
the document. I'll need to explore the JavaScript side more to get the 
information about parent window, that is, which page was this page opened
from. Another thing is supporting a set of documents, as tabs lead to
several documents per window.
</p>
<p>
A bit unexpectedly, the Compiz upstream changed to use Git instead of CVS.
I welcome the use of distributed version control, but it means my 
CVS to Darcs gateway of the Compiz repository makes no sense anymore. I've 
been learning Git, setting services up, and moving my Compiz patches to
Git. This far, you can 
<a href="http://tuukka.iki.fi/cgi-bin/gitweb.cgi">browse the new repo</a>
<code>git://tuukka.iki.fi/compiz</code>. 
</p>
<p>
I've hit some problems on the Compiz side, not understanding some details of
the system. To help this, I've continued studying the code and adding 
comments and documentation. Some of this is currently available in the 
<a href="http://tuukka.iki.fi/cgi-bin/gitweb.cgi?p=compiz;a=shortlog;h=documentation_work">
<code>documentation_work</code></a> head of my Git repository, specifically
<a href="http://tuukka.iki.fi/cgi-bin/gitweb.cgi?p=compiz;a=commitdiff;h=f5722c96406d83d61140a7f0c101832c46a2c70f">
the patch</a>. I'm planning on going through all of the paint sequence next, 
as that's one of the most delicate ones to understand.
</p>
<p>
To try more OpenGL features I wanted a Python environment that is similar to
Compiz. It's not too near yet, but it has pixel coordinates set up, and I
was able to 
<a href="http://tuukka.iki.fi/2006/summercode/darcs/tests/opengl_arrow.py">
debug my arrow drawing mathematics</a> with it.
</p>

]]></description>
   <category domain="http://tuukka.iki.fi/2006/summercode/blog"></category>
   <pubDate>Fri, 14 Jul 2006 13:56 GMT</pubDate>
</item>
<item>
   <title>Report 4</title>
   <guid isPermaLink="false">report4</guid>
   <link>http://tuukka.iki.fi/2006/summercode/blog/report4.html</link>
   <description><![CDATA[

<p>
The passing week I've read up on the fundamentals of digital compositing as 
told by A. R. Smith himself. 
<a href="http://alvyray.com/Memos/MemosMicrosoft.htm">The series of memos</a> 
he wrote at Microsoft to share his previous experiences and history were a
good read. Even though I'm not working on the technical level of producing the 
illusion of translucency and sprites, it's good to know the theory, and 
concepts such as design space versus display space. I like  
<a href="http://en.wikipedia.org/wiki/RGBA_color_space">recording</a> the
historical pieces in Wikipedia where they will hopefully last.
</p>
<p>
Regarding the Firefox extension, I have written down something general 
on the topic of 
<a href="http://tuukka.iki.fi/2006/summercode/wiki/ExtendingFirefox">
extending Firefox</a>. The result of my tests this far is the 
<a href="http://kb.mozillazine.org/Getting_started_with_extension_development">
Hello world!</a> extension combined with this important result
of Googling:
</p>
<pre>
var basewindow = window
    .QueryInterface(Components.interfaces.nsIInterfaceRequestor)
    .getInterface(Components.interfaces.nsIWebNavigation)
    .QueryInterface(Components.interfaces.nsIDocShellTreeItem)
    .treeOwner
    .QueryInterface(Components.interfaces.nsIInterfaceRequestor)
    .getInterface(Components.interfaces.nsIBaseWindow);
</pre>
<p>
After that beautiful piece of Javascript using XPCOM, 
<code>basewindow</code> is a reference to 
<a href="http://xulplanet.com/references/xpcomref/ifaces/nsIBaseWindow.html">
nsIBaseWindow</a>, which I can use to move the top-level window with
<code>basewindow.setPosition(400,300);</code> Totally useless, except that
when I go over to C++, the same reference can give me the platform-specific 
native window, which seems to be in the form of <code>GdkWindow *</code>. It 
should be easy to set window properties from the extension, on the window,
for the Compiz plugin. We'll see just how easy.
</p>

]]></description>
   <category domain="http://tuukka.iki.fi/2006/summercode/blog"></category>
   <pubDate>Fri, 07 Jul 2006 13:06 GMT</pubDate>
</item>
<item>
   <title>Third report - first month past</title>
   <guid isPermaLink="false">report3</guid>
   <link>http://tuukka.iki.fi/2006/summercode/blog/report3.html</link>
   <description><![CDATA[

<p>
The first month and a third of the total work is past now. It has been
mostly like I expected: learning to hack a new project, studying its
composition, and making tests to verify understanding. I have been
obsessed with the Compiz code so that I did not look at Firefox
extensions yet. The month has also reminded me that many people
are against anything new.
</p>
<p>
The previous week went into more work with the Compiz
plugin. I learned how to draw anti-aliased lines in OpenGL, 
implemented some communication code, fixed a bug in sloppy focus
in <code>scale</code> and keyboard navigation in <code>whirl</code>.  
With respect to project milestones, I'm now able to composite windows of 
one app next to one another, and employ (fake) metadata. I haven't published 
this code yet. Compiz at freedesktop.org has been moved from CVS over to Git,
and I should do the same for my Darcs repository.
</p>
<p>
The preliminary list of 
<a href="http://tuukka.iki.fi/2006/summercode/wiki/UseCases">
use cases for the plugin</a> is in the wiki, and the line-drawing was a test 
for rendering connections between windows. 
One wild idea is using a window as a texture for
connections, but I don't have a good way to implement connections in 
OpenGL yet.
</p>
<p>
I was thinking that there are several Firefox extensions that can template 
the needed extension. Gnowsis has one, Beagle has one, and Gimmie is 
going to have one. Actually it seems like they don't deal with tabs yet, 
though. I'll first look into these previous implementations and after that try
to see whether Firefox has interfaces suitable for other kinds of
implementations. 
</p>

]]></description>
   <category domain="http://tuukka.iki.fi/2006/summercode/blog"></category>
   <pubDate>Thu, 06 Jul 2006 21:36 GMT</pubDate>
</item>
<item>
   <title>Second report</title>
   <guid isPermaLink="false">report2</guid>
   <link>http://tuukka.iki.fi/2006/summercode/blog/report2.html</link>
   <description><![CDATA[

<div style="float: right; margin-left: 1em;">
<a href="http://tuukka.iki.fi/2006/summercode/wiki/FrontPage?action=AttachFile&amp;do=view&amp;target=whirl-2006-06-21.png">
<img src="http://tuukka.iki.fi/2006/summercode/wiki/FrontPage?action=AttachFile&amp;do=get&amp;target=whirl-2006-06-21.png" alt="Prototype screenshot" width="300" height="225" border="0" />
</a>
<p>
<i>The plugin prototype.</i>
</p>
</div>
<p>
During the last ten days, I've familiarized myself with most of the Compiz 
codebase, created documentation about Compiz and my project 
<a href="http://tuukka.iki.fi/2006/summercode/wiki">in the wiki</a>, 
as well as implemented 
the user interface prototype as planned. I've also got some new ideas about 
Compiz and how my work relates to other projects. I've learned that 
<a href="http://www.beatniksoftware.com/gimmie/">Gimmie</a>'s 
<a href="http://beatnik.infogami.com/Plan_to_0.1">plan</a> contains an item 
on getting from the applications the resources that are visible in a window: 
sounds like a case for metadata to me! 
<a href="http://www.3d3r.com/bubbles">Bubbles</a> is an example of what
kind of things you can do with integration where it's possible: I want to
widen that scope.
</p>
<p>
It took me a while to get over some segmentation faults I was getting in 
my version of Compiz and stop wasting time in them (twenty hours I would say). 
First, window manager is awfully complicated software
because it has to do something sane in all the exceptional cases. Second, 
programs in C you need to run in a debugger, even if it should 
<a href="http://tuukka.iki.fi/2006/summercode/wiki/DevelopmentEnvironment#head-4a074a3b48a8bb89bffa19418c9f053dbc26e933">
take another computer</a>. Third, <code>cp</code> isn't enough when you re-compile, re-install, 
and re-start software, because it actually changes the target file instead of
creating a new one, which in case of <code>so</code> plugin files leads into...
segfaults in the previously running program.
</p>
<p>
So more wikipages is better. More blog posts would be better too. Also more 
version control repositories is good. It's so easy with current tools. I now
run 
<a href="http://www.darcs.net/DarcsWiki/Tailor"><code>tailor</code></a> to 
distribute the Compiz CVS in Darcs, with and without
my patches. I made some private repositories too, such as for these blog 
entries. There's even a 
<a href="http://tuukka.iki.fi/cgi-bin/darcs.cgi">web interface</a> to the 
<a href="http://tuukka.iki.fi/2006/summercode/darcs">public repositories</a> 
on the project site now.
</p>
<p>
That's about it for now. I heard from David, he's busy but promised to look
closer into my project later. I should communicate with freedesktop.org people
too, asking for anybody interested in specifying a general X window metadata 
communications protocol, and decide about the common interests with Gimmie.
I already sent a 
<a href="http://lists.freedesktop.org/archives/compiz/2006-June/000291.html">
message</a> to the Compiz mailing list about the documentation
work. Of the six bullet points in this months' 
<a href="http://tuukka.iki.fi/2006/summercode/wiki/AcceptedProjectProposal#implementation-plan">schedule</a>, 
the one I haven't
touched yet is Firefox extensions, so that's also something to expect from 
next week.
</p>

]]></description>
   <category domain="http://tuukka.iki.fi/2006/summercode/blog"></category>
   <pubDate>Thu, 22 Jun 2006 19:00 GMT</pubDate>
</item>
<item>
   <title>First report</title>
   <guid isPermaLink="false">report1</guid>
   <link>http://tuukka.iki.fi/2006/summercode/blog/report1.html</link>
   <description><![CDATA[

<p> 
During the last eleven days I have started the project, set up a
suitable development environment, prototyped a trivial communications
mechanism, had a closer look at Compiz code, and created a stub Compiz
plugin.  Nothing earth-shaking, but I'm within the schedule and it has
been good to lay proper foundations, think things through etc. Now I've
got more concrete ideas on how to proceed on the development process.
</p> 
<p> 
I'm following several related communication channels: 
</p>
<ul>
<li><a href="http://lists.freedesktop.org/mailman/listinfo/compiz">
Compiz mailing list</a></li> 
<li><a href="http://lists.freedesktop.org/mailman/listinfo/xorg"> 
X.org mailing list</a></li> 
<li><a href="http://compiz.blogspot.com/">Third-party Compiz blog</a></li> 
<li><a href="http://planet.freedesktop.org/">planet.freedesktop.org</a></li>
<li><a href="http://planet.gnome.org/">Planet GNOME</a></li> 
<li><a href="http://planet.debian.org/">Planet Debian</a></li> 
</ul>  
<p>
This takes about an hour a day. I wonder what I'm still missing. The
third-party community also has <a href="http://forums.compiz.net">web
forums</a> and <a href="http://wiki.compiz.net">a wiki</a>, but I hope I
hear about the developments on the mailing list or on the blog. 
</p> 
<p>
I used about six hours to set up my web server and wiki. On the other
hand, I've put over 10 hours to install, understand and configure
pyblosxom for this blog, and I'm not satisfied with it: web design is
not my specialty, and I would've wanted commenting and wiki markup
plugins to work. The default installation is incomplete, documentation
is lacking, there are no (up-to-date) deployment examples... But I hope
you can read this and leave comments, so I can forget this for now. 
</p>
<p>
Some of my experiences and plans are already available in 
<a href="http://tuukka.iki.fi/2006/summercode/wiki">the wiki</a>. I should
write more about how to create a new Compiz plugin, and about this project
in general.
</p>
<p>
I looked at the differences in the <code>scale</code> plugin between the 
offical version and the third-party community version. I think I'll start
my plugin as a copy of the current official version: change layout to
have the focused window big in the middle, add some criterion for 
"relatedness", make clicking re-layout instead of exiting the mode. This
should be most of the user interface for starters.
</p>
<p>
I haven't found good documentation on the ideas of the model in the 
X Window System: windows and their properties. I made a trivial 
prototype of a communications system (
<a href="http://tuukka.iki.fi/2006/summercode/darcs/tests/property_listener.py">
<code>property_listener.py</code></a> and 
<a href="http://tuukka.iki.fi/2006/summercode/darcs/tests/property_notifier.py">
<code>property_notifier.py</code></a>) mostly to gain some understanding on
what I could try to understand. I'll try to get some comments from the
experienced X hackers.
</p>

]]></description>
   <category domain="http://tuukka.iki.fi/2006/summercode/blog"></category>
   <pubDate>Sun, 11 Jun 2006 23:47 GMT</pubDate>
</item>
<item>
   <title>Project start</title>
   <guid isPermaLink="false">start</guid>
   <link>http://tuukka.iki.fi/2006/summercode/blog/start.html</link>
   <description><![CDATA[

<p>
My project has had a slow start. Apart from preparing the application and 
presenting it to the Summer Code Finland jury, I decided to postpone
the project to the summer months, in favour of my studies. I contacted 
some people such as David Reveman though and had discussions about the plans.
I also <em>had</em> to follow the developments around X.org, Xgl, Compiz, 
Kororaa live-cd, Dapper live-cd etc. I've been able to compile and run the 
whole Compiz stack on my Debian Sarge laptop in 
<a href="http://www.freedesktop.org/wiki/Software/jhbuild">jhbuild</a>, 
but never with proper-looking output. We'll see if I'm able to return to 
Debian Sarge during the summer or if it all will be life on the bleeding edge.
</p>
<p>
In May, I travelled to 
<a href="http://debconf.org/debconf6">DebConf6</a> to meet a lot of
fellows and to get a motivating vacation in Mexico. I got to see the 
X Window System hackers Jim Gettys and Keith Packard, and Keith gave the good
advice to try make a great demo :-) He also told the input redirection is not
going to be here yet &mdash; luckily I don't really need it, this just means
that for the moment windows can't accept input while my plugin is active 
(same goes for example to the Exposé-lookalike plugin called <i>Scale</i>).
</p>
<p>
After the great trip, returning to Finland wasn't easy at all (and I've read in
<a href="http://planet.debian.org/">Planet Debian</a> that it certainly wasn't 
difficult just for me. The week I had reserved for project preparations was
hardly enough for the jet lag! I managed to find and select a nice virtual 
server provider for the hosting though. A small project like mine wouldn't 
necessarily need a server, but being used to a modern development environment
with distributed version control and having bad experience about the performance
and reliability of project hosting sites, I opted for my own server that I
can configure to skip all the extra hoops.
</p>

]]></description>
   <category domain="http://tuukka.iki.fi/2006/summercode/blog"></category>
   <pubDate>Wed, 07 Jun 2006 14:41 GMT</pubDate>
</item>
<item>
   <title>Welcome!</title>
   <guid isPermaLink="false">welcome</guid>
   <link>http://tuukka.iki.fi/2006/summercode/blog/welcome.html</link>
   <description><![CDATA[

<p>
I'm going to blog here about <i>Semantic window compositing</i>, a 
free-software project that I got accepted into the
<a href="http://www.coss.fi/kesakoodi">Summer Code Finland</a> program 
(in Finnish; <i>Kesäkoodi</i>). I'm implementing a Compiz plugin that shows
related windows together, based on relationship information gathered from 
applications, including a Firefox extension. 
</p>
<p>
I'm glad I got accepted, because 
I don't think anyone else would try this soon otherwise: it's too low-level 
for Semantic Web researchers and too much academic nonsense for the free 
software community. I hope to prove by code that the idea makes sense!
</p>
<p>
I finally have this blog working (pyblosxom, still don't have commenting...). 
I also have a <a href="http://tuukka.iki.fi/2006/summercode/wiki">wiki</a> and 
Darcs version-control 
<a href="http://tuukka.iki.fi/2006/summercode/darcs">repositories for 
code</a> set up.
</p>
<p>
I appreciate any comments, you can leave them in the wiki at
<a href="http://tuukka.iki.fi/2006/summercode/wiki/VisitorComments">
VisitorComments</a> or send by email to 
<a href="mailto:Tuukka.Hastrup@iki.fi">Tuukka.Hastrup@iki.fi</a>.
</p>

]]></description>
   <category domain="http://tuukka.iki.fi/2006/summercode/blog"></category>
   <pubDate>Wed, 07 Jun 2006 13:27 GMT</pubDate>
</item>
</channel>
</rss>
