<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7649844</id><updated>2012-01-26T13:08:44.058+01:00</updated><category term='scriptus'/><category term='postgres'/><category term='javascript'/><category term='YAGNI'/><category term='ec2'/><category term='jaxb'/><category term='hotrepart'/><category term='ec2 cloud'/><category term='cxf'/><category term='wsdl'/><category term='scaling'/><category term='mesh'/><category term='freedom'/><category term='war'/><category term='USA'/><category term='sed'/><category term='fsf'/><category term='gpl'/><category term='iphone'/><category term='opensource'/><category term='markdown'/><category term='society'/><category term='wss4j'/><category term='aws'/><category term='collapse'/><category term='ebs'/><category term='wikileaks'/><category term='commoditisation'/><category term='TBTF'/><category term='p2p'/><category term='soap'/><category term='java'/><category term='security'/><category term='programming'/><category term='politics'/><category term='postrges'/><category term='copyfail'/><category term='utilitycomputing'/><category term='wsc'/><category term='oracle'/><category term='patents'/><category term='copyright'/><category term='android'/><category term='jaxws'/><category term='software'/><category term='fosdem2011'/><category term='cloudcomputing'/><category term='foss'/><category term='copyleft'/><category term='markets'/><category term='capitalism'/><category term='subversion'/><title type='text'>Easy Questions Are Boring</title><subtitle type='html'>- file under "misc".</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default?start-index=101&amp;max-results=100'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>228</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7649844.post-6141781460048382385</id><published>2012-01-26T13:08:00.000+01:00</published><updated>2012-01-26T13:08:44.093+01:00</updated><title type='text'>Information overload or information gluttony? Let's not ignore our own agency.</title><content type='html'>&lt;a href="http://chronicle.com/article/Gluttony-Goes-Viral/130285/"&gt;Gluttony Goes Viral - The Chronicle Review - The Chronicle of Higher Education&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;If you ignore the gratuitous slam at 'hipsters' and other natives to the Internet, it makes a very good point:&lt;br /&gt;&lt;blockquote&gt;"It's the two most incongruous words in that passage that point us  toward Petronius' chief insight into pleasure and abundance:  "accomplished voluptuary." How can anyone be &lt;em&gt;accomplished&lt;/em&gt; at  taking pleasure? Isn't that something anyone can do? Yes, under most  circumstances. But under decadent circumstances, such as Trimalchio's  feast or Nero's court, pleasure becomes cheap. It must, at first, be  exhilarating to find exquisite versions of the things we most want—food,  sleep, sex—right at hand. But then comes the revelation that even with  unlimited means, our capacity to take pleasure is itself limited. The  usual enjoyments become repetitious and dull, until we can barely taste  them at all, or remember how they once tasted. And it's at that point  that Trimalchio and Petronius part ways: One flails to enjoy himself  while the other becomes a scientist of pleasure. Under decadent  circumstances, Petronius devises ever-more-original varie­ties of  hedonism. &lt;p&gt;And there's the key to understanding the often anesthetic effect of  the Internet. Decadence doesn't demand great wealth: Decadence is a  useful way to understand any situation in which an existing pleasure  becomes cheap, and it takes the ingenuity of a Petronius to fight off  the boredom. That is now the case with information—the small burst of  satisfaction that comes from a refilled inbox or a new text, from  connecting with friends, or sharing the meme of the day. Millions of us  are now richer in these pleasures than our parents' generation could  ever imagine. But our capacity for enjoyment is still finite: We've  built up a tolerance to the pleasures of information, just as Trimalchio  built up a tolerance to the pleasures of food. Those who experience our  constant connectivity as dulling should be able to identify closely  with his guests."&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-6141781460048382385?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/6141781460048382385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=6141781460048382385' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/6141781460048382385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/6141781460048382385'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2012/01/information-overload-or-information.html' title='Information overload or information gluttony? Let&apos;s not ignore our own agency.'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-6059443885315801445</id><published>2012-01-26T12:48:00.000+01:00</published><updated>2012-01-26T12:48:27.440+01:00</updated><title type='text'>Europe has, in some ways, reacted no better than America to the threat of terrorism</title><content type='html'>&lt;a href="http://www.hrw.org/world-report-2012/europe-s-own-human-rights-crisis"&gt;Europe’s Own Human Rights Crisis | Human Rights Watch:&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;"To many friends of human rights in Europe, the Arab Spring has been  the most thrilling period since the fall of the Berlin Wall. Judging  from their soaring rhetoric about yearning for freedom among Arab  peoples, European Union leaders share that enthusiasm. Today there is an  opportunity, the optimists proclaim, to have an arc of human  rights-respecting countries around much of the Mediterranean rim.  &lt;p&gt;The reality of human rights policy in Europe itself and toward its  Mediterranean perimeter has been far less edifying. Documents discovered  in Libya by Human Rights Watch in September 2011 evidenced British  complicity in rendition to Libya under Muammar Gaddafi. Italy, which was  willing to send African migrants and asylum seekers back to Libya  during the Gaddafi era to face abuse and worse, moved quickly to sign a  migration cooperation agreement with the transitional authorities there  (although at this writing it has yet to resume forced returns). EU  governments have proved reluctant to help migrants and others fleeing  war-torn Libya. The arrival of thousands of Tunisian migrants in Italy  beginning in January led leading EU governments to question free  movement inside the EU, one of its fundamental pillars.&lt;/p&gt;  &lt;p&gt;Move beyond the fine words and human rights in Europe are in trouble.  A new (or rather a resurgent old) idea is on the march: that the rights  of “problematic” minorities must be set aside for the greater good, and  elected politicians who pursue such policies are acting with democratic  legitimacy."&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-6059443885315801445?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/6059443885315801445/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=6059443885315801445' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/6059443885315801445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/6059443885315801445'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2012/01/europe-has-in-some-ways-reacted-no.html' title='Europe has, in some ways, reacted no better than America to the threat of terrorism'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-92007204293770388</id><published>2012-01-19T15:21:00.000+01:00</published><updated>2012-01-19T17:00:26.868+01:00</updated><title type='text'>The Judeo-Christian origin of modern Human Rights</title><content type='html'>As a result of a very interesting discussion with a friend of mine...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.co.uk/History-Human-Rights-Ancient-Globalization/dp/0520234979"&gt;The History of Human Rights: From Ancient Times to the Globalization Era:&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Quoting from a review:&lt;br /&gt;&lt;blockquote&gt;"Beginning with the controversy of human rights and religion, Ishay  argues that each great religion contains important humanistic elements  which have contributed to our modern conceptions of rights. For example,  in the West, the impact of Judeo-Christian morality and ethics has been  central to the development of human rights. As Ishay notes  Judeo-Christian morality was secularized, separated from politics, and  strengthened in influence by the advent of capitalism and colonialism in  Europe, largely at the expense of other notions of ethics. Because of  the development of capitalism in Europe, Judeo-Christian ethics became  secularized with the progress of the Reformation (16th century) and the  democratic revolutions of the eighteenth century, finally being  transformed into a liberal discourse that dominates our current  conception of human rights. "&lt;/blockquote&gt;&lt;a href="http://www.pewforum.org/Politics-and-Elections/Sources-of-Basic-Human-Rights-Ideas-A-Christian-Perspective.aspx"&gt;Pew Forum: Sources of Basic Human Rights Ideas: A Christian Perspective:&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"The background story of how this definition of human rights came to  enter the official, cross-cultural, international definition of  standards, however, is only now being told. In fresh research, the  British scholar-pastor, Canon John Nurser, has documented in extended  detail the ways in which, from 1939 until 1947, leading Ecumenical  Protestant figures worked not only with key figures in developing the  Bretton Woods agreements, anticipating a post-war need for economic  stability and development, but formed the Commission for a Just and  Durable Peace, the Churches' Commission on International Affairs, and  later the Joint Committee on Religious Liberty, all under the auspices  of the Federal Council of Churches, with close connections to the  emerging World Council of Churches and the International Missionary  Conference. These organizations, notably led by Lutheran O. Frederick  Nolde, Congregationalist Richard Fagley, Baptist M. Searle Bates, and  Presbyterian John A. Mackay, among others, were dedicated to shaping  what they then called a "new world order" that would honor human rights.  They worked closely with Jacob Blaustein and Joseph Proskauer of the  American Jewish Committee and with twelve bishops of the Roman Catholic  Church to encourage the formation of the drafting committees of the  United Nations Charter Committee and the committee that composed the  Universal Declaration on Human Rights and deeply shaped their results.  Further, they worked through their church and synagogue contacts at the  local level to build the popular support for what they were doing. In  fact, the more of this history that is dug out, the clearer it becomes  that they supplied much of the intellectual and ethical substance that  formed these so-called "secular" documents. Such data is if particular  importance, for it helps correct the secularists' slanderous treatment  of religion as the cause of human rights violations."&lt;/blockquote&gt;And later:&lt;br /&gt;&lt;blockquote&gt;"Certainly we cannot say that all of Judaism or of Christianity  has supported human rights; it has been key minority traditions that  have argued their case over long periods of time and become more widely  accepted. Nor can we say that even these traditions have been faithful  to the implications of their own heritage at all times, and the horror  stories of our pasts also have to be told to mitigate any temptation to  triumphalism. Still, intellectual honesty demands recognition of the  fact that what passes as "secular," "western" principles of basic human  rights developed nowhere else than out of key strands of the  biblically-rooted religions. And while many scholars and leaders from  other traditions have endorsed them, and found resources in their own  traditions that point to quite similar principles, today these views are  under suspicion both by some Asian leaders who appeal to Asian Values  and by some communitarian and postmodern philosophers in the West who  have challenged the very idea of human rights."&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-92007204293770388?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/92007204293770388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=92007204293770388' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/92007204293770388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/92007204293770388'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2012/01/judeo-christian-origin-of-concept-of.html' title='The Judeo-Christian origin of modern Human Rights'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-4194527243168984473</id><published>2012-01-13T12:27:00.000+01:00</published><updated>2012-01-13T12:27:58.433+01:00</updated><title type='text'>Humanity writ large reflected in the tools of the day:</title><content type='html'>&lt;a href="http://www.newyorker.com/arts/critics/atlarge/2011/02/14/110214crat_atlarge_gopnik?printable=true"&gt;How the Internet Gets Inside Us : The New Yorker&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;"[...] at any given moment, our most complicated machine will be taken as a  model of human intelligence, and whatever media kids favor will be  identified as the cause of our stupidity. When there were automatic  looms, the mind was like an automatic loom; and, since young people in  the loom period liked novels, it was the cheap novel that was degrading  our minds. When there were telephone exchanges, the mind was like a  telephone exchange, and, in the same period, since the nickelodeon  reigned, moving pictures were making us dumb. When mainframe computers  arrived and television was what kids liked, the mind was like a  mainframe and television was the engine of our idiocy. Some machine is  always showing us Mind; some entertainment derived from the machine is  always showing us Non-Mind."&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-4194527243168984473?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/4194527243168984473/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=4194527243168984473' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/4194527243168984473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/4194527243168984473'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2012/01/humanity-writ-large-reflected-in-tools.html' title='Humanity writ large reflected in the tools of the day:'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-7629677074918472754</id><published>2012-01-13T06:45:00.000+01:00</published><updated>2012-01-13T06:45:58.233+01:00</updated><title type='text'>The difference between the View from Nowhere and stenography increasingly difficult to find :-)</title><content type='html'>&lt;a href="http://www.guardian.co.uk/commentisfree/cifamerica/2012/jan/13/new-york-times-public-editor"&gt;The New York Times public editor's very public utterance | Clay Shirky | Comment is free | guardian.co.uk&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;"Thursday, &lt;a href="http://publiceditor.blogs.nytimes.com/2012/01/12/should-the-times-be-a-truth-vigilante/"&gt;Arthur Brisbane, the public editor of the New York Times, went to his readers with a question&lt;/a&gt;:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;"I'm looking for reader input on whether and when &lt;a href="http://www.guardian.co.uk/media/new-york-times" title="More from guardian.co.uk on New York Times"&gt;New York Times&lt;/a&gt; news reporters should challenge 'facts' that are asserted by newsmakers they write about."&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Brisbane  (who, as public editor, speaks only for himself, not the Times)  referred to two recent stories: the claim that Clarence Thomas had  "misunderstood" a financial reporting form when he left out key  information, and Mitt Romney's assertion that President Obama gives  speeches "apologising" for America. Brisbane asked whether news  reporters should have the freedom to investigate and respond to those  comments.&lt;/p&gt;&lt;p&gt;The reaction from readers was swift, voluminous, negative and incredulous."&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-7629677074918472754?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/7629677074918472754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=7629677074918472754' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/7629677074918472754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/7629677074918472754'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2012/01/difference-between-view-from-nowhere.html' title='The difference between the View from Nowhere and stenography increasingly difficult to find :-)'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-8152376860587505212</id><published>2012-01-09T09:31:00.000+01:00</published><updated>2012-01-09T09:31:28.324+01:00</updated><title type='text'>Indefinite detention without trial: still not a good idea</title><content type='html'>&lt;a href="http://www.nytimes.com/2012/01/08/opinion/sunday/notes-from-a-guantanamo-survivor.html?_r=1&amp;amp;ref=opinion"&gt;Notes From a Guantánamo Survivor - NYTimes.com&lt;/a&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;"I LEFT &lt;a href="http://topics.nytimes.com/top/news/national/usstatesterritoriesandpossessions/guantanamobaynavalbasecuba/index.html?inline=nyt-geo" title="More news and information about Guant namo." class="meta-loc"&gt;Guantánamo Bay&lt;/a&gt;  much as I had arrived almost five years earlier — shackled  hand-to-waist, waist-to-ankles, and ankles to a bolt on the airplane  floor. My ears and eyes were goggled, my head hooded, and even though I  was the only detainee on the flight this time, I was drugged and guarded  by at least 10 soldiers. This time though, my jumpsuit was American  denim rather than Guantánamo orange. I later learned that my C-17  military flight from Guantánamo to Ramstein Air Base in my home country,  Germany, cost more than $1 million.        &lt;/p&gt;&lt;p&gt; When we landed, the American officers unshackled me before they handed  me over to a delegation of German officials. The American officer  offered to re-shackle my wrists with a fresh, plastic pair. But the  commanding German officer strongly refused: “He has committed no crime;  here, he is a free man.”&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;        &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-8152376860587505212?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/8152376860587505212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=8152376860587505212' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/8152376860587505212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/8152376860587505212'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2012/01/indefinite-detention-without-trial.html' title='Indefinite detention without trial: still not a good idea'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-4381909442580669141</id><published>2012-01-06T16:40:00.000+01:00</published><updated>2012-01-06T16:40:45.733+01:00</updated><title type='text'>The illustrated guide to a Ph.D.</title><content type='html'>&lt;a href="http://matt.might.net/articles/phd-school-in-pictures/"&gt;The illustrated guide to a Ph.D:&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;"Every fall, I explain to a fresh batch of Ph.D. students what a Ph.D. is.   &lt;p&gt; It's hard to describe it in words. &lt;/p&gt;  &lt;p&gt; So, I use pictures. &lt;/p&gt;   &lt;p&gt; Read below for the illustrated guide to a Ph.D."&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-4381909442580669141?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/4381909442580669141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=4381909442580669141' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/4381909442580669141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/4381909442580669141'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2012/01/illustrated-guide-to-phd.html' title='The illustrated guide to a Ph.D.'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-1190032987008903976</id><published>2012-01-05T13:28:00.000+01:00</published><updated>2012-01-05T13:28:00.152+01:00</updated><title type='text'>The Internet is a tool. Human Rights are not about tools.</title><content type='html'>&lt;a href="http://www.nytimes.com/2012/01/05/opinion/internet-access-is-not-a-human-right.html?_r=1&amp;amp;hpw"&gt;Internet Access Is Not a Human Right - NYTimes.com:&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;"FROM the streets of Tunis to Tahrir Square and beyond, protests around  the world last year were built on the Internet and the many devices that  interact with it. Though the demonstrations thrived because thousands  of people turned out to participate, they could never have happened as  they did without the ability that the Internet offers to communicate,  organize and publicize everywhere, instantaneously.        &lt;p num="2" key="IinOtp"&gt; It is no surprise, then, that the protests have raised questions about  whether Internet access is or should be a civil or human right. The  issue is particularly acute in countries whose governments clamped down  on Internet access in an attempt to quell the protesters. In June,  citing the uprisings in the Middle East and North Africa, a &lt;a href="http://latimesblogs.latimes.com/technology/2011/06/united-nations-report-internet-access-is-a-human-right.html"&gt;report by the United Nations’ special rapporteur&lt;/a&gt;  went so far as to declare that the Internet had “become an  indispensable tool for realizing a range of human rights.” Over the past  few years, courts and parliaments in countries like France and Estonia  have pronounced Internet access a human right.        &lt;/p&gt;&lt;p num="3" key="BtaTiI"&gt; But that argument, however well meaning, misses a larger point:  technology is an enabler of rights, not a right itself. There is a high  bar for something to be considered a human right. Loosely put, it must  be among the things we as humans need in order to lead healthy,  meaningful lives, like freedom from torture or freedom of conscience. It  is a mistake to place any particular technology in this exalted  category, since over time we will end up valuing the wrong things. For  example, at one time if you didn’t have a horse it was hard to make a  living. But the important right in that case was the right to make a  living, not the right to a horse. Today, if I were granted a right to  have a horse, I’m not sure where I would put it."&lt;/p&gt;&lt;/blockquote&gt;&lt;p num="3" key="BtaTiI"&gt;See the &lt;a href="http://thenewinquiry.com/post/4524405265/what-we-talk-about-when-we-talk-about-the-internet"&gt;other effects of misunderstanding technology&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-1190032987008903976?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/1190032987008903976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=1190032987008903976' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/1190032987008903976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/1190032987008903976'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2012/01/internet-is-tool-human-rights-are-not.html' title='The Internet is a tool. Human Rights are not about tools.'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-6046519606230283101</id><published>2012-01-04T12:12:00.000+01:00</published><updated>2012-01-04T12:12:51.275+01:00</updated><title type='text'>Android is far from open source, both practically and in spirit</title><content type='html'>&lt;a href="http://www.jethrocarr.com/2012/01/04/android-the-free-ish-mobile-platform/"&gt;Android: the free-ish mobile platform | Jethro Carr&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;"Whilst I’m a fan of the platform overall, I’m encountering more and more  issues every day with the fact that Android is being positioned as the  poster child of open source in the mobile space (with other alternatives  like Meego and WebOS way behind in terms of market share and consumer  awareness), yet Android is only partially open source, still relying on  large proprietary chunks."&lt;/blockquote&gt;See also the &lt;a href="http://www.visionmobile.com/research.php#OGI"&gt;Open Governance Index&lt;/a&gt; report.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-6046519606230283101?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/6046519606230283101/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=6046519606230283101' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/6046519606230283101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/6046519606230283101'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2012/01/android-is-far-from-open-source-both.html' title='Android is far from open source, both practically and in spirit'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-3191751287732990083</id><published>2011-12-21T22:52:00.000+01:00</published><updated>2011-12-21T22:52:59.464+01:00</updated><title type='text'>Regardless of your opinion on homosexuality, gender-based stereotyping is entirely cultural and limits our self-expression</title><content type='html'>&lt;a href="http://togetherforjacksoncountykids.tumblr.com/post/14314184651/one-teachers-approach-to-preventing-gender-bullying-in"&gt;One teachers approach to preventing gender bullying in a classroom&lt;/a&gt;&lt;blockquote&gt;&lt;br /&gt;"&lt;strong&gt;&lt;/strong&gt;Gender is not a subject that I would have broached in primary grades a  few years ago. In fact, I remember scoffing with colleagues when we  heard about a young kindergarten teacher who taught gender-related  curriculum. We thought her lessons were a waste of instructional time  and laughed at her “girl and boy” lessons."&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-3191751287732990083?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/3191751287732990083/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=3191751287732990083' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/3191751287732990083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/3191751287732990083'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2011/12/regardless-of-your-opinion-on.html' title='Regardless of your opinion on homosexuality, gender-based stereotyping is entirely cultural and limits our self-expression'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-8327296843822152186</id><published>2011-12-20T19:47:00.000+01:00</published><updated>2011-12-20T19:47:39.180+01:00</updated><title type='text'>Wikileaks is not necessarily the apotheosis of the Cypherpunk movement</title><content type='html'>&lt;a href="http://vinay.howtolivewiki.com/blog/other/i-went-to-the-same-school-as-julian-assange-but-we-learned-different-lessons-2936"&gt;The Bucky-Gandhi Design Institution › I went to the same school as Julian Assange, but we learned different lessons&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;"Not being able to go to The State for help, if the situation I’d been  in escalated to Men With Guns, left me with a clear understanding: I  needed the State’s protection to be a full human being. Now, let me say  that again: I needed the State’s protection to be a full human being. This is the start of my divergence from the classical cyperpunk’s anti-State crypto-anarchist market capitalist stance."&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-8327296843822152186?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/8327296843822152186/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=8327296843822152186' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/8327296843822152186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/8327296843822152186'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2011/12/wikileaks-is-not-necessarily-apotheosis.html' title='Wikileaks is not necessarily the apotheosis of the Cypherpunk movement'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-7481068506149677766</id><published>2011-12-09T11:10:00.000+01:00</published><updated>2011-12-09T11:10:18.885+01:00</updated><title type='text'>Anthropomorphising [parts of] the Internet is intellectually crippling and denies us agency</title><content type='html'>&lt;a href="http://thenewinquiry.com/post/4524405265/what-we-talk-about-when-we-talk-about-the-internet"&gt;The New Inquiry - What We Talk About When We Talk About the Internet:&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;"When I hit a nail with a hammer, I think: witness the power of my will!   But when I google “How do I build a birdhouse?” it appears that I have  asked Google a question and that it has answered. As though Google were a  conscious entity, not the world’s most complex hammer."&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-7481068506149677766?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/7481068506149677766/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=7481068506149677766' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/7481068506149677766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/7481068506149677766'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2011/12/anthropomorphising-parts-of-internet-is.html' title='Anthropomorphising [parts of] the Internet is intellectually crippling and denies us agency'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-2926832137161543498</id><published>2011-12-07T12:25:00.000+01:00</published><updated>2011-12-07T12:25:35.079+01:00</updated><title type='text'>Using a service without paying? If you're not the customer, you're the product...</title><content type='html'>&lt;a href="http://blog.pinboard.in/2011/12/don_t_be_a_free_user/"&gt;Don't Be A Free User:&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;"Were you a big &lt;a href="http://techcrunch.com/2011/12/05/gowalla-acqhire/"&gt;Gowalla&lt;/a&gt; fan?  Did you like &lt;a href="http://en.wikipedia.org/wiki/Dodgeball_%28service%29"&gt;Dodgeball&lt;/a&gt;?  Did you think &lt;a href="http://www.pcmag.com/article2/0,2817,2396138,00.asp"&gt;Trunk.ly&lt;/a&gt; (gasp!) was better than Pinboard? Did you make a lot of contributions to &lt;a href="http://www.zdnet.com/blog/btl/facebook-to-acquire-shut-down-nextstop-site/36541"&gt;Nextstop&lt;/a&gt;?  Do you miss &lt;a href="http://latimesblogs.latimes.com/technology/2011/09/google-shuts-down-aardvark-and-9-other-companies.html"&gt;Aardvark&lt;/a&gt; and &lt;a href="http://brainsik.theory.org/.:./2009/etherpad-to-shut-down-after-google-acquisition"&gt;EtherPad&lt;/a&gt;?  Did "&lt;a href="http://www.htmlist.com/rants/trusting-in-the-cloud-the-fallout-when-web-20-apps-disappear/"&gt;I Want Sandy&lt;/a&gt;" change your life?    &lt;p&gt;These projects are all very different, but the dynamic is the  same.  Someone builds a cool, free product, it gets popular, and that  popularity attracts a buyer.  The new owner shuts the product down and  the founders issue a glowing press release about how excited they are  about synergies going forward.   They are never heard from again."&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-2926832137161543498?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/2926832137161543498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=2926832137161543498' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/2926832137161543498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/2926832137161543498'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2011/12/using-service-without-paying-if-youre.html' title='Using a service without paying? If you&apos;re not the customer, you&apos;re the product...'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-1970115852639941799</id><published>2011-12-07T11:33:00.000+01:00</published><updated>2011-12-07T11:33:46.390+01:00</updated><title type='text'>The art of not drowning: a critique of airline safety cards through the ages :-)</title><content type='html'>&lt;a href="http://www.theparisreview.org/blog/2011/11/28/the-art-of-not-drowning/"&gt;Paris Review – The Unlikely Event, Avi Steinberg&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;"The artist behind a current AeroMexico safety card is not convinced. In an echo of &lt;em&gt;The Son of Man&lt;/em&gt;,  the 1964 painting by Belgian Surrealist René Magritte, the AeroMexico  man is rendered in realistic detail—from rolled up sleeves to tousled  hair—all of which is, however, a set up for the darkly comic punch line:  the man has no face. This bit of surrealistic surgery, more than the  yellow life preserver, is what we remember. It is plain to us that this  creepily inanimate son of man is, in struggling to preserve his life, in  some sense already dead."&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-1970115852639941799?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/1970115852639941799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=1970115852639941799' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/1970115852639941799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/1970115852639941799'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2011/12/art-of-not-drowning-critique-of-airline.html' title='The art of not drowning: a critique of airline safety cards through the ages :-)'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-3301992205475812926</id><published>2011-11-30T12:25:00.000+01:00</published><updated>2011-11-30T12:25:36.054+01:00</updated><title type='text'>The last Steve Jobs link I'll ever share.</title><content type='html'>&lt;a href="http://www.theatlantic.com/business/archive/2011/11/be-a-jerk-the-worst-business-lesson-from-the-steve-jobs-biography/249136/"&gt;Be a Jerk: The Worst Business Lesson from the Steve Jobs Biography - Tom McNichol - Business - The Atlantic&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;"Steve Jobs was a visionary, a brilliant innovator who reshaped entire  industries by the force of his will, a genius at giving consumers not  only what they wanted, but what they didn't yet know they wanted.  &lt;p&gt;He was also a world-class asshole."&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-3301992205475812926?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/3301992205475812926/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=3301992205475812926' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/3301992205475812926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/3301992205475812926'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2011/11/last-steve-jobs-link-ill-ever-share.html' title='The last Steve Jobs link I&apos;ll ever share.'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-8278010797887875054</id><published>2011-11-21T12:48:00.000+01:00</published><updated>2011-11-21T12:48:42.655+01:00</updated><title type='text'>Charlie Brooker | The most dangerous drug isn't meow meow. It isn't even alcohol ... | Comment is free | The Guardian</title><content type='html'>&lt;a href="http://www.guardian.co.uk/commentisfree/2010/mar/22/charlie-brooker-newspapers-dangerous-drug?mobile-redirect=false"&gt;Charlie Brooker | The most dangerous drug isn't meow meow. It isn't even alcohol ... &lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;"It's perhaps the biggest threat to the nation's mental wellbeing, yet  it's freely available on every street – for pennies. The dealers claim  it expands the mind and bolsters the intellect: users experience an  initial rush of emotion (often euphoria or rage), followed by what they  believe is a state of enhanced awareness. Tragically this "awareness" is  a delusion. As they grow increasingly detached from reality, heavy  users often exhibit impaired decision-making abilities,  becoming  paranoid,  agitated and quick to  anger. In extreme cases they've even  been known to form mobs and attack people. Technically it's called "a  newspaper",  although it's better known by one of its many "street  names", such as "The  Currant Bun" or "The Mail" or "The Grauniad" (see  me – Ed).&lt;/p&gt;&lt;p&gt;In its purest form, a newspaper consists of a collection  of facts which, in controlled circumstances, can actively improve  knowledge. Unfortunately, facts are expensive, so to save costs and  drive up sales, unscrupulous dealers often "cut" the basic contents with  cheaper  material, such as wild opinion, bullshit, empty hysteria,  reheated press releases, advertorial  padding and photographs of Lady  Gaga with her bum hanging out. The hapless user has little or no concept  of the  toxicity of the end product: they digest the contents in good  faith, only to pay the price later when they find themselves raging  incoherently in pubs, or – increasingly – on internet messageboards."&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-8278010797887875054?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/8278010797887875054/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=8278010797887875054' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/8278010797887875054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/8278010797887875054'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2011/11/charlie-brooker-most-dangerous-drug.html' title='Charlie Brooker | The most dangerous drug isn&apos;t meow meow. It isn&apos;t even alcohol ... | Comment is free | The Guardian'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-4566275863536027825</id><published>2011-11-16T12:56:00.000+01:00</published><updated>2011-11-16T12:56:15.885+01:00</updated><title type='text'>New Left Review - Dylan Riley: Tony Judt: A Cooler Look</title><content type='html'>&lt;blockquote&gt;"Few Anglophone intellectuals have received such posthumous acclaim as  the Director of the Remarque Institute, leading contributor to the &lt;em&gt;New York Review of Books&lt;/em&gt;,  and late champion of social-democracy. Regularly compared to George  Orwell, if not Isaiah Berlin, does any &lt;a href="http://www.newleftreview.org/?page=article&amp;amp;view=2915"&gt;careful examination of his oeuvre  sustain such panegyrics&lt;/a&gt;?"&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-4566275863536027825?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/4566275863536027825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=4566275863536027825' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/4566275863536027825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/4566275863536027825'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2011/11/new-left-review-dylan-riley-tony-judt.html' title='New Left Review - Dylan Riley: Tony Judt: A Cooler Look'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-8510537703825886849</id><published>2011-11-16T10:06:00.000+01:00</published><updated>2011-11-16T10:06:29.597+01:00</updated><title type='text'>A tale of two concurrency models: comparing Go and Erlang</title><content type='html'>&lt;a href="http://www.informit.com/articles/printerfriendly.aspx?p=1768317"&gt;A very interesting article:&lt;/a&gt;&lt;blockquote&gt;"Out  of all the languages that I never get to program in, Erlang is probably  my favorite. I used it while I was working on my Ph.D., and a few times  in private projects since then, but there's very little consulting work  going for Erlang programmers, so it's rare for me to get to use it. &lt;p&gt;That said, when I started learning Go, Erlang was the first thing  that came to mind. It's also the language mentioned in most common  criticisms of Go that I encounter when I talk about my new &lt;a href="http://www.informit.com/store/product.aspx?isbn=0321817141"&gt;Go Phrasebook&lt;/a&gt;.  A common complaint is that Erlang's concurrency model is much cleaner  than Go's. In this article, I'll look at both and show that it's  possible to express either in terms of the other-neither language is  inherently superior, but both expose different models to the programmer.&lt;/p&gt; &lt;p&gt;One thing that may confuse people with a theoretical computer science background is that Erlang takes some syntax from Hoare's &lt;a href="http://www.usingcsp.com/"&gt;Communicating Sequential Processes&lt;/a&gt;  (CSP) model, but with different semantics, whereas Go takes the  semantics but not the syntax. More confusingly, Erlang's semantics are  fairly close to early versions of CSP, but not to later ones."&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-8510537703825886849?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/8510537703825886849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=8510537703825886849' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/8510537703825886849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/8510537703825886849'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2011/11/tale-of-two-concurrency-models.html' title='A tale of two concurrency models: comparing Go and Erlang'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-1891727316372952237</id><published>2011-11-09T17:01:00.000+01:00</published><updated>2011-11-09T17:01:30.804+01:00</updated><title type='text'>Maciej Ceglowski on the social graph</title><content type='html'>&lt;a href="http://blog.pinboard.in/2011/11/the_social_graph_is_neither/"&gt;The Social Graph is Neither:&lt;/a&gt;&lt;br /&gt;       &lt;p class="blog_entry"&gt;   &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;"I first came across the phrase social graph in 2007, in &lt;a href="http://bradfitz.com/social-graph-problem/"&gt;an essay by Brad Fitzpatrick&lt;/a&gt;, though I'd be curious to know if it goes back further.   &lt;/p&gt;&lt;p&gt;The  idea of representing relationships between people as  networks is old, but this was the first time I had thought about  treating the connections between all living people as one big object  that you could manipulate with a computer.  &lt;/p&gt;&lt;p&gt;At the time he wrote, Fitzpatrick had two points to make.  The  first was that it made no sense for every social website to try and  recreate the same web of relationships, over and over, by making people  send each other follow requests.   The second was that this relationship  data should not be proprietary, but a common resource that rival  services could build on as a foundation.  &lt;/p&gt;&lt;p&gt;Fitzpatrick subsequently went to work for Google, and his Utopian  vision of open standards and open data became subsumed in a rivalry  between Google and Facebook.   Both companies now offer their version of  a social graph API, and Google (which is trying to catch up) has taken  up the banner of open standards and data portability.  &lt;/p&gt;&lt;p&gt;This rivalry has brought the phrase 'social graph' into wider  use.  Last week Forbes even went to the extent of calling the social  graph an &lt;a href="http://www.forbes.com/sites/venkateshrao/2011/10/21/the-social-graph-as-crude-oil-go-ahead-build-that-yasn/"&gt;exploitable resource comprarable to crude oil&lt;/a&gt;,  with riches to those who figure out how to mine it and refine it.  &lt;/p&gt;&lt;p&gt;I think this is a fascinating metaphor.  If the social graph is  crude oil, doesn't that make our friends and colleagues the little  animals that get crushed and buried underground?"&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-1891727316372952237?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/1891727316372952237/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=1891727316372952237' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/1891727316372952237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/1891727316372952237'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2011/11/maciej-ceglowski-on-social-graph.html' title='Maciej Ceglowski on the social graph'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-3249099469658979841</id><published>2011-11-09T14:41:00.000+01:00</published><updated>2011-11-09T14:41:20.440+01:00</updated><title type='text'>The ECB and radical inaction</title><content type='html'>&lt;a href="http://www.project-syndicate.org/commentary/delong119/English"&gt;The ECB’s Battle against Central Banking - J. Bradford DeLong - Project Syndicate&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;"The ECB continues to believe that financial stability is not part of  its core business. As its outgoing president, Jean-Claude Trichet, put  it, the ECB has “only one needle on [its] compass, and that is  inflation.” The ECB’s refusal to be a lender of last resort forced the  creation of a surrogate institution, the European Financial Stability  Facility. But everyone in the financial markets knows that the EFSF has  insufficient firepower to undertake that task – and that it has an  unworkable governance structure to boot.&lt;/p&gt;  &lt;p&gt;Perhaps the most astonishing thing about the ECB’s monochromatic  price-stability mission and utter disregard for financial stability –  much less for the welfare of the workers and businesses that make up the  economy – is its radical departure from the central-banking tradition.  Modern central banking got its start in the collapse of the British  canal boom of the early 1820’s. During the financial crisis and  recession of 1825-1826, a central bank – the Bank of England –  intervened in the interest of financial stability as the irrational  exuberance of the boom turned into the remorseful pessimism of the bust."&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-3249099469658979841?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/3249099469658979841/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=3249099469658979841' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/3249099469658979841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/3249099469658979841'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2011/11/ecb-and-radical-inaction.html' title='The ECB and radical inaction'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-8741672011216628248</id><published>2011-11-06T15:01:00.000+01:00</published><updated>2011-11-06T15:01:23.442+01:00</updated><title type='text'>A good series of posts on bipartisanship, and whether or not it can work:</title><content type='html'>&lt;a href="http://www.huffingtonpost.com/lawrence-lessig/one-more-try-the-rules-ve_b_1036013.html"&gt;Lawrence Lessig: One More Try: The Rules Versus the Game&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;This is the final (as far as I'm aware) installment in a series of articles debating about whether or not the OWS people should be forming common cause with the Tea Party with the shared goal of changing how Washington works. Follow the links at the top to read in chronological order...&lt;br /&gt;&lt;blockquote style="font-style: italic;"&gt;Imagine you're a player with the Chicago Bears. You're on the field, about to begin a game with the Green Bay Packers. Just before kick-off, someone races onto the field screaming: "Guys, please, can't we all just get along? Enough of this fighting. Let's just shake hands and go get a beer."&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-8741672011216628248?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/8741672011216628248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=8741672011216628248' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/8741672011216628248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/8741672011216628248'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2011/11/good-series-of-posts-on-bipartisanship.html' title='A good series of posts on bipartisanship, and whether or not it can work:'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-8256213383691553496</id><published>2011-11-06T14:52:00.000+01:00</published><updated>2011-11-06T15:02:55.732+01:00</updated><title type='text'>A good speech on new ideas and leadership</title><content type='html'>&lt;a href="http://theamericanscholar.org/solitude-and-leadership/"&gt;The American Scholar: Solitude and Leadership - William Deresiewicz&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"&lt;i&gt;I find for myself that my first thought is never my best thought.  My first thought is always someone else's; it's always what I've already  heard about the subject, always the conventional wisdom. It's only by  concentrating, sticking to the question, being patient, letting all the  parts of my mind come into play, that I arrive at an original idea. By  giving my brain a chance to make associations, draw connections, take me  by surprise. And often even that idea doesn't turn out to be very good.  I need time to think about it, too, to make mistakes and recognize  them, to make false starts and correct them, to outlast my impulses, to  defeat my desire to declare the job done and move on to the next thing.&lt;/i&gt;&lt;span style="font-style: italic;"&gt;"&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-8256213383691553496?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/8256213383691553496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=8256213383691553496' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/8256213383691553496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/8256213383691553496'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2011/11/american-scholar-solitude-and.html' title='A good speech on new ideas and leadership'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-6027966713972662404</id><published>2011-11-02T13:08:00.002+01:00</published><updated>2011-11-02T13:10:03.668+01:00</updated><title type='text'>Revolutions on the Internet (Aaron Swartz's Raw Thought)</title><content type='html'>&lt;a href="http://www.aaronsw.com/weblog/internetrev"&gt;Revolutions on the Internet (Aaron Swartz's Raw Thought)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Aaron Swartz makes a good point about approaching the "does the Internet help?" debate from a social science perspective.&lt;br /&gt;&lt;blockquote&gt;"Jon Elster has a four-phase theory of revolutions:  &lt;ol&gt;&lt;li&gt;&lt;p&gt;A hard-core of committed activists get together to do something completely crazy.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;The regime cracks down, attracting people who are sympathetic to the cause to rally to the support of the crazy ones...."&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-6027966713972662404?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/6027966713972662404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=6027966713972662404' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/6027966713972662404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/6027966713972662404'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2011/11/revolutions-on-internet-aaron-swartzs.html' title='Revolutions on the Internet (Aaron Swartz&apos;s Raw Thought)'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-2023259001640535175</id><published>2011-11-02T12:30:00.000+01:00</published><updated>2011-11-02T12:30:28.385+01:00</updated><title type='text'>Evercube: DIY NAS, looks better than one you can buy in a shop...</title><content type='html'>&lt;a href="http://evercu.be/"&gt;Evercube: &lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;"When I came across the   &lt;a href="http://blog.backblaze.com/2009/09/01/petabytes-on-a-budget-how-to-build-cheap-cloud-storage/"&gt;Backblaze storage pod&lt;/a&gt;,   I was immediately intrigued by its clever, no-frills design.   But who really needs 67 terabytes   (&lt;a href="http://blog.backblaze.com/2011/07/20/petabytes-on-a-budget-v2-0revealing-more-secrets/"&gt;or even 135&lt;/a&gt;)   at home?&lt;br /&gt;&lt;p&gt;   I decided to scale their excellent design down for home use, and after a long period of experimentation,   the Evercube was born. &lt;/p&gt;  &lt;p&gt;   The design is &lt;a href="http://en.wikipedia.org/wiki/Open-source_hardware"&gt;open hardware&lt;/a&gt;,   available under a &lt;a href="http://creativecommons.org/licenses/by/3.0/"&gt;Creative Commons Attribution&lt;/a&gt; license.   But for your convenience, I am also offering all components needed to build   the Evercube as an easy to assemble Do-It-Yourself kit."&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-2023259001640535175?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/2023259001640535175/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=2023259001640535175' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/2023259001640535175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/2023259001640535175'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2011/11/evercube-diy-nas-looks-better-than-one.html' title='Evercube: DIY NAS, looks better than one you can buy in a shop...'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-969188397744941092</id><published>2011-11-02T12:03:00.000+01:00</published><updated>2011-11-02T12:06:23.084+01:00</updated><title type='text'>NewsBlur: A Social Feed Reader</title><content type='html'>&lt;a href="http://blog.newsblur.com/post/11956240785/a-social-feed-reader"&gt;The NewsBlur Blog / A Social Feed Reader&lt;/a&gt;: A little guy (who's been coding this up in his spare time &lt;span style="font-style: italic;"&gt;on the train&lt;/span&gt; every day) gets a boost from Google Readers mistakes:&lt;br /&gt;&lt;blockquote&gt;"Recently, my main competitor, Google Reader, announced plans to  decommission the social features of the site and integrate them into  Google+. While Google is busy refocusing on what’s important to them,  many users feel left behind. My goal with NewsBlur is to make a better,  complete experience for reading sites. This includes social features  that make reading a social experience.&lt;br /&gt;Social is a major planned feature. It’s highly prioritized right  after I build two other big ticket items: mobile and search. The mobile  iPhone app is wrapping up and is already at version 1.1 on the App  Store, although I have not publicly launched it because it still needs a  few more features (specifically, training and the river of news) to be  considered feature-complete.&lt;br /&gt;Once that’s out the door, I have to build search to be able to  support social. Search won’t be impossible, since the UI design  decisions are fairly straight-foward, and the backend is a no-brainer in  terms of design. But it’ll take some time to get right, make fast, and  get integrated into the massive database that is quickly accumulating."&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-969188397744941092?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/969188397744941092/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=969188397744941092' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/969188397744941092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/969188397744941092'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2011/11/newsblur-social-feed-reader.html' title='NewsBlur: A Social Feed Reader'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-1009096219366596454</id><published>2011-11-01T09:41:00.000+01:00</published><updated>2011-11-01T09:41:07.440+01:00</updated><title type='text'>St Paul's Cathedral dean resigns over Occupy London protest row - The Guardian</title><content type='html'>&lt;a href="http://www.guardian.co.uk/uk/2011/oct/31/st-pauls-dean-resigns-occupy"&gt;St Paul's Cathedral dean resigns over Occupy London protest row | UK news | The Guardian&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"While Fraser stepped down over a specific objection to force  being used to evict protesters from the 200 or so tents that have been  set up close to the cathedral, Knowles resigned amid a general sense  that the St Paul's hierarchy had dithered. This was particularly the  case over the &lt;a href="http://www.guardian.co.uk/uk/feedarticle/9907621" title=""&gt;week-long closure of the cathedral&lt;/a&gt;, the first since the second world war, because of apparent health and safety issues which were never fully explained.&lt;p&gt;"The past fortnight has been a testing time for the chapter and for me personally," Knowles said in a statement.&lt;/p&gt;&lt;p&gt;"It  has become increasingly clear to me that, as criticism of the cathedral  has mounted in the press, media and in public opinion, my position as  dean of St Paul's was becoming untenable. In order to give the  opportunity for a fresh approach to the complex and vital questions  facing St Paul's, I have thought it best to stand down as dean, to allow  new leadership to be exercised."&lt;/p&gt;&lt;p&gt;Knowles's decision prompted a &lt;a href="http://www.guardian.co.uk/uk/2011/oct/31/graeme-knowles-resignation-archbishop-canterbury" title=""&gt;first intervention in the crisis by the archbishop of Canterbury&lt;/a&gt;,  Rowan Williams, who appeared to tacitly acknowledge that closing the  cathedral was a mistake. He said: "The events of the last couple of  weeks have shown very clearly how decisions made in good faith by good  people under unusual pressure can have utterly unforeseen and unwelcome  consequences."&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-1009096219366596454?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/1009096219366596454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=1009096219366596454' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/1009096219366596454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/1009096219366596454'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2011/11/st-pauls-cathedral-dean-resigns-over.html' title='St Paul&apos;s Cathedral dean resigns over Occupy London protest row - The Guardian'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-556854438145554747</id><published>2011-10-07T20:39:00.005+02:00</published><updated>2011-10-07T22:11:39.660+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='scriptus'/><category scheme='http://www.blogger.com/atom/ns#' term='opensource'/><title type='text'>Announcing Scriptus, my latest side-project!</title><content type='html'>I've been working on this small project in my &lt;span style="font-style: italic;"&gt;very&lt;/span&gt; limited&lt;sup&gt;*&lt;/sup&gt; spare time since Christmas 2010. I published as open source it a couple of weeks ago, and I've been quietly gathering feedback since then.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ianso.github.com/scriptus/"&gt;Scriptus&lt;/a&gt; is a way of programming interactions between people. What's new is that these interactions can be complex and span days, weeks, months or years: elections, chess tournaments and games are all easy to create. The &lt;a href="http://ianso.github.com/scriptus/"&gt;project web-page is here&lt;/a&gt; and &lt;a href="http://ianso.github.com/scriptus/posts.html"&gt;the blog is here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Scriptus programs are written in JavaScript, the world's most easily accessible and widely available programming language. Programs communicate via Twitter, since Twitter and their API is open to all and easy to use. Programs can run for months, years or longer, due to the magic of &lt;a href="http://www.mozilla.org/rhino/"&gt;Rhino&lt;/a&gt;'s serialisable continuations. In addition to that there is a simple UNIX-like process model.&lt;br /&gt;&lt;br /&gt;For more information, check out &lt;a href="https://github.com/ianso/scriptus/tree/master/docs/userguide.md"&gt;the user guide&lt;/a&gt;, &lt;a href="https://github.com/ianso/scriptus/tree/master/docs/api.md"&gt;API documentation,&lt;/a&gt; or &lt;a href="http://ianso.github.com/scriptus/"&gt;the Scriptus project home page&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;My motivation is that I am simply driven to create and write programs. It's part of who I am. &lt;a href="https://plus.google.com/109952344779179567534/posts/PDgVj5TorzS"&gt;Fred Brooks said it better than I ever could and I encourage you to read the whole of this&lt;/a&gt;, but in short, &lt;span style="font-style: italic;"&gt;"Programming then is fun because it gratifies creative longings built deep within us and delights sensibilities we have in common with all..."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Scriptus is meant to let you create programs that interact directly with people without bothering with much of the folderol and &lt;a href="http://en.wiktionary.org/wiki/yak_shaving"&gt;yak-shaving&lt;/a&gt; that you normally have to do when programming. It's designed to give a new approach to the idea of programming; one that thinks long-term and is focused on people.&lt;br /&gt;&lt;br /&gt;I'm interested in your comments and feedback on the project. Many thanks so far to Torrey, Sander, Jean-Michel, Jenya and &lt;a href="http://nathanaeljones.com/"&gt;Nathanael&lt;/a&gt; for feedback and advice, and of course to Bethan for her loving support and encouragement :-) Onwards and upwards!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;(Footnote *: To illustrate just how limited my time is: I have a full-time job and a baby daughter, and since January, I've spent my 20 minute commutes on the tram programming, when I find a seat. Also, when baby is asleep in my lap, I can balance a netbook on my knees. The rocking motion of my arms when I'm typing seems to to be soothing to her :-)&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-556854438145554747?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/556854438145554747/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=556854438145554747' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/556854438145554747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/556854438145554747'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2011/10/announcing-scriptus-my-latest-side.html' title='Announcing Scriptus, my latest side-project!'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-4607117446562364156</id><published>2011-09-20T13:44:00.005+02:00</published><updated>2011-09-20T13:48:04.468+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scriptus'/><category scheme='http://www.blogger.com/atom/ns#' term='markdown'/><category scheme='http://www.blogger.com/atom/ns#' term='sed'/><title type='text'>Primitive automated spell-checking of markdown using sed and ispell</title><content type='html'>(Why yes, this is a niche post!) Right now this is just a shell script, but it could easily be added to the build process so that a typo (or a new word missing from the project words list) would break the build - no more bad documentation!&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;#the below regexps remove&lt;br /&gt;# - basic HTML tabs&lt;br /&gt;# - heading hashes&lt;br /&gt;# - code samples&lt;br /&gt;# - inline code&lt;br /&gt;# - URLs&lt;br /&gt;#from markdown-formatted code, as a prelude to spellchecking&lt;br /&gt;cat docs/*.md |&lt;br /&gt;sed -e 's/&amp;lt;[/]*[a-z]*&amp;gt;/ /g' \&lt;br /&gt;    -e 's/^[#]*//' \&lt;br /&gt;    -e '/```/,/```/ s/.*//' \&lt;br /&gt;    -e 's/`.*`//' \&lt;br /&gt;    -e 's/\[\([^]]*\)\]([^)]*)/\1/g' \&lt;br /&gt;      | ispell -p misc/words.list -l | less&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-4607117446562364156?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/4607117446562364156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=4607117446562364156' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/4607117446562364156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/4607117446562364156'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2011/09/primitive-automated-spell-checking-of.html' title='Primitive automated spell-checking of markdown using sed and ispell'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-6188837250521019820</id><published>2011-02-06T15:05:00.000+01:00</published><updated>2011-02-06T15:05:00.940+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mesh'/><category scheme='http://www.blogger.com/atom/ns#' term='fsf'/><category scheme='http://www.blogger.com/atom/ns#' term='gpl'/><category scheme='http://www.blogger.com/atom/ns#' term='fosdem2011'/><category scheme='http://www.blogger.com/atom/ns#' term='freedom'/><title type='text'>Eben Moglen's talk at FOSDEM '11</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Eben_Moglen"&gt;Eben Moglen&lt;/a&gt; of the Software Freedom Law Center and at the Free Software Foundation gave the first keynote of Fosdem 2011&lt;br /&gt;&lt;br /&gt;The talk centered around  freedom in the literal sense, as opposed to the 'freedom 0' sense of the GPL. To paraphrase, what coal &amp;amp; steel was to 20th century  politics, electricity and software is to the 21st century.&lt;br /&gt;&lt;br /&gt;Using WikiLeaks, Tunisia &amp;amp; Egypt as examples, he made the point that centralisation of social utilities such as Facebook &amp;amp; Twitter are not a good thing for civic society, firstly because they introduce a single point of failure, and secondly because the interest of those companies - profit - is not aligned with the interests of the protesters, i.e. the promotion of liberty and disruption of the (often profitable) status quo. Eben made the point that 'we' as the free software community are behind the curve in meeting the need of citizens engaged in this kind of activism.&lt;br /&gt;&lt;br /&gt;He then made a short diversion into Eisenhower's warning against the U.S. military industrial complex, which he said had evolved into a 'surveillance military industrial complex'. He referenced the contempt shown to the rule of law during the Bush years, and the expansion of Bush policies on rendition etc. under Obama.&lt;br /&gt;&lt;br /&gt;At roughly this point he announced what he called the "Freedom box" initiative (/foundation) whose goal was to produce a 'plug' form-factor PC that could act as a node in a wireless mesh network and provide routing / connectivity, maybe function as a base station and potentially offer other services too. Enough of these, made cheaply and distributed relatively densely in modern cities, could act as a relatively robust WAN in times of peace, and as an information back-bone free from kill switches when such a thing becomes necessary.&lt;br /&gt;&lt;br /&gt;During the talk I had the good luck to be sat next to &lt;a href="http://www.pps.jussieu.fr/%7Ejch/"&gt;Juliusz Chroboczek&lt;/a&gt;, an adjunct professor working at a Paris university on, among other things, mesh networking, as you can see from &lt;a href="http://www.pps.jussieu.fr/%7Ejch/research/"&gt;his research page&lt;/a&gt;. Eben's promotion of meshes also reminded me very strongly of the now-vanished WikiWikWAN project, the sole trace of which seems to be &lt;a href="http://www.codecon.info/2002/program.html#wikiwikiwan"&gt;it's CodeCon 2002 listing&lt;/a&gt;. The &lt;a href="http://fosdem.org/2011/schedule/event/village_telco"&gt;lightning talk on open source  telecoms&lt;/a&gt; by Donatus Onwunumah seems to be highly relevant too.&lt;br /&gt;&lt;br /&gt;I had to leave right after the talk, so I didn't get to engage in the many follow-up conversations that no doubt ensued, but I'm interested to see him throwing his weight in a new direction - and I look forward to seeing how this develops.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-6188837250521019820?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/6188837250521019820/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=6188837250521019820' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/6188837250521019820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/6188837250521019820'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2011/02/eben-moglens-talk-at-fosdem-11.html' title='Eben Moglen&apos;s talk at FOSDEM &apos;11'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-9066825566487911762</id><published>2011-02-06T04:25:00.001+01:00</published><updated>2011-02-06T16:27:35.332+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='collapse'/><category scheme='http://www.blogger.com/atom/ns#' term='society'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='capitalism'/><category scheme='http://www.blogger.com/atom/ns#' term='markets'/><title type='text'>The market can eat itself, and us.</title><content type='html'>&lt;blockquote&gt;"Security can be viewed as a tax on the honest, and [the theft of iron manhole covers, lead roofing and aluminium guard rails] demonstrate that our taxes are going up. And unlike many taxes,  we don't benefit from their collection. The cost to society of  retrofitting manhole covers with locks, or replacing them with less  re­salable alternatives, is high; but there is no benefit other than  reducing theft.&lt;br /&gt;&lt;br /&gt;"These crimes are a harbinger of the future: evolutionary pressure on our  society, if you will. Criminals are often referred to as social  parasites, but they are an early warning system of societal changes.  Unfettered by laws or moral restrictions, they can be the first to  respond to changes that the rest of society will be slower to pick up  on."&lt;br /&gt;&lt;/blockquote&gt;&lt;div style="text-align: right;"&gt;&lt;div style="text-align: left;"&gt;- &lt;a href="http://www.schneier.com/"&gt;Bruce Schneier&lt;/a&gt;, from the essay &lt;a href="http://www.schneier.com/essay-266.html"&gt;"An Enterprising Criminal Has Spotted a Gap in the Market"&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;The financial crisis of 2008 should have illustrated, to all but the  most die-hard, ignorant or &lt;a href="http://www.google.com/search?client=ubuntu&amp;amp;channel=fs&amp;amp;q=%E2%80%9CIt+is+difficult+to+get+a+man+to+understand+something%2C+when+his+salary+depends+upon+his+not+understanding+it.%E2%80%9D&amp;amp;ie=utf-8&amp;amp;oe=utf-8"&gt;Sinclairized&lt;/a&gt;, that 'the market' is by no  means a panacea for our ills. It is not some modernist god worth  worshiping for its wealth creation abilities. Nor should the forces it  creates in society be exempt from judgment by virtue of their origin.&lt;br /&gt;&lt;br /&gt;The  above quote illustrates this neatly: Schneier discusses a situation  where market forces incentivise the cannibalising of the very  infrastructure on which society and functioning markets depend.&lt;br /&gt;&lt;br /&gt;Cross-reference this with '&lt;a href="http://www.amazon.com/Collapse-Complex-Societies-Studies-Archaeology/dp/052138673X"&gt;The collapse of complex societies&lt;/a&gt;', by Joseph Tainter, which investigates why societies fail. To illustrate what is meant by 'collapse', here he quotes an eyewitness account of the collapse of the Turkish government:&lt;br /&gt;&lt;blockquote&gt;"...the Allied troops... found a city that was dead. The Turkish government had just ceased to function. The electrical supply had failed and was intermittent. Tramways did not work and abandoned trams littered the roads. There was no railway service, no street cleaning and a police force which had largely become bandit, living on blackmail from citizens in lieu of pay. Corpses lay at street corners and in side lanes, dead horses lay everywhere, with no organization to remove them. Drains did not work and water was unsafe. &lt;span&gt;All this was the result of only about three weeks' abandonment by the civil authorities of their duties."&lt;/span&gt;&lt;/blockquote&gt;And from his summary, a succinct explanation of the core thrust of the book:&lt;br /&gt;&lt;blockquote&gt;"Four concepts lead to understanding collapse, the first three of which are the underpinnings of the fourth. These are:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;human societies are problem-solving organizations;&lt;/li&gt;&lt;li&gt;sociopolitical systems require energy for their maintenance;&lt;/li&gt;&lt;li&gt;increased complexity carries with it increased costs per capita; and&lt;/li&gt;&lt;li&gt;investment in sociopolitical complexity as a problem-solving response often reaches a point of declining marginal returns.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;"This process has been illustrated [in previous chapters of the book] for recent history in such areas as agriculture and resource production; information processing, sociopolitical control and specialization, and overall economic productivity."&lt;/blockquote&gt;We started with an example of an expensive investment to guard against a generally improbable crime,  itself only occasionally worth committing during commodity shocks, and costing far  more to society than it makes in profit to the criminal.&lt;br /&gt;&lt;br /&gt;In the reference frame of point 4 of the above quote, this kind of investment is very far past the point of declining marginal returns, almost absurdly so - the marginal return is most definitely negative.&lt;br /&gt;&lt;br /&gt;If society collapses around us, the market will make things worse, not better. 'Market forces' will strip buildings of pipes and copper wires, homes of their roofing and the vast majority of citizens, defenseless, of their possessions and dignity. This too is the market - Moloch as Ginsberg imagined it. Nothing worth venerating there, nothing at all.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-9066825566487911762?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/9066825566487911762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=9066825566487911762' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/9066825566487911762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/9066825566487911762'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2011/02/market-can-eat-itself-and-us.html' title='The market can eat itself, and us.'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-8032934482641226480</id><published>2011-01-30T00:03:00.003+01:00</published><updated>2011-01-30T00:37:24.537+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Bleary-eyed first impressions off the Android development kit (ADK)</title><content type='html'>&lt;ul&gt;&lt;li&gt;I wouldn't even be doing this if the iPhone SDK wasn't Mac-only.&lt;/li&gt;&lt;li&gt;Installing the ADK necessitated a good deal of &lt;a href="http://en.wiktionary.org/wiki/yak_shaving"&gt;yak shaving&lt;/a&gt; to get the latest version of Linux, due to library conflicts.&lt;/li&gt;&lt;li&gt;All those people complaining about the slow emulator - they're right. But try launching it on an eeePC 901 and weep... it is &lt;span style="font-style: italic;"&gt;glacial :-)&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The Eclipse tools were really nice and easy to set up.&lt;/li&gt;&lt;li&gt;Once everything is up and running, it looks &lt;span style="font-style: italic;"&gt;real&lt;/span&gt; easy to develop with.&lt;/li&gt;&lt;li&gt;My next step is to try testing C2DM.&lt;/li&gt;&lt;li&gt;Every question I've had so far has been answered by Googling and finding a Stack Overflow page.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-8032934482641226480?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/8032934482641226480/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=8032934482641226480' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/8032934482641226480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/8032934482641226480'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2011/01/bleary-eyed-first-impressions-off.html' title='Bleary-eyed first impressions off the Android development kit (ADK)'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-7287582193450384975</id><published>2010-12-13T22:14:00.005+01:00</published><updated>2010-12-13T22:24:42.139+01:00</updated><title type='text'>Idea: scripting for the rest of us.</title><content type='html'>&lt;a href="http://wiki.apache.org/cocoon/RhinoWithContinuations"&gt;Rhino has had continuations for a long time now.&lt;/a&gt; JavaScript is the language of the web. However, long-running executions are generally only discussed in the context of business processes, whereas in fact anything can be a long-running process.&lt;br /&gt;&lt;br /&gt;For example, against an API for a hypothetical group todo list/document review tool (getActions, followupActions, review, distribute), a regular committee or meeting can be run like this:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;var minutes;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;while( ! disbanded) {&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-family:courier new;"&gt;var oldActions = followupActions(minutes == null ? null : minutes.actions);&lt;br /&gt;&lt;/span&gt;     &lt;span style="font-family:courier new;"&gt;var newActions = getActions(participants);&lt;br /&gt;&lt;/span&gt;     &lt;span style="font-family:courier new;"&gt;minutes = {actions: newActions.join(oldActions)};&lt;br /&gt;&lt;/span&gt;     &lt;span style="font-family:courier new;"&gt;var accepted = false&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;;&lt;br /&gt;  do {&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;     &lt;br /&gt;      accepted = review(minutes);&lt;br /&gt;&lt;/span&gt;   &lt;span style="font-family:courier new;"&gt;} while( ! accepted);&lt;br /&gt;&lt;/span&gt;   &lt;span style="font-family:courier new;"&gt; distribute(minutes);&lt;br /&gt;&lt;/span&gt;   &lt;span style="font-family:courier new;"&gt; sleep(1*month);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;}&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;This could be for a school board, church council, or whatever. Also, you can use this format to (e.g.) organise rotas, timetables, casual chess tournaments, games of hide-and-seek or anything else.&lt;br /&gt;&lt;br /&gt;In practise the API would be far more general than the one posited above, and the four methods above would themselves be functions.&lt;br /&gt;&lt;br /&gt;I think that you could use this mechanism to do games, interesting projects or social activities with the Facebook API, for example. You could publish scripts, and scripts of scripts or libraries of functions, oh my! All kinds of interesting things. Anyway, I made some mockups of a potential iPhone application using &lt;a href="http://iphonemockup.lkmc.ch/"&gt;this tool&lt;/a&gt; since it's probably the closest I'll ever get to actually building something like this. This is what would happen when you load a script (the user is responding to an invitation and has just clicked on "view source" to see what s/he is being invited to participate in):&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_c5NOPtXWOS0/TQaNnP0IOEI/AAAAAAAAAF4/A7hjMs9pGgo/s1600/scr1.JPG"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 258px; height: 400px;" src="http://1.bp.blogspot.com/_c5NOPtXWOS0/TQaNnP0IOEI/AAAAAAAAAF4/A7hjMs9pGgo/s400/scr1.JPG" alt="" id="BLOGGER_PHOTO_ID_5550279296180303938" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;And this is what happens when running a script (likewise the user has clicked/expanded "you are here"):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_c5NOPtXWOS0/TQaOHOssEFI/AAAAAAAAAGA/BiIvX7PGBGs/s1600/scr2.JPG"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 326px; height: 400px;" src="http://1.bp.blogspot.com/_c5NOPtXWOS0/TQaOHOssEFI/AAAAAAAAAGA/BiIvX7PGBGs/s400/scr2.JPG" alt="" id="BLOGGER_PHOTO_ID_5550279845636477010" border="0" /&gt;&lt;/a&gt;Would be interesting, no?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-7287582193450384975?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/7287582193450384975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=7287582193450384975' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/7287582193450384975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/7287582193450384975'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2010/12/idea-scripting-for-rest-of-us.html' title='Idea: scripting for the rest of us.'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_c5NOPtXWOS0/TQaNnP0IOEI/AAAAAAAAAF4/A7hjMs9pGgo/s72-c/scr1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-509505921065406085</id><published>2010-12-11T21:36:00.004+01:00</published><updated>2010-12-11T21:52:27.726+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='p2p'/><category scheme='http://www.blogger.com/atom/ns#' term='ec2'/><category scheme='http://www.blogger.com/atom/ns#' term='wikileaks'/><title type='text'>Idea: decentralised P2P website mirroring</title><content type='html'>The recent case of Wikileaks being booted off AWS provoked the following thought: if lots of people started mirroring wikileaks on EC2, Amazon would be forced into playing whack-a-mole to stop it. Game over: the revolt of a user-base, the inevitable collateral damage, etc. leads to bad PR and (hopefully) reform and vertebrates. Amazon's nice GUI combined with their &lt;a href="http://aws.amazon.com/free/"&gt;introductory offer &lt;/a&gt;making a micro instance basically free for a year, means that putting up a how-to page/YouTube video showing every college kid with a credit card how to do it can't be too difficult.&lt;br /&gt;&lt;br /&gt;My question is, what next? How to you turn a swarm of small, transient mirrors into something findable and load-balanced to deal with the (potentially) huge demand of serving Wikileaks traffic?&lt;br /&gt;&lt;br /&gt;Therein lies an interesting problem. First and foremost the question of how you resolve a stable domain to one of a set of highly dynamic addresses is a difficult one. Round-robin DNS load-balancing with a very short TTL is one obvious approach, but this begs the question of how one boot-straps and then maintains the CNAME record containing the list of mirrors. The stable domain could be a CNAME to DNS servers that are themselves part of the mirroring swarm, if each node acted as both a DNS and an HTTP server. Each node would return a randomised list of the nodes in it's topological neighborhood.&lt;br /&gt;&lt;br /&gt;Apart from that, I'm not much further along in my thinking. &lt;a href="http://posadis.sourceforge.net/"&gt;Posadis&lt;/a&gt; could be used to implement a simple DNS server - &lt;a href="http://posadis.sourceforge.net/docs/poslib-1.0.6/server.html"&gt;the sample code&lt;/a&gt; can practically be copy-pasted by anyone who knows a bit of C++. The P2P network should be easy to do - any DHT should be usable, provided it has an API call to get the list of nodes, since the goal is not really to store information but just to maintain a single cluster of machines that know about each other. But the boot-strapping problem remains.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-509505921065406085?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/509505921065406085/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=509505921065406085' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/509505921065406085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/509505921065406085'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2010/12/idea-decentralised-p2p-website.html' title='Idea: decentralised P2P website mirroring'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-6945949691550042036</id><published>2010-12-08T20:46:00.007+01:00</published><updated>2010-12-11T21:52:57.368+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ec2'/><category scheme='http://www.blogger.com/atom/ns#' term='aws'/><category scheme='http://www.blogger.com/atom/ns#' term='wikileaks'/><category scheme='http://www.blogger.com/atom/ns#' term='freedom'/><title type='text'>Thoughts on WikiLeaks</title><content type='html'>&lt;ol&gt;&lt;li&gt;We should be more outraged at the malfeasance revealed than at the manner in which we learnt of it. That we aren't, speaks to our cynicism and the low-to-nonexistent standards to which we hold government.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blog.easydns.org/2010/12/03/wikileaks-takedown-fiasco-underscores-pathetic-state-of-internet-journalism/"&gt;It was EveryDNS, not EasyDNS.&lt;br /&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Much as I love Amazon AWS (see many, many previous posts), &lt;a href="http://aws.amazon.com/message/65348/"&gt;their justification for booting out WL&lt;/a&gt; is disappointing, because (a) the cause (Lieberman's call) and effect is there for all to see, and (b) they didn't boot WL off because of the Iraq or Afghanistan war logs, which were also violations of the TOS, six months ago. Besides which, they have a business interest in a robust first amendment - &lt;span style="font-style: italic;"&gt;they sell books, including dangerous and subversive ones containing state secrets!&lt;/span&gt; This isn't hard people!&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;As &lt;a href="http://www.tbray.org/ongoing/When/201x/2010/12/05/Wikileaks"&gt;Tim Bray said&lt;/a&gt;, the spinelessness of the IT industry in general is depressing when one considers that we should have "freedom of speech" in our DNA.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The following ideas are &lt;span style="font-style: italic;"&gt;not contradictory:&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ul&gt;&lt;li&gt;Cablegate is not necessarily a good thing&lt;/li&gt;&lt;li&gt;The way in which various governments and their officials have responded to it is an attack on the freedom of information and on the free press.&lt;/li&gt;&lt;li&gt;Julian Assange can be (a) a scumbag rapist, (b) justifiably paranoid, (c) a raging egotist and (d) doing really important work, &lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;all at the same time.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;Good thinkers on the subject include &lt;a href="http://www.shirky.com/weblog/2010/12/wikileaks-and-the-long-haul/"&gt;Clay Shirky&lt;/a&gt; and &lt;a href="http://www.salon.com/news/opinion/glenn_greenwald/index.html"&gt;Glenn Greenwald&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-6945949691550042036?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/6945949691550042036/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=6945949691550042036' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/6945949691550042036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/6945949691550042036'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2010/12/thoughts-on-wikileaks.html' title='Thoughts on WikiLeaks'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-5815686414196725667</id><published>2010-11-25T21:20:00.004+01:00</published><updated>2010-11-25T21:30:31.834+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='war'/><title type='text'>'War Is a Force That Gives Us Meaning' by Chris Hedges</title><content type='html'>This book is about war, but not about guns or tanks or tactics or strategy. It laments the nature of war, which is murder. It describes the effect of war, the moral and physical destruction and degradation of the victims caught up in it - the soldiers, civilians, and witnesses such as the author. It is an eloquent, upsetting and disturbing book. Although it seems to have been written out of a deep sense of despair  with humanity, it does in the final chapter sound a solitary note of  hope - in our capacity for love, and for love to triumph over hate.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-5815686414196725667?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/5815686414196725667/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=5815686414196725667' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/5815686414196725667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/5815686414196725667'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2010/11/war-is-force-that-gives-us-meaning-by.html' title='&apos;War Is a Force That Gives Us Meaning&apos; by Chris Hedges'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-6558267154499214313</id><published>2010-11-17T19:24:00.002+01:00</published><updated>2010-11-17T19:27:52.851+01:00</updated><title type='text'>Mobile telcos need to evolve.</title><content type='html'>It's commonly understood that mobile network operators are afraid being turned into dumb pipes. I think that they should reject this fear and embrace their fate, and furthermore, that the first network to do this would get the jump on the competition and clean up. How?&lt;p&gt;Firstly, networks should become completely device-agnostic. Phones and their financing should be separated from the networks. Long-term contracts and the financing deals on phones basically function as an installment scheme for the phone itself, so unbundle this from the contract. The retail outlets could then sell unlocked phones for any network. In some countries (e.g. USA) this may cause headaches for your competitors, but that's partly the point.&lt;/p&gt;&lt;p&gt;Secondly, charge customers for what they use. Charge per kilobyte. Make as little distinction as possible between voice, GPRS, SMS, or MMS traffic. Pass on charges from traffic to other mobile operators directly, and itemize the charges separately on the statements.&lt;/p&gt;&lt;p&gt;In doing this, the operator transforms into a bulk supplier of bandwidth as a commodity.&lt;/p&gt;&lt;p&gt;An operator could do the sums as follows: the operating costs of the network, plus payments for infrastructure, plus needed funds for planned expansion, gives a monthly figure.&lt;/p&gt;&lt;p&gt;My completely uninformed bet is that this figure, divided by the total kilobytes per user per month, plus a 50% margin would still be much, much lower than the current call rates for most mobile users. By pulling the floor out of the mobile market, customers would migrate in droves.&lt;/p&gt;&lt;p&gt;Doing this would also trigger the mother of all price wars. However, as the first to adopt the model, the operator gets the jump on the competition and should, adequately managed, remain a couple of iterations ahead of the rest.&lt;/p&gt;&lt;p&gt;The benefit in doing this is not just to the company that grabs market share, but to society in general. Mobile devices no longer need to be phones but could also be AR, telemetry, or whatever. Device manufacturers and developers should be able to roll out new products and services as easily as they can on the Internet, and the mobile network would become the infrastructural foundation for the next evolutionary step in the information revolution, a leap in the level of interconnectedness, and the fabled "Internet of things". But first they need to get out of the way of their own business model.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-6558267154499214313?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/6558267154499214313/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=6558267154499214313' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/6558267154499214313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/6558267154499214313'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2010/11/mobile-telcos-need-to-evolve.html' title='Mobile telcos need to evolve.'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-38339483916727905</id><published>2010-06-05T20:52:00.001+02:00</published><updated>2010-06-05T20:52:59.450+02:00</updated><title type='text'>On synthetic genomics aka 'artificial life', and dire predictions.</title><content type='html'>By now most people have read about '&lt;a href="http://news.bbc.co.uk/2/hi/science_and_environment/10132762.stm"&gt;Artificial Life&lt;/a&gt;', i.e. the transplant of a DNA sequence manufactured based on a digital blueprint into a yeast cell, which then reproduces as a yeast cell was, therefore qualifying as a life-form whose DNA was essentially programmed into it in its entirety by humans. The DNA was that of a different breed of yeast cell, plus markers. The paper, '&lt;a href="http://www.sciencemag.org/cgi/rapidpdf/science.1190719v1.pdf"&gt;Creation of a Bacterial Cell Controlled by a Chemically Synthesized Genome&lt;/a&gt;[PDF]', was published in the journal &lt;a href="http://sciencemag.org/"&gt;Science&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Several interesting links on the subject: firstly, this: &lt;a href="http://www.quinnnorton.com/said/?p=376"&gt;'Age of Excessions Interlude: Biology, or the Drugs Win the Drug War&lt;/a&gt;', offers a useful perspective on how to view the advance, and its potential (non-legal) uses. Personally I think that if this tech becomes user-friendly enough to end the War on Some Drugs, many many other life-changing things will result besides that may make the WoSD and its fate a foot-note in our long-term history, assuming we get that far.&lt;br /&gt;&lt;br /&gt;You may wonder at whether drug addicts would successfully replicate procedures created at great expense in a dedicated institute funded to the tune of millions. Well, &lt;a href="http://www.synthesis.cc/2010/03/garage-biology-in-silicon-valley.html"&gt;this post on garage biotech in Silicon Valley&lt;/a&gt; is an interesting read for its insight into the possibilities of small-scale laboratories. In addition to this, it's worth pointing out that one of the biggest challenges faced by the Venter Institute was creating complete and error-free strands of DNA. Short sequences of DNA can be mail-ordered today. For example, &lt;a href="http://www.ncbi.nlm.nih.gov/pubmed/12114528"&gt;in 2002 scientists mail-ordered the DNA (transcoded RNA) of the poliovirus&lt;/a&gt;. Back then it took two years to assemble approximately 8kb of RNA. However, &lt;a href="http://www.bio-era.net/reports/genome.html"&gt;prices for sequencing and synthesizing DNA have dropped exponentially&lt;/a&gt;, following a trend similar to Moore's law.&lt;br /&gt;&lt;br /&gt;Also worth bringing up again in this context is '&lt;a href="http://www.wired.com/wired/archive/8.04/joy.html"&gt;Why the future doesn't need us&lt;/a&gt;', a seminal essay by Bill Joy, formerly of Sun Microsystems, examining whether or not humanity's unstoppable and exponentially increasing empowerment of individuals with information will eventually lead to catastrophe.&lt;br /&gt;&lt;br /&gt;(Ironically, if his insights are correct, and 'info-weapons' some day enable WMD on a scale heretofore unseen, then I speculate that working 'DRM' applied to such weaponisable information could form part of a system that would stand between us and disaster.)&lt;br /&gt;&lt;br /&gt;I was discussing this last Sunday with Bethan when I was reminded of something &lt;a href="http://bradhicks.livejournal.com/434673.html"&gt;Brad Hicks wrote&lt;/a&gt; on the similar subject of economic bubbles:&lt;br /&gt;&lt;blockquote&gt;The single most reliable way to predict a bubble is when the business  press, passing along what mainstream economists are telling them, say  that the reason you can believe that we're not in a bubble is that "new  fundamentals are emerging," or in other words, "the old rules don't  apply any more because (fill in the blank)."&lt;/blockquote&gt;He has a point. Likewise, if you ask someone why humanity should be considered more responsible now than (say) &lt;a href="http://en.wikipedia.org/wiki/Holocaust"&gt;seventy&lt;/a&gt; years ago, the answer that "things are different now" is a sign that we've learnt nothing. Human nature does have some depressing constants just as it has uplifting ones, and misplaced confidence and lack of humility are some of the former.&lt;br /&gt;&lt;br /&gt;The story of technology and hubris is one that can be found engrained in western culture. Fired brick is one of humanitys earliest technological advances, and had a transformative impact on society: moving away from stone as a construction material freed early cities from dependency on local quarries and permitted a higher rate of settlement expansion.&lt;br /&gt;&lt;br /&gt;With this in mind, the other thing I heard three weeks ago was a talk on &lt;a href="http://www.biblegateway.com/passage/?search=Genesis%2011:1-9&amp;amp;version=NIV"&gt;the story of the Tower of Babel&lt;/a&gt;. Make of this what you will.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-38339483916727905?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/38339483916727905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=38339483916727905' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/38339483916727905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/38339483916727905'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2010/06/on-synthetic-genomics-aka-artificial.html' title='On synthetic genomics aka &apos;artificial life&apos;, and dire predictions.'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-3201088602915236788</id><published>2010-05-19T09:57:00.005+02:00</published><updated>2010-05-20T12:25:08.174+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='utilitycomputing'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='ec2'/><category scheme='http://www.blogger.com/atom/ns#' term='cloudcomputing'/><category scheme='http://www.blogger.com/atom/ns#' term='commoditisation'/><title type='text'>Jevons paradox, Moore's law and utility computing</title><content type='html'>&lt;span style="font-weight: bold; font-style: italic;"&gt;TL;DR:&lt;/span&gt;&lt;span style="font-style: italic;"&gt; A quirk of economics may explain why computers have always seemed too slow, and could indicate that a utility computing boom will take place in the near future.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;First: &lt;a href="http://en.wikipedia.org/wiki/Jevons_paradox"&gt;Jevons paradox&lt;/a&gt;...&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;...is defined as follows on Wikipedia:&lt;br /&gt;&lt;blockquote&gt;The proposition that technological progress that increases the efficiency with which a resource is used, tends to increase (rather than decrease) the rate of consumption of that resource.&lt;br /&gt;&lt;/blockquote&gt;This was first observed by Jevons himself with coal:&lt;br /&gt;&lt;blockquote&gt;Watt's innovations made coal a more cost effective power source, leading to the increased use of the steam engine in a wide range of industries. This in turn increased total coal consumption, even as the amount of coal required for any particular application fell.&lt;br /&gt;&lt;/blockquote&gt;I think that we're experiencing this effect with CPU time and storage. Specifically, if we recast Moore's law in terms of increased efficiency of CPU instruction processing per dollar, then Jevons paradox explains why software generally never seems to get any faster, and why we always seem to be running out of storage space.&lt;br /&gt;&lt;br /&gt;This is backed up by anecdotal evidence and folk knowledge. Consider generally accepted adages such as &lt;a href="http://en.wikipedia.org/wiki/Wirth%27s_law"&gt;Wirth's law&lt;/a&gt;, "Software is getting slower more rapidly than hardware becomes faster", or the variations of &lt;a href="http://en.wikipedia.org/wiki/Parkinson%27s_Law"&gt;Parkinsons law&lt;/a&gt;, such as "Data expands to fill the space available for storage", and Nathan Myhrvold's &lt;a href="http://www.codinghorror.com/blog/2006/09/software-its-a-gas.html"&gt;'first law of software'&lt;/a&gt;, to paraphrase: "Software is a gas: it always expands to fit whatever container it is stored in."&lt;br /&gt;&lt;br /&gt;To provide more empirical proof, one would have to be able to take a survey of data like "historical average time taken by a user to perform common operation X", or "average % disk space free since 1990 on home/office PCs". I'd be interested in any links to studies similar to this, if anyone has any examples.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Second: the commoditisation of CPU time and storage&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Generally, clients do not seem to be getting 'thicker', or pushing boundaries in terms of CPU power and storage. Mean-while, many companies are spending a lot of money on new datacenters, and the concept of "Big Data" is gaining ground. Server-side, we've moved to multi-core and we're learning more about running large clusters of cheap hardware.&lt;br /&gt;&lt;br /&gt;Right now we're at the inflection point in a movement towards large datacenters that use economies of scale and good engineering to attain high efficiencies. When this infrastructure is exposed at a low level, its use is metered in ways similar to other utilities such as electricity and water. EC2 is the canonical example.&lt;br /&gt;&lt;br /&gt;I believe that CPU time and storage will eventually become a true commodity, traded on open markets, like coal, oil, or in some regions of the world, electricity. The barriers to this happening today are many: lack of standard APIs and bandwidth- or network-related lock-in are two worth mentioning. However, you can see foreshadowing of this in Amazon's &lt;a href="http://www.spothistory.com/"&gt;spot instances&lt;/a&gt; feature, which uses a model close to how real commodities are priced. (Aside: &lt;a href="http://blogs.sun.com/jonathan/entry/looking_back_on_commodities"&gt;Jonathan Schwartz was posting about this&lt;/a&gt; &lt;a href="http://blogs.sun.com/jonathan/entry/the_network_is_the_computer"&gt;back in 2005&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;In an open market, building a 'compute power station' becomes an investment whose return on capital would be linked to the price of CPU time &amp;amp; storage in that market. The laws of supply and demand would govern this price as it does any other. For example, one can imagine that just as CO2 emissions dip during an economic downturn, CPU time would be also cheaper as less work is done.&lt;br /&gt;&lt;br /&gt;In addition to this, if Moore's law continues to hold, newer facilities would host ever-faster, ever-more-efficient hardware. This would normally push the price of CPU time inexorably downwards, and make investing in any datacenter a bad idea. As a counter-point to this, we can see that todays hosting market is relatively liquid on a smaller scale, and people still build normal datacenters. Applying Jevons paradox, however, goes further, indicating that as efficiency increases, demand will also increase. Software expands to fill the space available.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Third: looking back&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;I think a closer look at recent history will help to shed light on the coming market in utility computing. Two subjects in particular might be useful to study.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Coal &lt;/span&gt;was, in Britain, a major fuel of the last industrial revolution. &lt;a href="http://www.econ.ucdavis.edu/faculty/gclark/papers/Coal2006.pdf"&gt;From 1700 to 1960, production volume increased exponentially&lt;/a&gt; [PDF, page 34] and the 'consumer' price fell in real terms by 40%, mainly due to decreased taxes and transportation costs. At the same time, however, production prices rose by 20%. In his book &lt;a href="http://en.wikipedia.org/wiki/The_Coal_Question"&gt;The Coal Question&lt;/a&gt;, Jevons posed a question about coal that we may find familiar: for how long can supply continue to increase exponentially?&lt;br /&gt;&lt;br /&gt;However, the parallels only go so far. Coal mining technology only progressed iteratively, with nothing like Moore's law behind it - coal production did peak eventually. The mines were controlled by a cartel, the "Grand Allies", who kept production prices relatively stable by limiting over-production. Today we have anti-trust laws to prevent that from happening.&lt;br /&gt;&lt;br /&gt;Lastly, the cost structure of the market was different: production costs were never more than 50% of the consumer price, whereas the only cost between the producer and the consumer of CPU time is bandwidth. Bandwidth is getting cheaper all the time, although maybe not at a rate sufficient for it to remain practically negligible throughout an exponential increase in demand for utility computing.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Electricity&lt;/span&gt;, as Jon Schwartz noted in the blog posts linked to above, and as &lt;a href="http://loosebolts.wordpress.com/2009/05/05/forecast-cloudy-with-continued-enterprise/"&gt;Michael Manos noted here&lt;/a&gt;, started out as the product of small, specialised plants and generators in the basements of large buildings, before transforming rapidly into the current grid system, complete with spot prices etc. Giants like GE were created in the process.&lt;br /&gt;&lt;br /&gt;As with electricity, it makes sense to use CPU power as close to you as possible. For electricity there are engineering limits concerning long distance power transmission; on networks, latency increases the further away you go. There are additional human constraints. Many businesses prefer to deal with suppliers in their own jurisdictions for tax reasons and for easier access to legal recourse. Plenty of valuable data may not leave its country of origin. For example, a medical institution may not be permitted to transfer its patient data abroad.&lt;br /&gt;&lt;br /&gt;For me, this indicates that there would be room at a national level for growth in utility computing. Regional players may spring up, differentiating themselves simply through their jurisdiction or proximity to population centers. To enable rapid global build-out, players could set up franchise operations, albeit with startup costs and knowledge-bases a world away from the typical retail applications of the business model.&lt;br /&gt;&lt;br /&gt;Just as with the datacenter construction business, building out the fledgling electricity grid was capital intensive. Thomas Edison's company was allied with the richest and most powerful financier of the time, &lt;a href="http://en.wikipedia.org/wiki/J_P_Morgan"&gt;J.P. Morgan&lt;/a&gt;, and grew to become General Electric. In contrast, George Westinghouse, who built his electricity company on credit and arguably managed it better, didn't have Wall St. on his side and so lost control of his company in an economic crisis.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Finally: the questions this leaves us with&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;It's interesting to note that two of the companies that are currently ahead in utility computing - &lt;a href="http://yglesias.thinkprogress.org/archives/2010/04/high-tech-firms-sitting-on-piles-of-cash.php"&gt;Google and Microsoft&lt;/a&gt; - have sizable reserves measured in billions. With that kind of cash, external capital isn't necessary as it was to GE and Westinghouse. But neither of them, nor any other player, seem to be building datacenters at a rate comparable to that of power station construction during the electrifying of America. Are their current rates going to take off in future? If so, how will they finance it?&lt;br /&gt;&lt;br /&gt;Should investors pour big money into building utility datacenters? How entrenched is the traditional hosting business, and will someone eat their lunch by diving into this? &lt;a href="http://www.shirky.com/weblog/2010/04/the-collapse-of-complex-business-models/"&gt;Clay Shirky compared&lt;/a&gt; a normal web-hosting environment to one run by AT&amp;amp;T - will a traditional hosting business have the same reaction as AT&amp;amp;T did to him?&lt;br /&gt;&lt;br /&gt;A related question is the size of the first-mover advantage - are Google, Amazon, Microsoft and Rackspace certain to dominate this business? I think this depends on how much lock-in they can create. Will the market start demanding standard APIs and fighting against lock-in, and if so, when? Looking at the adoption curves of other technologies, like the Web, should help to answer this question. Right now the de-facto standard APIs such as those of EC2 and Rackspace can be easily cloned, but will this change?&lt;br /&gt;&lt;br /&gt;I'm throwing these questions out here because I don't have the answers. But the biggest conclusion that I think can be tentatively drawn from applying Jevons paradox to the 'resources' of CPU time and storage space, is that in the coming  era of utility computing, there may soon be a business case to be made for building high-efficiency datacenters and exposing them to the world at spot prices from day one.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-3201088602915236788?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/3201088602915236788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=3201088602915236788' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/3201088602915236788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/3201088602915236788'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2010/05/jevons-paradox-moores-law-and-utility.html' title='Jevons paradox, Moore&apos;s law and utility computing'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-2586744096226923327</id><published>2010-04-18T10:26:00.000+02:00</published><updated>2010-04-18T18:38:34.232+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='YAGNI'/><title type='text'>YAGNI and the boring stuff</title><content type='html'>YAGNI is an acyonym meaning "You Ain't Gonna Need It", and behind this lies the principle in software that code should not be written before it is needed: the temptation to prematurely generalise and abstract, to write a framework for the problem you're trying to solve, should be resisted.&lt;br /&gt;&lt;br /&gt;It also focuses you on the task at hand, which is to directly solve the problem. By focusing on the shortest path between point A and point B, the result should be small, lean, and direct.&lt;br /&gt;&lt;br /&gt;However, in several projects I've worked on there comes a point where certain aspects of a codebase not directly related to its functionality begin to demand attention. These issues can be ignored up until the point at which inaction damages the codebase as a whole. I find these things are common across projects, and so they could be classed as "You're Gonna Need It". The examples that immediately come to mind in Java projects are:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A logging setup, i.e. configuration of log files for errors and debug info.&lt;/li&gt;&lt;li&gt;Likewise, a sprinkling of informative logging statements, without which it becomes difficult to tell what went wrong outside of a debugger.&lt;/li&gt;&lt;li&gt;An exception hierarchy. You can throw new RuntimeException for a while, but eventually it becomes unmanageable and you need to distinguish in catch() clauses between errors inside and outside of your own codebase&lt;/li&gt;&lt;li&gt;Interfaces, for the classic reason of hiding the implementation, but also because it enables Proxy-based AOP which is useful for a bunch of stuff 'YAGN' but may one day be 'YGNI', such as benchmarking and security interceptors.&lt;/li&gt;&lt;li&gt;A base test case / test harness that lets you pull in different parts of the application and test them individually.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;This stuff is all boring but necessary. When living without them starts to affect efficiency and quality, that is the point at which to stop working on functionality, get this stuff right, and then go back to working on the important things.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-2586744096226923327?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/2586744096226923327/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=2586744096226923327' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/2586744096226923327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/2586744096226923327'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2010/02/yagni-and-boring-stuff.html' title='YAGNI and the boring stuff'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-6035673339288851346</id><published>2010-04-16T22:22:00.004+02:00</published><updated>2010-04-16T23:36:45.992+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='patents'/><category scheme='http://www.blogger.com/atom/ns#' term='foss'/><category scheme='http://www.blogger.com/atom/ns#' term='copyright'/><category scheme='http://www.blogger.com/atom/ns#' term='copyleft'/><category scheme='http://www.blogger.com/atom/ns#' term='copyfail'/><title type='text'>And now for messed up UK politics: The Digital Economy Act and other IP</title><content type='html'>I want to bring together some articles I've read recently, which some of you may be familar with.&lt;br /&gt;&lt;br /&gt;In &lt;a href="http://www.antipope.org/charlie/blog-static/2010/04/why-content-is-a-public-good.html"&gt;Why Content is a Public Good&lt;/a&gt;, an economist-turned-coder explains why at an economic level, charging for digital content works against the nature of the digital medium. Note that this doesn't mean that it's right or wrong to do so - morality doesn't enter into it. It's just the nature of the beast. Markets are not intrinsically moral in any sense of the term, they're more akin to natural phenomena.&lt;br /&gt;&lt;br /&gt;So it is with the nature of digital information and its redistributability. Disintermediation is what's slowly destroying the business models of the music, movie, book, and software industries. And as for "information wants to be free", the above post links to two good posts on the subject, &lt;a href="http://www.antipope.org/charlie/blog-static/2010/02/information-freedom-flame-bait.html"&gt;one by Charlie Stross&lt;/a&gt; &lt;a href="http://shareable.net/blog/cory-doctorow-information-wants-2b-free"&gt;and one by Cory Doctorow&lt;/a&gt;, which explains the sloganity of the phrase.&lt;br /&gt;&lt;br /&gt;In the &lt;a href="http://news.ycombinator.com/item?id=1267501"&gt;Hacker News discussion&lt;/a&gt; of the this article, &lt;a href="http://news.ycombinator.com/item?id=1267890"&gt;this comment by fexl proposes a "recursive auction"&lt;/a&gt; method of distributing digital goods that seems interesting. Googling on the keywords he provides, along with the examples provided in the article itself, shows that new and interesting ways of selling information can be had. Suppose Wikileaks auctioned of it's scoops like this? How much would CNN pay to have the first copy of the video and it's associated materials? How luch would the New York Times pay to have the second?&lt;br /&gt;&lt;br /&gt;The second post on "information wants to be free" above by Cory Doctorow, a UK-resident Canadian. I like the guy for his eloquence in defending digital civil liberties and his understanding of online culture. He's also an author, and he credibly claims to make more money &lt;span style="font-style: italic;"&gt;because&lt;/span&gt; he publishes his books online for free in addition to hard-copy. He wrote &lt;a href="http://www.guardian.co.uk/technology/2010/apr/16/digital-economy-act-cory-doctorow"&gt;this article in the Guardian about the Digital Economy Act&lt;/a&gt;, and all the various (bad) things it contains.&lt;br /&gt;&lt;br /&gt;There may be a little hyperbole in there but the essence of his article is correct. The bill was shoved through parliament with insufficient debate and is exceedingly sucky. Sometimes it seems to me that keeping a half-open eye on any leglislative process, be it in the the UK (the Digital Economy Act), USA (HCR), or the EU (software patents), is not just like being in a sausage factory...&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-style: italic;"&gt;“Laws, like sausages, cease to inspire respect in proportion as we know how they are made."&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;... but more like being in a medieval abattoir. But I digress.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.techdirt.com/articles/20100107/0517167656.shtml"&gt;third article concerns patents&lt;/a&gt;, and discusses a recent study that suggests that the entire system of patents is counter-productive to inducing or encouraging invention, and to 'social welfare' in general. Not just software or genetic patents, but &lt;span style="font-style: italic;"&gt;all&lt;/span&gt; patents.&lt;br /&gt;&lt;br /&gt;The article is a good summary of the &lt;a href="http://papers.ssrn.com/sol3/papers.cfm?abstract_id=1502864"&gt;paper, which is available for free&lt;/a&gt;. In short, most inventors (a) create in order to scratch an itch for themselves, not for money, (b) build on previous work  which is easier to do if it isn't patented, and (c) prefer to freely share ideas with other inventors, rather be forced than keep things secret so they can make money.&lt;br /&gt;&lt;br /&gt;Now I'm just going to throw some ideas out here. I like the whole open source mentality, and I don't like share-cropping, and although I have an iPhone I'm not interested in developing for a closed, &lt;a href="http://www.freedom-to-tinker.com/blog/felten/flash-scratch-ajax-apples-war-programming"&gt;restrictive-if-not-oppresive&lt;/a&gt; environment. It's ironic that I left the world of Microsoft to get away from that, when Microsoft is the company that won domination  of the desktop market by being more open than Apple. Hopefully, &lt;a href="http://arstechnica.com/apple/news/2010/03/iphone-os-still-dominates-mobile-web-android-on-the-way-up.ars"&gt;now Google will do the same&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;However, one thing worries me about this: when Microsoft and Apple went to war, Microsoft was swiftly gaining several 'legs' to its stool (or eyes to its group, if you play go at all). Google has one: search. Kill Google's search revenue and everything Google does - mobile, maps, Chrome, CromeOS, etc. - suddenly goes *poof* and disappears. Just as if the &lt;a href="http://krugman.blogs.nytimes.com/2010/04/08/fiscal-fantasies/"&gt;American federal government is a large insurance company  with an army&lt;/a&gt;, then Google is an advertising agency with a well-run IT department that's allowed to get creative with cute little side-projects.&lt;br /&gt;&lt;br /&gt;But I'll leave you with this final question, which is the same one that I would have posed to &lt;a href="http://ianso.blogspot.com/2005/02/fosdem-05-rms.html"&gt;RMS when he gave his Fostem '05 talk&lt;/a&gt;, which is this: faced with all of the above, how does one effectively turn on, tune in and drop out - i.e. combine elements of civil disobedience and counter-cultural openness to combat the seemingly inevitable shift to Orwellian 'idea management'? I have no idea, but one thing I know is that it's &lt;span style="font-style: italic;"&gt;not&lt;/span&gt; by downloading as many MP3's as possible. I'll leave you with a link to one of my own posts - "&lt;a href="http://ianso.blogspot.com/2006/03/open-source-music.html"&gt;open source music&lt;/a&gt;", and the conclusion from &lt;a href="http://www.antipope.org/charlie/blog-static/2010/02/information-freedom-flame-bait.html"&gt;Charlie Stross's article&lt;/a&gt;:&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;"So it follows that if you &lt;em&gt;want&lt;/em&gt; information to be free you are taking on an obligation to &lt;em&gt;make&lt;/em&gt; information, and &lt;em&gt;give&lt;/em&gt; it freedom. An obligation to work to better the lot of humanity, not to merely sponge off the labour of others.&lt;/p&gt;  &lt;p&gt;Next time you hear someone invoke "information wants to be free" as a justification for demanding free-as-in-no-payment-expected content, ask them: precisely what content have &lt;em&gt;you&lt;/em&gt; released for free lately?"&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-6035673339288851346?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/6035673339288851346/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=6035673339288851346' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/6035673339288851346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/6035673339288851346'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2010/04/and-now-for-messed-up-uk-politics.html' title='And now for messed up UK politics: The Digital Economy Act and other IP'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-2894535006913761468</id><published>2010-04-16T21:26:00.004+02:00</published><updated>2010-04-16T22:22:04.806+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='USA'/><category scheme='http://www.blogger.com/atom/ns#' term='TBTF'/><category scheme='http://www.blogger.com/atom/ns#' term='politics'/><title type='text'>The timing could not be better. Or worse, depending on your POV.</title><content type='html'>So, GOP Senate minority leader &lt;a href="http://www.foxbusiness.com/story/markets/industries/government/street-execs-pols-earful-financial-reform/"&gt;Mitch McConnell flies into New York&lt;/a&gt; to coordinate messaging with Wall Street in opposition to the proposed &lt;a href="http://topics.nytimes.com/topics/reference/timestopics/subjects/c/credit_crisis/financial_regulatory_reform/index.html"&gt;financial regulatory reform&lt;/a&gt; intended bring an end to the "Too Big To Fail" era, comes back with &lt;a href="http://baselinescenario.com/2010/04/14/senator-mcconnell-is-completely-wrong-on-financial-reform/"&gt;misleading&lt;/a&gt; and &lt;a href="http://baselinescenario.com/2010/04/14/senator-kaufman-is-right-senator-mcconnell-is-wrong-any-questions/"&gt;dishonest&lt;/a&gt; &lt;a href="http://www.washingtonmonthly.com/archives/individual/2010_04/023362.php"&gt;arguments&lt;/a&gt; that pretend to be against helping TBTF banks &lt;a href="http://www.nytimes.com/2010/04/16/opinion/16krugman.html"&gt;while actually supporting them&lt;/a&gt;. And yes, it is that obvious.&lt;br /&gt;&lt;br /&gt;Then, just as the incredulity and blow-back starts to mount, the &lt;a href="http://www.sec.gov/news/press/2010/2010-59.htm"&gt;SEC charges Goldman Sachs&lt;/a&gt;, the great vampire squid itself, &lt;a href="http://www.nytimes.com/2010/04/17/business/17goldman.html?hp"&gt;with CDO- and RMBS-related fraud&lt;/a&gt;. Ouch! So now he's stuck in a corner with the banks, the biggest of which is being hauled into court on fraud charges. The Dems will suddenly find it much easier to paint the GOP as being in bed with the banks, and this puts heavy, populist pressure on the GOP senators to break ranks and therefore the fillibuster, allowing the leglislation to go through. I'm a pessimist on this, however: I think Mitch can still rely on the &lt;a href="http://tpmdc.talkingpointsmemo.com/2010/04/all-41-senate-republicans-oppose-financial-reform-bill-say-will-lead-to-endless-taxpayer-bailouts.php"&gt;cast-iron party discipline&lt;/a&gt; the GOP has built up to stop the bill going forwards.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-2894535006913761468?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/2894535006913761468/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=2894535006913761468' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/2894535006913761468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/2894535006913761468'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2010/04/timing-could-not-be-better-or-worse.html' title='The timing could not be better. Or worse, depending on your POV.'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-4241691369530599060</id><published>2010-02-15T19:00:00.005+01:00</published><updated>2010-02-15T19:00:03.105+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>The advantages of programming on a small netbook.</title><content type='html'>Most software developers prefer to work on "fast" computers, and I am normally one of them. Many of my tools work best with lots of memory, and some common tasks become pleasantly instantaneous on a nice, powerful computer.&lt;br /&gt;&lt;br /&gt;At work, for example, our teams project is 250-500,000 lines of code modularised into many sub-projects. Writing an extra five thousand lines of code would be considered a "minor" change. Working with this project on a slow computer would be a nightmare.&lt;br /&gt;&lt;br /&gt;However, my tiny little netbook, a rather un-sexy and previous-generation EeePC 901SD, is now my main development machine for my free-time-only side-project, which is also written in Java and uses the technologies documented in my previous blog posts. The software is not a toy: it's written to the same quality standards as my work project, if not higher; with no time constraints or deadlines, I can be as perfectionist and nit-picky as I want. Before I started this project, &lt;a href="http://code.google.com/p/hotrepart/"&gt;my previous project&lt;/a&gt; made heavy use of PostgreSQL, and I wrote hundreds of lines of C, again on a similar netbook.&lt;br /&gt;&lt;br /&gt;&lt;span&gt;The surprise? It's been a great experience.&lt;/span&gt; Being a very fast typist, the keyboard initially seemed cramped, but quickly became comfortable. I use a lightweight IDE (Netbeans) with a reduced font size, and screen real-estate is not an issue. I use Linux (Ubuntu), which means I have a decent command prompt and unix-like system at my finger-tips.&lt;br /&gt;&lt;br /&gt;More importantly, &lt;span&gt;my coding habits have changed&lt;/span&gt;. I no longer waste time thinking in front of the computer screen. I design the code in my head while walking to work in the morning, shopping for groceries, or doing the dishes. If I had a screen in front of me, the temptation would be to do something, to try out the idea, instead of reflecting on what really needs to be done, or how to do it.&lt;br /&gt;&lt;br /&gt;I can code in a crowded bar, or in 20 minutes on a tram surrounded by commuters, because when I'm sitting in front of a keyboard, I already know what I'm going to do. The rest is pure typing.&lt;br /&gt;&lt;br /&gt;The result: I would guess that I've done no more than 30 man-days of development. Less than half of it with an Internet connection. The time spent has been spread over the past four months in chunks of no more than four hours, and mostly shorter than one. But it has all been valuable learning or steady, measurable progress.&lt;br /&gt;&lt;br /&gt;This requires a lot more patience than usual from me. Time for my side-project comes at its own pace and cannot be hurried, and I'm not intending to sacrifice anything to make faster progress.&lt;br /&gt;&lt;br /&gt;I also learnt this: when I demand to work with only the very best tools in every situation, this is misplaced pride, maybe arrogance. It limits myself and chokes faith in the abilities I've been blessed with. We sometimes write on small pieces of paper, so why can't we sometimes program on small computers?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-4241691369530599060?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/4241691369530599060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=4241691369530599060' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/4241691369530599060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/4241691369530599060'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2010/02/advantages-of-programming-on-small.html' title='The advantages of programming on a small netbook.'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-4541617322045250996</id><published>2010-02-06T10:43:00.003+01:00</published><updated>2010-02-06T10:47:38.715+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jaxb'/><category scheme='http://www.blogger.com/atom/ns#' term='ec2'/><category scheme='http://www.blogger.com/atom/ns#' term='jaxws'/><category scheme='http://www.blogger.com/atom/ns#' term='cxf'/><category scheme='http://www.blogger.com/atom/ns#' term='wsdl'/><title type='text'>EC2 and CXF: Serialising objects in JAX-WS</title><content type='html'>The second problem I had with CXF (or, more correctly, JAXB) was in trying to serialise JAXB objects such as CreateVolumeType into XML using a copy of &lt;a href="http://code.google.com/p/typica/source/browse/trunk/java/com/xerox/amazonws/common/JAXBuddy.java"&gt;JAXBuddy from Typica&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This failed with the error message: "Unable to marshal type XXX as an element because it is missing an @XmlRootElement annotation". Searching for this error message led me to &lt;a href="http://weblogs.java.net/blog/2006/03/03/why-does-jaxb-put-xmlrootelement-sometimes-not-always"&gt;this blog post by Kohsuke Kawaguchi&lt;/a&gt;,  and so I copied the sample configuration from the comment into my binding file. This didn't work, and the error message remained the same - the configuration didn't take effect.&lt;br /&gt;&lt;br /&gt;Googling again I found this &lt;a href="https://issues.apache.org/jira/browse/CXF-1620"&gt;CXF bug on serialisation and "simple" mode&lt;/a&gt;. The information in this issue, combined with the information in &lt;a href="http://cxf.apache.org/docs/wsdl-to-java.html"&gt;the wsdl-to-java documentation&lt;/a&gt; gave me the information I needed to correct the binding file.&lt;br /&gt;&lt;br /&gt;As a humorous side-effect this also changed a lot of class names and broke a lot of code, but the new class-names are an improvement, so there we go.&lt;br /&gt;&lt;br /&gt;My &lt;a href="http://pastebin.com/f3b53d1ec"&gt;updated sample binding file is on pastebin here&lt;/a&gt;. Also, my original post about CXF is messed up in some way and I'll get round to fixing it soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-4541617322045250996?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/4541617322045250996/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=4541617322045250996' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/4541617322045250996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/4541617322045250996'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2010/02/ec2-and-cxf-serialising-objects-in-jax.html' title='EC2 and CXF: Serialising objects in JAX-WS'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-1496452584682591148</id><published>2010-02-04T21:57:00.001+01:00</published><updated>2010-02-04T21:59:30.954+01:00</updated><title type='text'>EC2 and CXF / JAX-WS: Configuring WSDL endpoints &amp; service URL</title><content type='html'>So, it's been a couple of weeks in real-time and about ten hours in "code"-time since I last posted on EC2 &amp;amp; JAX-WS, since which I've discovered two extra things. The second is in the next blog post.&lt;br /&gt;&lt;br /&gt;Firstly, Amazon SQS requires that you make SOAP 1.1 calls to a unique URl per queue. This means that to use a given queue, a specific port has to be configured with the new location in JAX-WS. This took a little digging, but it is clearly mentioned in the CXF documentation. The relevant code is this:&lt;br /&gt;&lt;br /&gt;String queueURL = "http://sqs.amazonaws.com/blablabla";&lt;br /&gt;&lt;br /&gt;MessageQueue q = new MessageQueue(); //can re-use this apparently&lt;br /&gt;&lt;br /&gt;MessageQueuePortType p = q.getMessageQueueHttpsPort(); //this is for a specific queue&lt;br /&gt;&lt;br /&gt;//initialise the port to use WS-Security as documented below&lt;br /&gt;&lt;br /&gt;BindingProvider provider = (BindingProvider)p;&lt;br /&gt;provider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, queueURL);&lt;br /&gt;&lt;br /&gt;...and that's it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-1496452584682591148?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/1496452584682591148/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=1496452584682591148' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/1496452584682591148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/1496452584682591148'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2010/02/ec2-and-cxf-jax-ws-configuring-wsdl.html' title='EC2 and CXF / JAX-WS: Configuring WSDL endpoints &amp; service URL'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-530057241123081921</id><published>2010-01-28T19:07:00.000+01:00</published><updated>2010-01-28T13:07:20.897+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ec2 cloud'/><title type='text'>EC2 Spot instances, latency</title><content type='html'>There's been an interesting conversation sputtering along about internal network latency on EC2 and its possible relation to the newly-introduced &lt;a href="http://aws.amazon.com/ec2/spot-instances/"&gt;spot instances&lt;/a&gt; feature of EC2. Spot instances represent the next step towards a truly commoditised computing platform, which in turn will hopefully be a key part of our future societal information infrastructure (a.k.a. infostructure).&lt;br /&gt;&lt;br /&gt;But back to the nuts and bolts:&lt;br /&gt;&lt;br /&gt;Jan 12 2010:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Alan Williamson wrote "&lt;a href="http://alan.blog-city.com/has_amazon_ec2_become_over_subscribed.htm"&gt;Has Amazon &lt;span style="font-size:100%;"&gt;EC2 become over subscribed?&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:100%;"&gt;" &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;CloudKick: &lt;a href="https://www.cloudkick.com/blog/2010/jan/12/visual-ec2-latency/"&gt;Visual evidence of Amazon EC2 network issues&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:100%;"&gt;Jan 13&lt;/span&gt; 2010&lt;span style="font-size:100%;"&gt;, Alan Williamson again: "&lt;a href="http://alan.blog-city.com/amazon_ec2_latency_the_pretty_graphs.htm"&gt;Amazon EC2 Latency: The Pretty Graphs&lt;/a&gt;".&lt;br /&gt;&lt;br /&gt;Then on Jan 15&lt;/span&gt; 2010&lt;span style="font-size:100%;"&gt;: seldo.com wrote "&lt;a href="http://seldo.com/weblog/2010/01/15/are_spot_instances_killing_the_performance_of_amazon_ec2"&gt;Are spot instances killing the performance of Amazon EC2?&lt;/a&gt;"&lt;/span&gt;, and made the first connection with spot instances.&lt;br /&gt;&lt;br /&gt;At this point, it would be useful and informative to take the &lt;a href="http://aws.typepad.com/aws/page/2/"&gt;EC2 spot price history&lt;/a&gt; from one of these sites (&lt;a href="http://cloudexchange.org/"&gt;cloudexchange.org&lt;/a&gt; seems the best), and correlate it with the network latency experienced by CloudKick and Alan Williamson. I've asked for the figures behind the graphs - we shall see!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-530057241123081921?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/530057241123081921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=530057241123081921' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/530057241123081921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/530057241123081921'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2010/01/ec2-spot-instances-latency.html' title='EC2 Spot instances, latency'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-5372058197529408006</id><published>2009-12-27T19:52:00.006+01:00</published><updated>2010-02-04T08:56:06.806+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wss4j'/><category scheme='http://www.blogger.com/atom/ns#' term='soap'/><category scheme='http://www.blogger.com/atom/ns#' term='ec2'/><category scheme='http://www.blogger.com/atom/ns#' term='cxf'/><category scheme='http://www.blogger.com/atom/ns#' term='wsdl'/><category scheme='http://www.blogger.com/atom/ns#' term='aws'/><title type='text'>Building a WS-Security enabled SOAP client in Maven2 to the EC2 WSDL using JAX-WS / CXF &amp; WSS4J: tips &amp; tricks</title><content type='html'>Generating a Java client from the Amazon EC2 WSDL that correctly used WS-Security is not completely simple. &lt;a href="http://www.jroller.com/gmazza/entry/implementing_ws_security_with_the"&gt;This blog post from Glen Mazza&lt;/a&gt; contains pretty much all the info you need, but as usual there are many things to trip up over along the way. So, without further ado, my contribution.&lt;br /&gt;&lt;br /&gt;My setup: I was using Maven2 to construct a JAR file. Running "mvn generate-sources", then, downloads the WSDL and uses it to generate the EC2 object model in src/main/java.&lt;br /&gt;&lt;br /&gt;Blogger doesn't like me quoting XML, so I've put &lt;a href="http://pastebin.com/f257c72f5"&gt;my sample POM at pastebin, here&lt;/a&gt;. Inside the &lt;a href="http://pastebin.com/f6cb2685c"&gt;cxf-codegen-plugin plugin XML&lt;/a&gt; you'll see two specific options, "autoNameResolution", which is needed to prevent naming conflicts with the WSDL, and a link to the JXB binding file for JAXWS, which is needed to generate the correct method signatures&lt;br /&gt;&lt;br /&gt;Once this is done, then the security credentials need to be configured. There are some pecularities:&lt;br /&gt;&lt;br /&gt;As laid out in &lt;a href="http://www.mularien.com/blog/2009/08/13/tutorial-amazon-soap-product-advertising-api-from-java-including-signing-of-requests-with-ws-security/#more-158"&gt;this tutorial for the Amazon product advertising API&lt;/a&gt;, the X.509 certificate and the private key need to be converted into a pkcs12 -format file before they're usable in Java. This is done using OpenSSL:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;blockquote&gt;openssl pkcs12 -export -name amaws -out aws.pkcs12 -in cert-BLABLABLA.pem -inkey pk-BLABLABLA.pem&lt;/blockquote&gt;&lt;/span&gt;At this point, I should admit that I spent hours scratching my head because the generated client (see below) gave me the error "java.io.IOException: DER length more than 4 bytes" when trying to read the PKCS12 file. So I switched to the Java Keystore format by using this command (JDK6 format):&lt;br /&gt;&lt;blockquote&gt;keytool -v -importkeystore -srckeystore aws.pkcs12 -srcstoretype pkcs12 -srcalias amaws -srcstorepass password -deststoretype jks -deststorepass password -destkeystore keystore.jks&lt;br /&gt;&lt;/blockquote&gt;...and then received the error "java.io.IOException: Invalid keystore format" instead. At this point I googled a bit, and discovered two ways to verify the integrity of keystores, via openSSL and the Java keytool:&lt;br /&gt;&lt;blockquote&gt;#for pkcs12&lt;br /&gt;openssl pkcs12 -in aws.pkcs12 -info&lt;br /&gt;&lt;br /&gt;#for keystore&lt;br /&gt;keytool -v -list -storetype jks -keystore keystore.jks&lt;br /&gt;&lt;/blockquote&gt;Both the keystore and pkcs12 file were valid. Then, I realised that I'd put the files in src/test/resources which was being put through a filter before landing in "target". The filter was doing something to the files, so of course they couldn't be read properly. Duh me. I put the key material in a dedicated folder with no filtering and this problem was fixed.&lt;br /&gt;&lt;br /&gt;My next problem was the exception "java.io.IOException: exception decrypting data - java.security.InvalidKeyException: Illegal key size". This was solved by downloading the "Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files". Simple!&lt;br /&gt;&lt;br /&gt;At this point the request was being sent to Amazon! Which then returned a new error message, "Security Header Element is missing the timestamp element". This was because the request didn't have a timestamp. So, I changed the action to TIMESTAMP+SIGNATURE (as seen in the below code sample), at which point I got a new error message: "Timestamp must be signed". This I fixed by setting a custom SIGNATURE_PARTS property also as below.&lt;br /&gt;&lt;br /&gt;Finally, once this was all done, and everything was signed, Amazon gave me back the message "AWS was not able to authenticate the request: access credentials are missing". This is exactly the same error that you get when nothing is signed at all, which needless to say is somewhat ambiguous.&lt;br /&gt;&lt;br /&gt;At this point I decided that I'd really like to see what was being sent over the wire. The WSDL specifies the port address with an HTTPS URL. However, I had saved the WSDL locally, and changing the URL to HTTP made the result inspectable with the inestimable Wireshark. Despite the request being sent in HTTP, not HTTPS, it was still executed. According to the docs, this should not be!&lt;br /&gt;&lt;br /&gt;Anyway, once I was looking at the bytes, I saw that the certificate was only being referred to, not included &lt;a href="http://docs.amazonwebservices.com/AmazonSimpleDB/latest/DeveloperGuide/WSSecurity.html"&gt;as specified in the AWS SOAP documents, in this case for SDB&lt;/a&gt;. This was fixed by setting the SIG_KEY_ID (key identifier type) property to "DirectReference", which includes the certificate in the request.&lt;br /&gt;&lt;br /&gt;...and then it worked. Oh Frabjous Day, Callooh, Callay! The final testcase code that I used is more or less as follows:&lt;br /&gt;&lt;br /&gt;package net.ex337.postgrec2.test;&lt;br /&gt;&lt;br /&gt;import com.amazonaws.ec2.doc._2009_10_31.AmazonEC2;&lt;br /&gt;import com.amazonaws.ec2.doc._2009_10_31.AmazonEC2PortType;&lt;br /&gt;import com.amazonaws.ec2.doc._2009_10_31.DescribeInstancesType;&lt;br /&gt;import junit.framework.TestCase;&lt;br /&gt;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.util.HashMap;&lt;br /&gt;import java.util.Map;&lt;br /&gt;import javax.security.auth.callback.Callback;&lt;br /&gt;import javax.security.auth.callback.CallbackHandler;&lt;br /&gt;import javax.security.auth.callback.UnsupportedCallbackException;&lt;br /&gt;import org.apache.cxf.endpoint.Client;&lt;br /&gt;import org.apache.cxf.frontend.ClientProxy;&lt;br /&gt;import org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor;&lt;br /&gt;import org.apache.ws.security.WSPasswordCallback;&lt;br /&gt;import org.apache.ws.security.handler.WSHandlerConstants;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;*&lt;br /&gt;* @author Ian&lt;br /&gt;*&lt;br /&gt;*/&lt;br /&gt;public class Testcase_CXF_EC2 extends TestCase {&lt;br /&gt;&lt;br /&gt;public void test_01_DescribeInstances() throws Exception {&lt;br /&gt;&lt;br /&gt;    AmazonEC2PortType port = new AmazonEC2().getAmazonEC2Port();&lt;br /&gt;&lt;br /&gt;    Client client = ClientProxy.getClient(port);&lt;br /&gt;    org.apache.cxf.endpoint.Endpoint cxfEndpoint = client.getEndpoint();&lt;br /&gt;&lt;br /&gt;    Map&lt;string,object&gt; outProps = new HashMap&lt;string,object&gt;();&lt;br /&gt;&lt;br /&gt;    //the order is important, apparently. Both must be present.&lt;br /&gt;    outProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.TIMESTAMP+" "+WSHandlerConstants.SIGNATURE);&lt;br /&gt;    //this is the configuration that signs both the body and the timestamp&lt;br /&gt;    outProps.put(WSHandlerConstants.SIGNATURE_PARTS,&lt;br /&gt;            "{Element}{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd}Timestamp;"+&lt;br /&gt;            "{}{http://schemas.xmlsoap.org/soap/envelope/}Body");&lt;br /&gt;&lt;br /&gt;    //alias, password &amp;amp; properties file for actual signature.&lt;br /&gt;    outProps.put(WSHandlerConstants.USER, "amaws");&lt;br /&gt;    outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS, PasswordCallBackHandler.class.getName());&lt;br /&gt;    outProps.put(WSHandlerConstants.SIG_PROP_FILE, "client_sign.properties");&lt;br /&gt;&lt;br /&gt;    //necessary to include the certificate in the request&lt;br /&gt;    outProps.put(WSHandlerConstants.SIG_KEY_ID, "DirectReference");&lt;br /&gt;&lt;br /&gt;    cxfEndpoint.getOutInterceptors().add(new WSS4JOutInterceptor(new HashMap&lt;string,object&gt;(outProps)));&lt;br /&gt;&lt;br /&gt;    //sample request.&lt;br /&gt;&lt;br /&gt;    DescribeInstancesType r = new DescribeInstancesType();&lt;br /&gt;&lt;br /&gt;    System.out.println(port.describeInstances(r));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//simple callback handler with the password.&lt;br /&gt;public static class PasswordCallBackHandler implements CallbackHandler {&lt;br /&gt;    private Map&lt;string,string&gt; passwords = new HashMap&lt;string,string&gt;();&lt;br /&gt;&lt;br /&gt;    public PasswordCallBackHandler() {&lt;br /&gt;        passwords.put("amaws", "password");&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {&lt;br /&gt;        for (int i = 0; i &lt; pc =" (WSPasswordCallback)callbacks[i];" pass =" passwords.get(pc.getIdentifer());"&lt;br /&gt;&lt;br /&gt;provider="org.apache.ws.security.components.crypto.Merlin" type="pkcs12" password="password" alias="amaws" file="aws.pkcs12" href="http://s3.amazonaws.com/ec2-downloads/ec2.wsdl"&gt;http://s3.amazonaws.com/ec2-downloads/ec2.wsdl.&lt;br /&gt;&lt;br /&gt;[I think I mangled somethjing here, will fix it soon]&lt;br /&gt;&lt;br /&gt;At this, the method signatures of the generated port abruptly changed to something other, because I forgot to change the wsdlLocation in the JXB binding file. Once I fixed this, it worked again.&lt;br /&gt;&lt;br /&gt;Some thoughts:&lt;br /&gt;&lt;br /&gt;1) Were I publishing a library for general use in accessing AWS, I would probably not use the direct "symlink" above that always points to the latest version of the WSDL. Instead, I would link deliberately to each version, and in that way always generate ports for each version of the WSDL, this ensuring backwards compatibility.&lt;br /&gt;&lt;br /&gt;2) Secondly, I find it inelegant to have to specify the WSDL location in two places (the POM and the binding file), and so I'd like to try and pass the binding file through a filter, using a ${variable} in both places referring to a property in the POM.&lt;br /&gt;&lt;br /&gt;3) I find it likewise confusing that the password for the keystore is used in two places, firstly in client_sign.properties and secondly in the CallbackHandler that is invoked from within the bowels of the WSS4JOutInterceptor. In the code above, this is obviously duplicated data, however in the final 'production' version of this code I expect to have the data centralised &amp;amp; the code prettified around it.&lt;/string,string&gt;&lt;/string,string&gt;&lt;/string,object&gt;&lt;/string,object&gt;&lt;/string,object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-5372058197529408006?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/5372058197529408006/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=5372058197529408006' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/5372058197529408006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/5372058197529408006'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2009/12/building-ws-security-enabled-soap.html' title='Building a WS-Security enabled SOAP client in Maven2 to the EC2 WSDL using JAX-WS / CXF &amp; WSS4J: tips &amp; tricks'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-5022300044453574419</id><published>2009-12-20T21:37:00.003+01:00</published><updated>2009-12-21T21:07:07.239+01:00</updated><title type='text'>Using CXF instead of Axis for Java from WSDL: better results faster.</title><content type='html'>In the footsteps of the same guy, &lt;a href="http://www.jroller.com/gmazza/"&gt;Glen Mazza&lt;/a&gt;, I linked to at the bottom of &lt;a href="http://ianso.blogspot.com/2009/12/creating-java-code-from-wsdl-using.html"&gt;the previous post&lt;/a&gt;, who did the same thing &lt;a href="http://www.jroller.com/gmazza/entry/implementing_ws_security_with_the"&gt;(SOAP client / server using WS-Security and X.509 certificates using CXF)&lt;/a&gt;, I switched from &lt;a href="http://ws.apache.org/axis2/"&gt;Axis2&lt;/a&gt; to &lt;a href="http://cxf.apache.org/"&gt;CXF&lt;/a&gt;, and had immediately better results:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The documentation and maven plugin instructions is current, and accurate.&lt;/li&gt;&lt;li&gt;The plugin works.&lt;/li&gt;&lt;li&gt;All the right JAR files are in repos.&lt;/li&gt;&lt;li&gt;The code generation worked fine, with some JAX-WS binding stuff added into the mix.&lt;/li&gt;&lt;/ul&gt;Which leads me to ask, why are there two projects at Apache doing essentially identical things, right down to the usage patterns for the tools they provide? (A: CXF &lt;span style="font-style: italic;"&gt;nee&lt;/span&gt; XFire is from Codehaus). Anyway, I don't have to write a HOW-TO for this stuff, the &lt;a href="http://cxf.apache.org/docs/using-cxf-with-maven.html#UsingCXFwithmaven-MavenPlugin"&gt;docs are there&lt;/a&gt; &lt;a href="http://cwiki.apache.org/CXF20DOC/wsdl-to-java.html"&gt;and they're useful&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I have yet to look at &lt;a href="http://cxf.apache.org/docs/ws-security.html"&gt;CXF support for WS-Security&lt;/a&gt;, but it seems simpler from the get-go than the equivalent stuff in Axis2, &lt;strike&gt;despite insisting on Java's proprietary keystore&lt;/strike&gt;, hum, I didn't read &lt;a href="http://www.mularien.com/blog/2009/08/13/tutorial-amazon-soap-product-advertising-api-from-java-including-signing-of-requests-with-ws-security/#more-158"&gt;this howto&lt;/a&gt; clearly enough - files are supported. We shall see!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-5022300044453574419?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/5022300044453574419/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=5022300044453574419' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/5022300044453574419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/5022300044453574419'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2009/12/using-cxf-instead-of-axis-for-java-from.html' title='Using CXF instead of Axis for Java from WSDL: better results faster.'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-946955777667323390</id><published>2009-12-19T11:45:00.009+01:00</published><updated>2009-12-20T17:19:58.892+01:00</updated><title type='text'>Creating Java code from a WSDL using Apache Axis2: maven2 and the command line.</title><content type='html'>Four years ago, creating Java code from WSDL was difficult and annoying. Today, I'm trying to generate a client for the EC2 WSDL, that ideally would download the latest version and rebuild the API when I type "mvn clean install".&lt;br /&gt;&lt;br /&gt;I've given up. The Axis2 Maven2 plugin does not seem to work correctly, so I've resorted to using the command-line tool, which does work. My command was:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;wsdl2java.bat -d jaxbri -o &lt;java&gt; -S . -R . --noBuildXML --noMessageReceiver -uri http://s3.amazonaws.com/ec2-downloads/2009-10-31.ec2.wsdl&lt;/java&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I used the JAXBRI output format because XMLBeans is basically dormant. Unfortunately the JAXBRI compiler generates sources in an "src" subdirectory, which can't be changed via command-line options, so some manual copy-and-pasting is required.&lt;br /&gt;&lt;br /&gt;Secondly, the generated classes then depend on axis. So this needs to be added to the POM:&lt;br /&gt;&lt;br /&gt;(Blogger broke my XML):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      &lt;groupid&gt;org.apache.axis2&lt;/groupid&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      &lt;artifactid&gt;axis2&lt;/artifactid&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      &lt;version&gt;1.5.1&lt;/version&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Thirdly, there's an undeclared dependency in Axis2-generated code on Axiom, so this also needs to be added:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &lt;dependency&gt;&lt;/dependency&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;     &lt;groupid&gt;org.apache.ws.commons.axiom&lt;/groupid&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        &lt;artifactid&gt;axiom&lt;/artifactid&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        &lt;version&gt;1.2.5&lt;/version&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;     &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;(The latest version is 1.2.8, but this doesn't seem to be in repos yet.)&lt;br /&gt;&lt;br /&gt;Following which, attempting to run this:&lt;br /&gt;&lt;br /&gt;      AmazonEC2Stub stub = new AmazonEC2Stub("http://eu-west-1.ec2.amazonaws.com");     &lt;br /&gt;      DescribeRegionsType t = new DescribeRegionsType();&lt;br /&gt;      System.out.println(stub.describeRegions(t).getRegionInfo().getItem());&lt;br /&gt;&lt;br /&gt;...rendered many different ClassNotFoundExceptionS which were, one after another, which I attempted to solve shotgun-style by adding each new dependency to the POM as it cropped up. This was an abject failure - I stopped at org.apache.axis2.transport.local.LocalTransportSender, which apparently is only available in Axis2 v. 1.2 (I'm using 1.5.1). So instead I deleted all the Axis2-related stuff from my POM and just added the JARs from the 1.5.1 downloded ZIP file straight to the Eclipse project.&lt;br /&gt;&lt;br /&gt;This worked, and gave me the error message that I was looking for, to whit: "AWS was not able to authenticate the request: access credentials are missing". From here, I would just need to get the Rampart/WS-Security/WSS4J stuff working properly with the Amazon X.509 certificate, and then I should be home free. We shall see.&lt;br /&gt;&lt;br /&gt;Further light reading can be found on this article on &lt;a href="http://www.ibm.com/developerworks/java/library/j-jws8.html"&gt;IBM developer works&lt;/a&gt; and &lt;a href="http://www.jroller.com/gmazza/entry/soap_client_with_axis2"&gt;this article on SOAP clients with Axis&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update 2009/12/20:&lt;/span&gt; The work has been done (I should have googled first!), and it is herculean, as you can see by reading this &lt;a href="http://www.mularien.com/blog/2009/08/13/tutorial-amazon-soap-product-advertising-api-from-java-including-signing-of-requests-with-ws-security/#more-158"&gt;impressive tutorial for creating an Axis2 SOAP Client for the Amazon Product Advertising API&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-946955777667323390?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/946955777667323390/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=946955777667323390' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/946955777667323390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/946955777667323390'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2009/12/creating-java-code-from-wsdl-using.html' title='Creating Java code from a WSDL using Apache Axis2: maven2 and the command line.'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-7367400883018042594</id><published>2009-12-04T21:26:00.003+01:00</published><updated>2009-12-04T21:32:31.402+01:00</updated><title type='text'>On the subject of being too harsh a critic</title><content type='html'>One of the great things about OSS is its transparency. This is also a great response to critics of any particular project, which is "instead of talking so much, why don't you shut up and help?".&lt;br /&gt;&lt;br /&gt;I'm guilty of forgetting that there are real people behind most projects. With commercial software this happens a lot more and is disguised as "I'm a paying customer and I expect good service", but there's no excuse, honestly, for criticism that isn't phrased constructively and considerately when the product itself is free.&lt;br /&gt;&lt;br /&gt;Fnar fnar fnar.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-7367400883018042594?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/7367400883018042594/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=7367400883018042594' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/7367400883018042594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/7367400883018042594'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2009/12/on-subject-of-being-too-harsh-critic.html' title='On the subject of being too harsh a critic'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-2930096726834088313</id><published>2009-12-03T12:28:00.003+01:00</published><updated>2009-12-03T12:58:36.348+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ebs'/><category scheme='http://www.blogger.com/atom/ns#' term='ec2'/><category scheme='http://www.blogger.com/atom/ns#' term='cloudcomputing'/><category scheme='http://www.blogger.com/atom/ns#' term='postgres'/><title type='text'>EC2 upgrades again</title><content type='html'>At lunch today, &lt;a href="http://www.allthingsdistributed.com/2009/12/amazon_ec2_boot_from_ebs.html"&gt;&lt;/a&gt;&lt;a href="http://aws.typepad.com/aws/2009/12/new-amazon-ec2-feature-boot-from-elastic-block-store.html"&gt;I read that &lt;/a&gt;EC2 &lt;a href="http://www.allthingsdistributed.com/2009/12/amazon_ec2_boot_from_ebs.html"&gt;can now boot off EBS images&lt;/a&gt;, something that simplifies the whole AMI thing and brings it up to speed with Rackspace on the ease-of-deployment front. However, two points:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://journal.uggedal.com/vps-performance-comparison"&gt;EC2 is still the clear loser in price-performance&lt;/a&gt;, and charging for I/O to the root partition won't help. More specifically, &lt;a href="http://orion.heroku.com/past/2009/7/29/io_performance_on_ebs/"&gt;when will EBS I/O become consistent&lt;/a&gt;? Probably this has a lot to do with being popular and dealing with shared resources at the lower end, &lt;a href="http://news.ycombinator.com/item?id=943046"&gt;see this HN thread.&lt;/a&gt;&lt;/li&gt;&lt;li&gt;My next question is, how does this affect the attack surface of EC2? Can the work done in the &lt;a href="http://cloudsecurity.org/2009/08/31/cloud-cartography-side-channel-attacks/"&gt;"Get off my Cloud!"&lt;/a&gt; paper be expanded on?&lt;/li&gt;&lt;/ol&gt;Anyway, this makes my Postgres stuff interesting, guess I'll be using this new mechanism instead. It's always nice when new stuff arrives, even if it means reworking stuff.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-2930096726834088313?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/2930096726834088313/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=2930096726834088313' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/2930096726834088313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/2930096726834088313'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2009/12/ec2-upgrades-again.html' title='EC2 upgrades again'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-254815304173083366</id><published>2009-11-27T17:11:00.002+01:00</published><updated>2009-11-27T17:16:46.196+01:00</updated><title type='text'>Note to self: too many publicly facing websites.</title><content type='html'>So, from now on:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Delicious is for storing bookmarks.&lt;/li&gt;&lt;li&gt;Reader is for sharing articles.&lt;/li&gt;&lt;li&gt;Twitter is for linking to stuff. (i.e. sharing stuff that I didn't come across in Reader)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Right now there's stuff duped between all three. I expect this to continue. It's not inconveniencing anyone, but it offends my sense of order. Oh well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-254815304173083366?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/254815304173083366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=254815304173083366' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/254815304173083366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/254815304173083366'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2009/11/note-to-self-too-many-publicly-facing.html' title='Note to self: too many publicly facing websites.'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-3895094853395674038</id><published>2009-11-18T22:08:00.003+01:00</published><updated>2009-11-18T23:08:38.994+01:00</updated><title type='text'>Rolling your own EC2 administration code: the basics</title><content type='html'>So, instead of using a PaaS or SaaS to manage the IaaS, I'm writing code myself to do exactly what I want, to be published shortly I hope. Basic ingredients:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A library to access EC2, like &lt;a href="http://code.google.com/p/typica/"&gt;Typica&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;An SSH library like &lt;a href="http://www.jcraft.com/jsch/"&gt;JSch&lt;/a&gt;, to exec commands and transfer files.&lt;/li&gt;&lt;li&gt;A templating engine for wrangling config files, such as &lt;a href="http://velocity.apache.org/"&gt;Velocity&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Working knowledge of the platform. I'm probably going to discover a few more subtleties &lt;a href="http://ianso.blogspot.com/2009/11/using-ec2-api-console-output-blank.html"&gt;such as this one&lt;/a&gt; before I'm finished.&lt;/li&gt;&lt;/ul&gt;Aside: Maven2 may be looked upon with scorn in certain circles, but it does make life much easier. If &lt;span style="font-style: italic;"&gt;certain&lt;/span&gt; packages included javadoc &amp;amp; source packages, and refrained from (e.g.) including log4j config files in the library JAR files, it would be even easier! Wouldn't that be nice.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-3895094853395674038?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/3895094853395674038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=3895094853395674038' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/3895094853395674038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/3895094853395674038'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2009/11/rolling-your-own-ec2-administration.html' title='Rolling your own EC2 administration code: the basics'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-2074684377250977271</id><published>2009-11-14T10:39:00.005+01:00</published><updated>2009-11-14T10:52:41.779+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ec2'/><category scheme='http://www.blogger.com/atom/ns#' term='aws'/><title type='text'>Using the EC2 API: console output blank, connection refused, socket timeout, etc.</title><content type='html'>Hello there. As usual, there's a world of difference between the conceptual usage of an API and it's real-world, practical stuff. In my adventures I'm stubbornly, block-headedly not interested in using EC2 via anything &lt;span style="font-style: italic;"&gt;except&lt;/span&gt; the API, i.e. no command-line tools or management console (except for debugging), and so, I intend to be able to create my images etc. in a test-harness. For reasons to be enumerated anon. Anyway, the following stuff may be useful to people writing code that uses the EC2 API for the first time:&lt;br /&gt;&lt;blockquote&gt;When booting an instance, it is &lt;span style="font-style: italic;"&gt;not&lt;/span&gt; assumed that once it is "running", that SSH will be serving on port 22, &lt;span style="font-style: italic;"&gt;neither&lt;/span&gt; can it be assumed that the console output is there. So if you want to SSH into your instance, first poll the instance state, and once it's "running", &lt;span style="font-style: italic;"&gt;then&lt;/span&gt; poll on console output. Once it's there, it's complete, so you can retrieve the fingerprints and go on from there.&lt;/blockquote&gt;This is good to know of course if one wants to sling instances around, but I find it &lt;span style="font-style: italic;"&gt;slightly&lt;/span&gt; incongruous is that I'm being charged for about a minute of time on a machine I can't access yet. Of course, from Amazon's perspective the instant (har) I'm blocking a slot on a server, then it's chargeable, so it makes sense from their perspective I guess.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-2074684377250977271?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/2074684377250977271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=2074684377250977271' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/2074684377250977271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/2074684377250977271'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2009/11/using-ec2-api-console-output-blank.html' title='Using the EC2 API: console output blank, connection refused, socket timeout, etc.'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-7028549227859503663</id><published>2009-10-18T15:37:00.002+02:00</published><updated>2009-10-18T15:47:14.059+02:00</updated><title type='text'>Matt Taibbi does have a way with words:</title><content type='html'>I'm glad that there's &lt;a href="http://www.rollingstone.com/politics/story/30481512/wall_streets_naked_swindle/print"&gt;at least one reporter who takes so much cynical glee in uncovering what happens in Wall Street,&lt;/a&gt; even if in somewhat lurid and no-doubt slightly exagerrated form:&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;blockquote&gt;What really happened to Bear and Lehman is that an economic drought temporarily left the hyenas without any more middle-class victims — and so they started eating each other, using the exact same schemes they had been using for years to fleece the rest of the country. And in the forensic footprint left by those kills, we can see for the first time exactly how the scam worked — and how completely even the government regulators who are supposed to protect us have given up trying to stop it.&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;blockquote&gt;Just like that, with a slight nod of Paulson's big shiny head, Bear was vaporized. This, remember, all took place while Bear's stock was still selling at $30. By knocking the share price down 28 bucks, Paulson ensured that the manipulators who were illegally counterfeiting Bear's shares would make an awesome fortune.&lt;/blockquote&gt;What is interesting is that he seems to suggest that Geithner &amp;amp; Bernanke gave false testimony to the Senate, which would be tectonically enormous if true:&lt;br /&gt;&lt;blockquote&gt;The month after Bear's collapse, both men testified before the Senate that they only learned how dire the firm's liquidity problems were on Thursday, March 13th — despite the fact that rumors of Bear's troubles had begun as early as that Monday and both men had met in person with every key player on Wall Street that Tuesday. This is a little like saying you spent the afternoon of September 12th, 2001, in the Oval Office, but didn't hear about the Twin Towers falling until September 14th.&lt;/blockquote&gt;Like with the whole torture thing (&lt;a href="http://www.guardian.co.uk/world/2009/oct/16/binyam-mohamed-torture-evidence-miliband"&gt;appropos of which, sunlight maybe&lt;/a&gt;?), the more I read about Wall Street, the worse it looks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-7028549227859503663?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/7028549227859503663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=7028549227859503663' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/7028549227859503663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/7028549227859503663'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2009/10/matt-taibbi-does-have-way-with-words.html' title='Matt Taibbi does have a way with words:'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-5648123283985473805</id><published>2009-10-16T16:46:00.003+02:00</published><updated>2009-10-16T17:09:54.771+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ebs'/><category scheme='http://www.blogger.com/atom/ns#' term='ec2'/><category scheme='http://www.blogger.com/atom/ns#' term='cloudcomputing'/><category scheme='http://www.blogger.com/atom/ns#' term='aws'/><title type='text'>EC2: now having actually played with it a *little*...</title><content type='html'>So, in place of my previous bloviation on the subject, unfettered by the weight of experience, a couple of somewhat-more-tempered comments follow:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Using the command-line tools is slow. They're shifting gigs of data around at the touch of a button, but hey, it's a UX thing.&lt;/li&gt;&lt;li&gt;In terms of actual tools, the options seem to be:&lt;ul&gt;&lt;li&gt;Go with the command-line tools and a bunch of bash scripts&lt;/li&gt;&lt;li&gt;Go with a (generally) half-baked third-party API, with its own idiosyncrasies built in, and the traditional lack of documentation OSS projects feel they can get away with.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;(My inevitable option) download the WSDLs &amp;amp; use something to generate your own API in whatever language. Regenerate it whenever the API changes.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;This choice is especially acute since I'm not intending, ultimately, to have to do &lt;span style="font-style: italic;"&gt;anything&lt;/span&gt; by hand - so programming things properly to start with seems like the only sensible option.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://orion.heroku.com/past/2009/7/29/io_performance_on_ebs/"&gt;Consistent IO on EBS is apparently not an option&lt;/a&gt;. This is something I think Amazon should fix &lt;span style="font-style: italic;"&gt;toute suite&lt;/span&gt;, because things like RackSpace (maybe) and &lt;a href="http://www.newservers.com/"&gt;NewServers&lt;/a&gt; (h.t. &lt;a href="http://etbe.coker.com.au/2009/10/13/new-servers-non-virtual-cloud/"&gt;etbe&lt;/a&gt;) seem to be to stomping all over the EBS I/O figures. In a different context, James Hamilton says &lt;a href="http://perspectives.mvdirona.com/2009/10/05/VL2AScalableAndFlexibleDataCenterNetwork.aspx"&gt;"&lt;/a&gt;&lt;a href="http://perspectives.mvdirona.com/2009/10/05/VL2AScalableAndFlexibleDataCenterNetwork.aspx"&gt;it makes no sense to allow a lower cost component impose constraints on the optimization of a higher cost component&lt;/a&gt;&lt;a href="http://perspectives.mvdirona.com/2009/10/05/VL2AScalableAndFlexibleDataCenterNetwork.aspx"&gt;"&lt;/a&gt;, and assuming that the servers are the expensive part, this is what (IMHO) may make using RDBMSs on EC2 a bit of a PIA long-term.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-5648123283985473805?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/5648123283985473805/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=5648123283985473805' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/5648123283985473805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/5648123283985473805'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2009/10/ec2-now-having-actually-played-with-it.html' title='EC2: now having actually played with it a *little*...'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-6648693112003736822</id><published>2009-10-16T09:22:00.002+02:00</published><updated>2009-10-16T09:27:00.960+02:00</updated><title type='text'>Finally...</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;blockquote&gt;“If they’re too big to fail, they’re too big,”&lt;br /&gt;&lt;div style="text-align: right;"&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt; - &lt;a href="http://www.bloomberg.com/apps/news?pid=newsarchive&amp;amp;sid=aJ8HPmNUfchg" onmouseover="return escape( popwSearchNews( this ))"&gt;Alan Greenspan&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;So, the next question is, when will the &lt;span style="font-style: italic;"&gt;current&lt;/span&gt; head of the Fed adopt this position?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-6648693112003736822?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/6648693112003736822/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=6648693112003736822' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/6648693112003736822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/6648693112003736822'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2009/10/finally.html' title='Finally...'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-8714062449461759872</id><published>2009-10-09T16:11:00.002+02:00</published><updated>2009-10-09T16:35:24.586+02:00</updated><title type='text'>Norwegian Irony?</title><content type='html'>I like the guy too, but:&lt;br /&gt;&lt;a target="_blank" href="http://www.huffingtonpost.com/andy-worthington/a-truly-shocking-guantana_b_305227.html"&gt;&lt;/a&gt;&lt;blockquote&gt;&lt;a target="_blank" href="http://www.huffingtonpost.com/andy-worthington/a-truly-shocking-guantana_b_305227.html"&gt;In February, the Obama DOJ went to court to &lt;/a&gt;&lt;a href="http://www.salon.com/opinion/greenwald/2009/02/09/state_secrets/index.html"&gt;block victims of rendition and torture from having a day in court&lt;/a&gt;, adopting in full the Bush argument that whatever was done to the victims is a "state secret" and national security would be harmed if the case proceeded.&lt;br /&gt;[...]&lt;br /&gt;&lt;a target="_blank" href="http://www.huffingtonpost.com/andy-worthington/a-truly-shocking-guantana_b_305227.html"&gt;And all year long, &lt;/a&gt;&lt;a target="_blank" href="http://andrewsullivan.theatlantic.com/the_daily_dish/2009/10/they-tortured-a-man-they-knew-to-be-innocent.html"&gt;the Obama DOJ fought (unsuccessfully)&lt;/a&gt; to keep encaged at Guantanamo a man whom Bush officials had tortured while &lt;strong&gt;knowing he was innocent&lt;/strong&gt;.&lt;div style="text-align: right;"&gt; - &lt;a href="http://www.salon.com/opinion/greenwald/2009/10/08/photos/index.html"&gt;The indefatigable Glenn Greenwald&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Asked why the [nobel] prize had been awarded to Mr Obama less than a year after he took office, Nobel Committee head Thorbjoern Jagland said: "It was because we would like to support what he is trying to achieve"&lt;br /&gt;&lt;div style="text-align: right;"&gt; - &lt;a href="http://news.bbc.co.uk/2/hi/europe/8298580.stm"&gt;BBC News&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;div style="text-align: left;"&gt;&lt;span&gt;"Obama has a long way to go still and lots of work to do before he can  deserve a reward,"&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span&gt; - &lt;a href="http://content.usatoday.com/communities/theoval/post/2009/10/68500680/1"&gt;Hamas official Sami Abu Zuhri&lt;/a&gt;. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;         "It's the prize for not being George W. Bush"&lt;br /&gt;&lt;/div&gt; --Sky News commentator.&lt;br /&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;br /&gt;I find myself in the bizarre situation of agreeing with crazy right-wing nutcases (not linked to, but depressingly easy to find), terrorists, and a News Corporation talking head, &lt;span style="font-style: italic;"&gt;all at the same time&lt;/span&gt;. He hasn't done anything yet!!! And in any in any case, torture! Sheesh!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-8714062449461759872?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/8714062449461759872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=8714062449461759872' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/8714062449461759872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/8714062449461759872'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2009/10/norwegian-irony.html' title='Norwegian Irony?'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-6576287139540798165</id><published>2009-10-06T16:02:00.002+02:00</published><updated>2009-10-06T16:15:13.136+02:00</updated><title type='text'>Hotrepart: long term plans</title><content type='html'>&lt;span style="font-style: italic;"&gt;Pace&lt;/span&gt; &lt;a href="http://ianso.blogspot.com/2009/08/you-were-saying-something-about-best.html"&gt;my previous post on moving hotrepart forward&lt;/a&gt;, the plan is as follows:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Patch the seemingly-dormant &lt;a href="http://code.google.com/p/cloudtools/"&gt;CloudTools&lt;/a&gt; to support PostgreSQL, using &lt;a href="https://developer.skype.com/SkypeGarage/DbProjects/SkyTools"&gt;Londiste&lt;/a&gt; for replication.&lt;/li&gt;&lt;li&gt;Patch CloudTools again to allow online adding &amp;amp; removing slaves.&lt;/li&gt;&lt;li&gt;Patch hotrepart and &lt;a href="https://developer.skype.com/SkypeGarage/DbProjects/PlProxy"&gt;PL/Proxy&lt;/a&gt; again, this time to add a CLUSTERS command that will allow PL/Proxy to act as a bus not just for sharding, but also for master-slave replications.&lt;/li&gt;&lt;li&gt;Patch CloudTools again to allow dynamic repartitioning with hotrepart.&lt;/li&gt;&lt;/ul&gt;Once this is done, then I should be able to run a test cluster that auto-adapts the server provisioning based on workload. If I can get this up to 500 nodes, then I'll consider myself happy, and start working on snazzy canvas-based visualisation/management toolkit.&lt;br /&gt;&lt;br /&gt;Canvas will probably be fully supported in IE10 by this time. Anyway.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-6576287139540798165?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/6576287139540798165/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=6576287139540798165' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/6576287139540798165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/6576287139540798165'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2009/10/hotrepart-long-term-plans.html' title='Hotrepart: long term plans'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-5157851549365481399</id><published>2009-09-06T15:38:00.006+02:00</published><updated>2009-09-06T15:54:32.048+02:00</updated><title type='text'>My WiFi access point.</title><content type='html'>My Wifi access point used to be open to anyone, with the name "noP2PwebOKthanks". What this meant was that people were free to surf the web, but politely requested not to download movies, films, or anything else that would get me in trouble.&lt;br /&gt;&lt;br /&gt;Of course, this didn't work, and after too many times of having slow access to my own connection, and exceeding my bandwidth quota, I added a password. The wifi network is now called "&lt;a href="http://bit.ly/1wflj1"&gt;bit.ly/1wflj1&lt;/a&gt;", which is a link to this blog post.&lt;br /&gt;&lt;br /&gt;If you used to use my network and enjoyed free Internet access for occasional use, then you can still use my wifi - &lt;a href="https://spreadsheets.google.com/viewform?formkey=dEZZRFJlYzlJYnVON2xEUThDRmQ2aUE6MA.."&gt;get in touch with me&lt;/a&gt; and I'll see what I can do.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-5157851549365481399?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/5157851549365481399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=5157851549365481399' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/5157851549365481399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/5157851549365481399'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2009/09/my-wifi-access-point.html' title='My WiFi access point.'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-7211995885240718627</id><published>2009-08-16T13:36:00.004+02:00</published><updated>2009-08-16T15:04:56.457+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scaling'/><category scheme='http://www.blogger.com/atom/ns#' term='postrges'/><category scheme='http://www.blogger.com/atom/ns#' term='hotrepart'/><category scheme='http://www.blogger.com/atom/ns#' term='wsc'/><category scheme='http://www.blogger.com/atom/ns#' term='cloudcomputing'/><title type='text'>You were saying something about 'best intentions'?</title><content type='html'>Well, &lt;a href="http://code.google.com/p/hotrepart"&gt;hotrepart&lt;/a&gt; is my most recent attempt at doing something interesting outside of work, and it took me down some interesting avenues.&lt;br /&gt;&lt;br /&gt;I didn't figure that I'd be patching &lt;a href="http://pgfoundry.org/projects/plproxy/"&gt;PL/Proxy&lt;/a&gt;, learning C, pointer arithletic and memory management along the way. It was interesting working in a bare text editor, but also much, much slower. It took me maybe 40 hours of screen-time and 20 hours of no-screen thinking, spread across about 3 months, to get a 1.1Kloc patch out the door.&lt;br /&gt;&lt;br /&gt;Once I did this, I then realised that my plan to scale Postgres to the moon was fundamentally flawed: queries that had to be run across the whole dataset (RUN ON ALL in PL/Proxy parlance) would eventually saturate the cluster without a decent replication system. A decent replication system (that can be automatically installed and reconfigured on-the-fly at runtime) is of course the one thing Postgres lacks right now.&lt;br /&gt;&lt;br /&gt;During this three months I also read up more on datacenter-scale applications and Google's concept of the &lt;a href="http://perspectives.mvdirona.com/2009/05/16/TheDatacenterAsAComputer.aspx"&gt;Warehouse Scale Computer&lt;/a&gt;, which altered my thinking somewhat.&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Motivation&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;At this point I should explain, to myself if nobody else, why I started this whole experiment. The thinking was that the algorithms behind &lt;a href="http://en.wikipedia.org/wiki/Distributed_hash_table"&gt;DHT&lt;/a&gt;s and distributed key-value stores like &lt;a href="http://en.wikipedia.org/wiki/Dynamo_%28storage_system%29"&gt;Dynamo&lt;/a&gt; should in theory be implementable using RDBMS installs as building blocks. What you lose in performance overhead you gain in query language expressivity. Going further, with a decent programmable proxy it should be possible to route DB requests just like DHTs route &lt;span style="font-style: italic;"&gt;pull&lt;/span&gt; requests etc. Further still, a "proxy layer" on top of the DB layer should self-heal and use a &lt;a href="http://en.wikipedia.org/wiki/Paxos_algorithm"&gt;Paxos&lt;/a&gt; algorithm to route around failures and update the routing table.&lt;br /&gt;&lt;br /&gt;One of the properties of the hotrepart system as-is is that it is immediately consistent. In theory, the system proposed above would trade that off for eventual consistency, with a lag equal to the replication delay, but gaining partition-tolerance, on the assumption that the replication also had a hot-failover component. Hello, there, &lt;a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.20.1495"&gt;Brewer's conjecture&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Needless to say this would be a ridiculous amount of work to implement, even it it worked in theory. Were this to be made real, however, would such a system scale to &lt;a href="http://perspectives.mvdirona.com/2009/07/25/HadoopDBMapReduceOverRelationalData.aspx"&gt;the numbers obtained with Hadoop&lt;/a&gt;? That is the question.&lt;br /&gt;&lt;br /&gt;One way to answer it would be to construct a simulation cluster processing requests and then to torture the cluster in various ways (kill hosts, partition the network) and watch what happens. We shall see.&lt;br /&gt;&lt;br /&gt;The end result is that hotrepart is stalled for the moment, pending ideas on the direction in which to take it foward. As with Gradient, even if nothing comes of the project, it's still out there in the open. Four years after I stopped work on Gradient it still proved useful to other people because of the ideas alone, and combining XMPP and hypertext is something everyone's doing now, so I don't necessarily think I've wasted my time on this so far.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-7211995885240718627?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/7211995885240718627/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=7211995885240718627' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/7211995885240718627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/7211995885240718627'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2009/08/you-were-saying-something-about-best.html' title='You were saying something about &apos;best intentions&apos;?'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-968171891278561264</id><published>2009-05-27T21:04:00.003+02:00</published><updated>2009-06-26T14:44:42.516+02:00</updated><title type='text'>Finally!</title><content type='html'>&lt;a href="http://code.google.com/p/hotrepart/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;The&lt;/span&gt; code &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;that&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;produced&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;the&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;below&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;graph&lt;/span&gt; is &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;released&lt;/span&gt;!&lt;/a&gt; Hotrepart was &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;basically&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;done&lt;/span&gt; a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;month&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;ago&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;but&lt;/span&gt; I &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;decided&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;that&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;releasing&lt;/span&gt; code &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;into&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;the&lt;/span&gt; wild, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;especially&lt;/span&gt; code &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;that&lt;/span&gt; is &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;supposed&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;to&lt;/span&gt; start &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;conversations&lt;/span&gt;, is &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;probably&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;not&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;the&lt;/span&gt; best &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;thing&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;to&lt;/span&gt; do at &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;the&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28"&gt;same&lt;/span&gt; time as &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_29"&gt;organising&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_30"&gt;my&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_31"&gt;own&lt;/span&gt; wedding. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_32"&gt;I'm&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_33"&gt;happily&lt;/span&gt; married &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_34"&gt;now&lt;/span&gt; :-) &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_35"&gt;Hence&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_36"&gt;the&lt;/span&gt; release.&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_37"&gt;This&lt;/span&gt; is &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_38"&gt;an&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_39"&gt;ongoing&lt;/span&gt; project &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_40"&gt;that&lt;/span&gt; I &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_41"&gt;don't&lt;/span&gt; intend &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_42"&gt;to&lt;/span&gt; let rot, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_43"&gt;like&lt;/span&gt; I &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_44"&gt;did&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_45"&gt;with&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_46"&gt;Gradient&lt;/span&gt;. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_47"&gt;There&lt;/span&gt; are &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_48"&gt;several&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_49"&gt;things&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_50"&gt;to&lt;/span&gt; do &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_51"&gt;off&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_52"&gt;the&lt;/span&gt; bat: &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_53"&gt;another&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_54"&gt;patch&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_55"&gt;to&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_56"&gt;PL&lt;/span&gt;/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_57"&gt;Proxy&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_58"&gt;then&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_59"&gt;configuring&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_60"&gt;EC&lt;/span&gt;2 &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_61"&gt;to&lt;/span&gt; run Postgres &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_62"&gt;nicely&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_63"&gt;then&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_64"&gt;coding&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_65"&gt;up&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_66"&gt;some&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_67"&gt;intelligence&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_68"&gt;to&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_69"&gt;trigger&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_70"&gt;the&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_71"&gt;repartitioning&lt;/span&gt;. &lt;a href="http://aws.amazon.com/autoscaling/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_72"&gt;Amazon&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_73"&gt;releasing&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_74"&gt;autoscaling&lt;/span&gt;&lt;/a&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_75"&gt;just&lt;/span&gt; made &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_76"&gt;that&lt;/span&gt; a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_77"&gt;whole&lt;/span&gt; lot &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_78"&gt;easier&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-968171891278561264?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/968171891278561264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=968171891278561264' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/968171891278561264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/968171891278561264'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2009/05/finally.html' title='Finally!'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-1395615302159126984</id><published>2009-02-01T23:21:00.006+01:00</published><updated>2009-02-01T23:50:58.300+01:00</updated><title type='text'>Yay!</title><content type='html'>The below graphs show two minutes of reads and writes against a PostgreSQL database running inside VMWare on a modern 2-core laptop, with #ops per second and response time plotted in each case. The initial high response time for writes is caused by the connection pool filling.&lt;br /&gt;&lt;br /&gt;Half-way through, where the lines spike, the database is split (repartitioned) into two partitions - one being the original, the second newly created that second. Both of the new databases are on the same host, but this is a trivial detail.&lt;br /&gt;&lt;br /&gt;More soon :-)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://farm4.static.flickr.com/3308/3245716422_94a2ca06ca_o.gif"&gt;&lt;img style="width: 501px; height: 468px;" src="http://farm4.static.flickr.com/3308/3245716422_94a2ca06ca_o.gif" alt="yay" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-1395615302159126984?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/1395615302159126984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=1395615302159126984' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/1395615302159126984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/1395615302159126984'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2009/02/yay.html' title='Yay!'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-4451361616349508359</id><published>2008-12-22T22:59:00.004+01:00</published><updated>2009-02-01T23:17:40.075+01:00</updated><title type='text'>Amazon redux</title><content type='html'>Y'know, despite all my bloviation over the wonderfulness of AWS, I would be remiss if I failed to mention that Amazon have taken a dent in my estimation recently due to &lt;a href="http://business.timesonline.co.uk/tol/business/industry_sectors/retailing/article5337770.ece"&gt;this story by the Times of London documenting work practices which appear to be if not illegal, then at the very least inhumane.&lt;/a&gt; I would be surprised if being threatened with dismissal for more than 6 days of illness is acceptable behaviour under UK employment law.&lt;br /&gt;&lt;br /&gt;Even though working on AWS would be a dream job, I'm writing this anyway because I don't believe in candy-coating the nature of 'the beast'. Just like individual people, groups of people also have facets of their collective nature that should be lauded, or condemned, and hopefully redeemed.&lt;br /&gt;&lt;br /&gt;Not sure if the next batch of presents will come from Amazon.co.uk though.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update 1 Feb. 2009&lt;/span&gt;. The &lt;a href="http://googleblog.blogspot.com/2009/01/powering-google-search.html"&gt;Sunday Times badly misrepresented Google's energy efficiency&lt;/a&gt; a while ago, so also took a dent in my estimation of their credibility, so who knows about the above? Maybe it's an equally manufactured controversy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-4451361616349508359?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/4451361616349508359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=4451361616349508359' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/4451361616349508359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/4451361616349508359'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2008/12/amazon-redux.html' title='Amazon redux'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-356956035789467848</id><published>2008-12-22T22:36:00.005+01:00</published><updated>2008-12-24T17:02:28.919+01:00</updated><title type='text'>Notes on a small proxy, or: "PL/Proxy: lessons learnt, hints and tips"</title><content type='html'>&lt;a href="http://pgfoundry.org/projects/plproxy/"&gt;PL/Proxy&lt;/a&gt; is the SQL proxy that Skype released as a part of their &lt;a href="https://developer.skype.com/SkypeGarage/DbProjects"&gt;open source program&lt;/a&gt;. Although in some ways less flexible than &lt;a href="http://forge.mysql.com/wiki/MySQL_Proxy"&gt;MySQLProxy&lt;/a&gt;, focused as it is purely on partitioning and load-balancing, it's been used in production under HA circumstances and is definitely production quality code.&lt;br /&gt;&lt;br /&gt;I installed it on a Linux image and found the following:&lt;br /&gt;&lt;br /&gt;When installing from source:&lt;ul&gt;&lt;li&gt;On Debian-based systems (including Ubuntu) If you don't have pg_config, you need to install the package postgresql-server-dev-8.X&lt;/li&gt;&lt;li&gt;Make sure flex &amp;amp; bison are installed first.&lt;/li&gt;&lt;li&gt; Make sure you have the latest version. Previous versions rely on flex &amp;amp; bison being defined in pg_config, which is not always the case.&lt;/li&gt;&lt;/ul&gt;For the simple example, putting the passwords in the connection strings is a quick and dirty fix to getting up and running.&lt;br /&gt;&lt;br /&gt;If the anything changes in your get_cluster_partitions function, then you should also increment the value returned by get_cluster_version. PL/Proxy caches the results of get_cluster_partitions to avoid calling it with every invocation, but on a per-version basis.&lt;br /&gt;&lt;br /&gt;While the documentation says "the number of connections for a given cluster must be a power of 2", don't forget that 1 connection is also possible.&lt;br /&gt;&lt;br /&gt;You can proxy to a proxy, but there are two things to gake into account:&lt;br /&gt;&lt;br /&gt;1) Your reads can't use SELECTs inside your proxy functions, i.e. no "cluster A run on B select C", which is bad style anyway. Instead, your target databases have to have functions with a method signature identical to that of the function on the proxy.&lt;br /&gt;&lt;br /&gt;2) It's not much use if you're using a stock PL/Proxy install that uses hashtext with identical cluster-choice logic on both proxies. Why? In this example scenario,&lt;br /&gt;&lt;br /&gt;P1 -&gt; part00,&lt;br /&gt;+ -&gt; P2 -&gt; part01, part02&lt;br /&gt;&lt;br /&gt;...Nothing will ever be written to p01 - P1 partitions the same way as P2.&lt;br /&gt;&lt;br /&gt;According to the todo list, PL/Proxy currently loads response result sets into memory, which leads to some obvious limitations.&lt;br /&gt;&lt;br /&gt;CONNECT doesn't take function arguments. This can be emulated by having one-DB clusters, but still.&lt;br /&gt;&lt;br /&gt;"Tagged partitions" are not very clear in the docs, and neither is the reason for the restriction on having the number of partitions equal to a a power of 2, but the &lt;a href="http://plproxy.projects.postgresql.org/faq/faq.html"&gt;PL/Proxy FAQ&lt;/a&gt; explains this. PL/Proxy uses the lowest N bits of the hash to decide which partition to run on, and N bits has range of 2^N, hence the limitation.&lt;br /&gt;&lt;br /&gt;At time of writing, the above FAQ isn't linked to from the &lt;a href="https://developer.skype.com/SkypeGarage/DbProjects/PlProxy"&gt;Skype project homepage&lt;/a&gt;, neither is it in CVS or in the release, but it answers a lot of questions. The other place where a lot of questions are answered is the &lt;a href="http://lists.pgfoundry.org/pipermail/plproxy-users/"&gt;plproxy-users mailing list&lt;/a&gt;, where people have already asked most of the simple questions, and had them clearly answered by the project lead.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-356956035789467848?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/356956035789467848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=356956035789467848' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/356956035789467848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/356956035789467848'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2008/12/notes-on-small-proxy-or-plproxy-lessons.html' title='Notes on a small proxy, or: &quot;PL/Proxy: lessons learnt, hints and tips&quot;'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-7118455971083413830</id><published>2008-11-27T17:50:00.001+01:00</published><updated>2008-11-27T17:51:56.730+01:00</updated><title type='text'>PostgreSQL:</title><content type='html'>They try harder. Their help system is on the windows admin client is one of the best I've ever seen. That says "attention to detail". Colour me impressed!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-7118455971083413830?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/7118455971083413830/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=7118455971083413830' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/7118455971083413830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/7118455971083413830'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2008/11/postgresql.html' title='PostgreSQL:'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-8943889911288285401</id><published>2008-11-13T15:49:00.003+01:00</published><updated>2008-11-13T15:53:09.734+01:00</updated><title type='text'>Unwrapping Oracle wrapped objects in Oracle 10g</title><content type='html'>Oracle wrapped objects are basically a really weak encryption (backed up, I imagine, by the DMCA or it's local equivalent, and well-paid lawyers), intended to give people who want to 'protect' their IP some sense of false security.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://books.google.com/books?id=OhNBJ8_wMLwC&amp;amp;pg=RA1-PA64&amp;amp;lpg=RA1-PA64&amp;amp;dq=oracle+wrapped+decryption&amp;amp;source=web&amp;amp;ots=Ip09_Tpf2k&amp;amp;sig=h-KTPIO94X1aMoBjrm4Qe13eE4c&amp;amp;hl=en&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;resnum=8&amp;amp;ct=result"&gt;"The oracle hacker's handbook" by David Litchfield&lt;/a&gt; explains the scheme as follows:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_c5NOPtXWOS0/SRw-tEzUEXI/AAAAAAAAAA4/YFTcBDbpkAM/s1600-h/quote.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 326px; height: 400px;" src="http://3.bp.blogspot.com/_c5NOPtXWOS0/SRw-tEzUEXI/AAAAAAAAAA4/YFTcBDbpkAM/s400/quote.JPG" alt="" id="BLOGGER_PHOTO_ID_5268154608220639602" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Of course, this sounds interesting, so the first thing to do is dive into the wrap.exe and see what we can see using &lt;a href="http://www.backerstreet.com/rec/"&gt;REC&lt;/a&gt;, which looks to be a pretty neat decompiler.&lt;br /&gt;&lt;br /&gt;A quick glance at the function list shows that the routine we're looking for is pki_wrap. Grepping through the Oracle files show that the method's defined in orapls10.[dll/so/whatever], as confirmed by &lt;a href="http://www.nirsoft.net/utils/dll_export_viewer.html"&gt;this nifty DLL inspection utility&lt;/a&gt;, at which point REC choked on 3.5 MB of object code, and my sorely lacking assembler skills failed me, so no propietary trade secret subsitution table for me today...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-8943889911288285401?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/8943889911288285401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=8943889911288285401' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/8943889911288285401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/8943889911288285401'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2008/11/unwrapping-oracle-wrapped-objects-in.html' title='Unwrapping Oracle wrapped objects in Oracle 10g'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_c5NOPtXWOS0/SRw-tEzUEXI/AAAAAAAAAA4/YFTcBDbpkAM/s72-c/quote.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-2398880021748653933</id><published>2008-10-10T13:09:00.002+02:00</published><updated>2008-10-10T13:14:37.511+02:00</updated><title type='text'>Say it loud...</title><content type='html'>&lt;a href="http://www.boingboing.net/2008/10/10/walmart-now-says-the.html"&gt;Cory Doctorow:&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;After &lt;a href="http://boingboing.net/2008/09/26/walmart-shutting-dow.html"&gt;announcing that they'd be shutting off their DRM servers and nuking their customers' music collections&lt;/a&gt;, Wal*Mart has changed their mind. Now they've told their customers that they'll be keeping these servers online indefinitely -- which means that they'll be paying forever for their mistaken kowtowing to the entertainment industry's DRM mania. &lt;p&gt;All those companies (cough Amazon cough Apple cough) that say they're only doing DRM for now, until they can convince the stupid entertainment execs to ditch it, heed this lesson: &lt;span style="font-weight: bold;"&gt;you will spend the rest of your corporate life paying for this mistake, maintaining infrastructure whose sole purpose is to lock your customers into a technology restriction that no one really believes in&lt;/span&gt;. Welcome to the infinite cost of doing business with Hollywood.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Watching the guys selling DRM being hoist by their own petard, now that the world has moved on, is schadenfreude of the first order...&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-2398880021748653933?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/2398880021748653933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=2398880021748653933' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/2398880021748653933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/2398880021748653933'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2008/10/say-it-loud.html' title='Say it loud...'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-2023022015779461200</id><published>2008-09-25T14:08:00.001+02:00</published><updated>2008-09-25T14:10:48.960+02:00</updated><title type='text'>Jaw, meet floor.</title><content type='html'>&lt;a href="http://www.forbes.com/home/2008/09/23/bailout-paulson-congress-biz-beltway-cx_jz_bw_0923bailout.html"&gt;&lt;span id="lingo_span" class="lingo_region"&gt;"It's not based on any particular data point," a Treasury spokeswoman told Forbes.com Tuesday. "We just wanted to choose a really large number." &lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-2023022015779461200?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/2023022015779461200/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=2023022015779461200' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/2023022015779461200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/2023022015779461200'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2008/09/jaw-meet-floor.html' title='Jaw, meet floor.'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-3617627818993321330</id><published>2008-09-24T17:25:00.006+02:00</published><updated>2009-10-16T17:10:38.404+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ec2'/><category scheme='http://www.blogger.com/atom/ns#' term='aws'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>State of play in EC2-based database hosting</title><content type='html'>&lt;a href="http://aws.typepad.com/aws/2008/09/hello-oracle.html"&gt;Oracle recently blinked&lt;/a&gt; and decided to support their DB and some other stuff on EC2. Reading the actual terms though, assuming I've understood them correctly, they haven't actually done anything other than &lt;a href="http://www.oracle.com/corporate/pricing/cloud-licensing.pdf"&gt;map EC2 virtual cores onto CPU Sockets, and let the normal rates apply&lt;/a&gt;. That's IT. What this means is that running one Oracle server for 100 hours is still 100 times more expensive (for licensing costs) than running 100 Oracle servers for one hour.&lt;br /&gt;&lt;br /&gt;That's not cloud licensing. Cloud computing works on the premise that whether you use one, 10, or 100 CPUs, you pay per CPU-hour, no more no less. That's what &lt;a href="http://aws.amazon.com/devpay/"&gt;DevPay&lt;/a&gt; does. The only problem is that in this scenario, software is a commodity, which I imagine doesn't sit too well with Oracle.&lt;br /&gt;&lt;br /&gt;Virtualisation has been around for decades, but only once FLOSS commoditized the server operating system 'ecosystem' did it become possible to do things on the scale that Amazon are doing. Back in 2005 I had a Linux VM with the inestimable &lt;a href="http://www.bytemark.co.uk/"&gt;Bytemark&lt;/a&gt;, and it was plain for all with eyes to see that virtualisation was going to pull the floor out the bottom of the server hosting market once players had found the right way to leverage the economies of scale. Right now, that's being done behind closed doors by the big players, but Amazon are the first to have thrown open the doors to the unwashed masses, and that's why I like them so much.&lt;br /&gt;&lt;br /&gt;(To repeat, I don't own stock - maybe I should :-)&lt;br /&gt;&lt;br /&gt;To get back to the point. How do databases fare on Amazon EC2? Given that EBS has only been around for a couple of weeks, and before that, on EC2, DB hosting was risking everything to a block device that could go *poof* at any moment, which wasn't exactly pleasant.&lt;br /&gt;&lt;br /&gt;This is something which will remain up in the air until someone with serious [PostGre/My]SQL-fu takes some AMIs, configures them just so, and benchmarks them. We know, right now, that &lt;a href="http://www.ukd1.co.uk/amazon-ec2-ebs-initial-benchmarks.html"&gt;on a small instance, disk throughput tops out at roughly 100 MB/s on a three-volume RAID 0 setup&lt;/a&gt;. I'm interested in seeing the speeds for EC2 and EBS on larger instances.&lt;br /&gt;&lt;br /&gt;Moving on from pure throughput, how do PostGreSQL &amp;amp; MySQL stack up on these setups? Do their respective caching mechanisms etc. work with or against this strange new environment? Enquiring minds want to know!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-3617627818993321330?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/3617627818993321330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=3617627818993321330' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/3617627818993321330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/3617627818993321330'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2008/09/state-of-play-in-cloud-based-database.html' title='State of play in EC2-based database hosting'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-6865543232897582809</id><published>2008-08-30T16:11:00.003+02:00</published><updated>2009-10-16T17:11:12.551+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ec2'/><category scheme='http://www.blogger.com/atom/ns#' term='aws'/><title type='text'>Thoughts on Amazon EC2/EBS and the "cloud computing" bandwagon</title><content type='html'>&lt;a href="http://aws.typepad.com/aws/2008/08/amazon-elastic.html"&gt;Amazon EBS&lt;/a&gt; is something that I've been waiting for ever since &lt;a href="http://www.amazon.com/EC2-AWS-Service-Pricing/b/?node=201590011"&gt;EC2&lt;/a&gt; was announced. &lt;a href="http://www.25hoursaday.com/weblog/2008/08/21/SomeThoughtsOnAmazonsElasticBlockStore.aspx"&gt;Dare Obasanjo&lt;/a&gt; rightly pegged it as the final piece of the puzzle.&lt;br /&gt;&lt;br /&gt;Right now, "cloud computing" is the buzzword of the moment. This doesn't help create clarity when discussing exactly what it is. So, my definition is:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;an API to dynamically start, stop &amp;amp; manage instances&lt;/li&gt;&lt;li&gt;per-CPU-hour and per-GB billing&lt;/li&gt;&lt;/ul&gt;This is the epitomy of "computing as a resource". Right now, plenty of people are offering cloud-computing-backed solutions, such as &lt;a href="http://code.google.com/appengine/"&gt;Google AppEngine&lt;/a&gt;, &lt;a href="http://www.joyent.com/"&gt;Joyent&lt;/a&gt; and &lt;a href="http://www.mosso.com/"&gt;Rackspace/Mosso&lt;/a&gt;. Other people have different parts of the puzzle - for example, &lt;a href="http://www.3tera.com/"&gt;3Tera&lt;/a&gt; seem to have imaging sorted out. I'm sure I've missed other companies.&lt;br /&gt;&lt;br /&gt;But nobody has what Amazon has. Want 500 servers for an hour? There's no place else to go but Amazon. So, despite all the hype about cloud computing, right now there's only one real market player that has a developed, mature product, and that is Amazon. Nobody else even comes close, and that includes Google.&lt;br /&gt;&lt;br /&gt;(And no, I don't own shares.)&lt;br /&gt;&lt;br /&gt;I was reading an article about how MS are basically building their &lt;a href="http://news.cnet.com/8301-13860_3-10020902-56.html"&gt;new datacenters around shipping containers&lt;/a&gt; full of server kit that were constructed directly by manufacturers in China or thereabouts. I can almost guess they've built a standard umbilical cable &amp;amp; docking mechanism for the containers for power, bandwidth &amp;amp; airco. Roboticise the docking/undocking, then all you'd have to do is have a small control center and a foreman to operate the gantry.&lt;br /&gt;&lt;br /&gt;To get all hand-wavey, sci-fi and "thereof I cannot speak with clue" for a minute, assuming the containers are airtight, and given that they'll never be open to humans until it's time to scrap/recycle them, why not look at using CO2 as a coolant instead of standard air conditioning? Automatic fire suppression comes free. And given that CO2 is still a gas at -70°C, why not overclock your CPUs to increase your ROI (of course, the energy you spend on cooling and the reduced lifespan of your CPUs due to overclocking is an opposite factor).&lt;br /&gt;&lt;br /&gt;If you scrub the CO2 from the atmosphere, and dispose of it safely, you may even make your datacenter carbon neutral and reap tax credits as an additional benefit... (coming soon to a cognizant country near you.)&lt;br /&gt;&lt;br /&gt;Fna fna fna.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-6865543232897582809?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/6865543232897582809/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=6865543232897582809' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/6865543232897582809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/6865543232897582809'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2008/08/thoughts-on-amazon-ec2ebs-and-cloud.html' title='Thoughts on Amazon EC2/EBS and the &quot;cloud computing&quot; bandwagon'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-3138917983905404500</id><published>2007-11-04T15:38:00.000+01:00</published><updated>2007-11-04T16:42:27.885+01:00</updated><title type='text'>Small pro-armenian demonstration broken up in Ixelles, Brussels</title><content type='html'>15:10: Was skyping with a friend of mine, when I hear chanting &amp;amp; shouting out of the window. (I live on the fourth floor flat at a crossroad.) Looking out of the window I see police everywhere, running after people. In one particular instance, I see a guy run around a corner and take off. A policeman runs after him with his hand on his holster and shouts 'Stop!', so of course the guy does. The policeman and a colleague of him approach, the guy puts his hands out, and he's handcuffed relatively gently and walked off.&lt;br /&gt;&lt;br /&gt;The main group of fleeing protestors are obscured by trees, but I see their escape route cut off by police vans. I hear some crashing and a couple of bangs, but nothing loud enough for a gunshot.&lt;br /&gt;&lt;br /&gt;I cut the Skype call, get outside, and light a cigarette, on the logic that people don't think you're going to run off or heave a brick if you're smoking. There are plenty of bystanders in any case. The first word I hear is that it's a pro-Flemish demonstration. I was thinking back to last week, when Turkish rioters set an Iranian-Kurdish cafe on fire and torched bins in Schaebeek, the predominantly Turkish quartier of Brussels.&lt;br /&gt;&lt;br /&gt;(The Turkish media has accused the EU countries of financing/supporting the P.K.K., something I find (a) difficult to believe, and (b) more likely a result of smearing all Kurds with the P.K.K. label. This probably explains that demonstration.)&lt;br /&gt;&lt;br /&gt;The police soon block off the road with vans. I speak to a policeman standing next to one of the vans, who tells me that a pro-Armenian &lt;span style="font-style: italic;"&gt;manifestation interdit&lt;/span&gt; (demonstration without a permit) was broken up. I saw some demonstrators who were just standing chatting with the police, so I assume the people who ran, did so because either they were either &lt;span style="font-style: italic;"&gt;sans papiers&lt;/span&gt; (illegal immigrants), or with temporary residence status, making them liable for deportation. (or 'cos they thought they were going to get stomped, who knows?).&lt;br /&gt;&lt;br /&gt;I counted a total of 6 police vans, 3 police cars, 2 police buses (the type meant for transporting prisoners) and one ambulance, which moved off in short order with siren blaring . Presumably there were some injured. One bus left shortly after, half-full, with about 12 handcuffed people inside. The other bus was empty.&lt;br /&gt;&lt;br /&gt;And that's all there is to tell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-3138917983905404500?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/3138917983905404500/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=3138917983905404500' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/3138917983905404500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/3138917983905404500'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2007/11/small-pro-armenian-demonstration-broken.html' title='Small pro-armenian demonstration broken up in Ixelles, Brussels'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-7134462137697022319</id><published>2007-10-03T20:42:00.001+02:00</published><updated>2007-10-03T20:53:23.124+02:00</updated><title type='text'>And so we return to the same old problem...</title><content type='html'>...trans-session execution of workflow that most people would express in flowcharts with crap like BPEL is better encapsulated in serialized continuations. Neither of which scale to web-sized loads. The alternative is, of course, saving a 'pointer' or some-such state information which is then either loaded into a honking IF statement or a sub-language parser.&lt;br /&gt;&lt;br /&gt;None of this should be necessary. Programmatic access to stacks, heaps &amp;amp; scope is something that is all technically possible in assembly.&lt;br /&gt;&lt;br /&gt;Anyway. WIBBLE.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-7134462137697022319?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/7134462137697022319/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=7134462137697022319' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/7134462137697022319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/7134462137697022319'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2007/10/and-so-we-return-to-same-old-problem.html' title='And so we return to the same old problem...'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-1744044582061501005</id><published>2007-09-20T01:05:00.001+02:00</published><updated>2007-09-20T01:29:02.471+02:00</updated><title type='text'>JSP...</title><content type='html'>&lt;rant&gt;The whole Enterprise mentality (aside from the many ways in which it is already monolithically stupid) of deployables &amp;amp; artifacts &amp;amp;c. is all very nice, but you can't build a development cycle around that. That's why PHP and RoR is so nice. To continue incoherently:&lt;br /&gt;&lt;/rant&gt;&lt;ul&gt;&lt;li&gt;How do you implement visitor pattern widget rendering when what your visitor does, is output HTML? If you're trying to play nice with JSP?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;In fact, the whole template/code dichotomy is false.&lt;/li&gt;&lt;li&gt;Why can't you write JSP functions?&lt;/li&gt;&lt;li&gt;In scripting languages, you can have your configuration in the same language as your code. Because Java is compiled, you can't.&lt;/li&gt;&lt;li&gt;90% of webapp operations involve reading from storage, interleaving the data with HTML, and outputting the response. Why on Earth would you want an MVC paradigm in the middle of that? Putting the model in memory increases your memory load, the controller does nothing interesting. How did this become best practice in the world of Java for simple read views?&lt;/li&gt;&lt;li&gt;JSTL is crap. The Collections support is pitiful, it can't even support Collection.contains(), and (what would actually fix this stuff) you can't invoke arbitrary methods. When you see people making their configuration classes override Maps and doing crap like &lt;a href="http://www.javaworld.com/javaworld/jw-05-2003/jw-0523-calltag.html?page=5"&gt;this&lt;/a&gt; and &lt;a href="http://technology.amis.nl/blog/?p=622"&gt;this &lt;/a&gt;to work around these stupid self-imposed limitations, then you &lt;span style="font-style: italic;"&gt;know&lt;/span&gt; you've messed up.&lt;/li&gt;&lt;/ul&gt;Grr.&lt;br /&gt;&lt;br /&gt;AND, maybe I'm wrong, but why aren't JSTL variables as 'scriptlet' variables, like most semi-sane tag libraries (e.g. Struts) does? WTF. Oh dear, I've lost my temper again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-1744044582061501005?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/1744044582061501005/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=1744044582061501005' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/1744044582061501005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/1744044582061501005'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2007/09/jsp.html' title='JSP...'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-3284887523690110038</id><published>2007-08-01T00:17:00.000+02:00</published><updated>2007-08-01T00:22:36.078+02:00</updated><title type='text'>FB API Redux</title><content type='html'>&lt;ul&gt;&lt;li&gt;Why the Hell is a user GET converted into a POST before it hits the app webserver? This is just semantically wrong, and you'd expect an API that's all RESTful &amp;amp;c. to be able to get its verbs right. This invalidates a whole bunch of pre-built web logic that lots of people have put a lot of thought into providing.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Maybe I'm spoilt by being a corporate developer, but the Java API is a bit poor. No test-cases, no POM, no javadocs, pff. Not that it stops me from doing anything, but it would reduce friction a lot.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-3284887523690110038?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/3284887523690110038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=3284887523690110038' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/3284887523690110038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/3284887523690110038'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2007/08/fb-api-redux.html' title='FB API Redux'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-6394800885093698338</id><published>2007-06-10T01:03:00.001+02:00</published><updated>2007-11-15T18:08:34.560+01:00</updated><title type='text'>FB encore</title><content type='html'>Written 06/10/07 baby, predictive or wot :-)&lt;br /&gt;&lt;br /&gt;OK. I may be late to the party, but as ever, I make up for it with boundless enthusiasm. With FB, if this stays independent, this is disruptive, more disruptive than Google, because it directly affects people in the real world. Fit the first.&lt;br /&gt;&lt;br /&gt;Fit the second, I expect the big web players to do their utmost to stomp on this quick, or compete like Hell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-6394800885093698338?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/6394800885093698338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=6394800885093698338' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/6394800885093698338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/6394800885093698338'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2007/06/fb-encore.html' title='FB encore'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-6102581162473925289</id><published>2007-06-08T00:03:00.000+02:00</published><updated>2007-06-08T00:06:49.798+02:00</updated><title type='text'>The FaceBook API</title><content type='html'>Very nice. Might even use it, some time soon even. BUT: maybe I don't get the threat model here, but the use of MD5 as a hashing algorithm is kinda anachronistic - MD5 was broken years ago. Anyhoo. Watch this space, maybe.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-6102581162473925289?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/6102581162473925289/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=6102581162473925289' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/6102581162473925289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/6102581162473925289'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2007/06/facebook-api.html' title='The FaceBook API'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-8611174052934001145</id><published>2007-06-02T18:52:00.000+02:00</published><updated>2007-06-02T18:58:30.254+02:00</updated><title type='text'>Hum, better write something here I guess</title><content type='html'>So, why is this dormant?&lt;br /&gt;&lt;br /&gt;Simple, by way of metaphor:&lt;br /&gt;&lt;br /&gt;Today I redownloaded the demo of StarCraft, a game I've played and loved in the past. Completing the final mission, meticulously exterminating Zerg with ranked Siege Tanks (the only sure way to have zero friendly casualties on lower levels), it occurs to me:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-style: italic;"&gt;I'm wasting my time.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;There is stimulus in winning a game, but it's artificial stimulus, without use in the real world. That's why I stopped (now I remember - like eating McFood, occaisionally you forget why you don't eat it, so you eat it again...)&lt;br /&gt;&lt;br /&gt;Anyway. So.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-8611174052934001145?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/8611174052934001145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=8611174052934001145' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/8611174052934001145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/8611174052934001145'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2007/06/hum-better-write-something-here-i-guess.html' title='Hum, better write something here I guess'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-116751413300212736</id><published>2006-12-30T21:26:00.000+01:00</published><updated>2006-12-30T23:16:29.146+01:00</updated><title type='text'>Amazon S3: first impressions</title><content type='html'>So, as per my normal proclivities, I have read all available documentation and hereby declare myself an expert on the subject.&lt;br /&gt;&lt;br /&gt;Looking at the press on &lt;a href="http://developer.amazonwebservices.com/connect/kbcategory.jspa?categoryID=46"&gt;S3&lt;/a&gt;, particularly looking at the &lt;a href="http://smugmug.com/"&gt;smugmug&lt;/a&gt; success story, I'd got the impression that S3 was more than a large pay-per-use filesystem, which it's not. It is, however, a very, very well thought-out large-scale decentralized high-availability filesystem, which is not to be sniffed at.&lt;br /&gt;&lt;br /&gt;However, I don't understand why SSL is (or is intended to be) mandatory for SOAP requests, whereas it's not (as far as I can tell) for the REST API. I'm sure there's logic to the design choice, but anyway.&lt;br /&gt;&lt;br /&gt;My other comment is that, given the ability to can attach metadata to objects, it's kind've a shame you can't query on that metadata, even at a relatively simple level. This would be great for e.g. the purposes of tagging, although sundry other use cases present themselves, if you think of the potential of storing stuctured, as opposed to opaque, data.&lt;br /&gt;&lt;br /&gt;Despite the above gruntles, Amazon are still closer than any other player to reaching a true commoditization of the basic computing resources: CPU time, storage space, and bandwidth. As &lt;a href="http://www.oreillynet.com/pub/a/network/2006/12/20/web-20-bezos.html?"&gt;Bezos says&lt;/a&gt;, there's an awful lot of friction involved in setting up a web service. Anything that can reduce that interests me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-116751413300212736?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/116751413300212736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=116751413300212736' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/116751413300212736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/116751413300212736'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2006/12/amazon-s3-first-impressions.html' title='Amazon S3: first impressions'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-116605295409165637</id><published>2006-12-14T00:21:00.001+01:00</published><updated>2006-12-14T00:39:01.916+01:00</updated><title type='text'>ISS, BXL, XMPP, SNAFU</title><content type='html'>&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.metafilter.com/mefi/56972"&gt;Watching ISS debug their solar arrays in real-time&lt;/a&gt; is not something I would have thought possible for normal mortals ten years ago. What's also funny is that all they really need is for someone to poke at it with a stick, but it's in space, so...&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Cycling in Brussels, Belgium: tram rails, being essentially slippery-when-wet metal-lined grooves in the road, approximately the same width as a thin bike tyre, must not be navigated at ~&lt;30&gt;&lt;/li&gt;&lt;li&gt;I am amiss in not mentioning that &lt;a href="http://groups.google.com/group/xmpp4moz-user"&gt;xmpp4moz&lt;/a&gt; has pretty much done everything I dreamt of doing re: adding an XMPP engine inside FF, and is an impressive piece of work. Preliminary fiddling shows that binding new native functions to the top-level window object, or adding new types of events, is Not Simple. Considerable coolness has already taken place.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Were I not so busy at work, I would dive into this head first.&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-116605295409165637?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/116605295409165637/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=116605295409165637' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/116605295409165637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/116605295409165637'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2006/12/iss-bxl-xmpp-snafu.html' title='ISS, BXL, XMPP, SNAFU'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-115360502278914245</id><published>2006-07-22T23:23:00.000+02:00</published><updated>2006-07-23T00:31:16.070+02:00</updated><title type='text'>E4X and the DOM: another take on conversion, more reasons to "grr".</title><content type='html'>So, here's me writing my cool graphing thing (if this were in sillyvalley, it could easily be half the IP assets of a startup and the key to USD1M funding :-p), when, looking for real-world e4x examples I find an &lt;a href="http://ecmanaut.blogspot.com/2006/03/e4x-and-dom.html"&gt;interesting blog post by ecmanaut&lt;/a&gt; linking to &lt;a href="http://www.archivesat.com/post262420.htm"&gt;this email by Mor Roses&lt;/a&gt;, chiefly concerning the lack of E4X&lt;-&gt;DOM, e.g. (to take Johan's example) bemoaning the impossibility of &lt;code&gt;node.appendChild( &amp;lt;img src="url" /&amp;gt;&lt;/code&gt; ).&lt;br /&gt;&lt;br /&gt;Me, I'm 100% in agreement that this kind of thing is a definite oversight, but when one considers that the DOM API is governed by the W3C while E4X and ECMAScript are both ECMA standards, one could charitably understand why ECMA didn't want to tread on a fellow standards body's toes. Or, more cynically, promote the use of competing specs.&lt;br /&gt;&lt;br /&gt;Anyway. This becomes one more hurdle at the presentation level, which I can live with.  After having written DOM-driven SAX event drivers and DOM-constructing SAX event handlers,  not even touching XMLPull etc., why not add another to the mix? Bring the noise.&lt;br /&gt;&lt;br /&gt;Which brings me to my next point, which is that I can rarely resist using JS code that I haven't fiddled with. The functions in the above links are functionally perfect, but I don't get why the XMLNS is hard-coded and not passed as an argument, since FF can grok SVG and MathML now. Conversely, the mime type of "text/xml" is a static constant, when, for the purposes of the parser, it will never change. Additionally, having a Java background means I instinctively namespace my code, meaning I don't have to assign anything to the function properties.&lt;br /&gt;&lt;br /&gt;My purely aesthetic revision:&lt;br /&gt;&lt;br /&gt;&lt;style type="text/css"&gt;&lt;!-- .TPtext { color: #000000; background-color: #FFFFFF; } .TPkeyword1 { color: #0000FF; background-color: #FFFFFF; } .TPkeyword3 { color: #000080; background-color: #FFFFFF; } .TPcomment { color: #008000; background-color: #FFFFFF; } .TPnumber { color: #000000; background-color: #FFFFFF; } .TPstring { color: #008080; background-color: #FFFFFF; } .TPbracket { color: #FF0000; background-color: #FFFFFF; } .TPoperator { color: #000000; background-color: #FFFFFF; } --&gt;&lt;/style&gt;&lt;pre&gt;lib.util.e4x2dom &lt;span class="TPoperator"&gt;= &lt;/span&gt;&lt;span class="TPkeyword1"&gt;function&lt;/span&gt;&lt;span class="TPbracket"&gt;(&lt;/span&gt;xmlObj, xmlObjNs, doc&lt;span class="TPbracket"&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="TPkeyword1"&gt;if&lt;/span&gt;&lt;span class="TPbracket"&gt;(&lt;/span&gt;&lt;span class="TPoperator"&gt;!&lt;/span&gt;doc&lt;span class="TPbracket"&gt;) &lt;/span&gt;doc &lt;span class="TPoperator"&gt;= &lt;/span&gt;&lt;span class="TPkeyword3"&gt;document&lt;/span&gt;;&lt;br /&gt;&lt;span class="TPkeyword1"&gt;if&lt;/span&gt;&lt;span class="TPbracket"&gt;(&lt;/span&gt;&lt;span class="TPoperator"&gt;!&lt;/span&gt;xmlObjNs&lt;span class="TPbracket"&gt;) &lt;/span&gt;xmlObjNs &lt;span class="TPoperator"&gt;= &lt;/span&gt;NS_HTML;&lt;br /&gt;&lt;br /&gt;&lt;span class="TPkeyword1"&gt;var &lt;/span&gt;xmlRootObj &lt;span class="TPoperator"&gt;= &amp;lt;&lt;/span&gt;root xmlns&lt;span class="TPoperator"&gt;=&lt;/span&gt;&lt;span class="TPbracket"&gt;{&lt;/span&gt;xmlObjNs&lt;span class="TPbracket"&gt;} &lt;/span&gt;&lt;span class="TPoperator"&gt;/&amp;gt;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span class="TPkeyword1"&gt;if&lt;/span&gt;&lt;span class="TPbracket"&gt;(&lt;/span&gt;&lt;span class="TPoperator"&gt;!&lt;/span&gt;lib.util.e4x2dom.parser&lt;span class="TPbracket"&gt;) &lt;/span&gt;lib.util.e4x2dom.parser &lt;span class="TPoperator"&gt;= &lt;/span&gt;&lt;span class="TPkeyword1"&gt;new &lt;/span&gt;DOMParser&lt;span class="TPbracket"&gt;()&lt;/span&gt;; &lt;span class="TPcomment"&gt;//one time initialisation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;xmlRootObj.firstChild&lt;span class="TPoperator"&gt;=&lt;/span&gt;xmlObj;&lt;br /&gt;&lt;br /&gt;&lt;span class="TPkeyword1"&gt;var &lt;/span&gt;domTree&lt;span class="TPoperator"&gt;=&lt;/span&gt;lib.util.e4x2dom.parser.parseFromString&lt;span class="TPbracket"&gt;(&lt;/span&gt;xmlRootObj.toXMLString&lt;span class="TPbracket"&gt;()&lt;/span&gt;, &lt;span class="TPstring"&gt;"text/xml"&lt;/span&gt;&lt;span class="TPbracket"&gt;)&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span class="TPkeyword1"&gt;var &lt;/span&gt;importMe&lt;span class="TPoperator"&gt;=&lt;/span&gt;domTree.documentElement.firstChild;&lt;br /&gt;&lt;br /&gt;&lt;span class="TPkeyword1"&gt;while&lt;/span&gt;&lt;span class="TPbracket"&gt;(&lt;/span&gt;importMe &lt;span class="TPoperator"&gt;&amp;&amp;amp; &lt;/span&gt;importMe.nodeType&lt;span class="TPoperator"&gt;!=&lt;/span&gt;&lt;span class="TPnumber"&gt;1&lt;/span&gt;&lt;span class="TPbracket"&gt;) {&lt;/span&gt;&lt;br /&gt;     importMe&lt;span class="TPoperator"&gt;=&lt;/span&gt;importMe.nextSibling;&lt;br /&gt;&lt;span class="TPbracket"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="TPkeyword1"&gt;return &lt;/span&gt;&lt;span class="TPbracket"&gt;(&lt;/span&gt;importMe&lt;span class="TPbracket"&gt;) &lt;/span&gt;? doc.importNode&lt;span class="TPbracket"&gt;(&lt;/span&gt;importMe,&lt;span class="TPkeyword1"&gt;true&lt;/span&gt;&lt;span class="TPbracket"&gt;)&lt;/span&gt;:&lt;span class="TPkeyword1"&gt;null&lt;/span&gt;;&lt;br /&gt;&lt;span class="TPbracket"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;Here's hoping that blogspot doesn't mangle my escaped &amp; formatted characters.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;HAVING SAID THAT,&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A second consequence of the unwanted duality is (joy!) complete lack of access to DOM-specific functions. In HTML this isn't such a big deal, but in SVG when you construct text elements, the &lt;span style="font-family:courier new;"&gt;getComputedTextLength()&lt;/span&gt; method is invaluable and is often used during the construction of the element, i.e. in my case when it's still in E4X and not in DOM.&lt;br /&gt;&lt;br /&gt;So this is what I'm left with:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span class="TPkeyword1"&gt;var &lt;/span&gt;&lt;span class="TPkeyword3"&gt;text &lt;/span&gt;&lt;span class="TPoperator"&gt;= &lt;/span&gt;&lt;span class="TPstring"&gt;"foo bar"&lt;/span&gt;;&lt;br /&gt;&lt;span class="TPkeyword1"&gt;var &lt;/span&gt;textDOM &lt;span class="TPoperator"&gt;= &lt;/span&gt;&lt;span class="TPkeyword3"&gt;document&lt;/span&gt;.createElement&lt;span class="TPbracket"&gt;(&lt;/span&gt;&lt;span class="TPstring"&gt;"text"&lt;/span&gt;&lt;span class="TPbracket"&gt;)&lt;/span&gt;;&lt;br /&gt;textDOM.&lt;span class="TPkeyword2"&gt;appendChild&lt;/span&gt;&lt;span class="TPbracket"&gt;(&lt;/span&gt;&lt;span class="TPkeyword3"&gt;document&lt;/span&gt;.createTextNode&lt;span class="TPbracket"&gt;(&lt;/span&gt;&lt;span class="TPkeyword3"&gt;text&lt;/span&gt;&lt;span class="TPbracket"&gt;))&lt;/span&gt;;&lt;br /&gt;&lt;span class="TPkeyword1"&gt;var &lt;/span&gt;textE4X &lt;span class="TPoperator"&gt;= &amp;lt;&lt;/span&gt;&lt;span class="TPkeyword3"&gt;text y=&lt;/span&gt;&lt;span class="TPstring"&gt;"&lt;/span&gt;&lt;span class="TPstring"&gt;0"&lt;/span&gt;&lt;span class="TPkeyword3"&gt; &lt;/span&gt;x&lt;span class="TPoperator"&gt;=&lt;/span&gt;&lt;span class="TPbracket"&gt;{&lt;/span&gt;textDOM.getComputedTextLength&lt;span class="TPbracket"&gt;()}&lt;/span&gt;&lt;span class="TPoperator"&gt;&amp;gt;&lt;/span&gt;&lt;span class="TPbracket"&gt;{&lt;/span&gt;&lt;span class="TPkeyword3"&gt;text&lt;/span&gt;&lt;span class="TPbracket"&gt;}&lt;/span&gt;&lt;span class="TPoperator"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="TPkeyword3"&gt;text&lt;/span&gt;&lt;span class="TPoperator"&gt;&amp;gt;&lt;/span&gt;;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Which is a nasty hack, to put it nicely. No code that touches the real world will ever be perfect.&lt;br /&gt;&lt;br /&gt;Addendum: the above snippet doesn't work. The text has to be rendered before FF can give me a length. Foo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-115360502278914245?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/115360502278914245/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=115360502278914245' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/115360502278914245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/115360502278914245'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2006/07/e4x-and-dom-another-take-on-conversion.html' title='E4X and the DOM: another take on conversion, more reasons to &quot;grr&quot;.'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-114798868914654883</id><published>2006-05-18T22:53:00.000+02:00</published><updated>2006-05-18T23:44:54.686+02:00</updated><title type='text'>The rules of crunch time, v2.0.1alpha</title><content type='html'>(Although they're actually considered more as guidelines.)&lt;br /&gt;&lt;br /&gt;So, it has been &lt;span style="font-style: italic;"&gt;a year and a half&lt;/span&gt; &lt;a href="http://ianso.blogspot.com/2004/12/ians-rules-of-crunch-time.html"&gt;since I last went ridiculously overboard&lt;/a&gt; as geeks are wont to do, and sacrificed sleep and sanity for a dream. In the end I went to SF anyway, and the whole thing was Most Definitely Worth It.&lt;br /&gt;&lt;br /&gt;Now, fast-forward, and I'm doing it again, professionally this time, meaning that it's not &lt;span style="font-style: italic;"&gt;my&lt;/span&gt; Big Idea that I'm working on - it's Mr. Architect who has the visions - but it is my team, and to Serve with Comrades in the hope of a Bright Shining Future is the lifeblood of all &lt;span style="font-size:78%;"&gt;(knowledge-)&lt;/span&gt; workers, n'est pas? Вся власть народу трудовому! etc.&lt;br /&gt;&lt;br /&gt;Ahem.&lt;br /&gt;&lt;br /&gt;Given that some time has passed, I feel it necessary to add and/or emphasize certain elements of the &lt;a href="http://ianso.blogspot.com/2004/12/ians-rules-of-crunch-time.html"&gt;previous list&lt;/a&gt;, based on experience:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;I said that &lt;span style="font-weight: bold;"&gt;Exhaustion drastically affects quality of work&lt;/span&gt; and this is true, but it also affects morale. This is why having great people in your team is important.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Food and coffee&lt;/span&gt;, both still important, but food more than ever. Something that deserves emphasis is that lots of fresh fruit and vegetables makes an incredible difference to state of mind. This stuff is &lt;span style="font-style: italic;"&gt;healthy&lt;/span&gt;, dagnamnit, so no more McQuick!&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Still true&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Still true&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Sleep&lt;/span&gt;: cutting out sleep is bad, of course, but sleep patterns and schedules can be modified to tune for maximum productivity. One of the biggest gains is to be had by going to bed early (like I'm not, today) and waking up early too. Getting to work at closer to 07:00 than 09:00 &lt;span style="font-style: italic;"&gt;&lt;/span&gt;gives you an appreciable chunk of highly productive time.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Still true.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;This point - support mechanisms - deserves to be expanded much more.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;a href="http://www.igda.org/articles/erobinson_crunch.php"&gt;Crunch mode doesn't work for more than a couple of months&lt;/a&gt;, but for short periods of time we do it anyway, because once the visceral fear of missing a &lt;span style="font-style: italic;"&gt;real&lt;/span&gt; Dead Line takes hold, people tend to go into overdrive as an evolved response to high-pressure environments.&lt;br /&gt;&lt;br /&gt;One of the biggest symptoms of increased work pressure is sacrifices made in other parts of one's life - relationships, interests, etc. This is not good because these things are all &lt;span style="font-weight: bold;"&gt;psychological support mechanisms&lt;/span&gt; that you need to leverage if you want to be able to push yourself to extremes.&lt;br /&gt;&lt;br /&gt;This is why energy is so important: not only are you &lt;span style="font-style: italic;"&gt;working&lt;/span&gt; harder than normal, you should also be &lt;span style="font-style: italic;"&gt;relaxing&lt;/span&gt; harder than normal as well. Dependent or abusive mechanisms will simply make things worse in this situation. High pressure at work in turn puts pressure on everything else in your life, and everything has to withstand.&lt;br /&gt;&lt;br /&gt;Thankfully I have great friends, a great family, and a Deity (to help with debugging :-), so with their love and understanding I'm dealing with everything fine. So far...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-114798868914654883?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/114798868914654883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=114798868914654883' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/114798868914654883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/114798868914654883'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2006/05/rules-of-crunch-time-v201alpha.html' title='The rules of crunch time, v2.0.1alpha'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-114573768904606101</id><published>2006-04-22T22:23:00.000+02:00</published><updated>2006-04-22T22:28:47.756+02:00</updated><title type='text'>Skypephone / mouse combo:</title><content type='html'>This &lt;a href="http://www.ecat.sony.co.jp/vaio/acc/acc.cfm?PD=23389"&gt;mousephone&lt;/a&gt; from Sony (Japan) is a step towards &lt;a href="http://ianso.blogspot.com/2005/01/camera-phones-as-mice-v2.html"&gt;what I've&lt;/a&gt; &lt;a href="http://ianso.blogspot.com/2004/07/camera-phones-as-mice.html"&gt;posted about&lt;/a&gt; on different occasions, which is basically that handsets are becoming more of a true TCB than smartcards or Palms ever will.&lt;br /&gt;&lt;br /&gt;What's added by this is that the clamshell design is obviously a great way to hide the "phone" nature of the chunk of plastic when it's not being used in that manner. Smart thinking. Apple, your iPhone should do this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-114573768904606101?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/114573768904606101/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=114573768904606101' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/114573768904606101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/114573768904606101'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2006/04/skypephone-mouse-combo.html' title='Skypephone / mouse combo:'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-114212536008229612</id><published>2006-03-12T00:59:00.000+01:00</published><updated>2006-03-12T02:05:28.423+01:00</updated><title type='text'>"open source music"</title><content type='html'>Various OSS people get the idea now and again of creating "open source" music distribution channels with the aim of disintermediating the big four. This is commendable, but the strategic aim is more likely to be accomplished by other channels such as CDBaby and iTunes. For history's sake, I should note that the idea was mooted much more heavily in the post-Napster era, before Apple did their thing.&lt;br /&gt;&lt;br /&gt;What makes these new channels so dangerous to the entrenched model is ironically the very feature that model has evolved to perpetuate itself: the artificial hit mentality. There only needs to be one artist that achieves the success of Coldplay or Jack Johnson while remaining totally outside the system, and the perceived monopoly power of the big four disappears.&lt;br /&gt;&lt;br /&gt;But this is not the aim of my post. People often characterise the "open source music" model as one that exhibits the same features as the open source world:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;no dollar-cost barrier to entry/use&lt;br /&gt;&lt;/li&gt;&lt;li&gt;gift culture among producers&lt;/li&gt;&lt;li&gt;community among consumers&lt;/li&gt;&lt;li&gt;Freedom, if you're an FSF guy.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;This ignores what open source is &lt;span style="font-style: italic;"&gt;actually&lt;/span&gt; about, which is pooling skill and time to create software. The above attributes are the output of the system, not the input.&lt;br /&gt;&lt;br /&gt;It should also be noted that the above attributes are &lt;span style="font-style: italic;"&gt;not even the most important&lt;/span&gt; outputs of the OSS process, nor are they uniformly present among OSS projects. The most important output is the source: the preferred form for working on the project. The source is the most important output of an OSS project and can also be the input for it's own project and others.&lt;br /&gt;&lt;br /&gt;Taking this into account, what is open source music? A piece of open source music comes with:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;the finished product&lt;/li&gt;&lt;li&gt;the sheet music if necessary, in a notation such as &lt;a href="http://lilypond.org/web/"&gt;LilyPond&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;all the samples used, if any&lt;/li&gt;&lt;li&gt;all the tracks (vocal, beat, etc.) as separate files&lt;/li&gt;&lt;li&gt;details of configurations used to produce any effects&lt;/li&gt;&lt;li&gt;etc.&lt;/li&gt;&lt;/ul&gt;To make this plain, open source music gives away the source, and the score, just as open source software does.&lt;br /&gt;&lt;br /&gt;Now, I've spoken to artists about this, and the two things they all came back with are (a) it'd be great to have, (b) nobody will ever do it because of the loss of control over their creative output. And sadly, they're probably right on both points. I think there's a bit that needs flipping in the collective unconscious for this to ever happen on an appreciable scale.&lt;br /&gt;&lt;br /&gt;The point: open source music is not the same as free music. A whole bunch of stuff goes into creating music that we as 'consumers' never see, and this has to hit the 'net along with the finished /.mp3/.flac for any piece of music to qualify as being open source.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-114212536008229612?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/114212536008229612/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=114212536008229612' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/114212536008229612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/114212536008229612'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2006/03/open-source-music.html' title='&quot;open source music&quot;'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-114099740088537913</id><published>2006-02-27T00:37:00.000+01:00</published><updated>2006-04-05T16:59:44.056+02:00</updated><title type='text'>More frontend ranting.</title><content type='html'>Firstly and most importantly, &lt;a href="http://mrl.nyu.edu/%7Ejhan/ftirtouch/"&gt;this is absolutely mindblowing, and I WANT ONE, Apple take note!&lt;/a&gt; etc. This hit the 'sphere about ten years ago but I also want to note it here.&lt;br /&gt;&lt;br /&gt;Secondly, I have said many times before and I will say it again, defining page navigation as traversal within a directed state graph is a short, weak substitute for using a powerful language able to express arbitrarily complex logic, i.e. a programming language equipped with continuations, such as Ruby, Lisp, or &lt;a href="http://jakarta.apache.org/commons/sandbox/javaflow/"&gt;Java&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Fourthly, most of what is written in a modern frontend should not be. We have page-&gt;BOM and BOM-&gt; page inference/generation, smart binding code and ActiveRecord to light the way. XML config syntaxes and convoluted frameworks are not the answer. Java framework developers have no excuse for making their end-users write XML with the arrival of annotations in 1.5.&lt;br /&gt;&lt;br /&gt;A good solution makes the simple things easy and the complex things possible. Too often, we make the simple things stupid and the complex things idiotic.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-114099740088537913?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/114099740088537913/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=114099740088537913' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/114099740088537913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/114099740088537913'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2006/02/more-frontend-ranting.html' title='More frontend ranting.'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-113837074669321706</id><published>2006-01-27T15:04:00.000+01:00</published><updated>2006-02-27T00:43:43.200+01:00</updated><title type='text'>The more I learn about HTML, HTTP, and charsets...</title><content type='html'>&lt;a href="http://ppewww.ph.gla.ac.uk/%7Eflavell/charset/form-i18n.html"&gt;The more surprised I become that the whole mess works at all.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-113837074669321706?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/113837074669321706/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=113837074669321706' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/113837074669321706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/113837074669321706'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2006/01/more-i-learn-about-html-http-and.html' title='The more I learn about HTML, HTTP, and charsets...'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-113753927294685141</id><published>2006-01-17T23:21:00.000+01:00</published><updated>2006-02-27T01:01:49.146+01:00</updated><title type='text'>Idempotent event queue in JavaScript for use with Behaviour, etc.</title><content type='html'>[caveat: my original copy now does more, i.e. copies arguments and uses "this" properly. Will paste in later.]&lt;br /&gt;&lt;br /&gt;So anyway, there's me using my (modified) copy of the very groovy &lt;a href="http://bennolan.com/behaviour/"&gt;Behaviour&lt;/a&gt; to extract all the JavaScript from my nice clean semantic HTML(or JSP (*cough* bleh)), and wondering how I ever lived with the mish-mash I just rescued.&lt;br /&gt;&lt;br /&gt;Generally speaking, Behaviour rulesets are applied on page load, (hence &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;Behaviour.addLoadEvent&lt;/span&gt;&lt;/span&gt;), whereupon all the selectors in all the rulesets are evaluated and all the events are assigned and added.&lt;br /&gt;&lt;br /&gt;However, whenever the page changes (as a result of the &lt;a href="http://prototype.conio.net/"&gt;Prototype&lt;/a&gt; &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;Ajax.Updater&lt;/span&gt;&lt;/span&gt;, for example), the standard way of ensuring that the rules still apply is to call &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;Behaviour.apply()&lt;/span&gt;&lt;/span&gt; again, which re-assigns all the events to all the elements etc.&lt;br /&gt;&lt;br /&gt;BUT, we have two issues here. Fit the first: suppose one element matches two selectors. If we assign our events in the normal way that works 90% of the time, as follows (to take a simple example):&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;".button" : function(el) { el.onclick = pressButton(el.id); },&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;".important" : function(el) { el.onclick = warn("Atchung!"); }, //...&lt;br /&gt;&lt;br /&gt;For this element:&lt;br /&gt;&amp;lt;a class="important button"&amp;gt;click&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;Here, two events (one for each rule) would be assigned to the same element, and the first one would overwrite the second one since &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;el.onclick&lt;/span&gt;&lt;/span&gt; can only ever be one thing.&lt;br /&gt;&lt;br /&gt;The standard answer to this is simply to use &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;addEventListener&lt;/span&gt;&lt;/span&gt; (FF/W3C) or &lt;span style=";font-family:courier new;font-size:85%;"  &gt;attachEvent&lt;/span&gt;(MS). This solves our first problem. A second possible answer is to adapt &lt;a href="http://simon.incutio.com/archive/2004/05/26/addLoadEvent"&gt;Simon Willison's &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;addLoadEvent&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; code to enable the addition of multiple functions to arbitrary events, as follows:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;/*functionally equivalent to the original*/&lt;br /&gt;function addLoadEvent(func) {&lt;br /&gt;addEvent(window, "onload", func);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*generic version*/&lt;br /&gt;function addEvent(obj, evt, func) {&lt;br /&gt;var oldEvt = obj[evt];&lt;br /&gt;if (typeof oldEvt != 'function') {&lt;br /&gt; obj[evt] = func;&lt;br /&gt;} else {&lt;br /&gt;obj[evt] = function() {&lt;br /&gt; oldEvt();&lt;br /&gt; func();&lt;br /&gt;}&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;HOWEVER, when adding events using &lt;span style=";font-family:courier new;font-size:85%;"  &gt;addEventListener&lt;/span&gt;, &lt;span style=";font-family:courier new;font-size:85%;"  &gt;attachEvent&lt;/span&gt;, or &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;addEvent&lt;/span&gt;&lt;/span&gt;, subsequent calls to &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;Behaviour.apply()&lt;/span&gt;&lt;/span&gt; will re-add new events to the same elements, with the result that events added via Behaviour will fire once for each re-application of the given ruleset, i.e. potentially far too many times.&lt;br /&gt;&lt;br /&gt;The code that demonstrates this is as follows:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;var f = function() { alert("foo"); };&lt;br /&gt;&lt;br /&gt;var o = new Object();&lt;br /&gt;&lt;br /&gt;addEvent(o, "bang", f);&lt;br /&gt;addEvent(o, "bang", f);&lt;br /&gt;addEvent(o, "bang", f);&lt;br /&gt;&lt;br /&gt;o.bang(); &lt;/pre&gt;With this example, using the above addEvent code (and the addEventListener etc. (although I haven't tested it and I'd look mighty stupid if I'm wrong)), the "foo" alert will appear three times. This is not what we want.&lt;br /&gt;&lt;br /&gt;My solution was to write my own event queue for which the "add" function was idempotent. This means that adding the same function three times (as above) has no effect on the second and third time. (More properly, an idempotent operation is one in which one or many executions is functionally identical.)&lt;br /&gt;&lt;br /&gt;This requires the ability to compare functions, and luckily the &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;toString() &lt;/span&gt;&lt;/span&gt;of a &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;Function &lt;/span&gt;&lt;/span&gt;object returns the source of that function - the ideal way to find identical chunks of code.&lt;br /&gt;&lt;br /&gt;So, without further ado:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;/*&lt;br /&gt;this is functionally equivalent with the original - for reverse&lt;br /&gt;compatibility&lt;br /&gt;*/&lt;br /&gt;function addLoadEvent(func) {&lt;br /&gt;addEvent(window, "onload", func);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;usage as above, e.g. addEvent(element, "onclick", function() {} );&lt;br /&gt;generalized and adapted from&lt;br /&gt;http://simon.incutio.com/archive/2004/05/26/addLoadEvent&lt;br /&gt;*/&lt;br /&gt;function addEvent(obj, evt, func) {&lt;br /&gt;var oldFunc = obj[evt];&lt;br /&gt;&lt;br /&gt;if (typeof oldFunc != 'function') {&lt;br /&gt; obj[evt] = getEvent();&lt;br /&gt; obj[evt].addListener(func);&lt;br /&gt;} else {&lt;br /&gt; if(oldFunc.__EVT_LIST) {&lt;br /&gt;  obj[evt].addListener(func);&lt;br /&gt; } else {&lt;br /&gt;  obj[evt] = getEvent();&lt;br /&gt;  obj[evt].addListener(oldFunc);&lt;br /&gt;  obj[evt].addListener(func);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;this could be put within the above function, but that causes a memory&lt;br /&gt;leak in IE&lt;br /&gt;*/&lt;br /&gt;function getEvent() {&lt;br /&gt;var list = [];&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;this extends the array instance to allow&lt;br /&gt;for string comparison of functions&lt;br /&gt;*/&lt;br /&gt;list.hasFunction = function(val) {&lt;br /&gt; for (var i = 0; i != this.length; i++) {&lt;br /&gt;  if(this[i].toString() == val.toString()) return true;&lt;br /&gt; }&lt;br /&gt; return false;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;this is the actual function that is called when the event is fired.&lt;br /&gt;if any of the listeners return false, then false is returned,&lt;br /&gt;otherwise true&lt;br /&gt;*/&lt;br /&gt;var result = function(event) {&lt;br /&gt; var finalResult = true;&lt;br /&gt; for(var i = 0; i != list.length; i++) {&lt;br /&gt;  var evtResult = list[i](event);&lt;br /&gt;  if(evtResult == false) finalResult = false;&lt;br /&gt; }&lt;br /&gt; return finalResult;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;this is the function on the event that adds a listener&lt;br /&gt;*/&lt;br /&gt;result.addListener = function(f) {&lt;br /&gt; if(f == null) return;&lt;br /&gt; if(list.hasFunction(f)) return;&lt;br /&gt; list.push(f);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;this is a debug function - feel free to remove&lt;br /&gt;usage example: window.onload.list();&lt;br /&gt;*/&lt;br /&gt;result.list = function() {&lt;br /&gt; var log = "";&lt;br /&gt; for(var i = 0; i != list.length; i ++) {&lt;br /&gt;  log += "&amp;lt;pre&amp;gt;"+list[i]+"&amp;lt;/pre&amp;gt;&amp;lt;hr/&amp;gt;";&lt;br /&gt; }&lt;br /&gt; var wnd = window.open("", "Event dump");&lt;br /&gt; wnd.document.write(log);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;this is a semaphore to ensure that we play nice with other code&lt;br /&gt;*/&lt;br /&gt;result.__EVT_LIST = true;&lt;br /&gt;&lt;br /&gt;return result;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Enjoy. I think a nice touch is the ability to list the events attached to an element by calling (e.g.) window.onload.list(); but this is generally debug stuff.&lt;br /&gt;&lt;br /&gt;I should sleep.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-113753927294685141?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/113753927294685141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=113753927294685141' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/113753927294685141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/113753927294685141'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2006/01/idempotent-event-queue-in-javascript.html' title='Idempotent event queue in JavaScript for use with Behaviour, etc.'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-113753644105035074</id><published>2006-01-17T23:03:00.000+01:00</published><updated>2006-01-18T00:10:28.090+01:00</updated><title type='text'>"Referer" header not set on HTTP requests originating from assignment to "window.location" variable on IE6</title><content type='html'>This one is annoying. Suppose you were to click on the below link:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&amp;lt;a href="http://google.com"&amp;gt;Google&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;In both Firefox and IE6 the "Referer" [sic, TBL we love you!] header is set to the URL of the page on which the clicked link existed, e.g.:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;GET / HTTP/1.1&lt;br /&gt;Host: google.com&lt;br /&gt;Referer: http://ianso.blogspot.com&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;However this code, which is functionally (but not semantically) equivalent:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&amp;lt;span onclick="window.location='http://google.com'"&amp;gt;Google&amp;lt;/span&amp;gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Omits the "referer" header from the request it generate. (Ignore for the moment that the example is deliberately facetious. In RL, the onclick might call a function that might call a confirm that might change the page location.)&lt;br /&gt;&lt;br /&gt;Why does this suck? Because you may want to be able to launch an operation sequence from a view page, and then return to that page to view changed state upon completion of that operation. And you might want to do the same operation from multiple view pages. Which means that you have to keep track of where you came from in order to direct the user back to the same place afterwards. This is an ideal use case for the "referer" header.&lt;br /&gt;&lt;br /&gt;However, if you decide to direct the user to a new page that (for example) had it's URL constructed in JavaScript, then this becomes annoying. The workaround to this trivial, stupid bug that I only need because I'm using a nasty hack is as follows:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;function goTo(url) {&lt;br /&gt; var a = document.createElement(a);&lt;br /&gt; if(!a.click) { //only IE has this (at the moment);&lt;br /&gt;  window.location = url;&lt;br /&gt;  return;&lt;br /&gt; }&lt;br /&gt; a.setAttribute("href", url);&lt;br /&gt; a.style.display = "none";&lt;br /&gt; $("body").appendChild(a); //prototype shortcut&lt;br /&gt; a.click();&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;(Normal caveats apply, i.e. this is probably me being ill and sleep-deprived and casting about wild accusations concerning specks in the eyes of MS developers while smashing windows with the redwood stuck in mine, but anyway.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-113753644105035074?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/113753644105035074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=113753644105035074' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/113753644105035074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/113753644105035074'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2006/01/referer-header-not-set-on-http.html' title='&quot;Referer&quot; header not set on HTTP requests originating from assignment to &quot;window.location&quot; variable on IE6'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-113642154341049290</id><published>2006-01-05T01:03:00.000+01:00</published><updated>2006-01-05T01:43:46.006+01:00</updated><title type='text'>MUSIC! CODE! MONKEYS!</title><content type='html'>(I should be asleep.)&lt;br /&gt;&lt;br /&gt;Firstly, &lt;a href="http://www.throwingmusic.com/"&gt;50FOOTWAVE&lt;/a&gt; have published "&lt;a href="http://throwingmusic.com/freemusic/"&gt;Free music&lt;/a&gt;" which is a 5-track EP of good hard stuff. Available in MP3, etc. and also FLAC. I'm so used to MP3 that the quality of FLAC is like a breath of fresh air.&lt;br /&gt;&lt;br /&gt;Secondly, and on this subject: I was recently re-acquainted with just how beautiful a decent record player with nice can sound when given decent vinyl to groove on, esp. Dire Straits guitar solos and classic jazz. So given how I come across new music (friends give it to me, sometimes on a wholesale basis), an ideal music infrastructure begins to look as follows:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;MP3 for general music consumption&lt;/li&gt;&lt;li&gt;CDs for archival &amp; liner art&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Vinyl for when the music is just &lt;span style="font-style: italic;"&gt;so good&lt;/span&gt;.&lt;/li&gt;&lt;/ol&gt;Other random thoughts:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Lisp, spreadsheets, and &lt;a href="http://www.ragtime-online.com/"&gt;RagTime&lt;/a&gt; (from it's description) all seem to embody a spirit of computational fungibility that shows what computers should be like in future. The reason I can't take the aforementioned 3 programs/languages/environments and produce said Nirvana is because computers suck.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Closures in JavaScript are nice. var f = function() {} and all that makes events much nicer to use.&lt;/li&gt;&lt;li&gt;I've been forced to confront my instinctive fear of big, sophisticated IDEs from gigantic megacorporations. I'm worried that their code is so smart that my job will become no more challenging than that of the average Visual Basic droid. This would suck.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;This may simply be post-Microsoft-IDE trauma. I remember VB4... VBA... generated code that should never have seen the light of day...&lt;span style="font-style: italic;"&gt; *shudder*&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Legitimate reasons for ignoring these things still exist, lock-in to their own evolutionary path being the biggest and baddest.&lt;/li&gt;&lt;li&gt;This is why, if I have to move intelligence into code, I'd rather it was open-source code. That way, when I've trained Rhesus monkeys equipped with build scripts to construct web applications based on my legion of sequence diagrams, then I could hack on the code to make the computer do even more of the boring stuff computers are good at and which I detest. (repeat after me: a good programmer is a lazy programmer...)&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Speaking of Work:&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Time was, people would  sleep through Winter 'cos there were no crops to harvest and no light to work by. Humanitys biorythms are adjusted to this pattern.&lt;/li&gt;&lt;li&gt;Now, we work 8-hour days all year round, and waking up at 7:00 in the dark is a truly crushing way to start the day (not to mention Brussels public transport.)&lt;/li&gt;&lt;li&gt;Therefore, why not work 10-hour days for half the year, and 6-hour days for the other half, when I'd rather be in bed? Eh?&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;I'm currently reading a translation of &lt;span style="font-style: italic;"&gt;Les Miserables&lt;/span&gt; by Victor Hugo (who is a genius), and it truly is an absolutely incredible work.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Last but not least, I would like to re-emphasise how incredibly stupid it to ramble on in a public space when the brain is already half-asleep. Anyway. I can always edit it later.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-113642154341049290?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/113642154341049290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=113642154341049290' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/113642154341049290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/113642154341049290'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2006/01/music-code-monkeys.html' title='MUSIC! CODE! MONKEYS!'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-113622723095128920</id><published>2006-01-02T19:10:00.000+01:00</published><updated>2006-01-02T19:40:31.010+01:00</updated><title type='text'>Prototype-style shortcut function for XPath expressions</title><content type='html'>Background: using Prototype is &lt;a href="http://blog.metawrap.com/blog/CommentView,guid,42b961d5-b539-4d9a-b1e0-108e546ae3e6.aspx"&gt;allegedly like using crack&lt;/a&gt; - immediately gratifying and bad for the whole application. The wisdom of using for(in) notwithstanding, I dunno.&lt;br /&gt;&lt;br /&gt;Anyway, the nicest things of all in Prototype are the shortcuts: $() and $F(), which make my life much more chilled out (pass the pipe dude,) and so I hereby introduce an equivalent for XPath munging: $X().&lt;br /&gt;&lt;br /&gt;This needs &lt;a href="http://sarissa.sourceforge.net/doc/"&gt;Sarissa&lt;/a&gt; to paper over the differences between IE and FF for this to work. Needless to say, Safari users can go swivel until Apple gets of their butt and improves their XSLT support. &amp;lt;/flamebait&amp;gt;. The commented out 'Logger' is using &lt;a href="http://gleepglop.com/javascripts/logger/"&gt;Lumberjack&lt;/a&gt; syntax.&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;function $X(xPathExpr, ctxNode, doc) {&lt;br /&gt; if(!ctxNode) {&lt;br /&gt;  ctxNode = document;&lt;br /&gt; }&lt;br /&gt;  &lt;br /&gt; if(!doc) {&lt;br /&gt;  if(ctxNode instanceof Document) {&lt;br /&gt;   doc = ctxNode;&lt;br /&gt;  } else {&lt;br /&gt;   doc = ctxNode.ownerDocument;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; var result = doc.selectNodes(xPathExpr, ctxNode);&lt;br /&gt;  &lt;br /&gt; if(result == null) {&lt;br /&gt;  //Logger.debug("no match for "+xPathExpr);&lt;br /&gt;  return null;&lt;br /&gt; }&lt;br /&gt;  &lt;br /&gt; if(result.length == 1) return result[0];&lt;br /&gt;  &lt;br /&gt; return result;&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;Usage is as follows:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;$X("//p") returns all paras in a document.&lt;/li&gt;&lt;li&gt;$("//p[@id=foo]") returns one para with id foo.&lt;/li&gt;&lt;li&gt;arg[1] optionally specifies the node context (relative root)&lt;/li&gt;&lt;li&gt;arg[2] can specify a different document to work on, for example one retrieved via XMLHttpRequest.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-113622723095128920?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/113622723095128920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=113622723095128920' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/113622723095128920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/113622723095128920'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2006/01/prototype-style-shortcut-function-for.html' title='Prototype-style shortcut function for XPath expressions'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-113622533744156236</id><published>2006-01-02T19:04:00.000+01:00</published><updated>2006-01-02T19:08:57.460+01:00</updated><title type='text'>Coffee and laptops:</title><content type='html'>If you can afford a decent laptop, you should also make sure you have nice thick ceramic coffee cups, and saucers, to go alongside it.&lt;br /&gt;&lt;br /&gt;Decent coffee cups are harder to tip over than disposable plastic cups.&lt;br /&gt;&lt;br /&gt;Posted because I recently &lt;strike&gt;killed&lt;/strike&gt; severely maimed a laptop in the time-honoured tradition of all over-caffienated coders.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-113622533744156236?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/113622533744156236/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=113622533744156236' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/113622533744156236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/113622533744156236'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2006/01/coffee-and-laptops.html' title='Coffee and laptops:'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-113242560206342864</id><published>2005-12-01T22:32:00.000+01:00</published><updated>2005-12-02T13:33:58.513+01:00</updated><title type='text'>Web development:</title><content type='html'>It seems as if we're slowly adding more and more languages to the web development mix. We had HTTP and HTML, then we added JavaScript for scripting and CSS for styling, and we also have XSLT for transformations, XML for data transfer, and not including MathML and SVG, oh my! One client-server protocol, one markup language, one declarative expression language, one scripting language, what is the world coming too?&lt;br /&gt;&lt;br /&gt;(I should add, for the benefit of any Microsoft coders out there: if you don't get support MathML and SVG in IE right soon you'll end up displaying GIFS and loading klunky Adobemedia plugins when the rest of the world is dragging and dropping formulas and vectors, not to mention serving all this stuff inline &lt;strike&gt;that not even a plugin will help you with, no siree.&lt;/strike&gt; - see Paul's comment below&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;Should I get worried? Well, I know all this stuff, so no. Also, it is still easy to get started. You don't have to know HTTP to know HTML, which is the substrate upon which the rest is built.&lt;br /&gt;&lt;br /&gt;Also, I would add that we've got these things for a reason: having played around with REST XML APIs + JavaScripting XSLT + CSS + XHTML, I have to say that this is a sweet combo that makes me emit an evil laugh everytime I do something ridiculously complex in ten lines of JavaScript.&lt;br /&gt;&lt;br /&gt;Anyway, this leads me to the conclusion that a) dumping XML on the client for transformation is not intrinsically wrong, b) JSON-RPC is nice, c) passing HTML clips via XMLHttpRequest is not an ideal situation but works.&lt;br /&gt;&lt;br /&gt;Also, despite me not working on Gradient for ages, I still believe that the web is missing a real-time control channel and the ability for clients to communicate more-or-less directly with each other, and that XMPP is the solution to that.&lt;br /&gt;&lt;br /&gt;What's changed is that Firefox 1.5 supports SVG now... I'm thinking of digging up the old and obsolete &lt;a href="http://jabberstudio.org/projects/jabberzilla/releases/view.php?id=536"&gt;JiM&lt;/a&gt; or fiddling with &lt;a href="http://jabberstudio.org/projects/mozchat/project/view.php"&gt;Mozchat&lt;/a&gt; and seeing if I can wire either of them directly into the DOM.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-113242560206342864?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/113242560206342864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=113242560206342864' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/113242560206342864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/113242560206342864'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2005/12/web-development.html' title='Web development:'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-113346916544135738</id><published>2005-12-01T21:29:00.000+01:00</published><updated>2005-12-01T21:32:45.443+01:00</updated><title type='text'>When creating DOM-related library / utility functions in JavaScript:</title><content type='html'>Using document to do stuff like createElement is a good idea 99% of the time, and the other 1% of the time, guess what - I've loaded an XMLDocument from XMLHttpRequest. Therefore, take your operand element and use element.ownerDocument to construct stuff.&lt;br /&gt;&lt;br /&gt;This advert was paid for by the Council for Prevention of Headaches in Web Developers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-113346916544135738?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/113346916544135738/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=113346916544135738' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/113346916544135738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/113346916544135738'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2005/12/when-creating-dom-related-library.html' title='When creating DOM-related library / utility functions in JavaScript:'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-113346898670874698</id><published>2005-12-01T21:28:00.000+01:00</published><updated>2005-12-01T21:29:46.710+01:00</updated><title type='text'>Attention Java webapp developers: No JSP in your JavaScript.</title><content type='html'>This has been both a confession and a public service announcement.&lt;br /&gt;&lt;br /&gt;Trust me, it's a bad idea, &lt;span style="font-size:85%;"&gt;except maybe to rewrite the odd URL...&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-113346898670874698?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/113346898670874698/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=113346898670874698' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/113346898670874698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/113346898670874698'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2005/12/attention-java-webapp-developers-no.html' title='Attention Java webapp developers: No JSP in your JavaScript.'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-113346889612714669</id><published>2005-12-01T21:27:00.000+01:00</published><updated>2005-12-01T21:28:16.126+01:00</updated><title type='text'>Before somebody else says it:</title><content type='html'>I get the sinking feeling that half a dozen bugs that I've observed will turn out to be unreproducible, and therefore my fault, and therefore yet another case of hubris on my part. Oh well, such is life.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-113346889612714669?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/113346889612714669/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=113346889612714669' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/113346889612714669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/113346889612714669'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2005/12/before-somebody-else-says-it.html' title='Before somebody else says it:'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-113346883712173646</id><published>2005-12-01T21:20:00.000+01:00</published><updated>2005-12-01T21:27:17.123+01:00</updated><title type='text'>One more annoying IE6 bug:</title><content type='html'>Assuming this CSS:&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;div { border: solid black 1px; }&lt;/blockquote&gt;And this HTML:&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-family: courier new;"&gt;&amp;lt;div id="foo" style="background-color:lightgrey; border:solid red 1px"&amp;gt;...&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;/blockquote&gt;When I evaluate &lt;span style="font-family: courier new;"&gt;$("foo").style.border="";&lt;/span&gt; I expect to see a div with a light grey background and a black border. And lo, Mozilla doth fulfill my expectations, whereas the venerable IE nuketh not only the element-level style declaration, but also the entire cascade of styles applied heretofore, despite MS and IE having INVENTED Cascading Style Sheets.&lt;br /&gt;&lt;br /&gt;Much as I sympathize with frustration at the W3C's glacial process of standards-making (in 'net years), it does seem as if people who don't pay attention to standards bodies end up producing products markably inferior to develop for than those who do.&lt;br /&gt;&lt;br /&gt;Grr.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-113346883712173646?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/113346883712173646/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=113346883712173646' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/113346883712173646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/113346883712173646'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2005/12/one-more-annoying-ie6-bug.html' title='One more annoying IE6 bug:'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-113346838854465585</id><published>2005-12-01T21:08:00.000+01:00</published><updated>2005-12-01T21:19:48.583+01:00</updated><title type='text'>The only cross-platform way to add dynamically parameterized events to DOM elements:</title><content type='html'>To explain what I mean. This is static:&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;&amp;lt;div onclick="foo()"&amp;gt;...&amp;lt;/div&amp;gt;&lt;/blockquote&gt;This is dynamic, unparameterized:&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;div.setAttribute("onclick", "foo()"); //not in IE6&lt;br /&gt;&lt;br /&gt;//or:&lt;br /&gt;&lt;br /&gt;div.onclick = foo; // works everywhere&lt;br /&gt;&lt;/blockquote&gt;This is dynamic, parameterized (and works on Mozilla):&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;div.setAttribute("inclick", "foo(this, 1, 2, 3, 'bar')")&lt;/blockquote&gt;This allows you do do stuff like construct your function as you would a string. But you can't do &lt;span style="font-family:courier new;"&gt;div.onclick = foo;&lt;/span&gt; and pass arguments as well. So you have to do this:&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;div.onclick = function() { foo(this, 1, 2, 3, "bar"); };&lt;/blockquote&gt;Which basically creates an anonymous function each time it's evaluated. If you want to construct your function call as a string, do that and then use eval(). (I would also add that if you have to do that here, you have bigger problems than dynamically parameterized events.) But hey, it works.&lt;br /&gt;&lt;br /&gt;You might wonder why I'm passing this when I could use the event target instead. First, getting the event target is non-cross platform, and second, I might want to do &lt;span style="font-family:courier new;"&gt;foo( $("id") ...)&lt;/span&gt;, which again is more cross-platform than fireEvent or whatever.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-113346838854465585?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/113346838854465585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=113346838854465585' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/113346838854465585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/113346838854465585'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2005/12/only-cross-platform-way-to-add.html' title='The only cross-platform way to add dynamically parameterized events to DOM elements:'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-113285670725369515</id><published>2005-11-24T19:15:00.000+01:00</published><updated>2005-12-01T21:38:50.536+01:00</updated><title type='text'>The earth goes round the sun, the moon goes round the earth, JSP sucks.</title><content type='html'>&lt;span style="font-family: courier new;"&gt;blogsMoaningAboutJSP.add(&lt;br /&gt;    Blogger.getInstance("http://ianso.blogspot.com")&lt;br /&gt;      .createBlankAnnoyedProgrammerEntry()&lt;br /&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So anyway, although I do realise that JSP came a long before MVC was applied to webapp development, but WTF is a &lt;span style="font-style: italic;"&gt;templating solution&lt;/span&gt; doing setting the MIME type on my response?&lt;br /&gt;&lt;br /&gt;This is not even taking into account the stupid, &lt;span style="font-style: italic;"&gt;stupid&lt;/span&gt;, requirement to compile JSPs into Java files and then Java classes, meaning that there are twice as many places for compilation errors, and twice as many places for logical errors, and a PIA to write a decent IDE for, Hell! JSP is never a good idea. But it's standard.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-113285670725369515?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/113285670725369515/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=113285670725369515' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/113285670725369515'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/113285670725369515'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2005/11/earth-goes-round-sun-moon-goes-round.html' title='The earth goes round the sun, the moon goes round the earth, JSP sucks.'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-113285608783507990</id><published>2005-11-24T19:10:00.000+01:00</published><updated>2005-11-24T19:14:47.846+01:00</updated><title type='text'>Ingredients for a seamless iframe with no border in IE6:</title><content type='html'>In most webapp development, you don't want to draw attention to your techniques - iframes are a good example, you don't want a "look ma, a page within a page!" feeling, you just want it to display and look &amp; feel like the rest of your app.&lt;br /&gt;&lt;br /&gt;In FF this is easy: the CSS is "iframe {border:0;}". Naturally, this also applies to stuff you add to the DOM via scripting.&lt;br /&gt;&lt;br /&gt;In IE, it's a complete pain in the ass, as usual. Not only do you have to set the old-style "like it's 1999!" attributes as follows:&lt;br /&gt;&lt;br /&gt;     iFrame.setAttribute("border", "0");&lt;br /&gt;     iFrame.setAttribute("frameborder", "0");&lt;br /&gt;&lt;br /&gt;you also have to set the style on the &lt;span style="font-style: italic;"&gt;body&lt;/span&gt; of the iframe you loaded, as follows:&lt;br /&gt;&lt;br /&gt;    body {border:0;}&lt;br /&gt;&lt;br /&gt;As if there was any other circumstance in which the border style of your body affects the container. Grr.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-113285608783507990?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/113285608783507990/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=113285608783507990' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/113285608783507990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/113285608783507990'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2005/11/ingredients-for-seamless-iframe-with.html' title='Ingredients for a seamless iframe with no border in IE6:'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-113234973483979582</id><published>2005-11-18T22:30:00.000+01:00</published><updated>2005-12-01T21:36:08.750+01:00</updated><title type='text'>More  IE quirks: "This page contains secure and non-secure items. Do you want to display the non-secure items?" when using iframes in https web-pages</title><content type='html'>This one is more google-able than the ones I've noted down below, but anyway: the gist of the issue is that iframes loaded into a secure page with an src attribute of "" (an empty string) or missing, or "about:blank", are treated as insecure.&lt;br /&gt;&lt;br /&gt;This is done when the iframe is going to be filled dynamically via javascript or equivalent.&lt;br /&gt;&lt;br /&gt;Since network sniffing doesn't show any non-ssl HTTP requests, this one might be a bit of a pain to debug, were it not for the users of a a wysiwyg/textarea replacement project who reported the problem on their forums.&lt;br /&gt;&lt;br /&gt;Anyway, the solution is to use src="javascript:;" as an initial value, which is apparently secure enough for IE not to throw an error message in the user's face.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1/12/2005:&lt;/span&gt; This also appears to happen with &amp;lt;object&amp;gt;s, with a codebase that is not https, and that sucks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-113234973483979582?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/113234973483979582/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=113234973483979582' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/113234973483979582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/113234973483979582'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2005/11/more-ie-quirks-this-page-contains.html' title='More  IE quirks: &quot;This page contains secure and non-secure items. Do you want to display the non-secure items?&quot; when using iframes in https web-pages'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7649844.post-113049951284569818</id><published>2005-10-28T13:35:00.000+02:00</published><updated>2005-10-28T13:38:32.856+02:00</updated><title type='text'>The world is beautiful place to be born into...</title><content type='html'>&lt;a href="http://www.favoritepoem.org/poems/ferlinghetti/"&gt;Read this.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Best heard read in "unforscene - the world is", and is (like life itself) both uplifting and depressing. Yay.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7649844-113049951284569818?l=ianso.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ianso.blogspot.com/feeds/113049951284569818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7649844&amp;postID=113049951284569818' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/113049951284569818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7649844/posts/default/113049951284569818'/><link rel='alternate' type='text/html' href='http://ianso.blogspot.com/2005/10/world-is-beautiful-place-to-be-born.html' title='The world is beautiful place to be born into...'/><author><name>Ian Sollars</name><uri>https://profiles.google.com/109952344779179567534</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-jPXuB_5JWGY/AAAAAAAAAAI/AAAAAAAAAAA/aj02Rlwt3U8/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
