<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE rss [<!ENTITY % HTMLlat1 PUBLIC "-//W3C//ENTITIES Latin 1 for XHTML//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent">]>
<rss version="2.0" xml:base="http://billstclair.com/blog">
<channel>
 <title>End the War on Freedom - Loom</title>
 <link>http://billstclair.com/blog/taxonomy/term/28/0</link>
 <description>Posts about the Loom.cc Electronic Accounting System</description>
 <language>en</language>
 <managingEditor>bill@billstclair.com</managingEditor>
<item>
 <title>Trubanc 1.0b1</title>
 <link>http://billstclair.com/blog/trubanc_1_0b1.html</link>
 <description>&lt;p&gt;&lt;a href=&quot;http://Trubanc.com/&quot;&gt;Trubanc&lt;/a&gt; is an anonymous, digitally-signed vault and trading system. Like &lt;a href=&quot;https://loom.cc/&quot;&gt;Loom&lt;/a&gt;, it allows anyone to issue assets (digital currencies). Unlike Loom, which relies entirely on (very good) obscurity for security, Trubanc&#039;s digital signatures allow the bank and the customer to prove to each other that they agreed at a particular time on their balances. It does this while allowing destruction of transaction history for closed trades. Trubanc will initially provide server-based trading. Eventually, it will provide digital checks and bearer certificates.&lt;/p&gt;
&lt;p&gt;I &lt;a href=&quot;trubanc.html&quot;&gt;started&lt;/a&gt; working on Trubanc in August of 2008. I &lt;a href=&quot;trubanc_web_client_public_beta.html&quot;&gt;announced&lt;/a&gt; a public beta of the PHP implementation in December and &lt;a href=&quot;trubanc_storage_fees.html&quot;&gt;added storage fees&lt;/a&gt; in March of 2009. In late March, I started converting the PHP to Common Lisp. Today, I&#039;m announcing the first public beta of that implementation. Trubanc.com is now running the Lisp client and server, and you can download the client/server binary, and use it on your PC as a client, or on your own server, as your own Trubanc.&lt;/p&gt;
&lt;p&gt;The client binary works in Windows, Linux, FreeBSD, and Mac OS X. I haven&#039;t yet built all 8 combinations of 32/64 bit and OS, but I&#039;ve built the ones most requested by my early testers, and will build the others on request.&lt;/p&gt;
&lt;p&gt;Client binaries are at &lt;a href=&quot;http://trubanc.com/download/&quot;&gt;trubanc.com/download&lt;/a&gt;. Client installation and usage instructions are at &lt;a href=&quot;http://trubanc.com/client.html&quot;&gt;trubanc.com/client.html&lt;/a&gt;. Server installation and configuration instructions are at &lt;a href=&quot;http://trubanc.com/server.html&quot;&gt;trubanc.com/server.html&lt;/a&gt;. Please help me test it.&lt;/p&gt;
&lt;p&gt;After you&#039;ve installed the client, send email to bill at billstclair dot com, encrypted with my &lt;a href=&quot;../pgp.html&quot;&gt;PGP public key&lt;/a&gt;, and including yours, if you want privacy, and I&#039;ll send you a coupon with some usage tokens for a test account.&lt;/p&gt;
</description>
 <category domain="http://billstclair.com/blog/categories/loom">Loom</category>
 <category domain="http://billstclair.com/blog/categories/digital_money/trubanc">Trubanc</category>
 <pubDate>Wed, 15 Jul 2009 15:57:56 +0000</pubDate>
</item>
<item>
 <title>NuBux</title>
 <link>http://billstclair.com/blog/nubux.html</link>
 <description>&lt;p&gt;&lt;a href=&quot;http://nubux.heroku.com/&quot;&gt;NuBux&lt;/a&gt; has got to be the simplest account interface imagineable. Register with an email address and password, and it gives you $1,000 to play with (demo system, obviously). You can spend to other email addresses, see a list of your transactions, and inspect each individual transaction. That&#039;s the whole thing. Open source. MIT license. A product of Pelle Braendgaard and &lt;a href=&quot;http://stakeventures.com/&quot;&gt;Stake Ventures Inc&lt;/a&gt;.&lt;/p&gt;
</description>
 <category domain="http://billstclair.com/blog/categories/loom">Loom</category>
 <pubDate>Wed, 15 Jul 2009 00:38:17 +0000</pubDate>
</item>
<item>
 <title>Loom User Interface Changes</title>
 <link>http://billstclair.com/blog/loom_user_interface_changes.html</link>
 <description>&lt;p&gt;Patrick Chkoreff has installed Version 86 of the &lt;a href=&quot;https://loom.cc/&quot;&gt;Loom&lt;/a&gt; digital vault and payment system. He&#039;s done a number of user interface improvements, making it easier to add contacts and assets, and to invite new users to Loom. Bravo!&lt;/p&gt;
