<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title type="html">Programming</title>
<link rel="alternate" type="text/html" href="http://caustiq.esoteriq.org/nb"/>
<link rel="self" type="application/atom+xml" href="http://caustiq.esoteriq.org/nb/archives/cat_3/index-atom.xml"/>
<updated>2008-05-17T17:05:27-07:00</updated>
<author>
<name>AJagucki</name>
<uri>http://caustiq.esoteriq.org/nb</uri>
</author>
<id>http://caustiq.esoteriq.org/nb/</id>
<generator uri="http://nanoblogger.sourceforge.net" version="3.3 RC4">
NanoBlogger
</generator>

<entry>
<title type="html">Personal Eventing in Multi-User Chat?</title>
<author>
<name>AJagucki</name>
</author>
<link rel="alternate" type="text/html" href="http://caustiq.esoteriq.org/nb/archives/2008/05/#e2008-05-17T16_50_27.txt"/>
<id>http://caustiq.esoteriq.org/nb/archives/2008/05/#e2008-05-17T16_50_27.txt</id>
<published>2008-05-17T16:50:27-07:00</published>
<updated>2008-05-17T16:50:27-07:00</updated>
<category term="Programming" />
<category term="Jabber" />
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<p><a href="http://mbishop.esoteriq.org/">Martin Bishop</a> recently asked me why he couldn't see my <a href="http://www.xmpp.org/extensions/xep-0118.html">User Tune</a>
from the tooltip of my entry in the MUC room occupant list. Naturally, we
were both using Psi where PEP info is often displayed in the tooltips of
the Contact List entries. I explained to him that some MUC rooms can be
configured as anonymous where the JID of the occupants are not exposed.
Without the JID of course, you would be hard pressed to figure out a way
to determine whose PEP nodes to retrieve, not to mention determine
subscriptions and node access models. However, after answering his question
I had an interesting idea for an Openfire plugin...</p>

<p>Remember during the stone age when people used IRC? Neither do I, but stay
with me. There were many client side scripts that let you type a command
and have your currently playing song sent to the channel. In fact, when I
used Kopete there was a plugin that did the very same thing, even over
Jabber. So, the idea was to provide that same functionality, except
<em>server-side</em> instead of client-side and utilizing PEP.</p>

<p>Thus, last night my friends and I came up with an Openfire plugin called
<a href="http://code.google.com/p/pep-in-muc/">PEP in MUC</a>.</p>

<p><em>Sending one's tune to the room:</em></p>

<p><img src="/images/pep_in_muc1.png" alt="Tune-1" title="PEP in MUC" /></p>

<p><img src="/images/pep_in_muc2.png" alt="Tune-2" title="PEP in MUC" /></p>

<p>Currently you can also send your mood to the room in the same manner. There
are some caveats of course. This only works for local users to the server,
and by its nature the node access models are not being respected. But since
the user themselves are initiating the 'explicit pubsub notification' this
latter caveat does not seem like an issue to me.</p>

<p><a href="http://code.google.com/p/pep-in-muc/">Grab the plugin</a> for your Openfire server and ... revert back to the
stone age?</p>
</div>
</content>

</entry>
<entry>
<title type="html">PEP in Openfire: Complete</title>
<author>
<name>AJagucki</name>
</author>
<link rel="alternate" type="text/html" href="http://caustiq.esoteriq.org/nb/archives/2007/08/#e2007-08-19T21_56_08.txt"/>
<id>http://caustiq.esoteriq.org/nb/archives/2007/08/#e2007-08-19T21_56_08.txt</id>
<published>2007-08-19T21:56:08-07:00</published>
<updated>2007-08-19T21:56:08-07:00</updated>
<category term="Programming" />
<category term="Jabber" />
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<p>Openfire now has a complete implementation of Personal Eventing via Pubsub
(XEP-0163). According to Gaston, my work on PEP will be included in the next
Openfire release (3.4.0 I believe). For more information on the implementation
and pointers to its source code, visit the <a href="http://caustiq.esoteriq.org/projects/pep/">project's section</a> on my main
site.</p>

<p>Below you will find the deliverables that I indicated I would provide in the
Google Summer of Code proposal at the beginning of the summer:</p>

