<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Projects | Flyn Computing</title>
    <link>https://www.flyn.org/projects/</link>
      <atom:link href="https://www.flyn.org/projects/index.xml" rel="self" type="application/rss+xml" />
    <description>Projects</description>
    <generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Thu, 02 Oct 2025 10:15:55 -0400</lastBuildDate>
    <image>
      <url>https://www.flyn.org/media/icon_hu_9860572c80cba4e6.png</url>
      <title>Projects</title>
      <link>https://www.flyn.org/projects/</link>
    </image>
    
    <item>
      <title>gowasmdemo</title>
      <link>https://www.flyn.org/projects/gowasmdemo/</link>
      <pubDate>Thu, 02 Oct 2025 10:15:55 -0400</pubDate>
      <guid>https://www.flyn.org/projects/gowasmdemo/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;This project provides a starting point for web applications written
entirely in Go. The client-side portion of the example compiles to
WebAssembly.&lt;/p&gt;
&lt;h1 id=&#34;downloads&#34;&gt;Downloads&lt;/h1&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	



	&lt;p&gt;
		The gowasmdemo project is 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone https://www.flyn.org/git/gowasmdemo&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>reflectcrud</title>
      <link>https://www.flyn.org/projects/reflectcrud/</link>
      <pubDate>Sun, 09 Mar 2025 10:07:45 -0400</pubDate>
      <guid>https://www.flyn.org/projects/reflectcrud/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;Reflectcrud allows for a Go program to interact with an SQL database
using reflection. For example, you can create a table in a database
by providing only a Go structure that contains a few field tags.&lt;/p&gt;
&lt;h1 id=&#34;downloads&#34;&gt;Downloads&lt;/h1&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	



	&lt;p&gt;
		The reflectcrud project is 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone https://www.flyn.org/git/reflectcrud&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>alpine-build</title>
      <link>https://www.flyn.org/projects/alpine-build/</link>
      <pubDate>Sat, 09 Jul 2022 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/alpine-build/</guid>
      <description>&lt;p&gt;The alpine-build script builds an Alpine disk image from a JSON-encoded
definition. See definitions/example.json for one such definition.&lt;/p&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	



	&lt;p&gt;
		The alpine-build project is 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone https://www.flyn.org/git/alpine-build&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>golatex</title>
      <link>https://www.flyn.org/projects/golatex/</link>
      <pubDate>Thu, 14 Apr 2022 09:28:26 -0400</pubDate>
      <guid>https://www.flyn.org/projects/golatex/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;GoLaTeX provides routines for the Go programming language that
are helpful when writing code that involves LaTeX.&lt;/p&gt;
&lt;h1 id=&#34;downloads&#34;&gt;Downloads&lt;/h1&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	



	&lt;p&gt;
		The golatex project is 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone https://www.flyn.org/git/golatex&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>safe</title>
      <link>https://www.flyn.org/projects/safe/</link>
      <pubDate>Thu, 14 Apr 2022 09:28:26 -0400</pubDate>
      <guid>https://www.flyn.org/projects/safe/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;Safe provides routines for the Go programming language that sanitize,
unmarshal, and marshal input.&lt;/p&gt;
&lt;h1 id=&#34;downloads&#34;&gt;Downloads&lt;/h1&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	



	&lt;p&gt;
		The safe project is 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone https://www.flyn.org/git/safe&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>wasm</title>
      <link>https://www.flyn.org/projects/wasm/</link>
      <pubDate>Thu, 14 Apr 2022 09:28:26 -0400</pubDate>
      <guid>https://www.flyn.org/projects/wasm/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;Wasm provides routines for the Go programming language that
are helpful when writing code that is compiled to WebAssembly.&lt;/p&gt;
&lt;h1 id=&#34;downloads&#34;&gt;Downloads&lt;/h1&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	



	&lt;p&gt;
		The wasm project is 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone https://www.flyn.org/git/wasm&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>Aquinas</title>
      <link>https://www.flyn.org/projects/Aquinas/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/Aquinas/</guid>
      <description>&lt;p&gt;Aquinas is an interactive learning system that aims to teach computer