</description>
 <category domain="http://billstclair.com/blog/categories/loom">Loom</category>
 <pubDate>Fri, 05 Jun 2009 10:33:34 +0000</pubDate>
</item>
<item>
 <title>Trubanc Storage Fees</title>
 <link>http://billstclair.com/blog/trubanc_storage_fees.html</link>
 <description>&lt;p&gt;I have added storage fees to &lt;a href=&quot;http://trubanc.com/&quot;&gt;Trubanc&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;One of the drawbacks of &lt;a href=&quot;https://loom.cc&quot;&gt;Loom&lt;/a&gt; is that there&#039;s no way to make money from Loom itself, except for small amounts of one-time income from new users for asset tokens. In order to make Trubanc a money-making proposition for the asset issuers, I have added storage fees. I expect that most Trubanc assets will be backed by precious metals in storage. It makes sense for the issuer, who must pay for the space and security of that storage, to be paid a small periodic fee. He can now set a yearly percentage rate charged for all users of his asset.&lt;/p&gt;
&lt;p&gt;I&#039;m going to describe the new feature with an example. I&#039;m assuming two users, John and Mary. John creates a gold-backed asset, named &quot;John GoldGrams&quot;, with a storage fee of 1%. The market will determine how much storage fee is viable. The Free Lakota Bank &lt;a href=&quot;http://www.freelakotabank.com/fees.php&quot;&gt;charges&lt;/a&gt; 1/20,000 per month, or 0.06% per year. C-gold &lt;a href=&quot;https://c-gold.com/fees.php&quot;&gt;charges&lt;/a&gt; 1% per year. &lt;a href=&quot;http://www.e-gold.com/unsecure/fees.htm&quot;&gt;E-gold too&lt;/a&gt;. Trubanc allows the asset issuer to decide what to charge, and to change it at any time.&lt;/p&gt;
&lt;p&gt;Rather than keeping track of an average monthly balance, and assessing the storage charges monthly, Trubanc includes storage charges in every transaction, paid by the holder of the asset. So when you make a spend, you pay the fee on your original balance for the amount of time it&#039;s been there. And when you accept a spend from someone else, you pay the fee on the accepted amount, for the time that it&#039;s been in your inbox. Trubanc keeps fractional amounts on fees, so that these small amounts can add up for the asset issuer.&lt;/p&gt;
&lt;p&gt;John creates his new asset:&lt;/p&gt;
&lt;p&gt;&lt;img style=&quot;border: solid 1px;&quot; src=&quot;images/fee-01-create-asset.gif&quot; alt=&quot;John creates his new asset&quot;/&gt;&lt;/p&gt;
&lt;p&gt;To change the fee, fill in the new fee, and press the &quot;Update Storage Fees&quot; button:&lt;/p&gt;
&lt;p&gt;&lt;img style=&quot;border: solid 1px;&quot; src=&quot;images/fee-02-update-asset.gif&quot; alt=&quot;Updating the storage fee&quot;/&gt;&lt;/p&gt;
&lt;p&gt;Mary sells John her old car, and elects to take payment as 100 John GoldGrams. Here&#039;s her inbox after John spends the 100 grams to her:&lt;/p&gt;
&lt;p&gt;&lt;img style=&quot;border: solid 1px;&quot; src=&quot;images/fee-03-car-spend.gif&quot; alt=&quot;100 grams for Mary&#039;s car&quot;/&gt;&lt;/p&gt;
&lt;p&gt;After accepting the 100 gram spend, in the time it took me to write this, Mary has already lost a little to John&#039;s storage fees. She&#039;s paid less than 2 hundred thousandths of a gram, about 6 hundredths of a cent, some gold dust:&lt;/p&gt;
&lt;p&gt;&lt;img style=&quot;border: solid 1px;&quot; src=&quot;images/fee-04-gold-dust.gif&quot; alt=&quot;After accepting the 100 grams&quot;/&gt;&lt;/p&gt;
&lt;p&gt;Mary pays John a gram for a few old CDs, and she loses a little more gold dust:&lt;/p&gt;
&lt;p&gt;&lt;img style=&quot;border: solid 1px;&quot; src=&quot;images/fee-05-spend-a-gram.gif&quot; alt=&quot;Spend a gram&quot;/&gt;&lt;/p&gt;
&lt;p&gt;For the asset issuer, received storage fees are shown under the outbox. Here&#039;s John&#039;s account after Mary accepts the 100 gram spend and spends back 1 gram:&lt;/p&gt;
&lt;p&gt;&lt;img style=&quot;border: solid 1px;&quot; src=&quot;images/fee-06-receive-fees.gif&quot; alt=&quot;Storage fees received&quot;/&gt;&lt;/p&gt;
&lt;p&gt;Clicking the &quot;Move to Inbox&quot; button moves the received fees to the inbox as a spend from the bank for &quot;Storage fees&quot;:&lt;/p&gt;
&lt;p&gt;&lt;img style=&quot;border: solid 1px;&quot; src=&quot;images/fee-07-move-to-inbox.gif&quot; alt=&quot;Move to inbox&quot;/&gt;&lt;/p&gt;
&lt;p&gt;Clicking the &quot;Process Inbox&quot; button receives the 1 gram for the CDs plus the gold dust for Mary&#039;s storage fees:&lt;/p&gt;
&lt;p&gt;&lt;img style=&quot;border: solid 1px;&quot; src=&quot;images/fee-08-accept-fees.gif&quot; alt=&quot;Accept fees&quot;/&gt;&lt;/p&gt;
&lt;p&gt;There&#039;s one more feature I haven&#039;t implemented yet. What I demoed above collects fees when balances change. In order to collect storage fees on balances that change infrequently, the asset issuer will be able to run a periodic batch job that visits every account, collecting fees since the last batch job was run and posting them as negative spends (remember, Trubanc can&#039;t change a user&#039;s balance without his digital signature approving the change, but it CAN post a bank charge as a negative spend).&lt;/p&gt;
&lt;p&gt;This code is live at &lt;a href=&quot;http://trubanc.com/client/&quot;&gt;trubanc.com/client&lt;/a&gt;. If you want to play with it, just ask, and I&#039;ll give you a coupon to create an account or three.&lt;/p&gt;
</description>
 <category domain="http://billstclair.com/blog/categories/loom">Loom</category>
 <category domain="http://billstclair.com/blog/categories/digital_money/trubanc">Trubanc</category>
 <pubDate>Thu, 12 Mar 2009 11:32:01 +0000</pubDate>