<ul>
<li><a href="http://caustiq.esoteriq.org/projects/pep/pep_sys_tests.pdf">System test plan document</a></li>
<li><a href="http://caustiq.esoteriq.org/projects/pep/pep_design.pdf">Architectural and detailed design document</a></li>
<li><a href="http://caustiq.esoteriq.org/projects/pep/index.shtml#source">Implementation disseminated through a SCMS</a></li>
<li><a href="http://caustiq.esoteriq.org/projects/pep/doc/">Documentation</a></li>
<li>Report on final testing and evaluation will be available on code.google.com
in the GSoC dashboard.</li>
</ul>

<p>With the meat of this post out of the way, I want to let it be known that I
had an absolute blast coding this summer. Meeting Gaston and being able to
collaborate with him in person at the Jive offices was a real highlight of it
all. I am looking forward to further collaboration with Gaston as I maintain
the PEP implementation in the future. I am also happy to have met everyone in
XSF, including Peter Saint-Andre and Kevin Smith. You guys are awesome.</p>

<p>My efforts will not stop here. With new versions of XEP-0163 and XEP-0060 on
the way, I have already talked to Gaston about helping to implement these new
versions in the future.</p>

<p>Until then, cheers!  <img src="http://caustiq.esoteriq.org/nb/moods/smilies/smiley.gif" alt=":)" /></p>
</div>
</content>

</entry>
<entry>
<title type="html">PEP in Openfire: Nearly Complete</title>
<author>
<name>AJagucki</name>
</author>
<link rel="alternate" type="text/html" href="http://caustiq.esoteriq.org/nb/archives/2007/08/#e2007-08-09T04_46_11.txt"/>
<id>http://caustiq.esoteriq.org/nb/archives/2007/08/#e2007-08-09T04_46_11.txt</id>
<published>2007-08-09T04:46:11-07:00</published>
<updated>2007-08-09T04:46:11-07:00</updated>
<category term="Programming" />
<category term="Jabber" />
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<p>I am pleased to announce that the Google Summer of Code project to implement
<a href="http://code.google.com/soc/xmpp/appinfo.html?csaid=3E0E4A887EE8F266">PEP in Openfire</a> is very nearly <em>complete</em>. It is indeed usable at the
moment and further below in this post you will find a public test server
running the latest revision available for you to play with.</p>

<p>A whole lot of progress was made in the last two weeks, including
implementations (along with c2s and s2s verifications) for the following
sections:</p>

<ul>
<li>Account Owner Publishing</li>
<li>Contact Notification Filtering</li>
<li>Generating Notifications</li>
<li>Sending the Last Published Item</li>
<li>Recommended Defaults</li>
</ul>

<p>The only section left to implement and verify is 14.1: '<a href="http://www.xmpp.org/extensions/xep-0163.html#impl-subscriptions">Cancelling
Subscriptions</a>.' The <a href="http://caustiq.esoteriq.org/projects/pep.shtml">PEP project page</a> on my main site has a table with
the current status of the project. That page might also contain links to a
beta release with pre-compiled JAR packages available to download in the near
future.</p>

<p>Until that time comes, you are welcome to join my friends and I on the public
test server by connecting to <strong><code>jabber.esoteriq.net</code></strong>. If you are looking for a
Jabber client to test PEP with, I recommend using either the latest version of
<a href="http://psi-im.org/development">Psi</a> or <a href="http://sourceforge.net/cvs/?group_id=68334">Coccinella</a> from their respective versioning repositories.
Keep in mind that this is a <em>development test server</em>. Expect restarts,
database resets, and even temporary downtime when the server gets updated to
the latest revision. Join us in the group chat at
<strong><code>pepdev@conference.jabber.esoteriq.net</code></strong> and say hello  <img src="http://caustiq.esoteriq.org/nb/moods/smilies/smiley.gif" alt=":)" /> . Direct bug reports
(and/or praises  <img src="http://caustiq.esoteriq.org/nb/moods/smilies/wink.gif" alt=";)" /> ) to one of the addresses listed in the contact section of
<a href="http://caustiq.esoteriq.org/nb/">my weblog</a>.</p>

