<?xml version="1.0" encoding="utf-8"?>

<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
<title type="text">l e w k . o r g</title>
<subtitle type="html"><![CDATA[

]]></subtitle>
<id>http://lewk.org/blog/index.atom</id>
<link rel="alternate" type="text/html" href="http://lewk.org/blog" />
<link rel="self" type="application/atom+xml" href="http://lewk.org/blog/index.atom" />


<author>
<name>Luke Macken</name>
<uri>http://lewk.org/blog/index.atom</uri>
<email>lewk csh rit edu</email>
</author>
<rights>Copyright 2007-2012 Luke Macken</rights>
<generator uri="http://pyblosxom.sourceforge.net/" version="1.4.2 8/16/2007">
PyBlosxom http://pyblosxom.sourceforge.net/ 1.4.2 8/16/2007
</generator>

<updated>2013-03-07T17:30:21Z</updated>
<!-- icon?  logo?  -->

<entry>
<title type="html">Keeping your finger on the pulse of the Fedora community</title>
<category term="" />
<id>http://lewk.org/blog/2013/03/07/fedmsg-notify</id>
<updated>2013-03-07T17:30:21Z</updated>
<published>2013-03-07T17:30:21Z</published>
<link rel="alternate" type="text/html" href="http://lewk.org/blog/fedmsg-notify.html" />
<content type="html">
&lt;p&gt;
&lt;img src=&quot;http://www.fedmsg.com/en/latest/_static/fedmsg.png&quot; align=&quot;right&quot; title=&quot;Hop on the bus!&quot;/&gt;

For those who haven&apos;t been keeping up with all of the awesome code &lt;a
href=&quot;http://threebean.org/blog&quot;&gt;Ralph Bean&lt;/a&gt; has been churning out lately,
be sure to checkout &lt;a href=&quot;http://fedmsg.com&quot;&gt;fedmsg.com&lt;/a&gt;. Hop on &lt;a
href=&quot;http://webchat.freenode.net/?channels=fedora-fedmsg&quot;&gt;#fedora-fedmsg&lt;/a&gt;
on Freenode or load up &lt;a href=&quot;https://apps.fedoraproject.org/busmon&quot;&gt;busmon&lt;/a&gt; to see it in action.
Not all of the Fedora Infrastructure services currently fire off fedmsgs, but we&apos;re &lt;a
href=&quot;http://fedmsg.readthedocs.org/en/latest/status/&quot;&gt;getting very close&lt;/a&gt;.

&lt;/p&gt;
&lt;p&gt;
This technology is built on top of &lt;a href=&quot;http://github.com/mokshaproject&quot;&gt;Moksha&lt;/a&gt;, which I created many
years ago while writing the first version of the &lt;a
href=&quot;https://fedorahosted.org/fedoracommunity/&quot;&gt;fedoracommunity&lt;/a&gt; app.
It&apos;s come a long way since then, and now can speak &lt;a
href=&quot;http://zeromq.org&quot;&gt;&amp;Oslash;MQ&lt;/a&gt; over WebSockets, as well as &lt;a
href=&quot;http://amqp.org&quot;&gt;AMQP&lt;/a&gt; and &lt;a href=&quot;stomp.codehaus.org&quot;&gt;STOMP&lt;/a&gt; over &lt;a href=&quot;http://orbited2.org&quot;&gt;Orbited&lt;/a&gt;. Now the time has finally come
to bring Moksha to the desktop!
&lt;/p&gt;

&lt;p&gt;
&lt;h3&gt;
    Introducing fedmsg-notify
&lt;/h3&gt;

&lt;a href=&quot;http://github.com/fedora-infra/fedmsg-notify&quot;&gt;fedmsg-notify&lt;/a&gt; lets
you get realtime desktop notifications of activity within the Fedora community.
It allows you to tap into the firehose of contributions as they happen and
filter them to your liking.  It works with any window manager that supports
the &lt;a
href=&quot;https://developer.gnome.org/notification-spec/&quot;&gt;notification-spec&lt;/a&gt;,
however I&apos;ve only seen the gravatars show up using GNOME.
&lt;/p&gt;

&lt;p&gt;
&lt;center&gt;&lt;img src=&quot;http://lewk.org/img/fedmsg-notify-0-crop.png&quot;&gt;&lt;/center&gt;
&lt;/p&gt;

&lt;p&gt;
For &lt;a href=&quot;https://www.gnome.org/gnome-3&quot;&gt;GNOME Shell&lt;/a&gt; users, you can
[optionally] install &lt;code&gt;&lt;a
href=&quot;https://github.com/lmacken/gnome-shell-extension-fedmsg&quot;&gt;gnome-shell-extension-fedmsg&lt;/a&gt;&lt;/code&gt;,
and then enable it with the &lt;code&gt;gnome-tweak-tool&lt;/code&gt; or by running
&lt;code&gt;`gnome-shell-extension-tool -e fedmsg@lmacken-redhat.com`&lt;/code&gt; (and
        then hit alt+f2 and type &apos;r&apos; to reload the shell). You will then be graced with the presence of The Bus:
&lt;/p&gt;
&lt;p&gt;
&lt;center&gt;&lt;img src=&quot;http://lewk.org/img/gnome-shell-extension-fedmsg.png&quot;&gt;&lt;/center&gt;
&lt;/p&gt;

&lt;p&gt;
For those who aren&apos;t running GNOME shell, you can simply &lt;code&gt;yum install
fedmsg-notify&lt;/code&gt;, and then run &lt;code&gt;fedmsg-notify-config&lt;/code&gt;, or
launch it from your Settings menu. Due to a dependency on Twisted&apos;s
gtk3reactor, fedmsg-notify is currently only available on Fedora 18 and newer.
&lt;/p&gt;

&lt;p&gt;
&lt;center&gt;
    &lt;img src=&quot;http://lewk.org/img/fedmsg-notify-config-0.png&quot;/&gt;
&lt;/center&gt;

&lt;/p&gt;
&lt;p&gt;
The first tab shows you all services that are currently hooked into fedmsg. As
we add new ones, the gui will automatically display them. These services are
defined in the &lt;a
    href=&quot;https://github.com/fedora-infra/fedmsg_meta_fedora_infrastructure&quot;&gt;fedmsg_meta_fedora_infrastructure&lt;/a&gt;
package.
&lt;/p&gt;

&lt;p&gt;
&lt;center&gt;
    &lt;img src=&quot;http://lewk.org/img/fedmsg-notify-config-1.png&quot;/&gt;
&lt;/center&gt;

&lt;/p&gt;
&lt;p&gt;
The Advanced tab lets you further customize what messages you want to see. The &quot;Bugs that you
have encountered&quot; option will display all messages that reference any Bugzilla
numbers for crashes that you have hit locally with &lt;a
    href=&quot;http://abrt.fedorahosted.org&quot;&gt;ABRT&lt;/a&gt;. The other filters involve
querying your local yum database or the &lt;a href=&quot;https://admin.fedoraproject.org/pkgdb&quot;&gt;PackageDB&lt;/a&gt;.
&lt;/p&gt;

&lt;h3&gt;Under the hood&lt;/h3&gt;