</item>
<item>
 <title>Trubanc Web Client Public Beta</title>
 <link>http://billstclair.com/blog/trubanc_web_client_public_beta.html</link>
 <description>&lt;p&gt;&lt;a href=&quot;http://trubanc.com&quot;&gt;Trubanc&lt;/a&gt; is an anonymous, digitally-signed vault and trading system that I&#039;ve been working on since late July.&lt;/p&gt;
&lt;p&gt;I&#039;ve completed enough of a Trubanc web client to ask you to help me test it. Read the short &lt;a href=&quot;http://trubanc.com/client.html&quot;&gt;documentation&lt;/a&gt;, ask me for a coupon with some usage tokens (bill at billstclair dot com), and &lt;a href=&quot;http://trubanc.com/client/?cmd=register&quot;&gt;register&lt;/a&gt; with the client.&lt;/p&gt;
&lt;p&gt;Warning: the client and server are running, without encryption (no https), on a &lt;a href=&quot;http://nearlyfreespeech.net&quot;&gt;NearlyFreeSpeech.net&lt;/a&gt; web server in Arizona. Use it to help me test, but don&#039;t put anything of value there. I&#039;m likely to occasionally break things during development, and the feds will likely steal it if they find out about it.&lt;/p&gt;
</description>
 <category domain="http://billstclair.com/blog/categories/loom">Loom</category>
 <category domain="http://billstclair.com/blog/categories/digital_money/trubanc">Trubanc</category>
 <pubDate>Sun, 14 Dec 2008 13:59:36 +0000</pubDate>
</item>
<item>
 <title>Trubanc Encryption</title>
 <link>http://billstclair.com/blog/trubanc_encryption.html</link>
 <description>&lt;p&gt;I haven&#039;t thought much about encryption for the &lt;a href=&quot;http://trubanc.com/&quot;&gt;Trubanc&lt;/a&gt; client/server link. I figured I&#039;d just set up SSL on the server, and go with that. Today, I realized that I don&#039;t need SSL. Trubanc already has a public key infrastructure all set up. It can do it&#039;s own encryption, using the OpenSSL library just as the SSL protocol does. Here&#039;s an outline of the encryption protocol, using the same language I use in my &lt;a href=&quot;http://trubanc.com/viewtext.php?file=doc/db.txt&quot;&gt;server design&lt;/a&gt;, from the perspective of the client:&lt;/p&gt;