<p>Also, thanks to Ben Slote for generously hosting the public test server.</p>
</div>
</content>

</entry>
<entry>
<title type="html">Accepted into Google Summer of Code 2007!</title>
<author>
<name>AJagucki</name>
</author>
<link rel="alternate" type="text/html" href="http://caustiq.esoteriq.org/nb/archives/2007/04/#e2007-04-15T03_14_04.txt"/>
<id>http://caustiq.esoteriq.org/nb/archives/2007/04/#e2007-04-15T03_14_04.txt</id>
<published>2007-04-15T03:14:04-07:00</published>
<updated>2007-04-15T03:14:04-07:00</updated>
<category term="Programming" />
<category term="Jabber" />
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<p>Last Wednesday I was informed that I have been accepted into this year's
instance of the <a href="http://code.google.com/soc/">Google Summer of Code</a> program! I was extremely excited
when I received confirmation as I am going to have an absolute <strong>blast</strong>
coding all summer.  <img src="http://caustiq.esoteriq.org/nb/moods/smilies/grin.gif" alt=":D" /> Approximately 6,200 university and college students
applied, and this year over 900 were accepted (up from about 600 chosen for
GSoC 2006).</p>

<p>The organization that I aimed my winning proposal at was the <a href="http://code.google.com/soc/xmpp/about.html">XMPP Standards
Foundation (XSF)</a>. The abstract of the proposal is available <a href="http://code.google.com/soc/xmpp/appinfo.html?csaid=3E0E4A887EE8F266">here</a>.
Many of you who know me also know how great of an instant messaging network I
think Jabber is--so it goes without saying that I am more than pleased to be
implementing a new portion of an awesome protocol like XMPP (in an equally
awesome cross-platform Jabber server, <a href="http://www.igniterealtime.org/projects/openfire/index.jsp">Openfire</a>).</p>

<p>As if this news was not amazing enough, my good friend <a href="http://buchan.esoteriq.org">Jared Hendry</a>
(buchan) had <a href="http://code.google.com/soc/mono/appinfo.html?csaid=4AE2BBB2B047AA19">his proposal</a> to the Mono Project accepted as well!  <img src="http://caustiq.esoteriq.org/nb/moods/smilies/cool.gif" alt="8)" /></p>

<p><em>WIN.</em></p>
</div>
</content>

</entry>
<entry>
<title type="html">esosync - An rsync script for dreamhost</title>
<author>
<name>AJagucki</name>
</author>
<link rel="alternate" type="text/html" href="http://caustiq.esoteriq.org/nb/archives/2007/02/#e2007-02-04T03_06_43.txt"/>
<id>http://caustiq.esoteriq.org/nb/archives/2007/02/#e2007-02-04T03_06_43.txt</id>
<published>2007-02-04T03:06:43-07:00</published>
<updated>2007-02-04T03:06:43-07:00</updated>
<category term="Random" />
<category term="Programming" />
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<p>This is a generalized wrapper script around rsync that I use to keep my
website synchronized to a local directory on my workstation. <a href="http://rsync.samba.org">rsync</a> is a
powerful tool. Instead of using an ftp script that just blindly overwrites any
files you tell it to, rsync actually uses a differential algorithm to only
transfer the bytes that have changed. On top of that, you can compress those
bytes before the sync, resulting in an even quicker transfer.</p>

<p>I have instructed esosync to call rsync with a number of useful options.
Here's a snippet from the script:</p>

<pre><code>'--verbose',            # increase verbosity
'--progress',           # show progress during transfer
'--stats',              # prints extra statistics
'--compress',           # compress file data during the transfer
'--rsh=/usr/bin/ssh',   # use ssh as an alternative remote shell (secure)
'--recursive',          # copy directories recursively
'--times',              # transfer modification times
'--perms',              # keep file permissions synchronized
'--links',              # if symlinks are encountered, recreate on web host
'--delete',             # delete extraneous files from the receiving side
</code></pre>

<p>It is a lot more useful if you have set ssh up to use a public key for login
authorization to dreamhost. Then you can use this script within other scripts
or a cron job. I happen to use it as nanoblogger's publish command:</p>

