<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>ChaniBlog</title>
	<atom:link href="http://chani.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://chani.wordpress.com</link>
	<description>This insane ranting brought to you by eevil bananas and the number 3. Blaa!</description>
	<lastBuildDate>Sun, 29 Jan 2012 22:18:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='chani.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>ChaniBlog</title>
		<link>http://chani.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://chani.wordpress.com/osd.xml" title="ChaniBlog" />
	<atom:link rel='hub' href='http://chani.wordpress.com/?pushpress=hub'/>
		<item>
		<title>the easy way to import from git into svn</title>
		<link>http://chani.wordpress.com/2012/01/25/the-easy-way-to-import-from-git-into-svn/</link>
		<comments>http://chani.wordpress.com/2012/01/25/the-easy-way-to-import-from-git-into-svn/#comments</comments>
		<pubDate>Wed, 25 Jan 2012 16:44:24 +0000</pubDate>
		<dc:creator>Chani</dc:creator>
				<category><![CDATA[git]]></category>
		<category><![CDATA[planet]]></category>

		<guid isPermaLink="false">http://chani.wordpress.com/?p=744</guid>
		<description><![CDATA[At Eljakim (my new employer), work repositories are all svn (lowest common denominator), but several of us access them via git-svn. I&#8217;ve created a couple of new ones recently, but thanks to timezones, I never get an svn repo until I&#8217;ve already done a day&#8217;s work (in git). Getting those commits into svn without losing [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chani.wordpress.com&amp;blog=344550&amp;post=744&amp;subd=chani&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>At Eljakim (my new employer), work repositories are all svn (lowest common denominator), but several of us access them via git-svn. I&#8217;ve created a couple of new ones recently, but thanks to timezones, I never get an svn repo until I&#8217;ve already done a day&#8217;s work (in git). Getting those commits into svn without losing history is a simple thing when you know how &#8211; but when I googled, all I saw were strange and crazy hacks involving arcane commands I didn&#8217;t understand. So, here&#8217;s the easy way:</p>
<ul>
<li>Check out the svn repo</li>
<p><code>git svn clone https://url.to/svn-repo</code></p>
<li>Make a folder for your work (assuming it&#8217;s not already there)</li>
<p><code>cd svn-repo<br />
mkdir chani<br />
touch chani/temp<br />
git add chani/temp<br />
git ci<br />
git svn dcommit</code></p>
<li>Check out just that folder</li>
<p><code>cd ..<br />
git svn clone https://url.to/svn-repo/chani merge-repo</code></p>
<li>Connect it to the git repo</li>
<p><code>cd merge-repo<br />
git remote add mygit /path/to/git-repo<br />
git fetch mygit<br />
git checkout -b mymerge mygit/master</code></p>
<li>Rebase your work on top of svn</li>
<p><code>git rebase master<br />
git checkout master<br />
git merge --ff-only mymerge</code></p>
<li>Clean up the temp file (is thre a way to just commit an empty dir in git?)</li>
<p><code>git rm temp<br />
git ci</code></p>
<li>And send it to the server!</li>
<p><code>git svn dcommit</code></p>
<li>Switch back to the primary repo (optional)</li>
<p><code>cd ..<br />
rm -rf merge-repo<br />
cd svn-repo<br />
git svn rebase</code></p>
</ul>
<p>Of course, you don&#8217;t have to delete the merge repo, you could keep using it as your primary repo &#8211; but the way things are set up here I always end up wanting my checkout to be a level above that. :)</p>
<p><b>Edit:</b> Also, make sure you move or delete the original git repo once the commits are safely in svn. I spent half the day continuing to work in the pure git repo after blogging this&#8230; &gt;.&lt; oh well, at least I just had to copy&amp;paste off my blog to fix it. :P</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/chani.wordpress.com/744/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/chani.wordpress.com/744/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/chani.wordpress.com/744/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/chani.wordpress.com/744/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/chani.wordpress.com/744/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/chani.wordpress.com/744/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/chani.wordpress.com/744/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/chani.wordpress.com/744/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/chani.wordpress.com/744/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/chani.wordpress.com/744/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/chani.wordpress.com/744/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/chani.wordpress.com/744/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/chani.wordpress.com/744/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/chani.wordpress.com/744/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chani.wordpress.com&amp;blog=344550&amp;post=744&amp;subd=chani&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://chani.wordpress.com/2012/01/25/the-easy-way-to-import-from-git-into-svn/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ce4f09208c6fd65f361d079575a39741?s=96&#38;d=identicon&#38;r=PG" medium="image">
			<media:title type="html">Chani</media:title>
		</media:content>
	</item>
		<item>
		<title>parallel text &#8211; now with audio!</title>
		<link>http://chani.wordpress.com/2012/01/15/parallel-text-now-with-audio/</link>
		<comments>http://chani.wordpress.com/2012/01/15/parallel-text-now-with-audio/#comments</comments>
		<pubDate>Sun, 15 Jan 2012 20:29:17 +0000</pubDate>
		<dc:creator>Chani</dc:creator>
				<category><![CDATA[linguistics]]></category>
		<category><![CDATA[projects]]></category>

		<guid isPermaLink="false">http://chani.wordpress.com/?p=739</guid>
		<description><![CDATA[I&#8217;m back to language learning again &#8211; Dutch now, of course, so that I can understand my co-workers next time I visit. :) This means lots of reading and listening to dutch, not taking boring grammar courses. :) At this stage, I need the english readily available, and the best way to get that is [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chani.wordpress.com&amp;blog=344550&amp;post=739&amp;subd=chani&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m back to language learning again &#8211; Dutch now, of course, so that I can understand my co-workers next time I visit. :) This means lots of reading and listening to dutch, not taking boring grammar courses. :) At this stage, I need the english readily available, and the best way to get that is parallel texts (dutch on the left, english on the right, nicely lined up). There aren&#8217;t many parallel texts available to buy, and they&#8217;re usually sorta boring books, so one of pete&#8217;s polyglot friends created a script that will take any two digital books (wherever you happened to get them) and turn them into a big html file, nicely aligned by sentence.</p>
<p>It&#8217;s a great tool &#8211; however, it&#8217;s missing a third aspect: audio. Normally I&#8217;d get my listening practice from dubbed tv (I&#8217;ve watched all 7 seasons of voyager, and most of DS9, in german) but the dutch don&#8217;t care much for dubbing, so it&#8217;s hard to get materials. :( What we do have is dutch audiobooks to match some of the parallel texts I&#8217;m reading &#8211; good quality unabridged audio, too. The problem was, you needed to play the audio in another window, making it a PITA to pause or skip around, or go on to the next file, or find your position again after shutting it all down.</p>
<p>So, I integrated the audio into the parallel text itself. Thanks to the html5 audio tag, I have a little control widget floating at the top of the window; you can scroll the text or pause the audio without moving the mouse anywhere. It&#8217;s in the early stages right now, so there&#8217;s no synchronization between the text and audio, and it doesn&#8217;t remember your position (although session-restore does restore the text position). I have some ideas for that, though.. :) The most annoying issue, really, is that firefox doesn&#8217;t support mp3 and half the other browsers don&#8217;t support ogg; it seems the only one supporting both is konqueror. So, I&#8217;m running it in konq :)</p>
<p>If you&#8217;d like to try out the script, it&#8217;s fairly simple. I have it hardcoded to expect mp3 files at the moment, but I&#8217;ll add an option for that as soon as anyone wants it. All you need is <a href="http://chani.ca/parallel/audio.js">my audio.js file</a>, <a href="http://jquery.com/">jquery</a>, and these three lines in your html head:<br />
<code><br />
&lt;script src='jquery.js'&gt;&lt;/script&gt;<br />
&lt;script src='audio.js'&gt;&lt;/script&gt;<br />
&lt;script&gt;initAudio("path/to/mp3s/", N);&lt;/script&gt;<br />
</code><br />
where files are named 01.mp3, 02.mp3, etc (or 1.mp3, 2.mp3&#8230;) and N is the minimum number of digits in a file (yeah, all my files had leading zeros and I didn&#8217;t get around to removing them).</p>
<p>Patches and code review are very welcome &#8211; this is only the third (or second, depending on how you count) thing I&#8217;ve written with jquery. :)</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/chani.wordpress.com/739/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/chani.wordpress.com/739/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/chani.wordpress.com/739/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/chani.wordpress.com/739/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/chani.wordpress.com/739/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/chani.wordpress.com/739/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/chani.wordpress.com/739/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/chani.wordpress.com/739/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/chani.wordpress.com/739/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/chani.wordpress.com/739/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/chani.wordpress.com/739/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/chani.wordpress.com/739/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/chani.wordpress.com/739/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/chani.wordpress.com/739/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chani.wordpress.com&amp;blog=344550&amp;post=739&amp;subd=chani&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://chani.wordpress.com/2012/01/15/parallel-text-now-with-audio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ce4f09208c6fd65f361d079575a39741?s=96&#38;d=identicon&#38;r=PG" medium="image">
			<media:title type="html">Chani</media:title>
		</media:content>
	</item>
		<item>
		<title>Weddings and Work</title>
		<link>http://chani.wordpress.com/2012/01/06/weddings-and-work/</link>
		<comments>http://chani.wordpress.com/2012/01/06/weddings-and-work/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 07:48:39 +0000</pubDate>
		<dc:creator>Chani</dc:creator>
				<category><![CDATA[personal]]></category>
		<category><![CDATA[planet]]></category>
		<category><![CDATA[Real World]]></category>

		<guid isPermaLink="false">http://chani.wordpress.com/?p=733</guid>
		<description><![CDATA[I&#8217;m blogging from Utrecht today &#8211; for my first week of work. :) So far it&#8217;s pretty awesome; I wish I was here for more than just one week. [Edit: in case it's not clear, I'm going back home at the end of the week, NOT immigrating to the netherlands. ] The guyspeople at the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chani.wordpress.com&amp;blog=344550&amp;post=733&amp;subd=chani&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m blogging from Utrecht today &#8211; for my first week of work. :) So far it&#8217;s pretty awesome; I wish I was here for more than just one week. <em>[Edit: in case it's not clear, I'm going back home at the end of the week, NOT immigrating to the netherlands. ]</em> The <del>guys</del>people at the office are great, and I get to work on a cool project: making them an IDE (in qt, of course) for their web framework. :)</p>
<p>In an indirect way, I have KDE to thank for this job, actually. I met my boss at blauzahl and mek&#8217;s wedding. :) And the wedding was great, too. Lots of chaos, naturally, but somehow everything fell into place in the end. I still want the recipe for that pumpkin curry. ;) There are photos online, but I&#8217;m too lazy to link to them right now.</p>
<p>And now it seems like everyone&#8217;s getting married &#8211; friends, co-workers, even me. :) I&#8217;m engaged to pete now :) :) although we&#8217;ve not made any plans yet.</p>
<p>Lots has happened in the last few months. I&#8217;ve graduated too, of course. Over christmas I did a bit of work on <a href="http://quickgit.kde.org/?p=scratch%2Fchani%2Fcontextjournal.git&amp;a=summary">ContextJournal</a>, too; hopefully I&#8217;ll add some timetracking features to it soon (oh look, uncommitted code.. it seems I started already), but at the moment I&#8217;ve barely got time for anything but work. :) I have a language-related web project I ought to upload somewhere, too. maybe I&#8217;ll blog about that later &#8211; but not on planetkde, I suppose. If you want to hear more about what I&#8217;m up to, you&#8217;ll have to subscribe to my blog separately.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/chani.wordpress.com/733/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/chani.wordpress.com/733/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/chani.wordpress.com/733/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/chani.wordpress.com/733/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/chani.wordpress.com/733/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/chani.wordpress.com/733/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/chani.wordpress.com/733/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/chani.wordpress.com/733/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/chani.wordpress.com/733/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/chani.wordpress.com/733/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/chani.wordpress.com/733/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/chani.wordpress.com/733/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/chani.wordpress.com/733/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/chani.wordpress.com/733/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chani.wordpress.com&amp;blog=344550&amp;post=733&amp;subd=chani&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://chani.wordpress.com/2012/01/06/weddings-and-work/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ce4f09208c6fd65f361d079575a39741?s=96&#38;d=identicon&#38;r=PG" medium="image">
			<media:title type="html">Chani</media:title>
		</media:content>
	</item>
		<item>
		<title>Will Hack For Food</title>
		<link>http://chani.wordpress.com/2011/09/28/will-hack-for-food/</link>
		<comments>http://chani.wordpress.com/2011/09/28/will-hack-for-food/#comments</comments>
		<pubDate>Thu, 29 Sep 2011 01:24:01 +0000</pubDate>
		<dc:creator>Chani</dc:creator>
				<category><![CDATA[planet]]></category>

		<guid isPermaLink="false">http://chani.wordpress.com/?p=724</guid>
		<description><![CDATA[Update: I&#8217;ve accepted a job now. :) I suppose I ought to blog about it&#8230; So I&#8217;m graduating in December. Are you hiring for January? I assume if you&#8217;re reading my blog, you know that I&#8217;ve got plenty of experience hacking on KDE things. I care about my code, I get things done, and I [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chani.wordpress.com&amp;blog=344550&amp;post=724&amp;subd=chani&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><b>Update:</b> I&#8217;ve accepted a job now. :) I suppose I ought to blog about it&#8230;</p>
<p>So I&#8217;m graduating in December. Are you hiring for January?</p>
<p>I assume if you&#8217;re reading my blog, you know that I&#8217;ve got plenty of experience hacking on KDE things. I care about my code, I get things done, and I &lt;3 standards. :) Most of my experience is with C++ and Qt of course, but I learn fast; having an interesting project is more important to me than which tools to use. I&#8217;ve been dabbling in node.js and jquery this year, actually. That said, it would still be awesome to find a job where I can contribute to KDE.</p>
<p>I&#8217;d strongly prefer to stay in Vancouver, but Europe could be an option too (I&#8217;ve already got an EU passport). So if you&#8217;ve got an opportunity for me, <a href="http://chani.ca/r/resume.html">check out my resume</a> and <a href="mailto:chani@kde.org">send me an email</a>!<br />
<strong></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/chani.wordpress.com/724/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/chani.wordpress.com/724/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/chani.wordpress.com/724/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/chani.wordpress.com/724/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/chani.wordpress.com/724/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/chani.wordpress.com/724/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/chani.wordpress.com/724/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/chani.wordpress.com/724/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/chani.wordpress.com/724/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/chani.wordpress.com/724/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/chani.wordpress.com/724/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/chani.wordpress.com/724/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/chani.wordpress.com/724/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/chani.wordpress.com/724/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chani.wordpress.com&amp;blog=344550&amp;post=724&amp;subd=chani&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://chani.wordpress.com/2011/09/28/will-hack-for-food/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ce4f09208c6fd65f361d079575a39741?s=96&#38;d=identicon&#38;r=PG" medium="image">
			<media:title type="html">Chani</media:title>
		</media:content>
	</item>
		<item>
		<title>oh yeah&#8230; linuxcon&#8230;</title>
		<link>http://chani.wordpress.com/2011/09/03/oh-yeah-linuxcon/</link>
		<comments>http://chani.wordpress.com/2011/09/03/oh-yeah-linuxcon/#comments</comments>
		<pubDate>Sat, 03 Sep 2011 17:16:50 +0000</pubDate>
		<dc:creator>Chani</dc:creator>
				<category><![CDATA[planet]]></category>
		<category><![CDATA[Real World]]></category>

		<guid isPermaLink="false">http://chani.wordpress.com/?p=721</guid>
		<description><![CDATA[Riight, so I was at LinuxCon, uhm, two weeks ago. :) Two conferences in a row was a bit much, so I&#8217;ve been trying to enjoy my vacation since then (mostly). It was a great conference, though. :) At first I was feeling a bit out of place &#8211; the conference shirts didn&#8217;t come in [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chani.wordpress.com&amp;blog=344550&amp;post=721&amp;subd=chani&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Riight, so I was at LinuxCon, uhm, two weeks ago. :) Two conferences in a row was a bit much, so I&#8217;ve been trying to enjoy my vacation since then (mostly).</p>
<p>It was a great conference, though. :) At first I was feeling a bit out of place &#8211; the conference shirts didn&#8217;t come in ladies&#8217; sizes (boooo!!) and it seemed to be lots of server stuff and kernel hackers, not desktop or UI stuff. But I met some friends, saw contour/plasma-active/whatever being demoed at the LFNW booth, made some new friends, and pretty soon it felt like a regular conference. :) I don&#8217;t feel like talking much about the talks (I&#8217;d have to look at my notes for that, and besides, <a href="http://dafyddcrosby.com/2011/linuxcon-vancouver-2011/">Dafydd&#8217;s notes are far more detailed</a>) but the intro to kernel hacking was great &#8211; I learned a lot from it, and felt a wave of nostalgia when the guy talked about compiling your own kernel. ;)</p>
<p>The party on wednesday was particularly awesome &#8211; lots of people dressed up for the 20&#8242;s theme, and there was much dancing. Thursday I managed to get to four different parties &#8211; three of which were officially part of the conference. :) I remember having some interesting conversations&#8230; but I never heard what happened to that little multicolour lamp in the end. :P</p>
<p>I didn&#8217;t get a WebOS touchpad, unfortunately &#8211; I was hearing about them selling out during the conference (and my sympathies to the HP guy who heard the announcement right *after* his big talk) &#8211; but I was in the right place at the right time friday afternoon, when they gave away some nicely framed linux posters. :) So now I need to actually get tools to mount stuff on walls, because &#8220;got linux?&#8221; is still hiding in a corner.</p>
<p>At first it seemed like all the job offers would be for kernel hackers too, but after checking the job-wall and talking to people I found several hiring &#8211; even some local companies. yay! :) So, I&#8217;ve been polishing up my resume the last two weeks too.</p>
<p>Now somehow my vacation time has slipped away &#8211; I&#8217;m not even sure where it went. Doh. We&#8217;ve only had the one month of proper summer here (which I missed a third of for the desktop summit), and already the leaves are starting to fall, and a little chill is in the air&#8230; and, school starts in a few days. My last semester. Wow.<br />
Time flies&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/chani.wordpress.com/721/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/chani.wordpress.com/721/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/chani.wordpress.com/721/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/chani.wordpress.com/721/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/chani.wordpress.com/721/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/chani.wordpress.com/721/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/chani.wordpress.com/721/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/chani.wordpress.com/721/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/chani.wordpress.com/721/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/chani.wordpress.com/721/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/chani.wordpress.com/721/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/chani.wordpress.com/721/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/chani.wordpress.com/721/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/chani.wordpress.com/721/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chani.wordpress.com&amp;blog=344550&amp;post=721&amp;subd=chani&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://chani.wordpress.com/2011/09/03/oh-yeah-linuxcon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ce4f09208c6fd65f361d079575a39741?s=96&#38;d=identicon&#38;r=PG" medium="image">
			<media:title type="html">Chani</media:title>
		</media:content>
	</item>
		<item>
		<title>Desktop Summit 2011</title>
		<link>http://chani.wordpress.com/2011/08/18/desktop-summit-2011/</link>
		<comments>http://chani.wordpress.com/2011/08/18/desktop-summit-2011/#comments</comments>
		<pubDate>Thu, 18 Aug 2011 20:20:46 +0000</pubDate>
		<dc:creator>Chani</dc:creator>
				<category><![CDATA[KDE]]></category>
		<category><![CDATA[planet]]></category>
		<category><![CDATA[Real World]]></category>

		<guid isPermaLink="false">http://chani.wordpress.com/?p=717</guid>
		<description><![CDATA[A big thanks to Basyskom for the last-minute sponsorship &#8211; I&#8217;m really glad I made it to the desktop summit. It was awesome. :) The talks, the bofs, the parties &#8211; pretty much everything went well. Even the weather did give us a day or two of sun before going back to the scheduled rain [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chani.wordpress.com&amp;blog=344550&amp;post=717&amp;subd=chani&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A big thanks to Basyskom for the last-minute sponsorship &#8211; I&#8217;m really glad I made it to the desktop summit. It was awesome. :)</p>
<p>The talks, the bofs, the parties &#8211; pretty much everything went well. Even the weather did give us a day or two of sun before going back to the scheduled rain and wind. ;) I was happy to visit Berlin again too &#8211; I only had time to get to one of my favourite restaurants, but I came back with lots of delicious things in my suitcase.</p>
<p>There were lots of good talks &#8211; which was not entirely a good thing, because I had to make some hard choices at times. I ended up in more community than tech talks &#8211; good stuff about how to do outreach to get more contributors and more diversity of contributors (which means not just more women, but more cultural diversity too). I learnt more about wayland and accessibility too (yay qt-at-spi!), and discovered that &#8220;session&#8221; is an ambiguous word &#8211; there are all sorts of lowlevel sessiony things that have nothing to do with documents or windows or tabs, and systemd is trying to clean them up. Some of the keynotes were fascinating &#8211; my favourites were the design talk and the toaster talk. :) Oh, and did you know you can use nepomuk to search within movies? OMGWTFBBQ.</p>
<p>Oh yeah, and I did a lightning talk too, explaining why we need to replace XSMP and advertising the bof session. When I asked how many people hated XSMP, there were far more hands than I&#8217;d expected. I didn&#8217;t know so many people knew what it was!</p>
<p>At sunday&#8217;s party I was surprised to discover how many geeks love karaoke. There was a great crowd, and about a one-hour wait for songs! Despite that, there was also dancing in the other room. :) I hear there was dancing tuesday night too &#8211; sadly I had a stomach ache that night. Later in the week I dragged a few people out for a smaller karaoke session with some local friends. I love having a private karaoke room; there&#8217;s no strangers taking up mic time, you get to sing lots, and it&#8217;s much easier to be completely silly about it. :)</p>
<p>The bof sessions started on wednesday &#8211; and I started it off with wonderful, wonderful sleep. After getting caught up on that, my stomach was a lot less mad at me, and I spent the afternoon in the intel appup session. Yay, tablet! :) My new exopc is sitting on my desk waiting for me to start hacking on it.</p>
<p>Thursday afternoon was my sessions bof. Unfortunately some people got lost on the way back from the daytrip and didn&#8217;t make it, but it turned out pretty well anyways. I knew there was far too much material to cover in one bof session, even a two-hour session, so I tried to keep the conversation on core matters&#8230; after a while, we discovered that there really is a lot of overlap between zeitgeist and session management &#8211; the apps that are starting to use it are sending it a lot of the info we need &#8211; and zeitgeist is gaining traction, so we may team up and just make some zeitgeist extensions to collect the session info. This would make it easier on app devs &#8211; instead of giving similar information to two systems, they&#8217;d just report it once and be done. :) When I get some free time I&#8217;ll go over the meeting notes properly and start looking into this more.</p>
<p>There were lots of other fun things going on &#8211; football, Jos&#8217; cooking, amusing attempts to get rid of the excess summit stickers &#8211; but I don&#8217;t have much time to write, because I&#8217;m at LinuxCon right now. :) It&#8217;s nice when a conference is only 20 minutes from my apartment. Maybe I&#8217;ll blog about it next week &#8211; it&#8217;s been pretty good so far. :)</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/chani.wordpress.com/717/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/chani.wordpress.com/717/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/chani.wordpress.com/717/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/chani.wordpress.com/717/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/chani.wordpress.com/717/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/chani.wordpress.com/717/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/chani.wordpress.com/717/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/chani.wordpress.com/717/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/chani.wordpress.com/717/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/chani.wordpress.com/717/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/chani.wordpress.com/717/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/chani.wordpress.com/717/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/chani.wordpress.com/717/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/chani.wordpress.com/717/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chani.wordpress.com&amp;blog=344550&amp;post=717&amp;subd=chani&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://chani.wordpress.com/2011/08/18/desktop-summit-2011/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ce4f09208c6fd65f361d079575a39741?s=96&#38;d=identicon&#38;r=PG" medium="image">
			<media:title type="html">Chani</media:title>
		</media:content>
	</item>
		<item>
		<title>bouncing email</title>
		<link>http://chani.wordpress.com/2011/08/15/bouncing-email/</link>
		<comments>http://chani.wordpress.com/2011/08/15/bouncing-email/#comments</comments>
		<pubDate>Mon, 15 Aug 2011 23:10:58 +0000</pubDate>
		<dc:creator>Chani</dc:creator>
				<category><![CDATA[KDE]]></category>
		<category><![CDATA[planet]]></category>

		<guid isPermaLink="false">http://chani.wordpress.com/?p=715</guid>
		<description><![CDATA[Update: The sysadmins have fixed the bug, and are keeping an eye on it now, so it&#8217;s safe to use that address again. :) I&#8217;ve discovered that my kde.org email account has been randomly bouncing some email, for at least the last year. Meep. I&#8217;m going to go file a bugreport now, but in the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chani.wordpress.com&amp;blog=344550&amp;post=715&amp;subd=chani&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Update:</strong> The sysadmins have fixed the bug, and are keeping an eye on it now, so it&#8217;s safe to use that address again. :)</p>
<p>I&#8217;ve discovered that my kde.org email account has been randomly bouncing some email, for at least the last year. Meep. I&#8217;m going to go file a bugreport now, but in the meantime, if emailing me has failed, try again. Or use my gmail address (chanika).</p>
<p>Oh, and the desktop summit was awesome, I&#8217;ll write about it sooner or later :)</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/chani.wordpress.com/715/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/chani.wordpress.com/715/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/chani.wordpress.com/715/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/chani.wordpress.com/715/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/chani.wordpress.com/715/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/chani.wordpress.com/715/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/chani.wordpress.com/715/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/chani.wordpress.com/715/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/chani.wordpress.com/715/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/chani.wordpress.com/715/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/chani.wordpress.com/715/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/chani.wordpress.com/715/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/chani.wordpress.com/715/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/chani.wordpress.com/715/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chani.wordpress.com&amp;blog=344550&amp;post=715&amp;subd=chani&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://chani.wordpress.com/2011/08/15/bouncing-email/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ce4f09208c6fd65f361d079575a39741?s=96&#38;d=identicon&#38;r=PG" medium="image">
			<media:title type="html">Chani</media:title>
		</media:content>
	</item>
		<item>
		<title>Beyond Activities: Cross-Device Sessions</title>
		<link>http://chani.wordpress.com/2011/08/01/beyond-activities-cross-device-sessions/</link>
		<comments>http://chani.wordpress.com/2011/08/01/beyond-activities-cross-device-sessions/#comments</comments>
		<pubDate>Tue, 02 Aug 2011 00:13:55 +0000</pubDate>
		<dc:creator>Chani</dc:creator>
				<category><![CDATA[activities]]></category>
		<category><![CDATA[KDE]]></category>
		<category><![CDATA[planet]]></category>

		<guid isPermaLink="false">http://chani.wordpress.com/?p=706</guid>
		<description><![CDATA[Update: I&#8217;ve scheduled the BoF session for thursday, 14:00 in room 1.404/1. I&#8217;ll pop into the systemd bof on wednesday, too. Update 2: It turns out systemd is solving an entirely different problem. :) there&#8217;s no overlap between it and sessions-as-in-restoring-windows. I&#8217;ve been trying to write this blog post for months, and always hitting writers&#8217; [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chani.wordpress.com&amp;blog=344550&amp;post=706&amp;subd=chani&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Update:</strong> I&#8217;ve scheduled <a href="http://wiki.desktopsummit.org/Workshops_&amp;_BoFs/2011/Death_to_XSMP!">the BoF session</a> for thursday, 14:00 in room 1.404/1. I&#8217;ll pop into the systemd bof on wednesday, too.</p>
<p><strong>Update 2:</strong> It turns out systemd is solving an entirely different problem. :) there&#8217;s no overlap between it and sessions-as-in-restoring-windows. </p>
<p>I&#8217;ve been trying to write this blog post for months, and always hitting writers&#8217; block or other distractions. So, screw it &#8211; I&#8217;m just going to start writing and see what comes out. :)</p>
<p>What this is about, is sessions, and XSMP, and wayland. Activities use XSMP, the X Session Management Protocol, to save and restore groups of windows. Before that, it was only used for the login session. It&#8217;s actually a better protocol than people give it credit for, and it served well for a few decades &#8211; but times have changed. If we want to move forward and do awesome things like sharing sessions between devices, we need something new. Even Activities as they are now push the limits of XSMP &#8211; there are a few ugly little hacks hiding in there that I&#8217;d prefer not to have. :)</p>
<p>Now, the key here is, if we&#8217;re going to replace an ancient-but-reliable technology with something new, we want the new one to be not just better but a <b>lot</b> better. Something worth switching to. Small issues like XSMP&#8217;s lack of autosave will be easy to correct; the big one is that it&#8217;s process-based. Session keys are handed out per-process, and when things get restored, they&#8217;re done by calling that particular binary with the session key as an argument. This is the source of two major pains; the first is that when a process has multiple windows (like konsole), you can&#8217;t properly put those windows in different sessions &#8211; so Activities have to do ugly things to hide this. The second, and larger problem, is that it&#8217;s ridiculously non-portable and opaque. What if the program&#8217;s binary gets moved elsewhere? what if the user switches to a competing app? And of course, their phone is not going to have the same programs installed as their laptop! Even if they have a meego phone and use Calligra on all their devices, the binary for the phone will be named differently. :P</p>
<p>So, what do we do? We make it resource-based! :) Store data in a standard place and standard format, so that the session manager, instead of seeing <em>&#8220;this session had /usr/bin/firefox, /usr/bin/konsole and /usr/bin/okular&#8221;</em> sees <em>&#8220;this session has web pages X Y and Z, which this device last used firefox to open, with X and Y in the same window; two terminals, which this device last used konsole for; and foo.pdf on page 3, which this device last used okular for&#8221;</em>. Then if okular isn&#8217;t available it can ask the system for a program that handles pdf, and when the user sends the session to their phone, it doesn&#8217;t matter that there&#8217;s a different pdf reader, or even that the phone browser doesn&#8217;t support tabs. Not only that, but if there were 20 urls open instead of three, the phone could go <em>&#8220;whoa, that&#8217;s a bit much; I&#8217;ll just open the first three and display links to the rest somewhere.&#8221;</em> And I could go &#8220;hmm, when the heck did I create an activity called &#8216;shambles&#8217;? wtf is in it?&#8221; and get an answer without actually having to load it. ;)</p>
<p>Another side of this is, well, the small stuff does add up. I just heard that OSX gained some decent session support; they&#8217;ve taken lessons from the iPhone and applied them to the desktop, making a system where it doesn&#8217;t matter if an app crashes &#8211; the OS may even kill it whenever it pleases &#8211; the session support is so good it&#8217;ll come back just as it was. I&#8217;d love to see that sort of solid session support in linux; KDE apps with XSMP are pretty good right now, but they could be better (and an autosaving protocol would go a long way towards fixing that).</p>
<p>Now, replacing XSMP isn&#8217;t an entirely new idea. Gnome people have been sick of XSMP for quite a while, although I don&#8217;t think anyone stepped forward with an alternative (and for their purposes, it does work, anyways). When I talked to the Nepomuk guys many months ago, about cross-device sessions, they had already thought of it &#8211; but decided the political side of it was too hard. They might still be right &#8211; we&#8217;ll see. But it&#8217;s worth a try. :)</p>
<p>So, what is the hard part, you ask? It&#8217;s the reason I stuck with XSMP for activities: a new protocol means persuading apps to <b>support</b> said protocol. XSMP&#8217;s support, while patchy in places, is at least decently widespread and un-controversial. A new protocol&#8230; well, I&#8217;m fairly sure KDE would embrace it, but I want it to be a part of gtk apps too, and pure qt apps, and meego apps, and even the weird proprietary fringe ones (like maple) someday. <b>That</b> is a challenge. :)</p>
<p>So how do we meet this challenge? First, we explain the benefits it brings &#8211; I hope I&#8217;ve done that well enough above. Second, we offer app developers a well-designed, easy-to-use API that&#8217;s had some feedback from actual app developers; just the other day I saw someone on IRC complaining about XSMP being confusing. :) Third, once we&#8217;ve got enough support to know this is worth trying, we show them a solid implementation that works (without any fatal bugs). Seeing is believing, right? Nobody wants to spend precious time writing code for a system before it exists, so we get the minimal feature set done, port a couple of apps, and show it off. Fourth &#8211; the secret weapon. ;) Wayland is gaining popularity, and when apps start porting to it, they may as well port to this too, right? Wayland doesn&#8217;t have any session protocol of its own, so this could be it. :)</p>
<p>So, who&#8217;s with me? :) The desktop summit is only a few days away, and surprisingly I will make it (yay!) so I&#8217;d love to have a conversation about this there. It&#8217;s the perfect place, after all, for something that aims to be cross-device, cross-desktop and all.</p>
<p><b>TL;DR: a resource-based session protocol would let us do really awesome things, so it&#8217;s worth the effort to replace XSMP</b></p>
<p>Now, I&#8217;m going to go into technical details below the cut (I have enough material to write a paper on this but for that damn writer&#8217;s block&#8230;)<br />
<span id="more-706"></span></p>
<p>&#8230;</p>
<p>So, technical details. right. What actually needs to be implemented? What API might it need?<br />
There are three parts to it, all interlocking. First, the common storage area. This can actually come before the rest, because XSMP doesn&#8217;t say anything about how session data is stored; apps can start using it and still be started by an XSMP server, which is great for the transition time (it&#8217;ll be long. nothing this big changes fast).</p>
<p>Anyways&#8230; I haven&#8217;t done much research on storage. It could be stored in nepomuk/tracker/zeitgeist, or in text files like kconfig, or even in a registry (eek) &#8211; all that matters is that the system does its job well, and that all the apps on the device are using the same one. It might turn out that different backends are better for different devices &#8211; I don&#8217;t know, and I would love to hear information about the pros and cons of various approaches. Apps will be updating certain data on a regular basis &#8211; page number, position in a movie, etc &#8211; so I&#8217;d like numbers on efficiency too.</p>
<p>I do at least have a rough sketch for the format of the data, though. The vast majority of resources will be a URI of some kind (usually local or http) and a position within the document. the uri becomes the key, the location one of the fields. other fields will be the window it&#8217;s in (after all, windows are still the unit that window managers work with, and their position and size is important session data too), the program last used to open it, custom data fields for that program (preferably kept to a minimum), and perhaps data from other devices (either to help with decisions where this device is unsure, or in case the session is transported to a third device where that info could matter). Session data for windows would be written out, perhaps by the window manager&#8230; Really I need a whiteboard and other programmers to come up with good data structures, so I want to go over this in berlin, and I&#8217;m sure it&#8217;ll change once again during implementation. :) The most important thing is just to settle on some resource-based structure that works.</p>
<p>Second is the session manager. This is a program &#8211; likely a daemon, but not necessarily &#8211; that loads up the apps when a session is opened, and tells them to close when appropriate. If there is a user-interaction feature (<em>&#8220;would you like to save this document?&#8221;</em>), it would handle that too. This is what ksm-server currently does for XSMP. It&#8217;s actually not that much work, mostly reading and writing config files, but it&#8217;s complicated by the apps&#8217; ability to request user interaction (stalling session-close) or even cancel it entirely.</p>
<p>Third is the application API, the part most developers will see. I want this to be <b>good</b>. I&#8217;m also wondering about backwards and forwards compatibility here; the XSMP protocol hasn&#8217;t changed in forever, but a new protocol will have changes, if only to fix bugs or correct design mistakes. Most apps will be sharing the same dynamically linked library, but should we worry about statically-linked ones? Hopefully we can come up with a design that is fairly robust against such cases. I&#8217;m reminded of dbus here; it specifies its wire format, which has the advantage that all apps speak the same language forever, but the disadvantage that they can never improve that format ever. :/</p>
<p>Speaking of dbus, one of the things I&#8217;m wondering is, how should the session manager and apps communicate? I think the storage should be written to as directly as possible, for efficiency (write-write conflicts will be exceedingly rare, if they happen at all, and I expect the same for read-write conflicts). We might want some sort of choking if the filesystem&#8217;s buffer&#8217;s aren&#8217;t enough; as a worst-case scenario, consider a dozen apps each updating their state every 10 seconds, out of sync; that could be more than a write a second. Hopefully there won&#8217;t be more than one or two apps doing regular updates like that (you can only watch one movie at a time, and even when reading there&#8217;ll only be one source of background music) but it&#8217;s something to consider later.</p>
<p>Whoops, I got side-tracked; I was meaning to talk about communication with the session manager. While upgrading ksmserver and kwin to support sub-sessions (aka activities), I discovered the hell of dbus timeouts. I&#8217;d rather not go down that road again, but I&#8217;m not aware of the alternatives. XSMP uses some ancient protocol called ICE, which seems to have close ties to X11; it&#8217;s not the only protocol with that name, though, so googling is a bit of a pain. In any case, I&#8217;d like to sever the ties to X11 so that this can be easily used with wayland too &#8211; what do they use for communication?</p>
<p>Wandering onwards (my wrist&#8217;s getting a bit tired now despite breaks), the api offered is partially defined by the features offered. I think that the first version should omit all but the most vital features; some, like user-interaction and cancellation of the session-close, I&#8217;m leaning towards abolishing altogether. This is 2011, not 1990; apps ought to be capable of behaving sensibly when it&#8217;s time to quit. Even kate now has swap files to recover data after a crash; those can be used just as well to restore a session. The only downside is they&#8217;re not so portable&#8230; that&#8217;s a problem for later, I think. :) Heck, I might even leave out the ability to put a window in N sessions at once; it does so complicate things, I&#8217;m not sure if it&#8217;s actually a worthwhile feature in activities, and it <em>would</em> still be possible to have the feature in activities by creating extra sessions under the hood.</p>
<p>So, what features are really needed?<br />
-either the app or the window manager ought to record the size and position of windows. If it ends up being done in the app, it should be entirely automatic, within the library, not something the app developer needs to fuss with at all.<br />
-applications need to record that they&#8217;re displaying a resource in a certain window.<br />
-they need to record that they&#8217;ve <em>stopped</em> displaying it too. :)<br />
-either the window or resource needs to be associated with a particular session when it shows up.<br />
-apps need to be told when to close.<br />
-apps need to be able to restore themselves from session data.<br />
-apps need a method to store custom session data</p>
<p>That&#8217;s just the most basic of basics, mirroring XSMP&#8217;s abilities. To make the thing actually cool, we&#8217;ll also need to:<br />
-tell the app exactly which windows to close, in case it&#8217;s spread across sessions<br />
-tell the app whether it should restore the whole session or just a part of it<br />
-allow and encourage apps to store common, portable session data (like the position in a document) in a standard place that any app can use</p>
<p>I&#8217;m sure I&#8217;ve missed a thing or two, but you get the idea. :)</p>
<p>Actually, there&#8217;s a fourth part to this, too: the device sync. How will two devices share their session data? Sending a list of resources and associated data sounds easy, but there are plenty of details to figure out &#8211; which resources need copying to the other device, how to manage the change of URI (a file at /home/chani/Documents/foo.pdf on my laptop will end up somewhere else on a phone), whether to try and resolve conflicts&#8230; :) I&#8217;m pretty sure there are people who have given this part more thought than me, though. And as a bonus, the sync code will come in handy for migration should a distro change to a vastly different storage backend someday.</p>
<p>All this is going to take time to implement, and even more time to be adopted. It&#8217;s a multi-year project. But if the people want it to happen, it can be done. :)</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/chani.wordpress.com/706/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/chani.wordpress.com/706/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/chani.wordpress.com/706/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/chani.wordpress.com/706/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/chani.wordpress.com/706/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/chani.wordpress.com/706/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/chani.wordpress.com/706/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/chani.wordpress.com/706/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/chani.wordpress.com/706/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/chani.wordpress.com/706/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/chani.wordpress.com/706/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/chani.wordpress.com/706/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/chani.wordpress.com/706/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/chani.wordpress.com/706/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chani.wordpress.com&amp;blog=344550&amp;post=706&amp;subd=chani&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://chani.wordpress.com/2011/08/01/beyond-activities-cross-device-sessions/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ce4f09208c6fd65f361d079575a39741?s=96&#38;d=identicon&#38;r=PG" medium="image">
			<media:title type="html">Chani</media:title>
		</media:content>
	</item>
		<item>
		<title>ContextJournal: an activity-aware app</title>
		<link>http://chani.wordpress.com/2011/03/19/contextjournal-an-activity-aware-app/</link>
		<comments>http://chani.wordpress.com/2011/03/19/contextjournal-an-activity-aware-app/#comments</comments>
		<pubDate>Sat, 19 Mar 2011 13:17:12 +0000</pubDate>
		<dc:creator>Chani</dc:creator>
				<category><![CDATA[activities]]></category>
		<category><![CDATA[KDE]]></category>
		<category><![CDATA[planet]]></category>

		<guid isPermaLink="false">http://chani.wordpress.com/?p=700</guid>
		<description><![CDATA[Well, I haven&#8217;t blogged in quite a while, have I? I almost blogged about fosdem, but I was too busy having fun there. ;) I, well, I&#8217;m actually on hiatus at the moment. That was (and is) an incredibly hard decision, but&#8230; well, it wasn&#8217;t fun any more, it felt more like a job. And [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chani.wordpress.com&amp;blog=344550&amp;post=700&amp;subd=chani&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Well, I haven&#8217;t blogged in quite a while, have I? I almost blogged about fosdem, but I was too busy having fun there. ;)</p>
<p>I, well, I&#8217;m actually on hiatus at the moment. That was (and is) an incredibly hard decision, but&#8230; well, it wasn&#8217;t fun any more, it felt more like a job. And when someone&#8217;s asshat regressions cause you physical pain, it&#8217;s time to take a step back. I&#8217;m sure Ivan and Marco will fix up whatever bugs are found, and add new awesome activities stuff too. :) I miss lots of KDE people (hugs!!!) but there&#8217;s some stuff I need to do for myself right now.</p>
<p>Anyways, that&#8217;s not what I&#8217;m here to talk about. There&#8217;s a little project I did in january that I never got around to blogging about. It&#8217;s part personal tool, part experimental sandbox. I suck at names, so I called it ContextJournal. :)</p>
<p><img src="http://chani.ca/sshots/cj.png" /></p>
<p>What is this? it&#8217;s a neat little app that automates away the tedium of my personal journal system. Running KDE trunk, and having a strange knack for hitting freaky PIM bugs, I end up with my most important things stored in plain text. It&#8217;s grown into quite a system, one file per day with ascii todolists and stuff &#8211; add to that the need to do timetracking on one project, and, well, a bit of automation does wonders. :)</p>
<p>Contextjournal allows me to keep the plaintext system &#8211; if I trash my kde or X I can still go back to using vim &#8211; but it adds improved organization, and context awareness (this is where the cool experimental bit comes in). It timestamps every line, and keeps a separate journal for each activity &#8211; naturally it switches when I switch activities. :) Once the journal part was stable I added the todolist on the right, which is controlled by irc-like commands. The commands are logged too, so finding out when I finished something is just a matter of grepping. :) Oh, and it starts on all activities by default, since it&#8217;s designed to be a systemwide thing.</p>
<p>Obviously the program isn&#8217;t much use as a journal to anybody but me. A normal person would probably want it to link into akonadi and/or nepomuk, and share the data with other apps, so that the todolist shows up in korganizer&#8217;s calendar n&#8217;stuff. :) However, it is useful as example code: it shows how to make an app activity-aware. It&#8217;s actually a pure-qt app at the moment too; I wanted to show that you don&#8217;t need any kde dependencies to write activity-aware code (*cough*firefox*cough*). I also wanted to have a testbed for some strange XSMP problems that only qt &#8211; not kde &#8211; has. I&#8217;m still not sure whether the bugs lie in Qt or in kde&#8217;s xsmp handling or in kwin, but my bet is on QApplication. :/</p>
<p>I have plans to add other shiny things, like an overview screen (or just &#8220;what now?&#8221; suggestions from the todolists) and grouped todos, but something distracted me and I haven&#8217;t gotten around to it yet. Maybe when I don&#8217;t have any essays to write. :P</p>
<p>Anyways, <a href="http://quickgit.kde.org/?p=scratch%2Fchani%2Fcontextjournal.git&amp;a=summary">the ContextJournal source is here</a>; if you&#8217;re thinking about adding activity support to something, check it out. And keep in mind that by now, the API for working with activities is probably in kdelibs; it&#8217;s a lot more convenient than having to make all those dbus calls yourself. :)</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/chani.wordpress.com/700/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/chani.wordpress.com/700/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/chani.wordpress.com/700/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/chani.wordpress.com/700/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/chani.wordpress.com/700/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/chani.wordpress.com/700/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/chani.wordpress.com/700/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/chani.wordpress.com/700/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/chani.wordpress.com/700/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/chani.wordpress.com/700/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/chani.wordpress.com/700/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/chani.wordpress.com/700/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/chani.wordpress.com/700/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/chani.wordpress.com/700/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chani.wordpress.com&amp;blog=344550&amp;post=700&amp;subd=chani&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://chani.wordpress.com/2011/03/19/contextjournal-an-activity-aware-app/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ce4f09208c6fd65f361d079575a39741?s=96&#38;d=identicon&#38;r=PG" medium="image">
			<media:title type="html">Chani</media:title>
		</media:content>

		<media:content url="http://chani.ca/sshots/cj.png" medium="image" />
	</item>
		<item>
		<title>Activities in Action</title>
		<link>http://chani.wordpress.com/2011/01/09/activities-in-action/</link>
		<comments>http://chani.wordpress.com/2011/01/09/activities-in-action/#comments</comments>
		<pubDate>Sun, 09 Jan 2011 23:33:58 +0000</pubDate>
		<dc:creator>Chani</dc:creator>
				<category><![CDATA[activities]]></category>
		<category><![CDATA[KDE]]></category>
		<category><![CDATA[planet]]></category>

		<guid isPermaLink="false">http://chani.wordpress.com/?p=694</guid>
		<description><![CDATA[It&#8217;s screencast time again! :) For this one, I focused on how I, personally, use activities. I got the impression that showing real-world usage might make it a bit clearer what I&#8217;m trying to do here. :) You can probably hear me getting a bit tired at the end&#8230; I had to reboot twice and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chani.wordpress.com&amp;blog=344550&amp;post=694&amp;subd=chani&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s screencast time again! :)</p>
<p>For this one, I focused on how I, personally, use activities. I got the impression that showing real-world usage might make it a bit clearer what I&#8217;m trying to do here. :)</p>
<p>You can probably hear me getting a bit tired at the end&#8230; I had to reboot twice and fix my damn volume control before finally getting that one, so yes, I *am* tired. :P</p>
<embed src="http://blip.tv/play/AYKay2cA" type="application/x-shockwave-flash" width="480" height="300" allowscriptaccess="never" allowfullscreen="true"></embed>
<p>oh, and <a href="http://kde-apps.org/content/show.php/Activity+Manager+Plasmoid?content=136278">here&#8217;s the activity manager plasmoid I mentioned</a>. :)</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/chani.wordpress.com/694/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/chani.wordpress.com/694/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/chani.wordpress.com/694/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/chani.wordpress.com/694/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/chani.wordpress.com/694/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/chani.wordpress.com/694/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/chani.wordpress.com/694/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/chani.wordpress.com/694/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/chani.wordpress.com/694/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/chani.wordpress.com/694/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/chani.wordpress.com/694/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/chani.wordpress.com/694/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/chani.wordpress.com/694/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/chani.wordpress.com/694/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=chani.wordpress.com&amp;blog=344550&amp;post=694&amp;subd=chani&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://chani.wordpress.com/2011/01/09/activities-in-action/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ce4f09208c6fd65f361d079575a39741?s=96&#38;d=identicon&#38;r=PG" medium="image">
			<media:title type="html">Chani</media:title>
		</media:content>
	</item>
	</channel>
</rss>