&lt;pre&gt;  sent: (&amp;lt;id&gt;,getsessionkey,&amp;lt;bankid&gt;,&amp;lt;reqid&gt;)
  rcvd: (&amp;lt;bankid&gt;,sessionkey,&amp;lt;id&gt;,&amp;lt;pubkey encrypted: [&amp;lt;sessionid&gt;,&amp;lt;sessionkey&gt;]&gt;)

  sent: [&amp;lt;sessionid&gt;,&amp;lt;sessionkey encrypted: message&gt;]
  rcvd: [&amp;lt;sessionid&gt;,&amp;lt;sessionkey encrypted: response&gt;]
           or
        [&amp;lt;sessionid&gt;,unknown] if the &amp;lt;sessionid&gt; isn&#039;t registered

  sent: [&amp;lt;sessionid&gt;,
         &amp;lt;sessionkey encrypted: (&amp;lt;id&gt;,closesession,&amp;lt;bankid&gt;,&amp;lt;sessionid&gt;)&gt;]
  rcvd: [&amp;lt;sessionid&gt;,
         &amp;lt;sessionkey encrypted:
           (&amp;lt;bankid&gt;,@closesession,(&amp;lt;id&gt;,closesession,&amp;lt;bankid&gt;,&amp;lt;sessionid&gt;))&gt;]
&lt;/pre&gt;&lt;p&gt;
This should be relatively easy to implement, and won&#039;t likely slow things down by much. Yay!&lt;/p&gt;
</description>
 <category domain="http://billstclair.com/blog/categories/loom">Loom</category>
 <category domain="http://billstclair.com/blog/categories/digital_money/trubanc">Trubanc</category>
 <pubDate>Wed, 20 Aug 2008 23:46:51 +0000</pubDate>
</item>
<item>
 <title>Trubanc Server Working</title>
 <link>http://billstclair.com/blog/trubanc_server_working.html</link>
 <description>&lt;p&gt;The &lt;a href=&quot;http://trubanc.com/&quot;&gt;Trubanc&lt;/a&gt; server is working. It&#039;s not complete yet, but there&#039;s enough there that I&#039;ve started coding the client. If you &lt;a href=&quot;http://trubanc.com/?debug=true&amp;amp;msg=(bc50c4fd9c228a21f64d34ca644a46c1fe8520e4%2Cbankid%2C-----BEGIN+PUBLIC+KEY-----%0AMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMwfcmkk2coTuYAEbdZ5iXggObNPzbSi%0ADnVtndZFe4%2F4Xg0IQPfpQ04OkhWIftMy1OjFhGlBzzNzdW98KYwKMgsCAwEAAQ%3D%3D%0A-----END+PUBLIC+KEY-----%0A)%3A%0AsLJ9GqFjZ61fq%2FbDFL6rxpY3w2s5dWIAXJCvPKQTPEkrG%2F2I1fwxBfugBmn%2FiPwa%0AjCRtnFDnrn7Mv%2BUY%2BSH4yw%3D%3D&quot;&gt;click here&lt;/a&gt;, you&#039;ll see the result of a request for the bank&#039;s ID. It&#039;s running from a real database, with a couple of testing users in it.&lt;/p&gt;
&lt;p&gt;I&#039;ve also written a simple description of the Trubanc protocol: &lt;a href=&quot;http://trubanc.com/plain-english.html&quot;&gt;Trubanc in Plain English&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Yay!&lt;/p&gt;
</description>
 <category domain="http://billstclair.com/blog/categories/loom">Loom</category>
 <category domain="http://billstclair.com/blog/categories/digital_money/trubanc">Trubanc</category>
 <pubDate>Sat, 16 Aug 2008 03:02:23 +0000</pubDate>
</item>
<item>
 <title>Trubanc</title>
 <link>http://billstclair.com/blog/trubanc.html</link>
 <description>&lt;p&gt;On &lt;a href=&quot;secure_banking_summary.html&quot;&gt;Monday&lt;/a&gt;, I talked about a new idea I had for a Loom-like system with public-key-signed balances. Well, I&#039;ve been madly writing code since then. I&#039;m calling it &lt;a href=&quot;http://trubanc.com&quot;&gt;Trubanc&lt;/a&gt;. There&#039;s a &lt;a href=&quot;http://trubanc.com/viewtext.php?file=doc/db.txt&quot;&gt;design document&lt;/a&gt;, and you can peruse &lt;a href=&quot;http://trubanc.com/viewtext.php&quot;&gt;the code&lt;/a&gt; as I write it. I intend to keep it open source, so that it can be verified. The server is about 1/3 done. When I finish that, and an initial web client, I&#039;ll let you know, and  you can try it out, with funny money, of course. Exciting!&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://trubanc.com/&quot; style=&quot;border: none&quot;&gt;&lt;img src=&quot;images/trubanc-logo.jpg&quot; alt=&quot;Trubanc&quot; width=&quot;376&quot; height=&quot;355&quot;/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br /&gt;