<pre><code>BLOG_PUBLISH_CMD="esosync"
</code></pre>

<p>Download the script: <a href="/code/esosync.perl">esosync.perl</a></p>

<p>You will just have to edit a few variables near the header.</p>
</div>
</content>

</entry>
<entry>
<title type="html">Video Game Database</title>
<author>
<name>AJagucki</name>
</author>
<link rel="alternate" type="text/html" href="http://caustiq.esoteriq.org/nb/archives/2007/02/#e2007-02-04T00_25_23.txt"/>
<id>http://caustiq.esoteriq.org/nb/archives/2007/02/#e2007-02-04T00_25_23.txt</id>
<published>2007-02-04T00:25:23-07:00</published>
<updated>2007-02-04T00:25:23-07:00</updated>
<category term="Random" />
<category term="Programming" />
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<p>Last term one of my courses at the local university was about database
management systems. From UML diagrams to foreign key constraints to <a href="http://en.wikipedia.org/wiki/Boyce-Codd_normal_form">Boyce-Codd
normal form</a>, it covered all of the more important topics. Towards the end
of the term we were asked to design our own database and implement a client to
it in a language of our choice. Ahh, a chance to code. The course became
interesting all of a sudden.  <img src="http://caustiq.esoteriq.org/nb/moods/smilies/wink.gif" alt=";)" /></p>

<p>I designed a database for a sort of <a href="http://www.gamerankings.com">gamerankings</a>-esque style of handling video
game reviews. With it, you can add reviews from a number of different
publications and find the average (meta) score for the game. There's a few
other twists involved too. You can add publishing companies along with
development houses for the games and tons of other data. Then you can filter
through the database on pretty much any key. If you want a list of the Mature
rated games for the Super Dreamcast 360 console developed by Luser Studios,
you can get one quickly.  <img src="http://caustiq.esoteriq.org/nb/moods/smilies/cool.gif" alt="8)" /></p>

<p>Try out <a href="/vgdb">the video game database</a> demo.</p>

<p>I decided to use PHP for the client since I haven't really used the language
all that much. It also plays nice with MySQL, the DBMS I chose, so that was a
factor in the decision as well. You might recognize the style sheet used.  <img src="http://caustiq.esoteriq.org/nb/moods/smilies/smiley.gif" alt=":)" /></p>
</div>
</content>

</entry>
<entry>
<title type="html">nb-html2md - A nanoblogger tool</title>
<author>
<name>AJagucki</name>
</author>
<link rel="alternate" type="text/html" href="http://caustiq.esoteriq.org/nb/archives/2006/09/#e2006-09-03T10_31_54.txt"/>
<id>http://caustiq.esoteriq.org/nb/archives/2006/09/#e2006-09-03T10_31_54.txt</id>
<published>2006-09-03T10:31:54-07:00</published>
<updated>2006-09-03T10:31:54-07:00</updated>
<category term="Random" />
<category term="Programming" />
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<p>I became interested in <a href="http://nanoblogger.sf.net">nanoblogger's</a> support for <a href="http://daringfireball.net/projects/markdown">Markdown</a>, <em>"a
text-to-HTML conversion tool for web writers."</em> Now I don't have a problem
writing raw HTML, as I have done so naturally for all my previous entries.
However, I cannot write <a href="http://w3.org">W3C</a> valid XHTML easily.  <img src="http://caustiq.esoteriq.org/nb/moods/smilies/smiley.gif" alt=":)" /> Markdown is a plain
text formatting syntax, and also a Perl program that converts the formatting
to HTML.</p>

<p>Now, in the spirit of consistency, I have written a Perl program that converts
nanoblogger's metafiles from HTML to Markdown. This may seem redundant to
those who don't know how nanoblogger works.  <img src="http://caustiq.esoteriq.org/nb/moods/smilies/grin.gif" alt=":D" /></p>

<p>Nanoblogger uses its metafiles to generate HTML that can then be modified 
and/or validated with plugins. I prefer to use a program's accuracy to ensure
the HTML generated by the Markdown formatting is W3C valid.  <img src="http://caustiq.esoteriq.org/nb/moods/smilies/wink.gif" alt=";)" /> Plus, reading and
writing <a href="http://daringfireball.net/projects/markdown/syntax">Markdown syntax</a> is a breeze.</p>