&lt;p&gt;
The fedmsg-notify-daemon itself is fairly minimal (see &lt;a
href=&quot;https://github.com/fedora-infra/fedmsg-notify/blob/develop/fedmsg_notify/daemon.py&quot;&gt;daemon.py&lt;/a&gt;).
At it&apos;s core, it&apos;s just a &lt;a href=&quot;http://twistedmatrix.com&quot;&gt;Twisted&lt;/a&gt;
reactor that consumes &amp;Oslash;MQ messages. &lt;a
href=&quot;http://mokshaproject.net&quot;&gt;Moksha&lt;/a&gt; does all of the heavy lifting behind
the scenes, so all we really have to do is specify a &lt;code&gt;topic&lt;/code&gt; to subscribe to and define a &lt;code&gt;consume&lt;/code&gt; method
that gets called with each message. This is essentially just a basic &lt;a
href=&quot;http://moksha.readthedocs.org/en/latest/main/Consumers/&quot;&gt;Moksha
Consumer&lt;/a&gt; with some fedmsg + DBus glue.
&lt;/p&gt;

&lt;code class=&quot;codeblock&quot;&gt;&lt;blockquote&gt;&lt;pre&gt;
&lt;span class=&quot;Statement&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;Identifier&quot;&gt;FedmsgNotifyService&lt;/span&gt;(dbus&lt;span class=&quot;Normal&quot;&gt;.&lt;/span&gt;service&lt;span class=&quot;Normal&quot;&gt;.&lt;/span&gt;Object, fedmsg&lt;span class=&quot;Normal&quot;&gt;.&lt;/span&gt;consumers&lt;span class=&quot;Normal&quot;&gt;.&lt;/span&gt;FedmsgConsumer):
    topic = &lt;span class=&quot;Constant&quot;&gt;&apos;org.fedoraproject.*&apos;&lt;/span&gt;

    &lt;span class=&quot;Statement&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;Identifier&quot;&gt;consume&lt;/span&gt;(&lt;span class=&quot;Type&quot;&gt;self&lt;/span&gt;, msg): &lt;span class=&quot;Normal&quot;&gt;&amp;#8230;&lt;/span&gt;
&lt;/pre&gt;&lt;/blockquote&gt;&lt;/code&gt;

&lt;p&gt;
The daemon will automatically startup upon login, or will get activated by DBus
when enabled via the GUI. When a message arrives, it filters it accordingly,
downloads &amp;amp; caches the icons, [optionally] relays the message over DBus, and then
displays the notification on your desktop.
&lt;/p&gt;

&lt;p&gt;
The API for writing custom filters is dead simple (see &lt;a
    href=&quot;https://github.com/fedora-infra/fedmsg-notify/blob/develop/fedmsg_notify/filters.py&quot;&gt;filters.py&lt;/a&gt;).
Here is an example of one:

&lt;code class=&quot;codeblock&quot;&gt;&lt;blockquote&gt;&lt;pre&gt;
&lt;span class=&quot;Statement&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;Identifier&quot;&gt;MyPackageFilter&lt;/span&gt;(Filter):
    &lt;span class=&quot;Constant&quot;&gt;&amp;quot;&amp;quot;&amp;quot; Matches messages regarding packages that a given user has ACLs on &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
    __description__ = &lt;span class=&quot;Constant&quot;&gt;&apos;Packages that these users maintain&apos;&lt;/span&gt;
    __user_entry__ = &lt;span class=&quot;Constant&quot;&gt;&apos;Usernames&apos;&lt;/span&gt;

    &lt;span class=&quot;Statement&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;Identifier&quot;&gt;__init__&lt;/span&gt;(&lt;span class=&quot;Type&quot;&gt;self&lt;/span&gt;, settings):
        &lt;span class=&quot;Type&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;Normal&quot;&gt;.&lt;/span&gt;usernames = settings&lt;span class=&quot;Normal&quot;&gt;.&lt;/span&gt;replace(&lt;span class=&quot;Constant&quot;&gt;&apos;,&apos;&lt;/span&gt;, &lt;span class=&quot;Constant&quot;&gt;&apos; &apos;&lt;/span&gt;)&lt;span class=&quot;Normal&quot;&gt;.&lt;/span&gt;split()
        &lt;span class=&quot;Type&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;Normal&quot;&gt;.&lt;/span&gt;packages = &lt;span class=&quot;Identifier&quot;&gt;set&lt;/span&gt;()
        reactor&lt;span class=&quot;Normal&quot;&gt;.&lt;/span&gt;callInThread(&lt;span class=&quot;Type&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;Normal&quot;&gt;.&lt;/span&gt;_query_pkgdb)

    &lt;span class=&quot;Statement&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;Identifier&quot;&gt;_query_pkgdb&lt;/span&gt;(&lt;span class=&quot;Type&quot;&gt;self&lt;/span&gt;):
        &lt;span class=&quot;Statement&quot;&gt;for&lt;/span&gt; username &lt;span class=&quot;Statement&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;Type&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;Normal&quot;&gt;.&lt;/span&gt;usernames:
            log&lt;span class=&quot;Normal&quot;&gt;.&lt;/span&gt;info(&lt;span class=&quot;Constant&quot;&gt;&amp;quot;Querying the PackageDB for &lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;%s&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&apos;s packages&amp;quot;&lt;/span&gt; % username)
            &lt;span class=&quot;Statement&quot;&gt;for&lt;/span&gt; pkg &lt;span class=&quot;Statement&quot;&gt;in&lt;/span&gt; PackageDB()&lt;span class=&quot;Normal&quot;&gt;.&lt;/span&gt;user_packages(username)[&lt;span class=&quot;Constant&quot;&gt;&apos;pkgs&apos;&lt;/span&gt;]:
                &lt;span class=&quot;Type&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;Normal&quot;&gt;.&lt;/span&gt;packages&lt;span class=&quot;Normal&quot;&gt;.&lt;/span&gt;add(pkg[&lt;span class=&quot;Constant&quot;&gt;&apos;name&apos;&lt;/span&gt;])

    &lt;span class=&quot;Statement&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;Identifier&quot;&gt;match&lt;/span&gt;(&lt;span class=&quot;Type&quot;&gt;self&lt;/span&gt;, msg, processor):
        packages = processor&lt;span class=&quot;Normal&quot;&gt;.&lt;/span&gt;packages(msg)
        &lt;span class=&quot;Statement&quot;&gt;for&lt;/span&gt; package &lt;span class=&quot;Statement&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;Type&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;Normal&quot;&gt;.&lt;/span&gt;packages:
            &lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt; package &lt;span class=&quot;Statement&quot;&gt;in&lt;/span&gt; packages:
                &lt;span class=&quot;Statement&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;Type&quot;&gt;True&lt;/span&gt;
&lt;/pre&gt;&lt;/blockquote&gt;&lt;/code&gt;

The &lt;code&gt;fedmsg-notify-config&lt;/code&gt; interface (see &lt;a
    href=&quot;https://github.com/fedora-infra/fedmsg-notify/blob/develop/fedmsg_notify/gui.py&quot;&gt;gui.py&lt;/a&gt;),
automatically introspects the filters and populates the Advanced tab with the
appropriate labels, switches, and text entries.
&lt;/p&gt;


&lt;p&gt;
&lt;h3&gt;Consuming fedmsg over DBus&lt;/h3&gt;

Let&apos;s say you want to write an application that listens to fedmsg, but you
don&apos;t want to deal with spinning up your own connection, or you&apos;re not using
Python, etc. For these cases, fedmsg-notify supports relaying messages over DBus. This
functionality can be enabled by running `&lt;code&gt;gsettings set
org.fedoraproject.fedmsg.notify emit-dbus-signals true&lt;/code&gt;`. You can then
easily listen for the &lt;code&gt;MessageReceived&lt;/code&gt; DBus signal, like so:

&lt;code class=&quot;codeblock&quot;&gt;&lt;blockquote&gt;&lt;pre&gt;
&lt;span class=&quot;Statement&quot;&gt;import&lt;/span&gt; json, dbus

&lt;span class=&quot;Statement&quot;&gt;from&lt;/span&gt; gi&lt;span class=&quot;Normal&quot;&gt;.&lt;/span&gt;repository &lt;span class=&quot;Statement&quot;&gt;import&lt;/span&gt; GObject
&lt;span class=&quot;Statement&quot;&gt;from&lt;/span&gt; dbus&lt;span class=&quot;Normal&quot;&gt;.&lt;/span&gt;mainloop&lt;span class=&quot;Normal&quot;&gt;.&lt;/span&gt;glib &lt;span class=&quot;Statement&quot;&gt;import&lt;/span&gt; DBusGMainLoop

&lt;span class=&quot;Statement&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;Identifier&quot;&gt;consume&lt;/span&gt;(topic, body):
    &lt;span class=&quot;Statement&quot;&gt;print&lt;/span&gt;(topic)
    &lt;span class=&quot;Statement&quot;&gt;print&lt;/span&gt;(json&lt;span class=&quot;Normal&quot;&gt;.&lt;/span&gt;loads(body))

DBusGMainLoop(set_as_default=&lt;span class=&quot;Type&quot;&gt;True&lt;/span&gt;)
bus = dbus&lt;span class=&quot;Normal&quot;&gt;.&lt;/span&gt;SessionBus()
bus&lt;span class=&quot;Normal&quot;&gt;.&lt;/span&gt;add_signal_receiver(consume, signal_name=&lt;span class=&quot;Constant&quot;&gt;&apos;MessageReceived&apos;&lt;/span&gt;,
                        dbus_interface=&lt;span class=&quot;Constant&quot;&gt;&apos;org.fedoraproject.fedmsg.notify&apos;&lt;/span&gt;,
                        path=&lt;span class=&quot;Constant&quot;&gt;&apos;/org/fedoraproject/fedmsg/notify&apos;&lt;/span&gt;)
loop = GObject&lt;span class=&quot;Normal&quot;&gt;.&lt;/span&gt;MainLoop()
loop&lt;span class=&quot;Normal&quot;&gt;.&lt;/span&gt;run()
&lt;/pre&gt;&lt;/blockquote&gt;&lt;/code&gt;
&lt;/p&gt;

&lt;h3&gt; Contributing &lt;/h3&gt;

&lt;p&gt;
If you&apos;re interested in helping out with any layer of the fedmsg stack, hop
in &lt;a href=&quot;http://webchat.freenode.net/?channels=fedora-apps&quot;&gt;#fedora-apps&lt;/a&gt;, and
fork it on GitHub:
&lt;/p&gt;
&lt;p&gt;
    &lt;ul&gt;
        &lt;li&gt;
        &lt;a href=&quot;https://github.com/lmacken/gnome-shell-extension-fedmsg&quot;&gt;lmacken/gnome-shell-extension-fedmsg&lt;/a&gt;&lt;br/&gt;
        &lt;/li&gt;
        &lt;li&gt;
        &lt;a href=&quot;https://github.com/fedora-infra/fedmsg-notify&quot;&gt;fedora-infra/fedmsg-notify&lt;/a&gt;&lt;br/&gt;
        &lt;/li&gt;
        &lt;li&gt;
        &lt;a href=&quot;https://github.com/fedora-infra/fedmsg_meta_fedora_infrastructure&quot;&gt;fedora-infra/fedmsg_meta_fedora_infrastructure&lt;/a&gt;&lt;br/&gt;
        &lt;/li&gt;
        &lt;li&gt;
        &lt;a href=&quot;https://github.com/fedora-infra/fedmsg&quot;&gt;fedora-infra/fedmsg&lt;/a&gt;&lt;br/&gt;
        &lt;/li&gt;
        &lt;li&gt;
        &lt;a href=&quot;https://github.com/mokshaproject/moksha&quot;&gt;mokshaproject/moksha&lt;/a&gt;&lt;br/&gt;
        &lt;/li&gt;
    &lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Hop on the bus!&lt;/b&gt;
&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Wielding the ANU Quantum Random Number Generator</title>
<category term="" />
<id>http://lewk.org/blog/2012/04/21/quantumrandom</id>
<updated>2012-04-21T16:30:20Z</updated>
<published>2012-04-21T16:30:20Z</published>
<link rel="alternate" type="text/html" href="http://lewk.org/blog/quantumrandom.html" />
<content type="html">
&lt;p&gt;
&lt;img src=&quot;http://physics0054.anu.edu.au/Pictures/PXI.jpg&quot; align=&quot;right&quot; width=&quot;250&quot;/&gt;

Last week &lt;a href=&quot;http://sciencedaily.com&quot; target=&quot;_blank&quot;&gt;Science Daily&lt;/a&gt; published an article that caught my attention titled &lt;a
href=&quot;http://www.sciencedaily.com/releases/2012/04/120413161235.htm&quot; target=&quot;_blank&quot;&gt;&apos;Sounds
of Silence&apos; Proving a Hit: World&apos;s Fastest Random Number Generator&lt;/a&gt;.

The tl;dr is that researchers at the &lt;a
    href=&quot;http://photonics.anu.edu.au/qoptics/index.php&quot; target=&quot;_blank&quot;&gt;ANU ARC Centre of
    Excellence for Quantum Computation and Communication Technology&lt;/a&gt; created
a blazing fast random number generator based on quantum fluctuations in a
vacuum.  Thankfully, these awesome scientists are &lt;a
    href=&quot;http://physics0054.anu.edu.au&quot; target=&quot;_blank&quot;&gt;giving their data away for free&lt;/a&gt;,
and they even provide a &lt;a href=&quot;http://150.203.48.55/API/api-demo.php&quot; target=&quot;_blank&quot;&gt;JSON
    API&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
In an effort to make it simple to leverage this data, I created a new project: &lt;a
href=&quot;http://j.mp/quantumrandom&quot; target=&quot;_blank&quot;&gt;quantumrandom&lt;/a&gt;.
It provides a &lt;code&gt;qrandom&lt;/code&gt; command-line tool, a Python API, and
also a &lt;code&gt;/dev/qrandom&lt;/code&gt; Linux character device.
&lt;/p&gt;

&lt;h3&gt;Installing&lt;/h3&gt;
&lt;code&gt;&lt;blockquote&gt;&lt;pre&gt;
$ virtualenv env
$ source env/bin/activate
$ pip install quantumrandom
&lt;/pre&gt;&lt;/blockquote&gt;&lt;/code&gt;

&lt;h3&gt;Using the command-line tool&lt;/h3&gt;
&lt;code&gt;&lt;blockquote&gt;&lt;pre&gt;
$ qrandom --int --min 5 --max 15
7
$ qrandom --binary
���I�%��e(�1��c��Ee�4�������j�Կ��=�^H�c�u
oq��G��Z�^���fK�0_��h��s�b��AE=�rR~���(�^
+a�a̙�IB�,S�!ꀔd�2H~�X�Z����R��.f
...
$ qrandom --hex
1dc59fde43b5045120453186d45653dd455bd8e6fc7d8c591f0018fa9261ab2835eb210e8
e267cf35a54c02ce2a93b3ec448c4c7aa84fdedb61c7b0d87c9e7acf8e9fdadc8d68bcaa5a
...
&lt;/pre&gt;&lt;/blockquote&gt;&lt;/code&gt;

&lt;h3&gt;Creating /dev/qrandom&lt;/h3&gt;

&lt;p&gt;
quantumrandom comes equipped with a multi-threaded character device in
userspace. When read from, this device fires up a bunch of threads to fetch
data. Not only can you utilize this as a rng, but you can also feed this data
back into your system&apos;s entropy pool.
&lt;/p&gt;
&lt;p&gt;
In order to build it&apos;s dependencies, you&apos;ll need the following packages installed:
&lt;code&gt;svn gcc-c++ fuse-devel gccxml libattr-devel&lt;/code&gt;. On Fedora 17 and
newer, you&apos;ll also need the &lt;code&gt;kernel-modules-extra&lt;/code&gt; package installed
for the &lt;code&gt;cuse&lt;/code&gt; module.
&lt;/p&gt;

&lt;code&gt;&lt;blockquote&gt;&lt;pre&gt;
pip install ctypeslib hg+https://cusepy.googlecode.com/hg
sudo modprobe cuse
sudo chmod 666 /dev/cuse
qrandom-dev -v
sudo chmod 666 /dev/qrandom
&lt;/pre&gt;&lt;/blockquote&gt;&lt;/code&gt;

By default it will use 3 threads, which can be changed by passing &apos;&lt;code&gt;-t #&lt;/code&gt;&apos; into the &lt;code&gt;qrandom-dev&lt;/code&gt;.

&lt;h3&gt;Testing the randomness for &lt;a href=&quot;https://en.wikipedia.org/wiki/FIPS_140-2&quot; target=&quot;_blank&quot;&gt;FIPS 140-2&lt;/a&gt; compliance&lt;/h3&gt;
&lt;code&gt;&lt;blockquote&gt;&lt;pre&gt;
$ cat /dev/qrandom | rngtest --blockcount=1000
rngtest: bits received from input: 20000032
rngtest: FIPS 140-2 successes: 1000
rngtest: FIPS 140-2 failures: 0
rngtest: FIPS 140-2(2001-10-10) Monobit: 0
rngtest: FIPS 140-2(2001-10-10) Poker: 0
rngtest: FIPS 140-2(2001-10-10) Runs: 0
rngtest: FIPS 140-2(2001-10-10) Long run: 0
rngtest: FIPS 140-2(2001-10-10) Continuous run: 0
rngtest: input channel speed: (min=17.696; avg=386.711; max=4882812.500)Kibits/s
rngtest: FIPS tests speed: (min=10.949; avg=94.538; max=161.640)Mibits/s
rngtest: Program run time: 50708319 microseconds
&lt;/pre&gt;&lt;/blockquote&gt;&lt;/code&gt;

&lt;h3&gt;Adding entropy to the Linux random number generator&lt;/h3&gt;

&lt;code&gt;&lt;blockquote&gt;&lt;pre&gt;
sudo rngd --rng-device=/dev/qrandom --random-device=/dev/random --timeout=5 --foreground
&lt;/pre&gt;&lt;/blockquote&gt;&lt;/code&gt;

&lt;h3&gt;Monitoring your available entropy levels&lt;/h3&gt;
&lt;code&gt;&lt;blockquote&gt;&lt;pre&gt;
watch -n 1 cat /proc/sys/kernel/random/entropy_avail
&lt;/pre&gt;&lt;/blockquote&gt;&lt;/code&gt;

&lt;h3&gt;Python API&lt;/h3&gt;

&lt;p&gt;
The quantumrandom Python module contains a low-level &lt;code&gt;get_data&lt;/code&gt;
function, which is modelled after the ANU Quantum Random Number Generator&apos;s JSON
API. It returns variable-length lists of either &lt;code&gt;uint16&lt;/code&gt; or
&lt;code&gt;hex16&lt;/code&gt; data.
&lt;code&gt;&lt;blockquote&gt;&lt;pre&gt;
&gt;&gt;&gt; quantumrandom.get_data(data_type=&apos;uint16&apos;, array_length=5)
[42796, 32457, 9242, 11316, 21078]
&gt;&gt;&gt; quantumrandom.get_data(data_type=&apos;hex16&apos;, array_length=5, block_size=2)
[&apos;f1d5&apos;, &apos;0eb3&apos;, &apos;1119&apos;, &apos;7cfd&apos;, &apos;64ce&apos;]
&lt;/pre&gt;&lt;/blockquote&gt;&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;
Based on this &lt;code&gt;get_data&lt;/code&gt; function, quantumrandom also provides a
bunch of higher-level helper functions that make easy to perform a variety of
tasks.
&lt;/p&gt;

&lt;code&gt;&lt;blockquote&gt;&lt;pre&gt;
&gt;&gt;&gt; quantumrandom.randint(0, 20)
5
&gt;&gt;&gt; quantumrandom.hex()[:10]
&apos;8272613343&apos;
&gt;&gt;&gt; quantumrandom.binary()[0]
&apos;\xa5&apos;
&gt;&gt;&gt; len(quantumrandom.binary())
10000
&gt;&gt;&gt; quantumrandom.uint16()
numpy.array([24094, 13944, 22109, 22908, 34878, 33797, 47221, 21485, 37930, ...], dtype=numpy.uint16)
&gt;&gt;&gt; quantumrandom.uint16().data[:10]
&apos;\x87\x7fY.\xcc\xab\xea\r\x1c`&apos;
&lt;/pre&gt;&lt;/blockquote&gt;&lt;/code&gt;

&lt;p&gt;
&lt;strong&gt;Follow quantumrandom on GitHub: &lt;a href=&quot;http://j.mp/quantumrandom&quot; target=&quot;_blank&quot;&gt;https://github.com/lmacken/quantumrandom&lt;/a&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;script type=&quot;text/javascript&quot;
src=&quot;http://www.reddit.com/static/button/button1.js&quot;&gt;&lt;/script&gt;
</content>
</entry>

<entry>
<title type="html">Red Hat OpenShift Express &amp; The Leafy Miracle</title>
<category term="" />
<id>http://lewk.org/blog/2011/05/07/leafy-miracle</id>
<updated>2011-05-07T20:20:13Z</updated>
<published>2011-05-07T20:20:13Z</published>
<link rel="alternate" type="text/html" href="http://lewk.org/blog/leafy-miracle.html" />
<content type="html">&lt;p&gt;

&lt;a href=&quot;http://redhat.com&quot;&gt;Red Hat&lt;/a&gt; made a lot of awesome announcements
this week at &lt;a href=&quot;http://www.redhat.com/summit/&quot;&gt;The Red Hat Summit&lt;/a&gt;, one of which being &lt;a href=&quot;http://openshift.redhat.com/app/&quot;&gt;OpenShift&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
I had the opportunity to play with the internal beta for a little while now,
and I must say that as a developer I am extremely impressed with the service.
Just being able to &lt;code&gt;git push&lt;/code&gt; my code into to the cloud drastically simplifies
large-scale software deployment, and makes it so I don&apos;t even have
to leave my development environment.
&lt;/p&gt;

&lt;p&gt;
    I figured out a way to get &lt;a href=&quot;http://turbogears.org&quot;&gt;TurboGears2&lt;/a&gt; and &lt;a href=&quot;http://pylonsproject.com&quot;&gt;Pyramid&lt;/a&gt; running on OpenShift Express, and documented it &lt;a href=&quot;https://www.redhat.com/openshift/blogs/deploying-turbogears2-python-web-framework-using-express&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://www.redhat.com/openshift/blogs/deploying-a-pyramid-application-in-a-virtual-python-wsgi-environment-on-red-hat-openshift-expr&quot;&gt;here&lt;/a&gt;. After that, I proceeded to write my very first Pyramid application.
&lt;/p&gt;

&lt;p&gt;
    &lt;b&gt;[ The Leafy Miracle ]&lt;/b&gt;&lt;br/&gt;

&lt;p&gt;
    In memory of the proposed [and &lt;a href=&quot;http://lewk.org/beefy.txt&quot;&gt;rejected&lt;/a&gt;] Fedora 16 codename &quot;&lt;a href=&quot;http://beefymiracle.org&quot;&gt;Beefy Miracle&lt;/a&gt;&quot;, this little app
is called &quot;Leafy Miracle&quot;.
&lt;/p&gt;

&lt;center&gt;
    &lt;b style=&quot;font-size: 1.4em&quot;&gt;&lt;a href=&quot;http://leafy-miracle.rhcloud.com&quot;&gt;leafy-miracle.rhcloud.com&lt;/a&gt;&lt;/b&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;/center&gt;

&lt;center&gt;
    &lt;a href=&quot;http://leafy-miracle.rhcloud.com&quot;&gt;&lt;img src=&quot;http://lewk.org/img/leafy.png&quot; border=&quot;0&quot;/&gt;&lt;/a&gt;
&lt;br/&gt;&lt;a href=&quot;http://pylonsproject.org/projects/pyramid/about&quot;&gt;&lt;img src=&quot;http://docs.pylonsproject.org/_images/pyramid_105x28_white.png&quot; border=&quot;0&quot;/&gt;&lt;/a&gt;
&lt;/center&gt;
&lt;/p&gt;
&lt;b&gt;[ Features &amp; Tech ]&lt;/b&gt;&lt;br/&gt;

&lt;p&gt;
&lt;ul&gt;
&lt;li&gt;Written in &lt;a href=&quot;http://python.org&quot;&gt;Python&lt;/a&gt; using the &lt;a href=&quot;http://pylonsproject.org&quot;&gt;Pyramid&lt;/a&gt; web framework&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://sqlalchemy.org&quot;&gt;SQLAlchemy&lt;/a&gt; database model of &lt;a href=&quot;http://yum.baseurl.org&quot;&gt;Yum&lt;/a&gt; Categories, Groups, Packages, Dependencies, and Dependants&lt;/li&gt;
&lt;li&gt;Interactive graph widget, using &lt;a href=&quot;http://toscawidgets.org/documentation/tw2.core&quot;&gt;ToscaWidgets2&lt;/a&gt; and the &lt;a href=&quot;http://thejit.org&quot;&gt;JavaScript InfoVis Toolkit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Package mouse-over menus linking to downloads (&lt;a href=&quot;https://admin.fedoraproject.org/community&quot;&gt;community&lt;/a&gt;), code (&lt;a href=&quot;http://pkgs.fedoraproject.org/gitweb&quot;&gt;gitweb&lt;/a&gt;), bugs (&lt;a href=&quot;http://bugzilla.redhat.com&quot;&gt;bugzilla&lt;/a&gt;), acls (&lt;a href=&quot;https://admin.fedoraproject.org/pkgdb&quot;&gt;pkgdb&lt;/a&gt;), builds (&lt;a href=&quot;http://koji.fedoraproject.org/koji&quot;&gt;koji&lt;/a&gt;) and updates (&lt;a href=&quot;https://admin.fedoraproject.org/updates&quot;&gt;bodhi&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Deep linking, which allows you to use the browser back/forward buttons while navigating the tree, as well as share or bookmark links to specific nodes&lt;/li&gt;
&lt;li&gt;Search bar with auto-completion of packages, categories, and groups&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://jquery.com&quot;&gt;jQuery&lt;/a&gt; under the hood, powering the widgets&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;

&lt;b&gt;[ Running ]&lt;/b&gt;&lt;br/&gt;

&lt;blockquote&gt;&lt;code&gt;&lt;pre&gt;
sudo yum -y install python-virtualenv
git clone git://fedorapeople.org/~lmacken/leafymiracle &amp;&amp; cd leafymiracle
virtualenv env &amp;&amp; source env/bin/activate
python setup.py develop
python leafymiracle/populate.py
paster serve development.ini
&lt;/pre&gt;
&lt;/code&gt;
&lt;/blockquote&gt;

&lt;b&gt;[ Code ]&lt;/b&gt;&lt;br/&gt;

&lt;p&gt;
&lt;blockquote&gt;&lt;code&gt;
        git clone &lt;a href=&quot;http://fedorapeople.org/gitweb?p=lmacken/public_git/leafymiracle;a=summary&quot;&gt;git://fedorapeople.org/~lmacken/leafymiracle&lt;/a&gt;
&lt;/code&gt;&lt;/blockquote&gt;
&lt;/p&gt;

&lt;b&gt;[ Props ]&lt;/b&gt;&lt;br/&gt;
&lt;br/&gt;
&lt;p&gt;
    Mad props go out to &lt;a href=&quot;https://threebean.wordpress.com&quot;&gt;RJ Bean&lt;/a&gt;, who helped me write this app.  He is
responsible for writing a ton of amazing Python widgets for various
JavaScript visualization libraries.  You can see some demos of them
here: &lt;a
href=&quot;http://tw2-demos.threebean.org/&quot;&gt;tw2-demos.threebean.org&lt;/a&gt;.
&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">git clone all of your Fedora packages</title>
<category term="" />
<id>http://lewk.org/blog/2011/03/24/clone-all-my-fedora-pkgs</id>
<updated>2011-03-24T16:10:06Z</updated>
<published>2011-03-24T16:10:06Z</published>
<link rel="alternate" type="text/html" href="http://lewk.org/blog/clone-all-my-fedora-pkgs.html" />
<content type="html">&lt;p&gt;
After doing a fresh &lt;a href=&quot;http://fedoraproject.org&quot;&gt;Fedora 15&lt;/a&gt; install on
my laptop last night, I wanted to quickly clone all of the packages that I
maintain. Here is a single command that does the job:
&lt;/p&gt;

&lt;code&gt;
&lt;blockquote&gt;
python -c &quot;import pyfedpkg; from fedora.client.pkgdb import PackageDB; [pyfedpkg.clone(pkg[&apos;name&apos;], &apos;$USER&apos;) for pkg in PackageDB().user_packages(&apos;$USER&apos;)[&apos;pkgs&apos;]]&quot;
&lt;/blockquote&gt;
&lt;/code&gt;
</content>
</entry>

<entry>
<title type="html">Fedora Photobooth @ SXSW</title>
<category term="" />
<id>http://lewk.org/blog/2011/03/13/photobooth.py</id>
<updated>2011-03-13T02:57:39Z</updated>
<published>2011-03-13T02:57:39Z</published>
<link rel="alternate" type="text/html" href="http://lewk.org/blog/photobooth.py.html" />
<content type="html">&lt;center&gt;&lt;img src=&quot;http://lewk.org/img/photobooth1.jpg&quot; align=&quot;right&quot;/&gt;&lt;/center&gt;
&lt;p&gt;
    This is the first year that Fedora will have a booth at &lt;a href=&quot;http://www.sxsw.com&quot;&gt;SXSW&lt;/a&gt;! Sadly, I am not going to be attending since it conflicts with &lt;a href=&quot;http://us.pycon.org&quot;&gt;PyCon&lt;/a&gt;.  However,
my code will be running at our booth. Usually the Fedora booth at conferences is comprised of a bunch of flyers, media, swag, and some people to help answer questions and tell the Fedora story. However at SXSW, things are going to be a little different.
&lt;/p&gt;
&lt;p&gt;
Aside from the &lt;a href=&quot;http://mairin.wordpress.com/2011/03/11/flyers-about-free-open-source-software-for-sxsw-creatives/&quot;&gt;amazing flyers&lt;/a&gt; that Máirín created, there will also be a &lt;a href=&quot;http://fedoraproject.org/wiki/SXSW_2011#Photobooth&quot;&gt;Fedora Photobooth&lt;/a&gt;. Someone (probably Spot or Jared) will be dressed in a full Tux costume, and people can come and get their photo taken with them.  Spot came to me the other day and asked if I could write some code to streamline the whole process.
&lt;/p&gt;
&lt;p&gt;
An hour or so later, photobooth.py was born. There are definitely lots of improvements that can be made, but here is what it currently does in its initial incarnation:
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Uses gphoto2 to automatically detect your camera&lt;/li&gt;
	&lt;li&gt;When Enter is pressed, it snaps a photo and downloads it locally&lt;/li&gt;
	&lt;li&gt;A Fedora watermark is applied to the bottom right corner of the image&lt;/li&gt;
	&lt;li&gt;The photo is uploaded to a server&lt;/li&gt;
	&lt;li&gt;A QRCode is generated that points to the image URL&lt;/li&gt;
	&lt;li&gt;A TinyURL is generated for the image&lt;/li&gt;
	&lt;li&gt;HTML is generated that shows the image, the QRCode, and TinyURL&lt;/li&gt;
	&lt;li&gt;The page is then displayed in the web browser&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;In Action&lt;/b&gt;
&lt;br/&gt;
See Mo&apos;s blog for photos of this code in action at the Fedora SXSW booth!
&lt;blockquote&gt;
* &lt;a href=&quot;http://mairin.wordpress.com/2011/03/14/sxsw-expo-day-1-from-the-show-floor/&quot;&gt;SXSW Expo Day 1 from the show floor&lt;/a&gt;&lt;br/&gt;
* &lt;a href=&quot;http://mairin.wordpress.com/2011/03/15/sxsw-expo-day-2/&quot;&gt;SXSW Expo Day 2&lt;/a&gt;&lt;br/&gt;
* &lt;a href=&quot;http://mairin.wordpress.com/2011/03/16/a-beefy-miraculous-day-at-sxsw-expo-day-3/&quot;&gt;A Beefy, Miraculous Day at SXSW (Expo Day 3)&lt;/a&gt;&lt;br/&gt;
&lt;/blockquote&gt;

&lt;br/&gt;
&lt;center&gt;&lt;img src=&quot;http://lewk.org/img/photobooth0.jpg&quot;/&gt;&lt;/center&gt;
&lt;br/&gt;

&lt;b&gt;The Code&lt;/b&gt;

&lt;br/&gt;
I threw this in a git repo and tossed it up on GitHub:

&lt;blockquote&gt;
	&lt;a href=&quot;http://github.com/lmacken/photobooth.py&quot;&gt;github.com/lmacken/photobooth.py&lt;/a&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;

&lt;style type=&quot;text/css&quot;&gt;
&lt;!--
/*pre { font-family: monospace; color: #657b83; background-color: #fdf6e3; }*/
pre { font-family: monospace; color: #657b83;}
.Special { color: #dc322f; }
.Type { color: #b58900; }
.Statement { color: #719e07; }
.Identifier { color: #268bd2; }
.Constant { color: #2aa198; }
.PreProc { color: #cb4b16; }
.Comment { color: #93a1a1; font-style: italic; }
--&gt;
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;pre&gt;
&lt;span class=&quot;Comment&quot;&gt;#!/usr/bin/python&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;# photobooth.py - version 0.3&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;# Requires: python-imaging, qrencode, gphoto2, surl&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;# Author: Luke Macken &amp;lt;lmacken@redhat.com&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;# License: GPLv3&lt;/span&gt;

&lt;span class=&quot;PreProc&quot;&gt;import&lt;/span&gt; os
&lt;span class=&quot;PreProc&quot;&gt;import&lt;/span&gt; surl
&lt;span class=&quot;PreProc&quot;&gt;import&lt;/span&gt; Image
&lt;span class=&quot;PreProc&quot;&gt;import&lt;/span&gt; subprocess

&lt;span class=&quot;PreProc&quot;&gt;from&lt;/span&gt; uuid &lt;span class=&quot;PreProc&quot;&gt;import&lt;/span&gt; uuid4
&lt;span class=&quot;PreProc&quot;&gt;from&lt;/span&gt; os.path &lt;span class=&quot;PreProc&quot;&gt;import&lt;/span&gt; join, basename, expanduser

&lt;span class=&quot;Comment&quot;&gt;# Where to spit out our qrcode, watermarked image, and local html&lt;/span&gt;
out = expanduser(&lt;span class=&quot;Constant&quot;&gt;&apos;~/Desktop/sxsw&apos;&lt;/span&gt;)

&lt;span class=&quot;Comment&quot;&gt;# The watermark to apply to all images&lt;/span&gt;
watermark_img = expanduser(&lt;span class=&quot;Constant&quot;&gt;&apos;~/Desktop/fedora.png&apos;&lt;/span&gt;)

&lt;span class=&quot;Comment&quot;&gt;# This assumes ssh-agent is running so we can do password-less scp&lt;/span&gt;
ssh_image_repo = &lt;span class=&quot;Constant&quot;&gt;&apos;fedorapeople.org:~/public_html/sxsw/&apos;&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;# The public HTTP repository for uploaded images&lt;/span&gt;
http_image_repo = &lt;span class=&quot;Constant&quot;&gt;&apos;&lt;a href=&quot;http://lmacken.fedorapeople.org/sxsw/&quot;&gt;http://lmacken.fedorapeople.org/sxsw/&lt;/a&gt;&apos;&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;# Size of the qrcode pixels&lt;/span&gt;
qrcode_size = &lt;span class=&quot;Constant&quot;&gt;10&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;# Whether or not to delete the photo after uploading it to the remote server&lt;/span&gt;
delete_after_upload = &lt;span class=&quot;Identifier&quot;&gt;True&lt;/span&gt;

&lt;span class=&quot;Comment&quot;&gt;# The camera configuration&lt;/span&gt;
&lt;span class=&quot;Comment&quot;&gt;# Use gphoto2 --list-config and --get-config for more information&lt;/span&gt;
gphoto_config = {
    &lt;span class=&quot;Constant&quot;&gt;&apos;/main/imgsettings/imagesize&apos;&lt;/span&gt;: &lt;span class=&quot;Constant&quot;&gt;3&lt;/span&gt;, &lt;span class=&quot;Comment&quot;&gt;# small&lt;/span&gt;
    &lt;span class=&quot;Constant&quot;&gt;&apos;/main/imgsettings/imagequality&apos;&lt;/span&gt;: &lt;span class=&quot;Constant&quot;&gt;0&lt;/span&gt;, &lt;span class=&quot;Comment&quot;&gt;# normal&lt;/span&gt;
    &lt;span class=&quot;Constant&quot;&gt;&apos;/main/capturesettings/zoom&apos;&lt;/span&gt;: &lt;span class=&quot;Constant&quot;&gt;70&lt;/span&gt;, &lt;span class=&quot;Comment&quot;&gt;# zoom factor&lt;/span&gt;
}

&lt;span class=&quot;Comment&quot;&gt;# The URL shortener to use&lt;/span&gt;
shortener = &lt;span class=&quot;Constant&quot;&gt;&apos;tinyurl.com&apos;&lt;/span&gt;

&lt;span class=&quot;Statement&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;Identifier&quot;&gt;PhotoBooth&lt;/span&gt;(&lt;span class=&quot;Identifier&quot;&gt;object&lt;/span&gt;):

    &lt;span class=&quot;Statement&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;Identifier&quot;&gt;initialize&lt;/span&gt;(self):
        &lt;span class=&quot;Constant&quot;&gt;&amp;quot;&amp;quot;&amp;quot; Detect the camera and set the various settings &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
        cfg = [&lt;span class=&quot;Constant&quot;&gt;&apos;--set-config=%s=%s&apos;&lt;/span&gt; % (k, v) &lt;span class=&quot;Statement&quot;&gt;for&lt;/span&gt; k, v &lt;span class=&quot;Statement&quot;&gt;in&lt;/span&gt; gphoto_config.items()]
        subprocess.call(&lt;span class=&quot;Constant&quot;&gt;&apos;gphoto2 --auto-detect &apos;&lt;/span&gt; +
                        &lt;span class=&quot;Constant&quot;&gt;&apos; &apos;&lt;/span&gt;.join(cfg), shell=&lt;span class=&quot;Identifier&quot;&gt;True&lt;/span&gt;)

    &lt;span class=&quot;Statement&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;Identifier&quot;&gt;capture_photo&lt;/span&gt;(self):
        &lt;span class=&quot;Constant&quot;&gt;&amp;quot;&amp;quot;&amp;quot; Capture a photo and download it from the camera &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
        filename = join(out, &lt;span class=&quot;Constant&quot;&gt;&apos;%s.jpg&apos;&lt;/span&gt; % &lt;span class=&quot;Identifier&quot;&gt;str&lt;/span&gt;(uuid4()))
        cfg = [&lt;span class=&quot;Constant&quot;&gt;&apos;--set-config=%s=%s&apos;&lt;/span&gt; % (k, v) &lt;span class=&quot;Statement&quot;&gt;for&lt;/span&gt; k, v &lt;span class=&quot;Statement&quot;&gt;in&lt;/span&gt; gphoto_config.items()]
        subprocess.call(&lt;span class=&quot;Constant&quot;&gt;&apos;gphoto2 &apos;&lt;/span&gt; +
                        &lt;span class=&quot;Constant&quot;&gt;&apos;--capture-image-and-download &apos;&lt;/span&gt; +
                        &lt;span class=&quot;Constant&quot;&gt;&apos;--filename=&amp;quot;%s&amp;quot; &apos;&lt;/span&gt; % filename,
                        shell=&lt;span class=&quot;Identifier&quot;&gt;True&lt;/span&gt;)
        &lt;span class=&quot;Statement&quot;&gt;return&lt;/span&gt; filename

    &lt;span class=&quot;Statement&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;Identifier&quot;&gt;process_image&lt;/span&gt;(self, filename):
        &lt;span class=&quot;Statement&quot;&gt;print&lt;/span&gt; &lt;span class=&quot;Constant&quot;&gt;&amp;quot;Processing %s...&amp;quot;&lt;/span&gt; % filename
        &lt;span class=&quot;Statement&quot;&gt;print&lt;/span&gt; &lt;span class=&quot;Constant&quot;&gt;&amp;quot;Applying watermark...&amp;quot;&lt;/span&gt;
        image = self.watermark(filename)
        &lt;span class=&quot;Statement&quot;&gt;print&lt;/span&gt; &lt;span class=&quot;Constant&quot;&gt;&amp;quot;Uploading to remote server...&amp;quot;&lt;/span&gt;
        url = self.upload(image)
        &lt;span class=&quot;Statement&quot;&gt;print&lt;/span&gt; &lt;span class=&quot;Constant&quot;&gt;&amp;quot;Generating QRCode...&amp;quot;&lt;/span&gt;
        qrcode = self.qrencode(url)
        &lt;span class=&quot;Statement&quot;&gt;print&lt;/span&gt; &lt;span class=&quot;Constant&quot;&gt;&amp;quot;Shortening URL...&amp;quot;&lt;/span&gt;
        tiny = self.shorten(url)
        &lt;span class=&quot;Statement&quot;&gt;print&lt;/span&gt; &lt;span class=&quot;Constant&quot;&gt;&amp;quot;Generating HTML...&amp;quot;&lt;/span&gt;
        html = self.html_output(url, qrcode, tiny)
        subprocess.call(&lt;span class=&quot;Constant&quot;&gt;&apos;firefox &amp;quot;%s&amp;quot;&apos;&lt;/span&gt; % html, shell=&lt;span class=&quot;Identifier&quot;&gt;True&lt;/span&gt;)
        &lt;span class=&quot;Statement&quot;&gt;print&lt;/span&gt; &lt;span class=&quot;Constant&quot;&gt;&amp;quot;Done!&amp;quot;&lt;/span&gt;

    &lt;span class=&quot;Statement&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;Identifier&quot;&gt;watermark&lt;/span&gt;(self, image):
        &lt;span class=&quot;Constant&quot;&gt;&amp;quot;&amp;quot;&amp;quot; Apply a watermark to an image &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
        mark = Image.&lt;span class=&quot;Identifier&quot;&gt;open&lt;/span&gt;(watermark_img)
        im = Image.&lt;span class=&quot;Identifier&quot;&gt;open&lt;/span&gt;(image)
        &lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt; im.mode != &lt;span class=&quot;Constant&quot;&gt;&apos;RGBA&apos;&lt;/span&gt;:
            im = im.convert(&lt;span class=&quot;Constant&quot;&gt;&apos;RGBA&apos;&lt;/span&gt;)
        layer = Image.new(&lt;span class=&quot;Constant&quot;&gt;&apos;RGBA&apos;&lt;/span&gt;, im.size, (&lt;span class=&quot;Constant&quot;&gt;0&lt;/span&gt;,&lt;span class=&quot;Constant&quot;&gt;0&lt;/span&gt;,&lt;span class=&quot;Constant&quot;&gt;0&lt;/span&gt;,&lt;span class=&quot;Constant&quot;&gt;0&lt;/span&gt;))
        position = (im.size[&lt;span class=&quot;Constant&quot;&gt;0&lt;/span&gt;] - mark.size[&lt;span class=&quot;Constant&quot;&gt;0&lt;/span&gt;], im.size[&lt;span class=&quot;Constant&quot;&gt;1&lt;/span&gt;] - mark.size[&lt;span class=&quot;Constant&quot;&gt;1&lt;/span&gt;])
        layer.paste(mark, position)
        outfile = join(out, basename(image))
        Image.composite(layer, im, layer).save(outfile)
        &lt;span class=&quot;Statement&quot;&gt;return&lt;/span&gt; outfile

    &lt;span class=&quot;Statement&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;Identifier&quot;&gt;upload&lt;/span&gt;(self, image):
        &lt;span class=&quot;Constant&quot;&gt;&amp;quot;&amp;quot;&amp;quot; Upload this image to a remote server &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
        subprocess.call(&lt;span class=&quot;Constant&quot;&gt;&apos;scp &amp;quot;%s&amp;quot; %s&apos;&lt;/span&gt; % (image, ssh_image_repo), shell=&lt;span class=&quot;Identifier&quot;&gt;True&lt;/span&gt;)
        &lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt; delete_after_upload:
            os.unlink(image)
        &lt;span class=&quot;Statement&quot;&gt;return&lt;/span&gt; http_image_repo + basename(image)

    &lt;span class=&quot;Statement&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;Identifier&quot;&gt;qrencode&lt;/span&gt;(self, url):
        &lt;span class=&quot;Constant&quot;&gt;&amp;quot;&amp;quot;&amp;quot; Generate a QRCode for a given URL &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
        qrcode = join(out, &lt;span class=&quot;Constant&quot;&gt;&apos;qrcode.png&apos;&lt;/span&gt;)
        subprocess.call(&lt;span class=&quot;Constant&quot;&gt;&apos;qrencode -s %d -o &amp;quot;%s&amp;quot; %s&apos;&lt;/span&gt; % (
            qrcode_size, qrcode, url), shell=&lt;span class=&quot;Identifier&quot;&gt;True&lt;/span&gt;)
        &lt;span class=&quot;Statement&quot;&gt;return&lt;/span&gt; qrcode

    &lt;span class=&quot;Statement&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;Identifier&quot;&gt;shorten&lt;/span&gt;(self, url):
        &lt;span class=&quot;Constant&quot;&gt;&amp;quot;&amp;quot;&amp;quot; Generate a shortened URL &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
        &lt;span class=&quot;Statement&quot;&gt;return&lt;/span&gt; surl.services.supportedServices()[shortener].get({}, url)

    &lt;span class=&quot;Statement&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;Identifier&quot;&gt;html_output&lt;/span&gt;(self, image, qrcode, tinyurl):
        &lt;span class=&quot;Constant&quot;&gt;&amp;quot;&amp;quot;&amp;quot; Output HTML with the image, qrcode, and tinyurl &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
        html = &lt;span class=&quot;Constant&quot;&gt;&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class=&quot;Constant&quot;&gt;            &amp;lt;html&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Constant&quot;&gt;              &amp;lt;center&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Constant&quot;&gt;                &amp;lt;table&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Constant&quot;&gt;                  &amp;lt;tr&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Constant&quot;&gt;                    &amp;lt;td colspan=&amp;quot;2&amp;quot;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Constant&quot;&gt;                        &amp;lt;b&amp;gt;&amp;lt;a href=&amp;quot;%(tinyurl)s&amp;quot;&amp;gt;%(tinyurl)s&amp;lt;/a&amp;gt;&amp;lt;/b&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Constant&quot;&gt;                    &amp;lt;/td&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Constant&quot;&gt;                  &amp;lt;/tr&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Constant&quot;&gt;                  &amp;lt;tr&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Constant&quot;&gt;                    &amp;lt;td&amp;gt;&amp;lt;img src=&amp;quot;%(image)s&amp;quot; border=&amp;quot;0&amp;quot;/&amp;gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Constant&quot;&gt;                    &amp;lt;td&amp;gt;&amp;lt;img src=&amp;quot;%(qrcode)s&amp;quot; border=&amp;quot;0&amp;quot;/&amp;gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Constant&quot;&gt;                  &amp;lt;/tr&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Constant&quot;&gt;                &amp;lt;/table&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Constant&quot;&gt;              &amp;lt;/center&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Constant&quot;&gt;          &amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;span class=&quot;Constant&quot;&gt;        &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt; % {&lt;span class=&quot;Constant&quot;&gt;&apos;image&apos;&lt;/span&gt;: image, &lt;span class=&quot;Constant&quot;&gt;&apos;qrcode&apos;&lt;/span&gt;: qrcode, &lt;span class=&quot;Constant&quot;&gt;&apos;tinyurl&apos;&lt;/span&gt;: tinyurl}
        outfile = join(out, basename(image) + &lt;span class=&quot;Constant&quot;&gt;&apos;.html&apos;&lt;/span&gt;)
        output = &lt;span class=&quot;Identifier&quot;&gt;file&lt;/span&gt;(outfile, &lt;span class=&quot;Constant&quot;&gt;&apos;w&apos;&lt;/span&gt;)
        output.write(html)
        output.close()
        &lt;span class=&quot;Statement&quot;&gt;return&lt;/span&gt; outfile

&lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt; __name__ == &lt;span class=&quot;Constant&quot;&gt;&amp;quot;__main__&amp;quot;&lt;/span&gt;:
    photobooth = PhotoBooth()
    &lt;span class=&quot;Statement&quot;&gt;try&lt;/span&gt;:
        photobooth.initialize()
        &lt;span class=&quot;Statement&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;Identifier&quot;&gt;True&lt;/span&gt;:
            &lt;span class=&quot;Identifier&quot;&gt;raw_input&lt;/span&gt;(&lt;span class=&quot;Constant&quot;&gt;&amp;quot;Press enter to capture photo.&amp;quot;&lt;/span&gt;)
            filename = photobooth.capture_photo()
            photobooth.process_image(filename)
    &lt;span class=&quot;Statement&quot;&gt;except&lt;/span&gt; &lt;span class=&quot;Type&quot;&gt;KeyboardInterrupt&lt;/span&gt;:
        &lt;span class=&quot;Statement&quot;&gt;print&lt;/span&gt; &lt;span class=&quot;Constant&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;Exiting...&amp;quot;&lt;/span&gt;
&lt;/pre&gt;


&lt;/blockquote&gt;
</content>
</entry>

<entry>
<title type="html">FUDCon 2011 Tempe</title>
<category term="" />
<id>http://lewk.org/blog/2011/02/16/FUDCon2011Tempe</id>
<updated>2011-02-16T21:55:02Z</updated>
<published>2011-02-16T21:55:02Z</published>
<link rel="alternate" type="text/html" href="http://lewk.org/blog/FUDCon2011Tempe.html" />
<content type="html">&lt;p&gt;
I meant to get this summary out the door weeks ago, however, I didn&apos;t want to distract from my post-FUDCon productivity :)
&lt;br/&gt;
&lt;br/&gt;
Another FUDCon has come and gone. This time it was in gorgeous Tempe, Arizona.
It was my first time in AZ, and I must say that I was thoroughly impressed.  It
was truly a great location for FUDCon.  Thanks to the epic snowstorm of doom, I
also was stuck there for a few extra days
&lt;/p&gt;

&lt;p&gt;
    &lt;a href=&quot;http://lewk.org/img/fudstream.png&quot;&gt;&lt;img src=&quot;http://lewk.org/img/fudstream-thumb.png&quot; align=&quot;right&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;b&gt;Live Widgetry&lt;/b&gt;&lt;br/&gt;

    Before the conference I decided to throw together a little &lt;a href=&quot;http://tinyurl.com/fudstream&quot;&gt;live widget&lt;/a&gt; that
scrolls all of the new identi.ca posts tagged with #FUDCon. Thanks to the mad design
skillz of mizmo, and the feed aggregation and real-time web sockets of 
&lt;a href=&quot;http://moksha.fedorahosted.org&quot;&gt;Moksha&lt;/a&gt;, I was able to throw it
together pretty quickly.  I plan on taking this code and integrating it in the
existing &lt;a href=&quot;https://admin.fedoraproject.org/community&quot;&gt;fedoracommunity dashboard&lt;/a&gt; and hooking up many different fedora-related feeds to it.
&lt;/p&gt;

&lt;h3&gt;Sessions&lt;/h3&gt;
&lt;p&gt;
&lt;b&gt;AutoQA&lt;/b&gt;&lt;br/&gt;
Day 1 of the FUDCon sessions were quite interesting.  I got a chance to learn a
bit more about the exciting &lt;a href=&quot;http://autoqa.fedorahosted.org&quot;&gt;AutoQA project&lt;/a&gt;, which is coming along
nicely.  You&apos;ll be seeing AutoQA commenting on bodhi updates soon
enough.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Security Lab&lt;/b&gt;&lt;br/&gt;
I caught &lt;a href=&quot;http://fedoraproject.org/wiki/JoergSimon&quot;&gt;Joerg Simon&lt;/a&gt;&apos;s session on the &lt;a href=&quot;https://fedorahosted.org/security-spin/&quot;&gt;Fedora Security Lab&lt;/a&gt;.
It was exciting to see how the Security Spin has evolved ever since
&lt;a href=&quot;http://lewk.org/blog/securitylivecd&quot;&gt;I created it back in 2007&lt;/a&gt; for a project in my forensics class.  It was also interesting to learn more about &lt;a href=&quot;http://www.isecom.org/osstmm/&quot;&gt;OSSTMM&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Spins&lt;/b&gt;&lt;br/&gt;
The next session I attended was about the future of &lt;a
href=&quot;http://spins.fedoraproject.org&quot;&gt;spins&lt;/a&gt;.  Almost everyone
agreed that Spins are useful and a valuable part of Fedora.  The problems seem
to mostly lie in governance/policy and a lack of communication and coordination
between the Spins SIG and QA/Releng/Infrastructure.  Once of my ideas below may
help with this a little bit.
&lt;/p&gt;

&lt;h3&gt;The Next Big Project&lt;/h3&gt;
&lt;p&gt;
Day 2 was comprised of more sessions, including my team&apos;s &quot;Next Big Project&quot; proposals.
Of course, the &lt;a href=&quot;http://fedoraproject.org/wiki/Fedora_RPG&quot;&gt;Fedora RPG&lt;/a&gt; that Spot and Mo talked about was definitely a hot topic, and got a lot of people excited.
&lt;br/&gt;&lt;br/&gt;
I talked about a handful of project ideas that I would like to work on in the
future (actually, I have code written for most of them already).  Here is a
quick rundown:
&lt;/p&gt;

&lt;p&gt;
    &lt;b&gt;Real-time Infrastructure&lt;/b&gt;&lt;br/&gt;
I want to see us deploy an AMQP message broker inside our production
infrastructure.  Then, we hook up all of our existing services and have them
fire off messages when various events occur (koji builds, bodhi updates,
pkgdb additions/removals/changes, git hooks, planet feeds, wiki edits, etc).
From here, using some realtime web technology that &lt;a href=&quot;http://moksha.fedorahosted.org&quot;&gt;we created&lt;/a&gt;, we could easily
expose these message queues via a live dashboard that lets you filter and navigate
the stream of activity, along with providing real-time metrics.  We can also create
desktop notification widgets, so you can get popup bubbles for things that you
care about.
&lt;br/&gt;
&lt;br/&gt;
This is also key to the whole RPG as well.  In order to build a game based on
Fedora workflows, we need an underlying expert system that knows what actions can be taken within fedora, how they are accomplished, and who is getting them done.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Meeting app&lt;/b&gt;&lt;br/&gt;
Currently after a meeting, our Meetbot
spits out the logs and an overview in txt/html/rst to a directory on &lt;a
href=&quot;http://meetbot.fedoraproject.org/&quot;&gt;meetbot.fedoraproject.org&lt;/a&gt;.
Trying to track down who agreed to what when, or even to see what a given
team has been up to over the past couple of months, is very tedious.
&lt;br/&gt;
&lt;br/&gt;
The data is there, now we just need to make it useful.  I would love to see a
frontend for this sytem that tracked meetings by team/people/topics/projects, kept track
of actions and held people accountable for what they say they are going to do
(and make it easy for people to say &quot;I need help with this&quot;, or &quot;I don&apos;t have
time to finish this&quot;), making it simple to go from an #idea in a meeting to
implementation.  There is so much great data in these logs, and I think we can
do some awesome things with it.
&lt;/p&gt;

&lt;p&gt;
    &lt;b&gt;Improved upstream monitoring&lt;/b&gt;&lt;br/&gt;
Most Fedora developers probably don&apos;t even know that we already have an &lt;a href=&quot;http://fedoraproject.org/wiki/Upstream_Release_Monitoring&quot;&gt;Upstream release monitoring&lt;/a&gt; service buried in the wiki.
I added almost every package I maintain to it, and it will automatically open a bug when a new upstream version is released.  Extremely useful.
&lt;br/&gt;
&lt;br/&gt;
I wouldn&apos;t call this a &quot;big&quot; project, but I would like to see us integrate this
service into our existing infrastructure.  We could potentially store this
per-package upstream data in the pkgdb/bodhi, and when a new release comes out
write some code to automatically try doing a simple specfile bump, throw a
scratch build at koji, run it through AutoQA, queue up for testing in bodhi,
etc.  Ideally, this would minimize the massive amounts of effort that our
maintainers have to do to keep our packages up to speed with upstream.
&lt;/p&gt;

&lt;p&gt;
    &lt;b&gt;Discussions app&lt;/b&gt;&lt;br/&gt;
Last year, Máirín Duffy and I came up with some &lt;a href=&quot;https://mairin.wordpress.com/2010/03/16/a-rich-web-interface-for-mailing-lists/&quot;&gt;interesting ideas&lt;/a&gt; for improving our mailing lists.  I would like to make this a reality.
Since then, I have already written code that can successfully parse all of
fedora-devel.mbox (sounds much easier than it really is), populate it into a
SQLAlchemy database model, expose a JSON API for quering, and visualize threads
and various statistics with a basic widget.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Spin Master&lt;/b&gt;&lt;br/&gt;
One of the biggest problems with spins that we have right now is that there is
no easy way to track how they are evolving.  I would like to see us create a
system that took the nightly spins and analyzed them, tracking what packages
have been added/removed, which packages have grown/shrunk, etc.  We could
potentially get AutoQA involved here and make sure all spins pass a certain
level of sanity checks before they can even be released.  There are scripts
floating around that can do a lot of this already -- but I want to streamline
it and build a frontend.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Source-level package diff viewer&lt;/b&gt;&lt;br/&gt;
Fedora churns at such a fast pace, yet I can only imagine that a small subset
of maintainers actually look at the complete code changes between upstream
package releases.  The recent sourceforge intrusion should be seen as a reality
check to us distributions, and I think we need to step up our game quite a bit
to ensure we don&apos;t let any malicious code slip into Fedora.
&lt;br/&gt;
&lt;br/&gt;
I would like to see a web/cli interface for viewing full source diffs of
package updates in Fedora, allowing people to annotate/flag lines of code.
Having more eyes view the code changes that go into our distribution is
definitely a Good Thing, not just for Fedora, but for Open Source in general.
&lt;/p&gt;

&lt;h3&gt;Hackfests&lt;/h3&gt;
&lt;p&gt;
Now, on to my favorite part of any conference -- The Hackfests.
First off, I felt that the hackfests were a bit unorganized this year.
There was no opportunity to pitch hackfests, and it was not easy to figure out
who was doing what in which rooms.
Anyway, I had a fairly productive day of hacking...
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;bodhi&lt;/b&gt;&lt;br/&gt;
I integrated our package test cases into bodhi, which will now query the wiki for tests and display them in your updates, like so:
&lt;center&gt;
&lt;img src=&quot;http://lewk.org/img/bodhi-test-cases.png&quot;/&gt;
&lt;/center&gt;
Thanks to &lt;a href=&quot;http://fedoraproject.org/wiki/User:Jlaska&quot;&gt;James Laska&lt;/a&gt;
for the code to query the wiki, and to &lt;a href=&quot;http://ianweller.org/&quot;&gt;Ian
    Weller&lt;/a&gt; for python-simplemediawiki API.
&lt;br/&gt;
&lt;br/&gt;
I also sat down with &lt;a href=&quot;http://mairin.wordpress.com/&quot;&gt;Máirín Duffy&lt;/a&gt; and talked about &lt;a href=&quot;https://fedoraproject.org/wiki/Bodhi/2.0&quot;&gt;Bodhi v2.0&lt;/a&gt; interaction design.  We discussed what actions we want people to take when they arrive at bodhi&apos;s homepage, which essentially boils down to submitting, searching, browsing, and testing updates.  Mo quickly threw together an awesome mockup that portrays some of our initial ideas.
&lt;br/&gt;
&lt;br/&gt;
&lt;center&gt;
    &lt;a href=&quot;http://lewk.org/img/bodhi-20-frontpage.png&quot;&gt;&lt;img src=&quot;http://lewk.org/img/bodhi-20-frontpage-thumb.png&quot; border=&quot;0&quot;/&gt;&lt;/a&gt;
&lt;/center&gt;
&lt;br/&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Fedora Community Discussions&lt;/b&gt;&lt;br/&gt;
As mentioned above, I have already started implementing the mailing list interface that mizmo and I designed last year.  I worked with &lt;a href=&quot;http://screwyouenterpriseedition.blogspot.com/&quot;&gt;Casey Dahlin&lt;/a&gt; during the hackfests and helped him get a working &lt;a href=&quot;http://fedoracommunity.fedorahosted.org&quot;&gt;fedoracommunity&lt;/a&gt;/&lt;a href=&quot;http://moksha.fedorahosted.org&quot;&gt;moksha&lt;/a&gt; development environment up and running and become familiar with the existing code.
&lt;br/&gt;
&lt;br/&gt;
Even though he wasn&apos;t at FUDCon, Jan Hutar has also been working on a couple of
great graphs/grids of mailing list statistics for fedoracommunity as well.
We&apos;ll be hacking away at this stuff over the next few months, so stay tuned.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;kernel EFI framebuffer&lt;/b&gt;&lt;br/&gt;
I spun up a quick kernel patch to enable the EFI framebuffer on a
handfull of Macs.  I already wrote a patch that got &lt;a href=&quot;http://lkml.org/lkml/2010/9/2/30&quot;&gt;applied upstream&lt;/a&gt; that enables this framebuffer on 14 different mac models, but this new patch adds 5 more.  A lot of people, especially Sugar on a Stick users, are
desperate to get Fedora running on their mactel machines (assuming found in
may school labs), so I spun up a fresh
livecd with my kernel patch for testing.  See &lt;a href=&quot;https://bugzilla.redhat.com/show_bug.cgi?id=528232&quot;&gt;Bug #528232&lt;/a&gt; for more information.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;liveusb-creator&lt;/b&gt;&lt;br/&gt;
I did a bunch of work on porting the liveusb-creator from HAL to UDisks.
Thankfully, Ubuntu&apos;s cleverly-named &quot;usb-creator&quot; already has UDisks support,
so I&apos;ve been happily borrowing ideas from their code :)
&lt;br/&gt;
&lt;br/&gt;
I also had some great discussions with &lt;a href=&quot;http://fedoraproject.org/wiki/User:Pbrobinson&quot;&gt;Peter Robinson&lt;/a&gt; and &lt;a href=&quot;http://www.codewiz.org/&quot;&gt;Bernie Innocenti&lt;/a&gt;
about solving the persistent overlay problem with our Live USBs.  Right now, they
are essentially a ticking time bomb, and real world LiveUSB use-cases are
getting bit by this all of the time.  Over the past few years, the &quot;solution&quot;
has been to &quot;wait for unionfs to get merged into the kernel&quot;.  However, there
are a variety of other potential solutions that we are going to look into as well.
&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Pyramid&lt;/b&gt;&lt;br/&gt;

The future of Python web development is extremely exciting, innovative, and still evolving at a rapid pace.  As a &lt;a href=&quot;http://turbogears.org&quot;&gt;TurboGears&lt;/a&gt; developer, I&apos;m still very impressed with TG2, which along with TG1 will be supported for a long time to come -- but I&apos;m also very eager for the next generation framework that has just emerged.

&lt;br/&gt;
&lt;br/&gt;
Recently, the &lt;a href=&quot;http://pylonshq.com&quot;&gt;Pylons&lt;/a&gt; project has merged with &lt;a href=&quot;http://bfg.repoze.org/&quot;&gt;repoze.bfg&lt;/a&gt; to form &lt;a href=&quot;http://docs.pylonsproject.org&quot;&gt;Pyramid&lt;/a&gt;, which just released version 1.0.
I&apos;m quite amazed by the quality of the code, docs, and tests, and benchmarks
already show it blowing rails/django/tg/pylons out of the water.  I&apos;m looking
forward to the PyCon sprints, where all 3 communitites are going to be
sitting at the same table working together on this project.
&lt;br/&gt;
&lt;br/&gt;
So while I was stuck in Tempe during the snow storm, I wrote 7 RPMs for Pyramid and it&apos;s dependencies, which are currently &lt;a href=&quot;https://bugzilla.redhat.com/showdependencytree.cgi?id=674692&quot;&gt;waiting to be reviewed&lt;/a&gt;.  I plan on writing &lt;a href=&quot;https://fedoraproject.org/wiki/Bodhi/2.0&quot;&gt;Bodhi v2.0&lt;/a&gt; using Pyramid, so if this is something that interests you, let me know (and start reading the 600+ pages of docs ;)
&lt;/p&gt;

&lt;p&gt;
    &lt;b&gt;Good times&lt;/b&gt;&lt;br/&gt;
Technical stuff aside, I had a blast at FUDCon, and I feel like it was one of
the best.  FUDPub was great, as usual. I
played a lot of poker [poorly], ate a lot of tasty food, and had some great conversations.  I had caught a cold prior to coming to FUDCon, so instead of nursing it with
some nyquil and sleep, I decided to try to nurse it with a bottle of Jack,
which turned out to be a bad idea.
&lt;br/&gt;
&lt;br/&gt;
Also, no FUDCon would be complete without mentioning &lt;a
    href=&quot;http://thegreatestgameyouwilleverplay.com&quot;&gt;TheGreatestGameYouWillEverPlay.com&lt;/a&gt;.
Once the hackfests started winding down, I gave a quick session on nethack,
where I tought people various ways to steal from shops, using a bunch of screecasts that I had on my laptop.
&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">liveusb-creator 3.9.3 windows release</title>
<category term="" />
<id>http://lewk.org/blog/2011/01/06/liveusb-creator-3.9.3</id>
<updated>2011-01-06T15:34:12Z</updated>
<published>2011-01-06T15:34:12Z</published>
<link rel="alternate" type="text/html" href="http://lewk.org/blog/liveusb-creator-3.9.3.html" />
<content type="html">&lt;img src=&quot;https://fedorahosted.org/liveusb-creator/attachment/wiki/img/fedorausb.png?format=raw&quot; align=&quot;right&quot; /&gt;
&lt;p&gt;
I spent the majority of yesterday at a DOS prompt.  Thankfully, it wasn&apos;t
as painful as it sounds, as git, vim and Python make Windows development
quite tolerable.
&lt;/p&gt;
&lt;p&gt;
Anyway, I was finally able to track down and fix a couple of major bugs in the
liveusb-creator on Windows XP and 7, and I pushed out a new build
yesterday with the following changes:
&lt;/p&gt;

&lt;p&gt;
&lt;ul&gt;
  &lt;li&gt;Rebuilt with Python 2.7 and the latest PyQt4/pywin32/py2exe/NSIS&lt;/li&gt;
  &lt;li&gt;Update to syslinux 4.03 in our Windows package, which works with Fedora 14&lt;/li&gt;
  &lt;li&gt;Determine if we are running with admin privs, and warn otherwise&lt;/li&gt;
  &lt;li&gt;Fix how and where we put our error logs&lt;/li&gt;
  &lt;li&gt;Update our list of Fedora &amp; Sugar releases&lt;/li&gt;
  &lt;li&gt;Download releases to Downloads or My Documents&lt;/li&gt;
  &lt;li&gt;Various Windows path-related fixes&lt;/li&gt;
  &lt;li&gt;Translation updates&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;

&lt;p&gt;
Windows users, download it here: &lt;a href=&quot;http://liveusb-creator.fedorahosted.org&quot;&gt;http://liveusb-creator.fedorahosted.org&lt;/a&gt;
&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Professors&apos; Open Source Summer Experience @ RIT</title>
<category term="" />
<id>http://lewk.org/blog/2010/06/25/POSSE-RIT</id>
<updated>2010-06-25T19:59:33Z</updated>
<published>2010-06-25T19:59:33Z</published>
<link rel="alternate" type="text/html" href="http://lewk.org/blog/POSSE-RIT.html" />
<content type="html">&lt;p&gt;
&lt;img
src=&quot;http://www.teachingopensource.org/images/thumb/d/d1/Posse-logo.png/350px-Posse-logo.png&quot;
align=&quot;right&quot; width=&quot;250&quot;/&gt;
Last week &lt;a href=&quot;http://redhat.com&quot;&gt;Red Hat&lt;/a&gt; put on a &lt;a
href=&quot;http://teachingopensource.org/index.php/POSSE&quot;&gt;Professors&apos; Open Source
Summer Experience&lt;/a&gt; (POSSE) at &lt;a href=&quot;http://rit.edu&quot;&gt;RIT&lt;/a&gt;. Being an
alumni, I was excited by the opportunity to be able to go back up to The ROC
and teach some of the people that taught me.  Going into it, I really had no
idea what to expect.  All I knew is that I was going to help lead the &apos;deep
dive&apos; section of the course, where I would teach professors how to dive in head
first and get productively lost in a strange codebase.  This is not something
that can be accomplished with a set of powerpoint slides.  Teaching how to hack on open source
requires that you emerse yourself into a codebase, and bring your students with
you.
&lt;/p&gt;

&lt;p&gt;
The previous POSSE at Worcester State dove into the &lt;a
href=&quot;http://sugarlabs.org&quot;&gt;Sugar&lt;/a&gt; &lt;a
href=&quot;http://wiki.laptop.org/go/Measure&quot;&gt;Measure Activity&lt;/a&gt;, and we were going to do the same.
&lt;/p&gt;

&lt;blockquote&gt;&lt;code&gt;&lt;i&gt;
Measure is an activity that turns the computer into an oscilloscope. Signals
from the microphone (and sensors) can be plotted in time and frequency domains.
&lt;/i&gt;&lt;/code&gt;&lt;/blockquote&gt;

&lt;p&gt;
I had never used this activity, let alone hacked on it before.  I&apos;ve also never
done any sugar activity development, aside from some tweaking of the &lt;a
href=&quot;https://fedorahosted.org/OpenVideoChat&quot;&gt;OpenVideoChat&lt;/a&gt;, so I really
had no idea what I was getting myself into.  The obvious first step was to
get it running.  All of us were able to start the activity in virtual machines
or emulators, except for one install which hit some odd errors upon startup.
We were able to quickly track the bug down to a stray &lt;code&gt;return&lt;/code&gt;
statement in &lt;code&gt;__init__&lt;/code&gt; before some critical initialization code.
Right after we fixed the problem we noticed that Walter Bender had already 
fixed this issue a few hours earlier.  After a &lt;code&gt;git pull&lt;/code&gt;, we were
up and running.
&lt;/p&gt;

&lt;p&gt;
Once we all got the activity running, we took a look at the bug list to see if
there was any low-hanging fruit for us to tackle.  Since the previous POSSE
had already done some work on this activity the week before, there were not
any trivial tickets left in the queue.  So, in that case, we dove head first
into the hardest one, &quot;Measure activity gets stuck after recording&quot;.  This
ticket had very little information, and no log output, so we were on our own
to try and track it down.  We were able to reliably reproduce the issue on the
XO-1.5, but not on the 1.0.  In our virtual machines we hit it sporadically.
We all agreed that it felt like a race-condition, most likely due to
threading.  So we started instrumenting the code and adding some debugging
statements to try and figure out which line of code was the culprit.
&lt;/p&gt;

&lt;p&gt;
In our efforts to scatter &lt;code&gt;print&lt;/code&gt;
statements all over the place to try and determine the code path, we noticed
that none of our output was hitting the logs.  
When you have no idea if your code is even being run or not, don&apos;t be ashamed
to throw in a &lt;code&gt;raise Exception(&quot;WTF?!&quot;)&lt;/code&gt;.  We finally realized that since the activity would freeze, it was never able to flush stderr/stdout to the log.  A quick find/replace regex later, and we were using the proper &lt;code&gt;logging&lt;/code&gt; module and seeing our debugging output hit the logs.
&lt;/p&gt;

&lt;p&gt;
We were then able to track the bug down to a line of code that uses &lt;a href=&quot;http://www.gtk.org&quot;&gt;GTK&lt;/a&gt; to try and get
the coordinates of the parent window.  At this point, since none of us were GTK
experts, we had to go upstream.  So, I dropped into #fedora-devel and asked.
Within 10 minutes I had responses from 3 different GTK hackers.  One was a
typical &lt;a href=&quot;http://en.wikipedia.org/wiki/RTFM&quot;&gt;RTFM&lt;/a&gt; response, which humored the professors (who are very used to
hearing/saying this), but the others pointed us in the right direction.  One
mentioned that gtk.gdk calls probably should not be done in a seperate thread.
So, a suggested workaround was to add &lt;code&gt;gtk.threads_enter()/gtk.threads_leave()&lt;/code&gt;
calls before running any gtk.gdk code in the thread.  A &lt;a
href=&quot;http://bugs.sugarlabs.org/attachment/ticket/1904/0001-Call-gtk.threads_-enter-leave-before-after-taking-th.patch&quot;&gt;2-line
patch&lt;/a&gt; later, and we had squashed the bug.
&lt;/p&gt;

&lt;p&gt;
We eventually bumped into the inevitable typo in some comments.  So, we made
the fix locally, and committed it to our git repo.  A few minutes later and we
found another one.  I saw this as a great opportunity to show off some of my
git-fu.  Instead of sending two &quot;Fix typo&quot; patches upstream, I showed the
professors how to use git interactive rebasing to squash multiple commits into
a single one.  They all followed along closely, and the workflow made sense to
them.
&lt;/p&gt;

&lt;p&gt;
While we were looking through the ticket queue, we saw an issue where Measure
would apparently leak memory and crash when running it for a long period of
time.  While keeping this in mind, we kept our eyes peeled while wandering
around the codebase to see if we could track the issue down.  When looking at
the code that takes screenshots of the waveform, I noticed that it created a
temporary file with &lt;code&gt;tempfile.mkstemp&lt;/code&gt;, saved the pixmap to it,
injected it into the Journal, and then deleted the directory.  This looked fine
at a first glance, until I realized that it never closed the temporary file descriptor.
Another &lt;a
href=&quot;http://bugs.sugarlabs.org/attachment/ticket/2051/0001-Ensure-that-we-close-the-file-descriptors-of-our-tem.patch&quot;&gt;2-line patch&lt;/a&gt; later, and this issue was solved.
&lt;/p&gt;

&lt;p&gt;
The next day both of the patches that we sent upstream were applied by Walter Bender.
&lt;/p&gt;

&lt;p&gt;
Overall, POSSE definitely exceeded my expectations, and I&apos;m extremely satisfied
with how the &apos;deep dive&apos; section went.  I went into it feeling completely
unprepared to teach, but by trusting my &quot;hacker intuition&quot;, I feel that it
turned out to be a fantastic learning experience for all of us.
&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Fedora Updates Report</title>
<category term="" />
<id>http://lewk.org/blog/2010/06/08/bodhi-stats-20100608</id>
<updated>2010-06-08T20:41:36Z</updated>
<published>2010-06-08T20:41:36Z</published>
<link rel="alternate" type="text/html" href="http://lewk.org/blog/bodhi-stats-20100608.html" />
<content type="html">&lt;p&gt;
&lt;img src=&quot;https://admin.fedoraproject.org/updates/static/images/bodhi-icon-48.png&quot; align=&quot;right&quot;/&gt;
I recently wrote some code to generate detailed statistics of Fedora &amp; EPEL
updates within &lt;a href=&quot;https://fedorahosted.org/bodhi&quot;&gt;bodhi&lt;/a&gt;.  Eventually
this will be auto-generated and exposed within bodhi itself, but for now here are the initial metrics.
&lt;/p&gt;
&lt;p&gt;
This report definitely conveys the shortcomings in how we currently utilize
bodhi for &quot;testing&quot; updates, however, it does show us
improving with each release.  For Fedora 13, we implemented the &lt;a
    href=&quot;http://fedoraproject.org/wiki/No_Frozen_Rawhide_Proposal&quot;&gt;No Frozen
    Rawhide&lt;/a&gt; process with improved &lt;a
    href=&quot;http://fedoraproject.org/wiki/Critical_Path_Packages_Proposal&quot;&gt;Critical
    Path&lt;/a&gt; policies, which were definitely a success.  With these enhanced procedures, along with the upcoming implementation of &lt;a href=&quot;https://fedorahosted.org/autoqa/&quot;&gt;AutoQA&lt;/a&gt; and the new &lt;a
    href=&quot;https://fedoraproject.org/wiki/Package_update_acceptance_criteria&quot;&gt;Package
    update acceptance criteria&lt;/a&gt;, I think we&apos;ll see these numbers drastically improve in the future.
&lt;/p&gt;
&lt;p&gt;
You can find the code that generates these statistics here: &lt;a href=&quot;https://fedorahosted.org/bodhi/browser/bodhi/tools/metrics.py&quot;&gt;metrics.py&lt;/a&gt;, &lt;a href=&quot;https://fedorahosted.org/bodhi/browser/bodhi/tools/log_stats.py&quot;&gt;log_stats.py&lt;/a&gt;.  If you have any ideas or suggestions for different types of metrics to generate, or if you find any bugs in my code, please let me know.
&lt;/p&gt;
&lt;p&gt;
&lt;blockquote&gt;
&lt;code&gt;
&lt;pre&gt;
Bodhi Statistics Report (Generated on June 8th, 2010)
=====================================================

Out of 17412 total updates, 2958 received feedback (16.99%)
Out of 1045 total unique karma submitters, the top 30 are:
 * notting (424)
 * mclasen (366)
 * jkeating (321)
 * adamwill (283)
 * cwickert (161)
 * rdieter (159)
 * pbrobinson (141)
 * kevin (141)
 * cweyl (122)
 * tomspur (119)
 * mtasaka (110)
 * xake (97)
 * cschwangler (86)
 * kwright (84)
 * peter (83)
 * hadess (80)
 * michich (72)
 * tagoh (69)
 * pfrields (69)
 * bpepple (69)
 * iarnell (68)
 * lkundrak (66)
 * shinobi (65)
 * sundaram (64)
 * spot (62)
 * pravins (62)
 * markmc (62)
 * thomasj (61)
 * smooge (60)
 * fab (59)

================================================================================
     Fedora 13
================================================================================

 * 3562 updates
 * 3065 stable updates
 * 427 testing updates
 * 62 pending updates
 * 8 obsolete updates
 * 2371 bugfix updates (66.56%)
 * 745 enhancement updates (20.92%)
 * 89 security updates (2.50%)
 * 357 newpackage updates (10.02%)
 * 410 critical path updates (11.51%)
 * 333 critical path updates approved
 * 1155 updates received feedback (32.43%)
 * 12120 +0 comments
 * 2477 +1 comments
 * 155 -1 comments
 * 595 unique authenticated karma submitters
 * 133 anonymous users gave feedback (1.57%)
 * 2261 out of 3562 updates went through testing (63.48%)
 * 1317 testing updates were pushed *without* karma (58.25%)
 * 21 critical path updates pushed *without* karma
 * Time spent in testing:
   * mean = 11 days
   * median = 9 days
   * mode = 7 days
 * 4 updates automatically unpushed due to karma (0.11%)
   * 0 of which were critical path updates
 * 231 updates automatically pushed due to karma (6.49%)
   * 2 of which were critical path updates
 * Time spent in testing of updates that were pushed by karma:
   * mean = 11 days
   * median = 7 days
   * mode = 7 days
 * Time spent in testing of updates that were unpushed by karma:
   * mean = 9 days
   * median = 5 days
   * mode = 5 days
 * 2445 packages updated (top 10 shown)
    * selinux-policy: 13
    * jd: 12
    * openoffice.org: 12
    * gdb: 12
    * ibus-pinyin: 11
    * nautilus: 10
    * kernel: 10
    * evolution: 9
    * libfm: 9
    * libmx: 9

================================================================================
     Fedora 12
================================================================================

 * 4844 updates
 * 4291 stable updates
 * 371 testing updates
 * 113 pending updates
 * 69 obsolete updates
 * 2905 bugfix updates (59.97%)
 * 1054 enhancement updates (21.76%)
 * 201 security updates (4.15%)
 * 684 newpackage updates (14.12%)
 * 407 critical path updates (8.40%)
 * 960 updates received feedback (19.82%)
 * 16311 +0 comments
 * 1899 +1 comments
 * 554 -1 comments
 * 758 unique authenticated karma submitters
 * 576 anonymous users gave feedback (5.33%)
 * 2873 out of 4844 updates went through testing (59.31%)
 * 2138 testing updates were pushed *without* karma (74.42%)
 * 188 critical path updates pushed *without* karma
 * Time spent in testing:
   * mean = 14 days
   * median = 13 days
   * mode = 17 days
 * 12 updates automatically unpushed due to karma (0.25%)
   * 4 of which were critical path updates
 * 133 updates automatically pushed due to karma (2.75%)
   * 13 of which were critical path updates
 * Time spent in testing of updates that were pushed by karma:
   * mean = 11 days
   * median = 7 days
   * mode = 7 days
 * Time spent in testing of updates that were unpushed by karma:
   * mean = 9 days
   * median = 5 days
   * mode = 5 days
 * 2902 packages updated (top 10 shown)
    * qbittorrent: 25
    * gdb: 25
    * selinux-policy: 22
    * kernel: 15
    * xorg-x11-server: 14
    * ibus: 13
    * jd: 13
    * abrt: 11
    * gvfs: 11
    * gtk2: 11

================================================================================
     Fedora 11
================================================================================

 * 6987 updates
 * 6381 stable updates
 * 183 testing updates
 * 99 pending updates
 * 324 obsolete updates
 * 3649 bugfix updates (52.23%)
 * 1566 enhancement updates (22.41%)
 * 350 security updates (5.01%)
 * 1422 newpackage updates (20.35%)
 * 383 critical path updates (5.48%)
 * 729 updates received feedback (10.43%)
 * 23427 +0 comments
 * 1197 +1 comments
 * 448 -1 comments
 * 782 unique authenticated karma submitters
 * 481 anonymous users gave feedback (3.58%)
 * 4129 out of 6987 updates went through testing (59.10%)
 * 3620 testing updates were pushed *without* karma (87.67%)
 * 278 critical path updates pushed *without* karma
 * Time spent in testing:
   * mean = 15 days
   * median = 14 days
   * mode = 17 days
 * 7 updates automatically unpushed due to karma (0.10%)
   * 0 of which were critical path updates
 * 64 updates automatically pushed due to karma (0.92%)
   * 11 of which were critical path updates
 * Time spent in testing of updates that were pushed by karma:
   * mean = 11 days
   * median = 7 days
   * mode = 7 days
 * Time spent in testing of updates that were unpushed by karma:
   * mean = 9 days
   * median = 5 days
   * mode = 5 days
 * 3787 packages updated (top 10 shown)
    * libguestfs: 30
    * jd: 24
    * selinux-policy: 23
    * kdebase-workspace: 19
    * kernel: 18
    * gdb: 16
    * dovecot: 16
    * qemu: 16
    * kdebase-runtime: 16
    * kdenetwork: 16

================================================================================
     Fedora EPEL 5
================================================================================

 * 1572 updates
 * 1255 stable updates
 * 198 testing updates
 * 43 pending updates
 * 76 obsolete updates
 * 734 bugfix updates (46.69%)
 * 236 enhancement updates (15.01%)
 * 93 security updates (5.92%)
 * 509 newpackage updates (32.38%)
 * 20 critical path updates (1.27%)
 * 103 updates received feedback (6.55%)
 * 6076 +0 comments
 * 156 +1 comments
 * 19 -1 comments
 * 243 unique authenticated karma submitters
 * 41 anonymous users gave feedback (1.22%)
 * 1176 out of 1572 updates went through testing (74.81%)
 * 1092 testing updates were pushed *without* karma (92.86%)
 * 19 critical path updates pushed *without* karma
 * Time spent in testing:
   * mean = 24 days
   * median = 18 days
   * mode = 16 days
 * 0 updates automatically unpushed due to karma (0.00%)
   * 0 of which were critical path updates
 * 10 updates automatically pushed due to karma (0.64%)
   * 0 of which were critical path updates
 * Time spent in testing of updates that were pushed by karma:
   * mean = 11 days
   * median = 7 days
   * mode = 7 days
 * Time spent in testing of updates that were unpushed by karma:
   * mean = 9 days
   * median = 5 days
   * mode = 5 days
 * 1060 packages updated (top 10 shown)
    * libguestfs: 26
    * znc: 10
    * vrq: 8
    * cherokee: 8
    * 389-ds-base: 8
    * viewvc: 8
    * 389-admin: 7
    * pki-ca: 7
    * wordpress-mu: 7
    * Django: 7

================================================================================
     Fedora EPEL 4
================================================================================

 * 447 updates
 * 359 stable updates
 * 40 testing updates
 * 11 pending updates
 * 37 obsolete updates
 * 222 bugfix updates (49.66%)
 * 68 enhancement updates (15.21%)
 * 40 security updates (8.95%)
 * 117 newpackage updates (26.17%)
 * 5 critical path updates (1.12%)
 * 11 updates received feedback (2.46%)
 * 1592 +0 comments
 * 11 +1 comments
 * 2 -1 comments
 * 85 unique authenticated karma submitters
 * 2 anonymous users gave feedback (0.24%)
 * 320 out of 447 updates went through testing (71.59%)
 * 311 testing updates were pushed *without* karma (97.19%)
 * 5 critical path updates pushed *without* karma
 * Time spent in testing:
   * mean = 18 days
   * median = 16 days
   * mode = 16 days
 * 0 updates automatically unpushed due to karma (0.00%)
   * 0 of which were critical path updates
 * 1 updates automatically pushed due to karma (0.22%)
   * 0 of which were critical path updates
 * Time spent in testing of updates that were pushed by karma:
   * mean = 11 days
   * median = 7 days
   * mode = 7 days
 * Time spent in testing of updates that were unpushed by karma:
   * mean = 9 days
   * median = 5 days
   * mode = 5 days
 * 313 packages updated (top 10 shown)
    * cherokee: 8
    * globus-common: 7
    * R: 6
    * voms: 6
    * globus-gsi-proxy-ssl: 5
    * globus-openssl-module: 5
    * globus-gsi-proxy-core: 5
    * bitlbee: 5
    * flashrom: 5
    * viewvc: 5
&lt;/blockquote&gt;
&lt;/code&gt;
&lt;/pre&gt;

&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">liveusb-creator trojan in the wild</title>
<category term="" />
<id>http://lewk.org/blog/2010/05/25/liveusb-creator-trojan</id>
<updated>2010-05-25T21:11:25Z</updated>
<published>2010-05-25T21:11:25Z</published>
<link rel="alternate" type="text/html" href="http://lewk.org/blog/liveusb-creator-trojan.html" />
<content type="html">&lt;p&gt;
&lt;img src=&quot;https://fedorahosted.org/liveusb-creator/attachment/wiki/img/fedorausb.png?format=raw&quot; align=&quot;right&quot;/&gt;
I&apos;ve been noticing many different copies of my Windows &lt;a href=&quot;http://liveusb-creator.fedorahosted.org&quot;&gt;liveusb-creator&lt;/a&gt; popping up on various sketchy-looking download sites.  The majority of these copies contain a variant of the &lt;a href=&quot;http://en.wikipedia.org/wiki/Vundo&quot;&gt;Vundo&lt;/a&gt; Trojan.

&lt;blockquote&gt;&lt;i&gt;&quot;Vundo, or the Vundo Trojan (also known as Virtumonde  or Virtumondo and sometimes referred to as MS Juan) is a Trojan horse that is known to cause popups and advertising for rogue antispyware programs, and sporadically other misbehavior including performance degradation and denial of service with some websites including Google  and Facebook.&quot;&lt;/i&gt;&lt;/blockquote&gt;
&lt;/p&gt;
&lt;p&gt;
So, if you downloaded a copy of the Windows liveusb-creator from anywhere other than
&lt;a href=&quot;https://fedorahosted.org/liveusb-creator&quot;&gt;https://fedorahosted.org/liveusb-creator&lt;/a&gt; -- you could be infected.  Apparently
the latest variation of this trojan is undetectable by most antivirus
(although, clamav was able to recognize the one that I found), so you
may need to look around for some of the common symptoms.  There is apparently a
tool that will remove this trojan which can be found &lt;a
href=&quot;http://vundofix.atribune.org&quot;&gt;here&lt;/a&gt;, however I have not tested it and
cannot vouch for its validity.
&lt;/p&gt;
&lt;p&gt;
If anyone was actually hit by this, I&apos;d be interested to hear about
it.&lt;br/&gt;&lt;br/&gt;  Also,
to state the blatantly obvious: &lt;b&gt;only download the liveusb-creator from the &lt;a href=&quot;https://fedorahosted.org/liveusb-creator&quot;&gt;homepage&lt;/a&gt;!&lt;/b&gt;
&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Fedora Community Statistics</title>
<category term="" />
<id>http://lewk.org/blog/2010/03/27/fedoracommunity-statistics</id>
<updated>2010-03-27T03:48:25Z</updated>
<published>2010-03-27T03:48:25Z</published>
<link rel="alternate" type="text/html" href="http://lewk.org/blog/fedoracommunity-statistics.html" />
<content type="html">&lt;p&gt;
&lt;a href=&quot;http://fedoracommunity.fedorahosted.org&quot;&gt;&lt;img src=&quot;http://fedorapeople.org/groups/designteam/Projects/Fedora%20Community/Fedora%20Community%20Banners/fedora-community-plain.png&quot; align=&quot;right&quot;/&gt;&lt;/a&gt;
    I&apos;m pleased to announce that version 0.4.0 of the &lt;a href=&quot;http://fedoracommunity.fedorahosted.org&quot;&gt;Fedora Community&lt;/a&gt; dashboard has just hit &lt;a href=&quot;https://admin.fedoraproject.org/community&quot;&gt;production&lt;/a&gt;.  Along with the usual batch of bugfixes, this release
contains a new &apos;&lt;a href=&quot;https://admin.fedoraproject.org/community/statistics&quot;&gt;Statistics&lt;/a&gt;&apos; section that contains metrics from a variety of different pieces of Fedora Infrastructure.
&lt;/p&gt;
&lt;p&gt;
    Thanks goes to &lt;a href=&quot;http://ianweller.org/&quot;&gt;Ian Weller&lt;/a&gt; for the wiki stats, &lt;a href=&quot;http://skvidal.wordpress.com/&quot;&gt;Seth Vidal&lt;/a&gt; for the torrent
    stats, and &lt;a href=&quot;http://www.domsch.com/&quot;&gt;Matt Domsch&lt;/a&gt; &amp; &lt;a href=&quot;http://jspaleta.livejournal.com/&quot;&gt;Jef Spaleta&lt;/a&gt; for the map generation code.  I ended up writing the updates
metrics, package stats, and users/mirrors widgets.  Enjoy!
&lt;/p&gt;

&lt;p&gt;
    &lt;center&gt;
&lt;a href=&quot;https://admin.fedoraproject.org/community/statistics/users&quot;&gt;&lt;img src=&quot;http://lmacken.fedorapeople.org/img/fedoracommunity-userstats.png&quot;/&gt;&lt;/a&gt;
&lt;br/&gt;
&lt;a href=&quot;https://admin.fedoraproject.org/community/statistics/mirrors&quot;&gt;&lt;img src=&quot;http://lmacken.fedorapeople.org/img/fedoracommunity-mirrorstats.png&quot;/&gt;&lt;/a&gt;
&lt;br/&gt;
&lt;a href=&quot;https://admin.fedoraproject.org/community/statistics/packages&quot;&gt;&lt;img src=&quot;http://lmacken.fedorapeople.org/img/fedoracommunity-packagestats.png&quot;/&gt;&lt;/a&gt;
&lt;br/&gt;
&lt;a href=&quot;https://admin.fedoraproject.org/community/statistics/accounts&quot;&gt;&lt;img src=&quot;http://lmacken.fedorapeople.org/img/fedoracommunity-accountstats.png&quot;/&gt;&lt;/a&gt;
&lt;br/&gt;
&lt;a href=&quot;https://admin.fedoraproject.org/community/statistics/updates&quot;&gt;&lt;img src=&quot;http://lmacken.fedorapeople.org/img/fedoracommunity-updatestats.png&quot;/&gt;&lt;/a&gt;
&lt;br/&gt;
&lt;a href=&quot;https://admin.fedoraproject.org/community/statistics/wiki&quot;&gt;&lt;img src=&quot;http://lmacken.fedorapeople.org/img/fedoracommunity-wikistats.png&quot;/&gt;&lt;/a&gt;
&lt;br/&gt;
&lt;a href=&quot;https://admin.fedoraproject.org/community/statistics/torrents&quot;&gt;&lt;img src=&quot;http://lmacken.fedorapeople.org/img/fedoracommunity-torrentstats.png&quot;/&gt;&lt;/a&gt;
&lt;/center&gt;

&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">nose 0.11</title>
<category term="" />
<id>http://lewk.org/blog/2010/01/18/nose-0.11</id>
<updated>2010-01-18T22:58:00Z</updated>
<published>2010-01-18T22:58:00Z</published>
<link rel="alternate" type="text/html" href="http://lewk.org/blog/nose-0.11.html" />
<content type="html">
&lt;p&gt;
I know nose 0.11 is &lt;a href=&quot;http://groups.google.com/group/nose-announce/browse_thread/thread/7c031dad4f53509a&quot;&gt;old news&lt;/a&gt;, but I&apos;ve only recently discovered it&apos;s new &lt;a href=&quot;http://somethingaboutorange.com/mrl/projects/nose/0.11.1/doc_tests/test_multiprocess/multiprocess.html&quot;&gt;multiprocess module&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
&lt;blockquote&gt;
&lt;code&gt;
&lt;pre&gt;
lmacken@tomservo ~/bodhi $ nosetests
................................................................................................
----------------------------------------------------------------------
Ran 96 tests in 725.111s

OK

lmacken@tomservo ~/bodhi $ nosetests --processes=50
................................................................................................
----------------------------------------------------------------------
Ran 96 tests in 10.915s

OK
&lt;/pre&gt;
&lt;/code&gt;
&lt;/blockquote&gt;
&lt;/p&gt;

&lt;p&gt;
Nose 0.11 is already in rawhide, and will soon be in &lt;a
href=&quot;https://admin.fedoraproject.org/updates/python-nose-0.11.1-1.fc12&quot;&gt;updates-testing&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
&lt;i&gt;Note to self (and others): Buy the nose developers beer at PyCon next
month&lt;/i&gt;
&lt;/p&gt;

</content>
</entry>

<entry>
<title type="html">My dream machine</title>
<category term="" />
<id>http://lewk.org/blog/2009/12/31/dreambox</id>
<updated>2009-12-31T01:05:20Z</updated>
<published>2009-12-31T01:05:20Z</published>
<link rel="alternate" type="text/html" href="http://lewk.org/blog/dreambox.html" />
<content type="html">&lt;p&gt;

In an effort to optimize my home office, I recently donated my
server rack to a local Boston record label, to hold their Red Hat
servers.  I&apos;m also in the process of donating all of my computer
hardware for re-use/recycling (~10 or so frankenstein boxen).

&lt;/p&gt;&lt;p&gt;

So, once I clear everything out, I&apos;m going to replace it with a new machine.  I usually sit in front of 1-3 laptops (thindpads
and XOs) on the daily, and I absolutley love them, but I need
something beefier.  I do most of my work on remote machines, but
I have found that I still spend too much time waiting on 
computers.

&lt;/p&gt;&lt;p&gt;

I&apos;m not much of a gamer, so I probably don&apos;t need too high-end of a
graphics chip, let alone SLI/Crossfire.  The extent of my gaming
these days consists of the occassional wesnoth, open arena,
nethack, and my current favorite Cube 2: Sauerbraten.  I just
want a card that will work well in Linux, ideally without having
to install proprietary drivers.

&lt;/p&gt;&lt;p&gt;

Anyway, I haven&apos;t built a desktop machine from the ground up in
12 years, and I&apos;ve been out of the hardware game for a long time,
so let me know what&apos;s good!  Here is what I&apos;ve been looking at so far...

&lt;/p&gt;&lt;p&gt;

&lt;table border=&quot;0&quot;&gt;
    &lt;tr&gt;
        &lt;td valign=&quot;top&quot;&gt;
            &lt;center&gt;
            &lt;b&gt;Intel DX58SO Extreme Series X58 ATX Tri-Channel DDR3 16GB SLI or CrossFireX LGA1366 Overclocking Utility Desktop Board&lt;/b&gt;&lt;br/&gt;
&lt;a href=&quot;http://www.amazon.com/Intel-Extreme-Tri-Channel-CrossFireX-Overclocking/dp/B001ISJONM/ref=wl_it_dp_o?ie=UTF8&amp;coliid=I3BI87T7ZFOF2W&amp;colid=WREBCPWKPZMD&quot;&gt;&lt;img src=&quot;http://ecx.images-amazon.com/images/I/51k4WbhD20L._SL500_AA280_.jpg&quot; border=&quot;0&quot;/&gt;&lt;/a&gt;

&lt;/center&gt;
&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;
&lt;center&gt; or &lt;/center&gt;
&lt;/td&gt;

&lt;td valign=&quot;top&quot;&gt;
    &lt;b&gt;ASUS Rampage II Extreme LGA1366 Intel X58 DDR3-1600 ATX Motherboard &lt;/b&gt;&lt;br/&gt;
&lt;a href=&quot;http://usa.asus.com/product.aspx?P_ID=W7i5W4Pw4fH22Mih&amp;templete=2&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://usa.asus.com/websites/global/products/W7i5W4Pw4fH22Mih/P_500.jpg&quot; width=&quot;300&quot;/&gt;&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;br/&gt;

&lt;table border=&quot;0&quot;&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;
            &lt;center&gt;
&lt;b&gt;Intel Core i7 975 Extreme Edition 3.33GHz 8M L3 Cache LGA1366 Desktop Processor&lt;/b&gt;&lt;br/&gt;
&lt;a href=&quot;http://www.intel.com/products/processor/corei7EE/index.htm?iid=prod_desktopcore+body_corei7ex&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://ecx.images-amazon.com/images/I/51pJWepQ1qL._SL500_AA280_.jpg&quot;/&gt;&lt;/a&gt;
            &lt;/center&gt;

&lt;/td&gt;
&lt;td&gt;

    &lt;center&gt;
    &lt;b&gt;Cooler Master V8 Nickel Plated Copper Base Aluminum Fins 8 Heatpipes Core i7 1366 CPU Cooler - (RR-UV8-XBU1-GP)&lt;/b&gt;&lt;br/&gt;
    &lt;a href=&quot;http://www.coolermaster-usa.com/product.php?category_id=1623&amp;product_id=2869&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://www.coolermaster-usa.com/upload/product/2869/intro01.jpg&quot; width=&quot;300&quot;/&gt;&lt;/a&gt;
&lt;/center&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;br/&gt;

&lt;table border=&quot;0&quot;&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;
            &lt;center&gt;
                &lt;b&gt;Corsair 6 GB Dominator GT PC3-16000 2000Mhz 240-pin Triple Channel DDR3 Memory Kit&lt;/b&gt;&lt;br/&gt;
&lt;a href=&quot;http://www.corsair.com/products/dominatorgt/default.aspx&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://ecx.images-amazon.com/images/I/51j-m01mTxL._SL500_AA280_.jpg&quot;/&gt;&lt;/a&gt;
            &lt;/center&gt;
&lt;/td&gt;
&lt;td&gt;
    &lt;center&gt;
        &lt;b&gt;Corsair CMPSU-1000HX 1000-Watt HX Professional Series 80 Plus Certified Power Supply&lt;/b&gt;&lt;br/&gt;
&lt;a href=&quot;http://www.corsair.com/products/hx1000/default.aspx&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://ecx.images-amazon.com/images/I/41y02r1RAzL._SL500_AA280_.jpg&quot;/&gt;&lt;/a&gt;
&lt;/center&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;br/&gt;

&lt;table border=&quot;0&quot;&gt;
    &lt;tr&gt;
        &lt;td valign=&quot;top&quot;&gt;
            &lt;center&gt;
                &lt;b&gt;Intel X25-E Extreme SATA Solid-State Drive&lt;/b&gt;&lt;br/&gt;
                &lt;br/&gt;
&lt;a href=&quot;http://www.intel.com/design/flash/nand/extreme/index.htm&quot;&gt;&lt;img src=&quot;http://macperformanceguide.com/images/ITLSSDX25M.jpg&quot; border=&quot;0&quot; width=&quot;250&quot;/&gt;&lt;/a&gt;
&lt;/center&gt;
&lt;/td&gt;

&lt;td align=&quot;center&quot;&gt;
    &lt;center&gt;or &lt;/center&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;

    &lt;center&gt;
        &lt;b&gt;Corsair 256 GB Internal Solid State Drive (SSD) CMFSSD-256GBG2D&lt;/b&gt;&lt;br/&gt;
&lt;a href=&quot;http://www.amazon.com/Corsair-Internal-Solid-State-CMFSSD-256GBG2D/dp/B0026V5MY0/ref=wl_it_dp_o?ie=UTF8&amp;coliid=I1MBV8VAT4X63M&amp;colid=WREBCPWKPZMD&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://ecx.images-amazon.com/images/I/41IVMpZtGdL._SL500_AA280_.jpg&quot;/&gt;&lt;/a&gt;

&lt;/center&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;br/&gt;

&lt;table border=&quot;0&quot;&gt;
    &lt;tr&gt;
        &lt;td valign=&quot;top&quot;&gt;
            &lt;center&gt;
                &lt;b&gt;DELL ULTRASHARP 3008WFP - 30-inch Widescreen Flat Panel Monitor&lt;/b&gt;&lt;br/&gt;
&lt;a href=&quot;http://accessories.us.dell.com/sna/products/Monitors/productdetail.aspx?c=us&amp;l=en&amp;s=dhs&amp;cs=19&amp;sku=223-4890&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://i.dell.com/images/global/products/monitors/mon3008wfp_overview1.jpg&quot;/&gt;&lt;/a&gt;

&lt;/center&gt;
&lt;/td&gt;
        &lt;td valign=&quot;top&quot;&gt;
            &lt;center&gt;
                &lt;b&gt;EVGA 01G-P3-1180-AR GeForce GTX285 1024 MB DDR3 PCI-Express 2.0 Graphics Card&lt;/b&gt;&lt;br/&gt;
&lt;a href=&quot;http://www.evga.com/products/moreInfo.asp?pn=01G-P3-1181-AR&amp;family=GeForce%20200%20Series%20Family&quot;&gt;&lt;img src=&quot;http://ecx.images-amazon.com/images/I/41O-6RQMbsL._AA280_.jpg&quot; border=&quot;0&quot;&gt;&lt;/a&gt;
&lt;/center&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;br/&gt;

&lt;table border=&quot;0&quot;&gt;
    &lt;tr&gt;
        &lt;td valign=&quot;top&quot;&gt;
            &lt;center&gt;
                &lt;b&gt;Endurapro&lt;/b&gt;&lt;br/&gt;
                &lt;br/&gt;
                &lt;br/&gt;
&lt;a href=&quot;http://pckeyboards.stores.yahoo.net/en104wh.html&quot;&gt;&lt;img width=&quot;400&quot; border=&quot;0&quot; src=&quot;http://ep.yimg.com/ip/I/pckeyboards_2059_6667&quot;/&gt;&lt;/a&gt;
&lt;/center&gt;
&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;
    &lt;center&gt;
        &lt;b&gt;Cooler Master HAF 932 High Air Flow ATX Full Tower Case&lt;/b&gt;&lt;br/&gt;
&lt;a href=&quot;http://www.coolermaster-usa.com/product.php?product_id=2810&quot;&gt;&lt;img width=&quot;250&quot; src=&quot;http://www.coolermaster-usa.com/upload/product/2810/intro01.jpg&quot; border=&quot;0&quot; width=&quot;300&quot;/&gt;&lt;/a&gt;
&lt;/center&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;br/&gt;

Also, if you appreciate my software and want me to write it faster... donations are accepted ;)
&lt;br/&gt;

&lt;center&gt;
&lt;form action=&quot;https://www.paypal.com/cgi-bin/webscr&quot; method=&quot;post&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;cmd&quot; value=&quot;_s-xclick&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;hosted_button_id&quot; value=&quot;10835212&quot;&gt;
&lt;input type=&quot;image&quot; src=&quot;https://www.paypal.com/en_US/i/btn/btn_donate_SM.gif&quot;
border=&quot;0&quot; name=&quot;submit&quot; alt=&quot;PayPal - The safer, easier way to pay online!&quot;&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;https://www.paypal.com/en_US/i/scr/pixel.gif&quot;
width=&quot;1&quot; height=&quot;1&quot;&gt;
&lt;/form&gt;
&lt;/center&gt;


&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">RIP Fedora 10</title>
<category term="" />
<id>http://lewk.org/blog/2009/12/29/f10</id>
<updated>2009-12-29T00:05:29Z</updated>
<published>2009-12-29T00:05:29Z</published>
<link rel="alternate" type="text/html" href="http://lewk.org/blog/f10.html" />
<content type="html">&lt;p&gt;
  Fedora 10 (Cambridge) (2008-11-25 -- 2009-12-17)

&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://fedoraproject.org/wiki/Releases/10/FeatureList&quot;&gt;Features&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h2&gt;Updates&lt;/h2&gt;
  &lt;b&gt;Source:&lt;/b&gt; &lt;a href=&quot;http://bodhi.fedoraproject.org&quot;&gt;bodhi&lt;/a&gt;

    &lt;center&gt;
        &lt;table&gt;
            &lt;tr&gt;&lt;td&gt;&lt;center&gt;Fedora 10 Updates&lt;/center&gt;&lt;a href=&quot;http://lmacken.fedorapeople.org/img/f10-updates-0.png&quot;&gt;&lt;img src=&quot;http://lmacken.fedorapeople.org/img/f10-updates-0.png&quot; width=&quot;473&quot; border=&quot;0&quot;/&gt;&lt;/a&gt;&lt;/td&gt;
                    &lt;td&gt;&lt;center&gt; Most updates per developer in Fedora 10&lt;/center&gt;&lt;a href=&quot;http://lmacken.fedorapeople.org/img/f10-updates-1.png&quot;&gt;&lt;img src=&quot;http://lmacken.fedorapeople.org/img/f10-updates-1.png&quot; width=&quot;473&quot; border=&quot;0&quot;/&gt;&lt;/a&gt;&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;td&gt;&lt;center&gt; Most Updated Packages in Fedora 10 &lt;/center&gt;
                &lt;a href=&quot;http://lmacken.fedorapeople.org/img/f10-updates-4.png&quot;&gt;&lt;img src=&quot;http://lmacken.fedorapeople.org/img/f10-updates-4.png&quot; width=&quot;473&quot; border=&quot;0&quot;/&gt;&lt;/a&gt;&lt;/td&gt;
                &lt;td&gt;&lt;center&gt; Packages with best karma &lt;/center&gt;
                &lt;a href=&quot;http://lmacken.fedorapeople.org/img/f10-updates-5.png&quot;&gt;&lt;img src=&quot;http://lmacken.fedorapeople.org/img/f10-updates-5&quot; width=&quot;473&quot; border=&quot;0&quot;/&gt;&lt;/a&gt;&lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;td&gt;&lt;center&gt; Top Fedora 10 testers &lt;/center&gt;&lt;a href=&quot;http://lmacken.fedorapeople.org/img/f10-updates-2.png&quot;&gt;&lt;img src=&quot;http://lmacken.fedorapeople.org/img/f10-updates-2.png&quot; width=&quot;473&quot; border=&quot;0&quot;/&gt;&lt;/a&gt;&lt;/td&gt;
                &lt;td&gt;&lt;center&gt; Most tested Fedora 10 packages &lt;/center&gt;&lt;a href=&quot;http://lmacken.fedorapeople.org/img/f10-updates-3.png&quot;&gt;&lt;img src=&quot;http://lmacken.fedorapeople.org/img/f10-updates-3.png&quot; width=&quot;473&quot; border=&quot;0&quot;/&gt;&lt;/a&gt;&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/table&gt;
    &lt;/center&gt;
&lt;br/&gt;
&lt;h2&gt;Torrent&lt;/h2&gt;
&lt;b&gt;Source:&lt;/b&gt; &lt;a href=&quot;https://admin.fedoraproject.org/community&quot;&gt;fedoracommunity&lt;/a&gt; (upcoming release)
&lt;br/&gt;
&lt;br/&gt;

&lt;table&gt;
&lt;tr&gt;&lt;th&gt;Torrent Name&lt;/th&gt;&lt;th&gt;Number of completed downloads&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; Fedora-10-i386-DVD   &lt;/td&gt;&lt;td&gt;    112,807 &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Fedora-10-x86_64-DVD  &lt;/td&gt;&lt;td&gt;   65,965 &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Fedora-10-i386-CDs    &lt;/td&gt;&lt;td&gt;   10,621 &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Fedora-10-ppc-DVD     &lt;/td&gt;&lt;td&gt;  6,851 &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Fedora-10-source-DVD  &lt;/td&gt;&lt;td&gt;  3,740 &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Fedora-10-x86_64-CDs  &lt;/td&gt;&lt;td&gt;   3,141 &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Fedora-10-ppc-CDs    &lt;/td&gt;&lt;td&gt; 1,336 &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Fedora-10-i686-AOS     &lt;/td&gt;&lt;td&gt;   666 &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Fedora-10-source-CDs   &lt;/td&gt;&lt;td&gt;   662 &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Fedora-10-i686-Live      &lt;/td&gt;&lt;td&gt; 599&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Fedora-10-x86_64-Live    &lt;/td&gt;&lt;td&gt; 336&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Fedora-10-x86_64-AOS     &lt;/td&gt;&lt;td&gt; 274 &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Fedora-10-i686-Live-KDE      &lt;/td&gt;&lt;td&gt; 201 &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Fedora-10-x86_64-Live-KDE    &lt;/td&gt;&lt;td&gt; 78 &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Fedora-10-i686-Live-XFCE     &lt;/td&gt;&lt;td&gt; 37 &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Fedora-10-i686-Live-Developer    &lt;/td&gt;&lt;td&gt; 13 &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Fedora-10-i686-Live-FEL      &lt;/td&gt;&lt;td&gt; 12 &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Fedora-10-x86_64-Live-XFCE      &lt;/td&gt;&lt;td&gt; 5&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Fedora-10-i686-Live-broffice     &lt;/td&gt;&lt;td&gt; 3&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Fedora-10-x86_64-Live-Developer     &lt;/td&gt;&lt;td&gt; 3&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Fedora-10-x86_64-Live-FEL   &lt;/td&gt;&lt;td&gt; 2&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Fedora-10-x86_64-Live-edu-math  &lt;/td&gt;&lt;td&gt; 1 &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Fedora-10-i686-Live-edu-math     &lt;/td&gt;&lt;td&gt; 1&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Fedora-10-x86_64-Live-broffice  &lt;/td&gt;&lt;td&gt; 0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;hr&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;Total&lt;/b&gt;&lt;/td&gt;               &lt;td&gt;&lt;b&gt;207,354&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;


&lt;br/&gt;
&lt;h2&gt;Yum Data&lt;/h2&gt;

&lt;b&gt;Source:&lt;/b&gt; &lt;a href=&quot;http://fedoraproject.org/wiki/Legacy_statistics#Yum_Data_2&quot;&gt;wiki/Legacy_statistics&lt;/a&gt;
&lt;br/&gt;
Connections to yum

&lt;table&gt;
&lt;tr&gt;&lt;th&gt; Week    &lt;/th&gt;&lt;th&gt;Dates   &lt;/th&gt;&lt;th align=&quot;right&quot;&gt;New Unique IPs&lt;/th&gt;&lt;th align=&quot;right&quot;&gt;Total Unique IPs&lt;/th&gt;&lt;th align=&quot;center&quot;&gt;Total compared to F9&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt; 2008-11-25 -- 2008-12-01&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;67,421&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;  67,421 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt; 73%
&lt;tr&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt; 2008-12-02 -- 2008-12-08&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;81,674&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;  149,095&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;     97%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;3 &lt;/td&gt;&lt;td&gt; 2008-12-09 -- 2008-12-15&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;60,759&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;  209,854&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;     97%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt; 2008-12-16 -- 2008-12-22&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;62,527&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;  272,381&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;     93%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;5 &lt;/td&gt;&lt;td&gt; 2008-12-23 -- 2008-12-29&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;68,375&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;  340,756&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;     97%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;6 &lt;/td&gt;&lt;td&gt; 2008-12-30 -- 2009-01-05&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;73,585&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;  414,341&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;     97%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;7 &lt;/td&gt;&lt;td&gt; 2009-01-06 -- 2009-01-12&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;94,166&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;  508,507&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;     103%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;8 &lt;/td&gt;&lt;td&gt; 2009-01-13 -- 2009-01-19&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;85,557&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;  594,064&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;     106%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;9 &lt;/td&gt;&lt;td&gt; 2009-01-20 -- 2009-01-26&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;87,678&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;  681,742&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;     107%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;10 &lt;/td&gt;&lt;td&gt;2009-01-27 -- 2009-02-02&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;91,014&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;  772,756&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;     110%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;11 &lt;/td&gt;&lt;td&gt;2009-02-03 -- 2009-02-09&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;95,238&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;  867,994&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;     113%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;12 &lt;/td&gt;&lt;td&gt;2009-02-10 -- 2009-02-16&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;95,967&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;  963,961&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;     115%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;13 &lt;/td&gt;&lt;td&gt;2009-02-17 -- 2009-02-23&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;109,800&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;     1,073,761&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;   115%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;14 &lt;/td&gt;&lt;td&gt;2009-02-24 -- 2009-03-02&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;85,246&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;  1,159,007&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;   --&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;15 &lt;/td&gt;&lt;td&gt;2009-03-03 -- 2009-03-09&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;100,610&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;     1,259,617&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;   --&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;16 &lt;/td&gt;&lt;td&gt;2009-03-10 -- 2009-03-16&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;100,323&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;     1,359,940 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;  --&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;17 &lt;/td&gt;&lt;td&gt;2009-03-17 -- 2009-03-23&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;100,819 &lt;/td&gt;&lt;td align=&quot;right&quot;&gt;    1,460,759  &lt;/td&gt;&lt;td align=&quot;center&quot;&gt; --&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;18 &lt;/td&gt;&lt;td&gt;2009-03-24 -- 2009-03-30&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;102,843 &lt;/td&gt;&lt;td align=&quot;right&quot;&gt;    1,563,602 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;  --&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;19 &lt;/td&gt;&lt;td&gt;2009-03-31 -- 2009-04-06&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;101,978 &lt;/td&gt;&lt;td align=&quot;right&quot;&gt;    1,665,580 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;  136%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;20 &lt;/td&gt;&lt;td&gt;2009-04-07 -- 2009-04-13&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;99,586  &lt;/td&gt;&lt;td align=&quot;right&quot;&gt;1,765,166 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;  --&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;21 &lt;/td&gt;&lt;td&gt;2009-04-14 -- 2009-04-20&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;101,808  &lt;/td&gt;&lt;td align=&quot;right&quot;&gt;   1,866,974 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;  --&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;22 &lt;/td&gt;&lt;td&gt;2009-04-21 -- 2009-04-27&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;100,230  &lt;/td&gt;&lt;td align=&quot;right&quot;&gt;   1,967,177 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;  --&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;23 &lt;/td&gt;&lt;td&gt;2009-04-28 -- 2009-05-04&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;97,584 &lt;/td&gt;&lt;td align=&quot;right&quot;&gt; 2,064,761 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;  --&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;24 &lt;/td&gt;&lt;td&gt;2009-05-05 -- 2009-05-11&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;95,923 &lt;/td&gt;&lt;td align=&quot;right&quot;&gt; 2,160,684 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;  137%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;25 &lt;/td&gt;&lt;td&gt;2009-05-12 -- 2009-05-18&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;95,632 &lt;/td&gt;&lt;td align=&quot;right&quot;&gt; 2,256,316 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;  --&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;26 &lt;/td&gt;&lt;td&gt;2009-05-19 -- 2009-05-25&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;92,377 &lt;/td&gt;&lt;td align=&quot;right&quot;&gt; 2,348,693 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;  --&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;27 &lt;/td&gt;&lt;td&gt;2009-05-26 -- 2009-06-01&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;91,747 &lt;/td&gt;&lt;td align=&quot;right&quot;&gt; 2,440,440 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;  --&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;28 &lt;/td&gt;&lt;td&gt;2009-06-02 -- 2009-06-08&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;91,513 &lt;/td&gt;&lt;td align=&quot;right&quot;&gt; 2,531,953  &lt;/td&gt;&lt;td align=&quot;center&quot;&gt; --&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;br/&gt;
&lt;h2&gt;Direct downloads&lt;/h2&gt;

&lt;b&gt;Source:&lt;/b&gt; &lt;a href=&quot;http://fedoraproject.org/wiki/Legacy_statistics#Direct_downloads&quot;&gt;wiki/Legacy_statistics&lt;/a&gt;
&lt;br/&gt;
The following table shows the number of direct downloads of Fedora 10 media from unique IP addresses, as shown in the web proxy logs. The actual number of raw downloads tends to be much higher.

&lt;br/&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;Week &lt;/th&gt;&lt;th&gt;   Dates &lt;/th&gt;&lt;th align=&quot;center&quot;&gt;  Downloads this week  &lt;/th&gt;&lt;th align=&quot;center&quot;&gt;   Total downloads&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; 1 &lt;/td&gt;&lt;td&gt; 2008-11-25 -- 2008-12-01     &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;  236,886 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;    236,886&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; 2 &lt;/td&gt;&lt;td&gt; 2008-12-02 -- 2008-12-08     &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;  105,994 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;    342,880&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; 3 &lt;/td&gt;&lt;td&gt; 2008-12-09 -- 2008-12-15     &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;  83,740  &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;    426,620&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; 4 &lt;/td&gt;&lt;td&gt; 2008-12-16 -- 2008-12-22     &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;  76,982  &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;    503,602&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; 5 &lt;/td&gt;&lt;td&gt; 2008-12-23 -- 2008-12-29     &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;  66,351  &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;    569,953&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; 6 &lt;/td&gt;&lt;td&gt; 2008-12-30 -- 2009-01-05     &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;  65,102  &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;    635,055&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; 7 &lt;/td&gt;&lt;td&gt; 2009-01-06 -- 2009-01-12     &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;  72,729  &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;    707,784&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; 8 &lt;/td&gt;&lt;td&gt; 2009-01-13 -- 2009-01-19     &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;  73,301  &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;    781,085&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; 9 &lt;/td&gt;&lt;td&gt; 2009-01-20 -- 2009-01-26     &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;  72,082  &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;    853,167&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; 10&lt;/td&gt;&lt;td&gt;     2009-01-27 -- 2009-02-02 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;   71,788 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt; 924,955&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; 11&lt;/td&gt;&lt;td&gt;     2009-02-03 -- 2009-02-09 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;   72,529 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt; 997,484&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; 12&lt;/td&gt;&lt;td&gt;     2009-02-10 -- 2009-02-16 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;   69,071 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt; 1,066,555&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; 13&lt;/td&gt;&lt;td&gt;     2009-02-17 -- 2009-02-23 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;   69,216 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt; 1,135,771&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; 14&lt;/td&gt;&lt;td&gt;     2009-02-24 -- 2009-03-02 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;   67,669 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt; 1,203,440&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; 15&lt;/td&gt;&lt;td&gt;     2009-03-03 -- 2009-03-09 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;   66,666 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt; 1,270,106&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; 16&lt;/td&gt;&lt;td&gt;     2009-03-10 -- 2009-03-16 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;   65,524 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt; 1,335,630&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; 17&lt;/td&gt;&lt;td&gt;     2009-03-17 -- 2009-03-23 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;   63,218 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt; 1,398,848&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; 18&lt;/td&gt;&lt;td&gt;     2009-03-24 -- 2009-03-30 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;   62,930 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt; 1,461,778&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; 19&lt;/td&gt;&lt;td&gt;     2009-03-31 -- 2009-04-06 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;   59,813 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt; 1,521,591&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; 20&lt;/td&gt;&lt;td&gt;     2009-04-07 -- 2009-04-13 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;   57,102 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt; 1,578,693&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; 21&lt;/td&gt;&lt;td&gt;     2009-04-14 -- 2009-04-20 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;   55,871 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt; 1,634,564&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; 22&lt;/td&gt;&lt;td&gt;     2009-04-21 -- 2009-04-27 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;   55,117 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt; 1,689,681&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; 23&lt;/td&gt;&lt;td&gt;     2009-04-28 -- 2009-05-04 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;   50,815 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt; 1,740,496&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; 24&lt;/td&gt;&lt;td&gt;     2009-05-05 -- 2009-05-11 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;   48,139 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt; 1,788,635&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; 25&lt;/td&gt;&lt;td&gt;     2009-05-12 -- 2009-05-18 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;   47,813 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt; 1,836,448&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; 26&lt;/td&gt;&lt;td&gt;     2009-05-19 -- 2009-05-25 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;   46,077 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt; 1,882,525&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; 27&lt;/td&gt;&lt;td&gt;     2009-05-26 -- 2009-06-01 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;   44,969 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt; 1,927,494&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; 28&lt;/td&gt;&lt;td&gt;     2009-06-02 -- 2009-06-08 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt;   44,835 &lt;/td&gt;&lt;td align=&quot;center&quot;&gt; 1,972,329 &lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">FUDCon Toronto 2009</title>
<category term="" />
<id>http://lewk.org/blog/2009/12/10/FUDCon-2009-Toronto</id>
<updated>2009-12-10T17:49:15Z</updated>
<published>2009-12-10T17:49:15Z</published>
<link rel="alternate" type="text/html" href="http://lewk.org/blog/FUDCon-2009-Toronto.html" />
<content type="html">&lt;img src=&quot;http://fedoraproject.org/w/uploads/4/49/FUDCon_F13_logo.png&quot; align=&quot;right&quot;/&gt;
&lt;p&gt;
Another &lt;a href=&quot;http://fedoraproject.org/wiki/FUDCon&quot;&gt;FUDCon&lt;/a&gt; is in the books, this time in Toronto.  It was great to catch up
with many people, put faces to some names, and meet a bunch of new contributors.
I gave a session on &lt;a href=&quot;http://moksha.fedorahosted.org&quot;&gt;Moksha&lt;/a&gt;, which
I&apos;ll talk about below, and was also on the Fedora Infrastructure panel
discussion.
&lt;p&gt;
My goal this FUDCon wasn&apos;t to crank out a ton of code, but to focus on
gathering and prioritizing requirements and to help others be productive.
Here are some of the projects I focused on.
&lt;/p&gt;
&lt;h3&gt;Moksha&lt;/h3&gt;
&lt;p&gt;
&lt;a href=&quot;http://moksha.fedorahosted.org&quot;&gt;Moksha&lt;/a&gt; is a project I created a little over a year ago, which is the base of a
couple of other applications I&apos;ve been working on as well: &lt;a
href=&quot;https://admin.fedoraproject.org/community&quot;&gt;Fedora Community&lt;/a&gt; and &lt;a
href=&quot;http://civx.us&quot;&gt;CIVX&lt;/a&gt;.  I&apos;ll be blogging about these in more detail later.
&lt;/p&gt;
&lt;p&gt;
One of the main themes of FUDCon this year was &lt;a href=&quot;https://fedoraproject.org/wiki/Messaging_SIG&quot;&gt;Messaging&lt;/a&gt; (&lt;a href=&quot;http://www.amqp.org/&quot;&gt;AMQP&lt;/a&gt;), and Moksha
is a large part of this puzzle, as it allows you to wield AMQP within web
applications.  During my session the demo involved busting open a terminal,
creating a consumer that reacts to all messages, creating a message producer,
and then creating a live chat widget -- all of which hooked up to Fedora&apos;s AMQP
broker.
&lt;/p&gt;
&lt;p&gt;
I&apos;ll be turning my slides into an article, so expect a full blog post
explaining the basics soon.  In the mean time, I found &lt;a
href=&quot;http://pseudogen.blogspot.com/2009/12/fudcon-day-one-awesomeness-that-is.html&quot;&gt;Adam Miller&apos;s&lt;/a&gt; description to be extremely amusing:
&lt;/p&gt;
&lt;p&gt;
&lt;blockquote&gt;
&quot;I walked into a session called &quot;Moksha and Fedora
Community -- Real-time web apps with Python and AMQP&quot; which blew my mind. This
is Web3.0 (not by definition, but that&apos;s what I&apos;m calling it), Luke Macken and
J5 completely just stepped over web2.0 and said &quot;pffft, childs play&quot; (well not
really but in my mind I assume it went something like that). This session
showed off technology that allows real time message passing in a web browser as
well as &quot;native&quot; support for standard protocols. The project page is
&lt;a href=&quot;https://fedorahosted.org/moksha/&quot;&gt;https://fedorahosted.org/moksha/&lt;/a&gt; and I think everyone on the planet should take
some time to go there and enjoy the demo, prepare to have your mind blown. Oh,
and I also irc transcribed that one as well
&lt;a href=&quot;http://meetbot.fedoraproject.org/fudcon-room-3/2009-12-05/fudcon-room-3.2009-12-05-22.07.log.html&quot;&gt;http://meetbot.fedoraproject.org/fudcon-room-3/2009-12-05/fudcon-room-3.2009-12-05-22.07.log.html&lt;/a&gt; ... presentation slides found:
&lt;a href=&quot;http://lmacken.fedorapeople.org/moksha-FUDConToronto-2009.odp&quot;&gt;http://lmacken.fedorapeople.org/moksha-FUDConToronto-2009.odp&lt;/a&gt;&quot;
&lt;/blockquote&gt;
&lt;/p&gt;

&lt;/p&gt;
&lt;h3&gt;Fedora Community&lt;/h3&gt;
&lt;p&gt;
So after we released v1.0 of Fedora Community for F12, all of us
went off in seperate directions to hack on various things.  &lt;a href=&quot;http://www.j5live.com&quot;&gt;J5&lt;/a&gt; wrote &lt;a href=&quot;https://fedorahosted&lt;/a&gt;.org/kamaloka-js/&quot;&gt;AMQP
javascript bindings&lt;/a&gt;, which I then integrated into Moksha.  &lt;a href=&quot;http://mairin.wordpress.com&quot;&gt;Máirín Duffy&lt;/a&gt; built a &lt;a href=&quot;http://mairin.wordpress.com/2009/10/17/open-source-portable-usability-testing-lab-part-2-the-parts&quot;&gt;portable usability lab&lt;/a&gt; and has been doing great research on the usability of the project.  And I dove back into Moksha to solidify the platform.
&lt;/p&gt;
&lt;p&gt;
After we deploy our AMQP broker for Fedora, and once we have start adding &lt;a href=&quot;https://fedoraproject.org/wiki/Messaging_SIG#Shims&quot;&gt;shims&lt;/a&gt;
into our existing infrastructure, we&apos;ll then be able to start creating live widgets and message consumers that can react to events, allowing us to wield Fedora in real-time.  This will let us to keep our fingers on the pulse of Fedora,
automate and facilitate tedious tasks, and gather metrics as things happen.
&lt;/p&gt;
&lt;p&gt;
During the hackfests I also did some work on our current Fedora Community
deployment.  Over the past few weeks some of our widgets randomly died, and we
haven&apos;t been receiving proper error messages.  So, I successfully hooked up
&lt;a href=&quot;http://pypi.python.org/pypi/WebError&quot;&gt;WebError&lt;/a&gt; and the team is now getting traceback emails, which will help us fix
problems much faster (or at least nag the hell out of us about them).
&lt;/p&gt;
&lt;p&gt;
I also worked with &lt;a href=&quot;http://ianweller.org/&quot;&gt;Ian Weller&lt;/a&gt; on the new Statistics section of the dashboard,
which has yet to hit production.  Ian and I wrote Wiki metrics, &lt;a href=&quot;http://skvidal.wordpress.com/&quot;&gt;Seth Vidal&lt;/a&gt; wrote BitTorrent
metrics, and I wrote Bodhi metrics.  We&apos;ve also got &lt;a href=&quot;http://fedoraproject.org/wiki/Statistics&quot;&gt;many more&lt;/a&gt; to come.  My main concern
was a blocker issue that we were hitting with our &lt;a href=&quot;http://code.google.com/p/flot/&quot;&gt;flot&lt;/a&gt; graphs when you quickly
bounce between tabs.  I ended up &quot;fixing&quot; the bug, so I&apos;ll be pushing what we
have of the stats branch into production in the near future.
&lt;/p&gt;
&lt;h3&gt;TurboGears2&lt;/h3&gt;
&lt;p&gt;

&lt;a href=&quot;http://www.turbogears.org&quot;&gt;TurboGears&lt;/a&gt; has definitely been our favorite web framework within Fedora&apos;s
Infrastructure for many years now.  TurboGears2, a complete re-invention of
itself, has been released recently, and is catching on *very* quickly in the
community.  Tons of people are working on awesome new apps, and loving
every minute of it.  I was also able to convert a rails hacker over to it,
after he was able to quickly dive into one of the tutorials with ease.  See
my &lt;a href=&quot;http://lewk.org/blog/TurboGears2-in-Fedora&quot;&gt;previous blog
post&lt;/a&gt; about getting up and running with TG2 in Fedora/EPEL.

&lt;/p&gt;

&lt;h3&gt;python-fedora&lt;/h3&gt;
&lt;p&gt;
One of my main tasks during the hackfests was to pull the authentication layer
in Fedora Community that authenticates against the Fedora Account System, and
port it over to python-fedora, so we can use it in any TurboGears2 application.
I committed the initial port to python-fedora-devel, and have started working
on integrating it into a default TG2 quickstart and document the process.
There are still a couple of minor things I want to fix/clean up before
releasing it, so expect a blog about it soon.
&lt;/p&gt;

&lt;h3&gt;&lt;a href=&quot;http://bodhi.fedorahosted.org&quot;&gt;Bodhi&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;

It seems like yesterday that I was an intern at Red Hat working on an internal
updates system for Fedora Core.  Coming up on 5 years later, and I am now working on my 3rd
implementation of an updates system, Bodhi v2.0.  What&apos;s wrong with the current
Bodhi you ask?  Well, if you talk to any user of it, you&apos;ll probably get a
pretty long list.  Bodhi is the first TurboGears application written &amp; deployed
in Fedora Infrastructure, and uses the vanilla components (SQLObject, kid,
CherryPy2).  The TG1 stack has been holding up quite nicely over the years,
and is still supported upstream, but bodhi&apos;s current implemention and design
does not make it easy to grow.
&lt;/p&gt;
&lt;p&gt;
Bodhi v2.0 will be implemented in TurboGears2, using SQLAlchemy for an ORM,
Mako for templates, and ToscaWidgets2 for re-usable widgets.  It will be
hook-based and plugin-driven, and will be completely distribution agnostic.
Another important goal will be AMQP message-bus integration, which will allow
other services or users to react to various events inside of the system as they
happen.
&lt;/p&gt;
&lt;p&gt;
So far I&apos;ve ported the old DB model from SQLObject to SQLAlchemy, and have
begun porting the old unit tests, and writing new ones.  Come the new year,
I&apos;ll be giving this much more of my focus.
&lt;/p&gt;
&lt;p&gt;
During the hackfests I got a chance to talk to &lt;a
href=&quot;http://www.ausil.us/&quot;&gt;Dennis Gilmore&lt;/a&gt; about various
improvements that we need to make with regard to the update push process.  It
was also great to talk to many different users of bodhi, who expressed various
concerns, some of which I&apos;ve already fixed.  I also got a chance to talk to
&lt;a href=&quot;https://fedoraproject.org/wiki/User:Laxathom&quot;&gt;Xavier Lamien&lt;/a&gt; about deploying Bodhi for &lt;a href=&quot;http://rpmfusion.org&quot;&gt;rpmfusion&lt;/a&gt;.  On the bus ride home I
helped explain to &lt;a href=&quot;http://blog.melchua.com/&quot;&gt;Mel&lt;/a&gt; how Bodhi &amp; Koji fit into the big picture of things.
&lt;/p&gt;
&lt;p&gt;
During the BarCamp sessions I also attended a session about the &lt;a
href=&quot;http://fedoraproject.org/wiki/Desktop/Whiteboards/UpdateExperience&quot;&gt;Update
Experience&lt;/a&gt;, where we discussed many important issues surrounding updates.
&lt;/p&gt;
&lt;h3&gt;liveusb-creator&lt;/h3&gt;
&lt;p&gt;

So I got a chance to finally meet &lt;a href=&quot;http://fedoraproject.org/wiki/User:Sdz&quot;&gt;Sebastian Dziallas&lt;/a&gt;, of &lt;a href=&quot;http://wiki.sugarlabs.org/go/Sugar_on_a_Stick&quot;&gt;Sugar on a Stick&lt;/a&gt; fame,
and was able to fix a few liveusb-creator issues on his laptop.  I ended up
pushing out a new release a couple of days ago that contains some of those
fixes, along with a new version of Sugar on a Stick.
&lt;/p&gt;
&lt;p&gt;
The liveusb-creator has been catching a lot of press recently (see the &lt;a href=&quot;http://liveusb-creator.fedorahosted.org&quot;&gt;front page&lt;/a&gt; for a list).  Not only did it have a 2 page spread in Linux Format, but it was also featured in this weeks Wired.com article &lt;a href=&quot;http://www.wired.com/geekdad/2009/12/new-sugar-on-a-stick-brings-much-needed-improvements/comment-page-1/#comment-31925&quot;&gt;New Sugar on a Stick Brings Much Needed Improvements&lt;/a&gt;.  Rock.
&lt;/p&gt;
&lt;h3&gt;Python&lt;/h3&gt;
&lt;p&gt;
There was lot of brainstorming done by &lt;a href=&quot;http://dmalcolm.livejournal.com/&quot;&gt;Dave Malcolm&lt;/a&gt;, &lt;a href=&quot;http://cgwalters.livejournal.com&quot;&gt;Colin Walters&lt;/a&gt;, &lt;a href=&quot;http://www.advogato.org/person/badger/&quot;&gt;Toshio Kuratomi&lt;/a&gt;, &lt;a href=&quot;http://codewiz.org/&quot;&gt;Bernie Innocenti&lt;/a&gt;, I, and many others about various improvements that we could make to the Python interpreter.  From speeding up startup time by doing some clever caching to potentially creating a new optimized compiled binary format.  We also looked into how WebError/abrt gather tracebacks, and discussed ways of enabling interactive traceback debugging for vanilla processes, without requiring a layer of WSGI middleware.
&lt;/p&gt;
&lt;p&gt;
There was also work done on &lt;a href=&quot;http://lwn.net/Articles/365689&quot;&gt;adding
SystemTap probes to Python&lt;/a&gt;, which is very exciting.  There are &lt;a href=&quot;https://fedoraproject.org/wiki/Features/SystemtapStaticProbes#Python&quot;&gt;many ideas&lt;/a&gt; for various probe points, including one that I blogged about &lt;a href=&quot;http://lewk.org/blog/python-dictionary-optimizations&quot;&gt;previously&lt;/a&gt;.
&lt;/p&gt;
&lt;h3&gt;Intel iMac8,1 support&lt;/h3&gt;
&lt;p&gt;

My iMac sucks at Linux.  This has been something
that has been nagging me for a long time, and I&apos;ve been slowly trying to chip away at
the problems.  First, I&apos;ve been doing work on a Mac port of the liveusb-creator.  I also
started to work on a &lt;a
href=&quot;http://lmacken.fedorapeople.org/patches/linux-2.6.31-efifb-iMac.patch&quot;&gt;kernel
patch&lt;/a&gt; for getting the EFI framebuffer working, and discussed how to do it
with ajax and pjones.  The screen doesn&apos;t display anything after grub, and
since we don&apos;t know the base address of the framebuffer, it involves writing
code to iterate over memory trying to find some common pixel patterns.  I&apos;m
still trying to wrap my head around all of it, but I&apos;ll probably end up just buying them
beer to fix it for me.
&lt;/p&gt;
&lt;p&gt;
&lt;h3&gt;Thincrust&lt;/h3&gt;

&lt;a href=&quot;http://thincrust.net&quot;&gt;Thincrust&lt;/a&gt; is a project that I&apos;ve been excited about for a while, and I
actually have some appliances deployed in a production cloud.  I was able to
run some ideas for various virtual appliances by one of the authors over some
beers.  Some pre-baked virtual appliances that you can easily throw into a
cloud that I would like to see:
&lt;/p&gt;
&lt;p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;http://wsgi.org&quot;&gt;WSGI&lt;/a&gt; appliance&lt;/li&gt;
    &lt;li&gt;TurboGears2, Pylons, Django, etc.&lt;/li&gt;
    &lt;li&gt;Moksha - Real-time web application in a box&lt;/li&gt;
    &lt;li&gt;func, certmaster, puppetmaster&lt;/li&gt;
    &lt;li&gt;Intrusion detection system&lt;/li&gt;
    &lt;li&gt;Many more that I can&apos;t think of right now&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;h3&gt;dogtail&lt;/h3&gt;

I&apos;m glad to see that &lt;a href=&quot;https://fedorahosted.org/dogtail&quot;&gt;dogtail&lt;/a&gt; is
still exciting people in the community.  It still has a lot of potential to
improve not only the way we test graphical software, but we also discussed ways
of using it to teach people and automate various desktop tasks. What if you
logged in after a fresh install and got the following popup bubble:
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Hi, welcome to Fedora, what can I help you do today?&lt;/b&gt;
&lt;ul&gt;
        &lt;li&gt;Installing new software&lt;/li&gt;
        &lt;li&gt;Setting up an email client&lt;/li&gt;
        &lt;li&gt;Using and RSS news reader&lt;/li&gt;
        &lt;li&gt;More...&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
Each task would then allow Fedora to take the wheel and walk the user through
various steps.  I had this idea a while ago, when dogtail first came out, and I still
think it would be totally awesome.  Anyway, this was not a focus of the
hackfests, but merely a conversation that I had while walking to lunch :)
&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">TurboGears2 in Fedora &amp; EPEL</title>
<category term="" />
<id>http://lewk.org/blog/2009/11/19/TurboGears2-in-Fedora</id>
<updated>2009-11-19T06:00:00Z</updated>
<published>2009-11-19T06:00:00Z</published>
<link rel="alternate" type="text/html" href="http://lewk.org/blog/TurboGears2-in-Fedora.html" />
<content type="html">&lt;img src=&quot;/img/tg-small.jpg&quot; align=&quot;right&quot;/&gt;
&lt;p&gt;
I&apos;m excited to announce that the &lt;a
href=&quot;http://turbogears.org&quot;&gt;TurboGears2&lt;/a&gt; web application stack
is now available in Fedora 12, 11 and EPEL-5.
&lt;/p&gt;
&lt;p&gt;
&lt;h3&gt;What is TurboGears2?&lt;/h3&gt;
&lt;blockquote&gt;
TurboGears 2 is the built on top of the experience of several next
generation web frameworks including TurboGears 1 (of course), Django,
and Rails. All of these frameworks had limitations which were
frustrating in various ways, and TG2 is an answer to that
frustration. We wanted something that had:
&lt;br/&gt;
  &lt;ul&gt;
  &lt;li&gt;Real multi-database support&lt;/li&gt;
  &lt;li&gt;Horizontal data partitioning (sharding)&lt;/li&gt;
  &lt;li&gt;Support for a variety of JavaScript toolkits, and new widget system to make building ajax heavy apps easier&lt;/li&gt;
  &lt;li&gt;Support for multiple data-exchange formats.&lt;/li&gt;
  &lt;li&gt;Built in extensibility via standard WSGI components&lt;/li&gt;
  &lt;/ul&gt;

&lt;/blockquote&gt;

&lt;/p&gt;
&lt;p&gt;
&lt;h3&gt;Installing the TurboGears2 stack &amp; development tools&lt;/h3&gt;
&lt;blockquote&gt;
&lt;b&gt;Fedora 12&lt;/b&gt;
&lt;blockquote&gt;&lt;code&gt;yum install TurboGears2 python-tg-devtools&lt;/code&gt;&lt;/blockquote&gt;
&lt;b&gt;Fedora 11&lt;/b&gt;
&lt;blockquote&gt;&lt;code&gt;yum --enablerepo=updates-testing install TurboGears2 python-tg-devtools&lt;/code&gt;&lt;/blockquote&gt;
&lt;b&gt;Red Hat Enterprise Linux 5 (with &lt;a href=&quot;http://fedoraproject.org/wiki/EPEL&quot;&gt;EPEL&lt;/a&gt;)&lt;/b&gt;
&lt;blockquote&gt;&lt;code&gt;yum --enablerepo=epel-testing install TurboGears2 python-tg-devtools&lt;/code&gt;&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;/p&gt;
&lt;h3&gt;Creating your first TG2 app&lt;/h3&gt;
&lt;blockquote&gt;&lt;code&gt;paster quickstart&lt;/code&gt;&lt;/blockquote&gt;
&lt;h3&gt;Run your test suite&lt;/h3&gt;
&lt;blockquote&gt;&lt;code&gt;nosetests&lt;/code&gt;&lt;/blockquote&gt;
&lt;h3&gt;Run your application&lt;/h3&gt;
&lt;blockquote&gt;&lt;code&gt;paster serve development.ini&lt;/code&gt;&lt;/blockquote&gt;
&lt;h3&gt;Read the documentation&lt;/h3&gt;
&lt;blockquote&gt;
    &lt;a href=&quot;http://www.turbogears.org/2.0/docs&quot;&gt;http://www.turbogears.org/2.0/docs&lt;/a&gt;
&lt;/blockquote&gt;

&lt;h3&gt;Contribute&lt;/h3&gt;
&lt;blockquote&gt;
    If you&apos;re interested in helping maintain and improve the TG2/Pylons stack
    within Fedora/EPEL, please &lt;a href=&quot;mailto:lmacken@redhat.com&quot;&gt;let me know&lt;/a&gt;.  We&apos;re always looking for new
    Python hackers to join the team.  There are still a few more components
    that need to be packaged and reviewed (eg: chameleon.genshi), so please
    take a look at the &lt;a
        href=&quot;https://fedoraproject.org/wiki/TurboGears2&quot;&gt;TurboGears2 page on
        the Fedora wiki&lt;/a&gt; for more details..
&lt;/blockquote&gt;
</content>
</entry>

<entry>
<title type="html">Fedora 12 is here!</title>
<category term="" />
<id>http://lewk.org/blog/2009/11/17/f12-is-here</id>
<updated>2009-11-17T06:00:00Z</updated>
<published>2009-11-17T06:00:00Z</published>
<link rel="alternate" type="text/html" href="http://lewk.org/blog/f12-is-here.html" />
<content type="html">&lt;p&gt;
&lt;center&gt;
&lt;a href=&quot;http://fedoraproject.org&quot;&gt;&lt;img src=&quot;http://fedoraproject.org/static/images/f12launch.png&quot;/&gt;&lt;/a&gt;
&lt;br/&gt;&lt;br/&gt;
&lt;b&gt;Install it with the liveusb-creator!&lt;/b&gt;&lt;br/&gt;&lt;br/&gt;
&lt;a href=&quot;http://liveusb-creator.fedorahosted.org&quot;&gt;&lt;img
src=&quot;https://fedorahosted.org/liveusb-creator/attachment/wiki/img/liveusb-creator-logo.png?format=raw&quot;/&gt;&lt;/a&gt;
&lt;/center&gt;
&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">New liveusb-creator release!</title>
<category term="" />
<id>http://lewk.org/blog/2009/11/09/liveusb-creator-3.8.6</id>
<updated>2009-11-09T02:39:42Z</updated>
<published>2009-11-09T02:39:42Z</published>
<link rel="alternate" type="text/html" href="http://lewk.org/blog/liveusb-creator-3.8.6.html" />
<content type="html">&lt;p&gt;

&lt;img
src=&quot;https://fedorahosted.org/liveusb-creator/attachment/wiki/img/fedorausb.png?format=raw&quot; align=&quot;right&quot; /&gt;

So I&apos;ve gotten some pretty inspiring feedback from various users of the
liveusb-creator recently, so I decided to put some cycles into it this weekend and
crank out another release.

&lt;blockquote&gt;&lt;code&gt;
&quot;As a non-Linux person, Live-USB Creator has improved the quality of my life measurably!&quot; --Dr. Arthur B. Hunkins
&lt;/code&gt;&lt;/blockquote&gt;

Yesterday I released version 3.8.6 of the liveusb-creator.  Changes in this
release include:
&lt;br/&gt;
&lt;ul&gt;
&lt;li&gt;Added the F12 beta release&lt;/li&gt;
&lt;li&gt;Updated to the latest Sugar on a Stick v2 beta snapshot (&lt;a href=&quot;https://bugzilla.redhat.com/show_bug.cgi?id=522240&quot;&gt;#522240&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Made our automatic device detection code more robust (&lt;a href=&quot;https://bugzilla.redhat.com/show_bug.cgi?id=519134&quot;&gt;#519134&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fixed encoding of unicode strings from exceptions (&lt;a href=&quot;https://bugzilla.redhat.com/show_bug.cgi?id=471367&quot;&gt;#471367&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Made our Linux device detection more robust (&lt;a href=&quot;https://bugzilla.redhat.com/show_bug.cgi?id=517053&quot;&gt;#517053&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Intel Mac EFI directory preparation (&lt;a href=&quot;https://bugzilla.redhat.com/show_bug.cgi?id=526825&quot;&gt;#526825&lt;/a&gt;) thanks to Matt Domsch&lt;/li&gt;
&lt;li&gt;Made our windows device detection more robust&lt;/li&gt;
&lt;li&gt;Added a --device-checksum options, which calculates the checksum of the entire device.&lt;/li&gt;
&lt;li&gt;Added a --liveos-checksum option, which takes the checksum of all LiveOS files, and then generate a checksum of the checksums&lt;/li&gt;
&lt;li&gt;Added a --hash option for configuring the hash for the above checksum features&lt;/li&gt;
&lt;li&gt;Made the LiveUSBCreator.bootable_partition method a little more robust&lt;/li&gt;
&lt;li&gt;Better handling of file descriptors&lt;/li&gt;
&lt;li&gt;Some Windows-specific optimizations &amp; fixes&lt;/li&gt;
&lt;li&gt;Fixed a bug with the overlay size on sticks with not much free space&lt;/li&gt;
&lt;li&gt;Handle device paths containing spaces when running extlinux (&lt;a href=&quot;https://bugzilla.redhat.com/show_bug.cgi?id=490843&quot;&gt;#490843&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Remove some duplicate po files (&lt;a href=&quot;https://bugzilla.redhat.com/show_bug.cgi?id=516841&quot;&gt;#516841&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Many translation updates&lt;/li&gt;
&lt;/ul&gt;

&lt;b&gt;Windows&lt;/b&gt;
&lt;br/&gt;
&lt;a href=&quot;https://fedorahosted.org/releases/l/i/liveusb-creator/liveusb-creator-3.8.6.zip&quot;&gt;https://fedorahosted.org/releases/l/i/liveusb-creator/liveusb-creator-3.8.6.zip&lt;/a&gt;

&lt;br/&gt;
&lt;br/&gt;
&lt;b&gt;Fedora&lt;/b&gt;

&lt;br/&gt;
&lt;a
href=&quot;https://admin.fedoraproject.org/updates/liveusb-creator-3.8.6-1.fc11&quot;&gt;https://admin.fedoraproject.org/updates/liveusb-creator-3.8.6-1.fc11&lt;/a&gt;
&lt;br/&gt;
&lt;a
href=&quot;https://admin.fedoraproject.org/updates/liveusb-creator-3.8.6-1.fc12&quot;&gt;https://admin.fedoraproject.org/updates/liveusb-creator-3.8.6-1.fc12&lt;/a&gt;
&lt;br/&gt;
&lt;br/&gt;

&lt;b&gt;Source&lt;/b&gt;

&lt;br/&gt;
&lt;a href=&quot;https://fedorahosted.org/releases/l/i/liveusb-creator/liveusb-creator-3.8.6.tar.bz2&quot;&gt;https://fedorahosted.org/releases/l/i/liveusb-creator/liveusb-creator-3.8.6.tar.bz2&lt;/a&gt;
&lt;br/&gt;
&lt;br/&gt;

&lt;b&gt;Trac&lt;/b&gt;
&lt;br/&gt;
&lt;a
href=&quot;http://liveusb-creator.fedorahosted.org&quot;&gt;http://liveusb-creator.fedorahosted.org&lt;/a&gt;


&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Good Python Habits: vim + pyflakes</title>
<category term="" />
<id>http://lewk.org/blog/2009/10/13/python-vim-pyflakes</id>
<updated>2009-10-13T13:32:49Z</updated>
<published>2009-10-13T13:32:49Z</published>
<link rel="alternate" type="text/html" href="http://lewk.org/blog/python-vim-pyflakes.html" />
<content type="html">&lt;p&gt;
Here is a neat little hack for running &lt;a
href=&quot;http://divmod.org/trac/wiki/DivmodPyflakes&quot;&gt;pyflakes&lt;/a&gt; on Python
files after you save them.  I like using pyflakes for quickly catching dumb
errors, but you could easily replace it with a more comprehensive tool like
&lt;a href=&quot;http://pychecker.sourceforge.net&quot;&gt;pychecker&lt;/a&gt;, or &lt;a href=&quot;http://www.logilab.org/857&quot;&gt;pylint&lt;/a&gt; for more strict &lt;a href=&quot;http://www.python.org/dev/peps/pep-0008/&quot;&gt;PEP8&lt;/a&gt; compliance.
&lt;/p&gt;
&lt;p&gt;
All you have to do is throw this in your ~/.vimrc
&lt;/p&gt;

&lt;blockquote&gt;&lt;code&gt;
au BufWritePost *.py !pyflakes %
&lt;/code&gt;&lt;/blockquote&gt;

&lt;p&gt;
This has saved me *tons* of time and frustration over the past few weeks, and
I have no idea I lived without it.
&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Fedora 12 filesystem showdown</title>
<category term="" />
<id>http://lewk.org/blog/2009/10/11/f12-filesystem-showdown</id>
<updated>2009-10-11T23:02:09Z</updated>
<published>2009-10-11T23:02:09Z</published>
<link rel="alternate" type="text/html" href="http://lewk.org/blog/f12-filesystem-showdown.html" />
<content type="html">&lt;p&gt;
&lt;img src=&quot;/img/metrics.png&quot; align=&quot;right&quot;/&gt;
            &lt;ul&gt;
                &lt;li&gt;&lt;b&gt;Kernel:&lt;/b&gt; 2.6.31.1-56.fc12.i686.PAE&lt;/li&gt;
                &lt;li&gt;&lt;b&gt;I/O Scheduler:&lt;/b&gt; CFQ&lt;/li&gt;
                &lt;li&gt;&lt;b&gt;Encryption&lt;/b&gt;: LUKS/dm-crypt AES-XTS cipher 512 bit key&lt;/li&gt;
                &lt;li&gt;&lt;b&gt;Installation Media:&lt;/b&gt; rawhide boot.iso (20091010)&lt;/li&gt;
                &lt;li&gt;&lt;b&gt;Benchmark&lt;/b&gt;: &lt;a href=&quot;http://www.coker.com.au/bonnie++/&quot;&gt;bonnie++&lt;/a&gt;&lt;/li&gt;
                &lt;li&gt;&lt;b&gt;Graphing script&lt;/b&gt;: &lt;a href=&quot;http://hg.lewk.org/index.py/flotbonnie&quot;&gt;flotbonnie.py&lt;/a&gt;&lt;/li&gt;
                &lt;li&gt;&lt;b&gt;Hardware profile: &lt;a href=&quot;/bench/f12-dev-20091009-fs/2.6.31.1-56.fc12.i686.PAE-hardinfo&quot;&gt;2.6.31.1-56.fc12.i686.PAE-hardinfo&lt;/a&gt; (note: ancient hardware)&lt;/b&gt;&lt;/li&gt;
                &lt;li&gt;&lt;b&gt;Raw data: &lt;a href=&quot;/bench/f12-dev-20091009-fs/2.6.31.1-56.fc12.i686.PAE-btrfs&quot;&gt;2.6.31.1-56.fc12.i686.PAE-btrfs&lt;/a&gt;, &lt;a href=&quot;/bench/f12-dev-20091009-fs/2.6.31.1-56.fc12.i686.PAE-ext3&quot;&gt;2.6.31.1-56.fc12.i686.PAE-ext3&lt;/a&gt;, &lt;a href=&quot;/bench/f12-dev-20091009-fs/2.6.31.1-56.fc12.i686.PAE-ext4&quot;&gt;2.6.31.1-56.fc12.i686.PAE-ext4&lt;/a&gt;, &lt;a href=&quot;/bench/f12-dev-20091009-fs/2.6.31.1-56.fc12.i686.PAE-xfs&quot;&gt;2.6.31.1-56.fc12.i686.PAE-xfs&lt;/a&gt;&lt;/b&gt; &lt;/li&gt;
    &lt;/ul&gt;

&lt;center&gt;
&lt;img src=&quot;/img/f12-filesystem-showdown.png&quot; /&gt;
&lt;/center&gt;
&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Fedora 9 Updates Metrics</title>
<category term="" />
<id>http://lewk.org/blog/2009/07/14/f9-updates</id>
<updated>2009-07-14T17:00:12Z</updated>
<published>2009-07-14T17:00:12Z</published>
<link rel="alternate" type="text/html" href="http://lewk.org/blog/f9-updates.html" />
<content type="html">&lt;p&gt;
&lt;center&gt;
&lt;b&gt;Fedora 9 Updates&lt;/b&gt;
&lt;br/&gt;
&lt;img src=&quot;/img/f9-updates.png&quot; /&gt;
&lt;br/&gt;&lt;br/&gt;
&lt;b&gt;Most updated packages&lt;/b&gt;
&lt;br&gt;
&lt;img src=&quot;/img/f9-most-updated.png&quot; /&gt;
&lt;br/&gt;&lt;br/&gt;
&lt;b&gt;Packages with the best karma&lt;/b&gt;
&lt;br&gt;
&lt;img src=&quot;/img/f9-best-karma.png&quot; /&gt;
&lt;br/&gt;&lt;br/&gt;
&lt;b&gt;Most updates per developer&lt;/b&gt;
&lt;br&gt;
&lt;img src=&quot;/img/f9-most-active-devs.png&quot; /&gt;
&lt;br/&gt;&lt;br/&gt;
&lt;b&gt;Most tested packages&lt;/b&gt;
&lt;br&gt;
&lt;img src=&quot;/img/f9-most-tested.png&quot; /&gt;
&lt;br/&gt;&lt;br/&gt;
&lt;b&gt;Top testers&lt;/b&gt;
&lt;br&gt;
&lt;img src=&quot;/img/f9-top-testers.png&quot; /&gt;
&lt;/center&gt;
&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Bodhi EPEL support!</title>
<category term="" />
<id>http://lewk.org/blog/2009/07/10/bodhi-epel</id>
<updated>2009-07-10T19:06:54Z</updated>
<published>2009-07-10T19:06:54Z</published>
<link rel="alternate" type="text/html" href="http://lewk.org/blog/bodhi-epel.html" />
<content type="html">&lt;p&gt;
&lt;img src=&quot;https://admin.fedoraproject.org/updates/static/images/bodhi-icon-48.png&quot; align=&quot;right&quot;/&gt;
It&apos;s been a long time coming, but the &lt;a href=&quot;http://fedoraproject.org/wiki/EPEL&quot;&gt;Extra Packages for Enterprise Linux (EPEL)&lt;/a&gt; project is finally utilizing the &lt;a href=&quot;http://koji.fedorahosted.org&quot;&gt;Koji&lt;/a&gt; build system and the &lt;a href=&quot;http://bodhi.fedorahosted.org&quot;&gt;Bodhi&lt;/a&gt; updates system.
&lt;/p&gt;
&lt;p&gt;
So I spent the past week hacking on EPEL support in &lt;a href=&quot;http://bodhi.fedorahosted.org&quot;&gt;bodhi&lt;/a&gt;.  This was not a trivial task, and took &lt;a href=&quot;https://fedorahosted.org/bodhi/timeline&quot;&gt;more work than expected&lt;/a&gt;.  Overall, it was a very beneficial experience, as I was able to hack in some higher level abstractions and also remove a lot of Fedora-specific assumptions in the code.  Most of the changes were what I would normally call &quot;hacks&quot;, mainly because I wanted to do it without changing the database schema.  However, this gives me a much clearer picture as to what we need from the Bodhi v2.0 model.  Anyway, 28 bodhi upgrades later, and everything seems to be working fine.
&lt;/p&gt;
&lt;p&gt;
The inevitable TurboGears2 rewrite/port of Bodhi is a little further down the
road.  I&apos;ve already ported the original model from SQLObject to SQLAlchemy, but
the templates, controllers, and widgets still need to be ported.  If you&apos;re
interested in helping make bodhi suck less, then please come talk to me :)
&lt;/p&gt;
&lt;p&gt;
Anyway, developers can now submit their EPEL updates &lt;a href=&quot;http://bodhi.fedoraproject.org&quot;&gt;here&lt;/a&gt;, or by running `make update` in their EL CVS branches.  Admins can read the &lt;a href=&quot;https://fedoraproject.org/wiki/Bodhi_Infrastructure_SOP&quot;&gt;Bodhi SOP&lt;/a&gt; to learn how to push updates.
&lt;/p&gt;
&lt;p&gt;
The workflow is far from perfect, but there has been some recent discussions as
to how we want EPEL to be treated differently compared to Fedora updates.  If
you have suggestions or comments, discussions should take place on &lt;a
href=&quot;http://www.redhat.com/mailman/listinfo/epel-devel-list&quot;&gt;epel-devel-list&lt;/a&gt;.
&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">Fedora Activity Day: Fedora Development Cycle 2009</title>
<category term="" />
<id>http://lewk.org/blog/2009/06/14/fedora-development-3.0</id>
<updated>2009-06-14T00:24:41Z</updated>
<published>2009-06-14T00:24:41Z</published>
<link rel="alternate" type="text/html" href="http://lewk.org/blog/fedora-development-3.0.html" />
<content type="html">
Earlier this week I ventured to Raleigh for a &lt;a
href=&quot;https://fedoraproject.org/wiki/Fedora_Activity_Day_Fedora_Development_Cycle_2009&quot;&gt;Fedora
Activity Day&lt;/a&gt;, where a dozen or so people brainstormed for a
few days about ways to improve our development process.
I feel that it was a very productive experience, as it allowed
everyone to list the things that could use improvements, without
getting caught up in the technical or political details.
We hashed out a huge list of items in &lt;a
href=&quot;https://fedoraproject.org/wiki/Communicate/GobbyHowTo&quot;&gt;Gobby&lt;/a&gt;
, prioritized them, and discussed possible solutions for as many
as we could.

A good number of proposals came out of it:

&lt;ul&gt;
&lt;li&gt;&lt;a
href=&quot;https://fedoraproject.org/wiki/Milestone_Adjustment_Proposal&quot;&gt;
Milestone Adjustment Proposal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href=&quot;https://fedoraproject.org/wiki/No_Frozen_Rawhide_Proposal&quot;&gt;No
Frozen Rawhide Proposal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href=&quot;https://fedoraproject.org/wiki/Critical_Path_Packages_Proposal&quot;&gt;
Critical Path Packages Proposal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href=&quot;https://fedoraproject.org/wiki/Koji_Build_Autosign_Proposal&quot;&gt;
Koji Build Autosign Proposal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a
href=&quot;https://fedoraproject.org/wiki/Israwhidebroken.com_Proposal&quot;&gt;israwhidebroken.com
Prposal&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
</entry>

<entry>
<title type="html">bodhi updates push process</title>
<category term="" />
<id>http://lewk.org/blog/2009/01/27/bodhi-push-process</id>
<updated>2009-01-27T05:15:03Z</updated>
<published>2009-01-27T05:15:03Z</published>
<link rel="alternate" type="text/html" href="http://lewk.org/blog/bodhi-push-process.html" />
<content type="html">&lt;img src=&quot;https://admin.fedoraproject.org/updates/static/images/bodhi-icon-48.png&quot; align=&quot;right&quot;/&gt;

&lt;p&gt;
&lt;a href=&quot;http://bodhi.fedorahosted.org&quot;&gt;Bodhi&lt;/a&gt;&apos;s push process is something
that is usually quite opaque to Fedora package maintainers.  Once an update
request goes into bodhi, the developer sits back and waits for the update to go
to where it needs to go.  The ball is then in releng&apos;s court, as they must
sign the packages, and tell bodhi to begin the push.  From there, bodhi
does it&apos;s thing for a while, and then updates magically end up on our users machines. Yay!
&lt;/p&gt;

&lt;p&gt;
Pushing updates used to take the better part of a day, mostly due to dumb code
and lots of filesystem churn over NFS.  Thankfully, a lot of the code is now
much smarter, and people like jkeating and mmcgrath have been helping to
address the NFS &amp; infrastructure bottlenecks.
&lt;/p&gt;

&lt;p&gt;
Hopefully I can help shed some light on one of the dark corners of bodhi known
as The Masher.  Here are some statistics of the last updates push that happened
earlier today.
&lt;p&gt;

&lt;p&gt;
&lt;center&gt;
&lt;table border=1&gt;
&lt;tr&gt; &lt;td&gt;Initial push request from releng&lt;/td&gt;&lt;td&gt;&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;Check koji tag / bodhi status consistency&lt;/td&gt;&lt;td&gt;38s&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;Move all of the build tags in Koji&lt;/td&gt;  &lt;td&gt;9m32s&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;Update the comps CVS module &lt;/td&gt; &lt;td&gt;11s&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;Mash f9-updates-testing &lt;/td&gt; &lt;td&gt;4m16s&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;Mash f9-updates &lt;/td&gt; &lt;td&gt;1h3m8s&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;Mash f10-updates-testing &lt;/td&gt; &lt;td&gt;12m43s&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;Mash f10-updates &lt;/td&gt; &lt;td&gt;37m51s&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;Set update ids, state modifications, updates-testing digest generation&lt;/td&gt; &lt;td&gt;1m57s&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;Generate updateinfo.xml &lt;/td&gt; &lt;td&gt;5m55s&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;Repo sanity checks &amp; symlinking to go live &lt;/td&gt; &lt;td&gt;1m4s&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;Cache latest repodata, and remove old &lt;/td&gt; &lt;td&gt;1m14s&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;Wait for updates to hit the master mirror &lt;/td&gt; &lt;td&gt;1h1s&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;Send update notices, update/close bugs, notify developers/commenters &lt;/td&gt; &lt;td&gt;11m11s&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;b&gt;Total&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;3h49m42s&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;/center&gt;
&lt;/p&gt;
&lt;br/&gt;
&lt;p&gt;
So we&apos;ve obviously made some great improvements here, and once the signing
server is deployed, you can probably expect a much more frequent/consistent flow of updates.
However, I definitely think there is still a lot of low-hanging fruit in this
process, and many steps can probably be done in parallel.  We&apos;re going to be
adding &lt;a
href=&quot;http://fedoraproject.org/wiki/Releases/FeaturePresto&quot;&gt;DeltaRPM&lt;/a&gt;
generation into the mix in the near future, so I&apos;ll give an update a bit later
with some details as to how that effects the process.
&lt;/p&gt;
&lt;p&gt;
Anyway... if you know Python, and enjoy optimizing code -- come talk to me :)
&lt;/p&gt;
</content>
</entry>

<entry>
<title type="html">liveusb-creator 3.0</title>
<category term="" />
<id>http://lewk.org/blog/2008/12/31/liveusb-creator-3.0</id>
<updated>2008-12-31T23:19:38Z</updated>
<published>2008-12-31T23:19:38Z</published>
<link rel="alternate" type="text/html" href="http://lewk.org/blog/liveusb-creator-3.0.html" />
<content type="html">&lt;img src=&quot;https://fedorahosted.org/liveusb-creator/attachment/wiki/img/fedorausb.png?format=raw&quot; align=&quot;right&quot;/&gt;
&lt;p&gt;
I&apos;m pleased to announce version 3.0 of the &lt;a href=&quot;http://liveusb-creator.fedorahosted.org&quot;&gt;liveusb-creator&lt;/a&gt;.  Aside from the usual batch of bug fixes and code improvements, this release also contains a variety of enhancements:
&lt;/p&gt;
&lt;p&gt;
&lt;ul&gt;
&lt;li&gt;Fedora 10 support&lt;/li&gt;
&lt;li&gt;Add a touch of &lt;a href=&quot;http://sugarlabs.org&quot;&gt;Sugar&lt;/a&gt; to your USB key with the &lt;a href=&quot;https://www.redhat.com/archives/fedora-announce-list/2008-October/msg00012.html&quot;&gt;Sugar Spin 0.82-2&lt;/a&gt;!&lt;/li&gt;
&lt;li&gt;Ability to create OLPC-bootable live USB sticks or SD cards with the new `--xo` option&lt;/li&gt;
&lt;li&gt;Translations! (Thanks to the incredible &lt;a href=&quot;http://translate.fedoraproject.org&quot;&gt;Transifex&lt;/a&gt;)&lt;ul&gt;
    &lt;li&gt;Greek translation (Nikos Charonitakis)&lt;/li&gt;
    &lt;li&gt;Slovak translation (Ondrej Sulek)&lt;/li&gt;
    &lt;li&gt;Catalan translation (Xavier Conde)&lt;/li&gt;
    &lt;li&gt;French translation (PabloMartin-Gomez)&lt;/li&gt;
    &lt;li&gt;Serbian (Milos Komarcevic)&lt;/li&gt;
    &lt;li&gt;Chinese (sainrysec)&lt;/li&gt;
    &lt;li&gt;Brazilian Portuguese translation (Igor Pires Soares)&lt;/li&gt;
    &lt;li&gt;Spanish translation (Domingo Becker)&lt;/li&gt;
    &lt;li&gt;Malay translation (Sharuzzaman Ahmat Raslan)&lt;/li&gt;
    &lt;li&gt;German Translation (Marcus Nitzschke, Fabian Affolter)&lt;/li&gt;
    &lt;li&gt;Polish translation (Piotr Drąg)&lt;/li&gt;
    &lt;li&gt;Portuguese translation (Valter Fukuoka)&lt;/li&gt;
    &lt;li&gt;Czech translation (Adam Pribyl)&lt;/li&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
For Fedora 9 and 10 users, you can currently find the &lt;a href=&quot;https://admin.fedoraproject.org/updates/liveusb-creator&quot;&gt;liveusb-creator-3.0&lt;/a&gt; in the updates-testing repository.  Feedback is appreciated!
&lt;/p&gt;
&lt;p&gt;
There are still many more great features in the pipeline, so &lt;a href=&quot;https://fedorahosted.org/liveusb-creator/timeline&quot;&gt;stay tuned&lt;/a&gt;!
&lt;/p&gt;
</content>
</entry>
</feed>
