<?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>Murray&#039;s Blog</title>
	<atom:link href="http://www.murrayc.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.murrayc.com</link>
	<description>This is the web site of Murray Cumming, containing mostly programming explanations and blatant self-promotion.</description>
	<lastBuildDate>Tue, 07 May 2013 13:49:15 +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>gtkmm 3.8</title>
		<link>http://www.murrayc.com/permalink/2013/05/07/gtkmm-3-8/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=gtkmm-3-8</link>
		<comments>http://www.murrayc.com/permalink/2013/05/07/gtkmm-3-8/#comments</comments>
		<pubDate>Tue, 07 May 2013 13:49:15 +0000</pubDate>
		<dc:creator>murrayc</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Gnome]]></category>
		<category><![CDATA[gtkmm]]></category>

		<guid isPermaLink="false">http://www.murrayc.com/?p=1905</guid>
		<description><![CDATA[I didn&#8217;t get around to blogging about gtkmm 3.8 when I released it last month, partly because we had to fix a crasher bug and do a gtkmm .1 release before people noticed. Anyway, just a little while after GNOME 3.8 was released, we managed to release gtkmm 3.8 and glibmm 2.36. There is quite [...]]]></description>
				<content:encoded><![CDATA[<!-- AdSense Now! V3.23 -->
<!-- Post[count: 2] -->
<div class="adsense adsense-leadin" style="float:right;margin: 12px;"><script type="text/javascript"><!--
google_ad_client = "ca-pub-7781900730613488";
/* murrayc.com */
google_ad_slot = "2470604810";
google_ad_width = 160;
google_ad_height = 600;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div><p>I didn&#8217;t get around to blogging about gtkmm 3.8 when I released it last month, partly because we had to fix a crasher bug and do a gtkmm .1 release before people noticed.</p>
<p>Anyway, just a little while after GNOME 3.8 was released, we managed to release <a href="https://mail.gnome.org/archives/gnome-announce-list/2013-April/msg00012.html">gtkmm 3.8</a> and <a href="https://mail.gnome.org/archives/gnome-announce-list/2013-April/msg00026.html">glibmm 2.36</a>. There is quite a bit of work in these, almost all by José Alburquerque and Kjell Ahlstedt, as well as the usual few days of last-minute work by me to wrap remaining new API.</p>
<p>I spend very little time on glibmm and gtkmm these days, and don&#8217;t have much motivation to change that.</p>
<p>There&#8217;s also a change that we expect in glib 2.38 that will <a href="https://bugzilla.gnome.org/show_bug.cgi?id=697229">break</a> many installed applications that use gtkmm. We successfully begged the glib developers to add a special case for us in glib 2.36, but we have not found any way to avoid this for 2.38. So far our best option seems to be to do a new parallel-installed gtkmm (and glibmm) ABI, leaving the old (broken with glib 2.38) one behind, at least allowing applications to be changed slightly and then rebuilt.</p>
<p>Personally, I have no great incentive to go through that pain.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.murrayc.com/permalink/2013/05/07/gtkmm-3-8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>More Maliit Keyboard Improvements: QtQuick2</title>
		<link>http://www.murrayc.com/permalink/2013/04/02/more-maliit-keyboard-improvements-qtquick2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=more-maliit-keyboard-improvements-qtquick2</link>
		<comments>http://www.murrayc.com/permalink/2013/04/02/more-maliit-keyboard-improvements-qtquick2/#comments</comments>
		<pubDate>Tue, 02 Apr 2013 11:51:06 +0000</pubDate>
		<dc:creator>murrayc</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[canonical]]></category>
		<category><![CDATA[Gnome]]></category>
		<category><![CDATA[maliit]]></category>
		<category><![CDATA[Openismus]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[wayland]]></category>

		<guid isPermaLink="false">http://www.murrayc.com/?p=1897</guid>
		<description><![CDATA[A few days ago I pushed 44 more commits to the Maliit Plugins repository now that Canonical have published (in the Ubuntu Phablet project’s maliit-plugins Launchpad/Bazaar repository) that work that we (Openismus) did for them. This brings the Maliit Keyboard into the QML/QtQuick2 world for Qt5, removing the use of QGraphicsView which is not really suitable for [...]]]></description>
				<content:encoded><![CDATA[<p>A few days ago I pushed 44 more commits to the <a href="https://gitorious.org/maliit/maliit-plugins">Maliit Plugins</a> repository now that Canonical have published (in the <a href="https://code.launchpad.net/%7Ephablet-team/phablet-extras/maliit-plugins">Ubuntu Phablet project’s maliit-plugins Launchpad/Bazaar repository</a>) that work that we (<a href="http://www.openismus.com/">Openismus</a>) did for them.</p>
<p>This brings the Maliit Keyboard into the QML/QtQuick2 world for Qt5, removing the use of QGraphicsView which is not really suitable for Qt5. This should also have some performance advantages and makes customization even easier.</p>
<p>Michael Hasselmann blogged a <a href="http://mikhas.posterous.com/maliit-status-update">summary of the state of Maliit</a> today. The recent work, along with the Wayland integration, has made Maliit more popular than ever.  But we still need to line up customers to fund the ongoing development, generally while creating custom features or solutions for them.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.murrayc.com/permalink/2013/04/02/more-maliit-keyboard-improvements-qtquick2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Maliit Keyboard Improvements</title>
		<link>http://www.murrayc.com/permalink/2013/03/04/maliit-keyboard-improvements/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=maliit-keyboard-improvements</link>
		<comments>http://www.murrayc.com/permalink/2013/03/04/maliit-keyboard-improvements/#comments</comments>
		<pubDate>Mon, 04 Mar 2013 10:45:54 +0000</pubDate>
		<dc:creator>murrayc</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[canonical]]></category>
		<category><![CDATA[Gnome]]></category>
		<category><![CDATA[Maemo]]></category>
		<category><![CDATA[maliit]]></category>
		<category><![CDATA[Openismus]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.murrayc.com/?p=1893</guid>
		<description><![CDATA[On Friday I pushed 194 commits to the Maliit Plugins repository, adding new features, bugfixes, cleanups and tests to the Maliit Keyboard. This is some of the work Openismus has done for Canonical over the last few months which we are now allowed to upstream. This includes hard work by Michael Hasselmann, Krzesimir Nowak, Jan [...]]]></description>
				<content:encoded><![CDATA[<p>On Friday I pushed 194 commits to the <a href="https://gitorious.org/maliit/maliit-plugins">Maliit Plugins</a> repository, adding new features, bugfixes, cleanups and tests to the <a href="http://www.maliit.org/">Maliit</a> Keyboard. This is some of the work <a href="http://www.openismus.com/">Openismus</a> has done for <a href="http://www.canonical.com/">Canonical</a> over the last few months which we are now allowed to upstream. This includes hard work by <a href="http://mikhas.posterous.com/">Michael Hasselmann</a>, <a href="http://krnowak.blogspot.com/">Krzesimir Nowak</a>, <a href="http://blog.jpetersen.org/">Jan Arne Petersen</a> and <a href="http://www.jonnor.com/">Jon Nordby</a>.</p>
<p>Our work on the underlying <a href="https://gitorious.org/maliit/maliit-framework">Maliit Framework</a> for Canonical was published upstream as we did it. We believe we&#8217;ll be able to upstream more of our Maliit Plugins work in the future.</p>
<p>Versions of these Maliit Plugins commits were published a few days ago in the <a href="https://code.launchpad.net/~phablet-team/phablet-extras/maliit-plugins">Ubuntu Phablet project&#8217;s maliit-plugins Launchpad/Bazaar repository</a>. It also contains commits (not by us) on maliit-plugins&#8217; <a href="https://wiki.maliit.org/Plugins#Nemo_Keyboard">Nemo Keyboard</a>, mostly for integration with the Ubuntu Touch platform (and its use of Android&#8217;s Surface Flinger). The recent Ubuntu Touch preview is using a version of that Nemo Keyboard, though we believe that&#8217;s meant as a temporary solution. A properly integrated Maliit Keyboard should behave significantly better.</p>
<p>Anyway, these commits add these features to the Maliit Keyboard:</p>
<ul>
<li><strong>Auto-capitalization</strong>.</li>
<li><strong>Styling</strong>, such as a black underline for the current word and a red underline for a word with an error, though its up to the toolkit exactly how it shows this.</li>
<li>Word prediction, error correction, etc are now available when <strong>editing previously-entered words</strong>, instead of just the next word, taking into account the surrounding words.</li>
<li>Users can <strong>add words to the dictionary</strong> with a long press on the space key.</li>
<li><strong>More settings</strong> to enable/disable auto-capitalization, auto-correction, word prediction, error correction, audio feedback and whether the word ribbon should be disabled in portrait mode.</li>
<li>Applications can specify <strong>text and icons for actions keys</strong>, such as Done, Go, Login, etc.</li>
<li>Keyboard themes can now specify <strong>fonts</strong>.</li>
</ul>
<p>The <a href="https://gitorious.org/maliit/maliit-plugins/blobs/master/NEWS">maliit-plugins NEWS</a> file gives more details.</p>
<p>Many of these features were already in the old MeeGo Keyboard (used by the Nokia N9) which had to be dropped last year because of its libmeegotouch dependency and its need for proprietary plugins to achieve these features.</p>
<p>We hope to have all this in an official Maliit release soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.murrayc.com/permalink/2013/03/04/maliit-keyboard-improvements/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>The Warmth Of Other Suns</title>
		<link>http://www.murrayc.com/permalink/2013/03/01/the-warmth-of-other-suns/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=the-warmth-of-other-suns</link>
		<comments>http://www.murrayc.com/permalink/2013/03/01/the-warmth-of-other-suns/#comments</comments>
		<pubDate>Fri, 01 Mar 2013 10:31:11 +0000</pubDate>
		<dc:creator>murrayc</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.murrayc.com/?p=1890</guid>
		<description><![CDATA[I have really enjoyed Isabella Wilkerson&#8217;s The Warmth of Other Suns, which I &#8220;read&#8221; via Robin Miles&#8217; excellent Audible narration. It&#8217;s about the Great Migration of black people in the USA from the South to cities in the North and West, from the 20s to the 70s, told mostly via three personal stories in parallel. [...]]]></description>
				<content:encoded><![CDATA[<p>I have really enjoyed Isabella Wilkerson&#8217;s <a href="http://isabelwilkerson.com/the-book/">The Warmth of Other Suns</a>, which I &#8220;read&#8221; via <a href="http://www.audible.com/pd/ref=sr_1_1?asin=B004RC37C0&amp;qid=1361783867">Robin Miles&#8217; excellent Audible narration</a>. It&#8217;s about the Great Migration of black people in the USA from the South to cities in the North and West, from the 20s to the 70s, told mostly via three personal stories in parallel.</p>
<p>This is a huge part of American history that gets very little attention in popular culture, despite the wealth of supporting material due to it being such recent history. It&#8217;s full of incredible stories of personal courage and adventure. People escaped awful injustices that should not be forgotten. They were often prevented from leaving rural towns in the South, where they were given no choice but to work hard for little pay, at regular risk of violent assault and death. For many, escaping seems to have been almost as hard as for people escaping the Eastern block during the Soviet era. But, unlike defectors, their escapes were not celebrated in the US.</p>
<p>What&#8217;s really forgotten is how hard it was for people to settle once they escaped. They had more opportunities but these were still limited and blacks were initially prevented from living in some neighborhoods or taking many jobs. This is yet another dramatic chapter to peoples&#8217; stories.</p>
<p>New distinctive communities were founded, and they should be celebrated by telling the stories of the people who built them. When I was in New York City over the summer, I found some time to visit Harlem at short notice with my young son. We walked around to get a feel for the place, and tried to join a <a href="http://www.harlemheritage.com/">Harlem Heritage Tour</a>, but none were happening that day. It&#8217;s a small organization that I&#8217;d love to try again, but I cannot understand why no business has funded a massive tourist destination in Harlem that could be one of the big attractions on the <a href="http://www.citypass.com/new-york">New York CIty Pass </a>along with the Empire State Building, Ellis Island, the Museum of Natural History, etc.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.murrayc.com/permalink/2013/03/01/the-warmth-of-other-suns/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>glibmm 2.35.8</title>
		<link>http://www.murrayc.com/permalink/2013/02/21/glibmm-2-35-8/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=glibmm-2-35-8</link>
		<comments>http://www.murrayc.com/permalink/2013/02/21/glibmm-2-35-8/#comments</comments>
		<pubDate>Thu, 21 Feb 2013 11:41:42 +0000</pubDate>
		<dc:creator>murrayc</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[glibmm]]></category>
		<category><![CDATA[Gnome]]></category>
		<category><![CDATA[gtkmm]]></category>

		<guid isPermaLink="false">http://www.murrayc.com/?p=1886</guid>
		<description><![CDATA[I found a little time to do the first glibmm release in a few months. Kjell Allstedt and José Alburquerque have pushed so many commits, fixing several awkward bugs, that I had to get it out there. It includes almost no commits from me. Now to try rolling a gtkmm tarball.]]></description>
				<content:encoded><![CDATA[<p>I found a little time to do the <a href="http://git.gnome.org/browse/glibmm/commit/?id=8a3f2733ede5871ad98157a96c1ceb73794ebf2d">first glibmm release in a few months</a>. Kjell Allstedt and José Alburquerque have pushed so many commits, fixing several awkward bugs, that I had to get it out there. It includes almost no commits from me.</p>
<p>Now to try rolling a gtkmm tarball.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.murrayc.com/permalink/2013/02/21/glibmm-2-35-8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OnlineGlom: MySQL support</title>
		<link>http://www.murrayc.com/permalink/2013/02/15/onlineglom-mysql-support/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=onlineglom-mysql-support</link>
		<comments>http://www.murrayc.com/permalink/2013/02/15/onlineglom-mysql-support/#comments</comments>
		<pubDate>Fri, 15 Feb 2013 14:40:26 +0000</pubDate>
		<dc:creator>murrayc</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Glom]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jooq]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[OnlineGlom]]></category>

		<guid isPermaLink="false">http://www.murrayc.com/?p=1870</guid>
		<description><![CDATA[Of and on over the last couple of weeks, I have added MySQL support to OnlineGlom, like I recently added to Glom itself. Now it works and is in git master. When I have the time I&#8217;ll try it out with Google&#8217;s Cloud SQL (MySQL) in Google&#8217;s App Engine. As with regular Glom, most of [...]]]></description>
				<content:encoded><![CDATA[<p>Of and on over the last couple of weeks, I have added MySQL support to <a href="http://www.glom.org/wiki/index.php?title=Development/OnlineGlom">OnlineGlom</a>, like I recently <a href="http://www.murrayc.com/permalink/2013/01/15/glom-experimental-mysql-support/">added</a> to Glom itself. Now it works and is in git master. When I have the time I&#8217;ll try it out with Google&#8217;s Cloud SQL (MySQL) in Google&#8217;s App Engine.</p>
<p>As with regular Glom, most of the work was getting the self-hosting tests to work with MySQL &#8211; to start the MySQL instances, create the databases, fill them with data, test them and shut them down. The rest of the support was mostly covered already by <a href="http://www.jooq.org/">JOOQ</a> but I had to make sure it always knew what SQL dialect to use.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.murrayc.com/permalink/2013/02/15/onlineglom-mysql-support/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Rygel Documentation</title>
		<link>http://www.murrayc.com/permalink/2013/02/13/rygel-documentation/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rygel-documentation</link>
		<comments>http://www.murrayc.com/permalink/2013/02/13/rygel-documentation/#comments</comments>
		<pubDate>Wed, 13 Feb 2013 17:49:54 +0000</pubDate>
		<dc:creator>murrayc</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Documentation]]></category>
		<category><![CDATA[Gnome]]></category>
		<category><![CDATA[Openismus]]></category>
		<category><![CDATA[rygel]]></category>
		<category><![CDATA[vala]]></category>

		<guid isPermaLink="false">http://www.murrayc.com/blog/?p=1809</guid>
		<description><![CDATA[Over the last few months, I have worked on Rygel&#8216;s documentation, along with Krzesimir Nowak and Jens Georg here at Openismus. Most of that work is now finished. It&#8217;s been a great investment of time that should be of real benefit to the project. We&#8217;ve massively improved Rygel&#8217;s (C) API documentation, which was rather bare [...]]]></description>
				<content:encoded><![CDATA[<p>Over the last few months, I have worked on <a href="http://rygel-project.org/">Rygel</a>&#8216;s documentation, along with <a href="http://krnowak.blogspot.de/">Krzesimir Nowak</a> and <a href="http://jensge.org/">Jens Georg </a>here at Openismus. Most of that work is now finished. It&#8217;s been a great investment of time that should be of real benefit to the project.</p>
<p>We&#8217;ve massively improved <a href="https://live.gnome.org/Rygel/#Developer_Features">Rygel&#8217;s (C) API documentation</a>, which was rather bare after Rygel&#8217;s initial split into shared libraries. We had to investigate how the current plugins use the API, and sometimes improved the API in response. (The very latest API documentation improvements will be online soon, when we do a new Rygel release.)</p>
<p>We&#8217;ve added both simple and real-world examples, linking to them from sections in the API documentation and describing how those examples work. Those real-world examples are standalone GStreamer-0.10-based versions of the regular Rygel media engine and of its media-export server plugins, plus a GStreamer-0.10 version of the standalone renderer example.The original code for these (now using GStreamer-1.0) was in Vala, like the rest of Rygel, so we had to convert them to C. To maintain functionality, we chose to clean up the horribly-obfuscated C code generated by Vala. That took us a few frustrating weeks to finish but we got it done.</p>
<p>The new <a href="https://live.gnome.org/Rygel/Integration">Rygel Integration</a> page provides an overview of the APIs that platforms should find interesting, linking to the various documents that we&#8217;ve created during this effort. That Integration page is part of a complete overhaul of Rygel&#8217;s wiki project pages to make them more attractive and useful.</p>
<p>To help with maintenance of Rygel itself, we now have a <a href="https://live.gnome.org/Rygel/Architecture">Rygel Architecture</a> page with descriptions of Rygel&#8217;s program flow in various situations, and a <a href="https://live.gnome.org/Rygel/Architecture%20Diagram">Rygel architecture diagram</a> showing how the various parts of Rygel work together.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.murrayc.com/permalink/2013/02/13/rygel-documentation/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Trying Google Apps For Education</title>
		<link>http://www.murrayc.com/permalink/2013/02/07/trying-google-apps-for-education/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=trying-google-apps-for-education</link>
		<comments>http://www.murrayc.com/permalink/2013/02/07/trying-google-apps-for-education/#comments</comments>
		<pubDate>Thu, 07 Feb 2013 13:21:20 +0000</pubDate>
		<dc:creator>murrayc</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[kindergarten]]></category>

		<guid isPermaLink="false">http://www.murrayc.com/?p=1868</guid>
		<description><![CDATA[At Liam&#8217;s new Kindergarten, I&#8217;m responsible for the computer stuff. So I thought I&#8217;d make things easier by using Google Apps, which is free for educational institutions. My aims were to have: Official email accounts, without the bother of managing our own email server. (Google Mail) Mailing lists (or groups) so we can send mail [...]]]></description>
				<content:encoded><![CDATA[<p>At Liam&#8217;s new Kindergarten, I&#8217;m responsible for the computer stuff. So I thought I&#8217;d make things easier by using <a href="http://www.google.com/enterprise/apps/education/">Google Apps, which is free for educational institutions</a>.</p>
<p>My aims were to have:</p>
<ul>
<li>Official email accounts, without the bother of managing our own email server. (Google Mail)</li>
<li>Mailing lists (or groups) so we can send mail to one parents@ email address instead of copy/pasting long CC lists.</li>
<li>An online calendar that we could use to show official events, which could show up on peoples&#8217; iPhones and Android phones. (Google Calendar)</li>
<li>A shared space for official documents. (Google Drive)</li>
<li>Private photo galleries. They can&#8217;t be public because people don&#8217;t like pictures of their children being online. (Google&#8217;s PicasaWeb, I hoped)</li>
</ul>
<p>I was really looking forward to playing with this stuff, hoping that it would quickly do useful things, and hoping that it would be easier for non-technical people to administer when I&#8217;m not around. But I&#8217;ve been rather disappointed.</p>
<p>The various problems lead to me having to choose between two options, both of them inadequate:</p>
<h3>Option 1: Domain users</h3>
<p>In this scenario, I would add someone@ourdomain.com accounts for all of the parents.</p>
<p>Pros:</p>
<ol>
<li>We would be able to see all contact details for parents and teachers in the &#8220;Directory&#8221;. That would be available on peoples&#8217; Android phones, too, and maybe on iPhones.</li>
<li>We could use PicasaWeb to share photos and view them as galleries.</li>
<li>System administration would generally be easier. The simplicity makes<br />
it easier to avoid sharing something publicly by accident.</li>
</ol>
<p>Cons:</p>
<ol>
<li>We would give everyone an @ourdomain.com Google account. That would give them a @ourdomain.com email address, using GMail, which would be useless to them. Parents would each have to manually set up GMail to forward to their personal email address, though I could tell them how to do that.<br />
(You could send email to <a href="mailto:someparent@peschool.de">some.parent@ourdomain.com</a>, but when they replied, you would see them replying from their <a href="mailto:someparent@hotmailorsomething.com">some.parent@hotmailorsomething.com </a>email address.)</li>
<li>If parents already have a Google account, they would need to switch between them in the web browser. That&#8217;s fairly easy using Google&#8217;s multiple sign-in, but that does not work well right now. Sometimes you&#8217;ll find yourself using the other account suddenly.<br />
It&#8217;s a particular problem for Google Apps that don&#8217;t support multiple-sign in, but real people do use those apps. For instance:</p>
<ul>
<li>If you click on a link to a PicasaWeb album, you&#8217;ll just be told that the album doesn&#8217;t exist, until you log out, log in as the other user, and try again. That is beyond the abilities of the typical user.</li>
<li>Google Checkout, used when buying from Google Play, will offer a choice of users to log in as, but I&#8217;ve regularly seen it ignore your choice and continue as the wrong user.</li>
<li>When going to the GMail site, if you are logged in as a user with no gmail email address, it will offer to create one for you with a &#8220;Add Gmail to your Google Account&#8221; page. If you try to switch users to the user with a GMail account, it will just take you back to the same page for the previous user.</li>
</ul>
</li>
</ol>
<h3>Option 2: Non-domain group members</h3>
<p>In this scenario, I would not add someone@ourdomain.com accounts for all of the parents.</p>
<p>Instead I would add their regular email addresses as members of groups such as parents@ourdomain.com. The various Google Apps seem to allow sharing to group email addresses, understanding that that means sharing to the group&#8217;s members, though that&#8217;s not documented or hinted at.</p>
<p>The parents would have to create Google accounts for these non-Google email addresses, which is still possible via this link to <a href="https://accounts.google.com/newaccount">create a Google account without being forced to have a Google email account</a>, though that link might not work in future. (<strong>Update</strong> from 2013/04: Indeed, it doesn&#8217;t work now, so you have to <a href="http://support.google.com/accounts/bin/answer.py?hl=en&amp;answer=61177">disable the gmail email address</a> after creating the Google account.)</p>
<p>Pros:</p>
<ul>
<li>People could use their existing Google accounts and existing email addresses.</li>
</ul>
<p>Cons:</p>
<ul>
<li>We could not use Google&#8217;s contacts system to share a list of contacts. We&#8217;d have to maintain a separate list on a web page. It wouldn&#8217;t be available in the normal way on an Android or iPhone phone.<br />
This just isn&#8217;t possible with Google Apps unless all the people have domain accounts, with domain email addresses. Google recommend the use of 3rd-party web applications that let you manually sync address books every now and then, but that&#8217;s not good enough.</li>
<li>We could not use PicasaWeb to share photos. We could use Google Drive<br />
instead, but this doesn&#8217;t offer a gallery view showing sets of photos<br />
with back/forward, etc.<br />
This is because PicasaWeb does not support sharing to a Google Apps group. You can only share to users in your domain, or you can share via an obfuscated, but public, URL.</li>
</ul>
<h3>Summary</h3>
<p>For now, I find that Google&#8217;s multiple sign in is so awful that I cannot risk asking people to deal with it and cannot risk having to support them with it. Therefore, I have to live with sharing photos via Google Drive instead of PicasaWeb, and having no shared contacts list.</p>
<p>I feel that we wouldn&#8217;t have this problem if Google Apps really supported domains rather than just using redirects. For instance, I&#8217;d like to use email at mail.ourdomain.com, instead of typing that into my browser&#8217;s address bar only to be taken to mail.google.com/mail/u/0/?shva=1#inbox . A real domain would have its own users and there would be no conflict with regular Google users. Obviously that would be harder for Google to do.</p>
<p>Things would also be simpler if PicasaWeb supported multiple-sign in, and if it supported sharing to groups. Or if Google Drive allowed image files to be viewed via PicasaWeb. It&#8217;s to be expected that educational institutions will want to share photos privately. I wanted to use that as an attractive way to get people into the system.</p>
<p>It should also be expected that educational institutions, like many organizations, want to deal with people who will never have an official email address for that organization.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.murrayc.com/permalink/2013/02/07/trying-google-apps-for-education/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The Quantum Universe</title>
		<link>http://www.murrayc.com/permalink/2013/01/30/the-quantum-universe/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=the-quantum-universe</link>
		<comments>http://www.murrayc.com/permalink/2013/01/30/the-quantum-universe/#comments</comments>
		<pubDate>Wed, 30 Jan 2013 08:49:27 +0000</pubDate>
		<dc:creator>murrayc</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.murrayc.com/blog/?p=1825</guid>
		<description><![CDATA[I managed to finish a book for the first time in 2 years. My second child is now 2 years old, in case you find it odd that I&#8217;m proud of having read an actual book. Parents of small children will understand. It took several tries to finish The Quantum Universe, partly because I had [...]]]></description>
				<content:encoded><![CDATA[<p>I managed to finish a book for the first time in 2 years. My second child is now 2 years old, in case you find it odd that I&#8217;m proud of having read an actual book. Parents of small children will understand.</p>
<p>It took several tries to finish <a href="http://www.amazon.com/gp/product/0306819643/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0306819643&amp;linkCode=as2&amp;tag=murrayswebpages">The Quantum Universe</a>, partly because I had to go back over several of the earlier explanations before moving forward. I&#8217;m a big fan of Brian Cox&#8217;s TV shows, but not so much a fan of the co-author&#8217;s <a href="http://www.guardian.co.uk/profile/jeff-forshaw">Jeff Forshaw&#8217;s articles in the Guardian</a>, though I find most popular science journalism rather insubstantial.</p>
<p>In the end, I had to accept that several explanations in the book just weren&#8217;t good enough. It seems to have been rushed, probably to capitalize on Brian Cox&#8217;s current fame, without anybody taking the time to check that all the text actually makes sense. It must be hard to find editors who are brave enough to say when they don&#8217;t understand.</p>
<p>It also got unnecessarily hand-wavy at times. And I didn&#8217;t like how on the one hand it rightly discussed observed experimental behavior of the quantum world as being predictable via the maths, but then went on to describe that maths as being a mechanism that causes other effects rather than just being consistent with the observed effects. That feels like anthropomorphizing the maths, before we&#8217;ve really figured out if we have the most general model to think about things. I&#8217;m thinking particularly of the epilogue about how Pauli&#8217;s Exclusion Principle explains how electrons limit the mass of white dwarf starts. Maybe I&#8217;d find it more justified if there was some proper explanation of the exclusion principle, assuming there is one, but the book skips over that.</p>
<p>Like many people, I found the clocks analogy to be a distraction. I&#8217;d rather just see the maths used to explain probability waves and their wave interference. Plenty of people are afraid of maths, but the clocks explanation mostly just gives the false impression of understanding, while annoying people who are comfortable with a little calculus. Without the equations, I don&#8217;t feel like I&#8217;m on solid ground.</p>
<p>Reading it on the Kindle wasn&#8217;t particularly pleasant, because I had to flick backwards and forwards between the text and the diagrams. But as far as I can tell, the real book is not laid out much better. Again, I guess the book would have a more approachable layout if it wasn&#8217;t rushed.</p>
<p>As you can tell, I&#8217;m not qualified to judge this book properly. That&#8217;s because I am the target audience. I still feel a lack of understanding of quantum and particle physics that bothers me deep down. I hope to find the time to read <a href="http://www.amazon.com/gp/product/0306447908/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0306447908&amp;linkCode=as2&amp;tag=murrayswebpages">Ramamurti Shankar&#8217;s Principles of Quantum Mechanics</a> instead, to solve the problem properly. I&#8217;ve already enjoyed some of his <a href="http://oyc.yale.edu/physics">Fundamentals of Physics</a> lecture videos that Yale have made available online.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.murrayc.com/permalink/2013/01/30/the-quantum-universe/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>OnlineGlom: Slightly Saner Logins</title>
		<link>http://www.murrayc.com/permalink/2013/01/29/onlineglom-slightly-saner-logins/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=onlineglom-slightly-saner-logins</link>
		<comments>http://www.murrayc.com/permalink/2013/01/29/onlineglom-slightly-saner-logins/#comments</comments>
		<pubDate>Tue, 29 Jan 2013 13:08:46 +0000</pubDate>
		<dc:creator>murrayc</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Glom]]></category>
		<category><![CDATA[OnlineGlom]]></category>
		<category><![CDATA[Openismus]]></category>

		<guid isPermaLink="false">http://www.murrayc.com/blog/?p=1821</guid>
		<description><![CDATA[The OnlineGlom demo does not require a login. However, the code does let you set up a server that requires a login, and I noticed that a successful login for one person became a login for everybody else. So after the first login, it was as if no login was required for anybody. Yes, really. [...]]]></description>
				<content:encoded><![CDATA[<p>The <a href="http://www.glom.org/wiki/index.php?title=Development/OnlineGlom#Demos">OnlineGlom demo</a> does not require a login. However, the code does let you set up a server that requires a login, and I noticed that a successful login for one person became a login for everybody else. So after the first login, it was as if no login was required for anybody. Yes, really. Of course, this would not do.</p>
<p>So I fixed that, I think, learning some things about Java Servlet sessions along the way. This text is mostly for my own reference, and so that people can tell me how wrong I am, because I&#8217;d like to know about that.</p>
<h3>In the server-side code</h3>
<p>Java servlets already set a JSESSIONID cookie in the browser, but you <a href="http://stackoverflow.com/questions/3092363/how-can-i-load-java-httpsession-from-jsessionid/3092495#comment18933262_3092495">shouldn&#8217;t try to use that cookie to maintain a login across browser sessions</a>. Instead, I now <a href="https://gitorious.org/online-glom/gwt-glom/commit/84acb98ac876eea66b037f36733df9024fe2b2b2">set and get a custom Cookie</a>, in the server code, using <a href="http://docs.oracle.com/javaee/6/api/javax/servlet/http/Cookie.html"><span class="diff-content">javax.servlet.http.Cookie</span>.</a> <a href="http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpSession.html#getId%28%29">HttpSession.getId()</a> conveniently provides a unique-enough session ID for me to use in the Cookie. This <a href="http://code.google.com/p/google-web-toolkit-incubator/wiki/LoginSecurityFAQ">page about Cookies with GWT</a> seems to suggest setting the cookie in the client-side JavaScript code, using <a href="http://google-web-toolkit.googlecode.com/svn/javadoc/1.6/com/google/gwt/user/client/Cookies.html">com.google.gwt.user.client.Cookies</a>, but that sounds rather wrong.</p>
<p>I now store the username and password (Yes, that&#8217;s not good, so keep reading), associated with the session ID, <a href="https://gitorious.org/online-glom/gwt-glom/commit/5b2462e3e1e67f88fc8e3b741a97cb57ac1a2da6">in a structure that&#8217;s associated with the ServletContext</a>, via the <a href="http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContext.html#setAttribute%28java.lang.String,%20java.lang.Object%29">javax.servlet.ServletContext.setAttribute(</a>) method. I get the ServletContext via the <a href="http://docs.oracle.com/javaee/6/api/javax/servlet/ServletConfig.html#getServletContext%28%29">ServletConfig.getServletContext()</a> method. I believe that this single instance is available to the entire web &#8220;app&#8221;, and it seems to work across my various servlets. For instance, if I login to view a regular page, the images servlet can also then provide images to show in the page. I&#8217;d really like to know if this is not the right thing to do.</p>
<p><strong>However</strong>, it still stores your PostgreSQL username and password in memory, so it can use it again if you have the cookie from your last successful login. It does not store the password on disk, but that is still not good, because it could presumably still allow someone to steal all the passwords after a breakin, which would then endanger users who use the same password on other website. I cannot easily avoid this because it&#8217;s the PostgreSQL username and password that I&#8217;m using for login. PostgreSQL does store a hash rather than the plaintext password, but still <a href="http://www.postgresql.org/message-id/1355673270.18581.7.camel@murrayc-ThinkPad-X220">requires the plaintext password to be supplied</a> to it. I think I&#8217;ll have to generate PostgreSQL passwords and hide them behind a separate login username/password. Those passwords will still be stored in plaintext, but we won&#8217;t be storing the password entered by the user. I&#8217;d like to make this generic enough that I can use other authentication systems, such as Google&#8217;s for App Engine.</p>
<p>To avoid session hijacking, I made the cookie &#8220;secure&#8221;, meaning that it may only be provided via a secure protocol, such as HTTP. I believe this also means that client (javascript) code is not allowed to read it, so it can only be read by the server via HTTP(S). I did that with the <a href="http://docs.oracle.com/javaee/6/api/javax/servlet/http/Cookie.html#setSecure%28boolean%29">javax.servlet.http.Cookie.setSecure()</a> method, though I had to make a <a href="https://gitorious.org/online-glom/gwt-glom/commit/4149279001acf32b38240fbc3456c68f22864e76">build change to make that available</a>.</p>
<p>The login servlet now <a href="https://gitorious.org/online-glom/gwt-glom/commit/f1ac487e38756a86e1f2c6be80e840c8d9b161d5">checks that it has been called via HTTPS</a>, by using the ServletRequest.isSecure() method, and uses HTTPS when testing via mvn gwt:run. It refuses to do any authentication if HTTPS was not used, logging an error on the server.</p>
<h3>In the client side code</h3>
<p>I <a href="https://gitorious.org/online-glom/gwt-glom/commit/e7e54f4bba80376a1b7870ce075d3c51be58543d">added a check for what protocol is used</a>. If it&#8217;s not https then I warn that login cannot work. This does not add any security, but it&#8217;s a helpful hint.</p>
<p>Actually, the <strong>entire site must therefore be served via HTTPS</strong>, not just the login page, or we would violate the <a href="http://en.wikipedia.org/wiki/Same_origin_policy">Same Origin Policy</a> by mixing protocols, which the browser would rightfully complain about. At this point I noticed that most serious sites with logins now use HTTPS for their entire site. For instance, Google, Amazon, Facebook. This seems like a good simple rule, though I wonder if many projects don&#8217;t enforce it just to make debugging easier.</p>
<p>I also converted the popup login dialog <a href="https://gitorious.org/online-glom/gwt-glom/commit/a8d3e9f0c5b28ee2087f0db224e6d1d7839e2595">into a proper login page</a>, making sure that it <a href="https://gitorious.org/online-glom/gwt-glom/commit/ee9b1044595448a5fd842897205d6947cf13c61f">takes the user to the desired page</a> afterwards.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.murrayc.com/permalink/2013/01/29/onlineglom-slightly-saner-logins/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>