<p>If you have been using raw HTML to create your nanoblogger entries, and you
wish to switch to Markdown formatting, this tool will help you cope with the
thought of having inconsistent metafiles.  <img src="http://caustiq.esoteriq.org/nb/moods/smilies/smiley.gif" alt=":)" /> It uses <a href="http://www.aaronsw.com/2002/html2text">html2text.py</a> so you
will of course need that as well. Be sure to backup your metafiles before
using this tool, as it will modify your files without intervention.</p>

<p><strong>Download</strong>: <a href="/code/nb-html2md.perl">nb-html2md.perl</a></p>

<p>After the conversion, I was pleased to see this site is now W3C XHTML and CSS
<a href="http://validator.w3.org/check?uri=referer">valid</a>.</p>
</div>
</content>

</entry>
<entry>
<title type="html">GTA2SGE 1.0 ... or 'Qt 4 is superb!'</title>
<author>
<name>AJagucki</name>
</author>
<link rel="alternate" type="text/html" href="http://caustiq.esoteriq.org/nb/archives/2006/09/#e2006-09-03T09_23_52.txt"/>
<id>http://caustiq.esoteriq.org/nb/archives/2006/09/#e2006-09-03T09_23_52.txt</id>
<published>2006-09-03T09:23:52-07:00</published>
<updated>2006-09-03T09:23:52-07:00</updated>
<category term="Programming" />
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<p>GTA2SGE is a save game editor for a classic PC game; Grand Theft Auto 2 by
Rockstar Games. Rockstar has made GTA2 freely available at <a href="http://www.rockstargames.com/classics">Rockstar
Classics</a>. For new comers to the series, GTA2 is required playing. This
program was developed as an intellectual exercise and also to pay homage to
one of my favorite gaming series.</p>

<p>If you use GNU/Linux, you may be happy to know that GTA2 runs great under
<a href="http://www.winehq.com">wine</a>, an Open Source implementation of the Windows API on top of X and
Unix.  <img src="http://caustiq.esoteriq.org/nb/moods/smilies/smiley.gif" alt=":)" /> Although I have yet to try network multiplayer since no one I know
has a copy. But hey, I'm open for a
<a href="mailto:caustiq{at}esoteriq.org?subject=GTA2%20Multiplayer">challenge</a>.  <img src="http://caustiq.esoteriq.org/nb/moods/smilies/cool.gif" alt="8)" /></p>

<p>The interface was created with the Open Source Edition of <a href="http://www.trolltech.com">Qt 4</a>, a
high-performance, cross-platform application development framework. For those
who are unfamiliar with Qt, I will give a short run down on my favorite
features. Firstly, it supports multiple platforms. You only need to write your
code <em>once</em>, yet you can compile for all of the widely used operating systems.
Code developed with Qt runs natively on GNU/Linux, Windows, and OS X to name
the popular ones. The widgets will be drawn using whatever theme engine the
operating system uses normally. Secondly, writing code using Qt's extensive
classes is intuitive and feels like the 'right way' to be programming GUIs. If
you're at all interested, do yourself a favor and read <a href="http://www.amazon.com/C++-GUI-Programming-Qt-4/dp/0131872494">C++ Programming With
Qt 4</a>.</p>

<p><strong>Download</strong>:</p>

<ul>
<li>GNU/Linux: <a href="/code/gta2sge-1.0.tar.gz">gta2sge-1.0.tar.gz</a></li>
<li>Windows: <a href="/code/gta2sge-1.0-win32.rar">gta2sge-1.0-win32.rar</a></li>
</ul>

<p><strong>Screenshots</strong>:</p>

<ul>
<li><a href="/images/gta2sge-1.0.png">gta2sge-1.0.png</a></li>
<li><a href="/images/gta2sge-1.0-about.png">gta2sge-1.0-about.png</a></li>
</ul>

<p><strong>Changes</strong>:</p>

<ul>
<li>Ported from Qt 3 to Qt 4.</li>
<li>Respect-O-Meter sliders fully functional.</li>
</ul>
</div>
</content>