&lt;b&gt;Trubanc&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;If you know how, and are willing, I&#039;d love the signature on the logo above to be curved and reduced so that it would fit from about 3 to 5 o&#039;clock near the edge of the coin. The images I started with are &lt;a href=&quot;http://trubanc.com/Krugerand-reverse-512x483.jpg&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;http://trubanc.com/JohnHancockSignature.jpg&quot;&gt;here&lt;/a&gt;. I&#039;ll give a GoldNowBanc GoldGram to the first person to submit an image that I like (you&#039;ll need a &lt;a href=&quot;https://loom.cc/&quot;&gt;Loom&lt;/a&gt; account to take it).&lt;/p&gt;
</description>
 <category domain="http://billstclair.com/blog/categories/loom">Loom</category>
 <category domain="http://billstclair.com/blog/categories/digital_money/trubanc">Trubanc</category>
 <pubDate>Fri, 01 Aug 2008 03:25:00 +0000</pubDate>
</item>
<item>
 <title>Secure banking: summary</title>
 <link>http://billstclair.com/blog/secure_banking_summary.html</link>
 <description>&lt;p&gt;I talked for an hour last night with Patrick Chkoreff, the creator of &lt;a href=&quot;https://loom.cc/&quot;&gt;loom.cc&lt;/a&gt;. We came up with a scheme for doing secure banking and trading, where both the bank and the customer can prove at all times what the customer&#039;s balances are and what outstanding spends he has, and to whom. That&#039;s all that either party needs to keep track of.&lt;/p&gt;
&lt;p&gt;It uses public key signing on every exchanged message.&lt;/p&gt;
&lt;p&gt;Users and banks are identified by the 160-bit fingerprint of their public key ID.&lt;/p&gt;
&lt;p&gt;I intend to write a longer article, explaining the notation below, but I wanted to post this, so it&#039;s not just on my computer.&lt;/p&gt;
&lt;p&gt;Create account: (id_a, public_key_a, random): signature_a&lt;br /&gt;
  (This requires that somebody has pre-funded account id_a with tokens. Token balances need to be worked into the transactions below)&lt;/p&gt;
&lt;p&gt;Sequence request: (id_a, &quot;getsequence&quot;, random): signature_a&lt;br /&gt;
Sequence response:  (id_bank, &quot;sequence&quot;, sequence1): signature_bank&lt;/p&gt;
&lt;p&gt;Spend order: (id_a, &quot;spendto&quot;, id_b, sequence1, type, amount, comment1): signature_a&lt;br /&gt;
Balance: (id_bank, &quot;balance&quot;, id_a, sequence1, type, balance): signature_bank&lt;br /&gt;
Confirm balance: (id_a, &quot;confirmbalance&quot;, sequence1, type, balance): signature_a&lt;br /&gt;
Outstanding spends: (id_bank, &quot;outstandingspends&quot;, id_a, sequence1, [sequences...]): signature_bank&lt;br /&gt;
Confirm outstanding spends: (id_a, &quot;confirmoutstandingspends&quot; , sequence1, [sequences...]): signature_a&lt;/p&gt;
&lt;p&gt;Cancel Spend: (id_a, &quot;cancelspend&quot;, id_b, sequence1, type, amount): signature_a&lt;br /&gt;
Balance: ... sequence2 ...&lt;br /&gt;
Confirm balance: ... sequence2 ...&lt;br /&gt;
Outstanding spends: ... sequence2 ...&lt;br /&gt;
Confirm outstanding spends: ... sequence2 ...&lt;/p&gt;
&lt;p&gt;Get queue entry: (id_b, &quot;getq&quot;, random): signature_b&lt;br /&gt;
Receipt: (id_bank, &quot;receipt&quot;, (id_a, &quot;sellto&quot;, id_b, sequence1, type, amount, comment1): signature_a): signature_bank&lt;br /&gt;
Confirm receipt: (id_b, &quot;confirmreceipt&quot;, id_a, sequence1, type, amount): signature_b&lt;br /&gt;
Balance: (id_bank, &quot;balance&quot;, id_b, sequence3, type, balance): signature_bank&lt;br /&gt;
Confirm balance: (id_b, &quot;confirmbalance&quot;, sequence3, type, balance): signature_b&lt;/p&gt;
&lt;p&gt;Get queue entry: (id_a, &quot;getq&quot;, random): signature_a&lt;br /&gt;
Closed spend: (id_bank, &quot;closedspend&quot;,  ((id_b, &quot;confirmedreceipt&quot;, id_a, sequence1, type, amount): signature_b)): signature_bank&lt;br /&gt;
Confirm closed spend: (id_a, &quot;confirmclosedspend&quot;, id_b, sequence1, type, amount): signature_a&lt;br /&gt;
Outstanding spends: ... sequence4 ...&lt;br /&gt;
Confirm outstanding spends: ... sequence4 ...&lt;/p&gt;
&lt;p&gt;Deny receipt: (id_b, &quot;denyreceipt&quot;, id_a, sequence1, type, amount, comment2): signature_b&lt;/p&gt;
&lt;p&gt;Get queue entry: id_a ...&lt;br /&gt;
Denied spend: (id_bank, &quot;deniedspend&quot;, (id_b, &quot;denyreceipt&quot;, id_a, sequence1, type, amount, comment2): signature_b): signature_bank&lt;br /&gt;
Confirm denied spend: (id_a, &quot;confirmdeniedspend&quot;, id_b, sequence1, type, amount): signature_a&lt;br /&gt;
Balance: ... sequence5 ...&lt;br /&gt;
Confirm Balance:  ... sequence5 ...&lt;br /&gt;
Outstanding spends: ... sequence5 ...&lt;br /&gt;
Confirm outstanding spends: ... sequence5 ...&lt;/p&gt;
&lt;p&gt;Get confirmed balance: (id_a, &quot;getconfirmedbalance&quot;, type, random): signature_a&lt;br /&gt;
Confirmed balance: (id_bank, &quot;confirmedbalance&quot;, (id_a, &quot;confirmbalance&quot;, sequence1, type, balance): signature_a): signature_bank&lt;/p&gt;
&lt;p&gt;Get confirmed outstanding spends: (id_a, &quot;getconfirmedoutstandingspends&quot;, random): signature_a&lt;br /&gt;
Confirmed outstanding spends: (id_bank, &quot;confirmedoutstandingspends&quot;, (id_a, &quot;confirmoutstandingspends&quot; , sequence1, [sequences...]): signature_a): signature_bank&lt;/p&gt;
</description>
 <category domain="http://billstclair.com/blog/categories/loom">Loom</category>
 <category domain="http://billstclair.com/blog/categories/digital_money">Digital Money</category>
 <pubDate>Mon, 28 Jul 2008 04:45:03 +0000</pubDate>
