<?xml version="1.0" encoding="iso-8859-1"?>
<rdf:RDF
	xmlns="http://purl.org/rss/1.0/"
	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:wiki="http://purl.org/rss/1.0/modules/wiki/">
	<channel rdf:about="http://www.fredemmott.co.uk/index.php?page=blog">
		<link>http://www.fredemmott.co.uk/index.php?page=blog</link>
 		<title>Fred Emmott's Blog</title>
		<language>en-gb</language>
		<description>My random ravings :)</description>
		<items>
			<rdf:Seq>
				<rdf:li rdf:resource="http://www.fredemmott.co.uk/blog_166" />
<rdf:li rdf:resource="http://www.fredemmott.co.uk/blog_165" />
<rdf:li rdf:resource="http://www.fredemmott.co.uk/blog_164" />
<rdf:li rdf:resource="http://www.fredemmott.co.uk/blog_163" />
<rdf:li rdf:resource="http://www.fredemmott.co.uk/blog_162" />
			</rdf:Seq>
		</items>
	</channel>
	<item rdf:about="http://www.fredemmott.co.uk/blog_166">
<title>StatusBoard</title>
<description><![CDATA[<p>
It's been a long time since I posted anything; I've been working on a few slackware, slamd64, and jerboa-related things, but I'll hopefully get into those in detail in another blog post.
</p>

<p>As a quick post, someone at work mentioned putting an at-a-glance "is something broken" display on a dedicated monitor or few at work; that led to me writing StatusBoard yesterday/today:</p>

<img src='http://files.fredemmott.co.uk/statusboard.png' alt='StatusBoard screenshot' />

<p>If a test doesn't pass, the relevant item turns red. It's configured via JSON (example included), and supports full-screen mode, and has an optional system tray icon. It basically fetches a web address. It supports:</p>

<ul>
<li>A different refetch interval for each item</li>
<li>A pattern for a revision number</li>
<li>A pattern that must be matched to count as a 'pass'</li>
<li>A pattern that must be matched to count as a 'failure'</li>
<li>Another pattern to limit the scope of the 'pass'/'fail' patterns</li>
<li>HTTP + HTTPS (well, anything QNetworkAccessManager supports)</li>
<li>Ignoring SSL errors, such as self-signed certificates</li>
<li>Linux + OSX + (probably, but untested) Windows</li>
</ul>

<p>
The <a href='http://git.fredemmott.co.uk/?p=statusboard;a=summary'>source is available via git</a>, under the GPLv3.
</p>

<pre class='code'>
git clone http://git.fredemmott.co.uk/repo/statusboard/
</pre>

<p>See the README file for build/configuration instructions.</p>]]></description>
<link>http://www.fredemmott.co.uk/blog_166</link>
<pubDate>Fri, 19 Jun 2009 18:55:18 UTC</pubDate>
<dc:date>2009-06-19T18:55:18</dc:date>
<dc:creator>Frederick Emmott</dc:creator>
</item>
<item rdf:about="http://www.fredemmott.co.uk/blog_165">
<title>Slamd64 12.2</title>
<description><![CDATA[<p>
An announcement mostly recycled from 12.1, and 12.0 in turn:
</p>

<p>
Slamd64 12.2 is released, and is an incremental improvement over 12.1, including:
</p>

<ul>
<li>Linux 2.6.27.7</li>
<li>GCC 4.2.4</li>
<li>Apache HTTPD 2.2.10, with SSL support and PHP 5.2.8</li>
<li>Updated development tools</li>
<li>KDE 3.5.10</li>
<li>XFCE 4.4.3</li>
<li>Mozilla Firefox 3.0.5</li>
<li>Mozilla Thunderbird 2.0.0.19</li>
<li>Sun Java (JRE and JDK) 6u11</li>
</ul>

<p>
Like previous releases of Slamd64, 12.2 provides seamless FHS-compliant
32-bit compatibility, via a multilib system (/lib for 32-bit libraries and
/lib64 for 64-bit libraries). This provides easier and increased support
for both existing 32-bit software (in most cases, you can just install a
package designed for Slackware with no special work needed), and for
64-bit binaries too (which require /lib64/ld-linux-x86-64.so.2 to be present)
such as the NVidia drivers, without requiring compatability symlinks which
clutter the root directory and remove the separation of 32 and 64-bit binaries.
</p>

<p>
nspluginwrapper is still included in c/, allowing you to easily use 32-bit
browser plugins (such as Adobe Flash) in the included 64-bit browsers, such as
Firefox and Konqueror - given the availability of prerelease 64-bit versions of
Adobe Flash Player and Sun's Java Plugin, this will hopefully vanish soon.
</p>

<p>
As per usual, there's several people that really deserve my thanks:
</p>
<ul>
<li>Carlos Corbacho - again, a huge amount of contributions to Slamd64, in many
	areas.</li>
<li>Andrew Brouwers - many contributions and support.</li>
<li>Joshua Wood - many contributions and support.</li>
<li>Patrick Volkerding - for making Slackware</li>
<li>Everyone who's helped with bug reports or support on the forums/IRC</li>
<li>The residents of a variety of IRC channels (you know who you are)</li>
<li>Distributions I have taken compatability patches from; especially Cross-LFS,
	Gentoo, and OpenSUSE</li>
</ul>

<p>
Additionally, as announced previously, support for 11.0 will be dropped shortly.
</p>

<p>On an unrelated note:</p>

<img src='http://www.fosdem.org/2009/promo/going-to' alt="I'm going to FOSDEM 2009" />]]></description>
<link>http://www.fredemmott.co.uk/blog_165</link>
<pubDate>Sun, 01 Feb 2009 23:29:26 UTC</pubDate>
<dc:date>2009-02-01T23:29:26</dc:date>
<dc:creator>Frederick Emmott</dc:creator>
</item>
<item rdf:about="http://www.fredemmott.co.uk/blog_164">
<title>A slightly different take on &#8220;Qt Everywhere&#8221;</title>
<description><![CDATA[<p>
Firstly, as a bit of context, I think that in large applications, having a more detailed type system than just "scalar", "array", and possibly objects really helps, and speeds up debugging, and helps bring up errors at compile time instead of runtime, which is always a good thing. I don't see how this doesn't apply to large web applications equally as desktop applications; to an extent, Java servlets seem to be almost what I want; unfortunately, I don't like Java (I won't go into that here) - and I like Qt :)
</p>