</entry>
<entry>
<title type="html">shred-konq-cache - Shred Konqueror's http, favicons, and thumbnail</title>
<author>
<name>AJagucki</name>
</author>
<link rel="alternate" type="text/html" href="http://caustiq.esoteriq.org/nb/archives/2006/08/#e2006-08-02T07_51_13.txt"/>
<id>http://caustiq.esoteriq.org/nb/archives/2006/08/#e2006-08-02T07_51_13.txt</id>
<published>2006-08-02T07:51:13-07:00</published>
<updated>2006-08-02T07:51:13-07:00</updated>
<category term="Programming" />
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<p>Here is some perl magic for you KDE users who wish to securely unlink the
more revealing data that Konqueror caches.</p>

<p>Aside from shredding the http cache, this program also shreds the
favicons. Now why would we want to go and shred our favicons? Only
because Konqueror names each favicon after the site for which it belongs
to (e.g. caustiq.esoteriq.org_nb_images_favicon.png), leaving a trail
of visisted sites you may not have been aware existed. Furthermore, the
'Clear Cache' function in Konqueror's configuration dialog doesn't bother
to remove these favicons.</p>

<p>In addition, the program also shreds the thumbnails that Konqueror generates
for its image previews in file browsing mode. Shredding your sensitive
images is pointless if there were thumbnails generated for those very
images sitting in a hidden directory.</p>

<p><a href="/code/shred-konq-cache.perl">Download shred-konq-cache.perl</a>.</p>

<p><em>"If you think technology can solve your security problems, then you don't
understand the problems and you don't understand the technology."</em>
--Bruce Schneier</p>
</div>
</content>

</entry>
<entry>
<title type="html">sjm - Send Jabber Message</title>
<author>
<name>AJagucki</name>
</author>
<link rel="alternate" type="text/html" href="http://caustiq.esoteriq.org/nb/archives/2006/07/#e2006-07-19T12_21_54.txt"/>
<id>http://caustiq.esoteriq.org/nb/archives/2006/07/#e2006-07-19T12_21_54.txt</id>
<published>2006-07-19T12:21:54-07:00</published>
<updated>2006-07-19T12:21:54-07:00</updated>
<category term="Programming" />
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<p>After having consumed <a href="http://www.oreilly.com/catalog/jabber/"> Programming Jabber</a>, I decided to introduce
myself to the <a href="http://search.cpan.org/author/REATMON/Net-Jabber-2.0/lib/Net/Jabber/Client.pm">Net::Jabber::Client</a> module from CPAN. Below is a script
that allows you to send a message to a JID from the shell.</p>

<p>It is worth noting that Jabber and the XMPP is not limited to mere instant
messaging. Jabber is simply an XML router. XML streams being the underlying
data format for the XMPP. These XML-based payloads carried in synchronous
and asynchronous modes allow Jabber to act as a transport glue in other
application domains outside of its messaging world.</p>

<p>Quoting from the aforementioned book, <em>"The XML Remote Procedure Call
(XML-RPC) specification and the Simple Object Access Protocol (SOAP)
both formalize method calls and responses in XML. XML-RPC was designed to
use HTTP to carry those encoded calls and responses between endpoints,
and SOAP can use HTTP too. What if we carry XML-RPC or SOAP payloads in
Jabber? We immediately see the step-change increase in contextual richness;
XML-RPC interactivity becomes part of a wider, all-encompassing conversation
between applications and humans. Traditional IM-based clients, applications
using client stub libraries, and components can all make use of the power of
what these technologies have to offer, without having to leave the comfort
of their Jabber environment, which can serve as a messaging plasma between
all sorts of entities and services."</em></p>

<p>Exploring the 'Application to Client' and 'Application to Application'
vectors further, I should have some interesting programs available for
you to check out in the near future.</p>

<p><a href="/code/sjm.perl">Download sjm.perl</a>.</p>

<p><em>"Programming is not a zero-sum game. Teaching something to a fellow
programmer doesn't take it away from you. I'm happy to share what I can,
because I'm in it for the love of programming."</em> <br />
--John Carmack</p>
</div>
</content>

</entry>

</feed>