</item>
<item>
 <title>Loom iPhone Interface Updated</title>
 <link>http://billstclair.com/blog/loom_iphone_interface_updated.html</link>
 <description>&lt;p&gt;I updated my &lt;a href=&quot;../loom/&quot;&gt;Loom&lt;/a&gt; iPhone interface, &lt;a href=&quot;../loom/ip.php&quot;&gt;billstclair.com/loom/ip.php&lt;/a&gt;, to match Patrick&#039;s &lt;a href=&quot;major_loom_release_v61.html&quot;&gt;changes&lt;/a&gt; to the Loom interface. &quot;Folder&quot; renamed to &quot;Wallet&quot;. &quot;Location&quot; renamed to &quot;Contact&quot;. You can tap on a line in a contact&#039;s section of the wallet to take all the assets on that line. Also, you can tap on the contact name as well as the green dot (which I retained because I like it) to edit a contact in the &quot;Loom Contacts&quot; screen.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;images/Loom4iPhoneV2-319x480.jpg&quot; &quot;Loom for iPhone v2&quot; width=&quot;319&quot; height=&quot;480&quot;/&gt;&lt;/p&gt;
</description>
 <category domain="http://billstclair.com/blog/categories/loom">Loom</category>
 <pubDate>Thu, 21 Feb 2008 13:32:53 +0000</pubDate>
</item>
<item>
 <title>Major Loom release v61</title>
 <link>http://billstclair.com/blog/major_loom_release_v61.html</link>
 <description>From &lt;a href=&quot;https://loom.cc/?function=news&quot;&gt;loom.cc/?function=news&lt;/a&gt;:
&lt;p&gt;
2008-02-17&lt;br&gt;
New release of Loom software with many improvements:
&lt;ul&gt;
&lt;li&gt;You now claim an asset from a contact with a single click. Therefore the &quot;Take&quot; button has been eliminated, and only &quot;Give&quot; remains.&lt;/li&gt;
&lt;li&gt;You can now add a new asset to your folder by copying and pasting a single piece of text. For example:
&lt;p&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;id: 26ef701a952fe3d641a69bf859db71c2 scale: 7 precision: 3 name: Patrick GoldGrams
&lt;p&gt;&lt;/li&gt;
&lt;li&gt;Tabs in folder interface now show as &quot;Wallet,&quot; &quot;Contacts,&quot; and &quot;Assets&quot; to reflect simplified terminology.&lt;/li&gt;
&lt;li&gt;Each tab in folder interface now has a very thoroughly written context-sensitive Help link. Be sure to click Help as you run through the various tabs.&lt;/li&gt;
&lt;li&gt;No more green dots. If you want more detail on something, click it. To avoid visual clutter, we often use links that don&#039;t appear as links until you hover over them.&lt;/li&gt;
&lt;li&gt;When you disable history, the entire history display now disappears. Formerly it would still display your history without recording any new transactions until you enabled it again. We like the ability to hide the history altogether, cutting down on distractions and page load time when you really just want to move things around fast.&lt;/li&gt;
&lt;li&gt;Lots of silky smooth user interface features and refinements.&lt;/li&gt;
&lt;li&gt;A new feature in the Archive API, and consequently in the Content Management System, to guard against overlapping writes. Now if two people are editing text at a single location, or even uploading files to a single location, the system will detect if anything changed &quot;under their feet&quot; and not clobber the other user&#039;s changes. The system also gives a helpful message describing a simple recovery mechanism for integrating the overlapping changes.&lt;/li&gt;
&lt;li&gt;Although the Vending Machine API is not yet implemented, the new feature of claiming an asset with a single click is the perfect lead-in to how vending machines will operate inside folders. Soon, two-way trades will be utterly simple and rock-solid in all respects. &lt;/li&gt;
&lt;/ul&gt;
</description>
 <category domain="http://billstclair.com/blog/categories/loom">Loom</category>
 <pubDate>Sun, 17 Feb 2008 20:45:54 +0000</pubDate>