<p>Because of this, I've started writing <a href='http://docs.fredemmott.co.uk/FastCgiQt/'>FastCGI-Qt</a>, a library to make writing <a href='http://www.fastcgi.com'>FastCGI</a> applications using C++/Qt as simple as possible - as demonstrated by the example on the first page of <a href='http://docs.fredemmott.co.uk/FastCgiQt/'>the documentation</a> (more are linked at the bottom of that page).
</p>

<p>It is currently only tested under Apache HTTPD 2.2 with mod_fastcgi-2.4.6, but supporting other servers is on my to-do list.</p>

<p>The current feature set is:</p>

<ul>
<li>Handle communication with the mod_fastcgi, and create instances of your class as necessary to respond to each request.</li>
<li>Makes HTTP headers and POST data available.</li>
<li>Parses any form-encoded variables on the query string.</li>
<li>Provides a stream interface for reading POST data (responders will be created before POST data has been received).</li>
<li>Parse variables defined in form-encoded POST data (this blocks if the POST data is form data and there is still un-received POST data.</li>
<li>Defaults to a content-type of text/html and 200 OK status, but this can be overridden if nothing's been sent to the client yet.</li>
<li>Each application executes requests in parallel, in a thread pool of QThread::idealThreadCount() (typically the number of cores in the system) threads.</li>
<li>It <em>should</em> handle multiple requests multiplexed over one socket, but mod_fastcgi doesn't do this, so it's untested.</li>
</ul>

<p>My short-term plans for it include:</p>

<ul>
<li>Adding output buffering support.</li>
<li>Adding support for FastCGI authorizers, not just responders.</li>
<li>Providing a Responder subclass that you can inherit from and maps request URLs to public slots.</li>
<li>Writing something non-trivial using it.</li>
</ul>

<p>
It's under the ISC license (with the exception of an internal header file from the fastcgi dev kit, which is under the fastcgi license); there's also <a href='http://docs.libqxt.org/latest/group__QxtWeb.html'>QxtWeb</a> which is somewhat similar, but uses SCGI instead of FastCGI, has a different end-user API from what I'm aiming for, and (currently) is only under a GPL-incompatible license.</p>]]></description>
<link>http://www.fredemmott.co.uk/blog_164</link>
<pubDate>Sun, 01 Feb 2009 15:00:54 UTC</pubDate>
<dc:date>2009-02-01T15:00:54</dc:date>
<dc:creator>Frederick Emmott</dc:creator>
</item>
<item rdf:about="http://www.fredemmott.co.uk/blog_163">
<title>Jerboa and TypoFail</title>
<description><![CDATA[<p>It's been a while since I've blogged, mostly because of being fairly busy <a href='http://www.mendeley.com'>at work</a> (more on that once the refactor branch is done), though I have found time for some work on a couple of C++/Qt hobby projects:
</p>

<img src='http://files.fredemmott.co.uk/jerboa-mac.png' alt='Jerboa on OSX' />

<p>Jerboa's had a fairly major UI change (well, given the amount of UI there is, there's not much to change), and while the toolbar takes up much more space, I think it's better and more consistent. I also got around to making <a href='http://files.fredemmott.co.uk/Jerboa-git-post-0.2.dmg'>a DMG</a> for mac users (windows users: MSI coming soon, builds and works fine though -  linux users: cmake/qt4.4 from <a href='http://git.fredemmott.co.uk/?p=yanihp;a=summary'>source</a>). I've still not managed to hit my feature plan for 0.3 yet - when it's done ¬_¬.</p>

<p>I've also been working on a typing game, called TypoFail - only <a href='http://git.fredemmott.co.uk/?p=typofail;a=summary'>source</a> so far for it though, and a screenshot or two:
</p>

<img src='http://files.fredemmott.co.uk/typofail-taow.png' alt='TypoFail in Quotes mode with an Art of War quote' />

<img src='http://files.fredemmott.co.uk/typofail-typespeed.png' alt='TypoFail in TypeSpeed mode' />

<p>The first is a clone of the amazing timewaster <a href='http://www.typeracer.net'>TypeRacer</a>, though without the lag issues that annoy me over wireless; the latter is a clone of the venerable 'typespeed' game.</p>

<p>In the first mode, you type the quote as quickly as possible, and your score is your WPM. In TypeSpeed mode, your score is the number of characters in complete words you typed before you fail (10 words reaching the right hand edge of the field is a failure).</p>

<p>The game supports multiplayer (and pops up mini game windows showing your opponent's state), though requires a manually set-up standalone server at the moment. One neat thing about the quotes mode is that it reads fortune-format files, so you can easily load up whatever quotes you like - it'll even recognize ones which look like a dictation/IRC log:</p>

<img src='http://files.fredemmott.co.uk/typofail-quotes.png' alt='TypoFail with IRC-style quote' />

<p>Both of these applications are pure Qt4, and work fine on Windows, Linux, and OSX - though TypoFail's networking requires <a href='http://git.fredemmott.co.uk/?p=JsonQt;a=summary'>JsonQt</a>, which it contains in a git submodule.</p>]]></description>
<link>http://www.fredemmott.co.uk/blog_163</link>
<pubDate>Fri, 21 Nov 2008 23:44:30 UTC</pubDate>
<dc:date>2008-11-21T23:44:30</dc:date>
<dc:creator>Frederick Emmott</dc:creator>
</item>
<item rdf:about="http://www.fredemmott.co.uk/blog_162">
<title>JsonQt now has QVariantMap -> JSON</title>
<description><![CDATA[<p>As of a few days ago, JsonQt can translate both ways between QVariantMap objects and JSON strings (see <a href='http://git.fredemmott.co.uk/?p=JsonQt;a=tree;f=tests;h=HEAD'>the tests</a> for examples). Someone sent a link to <a href='http://qjson.sourceforge.net/'>QJson</a> my way; after a quick look, here's a couple of advantages and disadvantages of each:</p>

<ul>
<li>JsonQt doesn't depend on bison, Boost::Spirit, or anything except a compiler, cmake, and Qt - easier for windows builds, and means I don't have to worry about syntax changes between one version of $parserGenerator to the next.</li>
<li>QJson is written using bison - if bison's your thing, this can make it easier to fix errors.</li>
<li>QJson can handle the top-level JSON "thing" being an array, not an object - JsonQt requires it to be an object.</li>
<li>JsonQt provides both translation both ways</li>
</ul>

<p>The last point I think is due to me misreading json.org - though it's easy enough to change (make it so that the main public functions take/return QVariants instead of QVariantMaps, and if trying to parse as an object fails, try to parse as an array).
</p>

<p><em>Update:</em> QJson has the bison-generated files in SVN, in addition to the bison source files.</p>]]></description>
<link>http://www.fredemmott.co.uk/blog_162</link>
<pubDate>Wed, 05 Nov 2008 14:25:40 UTC</pubDate>
<dc:date>2008-11-05T14:25:40</dc:date>
<dc:creator>Frederick Emmott</dc:creator>
</item>
</rdf:RDF>