programming and exploit development.  Teachers define programming
projects, and students complete the projects and submit their work using
Git. Aquinas provides a website that lists the projects and provides
a summary of each student&amp;rsquo;s progress.&lt;/p&gt;
&lt;p&gt;A number of goals drove the design of Aquinas:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Allow for projects that involve network programming and exploit
development.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Facilitate easy-to-define projects with a consistent specification
language.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ease reuse of projects across many programming languages.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Allow for high-quality assignment instructions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Provide a web- and Git-based interface to students.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Provide for automated grading and student feedback.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Apply the principle of least privilege and use a type-safe language.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;aquinas-dependencies&#34;&gt;Aquinas dependencies&lt;/h1&gt;
&lt;p&gt;Building, configuring, and deploying Aquinas requires the following
software:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;make&lt;/li&gt;
&lt;li&gt;GCC, including support for C++ (to build VMs)&lt;/li&gt;
&lt;li&gt;A C library suitable for static linking&lt;/li&gt;
&lt;li&gt;expect&lt;/li&gt;
&lt;li&gt;qemu-system-x86&lt;/li&gt;
&lt;li&gt;The Go programming language&lt;/li&gt;
&lt;li&gt;The Perl programming language (to build VMs)&lt;/li&gt;
&lt;li&gt;The jq JSON parser&lt;/li&gt;
&lt;li&gt;Git&lt;/li&gt;
&lt;li&gt;An ssh client&lt;/li&gt;
&lt;li&gt;LaTeXML and TeX Live&lt;/li&gt;
&lt;li&gt;The tidy HTML beautifier&lt;/li&gt;
&lt;li&gt;The dig DNS resolver&lt;/li&gt;
&lt;li&gt;The Hugo website generator&lt;/li&gt;
&lt;li&gt;The wget HTTP utility (to build VMs)&lt;/li&gt;
&lt;li&gt;which&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;obtaining-aquinas&#34;&gt;Obtaining Aquinas&lt;/h1&gt;
&lt;p&gt;Download Aquinas using:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone --recurse-submodules https://www.flyn.org/git/aquinas
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;building-aquinas&#34;&gt;Building Aquinas&lt;/h1&gt;
&lt;p&gt;Building Aquinas can take a long time. If you prefer to install
Aquinas using the binary VM images we provide, then download them from
&lt;a href=&#34;https://www.flyn.org/projects/Aquinas&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.flyn.org/projects/Aquinas&lt;/a&gt;,
and skip to the section titled &amp;ldquo;Configuring and deploying Aquinas.&amp;rdquo;&lt;/p&gt;
&lt;h2 id=&#34;quick-check&#34;&gt;Quick check&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Run &amp;ldquo;make deps all&amp;rdquo;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run &amp;ldquo;(sudo) ./build/httpd -dummy -root www/public/&amp;rdquo;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You should now be able to browse to http://localhost/. The dynamic
aspects of Aquinas will not work without a full installation, but you
should be able to review most of Aquinas&amp;rsquo; look and feel using this
dummy mode.&lt;/p&gt;
&lt;h2 id=&#34;full-build&#34;&gt;Full build&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Review aquinas-build.json to facilitate installing Aquinas at your
site. The default values should be adequate in most cases.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run &amp;ldquo;make deps all vms&amp;rdquo;. This will build some utilities and the Aquinas VMs.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;configuring-and-deploying-aquinas&#34;&gt;Configuring and deploying Aquinas&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install your public SSH key the VMs by running
&amp;ldquo;./aquinas-setup-ssh-developer DEVELOPER-HOME/.ssh/id_rsa.pub&amp;rdquo; with
root privileges. (Mounting the VM disk images requires root privileges.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install each disk image (e.g.,
aquinas-git-alpine-x86-64.img) and each domain configuration (e.g.,
vm-aquinas-git.cfg) so that they can be run by your hypervisor. Edit
each domain configuration to suit your needs.  (Note that you will need
to build a new VM around each disk image if not using Xen.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Update your DHCP service to provide the correct IP address to each
domain. Refer to each domain configuration for the host&amp;rsquo;s MAC address.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Update your DNS service to provide an appropriate A record for each
domain. Refer to each domain configuration for the host&amp;rsquo;s name.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Start each configured VM.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use SSH to sign in on each VM to edit /etc/aquinas/aquinas.json. It
is likely you will need to modify &amp;ldquo;domain,&amp;rdquo; &amp;ldquo;logServer,&amp;rdquo; &amp;ldquo;emailRegex,&amp;rdquo;
&amp;ldquo;emailRelay,&amp;rdquo; emailSender,&amp;quot; and &amp;ldquo;emailSenderName.&amp;rdquo;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install a certificate and private key in aquinas-www&amp;rsquo;s /etc/httpd
directory, writing them to the files aquinas.cert and aquinas.key,
respectively.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Configure syslog-ng on each VM. The /etc/hosts files on aquinas-user
and aquinas-target must contain records for the syslog server (which
accepts connections on TCP port 6514), as their firewall prohibits
DNS queries.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Configure collectd on each VM. The /etc/hosts files on aquinas-user
and aquinas-target must contain records for the collectd server (which
accepts connections on UDP port 25826), as their firewall prohibits
DNS queries.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add a record for your target host to /etc/hosts on your user host;
neither can make DNS requests, as their firewall prohibits DNS queries.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add a record for your user host to /etc/hosts on your target host.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add &amp;ldquo;server [IP of git host]&amp;rdquo; to /etc/ntpd.conf on www, user, and target.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Edit /etc/config/system on each VM. You might need to adjust the timezone,
and you should set the NTP server to the IP address of aquinas-git
host on all of the VMs except for aquinas-git. Note that the firewall
rules will allow NTP queries from aquinas-user and aquinas-target only
to aquinas-git, and these hosts can only reference aquinas-git by its
IP address due to the firewall blocking DNS.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On your development computer, run &amp;ldquo;./aquinas-setup-ssh&amp;rdquo;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On aquinas-www, run &amp;ldquo;sudo -u http aquinas-add-student test PASSWORD &amp;lsquo;Test Account&amp;rsquo;&amp;rdquo;.
Ensure you select a strong password to replace PASSWORD.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On your development computer, run &amp;ldquo;./aquinas-add-teacher
DEVELOPER-HOME/.ssh/id_rsa.pub&amp;rdquo;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Push a projects repository to aquinas-git:/home/teacher/projects.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Push a records repository to aquinas-git:/home/teacher/records.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Push the HTML documents to aquinas-www using &lt;code&gt;make all publish&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On your development computer and from the directory test/, run
&amp;ldquo;./test-all.&amp;rdquo;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;writing-a-project&#34;&gt;Writing a project&lt;/h1&gt;
&lt;p&gt;Writing a project is a matter of creating a machine-readable JSON file
to define the project and a LaTeX (or Markdown) fragment to instruct
students in how to complete the project.&lt;/p&gt;
&lt;h2 id=&#34;project-definition&#34;&gt;Project definition&lt;/h2&gt;
&lt;p&gt;Here is the definition of a very simple project named &lt;em&gt;unix&lt;/em&gt;. The
absence of the &lt;em&gt;checks&lt;/em&gt; keyword means that Aquinas will not grade this
project. Because &lt;em&gt;languages&lt;/em&gt; is set to &lt;em&gt;none&lt;/em&gt;, Aquinas will generate no
language-specific variants of this project. Perhaps this project could
guide the student through an introduction to UNIX without requiring a
graded deliverable.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &amp;#34;name&amp;#34;: &amp;#34;unix&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&amp;#34;summary&amp;#34;: &amp;#34;An introduction to Unix and the Bourne shell&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &amp;#34;languages&amp;#34;: [ &amp;#34;none&amp;#34; ]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Here is another language-agnostic project. This project, &lt;em&gt;git&lt;/em&gt;, assumes
the completion of &lt;em&gt;unix&lt;/em&gt;. Aquinas will take this into account when
ordering the list of projects presented to a student.  This project
provides a check (&lt;em&gt;checks&lt;/em&gt;); running the &lt;em&gt;command&lt;/em&gt; &lt;em&gt;cat NOTES&lt;/em&gt; from the
root of the student&amp;rsquo;s Git repository should print &amp;ldquo;In case of fire: git
commit, git push, and leave the building!&amp;rdquo; to standard out. (I.e., the file
NOTES should exist in the Git repository and it should contain &amp;ldquo;In case
of fire: &amp;hellip;&amp;rdquo;)&lt;/p&gt;
&lt;p&gt;The value in the &lt;em&gt;stdout&lt;/em&gt; field is this string, base64 encoded (but not
depicted in its entirety here). The base64 encoding is to allow such
values to contain binary data.&lt;/p&gt;
&lt;p&gt;Aquinas will present the string defined in a check&amp;rsquo;s hint field as part
of the feedback it provides upon grading a failed submission.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&amp;#34;name&amp;#34;: &amp;#34;git&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&amp;#34;summary&amp;#34;: &amp;#34;An introduction to the Git version control system&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&amp;#34;languages&amp;#34;: [
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&amp;#34;none&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	],
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&amp;#34;prerequisites&amp;#34;: [
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&amp;#34;unix&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	],
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&amp;#34;checks&amp;#34;: [
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		{
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&amp;#34;type&amp;#34;: &amp;#34;basic&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&amp;#34;parameters&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&amp;#34;command&amp;#34;: &amp;#34;cat NOTES&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&amp;#34;stdin&amp;#34;: null,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&amp;#34;stdout&amp;#34;: &amp;#34;SW4gY2Fz...&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&amp;#34;stderr&amp;#34;: null,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&amp;#34;exitCode&amp;#34;: 0,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&amp;#34;hint&amp;#34;: &amp;#34;Does your NOTES file contain the correct string?&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Using a check of kind &lt;em&gt;compare&lt;/em&gt; causes Aquinas to evaluate student work
in a different way. With &lt;em&gt;compare&lt;/em&gt; checks, Aquinas can reveal its test
inputs without allowing the student to tailor his solution to a limited
test plan.  The idea is to use a generator to produce random input that is
well-formed with respect to the project definition. Aquinas generates such
input, which it provides both to the reference solution and the student
submission. If the programs&amp;rsquo; outputs match, then Aquinas deems the student
submission correct. Otherwise, the student submission is incorrect.
A &lt;em&gt;compare&lt;/em&gt; check requires the definition of a &lt;em&gt;reference&lt;/em&gt; solution
along with a program that generates standard input data (&lt;em&gt;genstdin&lt;/em&gt;)
or a program that generates command-line arguments (&lt;em&gt;gencmdargs&lt;/em&gt;).
The following example demonstrates a &lt;em&gt;compare&lt;/em&gt; check that generates
standard input data.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&amp;#34;kind&amp;#34;: &amp;#34;compare&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&amp;#34;parameters&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&amp;#34;command&amp;#34;: &amp;#34;./project&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&amp;#34;reference&amp;#34;: &amp;#34;projectC.c&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&amp;#34;genstdin&amp;#34;: &amp;#34;generator-project.c&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;},
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Assume the project processes non-negative integers, read from standard
input. The following definition of &lt;em&gt;generator-project.c&lt;/em&gt; generates
such inputs.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;stdlib.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;sys/time.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;timeval&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nf&#34;&gt;gettimeofday&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;NULL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nf&#34;&gt;srand&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;unsigned&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tv_sec&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tv_usec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nf&#34;&gt;printf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;%d&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;rand&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The use of &lt;em&gt;gencmdargs&lt;/em&gt; is similar. Aquinas assumes each line printed by
this type of generator represents a command-line argument.  Aquinas will
compile and deploy generators and reference solutions that exist in a
project&amp;rsquo;s directory and are referenced by a &lt;em&gt;compare&lt;/em&gt; check.&lt;/p&gt;
&lt;p&gt;A student may submit the following project in C or Python. In the case of
C, the submission should contain &lt;em&gt;hello.c&lt;/em&gt;, and this file should compile
to a program that prints &amp;ldquo;Hello, world\n&amp;rdquo;. A Python submission should
take the form of &lt;em&gt;hello&lt;/em&gt; as an executable script (i.e., with shebang). As
with the previous example, the value of &lt;em&gt;stdout&lt;/em&gt; is base64 encoded to
support binary data.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&amp;#34;name&amp;#34;: &amp;#34;hello&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&amp;#34;summary&amp;#34;: &amp;#34;Printing to the screen&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&amp;#34;languages&amp;#34;: [
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&amp;#34;C&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&amp;#34;Python&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	],
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&amp;#34;prerequisites&amp;#34;: [
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&amp;#34;git&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	],
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&amp;#34;checks&amp;#34;: [
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		{
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&amp;#34;type&amp;#34;: &amp;#34;basic&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&amp;#34;parameters&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&amp;#34;command&amp;#34;: &amp;#34;./hello&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&amp;#34;stdin&amp;#34;: null,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&amp;#34;stdout&amp;#34;: &amp;#34;SGVsbG8sIHdvcmxkIQo=&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&amp;#34;stderr&amp;#34;: null,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&amp;#34;exitCode&amp;#34;: 0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The following network project installs a service, defined in &lt;em&gt;network.go&lt;/em&gt;,
on Aquinas&amp;rsquo; target host. A correct solution will interact with this
service as the project instructions prescribe to produce the output
required by the project&amp;rsquo;s checks. The value of &lt;em&gt;source&lt;/em&gt; minus its
extension must match the value of &lt;em&gt;name&lt;/em&gt;, and every project must bear a
unique &lt;em&gt;port&lt;/em&gt;. Note that Aquinas will replace &lt;em&gt;TARGET&lt;/em&gt; with the target
host&amp;rsquo;s name when performing this check.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;s2&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;network&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;s2&#34;&gt;&amp;#34;summary&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Programming a TCP/IPv4 client&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;s2&#34;&gt;&amp;#34;languages&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;s2&#34;&gt;&amp;#34;C&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;s2&#34;&gt;&amp;#34;Go&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;s2&#34;&gt;&amp;#34;Python&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;s2&#34;&gt;&amp;#34;prerequisites&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;s2&#34;&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;s2&#34;&gt;&amp;#34;variables&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;s2&#34;&gt;&amp;#34;checks&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;s2&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;basic&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;s2&#34;&gt;&amp;#34;parameters&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&lt;span class=&#34;s2&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;./network TARGET 1025&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&lt;span class=&#34;s2&#34;&gt;&amp;#34;stdin&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&lt;span class=&#34;s2&#34;&gt;&amp;#34;stdout&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;...&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&lt;span class=&#34;s2&#34;&gt;&amp;#34;stderr&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&lt;span class=&#34;s2&#34;&gt;&amp;#34;exitCode&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;s2&#34;&gt;&amp;#34;services&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;s2&#34;&gt;&amp;#34;source&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;service-network.go&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;s2&#34;&gt;&amp;#34;port&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1025&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Adding the following within a particular service&amp;rsquo;s definition makes the
service binary available for download.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &amp;#34;publish_binary&amp;#34;: true
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A teacher can also specify flags in a service definition that Aquinas
will pass to the compiler when building the service binary:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &amp;#34;compiler_flags&amp;#34;: &amp;#34;-fstack-protector&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;When presenting lists of projects, Aquinas will make use of tags for
organization. A set of tags augment the language categories:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&amp;#34;tags&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&amp;#34;Exploitation&amp;#34;: true
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Sometimes it might be useful to directly call functions in a project
solution when testing. An &lt;em&gt;altmain&lt;/em&gt; statement allows this. For example,
if &lt;em&gt;altmain&lt;/em&gt; is defined as &lt;em&gt;true&lt;/em&gt; for C, Aquinas will compile the
submitted program such that the function &lt;em&gt;main2&lt;/em&gt; in the teacher-defined
file main2.c serves as the program&amp;rsquo;s main function.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;s2&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;functions&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;s2&#34;&gt;&amp;#34;summary&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Abstraction and code reuse using functions&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;s2&#34;&gt;&amp;#34;languages&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;s2&#34;&gt;&amp;#34;C&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;s2&#34;&gt;&amp;#34;Go&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;s2&#34;&gt;&amp;#34;Python&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;s2&#34;&gt;&amp;#34;prerequisites&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;s2&#34;&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;s2&#34;&gt;&amp;#34;variables&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;s2&#34;&gt;&amp;#34;altmain&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;s2&#34;&gt;&amp;#34;C&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;s2&#34;&gt;&amp;#34;Go&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;s2&#34;&gt;&amp;#34;Python&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;s2&#34;&gt;&amp;#34;checks&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;s2&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;basic&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;s2&#34;&gt;&amp;#34;parameters&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&lt;span class=&#34;s2&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;./functions&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&lt;span class=&#34;s2&#34;&gt;&amp;#34;stdin&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&lt;span class=&#34;s2&#34;&gt;&amp;#34;stdout&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;...&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&lt;span class=&#34;s2&#34;&gt;&amp;#34;stderr&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&lt;span class=&#34;s2&#34;&gt;&amp;#34;exitCode&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Aquinas supports solution templates, which provide students with a
starting point for their solution. In this example, the values of
&lt;em&gt;templates&lt;/em&gt; should correspond with template files for C, Go, and Python.
These files must exists in the same Git repository as this description,
and Aquinas will copy them to the students&amp;rsquo; &lt;em&gt;variables&lt;/em&gt; repositories.
If the template value is a directory, then Aquinas will copy all of the files
in that directory to the root of the student&amp;rsquo;s repository.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;s2&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;variables&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;s2&#34;&gt;&amp;#34;summary&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Programming language variables and arithmetic operators&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;s2&#34;&gt;&amp;#34;languages&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;s2&#34;&gt;&amp;#34;C&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;s2&#34;&gt;&amp;#34;Go&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;s2&#34;&gt;&amp;#34;Python&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;s2&#34;&gt;&amp;#34;prerequisites&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;s2&#34;&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;s2&#34;&gt;&amp;#34;checks&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;s2&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;basic&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;s2&#34;&gt;&amp;#34;parameters&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&lt;span class=&#34;s2&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;./variables&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&lt;span class=&#34;s2&#34;&gt;&amp;#34;stdin&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;...&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&lt;span class=&#34;s2&#34;&gt;&amp;#34;stdout&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;...&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&lt;span class=&#34;s2&#34;&gt;&amp;#34;stderr&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&lt;span class=&#34;s2&#34;&gt;&amp;#34;exitCode&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;s2&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;basic&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;s2&#34;&gt;&amp;#34;parameters&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&lt;span class=&#34;s2&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;./variables&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&lt;span class=&#34;s2&#34;&gt;&amp;#34;stdin&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;...&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&lt;span class=&#34;s2&#34;&gt;&amp;#34;stdout&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;...&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&lt;span class=&#34;s2&#34;&gt;&amp;#34;stderr&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&lt;span class=&#34;s2&#34;&gt;&amp;#34;exitCode&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;s2&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;basic&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;s2&#34;&gt;&amp;#34;parameters&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&lt;span class=&#34;s2&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;./variables&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&lt;span class=&#34;s2&#34;&gt;&amp;#34;stdin&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;...&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&lt;span class=&#34;s2&#34;&gt;&amp;#34;stdout&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;...&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&lt;span class=&#34;s2&#34;&gt;&amp;#34;stderr&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				&lt;span class=&#34;s2&#34;&gt;&amp;#34;exitCode&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;s2&#34;&gt;&amp;#34;templates&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;s2&#34;&gt;&amp;#34;C&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;template-variablesC.c&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;s2&#34;&gt;&amp;#34;Go&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;template-variablesGo.go&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;s2&#34;&gt;&amp;#34;Python&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;template-variablesPython&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Aside from &lt;em&gt;templates&lt;/em&gt;, Aquinas supports the following file-related specifications.
Each of these name an array of strings:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;files&lt;/dt&gt;&lt;dd&gt;Causes grader to place files in student&#39;s submission directory after cloning it, possibly overwriting what is already there&lt;/dd&gt;
&lt;dt&gt;user_files&lt;/dt&gt;&lt;dd&gt;Places files in /usr/libexec/aquinas/files/PROJECT on aquinas-user, making them available to the grader&lt;/dd&gt;
&lt;dt&gt;service_files&lt;/dt&gt;&lt;dd&gt;Places files in /usr/libexec/aquinas/services/PROJECT on aquinas-target, making them available to the target service&lt;/dd&gt;
&lt;dt&gt;service_links&lt;/dt&gt;&lt;dd&gt;Set up a link on aquinas-target from the given path outside the service chroot to inside of the service chroot&lt;/dd&gt;
&lt;dt&gt;service_chroot_programs&lt;/dt&gt;&lt;dd&gt;Copies files from outside the target service chroot to inside the target service chroot&lt;/dd&gt;
&lt;/dl&gt;
&lt;h2 id=&#34;project-instructions&#34;&gt;Project instructions&lt;/h2&gt;
&lt;p&gt;Teachers write project instructions in the form of a LaTeX fragment,
which Aquinas combines with a template before processing into a
HTML document. It is a good practice to use &lt;code&gt;\section*&lt;/code&gt; to provide
three sections: &lt;em&gt;Command&lt;/em&gt; (or &lt;em&gt;Function&lt;/em&gt;) &lt;em&gt;summary&lt;/em&gt;, &lt;em&gt;Lesson&lt;/em&gt;, and
&lt;em&gt;Assignment&lt;/em&gt;. Aquinas will provide the prelude and epilog material;
here it is sufficient to begin with the first &lt;code&gt;\section*&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Aquinas provides the following LaTeX commands for use in a project&amp;rsquo;s
instructions:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;pre&gt;\cmd&lt;/pre&gt;&lt;/dt&gt;
&lt;dd&gt;Typeset the argument as a command.&lt;/dd&gt;
&lt;dt&gt;&lt;pre&gt;\project&lt;/pre&gt;&lt;/dt&gt;
&lt;dd&gt;Typeset the argument as a project name.&lt;/dd&gt;
&lt;dt&gt;&lt;pre&gt;\conf&lt;/pre&gt;&lt;/dt&gt;
&lt;dd&gt;Typeset the argument as a configuration file.&lt;/dd&gt;
&lt;dt&gt;&lt;pre&gt;\file&lt;/pre&gt;&lt;/dt&gt;
&lt;dd&gt;Typeset the argument as a file name.&lt;/dd&gt;
&lt;dt&gt;&lt;pre&gt;\dir&lt;/pre&gt;&lt;/dt&gt;
&lt;dd&gt;Typeset the argument as a directory name.&lt;/dd&gt;
&lt;dt&gt;&lt;pre&gt;\fn&lt;/pre&gt;&lt;/dt&gt;
&lt;dd&gt;Typeset the argument as a function name.&lt;/dd&gt;
&lt;dt&gt;&lt;pre&gt;\host&lt;/pre&gt;&lt;/dt&gt;
&lt;dd&gt;Typeset the argument as a host name.&lt;/dd&gt;
&lt;dt&gt;&lt;pre&gt;\keypress&lt;/pre&gt;&lt;/dt&gt;
&lt;dd&gt;Typeset the argument as if it were a key to be pressed.&lt;/dd&gt;
&lt;dt&gt;&lt;pre&gt;\unix&lt;/pre&gt;&lt;/dt&gt;
&lt;dd&gt;Typeset the work UNIX.&lt;/dd&gt;
&lt;dt&gt;&lt;pre&gt;\shprompt&lt;/pre&gt;&lt;/dt&gt;
&lt;dd&gt;Typeset a Bourne shell prompt.&lt;/dd&gt;
&lt;dt&gt;&lt;pre&gt;\cmddesc&lt;/pre&gt;&lt;/dt&gt;
&lt;dd&gt;Define a command within a LaTeX description list. Like \item, except
Aquinas notes occurences of \cmddesc to produce a command reference
page.&lt;/dd&gt;
&lt;dt&gt;&lt;pre&gt;\fncdesc&lt;/pre&gt;&lt;/dt&gt;
&lt;dd&gt;Define a C function within a LaTeX description list. Like \item, except
Aquinas notes occurences of \fncdesc to produce a C function reference
page. Variants exist for other languages such as Go (\fngodesc)
and Python (\fnpythondesc).&lt;/dd&gt;
&lt;dt&gt;&lt;pre&gt;\ifC&lt;/pre&gt;&lt;/dt&gt;
&lt;dd&gt;If the language associated with the current project variant matches
(here the C variant), then include the subsequent text up until the
next \fi. Otherwise print nothing.&lt;/dd&gt;
&lt;dt&gt;&lt;pre&gt;\ifshebang&lt;/pre&gt;&lt;/dt&gt;
&lt;dd&gt;If the language can make use of a shebang, then print the second argument.
Otherwise print nothing.&lt;/dd&gt;
&lt;dt&gt;&lt;pre&gt;\clone&lt;/pre&gt;&lt;/dt&gt;
&lt;dd&gt;Provide instructions on how to clone the current project using Git.&lt;/dd&gt;
&lt;dt&gt;&lt;pre&gt;\submission&lt;/pre&gt;&lt;/dt&gt;
&lt;dd&gt;Print instructions on how to submit a project solution.&lt;/dd&gt;
&lt;dt&gt;&lt;pre&gt;\submissionNoLanguage&lt;/pre&gt;&lt;/dt&gt;
&lt;dd&gt;Print instructions on how to submit a language-agnostic project solution.&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;Alternatively, a teacher can describe a project using Markdown.&lt;/p&gt;
&lt;h1 id=&#34;the-aquinas-vms&#34;&gt;The Aquinas VMs&lt;/h1&gt;
&lt;dl&gt;
&lt;dt&gt;aquinas-www&lt;/dt&gt;
&lt;dd&gt;The HTTP server that allows users to read project assignments and
view submission results.&lt;/dd&gt;
&lt;dt&gt;aquinas-git&lt;/dt&gt;
&lt;dd&gt;The Git server to which users make project submissions.&lt;/dd&gt;
&lt;dt&gt;aquinas-user&lt;/dt&gt;
&lt;dd&gt;The host that runs project submissions during the grading process.&lt;/dd&gt;
&lt;dt&gt;aquinas-target&lt;/dt&gt;
&lt;dd&gt;The host that runs network services with which user programs might
interact.&lt;/dd&gt;
&lt;/dl&gt;
&lt;h1 id=&#34;system-inputs&#34;&gt;System inputs&lt;/h1&gt;
&lt;dl&gt;
&lt;dt&gt;(unauthenticated) http://aquinas-www/landing.html&lt;/dt&gt;
&lt;dd&gt;Allows a user to either log in or register.&lt;/dd&gt;
&lt;dt&gt;(unauthenticated) http://aquinas-www/login.html&lt;/dt&gt;
&lt;dd&gt;Accepts student email and password. Allows a student to log in to
the web interface. Transitions state of HTTP session to authenticated.&lt;/dd&gt;
&lt;dt&gt;(unauthenticated) http://aquinas-www/register.html&lt;/dt&gt;
&lt;dd&gt;Accepts an email address. Allows a registering student to initiate
the registration process. Sends an email to the registering student
that allows him to complete the registration.&lt;/dd&gt;
&lt;dt&gt;(unauthenticated) http://aquinas-www/register3.html&lt;/dt&gt;
&lt;dd&gt;Accepts an email address, nonce, hashed token, and password. Allows
a registering student to prove ownership of an email address and
thus complete the registration process.&lt;/dd&gt;
&lt;dt&gt;(authenticated) http://aquinas-www/index.html&lt;/dt&gt;
&lt;dd&gt;Allows a student to select a project page.&lt;/dd&gt;
&lt;dt&gt;(authenticated) http://aquinas-www/p.html, where p is a project&lt;/dt&gt;
&lt;dd&gt;Allows a student to view information that describes project p.&lt;/dd&gt;
&lt;dt&gt;ssh://s@aquinas-git/home/s/p, where s is a student and p is a project&lt;/dt&gt;
&lt;dd&gt;Interact with student s&#39;s project p submission using Git/git-shell.&lt;/dd&gt;
Git hook invokes grader, run as teacher, with s and p as its input.&lt;/dd&gt;
&lt;dt&gt;ssh://t@aquinas-git/home/teacher/projects, where t is a teacher&lt;/dt&gt;
&lt;dd&gt;Interact with the project definitions using Git/git-shell.  Git hook
invokes aquinas-initialize-projects, run as root.&lt;/dd&gt;
&lt;dt&gt;ssh://t@aquinas-git/home/teacher/records, where t is a teacher&lt;/dt&gt;
&lt;dd&gt;Interact with the project submission records using Git/git-shell.&lt;/dd&gt;
&lt;dt&gt;ssh://root@\*&lt;/dt&gt;
&lt;dd&gt;Allows developers shell access.&lt;/dd&gt;
&lt;/dl&gt;
&lt;h1 id=&#34;sudo-permissions&#34;&gt;Sudo permissions&lt;/h1&gt;
&lt;h2 id=&#34;aquinas-git&#34;&gt;aquinas-git&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;All users can run grader as teacher&lt;/li&gt;
&lt;li&gt;Teacher can run aquinas-initialize-projects as root&lt;/li&gt;
&lt;li&gt;Http can run aquinas-add-student-slave as root&lt;/li&gt;
&lt;li&gt;Http can run aquinas-get-ssh-authorized-keys as root&lt;/li&gt;
&lt;li&gt;Http can run aquinas-deploy-key as root&lt;/li&gt;
&lt;li&gt;Http can run aquinas-remove-student-slave as root&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;ssh-keys&#34;&gt;SSH keys&lt;/h1&gt;
&lt;dl&gt;
&lt;dt&gt;root@aquinas-git&lt;/dt&gt;
&lt;dd&gt;generated by alpine-build&lt;/dd&gt;
&lt;dt&gt;teacher@aquinas-git&lt;/dt&gt;
&lt;dd&gt;generated by alpine-build&lt;/dd&gt;
&lt;dt&gt;http@aquinas-www&lt;/dt&gt;
&lt;dd&gt;generated by alpine-build&lt;/dd&gt;
&lt;dt&gt;Developers&lt;/dt&gt;
&lt;dd&gt;installed by hand&lt;/dd&gt;
&lt;dt&gt;Teachers&lt;/dt&gt;
&lt;dd&gt;installed by aquinas-add-teacher&lt;/dd&gt;
&lt;dt&gt;Students&lt;/dt&gt;
&lt;dd&gt;installed by ssh/ssh2.html&lt;/dd&gt;
&lt;/dl&gt;
&lt;h1 id=&#34;permitted-ssh-connections&#34;&gt;Permitted SSH connections&lt;/h1&gt;
&lt;table class=&#34;booktabs-confined&#34; summary=&#34;Permitted SSH connections&#34;&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;From&lt;/th&gt;&lt;th&gt;To&lt;/th&gt;&lt;th&gt;Installed by&lt;/th&gt;&lt;th&gt;Purpose&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Developers&lt;/td&gt;&lt;td&gt;root@aquinas-git&lt;/td&gt;&lt;td&gt;alpine-build/manual&lt;/td&gt;&lt;td&gt;Development/administration&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Developers&lt;/td&gt;&lt;td&gt;test@aquinas-git&lt;/td&gt;&lt;td&gt;test case&lt;/td&gt;&lt;td&gt;Pushing solutions during test&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Teachers&lt;/td&gt;&lt;td&gt;teacher@aquinas-git&lt;/td&gt;&lt;td&gt;add-teacher&lt;/td&gt;&lt;td&gt;Project deployment&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;http@aquinas-www&lt;/td&gt;&lt;td&gt;http@aquinas-git&lt;/td&gt;&lt;td&gt;setup-ssh&lt;/td&gt;&lt;td&gt;Httpd uses to run httpsh:
&lt;ul&gt;
&lt;li&gt;check for student&lt;/li&gt;
&lt;li&gt;check for SSH key&lt;/li&gt;
&lt;li&gt;add a new student&lt;/li&gt;
&lt;li&gt;deploy SSH key&lt;/li&gt;
&lt;li&gt;remove a student&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Students&lt;/td&gt;&lt;td&gt;STUDENT@aquinas-git&lt;/td&gt;&lt;td&gt;ssh/ssh2.html&lt;/td&gt;&lt;td&gt;Commit submissions to Git&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Developers&lt;/td&gt;&lt;td&gt;root@aquinas-www&lt;/td&gt;&lt;td&gt;alpine-build/manual&lt;/td&gt;&lt;td&gt;Development/administration&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Teachers&lt;/td&gt;&lt;td&gt;teacher@aquinas-www&lt;/td&gt;&lt;td&gt;add-teacher&lt;/td&gt;&lt;td&gt;Updating HTML documents&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;teacher@aquinas-git&lt;/td&gt;&lt;td&gt;teacher@aquinas-www&lt;/td&gt;&lt;td&gt;setup-ssh&lt;/td&gt;&lt;td&gt;&lt;p&gt;Used by grader to update records on aquinas-www&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Developers&lt;/td&gt;&lt;td&gt;root@aquinas-user&lt;/td&gt;&lt;td&gt;alpine-build/manual&lt;/td&gt;&lt;td&gt;Development&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;teacher@aquinas-git&lt;/td&gt;&lt;td&gt;root@aquinas-user&lt;/td&gt;&lt;td&gt;setup-ssh&lt;/td&gt;&lt;td&gt;&lt;p&gt;Used by initialize-project
to pull host key and user key from aquinas-user
(Cannot use test@, because test has shell set to
buildrunsh) Also used by grader to place
user-submitted code on aquinas-user&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;teacher@aquinas-git&lt;/td&gt;&lt;td&gt;teacher@aquinas-user&lt;/td&gt;&lt;td&gt;setup-ssh&lt;/td&gt;&lt;td&gt;&lt;p&gt;Used grader to run reference solution on aquinas-user
in the case of compare-type checks&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;root@aquinas-git&lt;/td&gt;&lt;td&gt;root@aquinas-user&lt;/td&gt;&lt;td&gt;setup-ssh&lt;/td&gt;&lt;td&gt;Add or remove user&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;root@aquinas-git&lt;/td&gt;&lt;td&gt;teacher@aquinas-user&lt;/td&gt;&lt;td&gt;setup-ssh&lt;/td&gt;&lt;td&gt;Compile network project services&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;teacher@aquinas-git&lt;/td&gt;&lt;td&gt;STUDENT@aquinas-user&lt;/td&gt;&lt;td&gt;add-student&lt;/td&gt;&lt;td&gt;&lt;p&gt;Grader uses to run buildrunsh
on user VM; Git hook runs as
user, and uses sudo to run
grader as teacher&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;root@aquinas-git&lt;/td&gt;&lt;td&gt;root@aquinas-target&lt;/td&gt;&lt;td&gt;setup-ssh&lt;/td&gt;&lt;td&gt;Deploy network project services&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;component-isolation&#34;&gt;Component isolation&lt;/h1&gt;
&lt;p&gt;The design of Aquinas isolates its components to prevent student
program from exfiltrating data available to them during the grading
process. This prevents student knowledge of the checks that grade
their submissions. Furthermore, student programs cannot interact beyond
the aquinas-user host with the exception of allowed connections to
aquinas-target.&lt;/p&gt;
&lt;h2 id=&#34;firewall-rules&#34;&gt;Firewall rules&lt;/h2&gt;
&lt;p&gt;The host firewalls on aquinas-user and aquinas-target prohibit all
outgoing connections with the exception of a connection to a syslog
server (TCP port 6514). All interaction with these hosts is by way of
incoming SSH connections or project-specific services. The aim of this
is to prevent a user-written program from exfiltrating data from either
host while executing for the purpose of grading.&lt;/p&gt;
&lt;h2 id=&#34;chroot-jails&#34;&gt;Chroot jails&lt;/h2&gt;
&lt;p&gt;Services on aquinas-target run as the user nobody and within a chroot
jail.&lt;/p&gt;
&lt;h1 id=&#34;aquinas-administation&#34;&gt;Aquinas administation&lt;/h1&gt;
&lt;h2 id=&#34;manually-fork-a-repository&#34;&gt;Manually fork a repository&lt;/h2&gt;
&lt;p&gt;The following assumes the student is using Aquinas&amp;rsquo; native Git repository,
rather than a third-party repository such as GitLab. If this is not the
case, then you would need to provide more information in the JSON-encoded
parameter.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;aquinas-fork-project STUDENT@EXAMPLE.COM PROJECT &amp;#39;{&amp;#34;git-provider&amp;#34;:&amp;#34;&amp;#34;,&amp;#34;git-path&amp;#34;:&amp;#34;&amp;#34;,&amp;#34;git-username&amp;#34;:&amp;#34;&amp;#34;,&amp;#34;git-token&amp;#34;:&amp;#34;&amp;#34;}&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;force-the-grading-of-a-project&#34;&gt;Force the grading of a project&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;root@aquinas-git&amp;gt; aquinas-enqueue /usr/sbin/grader STUDENT@EXAMPLE.COM PROJECTLANG
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Force the grading of a project directly, without using the queuing system&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;root@aquinas-git&amp;gt; scp -r /home/teacher/workdir/students/STUDENT@EXAMPLE.COM/helloC/ root@aquinas-user.EXAMPLE.COM:/home/STUDENT@EXAMPLE.COM/helloC/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;root@aquinas-git&amp;gt; ssh root@aquinas-user.EXAMPLE.COM chown -R STUDENT_at_EXAMPLE_dot_COM:STUDENT_at_EXAMPLE_dot_COM /home/STUDENT@EXAMPLE.COM/helloC&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;root@aquinas-git&amp;gt; ( echo build; echo \&amp;quot;C\&amp;quot;; cat /home/teacher/workdir/projects/hello/description.json ) | sudo -u teacher ssh -T STUDENT_at_EXAMPLE_dot_COM@aquinas-user.EXAMPLE.COM&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Possibly copy files required by project to &lt;a href=&#34;mailto:root@aquinas-user.EXAMPLE.COM&#34;&gt;root@aquinas-user.EXAMPLE.COM&lt;/a&gt;:/home/STUDENT@EXAMPLE.COM/helloC/.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;root@aquinas-git&amp;gt; ( echo run; echo \&amp;quot;C\&amp;quot;; cat /home/teacher/workdir/projects/hello/description.json ) | sudo -u teacher ssh -T STUDENT_at_EXAMPLE_dot_COM@aquinas-user.EXAMPLE.COM&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;rename-a-user&#34;&gt;Rename a user&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Note the student&amp;rsquo;s alias.&lt;/li&gt;
&lt;li&gt;Backup the student OLD&amp;rsquo;s home directory at &lt;code&gt;/home/OLD@EXAMPLE.COM&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;On aquinas-www, run &lt;code&gt;sudo -u http aquinas-remove-student OLD@EXAMPLE.COM&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;On aquinas-www, run &lt;code&gt;sudo -u http aquinas-add-student NEW@EXAMPLE.COM PASSWORD&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Install SSH key from backup.&lt;/li&gt;
&lt;li&gt;Restore student&amp;rsquo;s alias.&lt;/li&gt;
&lt;li&gt;For each repository in the backup, &lt;code&gt;git clone&lt;/code&gt; the repository to a temporary location, and from that location run &lt;code&gt;git push repo=NEW_AT_EXAMPLE_DOT_COM@aquinas-git.DOMAIN:/home/NEW@EXAMPLE.COM/PROJECT --all --force&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;mark-a-user-as-a-teacher&#34;&gt;Mark a user as a teacher&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;root@aquinas-www&amp;gt; touch /etc/httpd/accounts/USER/teacher&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;root@aquinas-www&amp;gt; chown http:www-data /etc/httpd/accounts/USER/teacher&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;related-publications&#34;&gt;Related publications&lt;/h1&gt;









	
		







  








&lt;div class=&#34;media stream-item view-compact&#34;&gt;
  &lt;div class=&#34;media-body&#34;&gt;

    &lt;div class=&#34;section-subheading article-title mb-0 mt-0&#34;&gt;
      &lt;a href=&#34;https://www.flyn.org/publications/Courses-as-Code-The-Aquinas-Learning-System/&#34; &gt;Courses as Code: The Aquinas Learning System&lt;/a&gt;
    &lt;/div&gt;

    

    &lt;div class=&#34;stream-meta article-metadata&#34;&gt;

      

      
      &lt;div&gt;
        

  &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/W.-Michael-Petullo/&#34;&gt;W. Michael Petullo&lt;/a&gt;&lt;/span&gt;
      &lt;/div&gt;
      
    &lt;/div&gt;

    
    &lt;div class=&#34;btn-links&#34;&gt;
      








  
    
  



&lt;a class=&#34;btn btn-outline-primary btn-page-header btn-sm&#34; href=&#34;http://www.flyn.org/publications/2022-Aquinas.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;
  PDF
&lt;/a&gt;



&lt;a href=&#34;#&#34; class=&#34;btn btn-outline-primary btn-page-header btn-sm js-cite-modal&#34;
        data-filename=&#34;/publications/Courses-as-Code-The-Aquinas-Learning-System/cite.bib&#34;&gt;
  Cite
&lt;/a&gt;















    &lt;/div&gt;
    

  &lt;/div&gt;
  &lt;div class=&#34;ml-3&#34;&gt;
    
    
  &lt;/div&gt;
&lt;/div&gt;

	


&lt;h1 id=&#34;downloads&#34;&gt;Downloads&lt;/h1&gt;





	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;aquinas-git-alpine-x86-64.img.bz2&#34;&gt;aquinas-git-alpine-x86-64.img.bz2&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;aquinas-target-alpine-x86-64.img.bz2&#34;&gt;aquinas-target-alpine-x86-64.img.bz2&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;aquinas-user-alpine-x86-64.img.bz2&#34;&gt;aquinas-user-alpine-x86-64.img.bz2&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;aquinas-www-alpine-x86-64.img.bz2&#34;&gt;aquinas-www-alpine-x86-64.img.bz2&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;vm-aquinas-git.cfg&#34;&gt;vm-aquinas-git.cfg&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;vm-aquinas-target.cfg&#34;&gt;vm-aquinas-target.cfg&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;vm-aquinas-user.cfg&#34;&gt;vm-aquinas-user.cfg&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;vm-aquinas-www.cfg&#34;&gt;vm-aquinas-www.cfg&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	



	&lt;p&gt;
		The Aquinas project is  also 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone --recurse-submodules https://www.flyn.org/git/aquinas&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>beamer-control</title>
      <link>https://www.flyn.org/projects/beamer-control/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/beamer-control/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;Beamer is a LaTeX class for creating slides for
presentations. beamer-control allows you to simultaneously control two PDF
viewers to synchronize slides—displayed with a projector—and
notes—displayed on a laptop screen. beamer-control uses the AT-SPI
accessibility framework to communicate with any compatible viewers, such as evince.&lt;/p&gt;
&lt;h1 id=&#34;setup-in-the-case-of-the-awesome-window-manager&#34;&gt;Setup (in the case of the Awesome window manager)&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;Ensure you are running &lt;code&gt;at-spi2-registryd&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;beamer-control&lt;/code&gt; and use &lt;code&gt;xwininfo&lt;/code&gt; to identify its window identifier.&lt;/li&gt;
&lt;li&gt;Configure Awesome to treat beamer-control as a floating window; write the following to your Awesome configuration, where &lt;code&gt;Beamer Control&lt;/code&gt; is the window identifier from the previous step:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;awful.rules.rules = {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	{ rule = { name=&amp;#34;Beamer Control&amp;#34;, instance = &amp;#34;python3&amp;#34; }, properties = {floating = true}},
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;a-workflow&#34;&gt;A workflow&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;Add the following to your presentation&#39;s preamble to ensure every slide has a note, and thus the number of slides and note pages are equal:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;\makeatletter
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;\def\beamer@framenotesbegin{%
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	\gdef\beamer@noteitems{}%
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	\gdef\beamer@notes{{}}%
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;\makeatother
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Add the following to allow building either the slides or notes from the command line:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;\ifcsname ifshowOnlyNotes\endcsname\else
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;\expandafter\let\csname ifshowOnlyNotes\expandafter\endcsname
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;\csname iffalse\endcsname
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;\fi
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;\ifshowOnlyNotes
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;\setbeameroption{show only notes}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;\fi
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;Build slides with &lt;code&gt;pdflatex presentation.tex&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Build notes with &lt;code&gt;pdflatex --jobname=notes &amp;quot;\let\ifshowOnlyNotes\iftrue\input{presentation}&amp;quot;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Open the slides using evince and place them on one screen in presentation mode.&lt;/li&gt;
&lt;li&gt;Open the notes using evince and place them on the other screen in fullscreen mode.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;beamer-control&lt;/code&gt; and place on the notes screen (anywhere but the top-left corner).&lt;/li&gt;
&lt;li&gt;Control the presentation by placing the focus on beamer-control and pressing the up or down arrow keys.&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;downloads&#34;&gt;Downloads&lt;/h1&gt;





	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;beamer-control&#34;&gt;beamer-control&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>dmapd</title>
      <link>https://www.flyn.org/projects/dmapd/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/dmapd/</guid>
      <description>&lt;p&gt;The dmapd project provides a GObject-based, Open Source implementation
of DMAP sharing with the following features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Support for both DAAP and DPAP&lt;/li&gt;
&lt;li&gt;Support for realtime transcoding of media formats not natively supported by clients&lt;/li&gt;
&lt;li&gt;Support for many metadata formats, such as those associated with Ogg Vorbis and MP3 (e.g., ID3)&lt;/li&gt;
&lt;li&gt;Detection of video streams so that clients may play them as video&lt;/li&gt;
&lt;li&gt;Use of GStreamer to support a wide range of audio and video CODECs&lt;/li&gt;
&lt;li&gt;Caching of photograph thumbnails to avoid regenerating them each time the server restarts&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dmapd runs on Linux and other POSIX operating systems. It has been used
on OpenWrt Linux-based systems with as little as 32MB of memory to serve
music, video, and photograph libraries containing thousands of files.&lt;/p&gt;
&lt;p&gt;Dmapd supports the following command line options:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;-?, --help&lt;/dt&gt;&lt;dd&gt;Show help options&lt;/dd&gt;
&lt;dt&gt;-f, --foreground&lt;/dt&gt;&lt;dd&gt;Do not fork; remain in foreground&lt;/dd&gt;
&lt;dt&gt;-n, --name&lt;/dt&gt;&lt;dd&gt;Name of media shares&lt;/dd&gt;
&lt;dt&gt;-m, --music-dir&lt;/dt&gt;&lt;dd&gt;Music directory&lt;/dd&gt;
&lt;dt&gt;-p, --picture-dir&lt;/dt&gt;&lt;dd&gt;Picture directory&lt;/dd&gt;
&lt;dt&gt;-M, --music-format&lt;/dt&gt;&lt;dd&gt;Acceptable music format&lt;/dd&gt;
&lt;dt&gt;-P, --picture-format&lt;/dt&gt;&lt;dd&gt;Acceptable picture format&lt;/dd&gt;
&lt;dt&gt;-l, --lockpath&lt;/dt&gt;&lt;dd&gt;Path to lockfile&lt;/dd&gt;
&lt;dt&gt;-i, --pidpath&lt;/dt&gt;&lt;dd&gt;Path to PID file&lt;/dd&gt;
&lt;dt&gt;-d, --db-dir&lt;/dt&gt;&lt;dd&gt;Media database directory&lt;/dd&gt;
&lt;dt&gt;-u, --user&lt;/dt&gt;&lt;dd&gt;User to run as&lt;/dd&gt;
&lt;dt&gt;-g, --group&lt;/dt&gt;&lt;dd&gt;Group to run as&lt;/dd&gt;
&lt;dt&gt;-t, --transcode-mime-type&lt;/dt&gt;&lt;dd&gt;Target MIME type for transcoding&lt;/dd&gt;
&lt;dt&gt;-r, --rt-transcode&lt;/dt&gt;&lt;dd&gt;Perform transcoding in real-time&lt;/dd&gt;
&lt;dt&gt;-w, --max-thumbnail-width&lt;/dt&gt;&lt;dd&gt;Maximum thumbnail size (may reduce memory use)&lt;/dd&gt;
&lt;dt&gt;-c, --directory-containers&lt;/dt&gt;&lt;dd&gt;Serve DMAP containers based on filesystem heirarchy&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;Dmapd supports the following environment variables:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;DMAPD_DEBUG&lt;/dt&gt;&lt;dd&gt;Enable verbose debugging messages&lt;/dd&gt;
&lt;dt&gt;DMAPD_CONFIG_FILE&lt;/dt&gt;&lt;dd&gt;Path to an alternate configuration file&lt;/dd&gt;
&lt;dt&gt;DMAPD_MODULEDIR&lt;/dt&gt;&lt;dd&gt;Directory containing dmapd modules&lt;/dd&gt;
&lt;dt&gt;DMAPD_AV_META_READER_MODULE&lt;/dt&gt;&lt;dd&gt;Name of an alternate AV module&lt;/dd&gt;
&lt;dt&gt;DMAPD_AV_RENDER_MODULE&lt;/dt&gt;&lt;dd&gt;Name of an alternate AV render module; when applicable may also specify a host, e.g.: DMAPD_AV_RENDER_MODULE=gst:host=192.168.0.1&lt;/dd&gt;
&lt;dt&gt;DMAPD_PHOTO_META_READER_MODULE&lt;/dt&gt;&lt;dd&gt;Name of an alternate photograph module&lt;/dd&gt;
&lt;dt&gt;DMAPD_DB_MODULE&lt;/dt&gt;&lt;dd&gt;Name of an alternate database module&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;Dmapd can provide content to any client that supports DAAP or DPAP. This
includes the following software clients and hardware devices:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Apple &lt;a href=&#34;http://www.apple.com/itunes/&#34;&gt;iTunes&lt;/a&gt;™&lt;/li&gt;
&lt;li&gt;Apple &lt;a href=&#34;http://www.apple.com/ilife/iphoto/&#34;&gt;iPhoto&lt;/a&gt;™&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://projects.gnome.org/rhythmbox/&#34;&gt;Rhythmbox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Roku SoundBridge™&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dmapd can read metadata from any music file supported by GStreamer. In order
to use this feature you must have the appropriate GStreamer plugins
installed. The following plugins are always required if you wish to use
this feature:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;app&lt;/li&gt;
&lt;li&gt;decodebin&lt;/li&gt;
&lt;li&gt;typefindfunctions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The following GStreamer plugins are required for the corresponding
media types:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;mad (MP3)&lt;/li&gt;
&lt;li&gt;id3demux (MP3)&lt;/li&gt;
&lt;li&gt;ogg (Ogg Vorbis, etc.)&lt;/li&gt;
&lt;li&gt;vorbis (Ogg Vorbis)&lt;/li&gt;
&lt;li&gt;flac (FLAC)&lt;/li&gt;
&lt;li&gt;mpeg2dec (MPEG video)&lt;/li&gt;
&lt;li&gt;theora (Ogg Theora video)&lt;/li&gt;
&lt;/ul&gt;





	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.1.tar.gz&#34;&gt;dmapd-0.0.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.2.tar.gz&#34;&gt;dmapd-0.0.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.3.tar.gz&#34;&gt;dmapd-0.0.3.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.4.tar.gz&#34;&gt;dmapd-0.0.4.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.5.tar.gz&#34;&gt;dmapd-0.0.5.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.6.tar.gz&#34;&gt;dmapd-0.0.6.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.7.tar.gz&#34;&gt;dmapd-0.0.7.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.8.tar.gz&#34;&gt;dmapd-0.0.8.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.9.tar.gz&#34;&gt;dmapd-0.0.9.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.10.tar.gz&#34;&gt;dmapd-0.0.10.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.11.tar.gz&#34;&gt;dmapd-0.0.11.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.12.tar.gz&#34;&gt;dmapd-0.0.12.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.13.tar.gz&#34;&gt;dmapd-0.0.13.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.14.tar.gz&#34;&gt;dmapd-0.0.14.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.15.tar.gz&#34;&gt;dmapd-0.0.15.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.16.tar.gz&#34;&gt;dmapd-0.0.16.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.17.tar.gz&#34;&gt;dmapd-0.0.17.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.18.tar.gz&#34;&gt;dmapd-0.0.18.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.19.tar.gz&#34;&gt;dmapd-0.0.19.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.20.tar.gz&#34;&gt;dmapd-0.0.20.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.21.tar.gz&#34;&gt;dmapd-0.0.21.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.22.tar.gz&#34;&gt;dmapd-0.0.22.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.23.tar.gz&#34;&gt;dmapd-0.0.23.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.24.tar.gz&#34;&gt;dmapd-0.0.24.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.25.tar.gz&#34;&gt;dmapd-0.0.25.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.26.tar.gz&#34;&gt;dmapd-0.0.26.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.27.tar.gz&#34;&gt;dmapd-0.0.27.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.28.tar.gz&#34;&gt;dmapd-0.0.28.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.29.tar.gz&#34;&gt;dmapd-0.0.29.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.30.tar.gz&#34;&gt;dmapd-0.0.30.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.31.tar.gz&#34;&gt;dmapd-0.0.31.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.32.tar.gz&#34;&gt;dmapd-0.0.32.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.33.tar.gz&#34;&gt;dmapd-0.0.33.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.34.tar.gz&#34;&gt;dmapd-0.0.34.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.35.tar.gz&#34;&gt;dmapd-0.0.35.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.36.tar.gz&#34;&gt;dmapd-0.0.36.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.37.tar.gz&#34;&gt;dmapd-0.0.37.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.38.tar.gz&#34;&gt;dmapd-0.0.38.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.39.tar.gz&#34;&gt;dmapd-0.0.39.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.40.tar.gz&#34;&gt;dmapd-0.0.40.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.41.tar.gz&#34;&gt;dmapd-0.0.41.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.42.tar.gz&#34;&gt;dmapd-0.0.42.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.43.tar.gz&#34;&gt;dmapd-0.0.43.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.44.tar.gz&#34;&gt;dmapd-0.0.44.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.45.tar.gz&#34;&gt;dmapd-0.0.45.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.46.tar.gz&#34;&gt;dmapd-0.0.46.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.47.tar.gz&#34;&gt;dmapd-0.0.47.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.48.tar.gz&#34;&gt;dmapd-0.0.48.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.49.tar.gz&#34;&gt;dmapd-0.0.49.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.50.tar.gz&#34;&gt;dmapd-0.0.50.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.51.tar.gz&#34;&gt;dmapd-0.0.51.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.52.tar.gz&#34;&gt;dmapd-0.0.52.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.53.tar.gz&#34;&gt;dmapd-0.0.53.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.54.tar.gz&#34;&gt;dmapd-0.0.54.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.55.tar.gz&#34;&gt;dmapd-0.0.55.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.56.tar.gz&#34;&gt;dmapd-0.0.56.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.57.tar.gz&#34;&gt;dmapd-0.0.57.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.58.tar.gz&#34;&gt;dmapd-0.0.58.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.59.tar.gz&#34;&gt;dmapd-0.0.59.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.60.tar.gz&#34;&gt;dmapd-0.0.60.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.61.tar.gz&#34;&gt;dmapd-0.0.61.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.62.tar.gz&#34;&gt;dmapd-0.0.62.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.63.tar.gz&#34;&gt;dmapd-0.0.63.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.64.tar.gz&#34;&gt;dmapd-0.0.64.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.65.tar.gz&#34;&gt;dmapd-0.0.65.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.66.tar.gz&#34;&gt;dmapd-0.0.66.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.67.tar.gz&#34;&gt;dmapd-0.0.67.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.68.tar.gz&#34;&gt;dmapd-0.0.68.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.69.tar.gz&#34;&gt;dmapd-0.0.69.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.70.tar.gz&#34;&gt;dmapd-0.0.70.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.71.tar.gz&#34;&gt;dmapd-0.0.71.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.72.tar.gz&#34;&gt;dmapd-0.0.72.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.73.tar.gz&#34;&gt;dmapd-0.0.73.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.74.tar.gz&#34;&gt;dmapd-0.0.74.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.75.tar.gz&#34;&gt;dmapd-0.0.75.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.76.tar.gz&#34;&gt;dmapd-0.0.76.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.77.tar.gz&#34;&gt;dmapd-0.0.77.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.78.tar.gz&#34;&gt;dmapd-0.0.78.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.79.tar.gz&#34;&gt;dmapd-0.0.79.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.80.tar.gz&#34;&gt;dmapd-0.0.80.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.81.tar.gz&#34;&gt;dmapd-0.0.81.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.82.tar.gz&#34;&gt;dmapd-0.0.82.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.83.tar.gz&#34;&gt;dmapd-0.0.83.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.84.tar.gz&#34;&gt;dmapd-0.0.84.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.85.tar.gz&#34;&gt;dmapd-0.0.85.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.86.tar.gz&#34;&gt;dmapd-0.0.86.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.87.tar.gz&#34;&gt;dmapd-0.0.87.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.88.tar.gz&#34;&gt;dmapd-0.0.88.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.89.tar.gz&#34;&gt;dmapd-0.0.89.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.90.tar.gz&#34;&gt;dmapd-0.0.90.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.91.tar.gz&#34;&gt;dmapd-0.0.91.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.92.tar.gz&#34;&gt;dmapd-0.0.92.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.93.tar.gz&#34;&gt;dmapd-0.0.93.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.94.tar.gz&#34;&gt;dmapd-0.0.94.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.95.tar.gz&#34;&gt;dmapd-0.0.95.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-0.0.96.tar.gz&#34;&gt;dmapd-0.0.96.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-dummy-0.0.1.tar.gz&#34;&gt;dmapd-dummy-0.0.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;dmapd-dummy-0.0.2.tar.gz&#34;&gt;dmapd-dummy-0.0.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	



	&lt;p&gt;
		The dmapd project is  also 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone https://www.flyn.org/git/dmapd&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>fctk</title>
      <link>https://www.flyn.org/projects/fctk/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/fctk/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;The Flyn Computing Template Kit
(fctk) is a collection of fmt-ptrn templates, XSLT templates, and project
descriptions.  These tools are used at Flyn Computing for development.
The collection of templates use XML and the priciple of not repeating
oneself.  For example, this description comes from an XML file that
is used to generate the fctk package&#39;s man page, HTML documentation,
&lt;a href=&#34;http://www.rpm.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;RPM&lt;/a&gt;
specification, Debian package specifications, etc.&lt;/p&gt;
&lt;h1 id=&#34;nasty-details&#34;&gt;Nasty Details&lt;/h1&gt;
&lt;p&gt;Using np with the included project template, gnu_c:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;np foo gnu_c
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&amp;hellip;will create the following directory tree:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;AUTHORS    INSTALL      TODO          dry         missing        src
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;COPYING    Makefile.am  configure.in  include     mkinstalldirs
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ChangeLog  NEWS         debian        install-sh  scripts
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./debian:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;changelog  control  copyright  rules
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./dry:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Makefile.am  foo.xml
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./include:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Makefile.am
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./scripts:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Makefile.am
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./src:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Makefile.am  foo.c
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Each file that is created provides a reasonable starting point for a
GNU C project.  Dry/foo.xml is used by dry/Makefile to create getopt()
C code, man pages, etc.&lt;/p&gt;
&lt;p&gt;Project directory structure:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;xslt&lt;/dt&gt;
&lt;dd&gt;XSLT templates to generate getopt() C code, man pages, HTML
documentation, Debian package specifications, RPM specifications,
etc. from one XML description.&lt;/dd&gt;
&lt;dt&gt;templates&lt;/dt&gt;
&lt;dd&gt;Templates for use with nf.&lt;/dd&gt;
&lt;dt&gt;projects&lt;/dt&gt;
&lt;dd&gt;Project descriptions for use with np&lt;/dd&gt;
&lt;dt&gt;fctk&lt;/dt&gt;
&lt;dd&gt;Auxillary files which are referenced by some of the other templates.  These should go in /etc/fctk/&lt;/dd&gt;
&lt;/dl&gt;





	

	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk.ppc.rpm&#34;&gt;fctk.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk.src.rpm&#34;&gt;fctk.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk.tar.gz&#34;&gt;fctk.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.3.tar.gz&#34;&gt;fctk-0.0.3.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.4.tar.gz&#34;&gt;fctk-0.0.4.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.4-1.i386.rpm&#34;&gt;fctk-0.0.4-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.5.tar.gz&#34;&gt;fctk-0.0.5.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.5-1.i386.rpm&#34;&gt;fctk-0.0.5-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.5-1.src.rpm&#34;&gt;fctk-0.0.5-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.6.tar.gz&#34;&gt;fctk-0.0.6.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.6-1.ppc.rpm&#34;&gt;fctk-0.0.6-1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.6-1.src.rpm&#34;&gt;fctk-0.0.6-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.7.tar.gz&#34;&gt;fctk-0.0.7.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.7-1.ppc.rpm&#34;&gt;fctk-0.0.7-1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.7-1.src.rpm&#34;&gt;fctk-0.0.7-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.8.tar.gz&#34;&gt;fctk-0.0.8.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.8-0.fdr.1.ppc.rpm&#34;&gt;fctk-0.0.8-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.8-0.fdr.1.src.rpm&#34;&gt;fctk-0.0.8-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.9.tar.gz&#34;&gt;fctk-0.0.9.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.10.tar.gz&#34;&gt;fctk-0.0.10.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.11.tar.gz&#34;&gt;fctk-0.0.11.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk-0.0.12.tar.gz&#34;&gt;fctk-0.0.12.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk_0.0.6-1_powerpc.deb&#34;&gt;fctk_0.0.6-1_powerpc.deb&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk_0.0.7-1_powerpc.deb&#34;&gt;fctk_0.0.7-1_powerpc.deb&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fctk_powerpc.deb&#34;&gt;fctk_powerpc.deb&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;flyn_templates-0.0.1.tar.gz&#34;&gt;flyn_templates-0.0.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;flyn_templates-0.0.1-1.i386.rpm&#34;&gt;flyn_templates-0.0.1-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;flyn_templates-0.0.2.tar.gz&#34;&gt;flyn_templates-0.0.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;flyn_templates-0.0.2-1.i386.rpm&#34;&gt;flyn_templates-0.0.2-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>flyn_docs</title>
      <link>https://www.flyn.org/projects/flyn_docs/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/flyn_docs/</guid>
      <description>&lt;p&gt;Flyn_docs is a set of files which may be used to create letterhead,
envelopes, etc. related to Flyn Computing.&lt;/p&gt;





	

	

	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;flyn_docs.i386.rpm&#34;&gt;flyn_docs.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;flyn_docs.tar.gz&#34;&gt;flyn_docs.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;flyn_docs-0.0.1.tar.gz&#34;&gt;flyn_docs-0.0.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;flyn_docs-0.0.1-1.i386.rpm&#34;&gt;flyn_docs-0.0.1-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>fmt-ptrn</title>
      <link>https://www.flyn.org/projects/fmt-ptrn/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/fmt-ptrn/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;New is a template system, especially useful in conjunction with a
simple text editor such as vi. The user maintains templates which
may contain format strings. At run time, nf replaces the format
strings in a template with appropriate values to create a new file.&lt;/p&gt;
&lt;p&gt;For example, given the following template:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;//   FILE: %%(FILE)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;// AUTHOR: %%(FULLNAME)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;//   DATE: %%(DATE)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;// Copyright (C) 1999 %%(FULLNAME) %%(EMAIL)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;// All rights reserved.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;nf&lt;/code&gt; will create:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;//   FILE: foo.cpp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;// AUTHOR: W. Michael Petullo
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;//   DATE: 11 September 1999
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;// Copyright (C) 1999 W. Michael Petullo new@flyn.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;// All rights reserved.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;on my computer.&lt;/p&gt;
&lt;p&gt;The program understands plaintext or gziped template files.&lt;/p&gt;
&lt;p&gt;The fmt-ptrn system also provides a shared library which allows a programmer
access to nf&#39;s functionality. The system was developed to be light and
fast.  Its only external dependencies are the C library, glib2 and zlib.&lt;/p&gt;
&lt;h1 id=&#34;nasty-details&#34;&gt;Nasty Details&lt;/h1&gt;
&lt;p&gt;Nf first looks for templates in ~/.fmt-ptrn/templates.
Second, nf looks for templates in &amp;lt;datadir&amp;gt;/fmt-ptrn/template, where
datadir is defined by autoconf.  This directory is usually
/usr/local/share or /usr/share.&lt;/p&gt;
&lt;p&gt;The templates directory contains several subdirectories matching
filename extensions.  This may include directories such as html, cpp,
c, and tex.  Within each subdirectory are the actual
template files.  The template file named default
is the default template used for the filename extension.  Other templates
can be used by specifying their filename to nf on the command line (see
NF(1)).&lt;/p&gt;
&lt;p&gt;Certain types of files generally don&#39;t have extensions.  In this case,
nf looks for a template directory with the same name as the file being
created.  This is useful when using templates to create files with names
such as Makefile and README.&lt;/p&gt;
&lt;p&gt;When filling a format pattern, nf knows the value for the following
format patterns:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;DATE&lt;/dt&gt;
&lt;dd&gt;Today&amp;apos;s date.&lt;/dd&gt;
&lt;dt&gt;FILE&lt;/dt&gt;
&lt;dd&gt;The name of the file being created.&lt;/dd&gt;
&lt;dt&gt;FULLNAME&lt;/dt&gt;
&lt;dd&gt;The user&amp;apos;s full name (from GECOS field).&lt;/dd&gt;
&lt;dt&gt;FIRSTNAME&lt;/dt&gt;
&lt;dd&gt;The user&amp;apos;s first name (from GECOS field).&lt;/dd&gt;
&lt;dt&gt;MIDDLENAME&lt;/dt&gt;
&lt;dd&gt;The user&amp;apos;s middle name (from GECOS field).&lt;/dd&gt;
&lt;dt&gt;LASTNAME&lt;/dt&gt;
&lt;dd&gt;The user&amp;apos;s last name (from GECOS field).&lt;/dd&gt;
&lt;dt&gt;EMPTY_STR&lt;/dt&gt;
&lt;dd&gt;The empty string.&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;In addition, any environment variable can be used as a format pattern.
An alternate string to be used in the case of an environment variable
being undefined can be specified as follows:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;%(UNDEFINED:foo)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This will be replaced with ”foo” in the created file if
UNDEFINED is not a part of one&#39;s environment.&lt;/p&gt;
&lt;p&gt;The alternative may be a format pattern, too.  If FIRSTNAME is defined
a Mike, the following:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;%(UNDEFINED:%(before=&amp;quot;My name is &amp;quot; FIRSTNAME))&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;will print “My name is Mike.”&lt;/p&gt;
&lt;p&gt;A format pattern can also be acted on by a modifier.  The following will
print the value of FOO in capital letters:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;%(upper FOO)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;It makes sense to use some modifiers with a literal, instead of a key
which will be replaced by a value.  For example:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;%(file FOO)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;will insert the text contained in a the file whose path is the value of
the key FOO.  But:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;%(file &amp;quot;foo&amp;quot;)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;will insert the contents of the file named foo.&lt;/p&gt;
&lt;p&gt;The following modifiers are currently available:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;upper&lt;/dt&gt;
&lt;dd&gt;Convert to upper case.&lt;/dd&gt;
&lt;dt&gt;lower&lt;/dt&gt;
&lt;dd&gt;Convert to lower case.&lt;/dd&gt;
&lt;dt&gt;basename&lt;/dt&gt;
&lt;dd&gt;Convert to the basename of a filename.&lt;/dd&gt;
&lt;dt&gt;before=&#34;str&#34;&lt;/dt&gt;
&lt;dd&gt;Append the string str before.&lt;/dd&gt;
&lt;dt&gt;after=&#34;str&#34;&lt;/dt&gt;
&lt;dd&gt;Append the string str after.&lt;/dd&gt;
&lt;dt&gt;fn&lt;/dt&gt;
&lt;dd&gt;Tag a &#34; ()&#34; on the end.&lt;/dd&gt;
&lt;dt&gt;c_delim&lt;/dt&gt;
&lt;dd&gt;Print enveloped in a C style deliminator, ie: /* == foo == */.&lt;/dd&gt;
&lt;dt&gt;cpp_delim&lt;/dt&gt;
&lt;dd&gt;Print enveloped in a C++ style deliminator, ie: // == foo.&lt;/dd&gt;
&lt;dt&gt;sh_delim&lt;/dt&gt;
&lt;dd&gt;Print enveloped in a shell script style deliminator, ie: # == foo.&lt;/dd&gt;
&lt;dt&gt;tex_delim&lt;/dt&gt;
&lt;dd&gt;Print eveloped in a LaTeX style deliminator, ie: % == foo.&lt;/dd&gt;
&lt;dt&gt;newlines&lt;/dt&gt;
&lt;dd&gt;Replaces occurrences of &#34; &#34; in the string with new lines&lt;/dd&gt;
&lt;dt&gt;no_newlines&lt;/dt&gt;
&lt;dd&gt;Replaces occurrences of &#34;\n&#34; in the string with &#39; &#39;&lt;/dd&gt;
&lt;dt&gt;remove_underscore&lt;/dt&gt;
&lt;dd&gt;Replaces occurrences of &#39;_&#39; in the string with &#39;-&#39;&lt;/dd&gt;
&lt;dt&gt;file&lt;/dt&gt;
&lt;dd&gt;Treats the key as the path to a file, which is included&lt;/dd&gt;
&lt;dt&gt;template&lt;/dt&gt;
&lt;dd&gt;Treats the key as the path to a template, which is filled and included&lt;/dd&gt;
&lt;dt&gt;#&lt;/dt&gt;
&lt;dd&gt;A comment, this will not appear in destination file %(# Comment.)&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;Several modifiers can act within one format string as illustrated:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;%(basename upper FOO)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Modifiers use a stack to be applied.  The first modifier to be applied
is the one farthest to the right.  The last to be applied it the one
farthest to the left.&lt;/p&gt;





	

	

	

	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;fmt-ptrn-1.3.12.tar.gz&#34;&gt;fmt-ptrn-1.3.12.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fmt-ptrn-1.3.13.tar.gz&#34;&gt;fmt-ptrn-1.3.13.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fmt-ptrn-1.3.14.tar.gz&#34;&gt;fmt-ptrn-1.3.14.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fmt-ptrn-1.3.15.tar.gz&#34;&gt;fmt-ptrn-1.3.15.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fmt-ptrn-1.3.16.tar.gz&#34;&gt;fmt-ptrn-1.3.16.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fmt-ptrn-1.3.17.tar.gz&#34;&gt;fmt-ptrn-1.3.17.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fmt-ptrn-1.3.18.tar.gz&#34;&gt;fmt-ptrn-1.3.18.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fmt-ptrn-1.3.19.tar.gz&#34;&gt;fmt-ptrn-1.3.19.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fmt-ptrn-1.3.20.tar.gz&#34;&gt;fmt-ptrn-1.3.20.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fmt-ptrn-1.3.21.tar.gz&#34;&gt;fmt-ptrn-1.3.21.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fmt-ptrn-1.3.22.tar.gz&#34;&gt;fmt-ptrn-1.3.22.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fmt-ptrn-1.3.23.tar.gz&#34;&gt;fmt-ptrn-1.3.23.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;fmt-ptrn-1.3.24.tar.gz&#34;&gt;fmt-ptrn-1.3.24.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new.i386.rpm&#34;&gt;new.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new.ppc.rpm&#34;&gt;new.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new.src.rpm&#34;&gt;new.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new.tar.gz&#34;&gt;new.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.0.1.tar.gz&#34;&gt;new-1.0.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.0.1-1.i386.rpm&#34;&gt;new-1.0.1-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.1.12.tar.gz&#34;&gt;new-1.1.12.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.1.12-1.i386.rpm&#34;&gt;new-1.1.12-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.1.13.tar.gz&#34;&gt;new-1.1.13.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.1.13-1.i386.rpm&#34;&gt;new-1.1.13-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.1.14.tar.gz&#34;&gt;new-1.1.14.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.1.14-1.i386.rpm&#34;&gt;new-1.1.14-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.1.15.tar.gz&#34;&gt;new-1.1.15.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.1.15-1.i386.rpm&#34;&gt;new-1.1.15-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.1.16.tar.gz&#34;&gt;new-1.1.16.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.1.16-1.i386.rpm&#34;&gt;new-1.1.16-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.2.0.tar.gz&#34;&gt;new-1.2.0.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.2.0-1.i386.rpm&#34;&gt;new-1.2.0-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.3.0.tar.gz&#34;&gt;new-1.3.0.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.3.0-1.i386.rpm&#34;&gt;new-1.3.0-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.3.1.tar.gz&#34;&gt;new-1.3.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.3.1-1.i386.rpm&#34;&gt;new-1.3.1-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.3.2.tar.gz&#34;&gt;new-1.3.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.3.3.tar.gz&#34;&gt;new-1.3.3.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.3.3-0.fdr.1.ppc.rpm&#34;&gt;new-1.3.3-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.3.3-0.fdr.1.src.rpm&#34;&gt;new-1.3.3-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.3.4.tar.gz&#34;&gt;new-1.3.4.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.3.4-0.fdr.1.ppc.rpm&#34;&gt;new-1.3.4-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.3.4-0.fdr.1.src.rpm&#34;&gt;new-1.3.4-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.3.5.tar.gz&#34;&gt;new-1.3.5.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.3.5-1.ppc.rpm&#34;&gt;new-1.3.5-1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.3.5-1.src.rpm&#34;&gt;new-1.3.5-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.3.5-2.src.rpm&#34;&gt;new-1.3.5-2.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.3.8.tar.gz&#34;&gt;new-1.3.8.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.3.9.tar.gz&#34;&gt;new-1.3.9.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new-1.3.11.tar.gz&#34;&gt;new-1.3.11.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new_1.3.1-1_powerpc.deb&#34;&gt;new_1.3.1-1_powerpc.deb&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new_1.3.2-1_powerpc.deb&#34;&gt;new_1.3.2-1_powerpc.deb&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;new_powerpc.deb&#34;&gt;new_powerpc.deb&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>gitstats</title>
      <link>https://www.flyn.org/projects/gitstats/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/gitstats/</guid>
      <description>&lt;p&gt;Gitstats collects statistics about the activity surrounding Git
repositories.&lt;/p&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	



	&lt;p&gt;
		The gitstats project is 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone https://www.flyn.org/git/gitstats&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>guestrace</title>
      <link>https://www.flyn.org/projects/guestrace/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/guestrace/</guid>
      <description>&lt;p&gt;Ryan Johnson and Matt Shockley wrote guestrace
as a prototype for a research project,
and we have since packaged it as a stand-alone utility.
A properly-configured guestrace will print as they occur the system calls
which processes invoke within a Xen domain.
This resembles strace, but provides the activity of every running process.
The guestrace utility relies on libvmi to perform virtual-machine introspection.
Guestrace can trace both Linux and Windows,
and it requires no modifications to the target
aside from running the target on Xen.&lt;/p&gt;
&lt;p&gt;Guestrace also provides a library,
libguestrace,
which gives programmers access to the guestrace engine.
This is useful for programs which must trace system calls and
do more than merely print them.&lt;/p&gt;
&lt;h1 id=&#34;limitations&#34;&gt;Limitations&lt;/h1&gt;
&lt;p&gt;As an ongoing research project, guestrace presently has a few limitations in its implementation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;we have not yest tested any version of Windows other than Windows 7 Enterprise with Service Pack 1,&lt;/li&gt;
&lt;li&gt;guestrace malfunctions when monitoring Windows running with more than 2 GB of memory (page sizes &amp;gt; 4 KB), and&lt;/li&gt;
&lt;li&gt;guestrace supports only 64-bit guest operating systems.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We would be happy to consider any patches which remove these limitations, and we ourselves hope
to address them when time permits.&lt;/p&gt;
&lt;h1 id=&#34;details&#34;&gt;Details&lt;/h1&gt;
&lt;p&gt;Please refer to guestrace&#39;s &lt;a href=&#34;https://www.flyn.org/projects/guestrace/doc/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;API documentation&lt;/a&gt; for details about how to use the library.&lt;/p&gt;





	

	

	

	

	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;guestrace-0.0.1.tar.gz&#34;&gt;guestrace-0.0.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;guestrace-0.0.2.tar.gz&#34;&gt;guestrace-0.0.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;guestrace-0.0.3.tar.gz&#34;&gt;guestrace-0.0.3.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;guestrace-0.0.4.tar.gz&#34;&gt;guestrace-0.0.4.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;guestrace-0.0.5.tar.gz&#34;&gt;guestrace-0.0.5.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;guestrace-0.0.6.tar.gz&#34;&gt;guestrace-0.0.6.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;guestrace-0.0.7.tar.gz&#34;&gt;guestrace-0.0.7.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;guestrace-0.0.8.tar.gz&#34;&gt;guestrace-0.0.8.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;guestrace-0.0.9.tar.gz&#34;&gt;guestrace-0.0.9.tar.gz&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	

	

	

	

	

	

	

	

	

	

	

	

	



	&lt;p&gt;
		The guestrace project is  also 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone https://www.flyn.org/git/guestrace&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>kodi-plugin.audio.grilo</title>
      <link>https://www.flyn.org/projects/kodi-plugin.audio.grilo/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/kodi-plugin.audio.grilo/</guid>
      <description>&lt;p&gt;Kodi-plugin.audio.grilo is an addon for &lt;a href=&#34;https://kodi.tv/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Kodi&lt;/a&gt; which provides access to shares supported by &lt;a href=&#34;https://wiki.gnome.org/Projects/Grilo&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Grilo&lt;/a&gt;.&lt;/p&gt;





	

	

	

	

	

	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;kodi-plugin.audio.grilo-0.0.1.tar.gz&#34;&gt;kodi-plugin.audio.grilo-0.0.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	

	

	

	

	

	

	

	

	

	

	

	



	&lt;p&gt;
		The kodi-plugin.audio.grilo project is  also 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone https://www.flyn.org/git/kodi-plugin.audio.grilo&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>lcdgrilo</title>
      <link>https://www.flyn.org/projects/lcdgrilo/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/lcdgrilo/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;Lcdgrilo is a Grilo-based media player for use on a Raspberry Pi with a
&lt;a href=&#34;http://www.piface.org.uk/products/piface_control_and_display/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;PiFace CAD&lt;/a&gt;.
Because it is based on &lt;a href=&#34;https://wiki.gnome.org/action/show/Projects/Grilo&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Grilo&lt;/a&gt;,
lcdgrilo can play media from
any Grilo audio source, including
DMAP,
&lt;a href=&#34;http://www.jamendo.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Jamendo&lt;/a&gt;, and
&lt;a href=&#34;http://www.magnatune.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Magnatune&lt;/a&gt;. The
program makes use of the PiFace CAD for input and output through the
use of a menu-based interface.&lt;/p&gt;
&lt;p&gt;Detailed instructions that describe one way to build a network radio using lcdgrilo, a Raspberry Pi, and a PiFace CAD
can be found &lt;a href=&#34;https://www.flyn.org/notes/siren/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;





	

	

	

	

	

	

	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;lcddaap-0.0.1.tar.gz&#34;&gt;lcddaap-0.0.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;lcddaap-0.0.2.tar.gz&#34;&gt;lcddaap-0.0.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;lcdgrilo-0.0.3.tar.gz&#34;&gt;lcdgrilo-0.0.3.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;lcdgrilo-0.0.4.tar.gz&#34;&gt;lcdgrilo-0.0.4.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;lcdgrilo-0.0.5.tar.gz&#34;&gt;lcdgrilo-0.0.5.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;lcdgrilo-0.0.6.tar.gz&#34;&gt;lcdgrilo-0.0.6.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;lcdgrilo-0.0.7.tar.gz&#34;&gt;lcdgrilo-0.0.7.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;lcdgrilo-0.0.8.tar.gz&#34;&gt;lcdgrilo-0.0.8.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;lcdgrilo-0.0.9.tar.gz&#34;&gt;lcdgrilo-0.0.9.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;lcdgrilo-0.0.10.tar.gz&#34;&gt;lcdgrilo-0.0.10.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;lcdgrilo-0.0.11.tar.gz&#34;&gt;lcdgrilo-0.0.11.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;lcdgrilo-0.0.12.tar.gz&#34;&gt;lcdgrilo-0.0.12.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;lcdgrilo-0.0.13.tar.gz&#34;&gt;lcdgrilo-0.0.13.tar.gz&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	

	

	

	

	

	

	

	

	

	

	



	&lt;p&gt;
		The lcdgrilo project is  also 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone https://www.flyn.org/git/lcdgrilo&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>lcdringer</title>
      <link>https://www.flyn.org/projects/lcdringer/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/lcdringer/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;Lcdringer is a ringer for use on a Raspberry Pi with a
&lt;a href=&#34;http://www.piface.org.uk/products/piface_control_and_display/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;PiFace CAD&lt;/a&gt;.
The idea is that the audio ring announces the intention to initiate a video chat.
This is useful in households which do not leave their computers or other electronic devices on all of the time.&lt;/p&gt;
&lt;p&gt;Lcdringer connects to an XMPP server, listens for messages, and displays
messages that arrive before activating an audible alarm.
Lcdringer also responds to the messages
it receives with an indication of whether or not the audible alarm was
acknowledged with a button press.&lt;/p&gt;
&lt;p&gt;Upon running, lcdringer reads &lt;code&gt;/etc/lcdringer.conf&lt;/code&gt;. Here is an example configuration (replace &lt;em&gt;EXAMPLE.COM&lt;/em&gt;, &lt;em&gt;PASSWORD&lt;/em&gt;,
&lt;em&gt;USER1&lt;/em&gt;, and &lt;em&gt;USER2&lt;/em&gt;; &lt;em&gt;USER1&lt;/em&gt; and &lt;em&gt;USER2&lt;/em&gt; are the users permitted to cause lcdringer to ring):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[account]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;jid=lcdringer@EXAMPLE.COM
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;password=PASSWORD
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ring_path=/usr/share/lcdringer/ring.mp3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[friends]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;jids=USER1@EXAMPLE.COM;USER2@EXAMPLE.COM
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Detailed instructions that describe one way to build a device using lcdringer, a Raspberry Pi, and a PiFace CAD
can be found &lt;a href=&#34;https://www.flyn.org/notes/shrieker/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;





	

	

	

	

	

	

	

	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;lcdringer-0.0.1.tar.gz&#34;&gt;lcdringer-0.0.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;lcdringer-0.0.2.tar.gz&#34;&gt;lcdringer-0.0.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;lcdringer-0.0.3.tar.gz&#34;&gt;lcdringer-0.0.3.tar.gz&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	

	

	

	

	

	

	

	

	

	



	&lt;p&gt;
		The lcdringer project is  also 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone https://www.flyn.org/git/lcdringer&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>libdmapsharing</title>
      <link>https://www.flyn.org/projects/libdmapsharing/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/libdmapsharing/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;Libdmapsharing is a library which allows programs to access, share and control the
playback of media content using DMAP (DAAP, DPAP &amp;amp; DACP). Libdmapsharing
also detects audio AirPlay services; coupled with the AirPlay™
support in PulseAudio or GStreamer, this can allow an application
to stream audio to an AirPlay device. The library presently supports
Linux and other POSIX-based systems. It is written in C using GObject
and libsoup. The DMAP family of protocols are used by products such as
Apple iTunes™, Apple iPhoto™, and the Roku SoundBridge™
family to share media such as music and photos.&lt;/p&gt;
&lt;p&gt;Possible uses for libdmapsharing include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Adding picture sharing capabilities to a photograph application&lt;/li&gt;
&lt;li&gt;Adding music sharing capabilities to an audio application&lt;/li&gt;
&lt;li&gt;Adding audio AirPlay output to an application&lt;/li&gt;
&lt;li&gt;Allowing an audio application to be controlled using Apple&#39;s iOS Remote&lt;/li&gt;
&lt;li&gt;Developing DPAP server software for a home networking product&lt;/li&gt;
&lt;li&gt;Developing DMAP client software for a media player appliance&lt;/li&gt;
&lt;li&gt;Developing gateways that translate between DMAP and DLNA&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;links&#34;&gt;Links&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gitlab.gnome.org/GNOME/libdmapsharing/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GNOME Git Tree&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;doc/&#34;&gt;Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.flyn.org/projects/dmapd/&#34;&gt;Dmapd, the reference libdmapsharing-based server&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;





	

	

	

	

	

	

	

	

	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.1.tar.gz&#34;&gt;libdmapsharing-1.9.0.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.2.tar.gz&#34;&gt;libdmapsharing-1.9.0.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.3.tar.gz&#34;&gt;libdmapsharing-1.9.0.3.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.4.tar.gz&#34;&gt;libdmapsharing-1.9.0.4.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.5.tar.gz&#34;&gt;libdmapsharing-1.9.0.5.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.6.tar.gz&#34;&gt;libdmapsharing-1.9.0.6.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.7.tar.gz&#34;&gt;libdmapsharing-1.9.0.7.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.8.tar.gz&#34;&gt;libdmapsharing-1.9.0.8.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.9.tar.gz&#34;&gt;libdmapsharing-1.9.0.9.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.10.tar.gz&#34;&gt;libdmapsharing-1.9.0.10.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.11.tar.gz&#34;&gt;libdmapsharing-1.9.0.11.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.12.tar.gz&#34;&gt;libdmapsharing-1.9.0.12.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.13.tar.gz&#34;&gt;libdmapsharing-1.9.0.13.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.14.tar.gz&#34;&gt;libdmapsharing-1.9.0.14.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.15.tar.gz&#34;&gt;libdmapsharing-1.9.0.15.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.16.tar.gz&#34;&gt;libdmapsharing-1.9.0.16.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.17.tar.gz&#34;&gt;libdmapsharing-1.9.0.17.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.18.tar.gz&#34;&gt;libdmapsharing-1.9.0.18.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.19.tar.gz&#34;&gt;libdmapsharing-1.9.0.19.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.20.tar.gz&#34;&gt;libdmapsharing-1.9.0.20.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-1.9.0.21.tar.gz&#34;&gt;libdmapsharing-1.9.0.21.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.0.0.tar.gz&#34;&gt;libdmapsharing-2.0.0.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.0.1.tar.gz&#34;&gt;libdmapsharing-2.0.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.0.2.tar.gz&#34;&gt;libdmapsharing-2.0.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.0.3.tar.gz&#34;&gt;libdmapsharing-2.0.3.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.0.4.tar.gz&#34;&gt;libdmapsharing-2.0.4.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.1.0.tar.gz&#34;&gt;libdmapsharing-2.1.0.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.1.1.tar.gz&#34;&gt;libdmapsharing-2.1.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.1.2.tar.gz&#34;&gt;libdmapsharing-2.1.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.1.3.tar.gz&#34;&gt;libdmapsharing-2.1.3.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.1.4.tar.gz&#34;&gt;libdmapsharing-2.1.4.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.1.5.tar.gz&#34;&gt;libdmapsharing-2.1.5.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.1.6.tar.gz&#34;&gt;libdmapsharing-2.1.6.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.1.7.tar.gz&#34;&gt;libdmapsharing-2.1.7.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.1.8.tar.gz&#34;&gt;libdmapsharing-2.1.8.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.1.9.tar.gz&#34;&gt;libdmapsharing-2.1.9.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.1.10.tar.gz&#34;&gt;libdmapsharing-2.1.10.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.1.11.tar.gz&#34;&gt;libdmapsharing-2.1.11.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.1.12.tar.gz&#34;&gt;libdmapsharing-2.1.12.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.1.13.tar.gz&#34;&gt;libdmapsharing-2.1.13.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.1.14.tar.gz&#34;&gt;libdmapsharing-2.1.14.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.0.tar.gz&#34;&gt;libdmapsharing-2.9.0.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.1.tar.gz&#34;&gt;libdmapsharing-2.9.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.2.tar.gz&#34;&gt;libdmapsharing-2.9.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.3.tar.gz&#34;&gt;libdmapsharing-2.9.3.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.4.tar.gz&#34;&gt;libdmapsharing-2.9.4.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.5.tar.gz&#34;&gt;libdmapsharing-2.9.5.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.6.tar.gz&#34;&gt;libdmapsharing-2.9.6.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.7.tar.gz&#34;&gt;libdmapsharing-2.9.7.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.8.tar.gz&#34;&gt;libdmapsharing-2.9.8.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.9.tar.gz&#34;&gt;libdmapsharing-2.9.9.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.10.tar.gz&#34;&gt;libdmapsharing-2.9.10.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.11.tar.gz&#34;&gt;libdmapsharing-2.9.11.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.12.tar.gz&#34;&gt;libdmapsharing-2.9.12.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.13.tar.gz&#34;&gt;libdmapsharing-2.9.13.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.14.tar.gz&#34;&gt;libdmapsharing-2.9.14.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.15.tar.gz&#34;&gt;libdmapsharing-2.9.15.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.16.tar.gz&#34;&gt;libdmapsharing-2.9.16.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.17.tar.gz&#34;&gt;libdmapsharing-2.9.17.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.18.tar.gz&#34;&gt;libdmapsharing-2.9.18.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.19.tar.gz&#34;&gt;libdmapsharing-2.9.19.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.20.tar.gz&#34;&gt;libdmapsharing-2.9.20.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.21.tar.gz&#34;&gt;libdmapsharing-2.9.21.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.22.tar.gz&#34;&gt;libdmapsharing-2.9.22.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.23.tar.gz&#34;&gt;libdmapsharing-2.9.23.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.24.tar.gz&#34;&gt;libdmapsharing-2.9.24.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.25.tar.gz&#34;&gt;libdmapsharing-2.9.25.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.26.tar.gz&#34;&gt;libdmapsharing-2.9.26.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.27.tar.gz&#34;&gt;libdmapsharing-2.9.27.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.28.tar.gz&#34;&gt;libdmapsharing-2.9.28.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.29.tar.gz&#34;&gt;libdmapsharing-2.9.29.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.30.tar.gz&#34;&gt;libdmapsharing-2.9.30.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.31.tar.gz&#34;&gt;libdmapsharing-2.9.31.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.32.tar.gz&#34;&gt;libdmapsharing-2.9.32.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.33.tar.gz&#34;&gt;libdmapsharing-2.9.33.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.34.tar.gz&#34;&gt;libdmapsharing-2.9.34.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.35.tar.gz&#34;&gt;libdmapsharing-2.9.35.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.36.tar.gz&#34;&gt;libdmapsharing-2.9.36.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.37.tar.gz&#34;&gt;libdmapsharing-2.9.37.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.38.tar.gz&#34;&gt;libdmapsharing-2.9.38.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.39.tar.gz&#34;&gt;libdmapsharing-2.9.39.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.40.tar.gz&#34;&gt;libdmapsharing-2.9.40.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.41.tar.gz&#34;&gt;libdmapsharing-2.9.41.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-2.9.42.tar.gz&#34;&gt;libdmapsharing-2.9.42.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-3.9.0.tar.gz&#34;&gt;libdmapsharing-3.9.0.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-3.9.1.tar.gz&#34;&gt;libdmapsharing-3.9.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-3.9.2.tar.gz&#34;&gt;libdmapsharing-3.9.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-3.9.3.tar.gz&#34;&gt;libdmapsharing-3.9.3.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-3.9.4.tar.gz&#34;&gt;libdmapsharing-3.9.4.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-3.9.5.tar.gz&#34;&gt;libdmapsharing-3.9.5.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-3.9.6.tar.gz&#34;&gt;libdmapsharing-3.9.6.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-3.9.7.tar.gz&#34;&gt;libdmapsharing-3.9.7.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-3.9.8.tar.gz&#34;&gt;libdmapsharing-3.9.8.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-3.9.9.tar.gz&#34;&gt;libdmapsharing-3.9.9.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-3.9.10.tar.gz&#34;&gt;libdmapsharing-3.9.10.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-3.9.11.tar.gz&#34;&gt;libdmapsharing-3.9.11.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-3.9.12.tar.gz&#34;&gt;libdmapsharing-3.9.12.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libdmapsharing-3.9.13.tar.gz&#34;&gt;libdmapsharing-3.9.13.tar.gz&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	

	

	

	

	

	

	

	

	



	&lt;p&gt;
		The libdmapsharing project is  also 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone git://git.gnome.org/libdmapsharing&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>libtlssep</title>
      <link>https://www.flyn.org/projects/libtlssep/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/libtlssep/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;Libtlssep (pronounced lib·te̅·el·sep) aims to provide an improved TLS API while also
protecting private keys using privilege separation.
Libtlssep&#39;s architecture includes a helper process called
tlssep-decorator
which handles all TLS operations and thus is able to isolate
private keys from applications.
An application first creates a network socket to a server (or client),
and then it passes this socket to tlssep-decorator.
All subsequent communication with the server
passes through tlssep-decorator.&lt;/p&gt;
&lt;p&gt;Please refer to libtlssep&#39;s &lt;a href=&#34;doc/&#34;&gt;API documentation&lt;/a&gt; for details about how to use the library.&lt;/p&gt;





	

	

	

	

	

	

	

	

	

	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;libtlssep-0.1.0.tar.gz&#34;&gt;libtlssep-0.1.0.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libtlssep-0.1.1.tar.gz&#34;&gt;libtlssep-0.1.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libtlssep-0.1.2.tar.gz&#34;&gt;libtlssep-0.1.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libtlssep-0.1.3.tar.gz&#34;&gt;libtlssep-0.1.3.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libtlssep-0.1.4.tar.gz&#34;&gt;libtlssep-0.1.4.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;libtlssep-0.1.5.tar.gz&#34;&gt;libtlssep-0.1.5.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;lighttpd-1.4.36-tlssep.patch&#34;&gt;lighttpd-1.4.36-tlssep.patch&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;wget-tlssep.patch&#34;&gt;wget-tlssep.patch&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	

	

	

	

	

	

	

	



	&lt;p&gt;
		The libtlssep project is  also 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone https://www.flyn.org/git/libtlssep&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>openwrt-build</title>
      <link>https://www.flyn.org/projects/openwrt-build/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/openwrt-build/</guid>
      <description>&lt;p&gt;The openwrt-build script builds an OpenWrt disk image from a JSON-encoded
definition. See definitions/example.json for one such definition.&lt;/p&gt;
&lt;p&gt;Aside from example.json, you can provide openwrt-build with a diffconfig
definition and one or more directory structures which openwrt-build will
add to the disk image. For example,&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./openwrt-build -c example.json files/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;where files/ contains&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;etc/dropbear/authorized_keys
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;will produce an OpenWrt image to which the owner of the public key in
authorized_keys can connect using SSH.&lt;/p&gt;
&lt;p&gt;You can also specify a post-install script using the &amp;lsquo;-p&amp;rsquo; option. The
openwrt-build script will arrange for this script to run the first time
a VM boots the image.&lt;/p&gt;
&lt;p&gt;The default diffconfig causes openwrt-build to build an x86_64 image. You
can provide an alternative diffconfig using the &amp;lsquo;-d&amp;rsquo; option. See
diffconfig/example.&lt;/p&gt;
&lt;p&gt;The openwrt-build script also generates a file named vm-[NAME].cfg which
defines a Xen domain which will boot the generated disk image. For quick
tests, you might also want to run the disk image using QEMU; you can do
this by executing:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;qemu-system-x86_64 -hda [IMAGE.img] -net nic -net user -m 512 -localtime
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;




	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	



	&lt;p&gt;
		The openwrt-build project is 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone https://www.flyn.org/git/openwrt-build&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>pam_keyring</title>
      <link>https://www.flyn.org/projects/pam_keyring/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/pam_keyring/</guid>
      <description>&lt;p&gt;A component of the GNOME Keyring now includes
functionality based on pam_keyring.  As a result,
pam_keyring is now no longer maintained.  See &lt;a href=&#34;https://gitlab.gnome.org/GNOME/gnome-keyring&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://gitlab.gnome.org/GNOME/gnome-keyring&lt;/a&gt;.&lt;/p&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_keyring.ppc.rpm&#34;&gt;pam_keyring.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_keyring.src.rpm&#34;&gt;pam_keyring.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_keyring.tar.gz&#34;&gt;pam_keyring.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_keyring-0.0.1.tar.gz&#34;&gt;pam_keyring-0.0.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_keyring-0.0.2.tar.gz&#34;&gt;pam_keyring-0.0.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_keyring-0.0.2-0.fdr.1.ppc.rpm&#34;&gt;pam_keyring-0.0.2-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_keyring-0.0.2-0.fdr.1.src.rpm&#34;&gt;pam_keyring-0.0.2-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_keyring-0.0.3.tar.gz&#34;&gt;pam_keyring-0.0.3.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_keyring-0.0.3-0.fdr.1.ppc.rpm&#34;&gt;pam_keyring-0.0.3-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_keyring-0.0.3-0.fdr.1.src.rpm&#34;&gt;pam_keyring-0.0.3-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_keyring-0.0.4.tar.gz&#34;&gt;pam_keyring-0.0.4.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_keyring-0.0.4-1.ppc.rpm&#34;&gt;pam_keyring-0.0.4-1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_keyring-0.0.4-1.src.rpm&#34;&gt;pam_keyring-0.0.4-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	

	

	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>pam_mount</title>
      <link>https://www.flyn.org/projects/pam_mount/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/pam_mount/</guid>
      <description>&lt;p&gt;The pam_mount module is now maintained by Jan Engelhardt and is available
at &lt;a href=&#34;http://pam-mount.sourceforge.net/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://pam-mount.sourceforge.net/&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&#34;related-publications&#34;&gt;Related publications&lt;/h1&gt;









	
		














&lt;div class=&#34;media stream-item view-compact&#34;&gt;
  &lt;div class=&#34;media-body&#34;&gt;

    &lt;div class=&#34;section-subheading article-title mb-0 mt-0&#34;&gt;
      &lt;a href=&#34;https://www.flyn.org/reference/tech-republic-03-linux-windows-admin/&#34; &gt;Administrator’s Guide to Linux in the Windows Enterprise&lt;/a&gt;
    &lt;/div&gt;

    

    &lt;div class=&#34;stream-meta article-metadata&#34;&gt;

      

      
        


&lt;div class=&#34;article-metadata&#34;&gt;

  
  

  
  &lt;span class=&#34;article-date&#34;&gt;
    
    
      
    
    Jan 1, 2003
  &lt;/span&gt;
  

  

  

  
  
  
  

  
  

&lt;/div&gt;

      
    &lt;/div&gt;

    
    &lt;div class=&#34;btn-links&#34;&gt;
      








  





&lt;a href=&#34;#&#34; class=&#34;btn btn-outline-primary btn-page-header btn-sm js-cite-modal&#34;
        data-filename=&#34;/reference/tech-republic-03-linux-windows-admin/cite.bib&#34;&gt;
  Cite
&lt;/a&gt;















    &lt;/div&gt;
    

  &lt;/div&gt;
  &lt;div class=&#34;ml-3&#34;&gt;
    
    
  &lt;/div&gt;
&lt;/div&gt;

	


&lt;h1 id=&#34;downloads&#34;&gt;Downloads&lt;/h1&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam-mount_0.9.0-1_powerpc.deb&#34;&gt;pam-mount_0.9.0-1_powerpc.deb&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam-mount_0.9.1-1_powerpc.deb&#34;&gt;pam-mount_0.9.1-1_powerpc.deb&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam-mount_0.9.2-1_powerpc.deb&#34;&gt;pam-mount_0.9.2-1_powerpc.deb&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam-mount_0.9.3-1_powerpc.deb&#34;&gt;pam-mount_0.9.3-1_powerpc.deb&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam-mount_0.9.4-1_powerpc.deb&#34;&gt;pam-mount_0.9.4-1_powerpc.deb&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam-mount_0.9.5-1_powerpc.deb&#34;&gt;pam-mount_0.9.5-1_powerpc.deb&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam-mount_0.9.6-1_powerpc.deb&#34;&gt;pam-mount_0.9.6-1_powerpc.deb&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount.i386.rpm&#34;&gt;pam_mount.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount.ppc.rpm&#34;&gt;pam_mount.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount.src.rpm&#34;&gt;pam_mount.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount.tar.gz&#34;&gt;pam_mount.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.3.2-flyn.tar.gz&#34;&gt;pam_mount-0.3.2-flyn.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.3.3.tar.gz&#34;&gt;pam_mount-0.3.3.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.3.4.tar.gz&#34;&gt;pam_mount-0.3.4.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.3.5.tar.gz&#34;&gt;pam_mount-0.3.5.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.3.6.tar.gz&#34;&gt;pam_mount-0.3.6.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.3.6-1.i386.rpm&#34;&gt;pam_mount-0.3.6-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.3.6-1.src.rpm&#34;&gt;pam_mount-0.3.6-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.3.7.tar.gz&#34;&gt;pam_mount-0.3.7.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.3.7-1.i386.rpm&#34;&gt;pam_mount-0.3.7-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.3.7-1.src.rpm&#34;&gt;pam_mount-0.3.7-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.3.8.tar.gz&#34;&gt;pam_mount-0.3.8.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.3.8-1.i386.rpm&#34;&gt;pam_mount-0.3.8-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.3.8-1.src.rpm&#34;&gt;pam_mount-0.3.8-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.3.9.tar.gz&#34;&gt;pam_mount-0.3.9.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.3.9-1.i386.rpm&#34;&gt;pam_mount-0.3.9-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.3.9-1.src.rpm&#34;&gt;pam_mount-0.3.9-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.4.0.tar.gz&#34;&gt;pam_mount-0.4.0.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.4.0-1.i386.rpm&#34;&gt;pam_mount-0.4.0-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.4.0-1.src.rpm&#34;&gt;pam_mount-0.4.0-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.4.1.tar.gz&#34;&gt;pam_mount-0.4.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.4.1-1.i386.rpm&#34;&gt;pam_mount-0.4.1-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.4.1-1.src.rpm&#34;&gt;pam_mount-0.4.1-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.4.2test1.tar.gz&#34;&gt;pam_mount-0.4.2test1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.4.2test1-1.i386.rpm&#34;&gt;pam_mount-0.4.2test1-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.4.2test1-1.src.rpm&#34;&gt;pam_mount-0.4.2test1-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.0.tar.gz&#34;&gt;pam_mount-0.5.0.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.0-1.i386.rpm&#34;&gt;pam_mount-0.5.0-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.0-1.src.rpm&#34;&gt;pam_mount-0.5.0-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.1.tar.gz&#34;&gt;pam_mount-0.5.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.1-1.i386.rpm&#34;&gt;pam_mount-0.5.1-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.1-1.src.rpm&#34;&gt;pam_mount-0.5.1-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.2.tar.gz&#34;&gt;pam_mount-0.5.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.2-1.i386.rpm&#34;&gt;pam_mount-0.5.2-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.2-1.src.rpm&#34;&gt;pam_mount-0.5.2-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.3.tar.gz&#34;&gt;pam_mount-0.5.3.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.3-1.i386.rpm&#34;&gt;pam_mount-0.5.3-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.3-1.src.rpm&#34;&gt;pam_mount-0.5.3-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.4.tar.gz&#34;&gt;pam_mount-0.5.4.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.4-1.i386.rpm&#34;&gt;pam_mount-0.5.4-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.4-1.src.rpm&#34;&gt;pam_mount-0.5.4-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.5.tar.gz&#34;&gt;pam_mount-0.5.5.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.5-1.i386.rpm&#34;&gt;pam_mount-0.5.5-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.5-1.src.rpm&#34;&gt;pam_mount-0.5.5-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.6.tar.gz&#34;&gt;pam_mount-0.5.6.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.6-1.i386.rpm&#34;&gt;pam_mount-0.5.6-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.6-1.src.rpm&#34;&gt;pam_mount-0.5.6-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.7.tar.gz&#34;&gt;pam_mount-0.5.7.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.7-1.i386.rpm&#34;&gt;pam_mount-0.5.7-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.7-1.src.rpm&#34;&gt;pam_mount-0.5.7-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.8.tar.gz&#34;&gt;pam_mount-0.5.8.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.8-1.i386.rpm&#34;&gt;pam_mount-0.5.8-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.8-1.src.rpm&#34;&gt;pam_mount-0.5.8-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.9.tar.gz&#34;&gt;pam_mount-0.5.9.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.9-1.i386.rpm&#34;&gt;pam_mount-0.5.9-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.9-1.src.rpm&#34;&gt;pam_mount-0.5.9-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.11.tar.gz&#34;&gt;pam_mount-0.5.11.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.12.tar.gz&#34;&gt;pam_mount-0.5.12.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.13.tar.gz&#34;&gt;pam_mount-0.5.13.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.14.tar.gz&#34;&gt;pam_mount-0.5.14.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.15.tar.gz&#34;&gt;pam_mount-0.5.15.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.5.16.tar.gz&#34;&gt;pam_mount-0.5.16.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.0.tar.gz&#34;&gt;pam_mount-0.9.0.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.0-1.ppc.rpm&#34;&gt;pam_mount-0.9.0-1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.0-1.src.rpm&#34;&gt;pam_mount-0.9.0-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.1.tar.gz&#34;&gt;pam_mount-0.9.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.1-1.ppc.rpm&#34;&gt;pam_mount-0.9.1-1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.1-1.src.rpm&#34;&gt;pam_mount-0.9.1-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.2.tar.gz&#34;&gt;pam_mount-0.9.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.2-1.ppc.rpm&#34;&gt;pam_mount-0.9.2-1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.2-1.src.rpm&#34;&gt;pam_mount-0.9.2-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.3.tar.gz&#34;&gt;pam_mount-0.9.3.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.3-1.ppc.rpm&#34;&gt;pam_mount-0.9.3-1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.3-1.src.rpm&#34;&gt;pam_mount-0.9.3-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.4.tar.gz&#34;&gt;pam_mount-0.9.4.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.4-1.ppc.rpm&#34;&gt;pam_mount-0.9.4-1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.4-1.src.rpm&#34;&gt;pam_mount-0.9.4-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.5.tar.gz&#34;&gt;pam_mount-0.9.5.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.5-1.ppc.rpm&#34;&gt;pam_mount-0.9.5-1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.5-1.src.rpm&#34;&gt;pam_mount-0.9.5-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.6.tar.gz&#34;&gt;pam_mount-0.9.6.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.6-1.ppc.rpm&#34;&gt;pam_mount-0.9.6-1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.6-1.src.rpm&#34;&gt;pam_mount-0.9.6-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.7.tar.gz&#34;&gt;pam_mount-0.9.7.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.7-1.ppc.rpm&#34;&gt;pam_mount-0.9.7-1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.7-1.src.rpm&#34;&gt;pam_mount-0.9.7-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.8.tar.gz&#34;&gt;pam_mount-0.9.8.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.8-0.fdr.1.ppc.rpm&#34;&gt;pam_mount-0.9.8-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.8-0.fdr.1.src.rpm&#34;&gt;pam_mount-0.9.8-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.9.tar.gz&#34;&gt;pam_mount-0.9.9.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.9-0.fdr.1.ppc.rpm&#34;&gt;pam_mount-0.9.9-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.9-0.fdr.1.src.rpm&#34;&gt;pam_mount-0.9.9-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.10.tar.gz&#34;&gt;pam_mount-0.9.10.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.11.tar.gz&#34;&gt;pam_mount-0.9.11.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.11-0.fdr.1.ppc.rpm&#34;&gt;pam_mount-0.9.11-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.11-0.fdr.1.src.rpm&#34;&gt;pam_mount-0.9.11-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.12.tar.gz&#34;&gt;pam_mount-0.9.12.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.12-0.fdr.1.ppc.rpm&#34;&gt;pam_mount-0.9.12-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.12-0.fdr.1.src.rpm&#34;&gt;pam_mount-0.9.12-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.12-0.fdr.2.ppc.rpm&#34;&gt;pam_mount-0.9.12-0.fdr.2.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.12-0.fdr.2.src.rpm&#34;&gt;pam_mount-0.9.12-0.fdr.2.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.13.tar.gz&#34;&gt;pam_mount-0.9.13.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.13-0.fdr.1.i386.rpm&#34;&gt;pam_mount-0.9.13-0.fdr.1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.13-0.fdr.1.ppc.rpm&#34;&gt;pam_mount-0.9.13-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.13-0.fdr.1.src.rpm&#34;&gt;pam_mount-0.9.13-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.14.tar.gz&#34;&gt;pam_mount-0.9.14.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.14-0.fdr.1.i386.rpm&#34;&gt;pam_mount-0.9.14-0.fdr.1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.14-0.fdr.1.ppc.rpm&#34;&gt;pam_mount-0.9.14-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.14-0.fdr.1.src.rpm&#34;&gt;pam_mount-0.9.14-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.15.tar.gz&#34;&gt;pam_mount-0.9.15.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.15-0.fdr.1.i386.rpm&#34;&gt;pam_mount-0.9.15-0.fdr.1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.15-0.fdr.1.ppc.rpm&#34;&gt;pam_mount-0.9.15-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.15-0.fdr.1.src.rpm&#34;&gt;pam_mount-0.9.15-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.16.tar.gz&#34;&gt;pam_mount-0.9.16.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.16-0.fdr.1.ppc.rpm&#34;&gt;pam_mount-0.9.16-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.16-0.fdr.1.src.rpm&#34;&gt;pam_mount-0.9.16-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.17.tar.gz&#34;&gt;pam_mount-0.9.17.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.17-0.fdr.1.ppc.rpm&#34;&gt;pam_mount-0.9.17-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.17-0.fdr.1.src.rpm&#34;&gt;pam_mount-0.9.17-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.18.tar.gz&#34;&gt;pam_mount-0.9.18.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.18-0.fdr.1.ppc.rpm&#34;&gt;pam_mount-0.9.18-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.18-0.fdr.1.src.rpm&#34;&gt;pam_mount-0.9.18-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.19.tar.gz&#34;&gt;pam_mount-0.9.19.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.19-0.fdr.1.ppc.rpm&#34;&gt;pam_mount-0.9.19-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.19-0.fdr.1.src.rpm&#34;&gt;pam_mount-0.9.19-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.20.tar.gz&#34;&gt;pam_mount-0.9.20.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.20-0.fdr.1.ppc.rpm&#34;&gt;pam_mount-0.9.20-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.20-0.fdr.1.src.rpm&#34;&gt;pam_mount-0.9.20-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.21.tar.gz&#34;&gt;pam_mount-0.9.21.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.21-0.fdr.1.ppc.rpm&#34;&gt;pam_mount-0.9.21-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.21-0.fdr.1.src.rpm&#34;&gt;pam_mount-0.9.21-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.22.tar.gz&#34;&gt;pam_mount-0.9.22.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.22-0.fdr.1.ppc.rpm&#34;&gt;pam_mount-0.9.22-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.22-0.fdr.1.src.rpm&#34;&gt;pam_mount-0.9.22-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.23.tar.gz&#34;&gt;pam_mount-0.9.23.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.23-0.fdr.1.ppc.rpm&#34;&gt;pam_mount-0.9.23-0.fdr.1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.23-0.fdr.1.src.rpm&#34;&gt;pam_mount-0.9.23-0.fdr.1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.24.tar.gz&#34;&gt;pam_mount-0.9.24.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.24-1.ppc.rpm&#34;&gt;pam_mount-0.9.24-1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.24-1.src.rpm&#34;&gt;pam_mount-0.9.24-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.25.tar.gz&#34;&gt;pam_mount-0.9.25.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.25-1.ppc.rpm&#34;&gt;pam_mount-0.9.25-1.ppc.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-0.9.25-1.src.rpm&#34;&gt;pam_mount-0.9.25-1.src.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pam_mount-debuginfo-0.9.13-0.fdr.1.i386.rpm&#34;&gt;pam_mount-debuginfo-0.9.13-0.fdr.1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	

	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>pedansee</title>
      <link>https://www.flyn.org/projects/pedansee/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/pedansee/</guid>
      <description>&lt;p&gt;Pedansee checks C source files for compliance with a particular programming style.
The style is currently defined by the pedansee source code
in the form of functions which walk each source file&amp;rsquo;s syntax tree.
You can modify some aspects of this style through the use of regular
expressions.&lt;/p&gt;
&lt;p&gt;For example, given the following silly program stored at silly.c:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;glib.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;float&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pi&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;argc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;argv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;nf&#34;&gt;foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;nf&#34;&gt;g_print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Hello, world!&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;you could run pedansee in the following way, producing the indicated effect:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ pedansee silly.c -- -I/usr/include/glib-2.0/ -I/usr/lib64/glib-2.0/include/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;silly.c:4:7 id pi does not start with silly_
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;silly.c:6:13 static id silly does not start with &amp;#39;_&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;silly.c:6:13 function silly name not on column one
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;silly.c:10:5 function main name not on column one
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pedansee prefers that silly.c instead contain:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;glib.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;float&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;silly_pi&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nf&#34;&gt;_foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;argc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;argv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;nf&#34;&gt;_foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;nf&#34;&gt;g_print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Hello, world!&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pedansee supports configuration files which allow you to configure
some aspects of its style. For example, the following pedansee.conf
defines the form static, constant, and exported symbols must follow:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;regex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Za&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;z_&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;_&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Za&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;z_&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;exported&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;^&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Za&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;z_&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;




	

	

	

	

	

	

	

	

	

	

	

	

	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;pedansee-0.0.1.tar.gz&#34;&gt;pedansee-0.0.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pedansee-0.0.2.tar.gz&#34;&gt;pedansee-0.0.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pedansee-0.0.3.tar.gz&#34;&gt;pedansee-0.0.3.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;pedansee-0.0.4.tar.gz&#34;&gt;pedansee-0.0.4.tar.gz&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	

	

	

	

	



	&lt;p&gt;
		The pedansee project is  also 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone https://www.flyn.org/git/pedansee&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>Pylog</title>
      <link>https://www.flyn.org/projects/Pylog/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/Pylog/</guid>
      <description>&lt;p&gt;Pylog is a &lt;a href=&#34;http://www.python.org&#34;&gt;Python&lt;/a&gt; module which
gives one access to a Prolog interpreter.  Pylog simply executes a
Prolog interpreter process, communicates with it using pipes, and
provides a simple API for communicating with it.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&#34;http://gocept.com&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;gocept&lt;/a&gt; company has modified Pypvm
to work with newer versions of SWI Prolog.&lt;/p&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;Pylog.tar.gz&#34;&gt;Pylog.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;Pylog-0.75.tar.gz&#34;&gt;Pylog-0.75.tar.gz&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>pypvm</title>
      <link>https://www.flyn.org/projects/pypvm/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/pypvm/</guid>
      <description>&lt;p&gt;Pypvm is a &lt;a href=&#34;http://www.python.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Python&lt;/a&gt; module that
allows interaction with the &lt;a href=&#34;http://www.epm.ornl.gov/pvm/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Parallel Virtual Machine&lt;/a&gt;
(PVM) package.  PVM
allows a collection of computers connected by a network to
serve as a single parallel computer.&lt;/p&gt;
&lt;p&gt;Pypvm is intended to be an educational and
prototyping tool.&lt;/p&gt;
&lt;p&gt;Greg Baker has taken over the maintenance of pypvm.
One can now find the up to date pypvm source code at
&lt;a href=&#34;http://pypvm.sourceforge.net&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://pypvm.sourceforge.net&lt;/a&gt;.&lt;/p&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;pypvm-0.8.7.tar.gz&#34;&gt;pypvm-0.8.7.tar.gz&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	

	

	




</description>
    </item>
    
    <item>
      <title>SimpleFlow</title>
      <link>https://www.flyn.org/projects/SimpleFlow/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/SimpleFlow/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;SimpleFlow implements a very simple view of information flow within the Linux kernel.
(We do not claim to approach the sophistication of
&lt;a href=&#34;http://doc.cat-v.org/unix/v10/IX/163c.ps&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;IX&lt;/a&gt;, &lt;a href=&#34;http://www.scs.stanford.edu/histar/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;HiStar&lt;/a&gt;, etc.)
We have found the design of SimpleFlow useful in education
and certain computer-security competitions,
and we are also interested in the use of SimpleFlow
to study post-compromise exfiltration and insider threats.&lt;/p&gt;
&lt;p&gt;Under SimpleFlow, the system administrator designates some
filesystem objects as &lt;em&gt;confidential&lt;/em&gt; and some programs as &lt;em&gt;trusted&lt;/em&gt;
(SimpleFlow stores both using extended attributes). Any process not loaded from
a trusted program will become &lt;em&gt;tainted&lt;/em&gt; upon reading a confidential
object. The kernel transfers this taint status from process to process
as a result of inter-process communication (e.g., an untainted process
reads from a tainted process over an IPC channel). If a tainted process
writes to the network, the kernel sets the packet&#39;s RFC 3514 evil bit;
this allows for a variety of filtering or spoofing strategies
which might help determine the intention of the
principal who read the confidential data in the first place.&lt;/p&gt;
&lt;h2 id=&#34;simpleflow-virtual-machine&#34;&gt;SimpleFlow Virtual Machine&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;SimpleFlowDemo-0.3-linux-3.10.0.ova&#34;&gt;SimpleFlowDemo-0.3-linux-3.10.0.ova&lt;/a&gt;
provides in OVA format a virtual machine which contains
a SimpleFlow kernel along with a CentOS 7 installation.
Some useful SimpleFlow-related commands include:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;kbd&gt;getfattr -n security.simple-flow.confidential -v true &lt;i&gt;PATH&lt;/i&gt;&lt;/kbd&gt;&lt;/dt&gt;
&lt;dd&gt;Set the confidential flag on the file at &lt;i&gt;PATH&lt;/i&gt;.&lt;/dd&gt;
&lt;dt&gt;&lt;kbd&gt;getfattr -x security.simple-flow.confidential &lt;i&gt;PATH&lt;/i&gt;&lt;/kbd&gt;&lt;/dt&gt;
&lt;dd&gt;Remove the confidential flag from the file at &lt;i&gt;PATH&lt;/i&gt;.&lt;/dd&gt;
&lt;dt&gt;&lt;kbd&gt;getfattr -n security.simple-flow.trusted -v true &lt;i&gt;PATH&lt;/i&gt;&lt;/kbd&gt;&lt;/dt&gt;
&lt;dd&gt;Set the trusted flag on the program at &lt;i&gt;PATH&lt;/i&gt;.&lt;/dd&gt;
&lt;dt&gt;&lt;kbd&gt;getfattr -x security.simple-flow.trusted &lt;i&gt;PATH&lt;/i&gt;&lt;/kbd&gt;&lt;/dt&gt;
&lt;dd&gt;Remove the trusted flag from the program at &lt;i&gt;PATH&lt;/i&gt;.&lt;/dd&gt;
&lt;dt&gt;&lt;kbd&gt;ps auxZ&lt;/kbd&gt;&lt;/dt&gt;
&lt;dd&gt;Enumerate the running processes, including whether they are tainted.&lt;/dd&gt;
&lt;dt&gt;&lt;kbd&gt;echo 1 &gt; /proc/&lt;i&gt;PID&lt;/i&gt;/attr/current&lt;/kbd&gt;&lt;/dt&gt;
&lt;dd&gt;Taint the process matching &lt;i&gt;PID&lt;/i&gt;.&lt;/dd&gt;
&lt;dt&gt;&lt;kbd&gt;echo 0 &gt; /proc/&lt;i&gt;PID&lt;/i&gt;/attr/current&lt;/kbd&gt;&lt;/dt&gt;
&lt;dd&gt;Untaint the process matching &lt;i&gt;PID&lt;/i&gt;.&lt;/dd&gt;
&lt;dt&gt;&lt;kbd&gt;dmesg -w&lt;/kbd&gt;&lt;/dt&gt;
&lt;dd&gt;Watch SimpleFlow (and other kernel) events.&lt;/dd&gt;
&lt;/dl&gt;
&lt;h1 id=&#34;related-publications&#34;&gt;Related publications&lt;/h1&gt;









	
		







  








&lt;div class=&#34;media stream-item view-compact&#34;&gt;
  &lt;div class=&#34;media-body&#34;&gt;

    &lt;div class=&#34;section-subheading article-title mb-0 mt-0&#34;&gt;
      &lt;a href=&#34;https://www.flyn.org/publications/Studying-Naive-Users-and-the-Insider-Threat-with-SimpleFlow/&#34; &gt;Studying Naive Users and the Insider Threat with SimpleFlow&lt;/a&gt;
    &lt;/div&gt;

    

    &lt;div class=&#34;stream-meta article-metadata&#34;&gt;

      

      
      &lt;div&gt;
        

  &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Ryan-Johnson/&#34;&gt;Ryan Johnson&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Jessie-Lass/&#34;&gt;Jessie Lass&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/W.-Michael-Petullo/&#34;&gt;W. Michael Petullo&lt;/a&gt;&lt;/span&gt;
      &lt;/div&gt;
      
    &lt;/div&gt;

    
    &lt;div class=&#34;btn-links&#34;&gt;
      








  
    
  



&lt;a class=&#34;btn btn-outline-primary btn-page-header btn-sm&#34; href=&#34;http://www.flyn.org/publications/2016-SimpleFlow.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;
  PDF
&lt;/a&gt;



&lt;a href=&#34;#&#34; class=&#34;btn btn-outline-primary btn-page-header btn-sm js-cite-modal&#34;
        data-filename=&#34;/publications/Studying-Naive-Users-and-the-Insider-Threat-with-SimpleFlow/cite.bib&#34;&gt;
  Cite
&lt;/a&gt;















    &lt;/div&gt;
    

  &lt;/div&gt;
  &lt;div class=&#34;ml-3&#34;&gt;
    
    
  &lt;/div&gt;
&lt;/div&gt;

	


&lt;h1 id=&#34;downloads&#34;&gt;Downloads&lt;/h1&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;SimpleFlowDemo-0.3-linux-3.10.0.ova&#34;&gt;SimpleFlowDemo-0.3-linux-3.10.0.ova&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;linux-3.10.0-simpleflow-0.1.patch&#34;&gt;linux-3.10.0-simpleflow-0.1.patch&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;linux-3.10.0-simpleflow-0.2.patch&#34;&gt;linux-3.10.0-simpleflow-0.2.patch&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;linux-3.10.0-simpleflow-0.3.patch&#34;&gt;linux-3.10.0-simpleflow-0.3.patch&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;simple-flow-rest-0.2.tar.gz&#34;&gt;simple-flow-rest-0.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;simple-flow-rest-0.3.tar.gz&#34;&gt;simple-flow-rest-0.3.tar.gz&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	

	



	&lt;p&gt;
		The SimpleFlow project is  also 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone https://www.flyn.org/git/simple-flow-kernel -b v3.10-simpleflow&lt;/pre&gt;


</description>
    </item>
    
    <item>
      <title>speak</title>
      <link>https://www.flyn.org/projects/speak/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/speak/</guid>
      <description>&lt;p&gt;Speak provides a simple interface to
&lt;a href=&#34;http://www.cstr.ed.ac.uk/projects/festival/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Festival&lt;/a&gt;, a
speech synthesis package. The script attempts to detect when
&lt;a href=&#34;http://www.tux.org/~ricdude/EsounD.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;EsounD&lt;/a&gt; is running and takes
advantage of it.  Otherwise, speak uses the computer&#39;s sound device
directly.  Speak can be used for tasks such as reading incoming email.&lt;/p&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;speak.i386.rpm&#34;&gt;speak.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;speak.tar.gz&#34;&gt;speak.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;speak-0.0.1.tar.gz&#34;&gt;speak-0.0.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;speak-0.0.1-1.i386.rpm&#34;&gt;speak-0.0.1-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;speak-0.0.2.tar.gz&#34;&gt;speak-0.0.2.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;speak-0.0.2-1.i386.rpm&#34;&gt;speak-0.0.2-1.i386.rpm&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	

	




</description>
    </item>
    
    <item>
      <title>TunesConvert</title>
      <link>https://www.flyn.org/projects/TunesConvert/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/TunesConvert/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;TunesConvert is a simple utility that converts an iTunes library into
audio files encoded using FLAC. This allows you to move iTunes music to
non-Apple devices. TunesConvert is not able to transcode files protected
with DRM.  For information about iTunes DRM, see &lt;a href=&#34;http://support.apple.com/kb/HT1711&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;the support
page&lt;/a&gt; on the issue.&lt;/p&gt;
&lt;p&gt;TunesConvert uses the GStreamer media framework and relies on plugins
provided by the following packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;gstreamer&lt;/li&gt;
&lt;li&gt;gst-plugins-base&lt;/li&gt;
&lt;li&gt;gst-plugins-good&lt;/li&gt;
&lt;li&gt;gst-plugins-bad&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Run TunesConvert, select an output directory, and press “Transcode”.&lt;/p&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;TunesConvert-0.0.1.tar.gz&#34;&gt;TunesConvert-0.0.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	

	




</description>
    </item>
    
    <item>
      <title>VisorFlow</title>
      <link>https://www.flyn.org/projects/VisorFlow/</link>
      <pubDate>Thu, 12 Mar 2020 09:02:58 -0400</pubDate>
      <guid>https://www.flyn.org/projects/VisorFlow/</guid>
      <description>&lt;h1 id=&#34;overview&#34;&gt;Overview&lt;/h1&gt;
&lt;p&gt;VisorFlow uses virtual-machine introspection
to observe system calls,
infer information flow,
and
control confidential data.
Under VisorFlow, the system administrator designates some filesystem objects as confidential and some programs as trusted.
Any process not loaded from a trusted program will become tainted upon reading a confidential object.
The kernel transfers this taint status from process to process as a result of inter-process communication
(e.g., an untainted process reads from a tainted process over a pipe).
If a tainted process writes to the network,
then the kernel sets the packet&amp;rsquo;s RFC 3514 evil bit;
this permits a variety of filtering or spoofing strategies
that might help determine the human intentions involved.&lt;/p&gt;


















&lt;figure  id=&#34;figure-visorflow-architecture&#34;&gt;
  &lt;div class=&#34;d-flex justify-content-center&#34;&gt;
    &lt;div class=&#34;w-100&#34; &gt;&lt;img src=&#34;fig-architecture.png&#34; alt=&#34;VisorFlow architecture&#34; loading=&#34;lazy&#34; data-zoomable width=&#34;50%&#34; /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;figcaption&gt;
      VisorFlow architecture
    &lt;/figcaption&gt;&lt;/figure&gt;

&lt;p&gt;The figure above depicts the components that make up VisorFlow, including:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;the Xen hypervisor;&lt;/li&gt;
&lt;li&gt;Linux, running in a Dom0 domain;&lt;/li&gt;
&lt;li&gt;one or more DomU domains running Linux or Windows;&lt;/li&gt;
&lt;li&gt;the VisorFlow security monitor;&lt;/li&gt;
&lt;li&gt;one or more processes running within each DomU;&lt;/li&gt;
&lt;li&gt;firewalld;&lt;/li&gt;
&lt;li&gt;the VisorFlow network engine;&lt;/li&gt;
&lt;li&gt;the VisorFlow Windows authorization engine; and&lt;/li&gt;
&lt;li&gt;the VisorFlow Linux authorization engine.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Not pictured here is VisorFlow&amp;rsquo;s network filter.&lt;/p&gt;
&lt;p&gt;Consider process P&lt;sub&gt;n&lt;/sub&gt; in DomU that invokes a system call (a).
The act of invoking a system call normally involves the operating system (b),
but here it also involves the hypervisor (c) and the VisorFlow security monitor (d).
The VisorFlow security monitor observes such system calls and infers how they allow information to flow between processes,
and the security monitor&amp;rsquo;s operating-system engines use these observations to implement a taint-tracking system that resembles &lt;a href=&#34;../SimpleFlow&#34;&gt;SimpleFlow&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In the case of network system calls, the VisorFlow network engine works with Dom0 and the hypervisor
to mark as evil packets originating from tainted processes and to taint processes that receive marked packets.
For example, if the Linux engine infers that a system call from a tainted process P&lt;sub&gt;n&lt;/sub&gt; would result in network traffic,
the Linux engine would notify the network engine (e).
The network engine in turn adds a network filter rule to the host firewall through firewalld, which has the affect of labeling P&lt;sub&gt;n&lt;/sub&gt;&amp;rsquo;s packets as evil (f).
The added rule involves instructing NetFilter to rely on VisorFlow to actually set the evil bit using the NFQUEUE interface (g).
Later, the Linux engine might infer that P&lt;sub&gt;n&lt;/sub&gt; exited; when this happens, the Linux engine and network engine will remove the firewall rule that labeled P&lt;sub&gt;n&lt;/sub&gt;&amp;rsquo;s packets as evil.&lt;/p&gt;
&lt;p&gt;Each operating-system-specific engine implements a different model upon which it relies to make decisions about the system. The models encompass:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;which system calls can cause a process to taint,&lt;/li&gt;
&lt;li&gt;which system calls can cause an object to become confidential,&lt;/li&gt;
&lt;li&gt;which system calls can cause the generation of network packets,&lt;/li&gt;
&lt;li&gt;which processes are tainted, and&lt;/li&gt;
&lt;li&gt;which objects are confidential (this has to be persistently stored to survive reboots).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This primary advantage of VisorFlow over SimpleFlow is that VisorFlow
needs no kernel modifications to operate. This has two important consequences:
(1) VisorFlow can mediate closed-source operating systems such as Windows,
and (2) VisorFlow avoids difficult-to-maintain modifications
to open-source kernels.
These advantages come at a performance cost.&lt;/p&gt;
&lt;p&gt;By combining aspects of access-control and provenance systems,
VisorFlow removes the race conditions found in some provenance systems.&lt;/p&gt;
&lt;h1 id=&#34;test-vm&#34;&gt;Test VM&lt;/h1&gt;
&lt;p&gt;After saving the following files to your computer
and decompressing them, you can
boot the guest using &lt;code&gt;xl create visorflow-guest-linux.cfg&lt;/code&gt;.
The root password is &lt;code&gt;password&lt;/code&gt;.&lt;/p&gt;
&lt;dl&gt;
	&lt;dt&gt;Disk image&lt;/dt&gt;
	&lt;dd&gt;&lt;a href=&#34;disk.img.gz&#34;&gt;disk.img.gz&lt;/a&gt;&lt;/dd&gt;
	&lt;dt&gt;Spare disk image&lt;/dt&gt;
	&lt;dd&gt;&lt;a href=&#34;spare.img.gz&#34;&gt;spare.img.gz&lt;/a&gt;&lt;/dd&gt;
	&lt;dt&gt;Domain configuration (&lt;i&gt;you must modify the paths contained therein to suit your environment&lt;/i&gt;)&lt;/dt&gt;
	&lt;dd&gt;&lt;a href=&#34;visorflow-guest-linux.cfg&#34;&gt;visorflow-guest-linux.cfg&lt;/a&gt;&lt;/dd&gt;
&lt;/dl&gt;
&lt;h1 id=&#34;related-publications&#34;&gt;Related publications&lt;/h1&gt;









	
		







  








&lt;div class=&#34;media stream-item view-compact&#34;&gt;
  &lt;div class=&#34;media-body&#34;&gt;

    &lt;div class=&#34;section-subheading article-title mb-0 mt-0&#34;&gt;
      &lt;a href=&#34;https://www.flyn.org/publications/Using-VisorFlow-to-Control-Information-Flow-without-Modifying-the-Operating-System-Kernel-or-its-Userspace/&#34; &gt;Using VisorFlow to Control Information Flow without Modifying the Operating System Kernel or its Userspace&lt;/a&gt;
    &lt;/div&gt;

    

    &lt;div class=&#34;stream-meta article-metadata&#34;&gt;

      

      
      &lt;div&gt;
        

  &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Matt-Shockley/&#34;&gt;Matt Shockley&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Chris-Maixner/&#34;&gt;Chris Maixner&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Ryan-Johnson/&#34;&gt;Ryan Johnson&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/Mitch-DeRidder/&#34;&gt;Mitch DeRidder&lt;/a&gt;&lt;/span&gt;, &lt;span &gt;
      &lt;a href=&#34;https://www.flyn.org/authors/W.-Michael-Petullo/&#34;&gt;W. Michael Petullo&lt;/a&gt;&lt;/span&gt;
      &lt;/div&gt;
      
    &lt;/div&gt;

    
    &lt;div class=&#34;btn-links&#34;&gt;
      








  
    
  



&lt;a class=&#34;btn btn-outline-primary btn-page-header btn-sm&#34; href=&#34;http://www.flyn.org/publications/2017-VisorFlow.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;
  PDF
&lt;/a&gt;



&lt;a href=&#34;#&#34; class=&#34;btn btn-outline-primary btn-page-header btn-sm js-cite-modal&#34;
        data-filename=&#34;/publications/Using-VisorFlow-to-Control-Information-Flow-without-Modifying-the-Operating-System-Kernel-or-its-Userspace/cite.bib&#34;&gt;
  Cite
&lt;/a&gt;















    &lt;/div&gt;
    

  &lt;/div&gt;
  &lt;div class=&#34;ml-3&#34;&gt;
    
    
  &lt;/div&gt;
&lt;/div&gt;

	


&lt;h1 id=&#34;downloads&#34;&gt;Downloads&lt;/h1&gt;





	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	

	
		
			
			&lt;ul&gt;
				
					&lt;li&gt;&lt;a href=&#34;disk.img.gz&#34;&gt;disk.img.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;spare.img.gz&#34;&gt;spare.img.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;visorflow-0.0.1.tar.gz&#34;&gt;visorflow-0.0.1.tar.gz&lt;/a&gt;&lt;/li&gt;
				
					&lt;li&gt;&lt;a href=&#34;visorflow-guest-linux.cfg&#34;&gt;visorflow-guest-linux.cfg&lt;/a&gt;&lt;/li&gt;
				
			&lt;/ul&gt;
		
	



	&lt;p&gt;
		The VisorFlow project is  also 
		available as a Git repository. To clone the repository, execute
	&lt;/p&gt;
	&lt;pre&gt;git clone https://www.flyn.org/git/visorflow&lt;/pre&gt;


</description>
    </item>
    
  </channel>
</rss>