</item>
<item>
 <title>Loomsheet</title>
 <link>http://billstclair.com/blog/loomsheet.html</link>
 <description>&lt;p&gt;I&#039;ve decided to create a GUI application for accessing Loom. I&#039;m calling it &lt;a href=&quot;http://loomsheet.com/&quot;&gt;Loomsheet&lt;/a&gt;. It will be written in Python, using wxPython for the GUI widgets. It will basically be a fancy spreadsheet, with live tables that can import and export their contents across the net. Most of the engine will not be Loom specific, but my use of it will be. So far, I&#039;ve only reserved the domain, &lt;a href=&quot;http://loomsheet.com/&quot;&gt;loomsheet.com&lt;/a&gt; and started on the &lt;a href=&quot;../loom/viewtext.php?file=loomsheet/design.txt&quot;&gt;design&lt;/a&gt;. I&#039;ll post another notice when there&#039;s something runnable. And, if you want to know details, you can follow the &lt;a href=&quot;http://repo.or.cz/w/loomclient.git?a=atom&quot;&gt;Atom feed&lt;/a&gt; for puts to the Git repository.&lt;/p&gt;
</description>
 <category domain="http://billstclair.com/blog/categories/loom">Loom</category>
 <pubDate>Mon, 04 Feb 2008 11:10:50 +0000</pubDate>
</item>
<item>
 <title>A PHP Script for Viewing Text Files</title>
 <link>http://billstclair.com/blog/a_php_script_for_viewing_text_files.html</link>
 <description>&lt;p&gt;I&#039;ve been writing PHP scripts recently to interact with the &lt;a href=&quot;https://loom.cc/&quot;&gt;Loom.cc&lt;/a&gt; anonymous electronic vault and trading system. I&#039;ve wanted to be able to show off my code, and my emacs design text files, without requiring the download of a source TAR file. So I wrote a little script that displays a text file, with a fixed width font and word wrap, and, optionally, searching for a phrase and/or displaying line numbers.&lt;/p&gt;
&lt;p&gt;Go to &lt;a href=&quot;../loom/viewtext.php?file=viewtext.php&quot;&gt;billstclair.com/loom/viewtext.php?file=viewtext.php&lt;/a&gt; to direct the script to view itself.&lt;/p&gt;
&lt;p&gt;You can add line numbers by &lt;a href=&quot;../loom/viewtext.php?file=viewtext.php&amp;amp;numbers=yes&quot;&gt;adding &quot;&amp;amp;numbers=yes&quot;&lt;/a&gt; to that URL.&lt;/p&gt;
&lt;p&gt;You can search for a phrase, e.g. &quot;replace&quot;, by &lt;a href=&quot;../loom/viewtext.php?file=viewtext.php&amp;amp;search=replace&quot;&gt;adding &quot;&amp;amp;search=replace&quot;&lt;/a&gt; to the URL. Each instance of the search string becomes a link that you can click on to move to the next one.&lt;/p&gt;
&lt;p&gt;Finally, such file viewers are security risks if you&#039;re not careful. But I was. Only files explicitly named in &quot;viewtext.txt&quot; may be viewed. That list is displayed if you leave off the &quot;file&quot;: &lt;a href=&quot;../loom/viewtext.php&quot;&gt;billstclair.com/loom/viewtext.php&lt;/a&gt;. This makes it easy to drop a copy of viewtext.php in a directory on your web site, and enter the names of the files you want to show in viewtext.txt in that directory.&lt;/p&gt;
&lt;p&gt;Go wild!&lt;/p&gt;
</description>
 <category domain="http://billstclair.com/blog/categories/loom">Loom</category>
 <pubDate>Mon, 04 Feb 2008 02:12:19 +0000</pubDate>
</item>
<item>
 <title>Live Compression of a GDBM Database</title>
 <link>http://billstclair.com/blog/live_compression_of_a_gdbm_database.html</link>
 <description>&lt;p&gt;A &lt;a href=&quot;http://www.gnu.org/software/gdbm/&quot;&gt;GDBM&lt;/a&gt; database file is an easy way to persistently store key/value pairs. &lt;a href=&quot;https://loom.cc/&quot;&gt;Loom&lt;/a&gt; uses one for its backing store. One problem with these databases is that they become fragmented over time, with lots of unfilled empty space: holes. They need to be periodically compressed. Patrick Chkeroff and I came up with a neat mechanism to do live compression. He has seen the Loom database file get 20 times bigger than it needed to be. He plans to integrate something similar to this mechanism into the Loom code.&lt;/p&gt;
&lt;p&gt;The basic idea mirrors Lisp two-space incremental garbage collectors, but is a little simpler. Call the original GDBM database the &quot;old&quot; database. We&#039;re going to open a second database, called the &quot;new&quot; database. And change the database access code so that it will over time copy the old database to the new one, leaving the new one with a compressed version of the data in the old one, plus any changes the user code has made during the copy operation.&lt;/p&gt;
&lt;p&gt;There&#039;s a working example in &lt;a href=&quot;../loom/viewtext.php?file=GDBM.php&quot;&gt;GDBM.php&lt;/a&gt;, in my Loom folder. You can copy and paste from that page or download it and my other Loom related code from &lt;a href=&quot;../loom/&quot;&gt;billstclair.com/loom&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The idea is simple. There are three operations on a database, read, write, and delete (implemented in the code by get() and put() functions, where put() of a blank value means delete).&lt;/p&gt;
&lt;p&gt;read($key):&lt;/p&gt;
&lt;ol &gt;
&lt;li &gt;If $key has a value in the new database, return it.&lt;/li&gt;
&lt;li &gt;If $key has a value in the old database, return it.&lt;/li&gt;
&lt;li &gt;Otherwise, return false, not in the database.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;write($key, $value):&lt;/p&gt;
&lt;ol &gt;
&lt;li &gt;Write the value to the new database.&lt;/li&gt;
&lt;li &gt;Delete the key from the old database.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;delete($key)&lt;/p&gt;
&lt;ol &gt;
&lt;li &gt;Delete the key from the old database.&lt;/li&gt;
&lt;li &gt;Delete the key from the new database.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;To each of the operations, I also add a call to the copysome() function, which copies some values from the old database to the new one. After all values have been copied, we close both databases, delete the old one, which is now empty, rename new to old, and reopen the new old database. When the user requests another copy, we open another new database and start again.&lt;/p&gt;
&lt;p&gt;copysome:&lt;/p&gt;
&lt;ol &gt;
&lt;li &gt;Fetch the first key/value pair in the old database&lt;/li&gt;
&lt;li &gt;If the key does not yet have a value in the new database, insert the key/value pair there.&lt;/li&gt;
&lt;li &gt;Delete the key from the old database.&lt;/a&gt;&lt;br /&gt;
&lt;li &gt;Repeat for a configurable number of copies, or until the old database is empty&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;At no time is it necessary to close the database for off-line compression. All you need is enough disk space to store two copies of the data, and a slight slow-down in access speed during the copy.&lt;/p&gt;
</description>
 <category domain="http://billstclair.com/blog/categories/loom">Loom</category>
 <pubDate>Mon, 04 Feb 2008 02:02:10 +0000</pubDate>
</item>
<item>
 <title>GoldNow</title>
 <link>http://billstclair.com/blog/goldnow.html</link>
 <description>&lt;p&gt;&lt;a href=&quot;http://www.goldnow.st/&quot;&gt;GoldNow&lt;/a&gt; sells lots of different electronic currencies: c-gold, e-Bullion Gold, e-Bullion e-Currency, e-gold, GoldNowBanc GoldGrams, GoldNowBanc USD, Liberty Reserve USD, Loom Tokens, Pecunix. GoldNowBanc GoldGrams and GoldNowBanc USD are stored in Loom. Loom Tokens can be used to buy loom storage.&lt;/p&gt;
&lt;p&gt;Their registration page sends you a sponsor link for a new Loom folder with 198 tokens. That&#039;s enough for most people&#039;s uses. Your cost for the &quot;free&quot; tokens is your contact information: snail mail, telephone, and email.&lt;/p&gt;
&lt;p&gt;The e-currencies sell for spot price at transaction time plus 5%, and it costs an additional 5 to 10% for payment in money order or fund transfer. Details of which e-currencies and payment methods are available vary depending on your location (country).&lt;/p&gt;
&lt;p&gt;Loom tokens cost $1/100.&lt;/p&gt;
&lt;p&gt;I mentioned GoldNow in my first Loom article, but since then they&#039;ve made it very easy to get a Loom folder, and to fund it with gold.&lt;/p&gt;
</description>
 <category domain="http://billstclair.com/blog/categories/loom">Loom</category>
 <pubDate>Mon, 28 Jan 2008 19:14:54 +0000</pubDate>
</item>
</channel>
</rss>
