<?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:blogger='http://schemas.google.com/blogger/2008' 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-5959340623347047497</id><updated>2026-10-31T19:03:04.012-07:00</updated><title type='text'>Alex Batlin</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.batlin.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://blog.batlin.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13347962016972401089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>20</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5959340623347047497.post-8685881607599935864</id><published>2015-01-31T00:34:00.003-08:00</published><updated>2015-01-31T00:34:57.049-08:00</updated><title type='text'>Distributed Ledgers and Disintermediation of Trust</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;People often ask me - &#39;What is so special about Bitcoin?&#39; - and one of the answers I give is &#39;disintermediation of trust&#39;. In economics, disintermediation is the removal of intermediaries in a supply chain, or &quot;cutting out the middlemen&quot;. In my opinion, money is all about trust - you trust that if you work for X hours a day, your employer will pay you Y amount of money, and for that Y amount of money you will be able to buy Z amount of food etc.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCYj6h18gRinY-5uo1s_qmTQMTn4CKKqHghMBxkxoJH6JhkCm1why_MP2a4NX2JE4vOoRW5qAEHhRt5ldXLzNhERXXrVAlpygeWO7ZyAeQ_e2E-s0JDa4zXROHDBZYvJvGAWJ2-POWLL0/s1600/disintermediation.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCYj6h18gRinY-5uo1s_qmTQMTn4CKKqHghMBxkxoJH6JhkCm1why_MP2a4NX2JE4vOoRW5qAEHhRt5ldXLzNhERXXrVAlpygeWO7ZyAeQ_e2E-s0JDa4zXROHDBZYvJvGAWJ2-POWLL0/s1600/disintermediation.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;span style=&quot;font-family: Helvetica;&quot;&gt;&lt;span style=&quot;font-size: 12px;&quot;&gt;But here is another question, why do we need to trust each other? Evidence&amp;nbsp;shows that we can live better by specializing e.g. I am a much better IT guy than a musician, so if I do what I do best most of the time, I can&#39;t do the other things, but I can exchange my labour for money, and then for other goods and services e.g. buy music; and as a result you get better music and IT than if each one of us did both part time. So if specialization leads to better quality and productivity, then to unlock its value you need a form of exchange.&lt;/span&gt;&lt;/span&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;First form of exchange was barter, but it was pretty inefficient - hard to figure out how many sheep should be exchanged for a cow. In essence the cost of transacting was high, since it took a long time to barter, and it was hard to determine if one side or other got the better deal as the market visibility was poor. The nice thing about barter is that it is hard to double spend (cheat) what you have as there is a physical inspection and exchange of goods. You are still at risk of getting an inferior to what you bartered for product e.g. an ill sheep versus a healthy one.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhy_PgA4Fyc01EUFdRYT2Qiz9YiqlLDKcbyD3NRwX8x-i6bG8x5fp7i3mXn4aGpClElfUhooRrnvanqMquHCsoqURCOSTQhKcyBMhOYSVVwUUioqf2-FoD_6imDq6hA0qEsNf2hK80kuHo/s1600/barter21.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhy_PgA4Fyc01EUFdRYT2Qiz9YiqlLDKcbyD3NRwX8x-i6bG8x5fp7i3mXn4aGpClElfUhooRrnvanqMquHCsoqURCOSTQhKcyBMhOYSVVwUUioqf2-FoD_6imDq6hA0qEsNf2hK80kuHo/s1600/barter21.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;So money in the form of gold was a big step forward. Gold is limited in supply, so in principle inflation can be controlled, unless a new source of gold is discovered e.g. South America&#39;s gold rush for the Spanish crown. It&#39;s hard to double spend or cheat the system, as like with barter you can perform a physical inspection and exchange of gold. Some people do cheat and substitute cheaper metals for gold or skimp on wieght if possible, so when performing a transaction it is worth checking that actual gold is exchanged, and you need to weigh it to ensure the amount is correct. Again, the cost of transaction is high as you have to check quality and amount, but better than taking a cow along for the ride when you want to buy a coffee.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHECCcB-wmV1p9a6rEJLr3Y8vTxxjwgwnnc_Y4bxljqqgBoSEMZowEpsE5ZN9pDKfrZvTSNSsxdUgtv3l-6RVLroefmYplcDkUpIUqReI2yQ-4FiJ4xa0bLhwd-R6fBhZkrjGKoqCmP7g/s1600/goldbars.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHECCcB-wmV1p9a6rEJLr3Y8vTxxjwgwnnc_Y4bxljqqgBoSEMZowEpsE5ZN9pDKfrZvTSNSsxdUgtv3l-6RVLroefmYplcDkUpIUqReI2yQ-4FiJ4xa0bLhwd-R6fBhZkrjGKoqCmP7g/s1600/goldbars.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;Next innovation was the minted coin - essentially standard weights of gold, and hopefully a guarantee of quality i.e. you are getting gold not some inferior metal. A central authority, the mint, backs up the currency and guarantees quality and amount standards, enforcing those through punishment of forgers. Cost and speed of transaction is reduced, and there is now someone you can ask to enforce the law if fraud happens - recourse.&lt;/span&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;Gold is still pretty heavy to carry, even if it lighter than a cow, so paper money was the next invention. Much easier to carry and hence reduced transaction costs and time (friction). Paper money is printed in all sorts of clever ways to ensure that it cannot be forged and double spent.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjURO5539lBDQ1Job-ZWcRy0IWnUmq1k-Nl8ueDCAN6Xtfq3UFsB5vKajXXaLJPQ468RJ6UFDOG_nsPqZB2T6rZ2AC5WCMumWv14fYgHbdnbO5KL5gt4X_1qg41GGD9r-2rWx4HIYpV8jg/s1600/paper.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjURO5539lBDQ1Job-ZWcRy0IWnUmq1k-Nl8ueDCAN6Xtfq3UFsB5vKajXXaLJPQ468RJ6UFDOG_nsPqZB2T6rZ2AC5WCMumWv14fYgHbdnbO5KL5gt4X_1qg41GGD9r-2rWx4HIYpV8jg/s1600/paper.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;However paper money was at first a simple proxy for gold reserves. Problem with gold is that it is of limited supply - good to prevent double spend but as the economy growth through more people being born and them becoming more productive, if no new gold is discovered, the money supply is constricted and no longer supports effective exchange of value, either leading to deflation or stagnation. Many argue deflation is bad, others argue that deflation is only bad if you have constrained demand. Go figure. Solution to this gave rise to fiat currencies - money not backed by commodity like gold.&lt;/span&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;Moving away from commodity backed money meant that governments became free to control money supply as the economy expands or shrinks e.g. quantitative easing etc. It&#39;s a very powerful tool, but places a lot of trust in the government not to print to much money and cause inflation. So, for paper based fiat money, you need to have trust in the government&#39;s central bank to not over or under supply money, and in the mint to create paper that is hard to forge.&lt;/span&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;Problem with paper money is that it is hard to send it remotely i.e. electronically. Sure you can post it, but that takes a long time. In the new digital age paper money transactions are just too slow and thus expensive. So, how do you send money electronically, and prevent double spend? After all, anything digitally stored is easy to copy and hence double spend. Current answer is to trust a bunch of organizations e.g. retail, merchant and central banks, payment processors etc. not to actually move money around, but for the various parties involved to record transactions in their own ledgers and then sync them up between organizations to achieve consensus.&lt;/span&gt;&lt;br /&gt;
&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKBSebv5OJ84h2ukLJZELFICmL5QqS7YMBg3MLrqB5LiWaSaUE4fubkAdeQT-hWunLRbvvpFvzkdi66oFZWTH8MAotmOD76hMzsEJ5dpuDmbK4YJOo_1O1a9Uk8i69lHD0K9mHfOoC41c/s1600/emoney.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKBSebv5OJ84h2ukLJZELFICmL5QqS7YMBg3MLrqB5LiWaSaUE4fubkAdeQT-hWunLRbvvpFvzkdi66oFZWTH8MAotmOD76hMzsEJ5dpuDmbK4YJOo_1O1a9Uk8i69lHD0K9mHfOoC41c/s1600/emoney.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;In essence, it&#39;s the bank&#39;s view that determines how much money you have - that&#39;s a lot of trust. A good article about how money moves around can be found on this&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://gendal.me/2013/11/24/a-simple-explanation-of-how-money-moves-around-the-banking-system/&quot; style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;gendal.me&lt;/a&gt;&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;&amp;nbsp;blog.&lt;/span&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;All this works pretty well, so why did Bitcoin evolve? Remember 2008? Some people decided that they did not trust the banks all that much after all. So they sat down, and decided to imagine how you could keep and transact money without having banks and payment merchants. Then they wrote some code. Then they got a bunch of people on run that code on their servers. In 6 short years Bitcoin is worth now 3BN USD. Small compared to everything else, but awesome when compared to nothing - and all without a single bank, payment merchant or government body.&lt;/span&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0DQXvrXd6xF7Z-pvZOEBcYdwOk87sAo5KTzGFCFBHitc71ySt3DpW_aTqD5M695ZbJhjS7lkWTqsDf321_n-v_lN2vFvKLnBnLL7LLjISA-LqalnYPKLN-otqCUHnZQhSQ-XBfpFJxog/s1600/bitcoin.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0DQXvrXd6xF7Z-pvZOEBcYdwOk87sAo5KTzGFCFBHitc71ySt3DpW_aTqD5M695ZbJhjS7lkWTqsDf321_n-v_lN2vFvKLnBnLL7LLjISA-LqalnYPKLN-otqCUHnZQhSQ-XBfpFJxog/s1600/bitcoin.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;You may say - why do I need it, living in UK, CH, US etc? The answer is probably more belief based, rather than practical - with free retail banking it&#39;s easy to transact, and although merchants pay and pass on payment processors fees, you do get recourse in return.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;But now think about the &lt;/span&gt;&lt;a href=&quot;http://www.mckinsey.com/insights/financial_services/counting_the_worlds_unbanked&quot; style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;2.5 billion&lt;/a&gt;&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;&amp;nbsp;or 35% of world&#39;s &lt;/span&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/World_population&quot; style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;7 billion&lt;/a&gt;&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;&amp;nbsp;total population who are unbanked, or indeed &lt;/span&gt;&lt;a href=&quot;http://leftfootforward.org/2013/12/the-unbanked-are-increasingly-excluded-from-mainstream-society/&quot; style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;12% of UK households&lt;/a&gt;&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;&amp;nbsp;and &lt;/span&gt;&lt;a href=&quot;http://www.bloomberg.com/news/2012-09-12/u-s-unbanked-households-rising-as-fdic-pushes-for-alternatives.html&quot; style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;8.2% of US households&lt;/a&gt;&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;.&lt;/span&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;Turns out that it costs a lot of money to maintain all these central services, costs passed on one way or another to users, but only viable if there is a lot of payment volume. Large parts of the world therefore simply have no banking access as putting the required infrastructure there is not economically viable. So what Bitcoin has done, is by disintermidiating retail banks and payment processors via use of new technology, it has reduced costs and unlocked previosuly economically unviable business models.&lt;/span&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;All you need is a &lt;/span&gt;&lt;a href=&quot;http://www.telegraph.co.uk/technology/mobile-phones/10995383/Should-the-26-Indian-smartphone-worry-Apple.html&quot; style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;26 GBP smartphone&lt;/a&gt;&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;&amp;nbsp;and mobile broadband subscription (&lt;a href=&quot;http://en.wikipedia.org/wiki/List_of_countries_by_number_of_broadband_Internet_subscriptions&quot;&gt;2007 : 4% of world population subscribed, 2010 : 11.3%, 2013 : 29.5%&lt;/a&gt;). You are done! No need to open bank accounts or deal with VISA, PayPal etc. Imagine if just half of the unbanked started using Bitcoin - would the rest of the world be able to resist it? Take a look at&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/M-Pesa&quot; style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;M-Pesa&lt;/a&gt;&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;&amp;nbsp;and see it&#39;s phenomenal uptake in Africa if you are skeptical about demand. And whilst&#39;s Bitcoin&#39;s volatility index is about 7.55% against USD (&lt;/span&gt;&lt;a href=&quot;https://btcvol.info/&quot; style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;https://btcvol.info/&lt;/a&gt;&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;) compared to gold&#39;s 1.2% and major currencies&#39; 0.5% to 1.0% range; it&#39;s not that bad when compared to currencies that majority of unbanked transact in.&lt;/span&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;But let&#39;s assume that Bitcoin the currency will not spread; but instead there will be government backed distributed ledger networks that track fiat currencies - after all how different is eMoney (legal, tried and tested) on a pre-paid debit card and a crypto-pound managed by smart phone app? It&#39;s that very question that the UK government is starting to ask :&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.theregister.co.uk/2014/11/04/treasury&quot; style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;http://www.theregister.co.uk/2014/11/04/treasury&lt;/a&gt;&lt;span style=&quot;font-family: Helvetica;&quot;&gt;&lt;span style=&quot;font-size: 12px;&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.batlin.com/feeds/8685881607599935864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.batlin.com/2015/01/distributed-ledgers-and.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/8685881607599935864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/8685881607599935864'/><link rel='alternate' type='text/html' href='http://blog.batlin.com/2015/01/distributed-ledgers-and.html' title='Distributed Ledgers and Disintermediation of Trust'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13347962016972401089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCYj6h18gRinY-5uo1s_qmTQMTn4CKKqHghMBxkxoJH6JhkCm1why_MP2a4NX2JE4vOoRW5qAEHhRt5ldXLzNhERXXrVAlpygeWO7ZyAeQ_e2E-s0JDa4zXROHDBZYvJvGAWJ2-POWLL0/s72-c/disintermediation.jpg" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5959340623347047497.post-8028386701055099368</id><published>2015-01-30T23:43:00.001-08:00</published><updated>2015-01-30T23:43:38.033-08:00</updated><title type='text'>Disintermediation of money - can we do better?</title><content type='html'>&lt;div style=&quot;border: 0px; box-sizing: border-box; color: #4d4f51; font-family: Helvetica, Arial, sans-serif; font-size: 16px; line-height: 24px; margin-bottom: 30px; padding: 0px; vertical-align: baseline;&quot;&gt;
I have done a lot of research about Bitcoin, blockchain 1.0, 2.0 and 3.0, distributed ledgers, alt-coins, Crypto 2.0, smart contracts, programmable money etc. I think it is a fascinating subject, and clearly has huge potential.&lt;/div&gt;
&lt;div style=&quot;border: 0px; box-sizing: border-box; color: #4d4f51; font-family: Helvetica, Arial, sans-serif; font-size: 16px; line-height: 24px; margin-bottom: 30px; padding: 0px; vertical-align: baseline;&quot;&gt;
In doing so, I have come up with a mental model where as a society we have moved from barter to money based on gold, then commodity backed paper, then government backed fiat currencies - both paper and electronic.&lt;/div&gt;
&lt;div style=&quot;border: 0px; box-sizing: border-box; color: #4d4f51; font-family: Helvetica, Arial, sans-serif; font-size: 16px; line-height: 24px; margin-bottom: 30px; padding: 0px; vertical-align: baseline;&quot;&gt;
Bitcoin is the latest technology that pushes our understanding of money and how it can be used in a digital world - it disintermediates the need for retail banks, payment merchants etc.&lt;/div&gt;
&lt;div style=&quot;border: 0px; box-sizing: border-box; color: #4d4f51; font-family: Helvetica, Arial, sans-serif; font-size: 16px; line-height: 24px; margin-bottom: 30px; padding: 0px; vertical-align: baseline;&quot;&gt;
However, money itself is an intermediary - a proxy for value. In being a proxy, it has a lot of risk associated with e.g. inflation, theft, forgery to name a few. Yet for a very long time is has been the best means of value exchange we could think of.&lt;/div&gt;
&lt;div style=&quot;border: 0px; box-sizing: border-box; color: #4d4f51; font-family: Helvetica, Arial, sans-serif; font-size: 16px; line-height: 24px; margin-bottom: 30px; padding: 0px; vertical-align: baseline;&quot;&gt;
So, here is the question, do we have the technology now to disintermediate money?&lt;/div&gt;
&lt;div style=&quot;border: 0px; box-sizing: border-box; color: #4d4f51; font-family: Helvetica, Arial, sans-serif; font-size: 16px; line-height: 24px; margin-bottom: 30px; padding: 0px; vertical-align: baseline;&quot;&gt;
For example, could we go back to barter if we had perfect means of communication and information based on IoT, possibly coupled with derivative type contracts and smart agents acting on our behalf to place value on goods and services based on our pre-defined or machine learned criteria in near real-time using big data, AI and cloud computing?&lt;/div&gt;
&lt;div style=&quot;border: 0px; box-sizing: border-box; color: #4d4f51; font-family: Helvetica, Arial, sans-serif; font-size: 16px; line-height: 24px; margin-bottom: 30px; padding: 0px; vertical-align: baseline;&quot;&gt;
Or is there something entirely different we can do to facilitate our lives, in the way money has so far? What could unmediated exchange of value look like? I would love your thoughts, thanks.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.batlin.com/feeds/8028386701055099368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.batlin.com/2015/01/disintermediation-of-money-can-we-do.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/8028386701055099368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/8028386701055099368'/><link rel='alternate' type='text/html' href='http://blog.batlin.com/2015/01/disintermediation-of-money-can-we-do.html' title='Disintermediation of money - can we do better?'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13347962016972401089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5959340623347047497.post-1606892637949925638</id><published>2015-01-18T04:57:00.001-08:00</published><updated>2015-01-18T04:57:09.429-08:00</updated><title type='text'>Eurostar Nightmare</title><content type='html'>We left the Alps on what was meant to be 10.25 am this Saturday. On a train still, being told that we are at least 1.5 hours from being allowed to enter the tunnel.&lt;br /&gt;&lt;br /&gt;The entire experience has been shambolic. Whilst the fire was an unfortunate accident, it is how a company responds to adversity that builds or destroys a brand.&lt;br /&gt;&lt;br /&gt;There was one single lady dealing with hotel allocations last night after they had over 3 hours to organise something - we were lucky and got a hotel as quickly as 2 hours on the account of us having two little children and being lucky to have tracked down a Eurostar rep who looked like he was running away from the calamity, but took pity on us. Others were still waiting in the queue at 10.30 pm.&lt;br /&gt;&lt;br /&gt;For some reason we had to travel in morning to Paris and do the whole check in again, whilst they had all the facilities in euro Disney - where they disembarked us overnight. Guess it was cheaper to for them to manage the shamble via the Paris hub rather than treat their customers with any sort of dignity.&lt;br /&gt;&lt;br /&gt;My two children are now too tired to scream, I am too tired to be truly angry, and I resign myself to Calais as my most likely resting place tonight. But all is well, we were told that our compensation will be a free Eurostar ticket - they are obviously not just incompetent and uncaring but outright sadistic.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;- Posted using BlogPress from my iPhone&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.batlin.com/feeds/1606892637949925638/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.batlin.com/2015/01/eurostar-nightmare.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/1606892637949925638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/1606892637949925638'/><link rel='alternate' type='text/html' href='http://blog.batlin.com/2015/01/eurostar-nightmare.html' title='Eurostar Nightmare'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13347962016972401089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5959340623347047497.post-4062643554539108328</id><published>2014-10-20T03:26:00.003-07:00</published><updated>2014-10-20T03:26:29.812-07:00</updated><title type='text'>Crypto Currencies : Will we need retail banking?</title><content type='html'>&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;I did a little bit of brainstorming on the subject of crypto / digital currencies and their impact on how we bank. A lot of people are skeptical about Bitcoin as an alternative currency. It feels a bit anti-establishment and likely to be squashed by governments if it ever becomes a serious threat - after all how will they set interest rates and do quantitative easing if they do not control the money supply.&lt;/span&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;That said, some say that if you wanted to build a new financial system that&#39;s better than today&#39;s, then blockchain, the technology that makes Bitcoin operate, might make it possible by rewriting the landscape of trust intermediation. Blockchain, a distributed ledger that can be adapted to authenticate and record a wide range of real-world financial transactions, such as clearing securities or transmitting international payments, demonstrates that digital records can be held securely without any central authority.&lt;/span&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;&quot;it just throws up all the cards in the air.&quot; - Sean Park, founder and chairman, Anthemis Group.&lt;/span&gt;&lt;/blockquote&gt;
&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;Bank of England describes it as a &quot;significant innovation&quot; that could have &quot;far-fetching implications&quot;. UK&#39;s chancellor George Osborne announced this year a government initiative to explore digital currencies. Blockchain changes the nature of fraud risk as there is no central place that would be a gold mine for hackers to attack. Due to in built use of cryptography, transactions are also naturally safer and prevent any asset in the system being spent twice.&lt;/span&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;&quot;[Blockchain] will revolutionize how assets are registered, exchanged, transacted and owned. Custodians, assets registries, exchanges, clearing and settlement service providers will have to take notice lest they will be disrupted fully.&quot; - Pascal Bouvier, partner, Route 66 Ventures.&lt;/span&gt;&lt;/blockquote&gt;
&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;So, blockchain is &quot;great&quot; but bitcoin is not to be trusted. A bunch of new startups are trying to improve on Bitcoin e.g. Stellar&amp;lt;&lt;/span&gt;&lt;a href=&quot;https://www.stellar.org/blog/introducing-stellar/&quot; style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;https://www.stellar.org/blog/introducing-stellar/&lt;/a&gt;&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;&amp;gt;, Ethereum&amp;lt;&lt;/span&gt;&lt;a href=&quot;https://www.ethereum.org/&quot; style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;https://www.ethereum.org/&lt;/a&gt;&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;&amp;gt;, Ripple&amp;lt;&lt;/span&gt;&lt;a href=&quot;https://ripple.com/protocol/&quot; style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;https://ripple.com/protocol/&lt;/a&gt;&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;&amp;gt; all talk about using blockchain, but all introduce their own currencies, not as fiat replacements but as intermediate exchange currencies or as proof of work. I think they will still suffer same distrust issues as Bitcoin. HyperLedger &amp;lt;&lt;/span&gt;&lt;a href=&quot;http://hyperledger.com/#getstarted&quot; style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;http://hyperledger.com/#getstarted&lt;/a&gt;&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;&amp;gt; is taking the next step forward and trying to introduce a blockchain technology that can represent any asset, and on first look is not trying to introduce a new currency, which is good news.&lt;/span&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;This opens up an intriguing possibility. If somehow we could solve the challenge of issuer&#39;s authenticity, possibility though the use of PKI i.e. a bit like today&#39;s website SSL certificates, why could the central banks not issue crypto currencies direct to citizens. Assuming that majority of central banks participated in a new type of blockchain protocol, then they each could issue their currencies as crypto currencies. No more alternative currencies, just fully fledged, legal fiat currency, only in crypto format. Today central banks don&#39;t want to do it because distribution of money and it&#39;s management is expensive, so they let retail banks handle it, but with crypto it is almost free, so why not bypass retail banks and have the control yourself.&lt;/span&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;On the consumer side, myself being one, I use retail banks for money security and convenience. Interest rates are the other traditional benefit, but being so low, it does not count for me now. Security becomes far less of an issue, as crypto currencies are by nature much more secure, so I don&#39;t need a bank for that. Convenience advantage also disappears as I can pay for anything using a mobile phone with crypto currency just as easily as with credit or current account card. Since there is no bank that holds custody of money, I do not need the deposit guarantee scheme.&lt;/span&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;So, all of a sudden, the good old retail bank that has been the financial platform since the 16th century, is no longer mandatory. Sure, I may want to exchange my crypto currency for paper money, but that can be operated by the ATM provider that is part of the blockchain network, not a bank. If I did want to get a bit of interest from my money, I can either choose to go P2P lending root for a superior lending rate but higher risk, or I could still transfer money to a bank that would pay me interest in exchange for my deposit.&lt;/span&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;However, even the way deposits work will change. An adjacent concept called smart contracts, goes hand in hand with blockchain technology. They are an extension of today&#39;s bitcoin transactions. You can think of a transaction as a contract that transfers X amount of money from a wallet with public key A to B, and optionally a small fee to the miner. So, Bitcoin already has some ability to add custom logic to a transaction, but it is not Turing complete i.e. there are no loops allowed. Newer protocols propose secure Turing complete execution environments, and Smart Oracles e.g. trusted data sources that supply external data to a contract so that it can execute complex logic in response to external events.&lt;/span&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;As a consumer, you would issue a smart contract that transfers X crypto pounds to your retail bank. In case of a current account, that contract would allow you to instantly ask for money back, in case of a savings account, there may be a pre-determined vesting period. The contract itself would pull in interest rates from the bank&#39;s smart oracle service, apply them to the amount under contract and depending on interest type, either add the amount of interest to money held under contract or transfer to your wallet. In case of bank&#39;s default, that contract would straight away transfer money back to the person ahead of any other creditor. Government in this case could provide a smart oracle defaults service.&lt;/span&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;In this case, Governments may not need to provide a deposit guarantee scheme at all if capital requirements are high, or offer a much smaller guarantee that would be cheap to administer as smart contracts would do all the settlements themselves. Based on this model, banks will strip away most of their proprietary infrastructure as the deposit smart contracts will be largely self-administrative, and there will be less risk in the economy in case of default.&lt;/span&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;Neither is FX safe, the other utility retail banks provide. In most cases today, I have to pre-load my account, either current account or some third party FX provider account before money transfer happens. I then pay FX fees and / or spread costs to market makers. Or, I can issue an FX smart contract where I specify how much I want to exchange at what rate, and how long will that position be valid for e.g. 30 secs. That contract will have it&#39;s own wallet private / public key. So I would transfer money from my account id to the contract account id, in effect creating an digital only escrow holder for a limited amount of time. If there is a blockhain match, then contract performs the exchange and I get the requested currency, if not, money is transferred back into my account from the contract escrow account. This may not be suitable for institutions as too much money would be locked up, but not an issue for consumers.&lt;/span&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;br style=&quot;font-family: Helvetica; font-size: 12px;&quot; /&gt;&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;So, why does this all matter. Simple - retail banking is THE finance platform today, feeding other banking services like wealth manager and investment banking i.e. retail banks convert small deposits into wholesale loans etc. If they disappear, all other forms of finance will be profoundly disrupted, and we need to anticipate the fallout to survive and prosper. In the next set of blogs I will try to investigate a less disruptive scenario - how could banks set-up a blockchain technology to trade financial instruments between themselves.&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.batlin.com/feeds/4062643554539108328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.batlin.com/2014/10/crypto-currencies-will-we-need-retail.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/4062643554539108328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/4062643554539108328'/><link rel='alternate' type='text/html' href='http://blog.batlin.com/2014/10/crypto-currencies-will-we-need-retail.html' title='Crypto Currencies : Will we need retail banking?'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13347962016972401089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5959340623347047497.post-3901318376850647838</id><published>2014-08-12T12:41:00.002-07:00</published><updated>2014-08-12T12:41:33.642-07:00</updated><title type='text'>Human Debt Avalanche</title><content type='html'>&lt;div style=&quot;font-family: Helvetica; font-size: 11px;&quot;&gt;
&lt;span style=&quot;letter-spacing: 0.0px;&quot;&gt;“We are exploring how to optimise our business though the use of big data” - said a lawyer, just like many others, at a recent CIO round table I had the privilege to host. That’s when a thought struck me - “you might not have a business to optimise, unless you start investing in robo-law right now”.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Helvetica; font-size: 11px; min-height: 13px;&quot;&gt;
&lt;span style=&quot;letter-spacing: 0.0px;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Helvetica; font-size: 11px;&quot;&gt;
&lt;span style=&quot;letter-spacing: 0.0px;&quot;&gt;Big data, like mobility and broadband internet, is part of the digital disruption wave that has already transformed music, video, news, publishing, photo and numerous other industries beyond all recognition. Knowledge workers; you are next.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Helvetica; font-size: 11px; min-height: 13px;&quot;&gt;
&lt;span style=&quot;letter-spacing: 0.0px;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Helvetica; font-size: 11px;&quot;&gt;
&lt;span style=&quot;letter-spacing: 0.0px;&quot;&gt;Need proof? My parents’ translation business was first aided by Google Translate and just a few years later destroyed by it. I saw bankers walked out of the door as algo trading took hold. Wealth management robo-advisors are mushrooming, and it’s not hard to imagine robo-law, auto-accounts and digi-doctors.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Helvetica; font-size: 11px; min-height: 13px;&quot;&gt;
&lt;span style=&quot;letter-spacing: 0.0px;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Helvetica; font-size: 11px;&quot;&gt;
&lt;span style=&quot;letter-spacing: 0.0px;&quot;&gt;So how did Google do it when most failed for years? Google was amongst the first to use machine learning and big data technology to harvest web’s huge amount of human translated text to improve accuracy. Slam-dunk!&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Helvetica; font-size: 11px; min-height: 13px;&quot;&gt;
&lt;span style=&quot;letter-spacing: 0.0px;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Helvetica; font-size: 11px;&quot;&gt;
&lt;span style=&quot;letter-spacing: 0.0px;&quot;&gt;Hypothesis: - Previously safe from machines, knowledge workers and their businesses will be disrupted, and for some terminally. Much like new entrants often arbitrage technology debt to out-compete the established heavyweights, disruptors will exploit new technology to avalanche human assets into human debt - very quickly and with little warning.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Helvetica; font-size: 11px; min-height: 13px;&quot;&gt;
&lt;span style=&quot;letter-spacing: 0.0px;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;font-family: Helvetica; font-size: 11px;&quot;&gt;
&lt;span style=&quot;letter-spacing: 0.0px;&quot;&gt;Need help? Flip your assumptions and start disrupting! Instead of thinking how computers can help humans, create and execute on a product roadmap that articulates how your most valued humans can help computers deliver enhanced value to your customers. Stop reading this, start now!&lt;/span&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.batlin.com/feeds/3901318376850647838/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.batlin.com/2014/08/human-debt-avalanche.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/3901318376850647838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/3901318376850647838'/><link rel='alternate' type='text/html' href='http://blog.batlin.com/2014/08/human-debt-avalanche.html' title='Human Debt Avalanche'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13347962016972401089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5959340623347047497.post-4567938912726902146</id><published>2014-01-03T02:44:00.003-08:00</published><updated>2014-01-06T01:10:53.111-08:00</updated><title type='text'>Post-contemporary Communication - Bridging Physical and Virtual Reality</title><content type='html'>&lt;div&gt;
Imagine a virtual digital assistant that just floats up in front of you and reminds you of the tasks that you need to complete, or better still tells you what was done on your behalf automatically?&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
What about a video conference where all the people are augmented in 3D right in front of you and stay in a fixed position as you move your head and walk around them?&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
How about floating text showing you operating instructions for any object that you are looking at?&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
Or picture an office of the future where there are no monitors because all employees are wearing augmented virtual reality headsets that gee a 360 sphere of display space, accessible by just turning their heads, whilst interacting with virtual objects using virtual hands!&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
People have talked about this kind of stuff for a while, but I think we are finally on the brink of making all of this a really, given the new up-and-coming, and more importantly affordable, consumer tech.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
But before we start, does anyone remember &lt;a href=&quot;http://secondlife.com/&quot;&gt;Second Life&lt;/a&gt;? It was the popular VR service launched in 2003, that&#39;s right, same year as&amp;nbsp;&lt;a href=&quot;https://www.linkedin.com/&quot;&gt;LinkedIn&lt;/a&gt;&amp;nbsp;and&amp;nbsp;before &lt;a href=&quot;https://www.facebook.com/&quot;&gt;Facebook&lt;/a&gt;&amp;nbsp;(2004) and&amp;nbsp;&lt;a href=&quot;https://twitter.com/&quot;&gt;Twitter&lt;/a&gt;&amp;nbsp;(2006). For a while it was the in-thing to do, and companies like IBM were hosting virtual conferences in Second Life, whilst ordinary people were converting &quot;real&quot; money into a virtual Linden dollar currency to buy virtual real estate, way before &lt;a href=&quot;http://en.wikipedia.org/wiki/Bitcoin&quot;&gt;Bitcoin&lt;/a&gt; started in 2009.&lt;br /&gt;
&lt;br /&gt;
Users in Second Life are able to not only explore the world, but also text chat or talk to each other using voice if they are near each other in the virtual world - an elegant alternative to &lt;a href=&quot;http://en.wikipedia.org/wiki/Session_Initiation_Protocol&quot;&gt;SIP&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/XMPP&quot;&gt;XMPP&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/IRC&quot;&gt;IRC&lt;/a&gt;. Not a fully fledged social network or a unified communications solution, but close.&lt;br /&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Second Life is still going, but the hype is gone. I tried it back in 2005, with the pre-conception that most people using it would be looking for an escape from their first life, so it would not be for me, as I was, and still am, in a pretty happy place in the real world. Many of the stereotypes did play out, but I did like the ability to explore new worlds i.e. cyber-turism, and that kept me entertained for a few hours.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Why did I stop using it? Well, I had no use for it - I did not need escapism, cyber-toursim kept my attention only for a short period, and I much preferred to meet people physically when possible rather than attend a virtual business conference - idea of walking to a virtual auditorium to view a presentation seemed crazy, when I could just open it in PowerPoint and not waste time walking to a virtual space.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Then came Facebook and Twitter, which also provided alternative to email, phone or text chat online communication channels, but with much lower &lt;a href=&quot;http://en.wikipedia.org/wiki/Activation_energy&quot;&gt;activation energy&lt;/a&gt; requirements than Second Life. Being social media, they also provide pub-sub model of communication i.e. stream of personalised news just for you, rather than just point-to-point or group blast communications.&lt;br /&gt;
&lt;br /&gt;
Final nail in the coffin for Second Life was widespread adoption of mobility, which lowered the activation energy for Facebook and Twitter usage even futher, making them ubiquitius, and froze out Second Life which would not run on less powerful mobile devices, or look good on a small screen.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
So, why am I mentioning Second Life after all this time? That&#39;s because there is a whole wave of new technology coming onboard that I think can breathe a new lease of life into Virtual Reality beyond gaming, and make Second Life like platforms useful again.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
A lot of people would have heard of &lt;a href=&quot;http://www.google.co.uk/glass/start/&quot;&gt;Google Glass&lt;/a&gt;, Google&#39;s take on augmented reality. A very exciting technology, that provides a heads-up display (&lt;a href=&quot;http://en.wikipedia.org/wiki/Heads_up_display&quot;&gt;HUD&lt;/a&gt;) for you in everyday life. Whether people like me, who do not like wearing glasses, will take it up, is another question, but having an ever present digital assistant is a attractive proposition nonetheless.&lt;br /&gt;
&lt;br /&gt;
The idea of a genuinely useful digital assistant today is also a far greater reality than back in 2005, chiefly because much more of our lives are now digital, and with the availability of &lt;a href=&quot;http://en.wikipedia.org/wiki/Big_data&quot;&gt;big data&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Semantic_data_model&quot;&gt;semantic modelling&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Semantic_reasoner&quot;&gt;reasoning&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Machine_learning&quot;&gt;machine learning&lt;/a&gt;, and natural language processing (&lt;a href=&quot;http://en.wikipedia.org/wiki/Natural_language_processing&quot;&gt;NLP&lt;/a&gt;) technologies, it is now possible for computers to be much more intelligent at a fraction of the previous cost.&lt;br /&gt;
&lt;br /&gt;
IBM&#39;s &lt;a href=&quot;http://www-03.ibm.com/innovation/us/watson/&quot;&gt;Watson&lt;/a&gt;&amp;nbsp;and Apple&#39;s &lt;a href=&quot;http://www.apple.com/uk/ios/siri/&quot;&gt;Siri&lt;/a&gt; are great examples of what can be achieved when you combine these technologies together. Or take a look at &lt;a href=&quot;http://wise.io/&quot;&gt;wise.io&lt;/a&gt; for machine learning, &lt;a href=&quot;http://wit.ai/&quot;&gt;wit.ai&lt;/a&gt; for natural language processing and &lt;a href=&quot;http://www.cognitum.eu/semantics/ontorion/&quot;&gt;Ontorion&lt;/a&gt; for semantic modelling and reasoning.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Augmented reality however is additive, not immersive, unlike virtual reality - this means that there is a limit to the experience, unlike VR. Also, presently Google Glass does not support head tracking, so your experience is not updated based on your head position changes, again limiting interaction.&lt;br /&gt;
&lt;br /&gt;
VR headsets, which include a head mounted display with head tracking have been around for a while, but are generally very expensive. For example, &lt;a href=&quot;http://www.vuzix.com/augmented-reality/products_star1200xld.html&quot;&gt;Vuzix SAT 1200XLD&lt;/a&gt; glasses are a snip at 5000 USD, however they combine virtual and augmented reality. But, &lt;a href=&quot;http://www.oculusvr.com/&quot;&gt;Oculus Rift&lt;/a&gt;, a VR only headset, is about to change all of it. A developer kit version is only 300 USD, so I assume a consumer version will be cheaper still.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I got hold of one, and have played with it for a few days. Rift comes with some pretty impressive demo applications, but the demo virtual universe is pretty limited. So, that&#39;s when I remembered Second Life and searched for any options to view SL with Rift. Lucky for me, some people have already created an alternative to SL&#39;s native player called &lt;a href=&quot;https://ctrlaltstudioviewer.codeplex.com/&quot;&gt;CtrlAltStudioViewer&lt;/a&gt;. Good news, it also works with &lt;a href=&quot;http://opensimulator.org/wiki/Main_Page&quot;&gt;OpenSim&lt;/a&gt; worlds.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The experience is pretty awesome. You get a truly immersive experience, way beyond what you get on a 2D screen. That said, I do have a few issues with Rift, chiefly, it makes me feel a bit queazy when moving about. I think that is down to a combination of refresh rate and pixel resolution. It&#39;s not that either are that bad, but because experience is so close to reality, anything that isn&#39;t 100% really effects you.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
I discovered that refresh rate becomes far more important in VR than in 2D, since you are much more likely to move your head a lot more often and more quickly than using a 2D screen. You need a fast PC and the VR server must be able to keep up too. Resolution is also still too grainy on Rift, as I can see the pixels in the current version.&lt;br /&gt;
&lt;br /&gt;
There is a another very exciting augmented / virtual reality product coming out September 2014, that&#39;s CastAR. Take a look at it&#39;s &lt;a href=&quot;http://www.kickstarter.com/projects/technicalillusions/castar-the-most-versatile-ar-and-vr-system&quot;&gt;Kickstarter&lt;/a&gt; page.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The other niggle I had was using a keyboard to interact with the virtual world, frankly it sucked. A while ago I got &lt;a href=&quot;https://www.leapmotion.com/&quot;&gt;Leap Motion&lt;/a&gt;. It is a little USB attached device that tracks your hands, I guess inspired by &lt;a href=&quot;http://www.xbox.com/en-GB/Kinect&quot;&gt;Kinnect&lt;/a&gt;. So, I thought about using it with the Rift and Second Life.&lt;br /&gt;
&lt;br /&gt;
I decided to look at Rift because it is well suited for a office desktop environment i.e. hands only. If you wanted to do full body tracking, then Kinnect is very good. If you actually wanted to walk around in the VR space, then take a look at &lt;a href=&quot;http://www.kickstarter.com/projects/1944625487/omni-move-naturally-in-your-favorite-game&quot;&gt;Omni&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Like Rift, Leap is a pretty awesome gadget for just 80 USD. It has a lot of promise, however my original use case was to turn any display into a 3D touch display, which it kind of does, but accuracy IMO is still not really good enough to easily allow me to interact with the PC desktop.&lt;br /&gt;
&lt;br /&gt;
However, unlike the 2D use cases, demo apps for Leap designed to manipulate 3D objects and recognise gestures felt a lot more natural in my experiments, so I figured using Leap Motion with Rift and Second Life would be a good fit.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Again, doing a quick search, lead me to this &lt;a href=&quot;http://blog.leapmotion.com/post/66044509917/user-spotlight-leaping-into-virtual-reality&quot;&gt;blog&lt;/a&gt;. Take a look at the video - damn impressive, however Leap Motion is used to map gestures and hand movement to controls, not display virtual hands. However, a separate project - Flight 0.1 does just this, take a &lt;a href=&quot;https://developer.oculusvr.com/forums/viewtopic.php?f=29&amp;amp;t=4330&quot;&gt;look&lt;/a&gt;! It would be great if someone combined the two - hint, hint :).&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
It&#39;s worth mentioning that Leap Motion and Kinnect are not alone. There is &lt;a href=&quot;http://www.razerzone.com/gb-en/gaming-controllers/razer-hydra/&quot;&gt;Razer Hydra&lt;/a&gt;, &lt;a href=&quot;http://2.lm3labs.com/technologies-2/airstrike/&quot;&gt;AirStrike&lt;/a&gt;, &lt;a href=&quot;http://www.threegear.com/&quot;&gt;3Gear&lt;/a&gt;, &lt;a href=&quot;http://pmdtec.com/&quot;&gt;PMD&lt;/a&gt;, &lt;a href=&quot;http://www.kickstarter.com/projects/89577853/stem-system-the-best-way-to-interact-with-virtual&quot;&gt;Stem&lt;/a&gt;&amp;nbsp;and &lt;a href=&quot;https://www.thalmic.com/en/myo/&quot;&gt;Myo&lt;/a&gt;. Myo takes a different approach, and uses a bracelet instead of cameras to track movement.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
There are a couple of other technologies that I think should be considered. One is around identity - making sure that you are who you say you are - passwords just do not feel conducive enough to an immersive experience, or frankly secure enough any more.&lt;br /&gt;
&lt;br /&gt;
Take a look at &lt;a href=&quot;http://www.getnymi.com/&quot;&gt;Nymi&lt;/a&gt;. It uses a bracelet with a hardware based secure element, heart beat monitor and gesture recognisers to identify you and control other systems over &lt;a href=&quot;http://en.wikipedia.org/wiki/Bluetooth_low_energy&quot;&gt;BLE&lt;/a&gt;. Waiting for that one to arrive! Imagine if your digital assistance knew if you are agitated by checking your heart rate and tried to calm you down! If you had enough of the assistance, you could just wave them away.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Next, how about knowing where you are! You first response might be - easy, just use GPS. However, what about in buildings where GPS reception is poor. For that consider micro positioning tech like Apple&#39;s &lt;a href=&quot;http://en.wikipedia.org/wiki/IBeacon&quot;&gt;iBeacon&lt;/a&gt;. You can place iBeacon protocol capable devices like &lt;a href=&quot;http://estimote.com/&quot;&gt;Estimote&lt;/a&gt;, &lt;a href=&quot;https://www.sticknfind.com/&quot;&gt;StickNFind&lt;/a&gt;, &lt;a href=&quot;http://redbearlab.com/ibeacon/&quot;&gt;Red Bear&lt;/a&gt; or &lt;a href=&quot;http://bleduino.cc/&quot;&gt;Bleduino&lt;/a&gt; in location of your choosing, and once a BLE enable device enters within the signal zone, it can pick up the beacon ID and react to it e.g. fetch a web page, update location in VR world etc.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Assuming the issues around head set refresh and resolution are sorted out, and support for 3D headsets and hand tracking is ubiquitous in VR clients and servers, then in principle, we get to a whole new paradigm of affordable VR. However, so what?&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Is there an application for VR beyond gaming, and into everyday life? To answer this, I loop back to Google Glass. I love the idea of an ever present digital assistant, but the current form it takes in Google Glass is a small amount of text overlaid over real life, with no head tracking.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
IMO that is not enough. Why do I say that? Let&#39;s take a real life example. I used to manage a team of great developers in Chicago and Moscow from London. To discuss next software release we used to talk about it over a conference call. However, because I could not see their expressions, it was really hard to decide if they were getting what I wanted them to do, or not.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Video conferencing at that time was either low quality like &lt;a href=&quot;http://www.skype.com/en/&quot;&gt;Skype&lt;/a&gt;, where the resolution and refresh are often too poor, so annoy me more than assist, or are too expensive e.g. &lt;a href=&quot;http://en.wikipedia.org/wiki/Cisco_TelePresence&quot;&gt;Cisco TelePresence&lt;/a&gt;, and require too much activation energy in form of booking a video conferencing room and walking over there, versus just joining a call from the desk.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Later, we installed &lt;a href=&quot;http://office.microsoft.com/en-gb/lync/&quot;&gt;Lync&lt;/a&gt;, and it was a game changer. Do not get me wrong, there are many really good alternatives to Lync, it&#39;s just I have experience with it. The setup we ended up with is what I would call good enough - the video quality is high enough and predictable enough to really benefit from seeing facial expressions and figure out if people you are talking to are connecting with your thoughts or not. That is, small changes can sometimes make a big difference.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Same story for augmented and virtual really. On their own, I think they are OK, but not good enough IMO to make me change my working practices, at least based on the current tech, which is just not bullet proof enough. Remember Apple&#39;s MessagePad? Probably not, it was just not good enough for mass consumption! Remember iPad? I bet you do, much the same idea, but it works well enough and look at the consumer base!&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
So, what do I think needs to happen? Easy to imagine, hard to implement - for the physical aspect, I want a combined &amp;nbsp;augmented virtual reality a.k.a. &lt;a href=&quot;http://www.telepresenceoptions.com/2014/01/try_mixed_reality_where_the_vi/&quot;&gt;mixed reality&lt;/a&gt; headset, with GPS and iBeacon location tracking, and some form of hand tracking, either using normal cameras (which Google Glass already tries to do) and/or infrared cameras (Leap Motion).&lt;br /&gt;
&lt;br /&gt;
Also I would like to combine Nymi with Myo, to get both identity and enhanced hand movement tracking. Finally, both the AVR headset and identity/tracking bracelet to talk to my smartphone over BLE or like, so that I can be mobile.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
On the software side, I think you need to combine chat, voice, video and email with social media but modify it for augmented virtual reality. Second Life already has voice and text chat, so why not take &amp;nbsp;a feed of events from social media (or allow people to follow events created in something like Second Life), present them in virtual space (&lt;a href=&quot;http://beaming-eu.org/&quot;&gt;beaming&lt;/a&gt;) and allow people to meet instantly if interested, but instead of &amp;nbsp;Skype call, just superimpose (augment) a live 3D video of the person.&lt;br /&gt;
&lt;br /&gt;
Alternatively, some people are experimenting with bringing the traditional desktop to VR environment, see &lt;a href=&quot;http://hwahba.com/ibex/&quot;&gt;Ibex&lt;/a&gt;. Looks cool, but I do not see how this actually adds to my productivity.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Once this kit and software combo is ready and works every time, than all the use cases I talked about are right round the corner! Can&#39;t wait!&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.batlin.com/feeds/4567938912726902146/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.batlin.com/2014/01/post-contemporary-communication.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/4567938912726902146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/4567938912726902146'/><link rel='alternate' type='text/html' href='http://blog.batlin.com/2014/01/post-contemporary-communication.html' title='Post-contemporary Communication - Bridging Physical and Virtual Reality'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13347962016972401089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5959340623347047497.post-2853769273290679450</id><published>2012-09-03T09:52:00.003-07:00</published><updated>2012-09-03T09:54:48.481-07:00</updated><title type='text'>Install IPSec VPN for iOS on Rackspace -1</title><content type='html'>&lt;br /&gt;
&lt;div style=&quot;border-collapse: collapse; color: #222222; font-family: Times; font-size: medium; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
I wanted to set-up an IPSec VPN server to connect my iOS devices to an private network. iOS now supports VPN on Demand (triggers VPN when a specific DNS entry is accessed) using Cisco IPSec (which StrongSwan supports) with multi-factor authentication (client X509 certificate and XAUTH username + password) of the box.&lt;/div&gt;
&lt;div style=&quot;border-collapse: collapse; color: #222222; font-family: Times; font-size: medium; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;border-collapse: collapse; color: #222222; font-family: Times; font-size: medium; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
I first tried OpenSwan which comes with RHEL6 / CentOS6 but it was a nightmare to configure, so I switched to StrongSwan. Still complex to configure, but at least I got it to work. To get going I created two CentOS 6 cloud servers on Rackspace, one to act as the VPN Gateway (Private IP =10.177.192.20, Public IP=5.79.25.82), and one as the web server behind that gateway (Private IP=10.177.198.18).&lt;/div&gt;
&lt;div style=&quot;border-collapse: collapse; color: #222222; font-family: Times; font-size: medium; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;border-collapse: collapse; color: #222222; font-family: Times; font-size: medium; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
Before going much further, ensure that selinux is turned off (vi /etc/selinux/config;&amp;nbsp;SELINUX=&lt;wbr&gt;&lt;/wbr&gt;disabled; reboot), most likely it is already. Now install StrongSwan:&lt;/div&gt;
&lt;div style=&quot;border-collapse: collapse; color: #222222; font-family: Times; font-size: medium; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
&lt;/div&gt;
&lt;ul style=&quot;border-collapse: collapse; color: #222222; font-family: Times; font-size: medium;&quot;&gt;
&lt;li style=&quot;margin-left: 15px;&quot;&gt;rpm -Uvh&amp;nbsp;&lt;a href=&quot;http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-7.noarch.rpm&quot; style=&quot;color: #1155cc;&quot; target=&quot;_blank&quot;&gt;http://download.fedoraproject.&lt;wbr&gt;&lt;/wbr&gt;org/pub/epel/6/i386/epel-&lt;wbr&gt;&lt;/wbr&gt;release-6-7.noarch.rpm&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;margin-left: 15px;&quot;&gt;yum install lsof man strongswan rng-tools&lt;/li&gt;
&lt;li style=&quot;margin-left: 15px;&quot;&gt;vi&amp;nbsp;/etc/sysconfig/rngd;&amp;nbsp;&lt;wbr&gt;&lt;/wbr&gt;EXTRAOPTIONS=&quot;-r /dev/urandom&quot;;&lt;/li&gt;
&lt;li style=&quot;margin-left: 15px;&quot;&gt;ln -s /usr/sbin/strongswan /usr/sbin/ipsec&lt;/li&gt;
&lt;li style=&quot;margin-left: 15px;&quot;&gt;service rngd start&lt;/li&gt;
&lt;li style=&quot;margin-left: 15px;&quot;&gt;service ipsec start&lt;/li&gt;
&lt;li style=&quot;margin-left: 15px;&quot;&gt;chkconfig rngd on&lt;/li&gt;
&lt;li style=&quot;margin-left: 15px;&quot;&gt;chkconfig ipsec on&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;border-collapse: collapse; color: #222222; font-family: Times; font-size: medium; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;border-collapse: collapse; color: #222222; font-family: Times; font-size: medium;&quot;&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
Then create the&amp;nbsp;/etc/init.d/vpn script as shown below, and make sure you can execute it and run at startup:&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li style=&quot;margin-left: 15px;&quot;&gt;chmod 755&amp;nbsp;/etc/init.d/vpn&lt;/li&gt;
&lt;li style=&quot;margin-left: 15px;&quot;&gt;service vpn start&lt;/li&gt;
&lt;li style=&quot;margin-left: 15px;&quot;&gt;chkconfig vpn on&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Next we need to create a new Certificate Authority (CA). Create the new_ca.sh script, and run it. It will create the new CA. Now generate both the VPN server and the iPhone certificates, by first of all creating the new_peer script as included below, and then execute it:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li style=&quot;margin-left: 15px;&quot;&gt;./new_peer.sh vpngateway &quot;5.79.25.82&quot; vpngateway&lt;/li&gt;
&lt;ul&gt;
&lt;li style=&quot;margin-left: 15px;&quot;&gt;note, IP must match the Public IP of your gateway&lt;/li&gt;
&lt;/ul&gt;
&lt;li style=&quot;margin-left: 15px;&quot;&gt;&amp;nbsp;./new_peer.sh alexiphone &quot;alexiphone&quot; alexiphone&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;border-collapse: collapse; color: #222222; font-family: Times; font-size: medium;&quot;&gt;
&lt;div&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
Copy the&amp;nbsp;vpngateway.p12 and alexiphone.p12 files from&amp;nbsp;/etc/strongswan/ipsec.d/&lt;wbr&gt;&lt;/wbr&gt;pkcs12 to your Mac, and then include them in the Configuration Profile using iPhone Configuration Utility, see screen shots later. Export the profile, and install on iPhone (email, website etc.) If you want to get clever, use SCEP server to auto-generate this file.&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
The /etc/strongswan/restart.sh script:&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;span style=&quot;color: #0b5394;&quot;&gt;#!/bin/sh&lt;br /&gt;ipsec stop&lt;br /&gt;service iptables stop&lt;br /&gt;service iptables start&lt;br /&gt;./iptables-nat.sh&lt;br /&gt;ipsec start&lt;/span&gt;&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div&gt;
The /etc/init.d/vpn script:&lt;/div&gt;
&lt;blockquote&gt;
&lt;span style=&quot;color: #0b5394;&quot;&gt;#!/bin/sh&lt;br /&gt;# chkconfig: 2345 20 80&lt;br /&gt;# description: Configures openswan specifics&lt;br /&gt;for f in /proc/sys/net/ipv4/conf/*/&lt;wbr&gt;&lt;/wbr&gt;accept_redirects; do echo 0 &amp;gt; $f; done&lt;br /&gt;for f in /proc/sys/net/ipv4/conf/*/&lt;wbr&gt;&lt;/wbr&gt;send_redirects; do echo 0 &amp;gt; $f; done&lt;br /&gt;echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;iptables -I INPUT -s&amp;nbsp;&lt;a href=&quot;http://0.0.0.0/0&quot; style=&quot;color: #1155cc;&quot; target=&quot;_blank&quot;&gt;0.0.0.0/0&lt;/a&gt;&amp;nbsp;-d 5.79.25.82 -p udp --dport 500 -j ACCEPT&lt;br /&gt;iptables -I OUTPUT -s 5.79.25.82 -d&amp;nbsp;&lt;a href=&quot;http://0.0.0.0/0&quot; style=&quot;color: #1155cc;&quot; target=&quot;_blank&quot;&gt;0.0.0.0/0&lt;/a&gt;&amp;nbsp;-p udp --dport 500 -j ACCEPT&lt;br /&gt;iptables -I INPUT -s&amp;nbsp;&lt;a href=&quot;http://0.0.0.0/0&quot; style=&quot;color: #1155cc;&quot; target=&quot;_blank&quot;&gt;0.0.0.0/0&lt;/a&gt;&amp;nbsp;-d 5.79.25.82 -p udp --dport 4500 -j ACCEPT&lt;br /&gt;iptables -I OUTPUT -s 5.79.25.82 -d&amp;nbsp;&lt;a href=&quot;http://0.0.0.0/0&quot; style=&quot;color: #1155cc;&quot; target=&quot;_blank&quot;&gt;0.0.0.0/0&lt;/a&gt;&amp;nbsp;-p udp --dport 4500 -j ACCEPT&lt;br /&gt;iptables -I INPUT -s&amp;nbsp;&lt;a href=&quot;http://0.0.0.0/0&quot; style=&quot;color: #1155cc;&quot; target=&quot;_blank&quot;&gt;0.0.0.0/0&lt;/a&gt;&amp;nbsp;-d 5.79.25.82 -p 50 -j ACCEPT&lt;br /&gt;iptables -I OUTPUT -s 5.79.25.82 -d&amp;nbsp;&lt;a href=&quot;http://0.0.0.0/0&quot; style=&quot;color: #1155cc;&quot; target=&quot;_blank&quot;&gt;0.0.0.0/0&lt;/a&gt;&amp;nbsp;-p 50 -j ACCEPT&lt;br /&gt;iptables -t nat -I POSTROUTING -s&amp;nbsp;&lt;a href=&quot;http://10.177.192.0/18&quot; style=&quot;color: #1155cc;&quot; target=&quot;_blank&quot;&gt;10.177.192.0/18&lt;/a&gt;&amp;nbsp;-d \!&amp;nbsp;&lt;a href=&quot;http://10.177.253.0/24&quot; style=&quot;color: #1155cc;&quot; target=&quot;_blank&quot;&gt;10.177.253.0/24&lt;/a&gt;&amp;nbsp;-o eth1 -j MASQUERADE&lt;br /&gt;iptables -t mangle -A PREROUTING -i eth0 -p esp -j MARK --set-mark 1&lt;br /&gt;iptables -I FORWARD -i eth0 -o eth1 -m mark --mark 1 -p tcp --dport 80 -j ACCEPT&lt;br /&gt;iptables -I FORWARD -i eth0 -m mark --mark 1 -p tcp --dport 80 -j ACCEPT&lt;br /&gt;iptables -A FORWARD -i eth0 -p tcp --dport 80 -j DROP&lt;/span&gt;&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div style=&quot;border-collapse: collapse; color: #222222; font-family: Times; font-size: medium;&quot;&gt;
&lt;div&gt;
The&amp;nbsp;/etc/strongswan/new_ca.sh script:&lt;/div&gt;
&lt;div&gt;
&lt;blockquote&gt;
&lt;span style=&quot;color: #0b5394;&quot;&gt;#!/bin/sh&lt;br /&gt;cd /etc/strongswan&lt;br /&gt;mkdir -p ipsec.d&lt;br /&gt;cd ipsec.d&lt;br /&gt;mkdir -p cacerts certs private pkcs12&lt;br /&gt;strongswan pki --gen &amp;gt; private/caKey.der&lt;br /&gt;openssl rsa -inform DER -outform PEM -in private/caKey.der -out private/caKey.pem&lt;br /&gt;strongswan pki --self --in private/caKey.der --dn &quot;C=UK, O=Netdata CN=Netdata CA&quot; &amp;gt; cacerts/caCert.der&lt;br /&gt;openssl x509 -inform DER -outform PEM -in cacerts/caCert.der -out cacerts/caCert.pem&lt;/span&gt;&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div&gt;
The&amp;nbsp;/etc/strongswan/new_peer.&lt;wbr&gt;&lt;/wbr&gt;sh script:&lt;/div&gt;
&lt;div&gt;
&lt;blockquote&gt;
&lt;span style=&quot;color: #0b5394;&quot;&gt;#!/bin/sh&lt;br /&gt;# 1=key name 2=cert cn 3=p12 name&lt;br /&gt;cd /etc/strongswan/ipsec.d&lt;br /&gt;echo &quot;Generating key&quot;&lt;br /&gt;strongswan pki --gen &amp;gt; private/${1}Key.der&lt;br /&gt;openssl rsa -inform DER -outform PEM -in private/${1}Key.der -out private/${1}Key.pem&lt;br /&gt;echo &quot;Generating certificate&quot;&lt;br /&gt;strongswan pki --pub --in private/${1}Key.der | strongswan pki --issue --cacert cacerts/caCert.der --cakey private/caKey.der --dn &quot;C=UK, O=Netdata, CN=${2}&quot; &amp;gt; certs/${1}Cert.der&lt;br /&gt;openssl x509 -inform DER -outform PEM -in certs/${1}Cert.der -out certs/${1}Cert.pem&lt;br /&gt;echo &quot;Generating pkcs12 file&quot;&lt;br /&gt;cat private/${1}Key.pem certs/${1}Cert.pem cacerts/caCert.pem | openssl pkcs12 -export -name &quot;${3}&quot; -out pkcs12/${1}.p12&lt;/span&gt;&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div&gt;
The&amp;nbsp;/etc/strongswan/&lt;wbr&gt;&lt;/wbr&gt;strongswan.conf file:&lt;/div&gt;
&lt;div&gt;
&lt;blockquote&gt;
&lt;span style=&quot;color: #0b5394;&quot;&gt;# strongswan.conf - strongSwan configuration file&lt;br /&gt;charon {&lt;br /&gt;&amp;nbsp; &amp;nbsp; # dnsl = 192.168.0.1&lt;br /&gt;&amp;nbsp; &amp;nbsp; # number of worker threads in charon&lt;br /&gt;&amp;nbsp; &amp;nbsp; threads = 16&lt;br /&gt;&amp;nbsp; &amp;nbsp; # send strongswan vendor ID?&lt;br /&gt;&amp;nbsp; &amp;nbsp; # send_vendor_id = yes&lt;br /&gt;&amp;nbsp; &amp;nbsp; plugins {&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;	&lt;/span&gt;sql {&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;		&lt;/span&gt;# loglevel to log into sql database&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;		&lt;/span&gt;loglevel = -1&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;		&lt;/span&gt;# URI to the database&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;		&lt;/span&gt;# database = sqlite:///path/to/file.db&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;		&lt;/span&gt;# database = mysql://user:password@&lt;wbr&gt;&lt;/wbr&gt;localhost/database&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;	&lt;/span&gt;}&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; # ...&lt;br /&gt;}&lt;br /&gt;pluto {&lt;br /&gt;}&lt;br /&gt;libstrongswan {&lt;br /&gt;&amp;nbsp; &amp;nbsp; # &amp;nbsp;set to no, the DH exponent size is optimized&lt;br /&gt;&amp;nbsp; &amp;nbsp; # &amp;nbsp;dh_exponent_ansi_x9_42 = no&lt;br /&gt;}&lt;/span&gt;&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div&gt;
The&amp;nbsp;/etc/strongswan/ipsec.&lt;wbr&gt;&lt;/wbr&gt;secrets file:&lt;/div&gt;
&lt;div&gt;
&lt;blockquote&gt;
&lt;span style=&quot;color: #0b5394;&quot;&gt;: RSA vpngatewayKey.der&lt;br /&gt;alex : XAUTH &quot;alex&quot;&lt;/span&gt;&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div&gt;
The&amp;nbsp;/etc/strongswan/ipsec.conf file:&lt;/div&gt;
&lt;div&gt;
&lt;blockquote&gt;
&lt;span style=&quot;color: #0b5394;&quot;&gt;config setup&lt;br /&gt;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;	&lt;/span&gt;interfaces=%defaultroute&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;	&lt;/span&gt;plutostart=yes&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;	&lt;/span&gt;nat_traversal=yes&lt;br /&gt;conn rw&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; left=%defaultroute&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; leftcert=vpngatewayCert.der&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; leftid=&quot;C=UK, O=Netdata, CN=5.79.25.82&quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; leftsubnet=&lt;a href=&quot;http://0.0.0.0/0&quot; style=&quot;color: #1155cc;&quot; target=&quot;_blank&quot;&gt;0.0.0.0/0&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;	&lt;/span&gt;leftsourceip=10.177.192.20&lt;br /&gt;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;	&lt;/span&gt;leftfirewall=yes&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; right=%any&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rightid=&quot;C=UK, O=Netdata, CN=*&quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rightsourceip=&lt;a href=&quot;http://10.177.253.0/24&quot; style=&quot;color: #1155cc;&quot; target=&quot;_blank&quot;&gt;10.177.253.0/24&lt;/a&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; keyexchange=ikev1&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; authby=xauthrsasig&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; xauth=server&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pfs=no&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; auto=add&lt;/span&gt;&lt;/blockquote&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
iPhone Configuration Utility screen shots:&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3_WlDqZuGJSxdnFMbByKRFo1gD82_vAoj9mgdI69ToEgNgqXiUtm7mlpioR5qGTzWYo6JSOLCV-MM8UW6Uhtipq23mOeE-dS16Ks7hze5p188JJ_wPAfJGTtmTkrs8ZEfIexXauB5kSo/s1600/Screen+Shot+2012-09-03+at+17.46.32.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3_WlDqZuGJSxdnFMbByKRFo1gD82_vAoj9mgdI69ToEgNgqXiUtm7mlpioR5qGTzWYo6JSOLCV-MM8UW6Uhtipq23mOeE-dS16Ks7hze5p188JJ_wPAfJGTtmTkrs8ZEfIexXauB5kSo/s320/Screen+Shot+2012-09-03+at+17.46.32.png&quot; width=&quot;202&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQnu3Fbo1A2OSFuBMNOtgTzPhCEhJrYN_bKJcsbNydjHb65sM1aJmS39Nd3GpB0ppyzfi2TcWlxlYhAgCe32F43pC6RTNVzN6l7SdIy1nVsY1AHQn0XYvnKJrs496vJuHWJsTAfZ4dyvo/s1600/Screen+Shot+2012-09-03+at+17.46.43.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;280&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQnu3Fbo1A2OSFuBMNOtgTzPhCEhJrYN_bKJcsbNydjHb65sM1aJmS39Nd3GpB0ppyzfi2TcWlxlYhAgCe32F43pC6RTNVzN6l7SdIy1nVsY1AHQn0XYvnKJrs496vJuHWJsTAfZ4dyvo/s320/Screen+Shot+2012-09-03+at+17.46.43.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikuEyeqCsY50jEiT2waQnMy_kSKPOqnO1ucJnqa0Z-AT5EmBa3EFIZNpJHdDCleUMFNmluxdHD-Cv4lyWhcN1wulkOLixtBrTuEkld5D1mWXVpm4TrVyAq0AlFoQmkS_blBR2KKO7nKUI/s1600/Screen+Shot+2012-09-03+at+17.46.47.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;280&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikuEyeqCsY50jEiT2waQnMy_kSKPOqnO1ucJnqa0Z-AT5EmBa3EFIZNpJHdDCleUMFNmluxdHD-Cv4lyWhcN1wulkOLixtBrTuEkld5D1mWXVpm4TrVyAq0AlFoQmkS_blBR2KKO7nKUI/s320/Screen+Shot+2012-09-03+at+17.46.47.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.batlin.com/feeds/2853769273290679450/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.batlin.com/2012/09/install-ipsec-vpn-for-ios-on-rackspace-1.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/2853769273290679450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/2853769273290679450'/><link rel='alternate' type='text/html' href='http://blog.batlin.com/2012/09/install-ipsec-vpn-for-ios-on-rackspace-1.html' title='Install IPSec VPN for iOS on Rackspace -1'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13347962016972401089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3_WlDqZuGJSxdnFMbByKRFo1gD82_vAoj9mgdI69ToEgNgqXiUtm7mlpioR5qGTzWYo6JSOLCV-MM8UW6Uhtipq23mOeE-dS16Ks7hze5p188JJ_wPAfJGTtmTkrs8ZEfIexXauB5kSo/s72-c/Screen+Shot+2012-09-03+at+17.46.32.png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5959340623347047497.post-9162393073103637810</id><published>2012-06-08T03:06:00.000-07:00</published><updated>2012-06-08T03:11:16.373-07:00</updated><title type='text'>Including multiple incompatible library versions on iOS</title><content type='html'>There will be times when you need to include different often incompatible versions of the same library in your project e.g. you may be using two different vendor SDKs, and both of them include OpenSSL libraries, but different versions.&lt;br /&gt;
&lt;br /&gt;
Both rely on THEIR version of OpenSSL, so your application will crash if you only link in one version of OpenSSL. However you cannot link to two different versions of a lib*.a file. There is however a solution.&lt;br /&gt;
&lt;br /&gt;
To begin, you need to determine if your libraries contain multiple architecture objects i.e. fat files. Run the lipo command to find out:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&amp;gt; lipo -info lib1.a&lt;/blockquote&gt;
Lipo command will list all of the included architectures. We will assume for this blog that we are dealing with a fat file. Next, you need to &quot;flatten&quot; the libraries provided by the vendor. For example, we may have three vendor supplied libraries : libcrypto.a, lib1.a and lib2.a.&lt;br /&gt;
&lt;br /&gt;
The libcrypto.a (bundled lib by the vendor, not written by them) OpenSSL library is the offender, so what we want to do is link it into lib1.a and lib2.a (vendor written libraries) and ensure that it&#39;s symbols are not exported (but vendor written libs exported symbols are also exported in the new object), thus creating a single file with no external symbol dependencies a.k.a dependency closure.&lt;br /&gt;
&lt;br /&gt;
We can &quot;flatten&quot; these libraries into single object file by using the LD command, but first we need to generate a list of exported symbols. To do so we use the NM command:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&amp;gt;&amp;nbsp;nm -g -arch armv6 $(ls *.a | grep -v libcrypto.a) | grep &#39; _&#39; | grep -v &#39; U _&#39; | sed &#39;s/^.* _/_/&#39; &amp;gt; libsuper-armv6.symbols&lt;/blockquote&gt;
The above command gets all the exported (-g) symbols for armv6 architecture for all but libcrypto.a libraries in the current directory, stripping out all non-symbol text (grep &#39; _&#39;), all undefined symbols (grep -v &#39; U _&#39;) and finally stripping all but the symbol name from a line (sed &#39;s/^.* _/_/&#39;).&lt;br /&gt;
&lt;br /&gt;
Output of that command is saved in the&amp;nbsp;libsuper-armv6.symbols file. We would need to run the same command but change the arch value based on all bundled architectures e,g. armv7 and i386. Now&amp;nbsp;we are ready to flatten the libs into a single object, we do so using LD:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&amp;gt;&amp;nbsp;ld *.a -arch armv6 -r -exported_symbols_list&amp;nbsp;libsuper-armv6.symbols&amp;nbsp;-o libsuper-armv6.o&lt;/blockquote&gt;
Above command will link all *.a libraries in the current directory and ensure that only the specified symbols are exported, with the output saved as a&amp;nbsp;libsuper-armv6.o file.&amp;nbsp;In this case libcrypto.a symbols are local, but lib1.a and lib2.a are exported, which creates the required dependency closure.&lt;br /&gt;
&lt;br /&gt;
This will then allow you to wrap a different version of libcrypto.a into other vendor&#39;s libraries and avoid clashes. Repeat the command above for other architectures.&lt;br /&gt;
&lt;br /&gt;
Finally, recombine the object files for different architectures into a single fat file using LIPO, and include this object into the Xcode project instead of the original vendor supplied libraries:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&amp;gt;&amp;nbsp;lipo -create libsuper-armv6.o libsuper-armv7.o libsuper-i386.o -output libsuper.o&lt;/blockquote&gt;
Job done!</content><link rel='replies' type='application/atom+xml' href='http://blog.batlin.com/feeds/9162393073103637810/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.batlin.com/2012/06/including-multiple-incompatible-library.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/9162393073103637810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/9162393073103637810'/><link rel='alternate' type='text/html' href='http://blog.batlin.com/2012/06/including-multiple-incompatible-library.html' title='Including multiple incompatible library versions on iOS'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13347962016972401089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5959340623347047497.post-620914857113530467</id><published>2012-03-29T10:38:00.003-07:00</published><updated>2012-08-01T01:22:05.637-07:00</updated><title type='text'>Spark and OpenFire External SASL Authentication with X.509 Certificates</title><content type='html'>&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Introduction&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The instant messaging and presence &lt;a href=&quot;http://en.wikipedia.org/wiki/XMPP&quot;&gt;XMPP&lt;/a&gt; protocol uses &lt;a href=&quot;http://en.wikipedia.org/wiki/Secure_Socket_Layer&quot;&gt;SSL&lt;/a&gt; to encrypt data in transport, and &lt;a href=&quot;http://en.wikipedia.org/wiki/Simple_Authentication_and_Security_Layer&quot;&gt;SASL&lt;/a&gt; as the chosen authentication frameworks. SASL supports a range of mechanisms e.g. PLAIN, OTP, EXTERNAL.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Most common method is to use PLAIN i.e. send username and password over SSL connection, and let the server look up user either against it&#39;s own user database, or access an external identity provider like an LDAP server, be that OpenLDAP or MicroSoft Active Directory Directory Services (AD).&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
In some circumstances, you may want to have a stronger form of security. This is where the EXTERNAL SASL mechanism comes in handy. It takes on the context&#39;s implicit identity i.e. using SSL connection&#39;s &lt;a href=&quot;http://en.wikipedia.org/wiki/X.509&quot;&gt;X.509&lt;/a&gt; &lt;a href=&quot;http://en.wikipedia.org/wiki/Public_key_infrastructure&quot;&gt;PKI&lt;/a&gt; certificates.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Websites supporting HTTPS use them all the time, however majority of the time the focus is on the server certificates to validate their authenticity, whilst user credentials are passed using login forms. It is also possible to issue user certificates that authenticate user&#39;s identity, as long as they are signed by a mutually trusted by the client and server certificate authority (CA).&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
User&#39;s identity a.k.a. user name is embedded in the certificate, which is then signed by a trusted on the client CA. When an XMPP SSL connection is being established, that certificate is passed back to the server, and since the server also trusts the same CA as the client, the certificate is read and the user name is extracted. No further identification is then required e.g. sending user name and password back to LDAP.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
In order to demonstrate how such a configuration can work in a real life scenario, let&#39;s create the following environment:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Install &lt;a href=&quot;http://en.wikipedia.org/wiki/Openfire&quot;&gt;OpenFire&lt;/a&gt; XMPP server on a CentOS 6 Linux server with a &lt;a href=&quot;http://en.wikipedia.org/wiki/Postgresql&quot;&gt;PostgreSQL&lt;/a&gt; database.&lt;/li&gt;
&lt;li&gt;Install &lt;a href=&quot;http://www.igniterealtime.org/projects/spark/&quot;&gt;Spark&lt;/a&gt; instant messaging client on a Mac - it&#39;s Java based so really any system will do.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
The next steps require some knowledge of cryptographic tools like &lt;a href=&quot;http://en.wikipedia.org/wiki/Openssl&quot;&gt;OpenSSL&lt;/a&gt; (assume that the openssl package is installed on the same server as the OpenFire package) and Java&#39;s &lt;a href=&quot;http://docs.oracle.com/javase/1.3/docs/tooldocs/win32/keytool.html&quot;&gt;keytool&lt;/a&gt;:&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Set-up a Certificate Authority&lt;/li&gt;
&lt;li&gt;Configure Spark and Openfire to trust new CA&lt;/li&gt;
&lt;li&gt;Configure OpenFire to use EXTERNAL SASL&lt;/li&gt;
&lt;li&gt;Configure Spark to use new signed user certificate&lt;/li&gt;
&lt;li&gt;Login with Spark using new certificate&lt;/li&gt;
&lt;/ul&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Set-up a Certificate Authority&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
First of all create the CA environment on the Linux server&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;mkdir /opt/exampleca&lt;/li&gt;
&lt;li&gt;cd /opt/exampleca&lt;/li&gt;
&lt;li&gt;mkdir certs private&lt;/li&gt;
&lt;li&gt;chmod g-rwx,o-rwx private&lt;/li&gt;
&lt;li&gt;echo &#39;01&#39; &amp;gt; serial&lt;/li&gt;
&lt;li&gt;touch index.txt&lt;/li&gt;
&lt;li&gt;vi openssl.conf&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;blockquote&gt;
[ ca ]&lt;br /&gt;
default_ca &lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;= exampleca&lt;br /&gt;
[ netdataca ]&lt;br /&gt;
dir &lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;= /opt/exampleca&lt;br /&gt;
certificate &lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;= $dir/cacert.pem&lt;br /&gt;
database &lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;= $dir/index.txt&lt;br /&gt;
new_certs_dir&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;= $dir/certs&lt;br /&gt;
private_key&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;= $dir/private/cakey.pem&lt;br /&gt;
serial&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;= $dir/serial&lt;br /&gt;
default_crl_days = 7&lt;br /&gt;
default_days&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;= 365&lt;br /&gt;
default_md&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;= md5&lt;br /&gt;
policy &lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;= exampleca_policy&lt;br /&gt;
x509_extensions&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;= certificate_extensions&lt;br /&gt;
[ exampleca_policy ]&lt;br /&gt;
commonName &lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;= supplied&lt;br /&gt;
stateOrProvinceName = supplied&lt;br /&gt;
countryName&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;= supplied&lt;br /&gt;
emailAddress&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;= optional&lt;br /&gt;
organizationName = supplied&lt;br /&gt;
organizationalUnitName = optional&lt;br /&gt;
[ certificate_extensions ]&lt;br /&gt;
basicConstraints = CA:false&lt;br /&gt;
[ req ]&lt;br /&gt;
default_bits &lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;= 2048&lt;br /&gt;
default_keyfile&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;= /opt/netdataca/private/cakey.pem&lt;br /&gt;
default_md&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;= md5&lt;br /&gt;
prompt&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;= no&lt;br /&gt;
distinguished_name = root_ca_distinguished_name&lt;br /&gt;
x509_extensions = root_ca_extensions&lt;br /&gt;
[ root_ca_distinguished_name ]&lt;br /&gt;
commonName&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;= Netdata CA&lt;br /&gt;
stateOrProvinceName = England&lt;br /&gt;
countryName&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;= UK&lt;br /&gt;
emailAddress&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;= ca@netdata.me&lt;br /&gt;
organizationName = Root Certificate Authority&lt;br /&gt;
[ certificate_extensions ]&lt;br /&gt;
basicConstraints = CA:false&lt;br /&gt;
[ req ]&lt;br /&gt;
default_bits &lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;= 2048&lt;br /&gt;
default_keyfile&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;= /opt/exampleca/private/cakey.pem&lt;br /&gt;
default_md&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;= md5&lt;br /&gt;
prompt&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;= no&lt;br /&gt;
distinguished_name = root_ca_distinguished_name&lt;br /&gt;
x509_extensions = root_ca_extensions&lt;br /&gt;
[ root_ca_distinguished_name ]&lt;br /&gt;
commonName&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;= Example CA&lt;br /&gt;
stateOrProvinceName = England&lt;br /&gt;
countryName&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;= UK&lt;br /&gt;
emailAddress&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;= ca@example.com&lt;br /&gt;
organizationName = Root Certificate Authority&lt;br /&gt;
[ root_ca_extensions ]&lt;br /&gt;
basicConstraints = CA:true&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;export OPENSSL_CONF=/opt/exampleca/openssl.conf&lt;/li&gt;
&lt;li&gt;openssl req -x509 -newkey rsa -out cacert.pem -outform PEM&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
The cacert.pem file is the public CA certificate.&lt;/div&gt;
&lt;/div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Configure Spark and OpenFire to trust new CA&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
Since both Spark and OpenFire are Java based products, we can use keytool utility for both. Before you begin, make sure that you have copied the cacert.pem file where you can access it, be that on the Spark client or OpenFire server host.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
For Spark, we assume that we use the default for your JRE paths, so open the terminal and:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b id=&quot;internal-source-marker_0.9877309505827725&quot; style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;keytool -import -alias exampleca -file cacert.pem&lt;/span&gt;&lt;/b&gt;&lt;div style=&quot;background-color: transparent;&quot;&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
For OpenFire, make sure your import the certificate into the default location&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b id=&quot;internal-source-marker_0.9877309505827725&quot; style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;keytool -import -alias exampleca -file /opt/exampleca/cacert.pem -keystore /opt/openfire/resources/security/client.truststore&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
Remember the password you set for the client.truststore, you will need when configuring OpenFire.&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Configure OpenFire to use EXTERNAL SASL&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; color: #333333;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;First, set the following OpenFire server properties using the Web UI:&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;xmpp.client.tls.policy&lt;/li&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #333333;&quot;&gt;
&lt;li style=&quot;border-collapse: collapse;&quot;&gt;xmpp.client.cert.policy : needed&lt;/li&gt;
&lt;li style=&quot;border-collapse: collapse;&quot;&gt;xmpp.client.certificate.crl : path to CRLs in a single file in PEM format.&lt;/li&gt;
&lt;li style=&quot;border-collapse: collapse;&quot;&gt;xmpp.client.certificate.accept-selfsigned : true&lt;/li&gt;
&lt;li style=&quot;border-collapse: collapse;&quot;&gt;xmpp.client.certificate.verify : true&lt;/li&gt;
&lt;li style=&quot;border-collapse: collapse;&quot;&gt;xmpp.client.certificate.verify.chain : true&lt;/li&gt;
&lt;li style=&quot;border-collapse: collapse;&quot;&gt;xmpp.client.certificate.verify.root : true&lt;/li&gt;
&lt;li style=&quot;border-collapse: collapse;&quot;&gt;xmpp.client.certificate.verify.validity : true&lt;/li&gt;
&lt;li style=&quot;border-collapse: collapse;&quot;&gt;xmpp.client.certificate.accept-selfsigned :&amp;nbsp;true&lt;/li&gt;
&lt;li style=&quot;border-collapse: collapse;&quot;&gt;xmpp.socket.ssl.client.truststore : set only if you don&#39;t want the default&lt;/li&gt;
&lt;li style=&quot;border-collapse: collapse;&quot;&gt;xmpp.socket.ssl.client.trustpass : &amp;lt;pass_for_client.truststore&amp;gt;&lt;/li&gt;
&lt;li style=&quot;border-collapse: collapse;&quot;&gt;sasl.mechs : EXTERNAL (or EXTERNAL,PLAIN,etc.&lt;/li&gt;
&lt;/span&gt;&lt;/ul&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; color: #333333;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;Also consider setting these values:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;xmpp.client.compression.policy : disabled&lt;/li&gt;
&lt;li&gt;xmpp.auth.anonymous : true&lt;/li&gt;
&lt;li&gt;xmpp.server.certificate.accept-selfsigned : true&lt;/li&gt;
&lt;li&gt;xmpp.server.compression.policy : disabled&lt;/li&gt;
&lt;li&gt;xmpp.server.dialback.enabled : false&lt;/li&gt;
&lt;li&gt;xmpp.server.tls.enabled : true&lt;/li&gt;
&lt;li&gt;xmpp.socket.ssl.active : true&lt;/li&gt;
&lt;/ul&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; color: #333333;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;Restart OpenFire server.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; color: #333333;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Configure Spark to use new signed user certificate&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
First of all we need to create a new user in OpenFire. When creating the user, select whatever password you want, this is not going to be used anyway. Make sure that whatever user id you create, matches the CN in the user certificate you are about to create.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
On the Sprak client, create a new key and generate a new certificate request.&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: transparent;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b id=&quot;internal-source-marker_0.9877309505827725&quot; style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;keytool -genkey -alias &amp;lt;userid&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;keytool -certreq -alias &amp;lt;userid&amp;gt; -file &amp;lt;userid&amp;gt;req.pem&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
Copy the certificate request to the CA server (in our example OpenFire server) and sign it.&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b id=&quot;internal-source-marker_0.9877309505827725&quot; style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;openssl ca -in &amp;lt;userid&amp;gt;req.pem&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 15px; white-space: pre-wrap;&quot;&gt;The output from the command above will display the certificate,save it to a file called &amp;lt;userid&amp;gt;cert.pem. Copy it to the Spark client host, and import it.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 15px; white-space: pre-wrap;&quot;&gt;keytool -import -alias &amp;lt;userid&amp;gt; -file &amp;lt;userid&amp;gt;cert.pem&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Login with Spark using new certificate&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
The final step. Start up Spark, but before you login, click on the Advanced button.&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Click on the PKI tab&lt;/li&gt;
&lt;li&gt;Tick the &quot;Use PKI authentication&quot; option&lt;/li&gt;
&lt;li&gt;Select &quot;Java Keystore&quot; as the PKI method&lt;/li&gt;
&lt;li&gt;Enter &quot;/User/&amp;lt;username&amp;gt;/.keystore for both Keystore and Truststore locations (assuming you used defaults)&lt;/li&gt;
&lt;li&gt;Enter the trust store password on the Spark client you set when you first started to generate keys and import certificates.&lt;/li&gt;
&lt;li&gt;Close the Advanced dialog&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
On the login screen:&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Enter your &amp;lt;userid&amp;gt; as the username, remember this must match the CN value in the certificate, and the OpenFire user name exactly.&lt;/li&gt;
&lt;li&gt;Instead of putting in the OpenFire account password, enter the truststore password which you used when you started importing CA and user certificates.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Note, I have only tested the use case where the truststore password is same as the certificate key password. They can be different, so I suspect you would need to put in the certificate key password here.&lt;br /&gt;
&lt;br /&gt;
Note, when I imported two different user certificates, the login process stopped working, suspect this is a bug. &lt;br /&gt;
&lt;br /&gt;
&lt;b style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-large;&quot;&gt;Enable SSL debugging on OpenFire&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
In some cases, you may need to see debug output from the SSL engine. To do so, modify the openfire.sh script by adding this line:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;OPENFIRE_OPTS=&quot;${OPENFIRE_OPTS} -Djavax.net.debug=all&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;b style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-large;&quot;&gt;Patch Openfire to support mixed-case with spaces certificates&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
By default Openfire will not let you create a user account in the embedded database using mixed-case. It converts everything to low case. However when it performs certificate based authentication, it will not convert the Common Name to lowercase, so your certificate will fail to authorise. If CN contains spaces, then those are not escaped either, which is what is required by Openfire.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
To fix this, you need to modify the ../net/SASLAuthentication.java file to include this line:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 11px;&quot;&gt;
&lt;span style=&quot;color: #931a68;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #931a68;&quot;&gt;static&lt;/span&gt; Status doExternalAuthentication(LocalSession session, Element doc)&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 11px;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #931a68;&quot;&gt;throws&lt;/span&gt; UnsupportedEncodingException {&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 11px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 11px;&quot;&gt;
...&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 11px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 11px;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;color: #4e9072;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;// new bit start&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 11px;&quot;&gt;
&lt;/div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;username = username.toLowerCase().replace(&lt;span style=&quot;color: #3933ff;&quot;&gt;&quot; &quot;&lt;/span&gt;, &lt;span style=&quot;color: #3933ff;&quot;&gt;&quot;\\20&quot;&lt;/span&gt;);&lt;br /&gt;

&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; principal = principal.toLowerCase().replace(&lt;span style=&quot;color: #3933ff;&quot;&gt;&quot; &quot;&lt;/span&gt;, &lt;span style=&quot;color: #3933ff;&quot;&gt;&quot;\\20&quot;&lt;/span&gt;);&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #4e9072;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;// new bit stop&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 11px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 11px;&quot;&gt;
&lt;/div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #931a68;&quot;&gt;if&lt;/span&gt; (AuthorizationManager.authorize(username,principal)) {&lt;br /&gt;

&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Log.debug(&lt;span style=&quot;color: #3933ff;&quot;&gt;&quot;SASLAuthentication: &quot;&lt;/span&gt;+principal+&lt;span style=&quot;color: #3933ff;&quot;&gt;&quot; authorized to &quot;&lt;/span&gt;+username);&lt;br /&gt;

&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; authenticationSuccessful(session, username,&amp;nbsp; &lt;span style=&quot;color: #931a68;&quot;&gt;null&lt;/span&gt;);&lt;br /&gt;

&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #931a68;&quot;&gt;return&lt;/span&gt; Status.authenticated;&lt;br /&gt;

&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;

&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &lt;span style=&quot;color: #931a68;&quot;&gt;else&lt;/span&gt; {&lt;br /&gt;

&lt;div style=&quot;color: #3933ff;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Log.debug(&lt;/span&gt;&quot;SASLAuthentication: unknown session type. Cannot perform EXTERNAL authentication&quot;&lt;span style=&quot;color: black;&quot;&gt;);&lt;/span&gt;&lt;/div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;

&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; authenticationFailed(session);&lt;br /&gt;

&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #931a68;&quot;&gt;return&lt;/span&gt; Status.failed;&lt;br /&gt;

&amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.batlin.com/feeds/620914857113530467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.batlin.com/2012/03/spark-and-openfire-external-sasl.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/620914857113530467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/620914857113530467'/><link rel='alternate' type='text/html' href='http://blog.batlin.com/2012/03/spark-and-openfire-external-sasl.html' title='Spark and OpenFire External SASL Authentication with X.509 Certificates'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13347962016972401089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5959340623347047497.post-1724765315279233505</id><published>2012-02-08T08:28:00.000-08:00</published><updated>2012-02-08T08:28:29.806-08:00</updated><title type='text'>Smart Communications Concept Pitch</title><content type='html'>&lt;br /&gt;
In order to compete effectively, companies must become increasingly agile. Agility in this context is defined as ability to respond in &quot;real time enough fashion&quot; to situations that impact the health and well being of the enterprise and its stakeholders.&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
Smart Communications (SC) builds on Unified Communications (UC) to deeply integrate social and collaborative&amp;nbsp;communication&amp;nbsp;techniques&amp;nbsp;using open, distributed, federated, plug-and-play standards which are able to cope with consumerisation, mobilisation, platform diversification and enterprise BYOD mega trends; whilst at the same time can track, respond and gain humanely impossible insights from huge amounts of information generated by federated communications systems and processed by big data analytics.&lt;/blockquote&gt;
Communication is perceived as a key component in improving agility, so to that end I have&amp;nbsp;been looking at Unified Communications (UC) tools strategy as an agility enabler. Aside agility, other benefits are often associated with a successful communication solutions:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;direct cost savings&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;VoIP cheaper than roaming&lt;/li&gt;
&lt;li&gt;social support communities reduce need for support staff&lt;/li&gt;
&lt;li&gt;teleworking can reduce primary and BCP real estate costs&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;improve employee and business process productivity
&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;do more with same, and in some cases less&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;enhance employee retention&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;better work-life balance using&amp;nbsp;teleworking&amp;nbsp;&lt;/li&gt;
&lt;li&gt;leads&amp;nbsp;to improved job satisfaction without increased spend&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;improve customer retention and gain new ones&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;customers will switch unless you provide mobile solutions&lt;/li&gt;
&lt;li&gt;as it fits with their changing lifestyles&lt;/li&gt;
&lt;li&gt;be proactive in responding to their social posts&lt;/li&gt;
&lt;li&gt;they value and recommend an organisation that listens and responds&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;br /&gt;
UC tools are often mentioned alongside collaboration, social media and social networking tools, so I wanted to understand how these fit together.&amp;nbsp;It struck me at first reading, that I was having trouble distinguishing these various categories of tools, as there is a lot of functional overlap. In the end, I defined the following mental model:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;collaboration, social media and social networking are all use cases which rely on communication.&lt;/li&gt;
&lt;li&gt;social media and social networking are primarily intended to create and maintain community communication by stimulating dialog, with or without a specific goal in mind.&lt;/li&gt;
&lt;li&gt;collaboration is about working together to achieve a goal; it relies on communities discussing how a goal is to be met and delivering a product that achieves that goal.&lt;/li&gt;
&lt;li&gt;you can communicate without being social or collaborating e.g. static website or blog.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Armed with that mental model, I re-visited the contemporary definition of UC:&amp;nbsp;integration of real-time with&amp;nbsp;non-real-time communication services;&amp;nbsp;UC is not a single product, but a set of products that provides a consistent unified user interface and user experience across multiple devices and media types.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Instant messaging (chat), presence information, telephony (including IP telephony), video conferencing, data sharing (including web connected electronic whiteboards), call control and speech recognition&amp;nbsp;are examples of real-time UC services.&lt;/li&gt;
&lt;li&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
Voicemail, e-mail, SMS and fax, also known as unified messaging,&amp;nbsp;are representatives of the non-real-time UC services. Blogs, discussion groups, bulletin boards, internet forums can also be included, but are less often cited as examples.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
As such, UC&#39;s broad definition does cover communication techniques required to support collaboration, social networking and social media; but at the time the term was coined, collaboration and social use cases were not commonly included in UC examples.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Audio conferencing, video conferencing, telepresence, web conferencing with document and desktop sharing and co-editing capabilities are all examples of collaboration services.&lt;/li&gt;
&lt;li&gt;YouTube is a good examples of a social media service -&amp;nbsp;set of tools to share and discuss something with a broad audience i.e.&amp;nbsp;web-based and mobile technologies used to turn communication into interactive dialogue.&lt;/li&gt;
&lt;li&gt;LinkedIn can be classed as a social networking service; it facilitates the action of networking with &amp;nbsp;a community of people.&lt;/li&gt;
&lt;/ul&gt;
Google+ (with it&#39;s Google+ Messenger), Facebook (with IM support) and Twitter (with Direct Messages) are all examples of tools that&amp;nbsp;straddle&amp;nbsp;UC, collaboration, social media and social networking worlds, as they operate both at network and public levels.&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
As great as these types of services are, they are often not much more than suite of tools brought under a single UI. Making a VoIP call, IM chatting or sending someone an email does not add an event to one&#39;s activity stream, therefore missing out social graph discovery&amp;nbsp;opportunities, and even if that does happen under the hood, it is not exposed to the user&#39;s community.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
In addition, these services are largely silo,&amp;nbsp;proprietary&amp;nbsp;solutions, unlike the established UC solutions e.g. STMP and XMPP, which are open and distributed. Many vendors initially interpreted UC as integration of communication techniques as long as they were provided by that vendor alone, however eventually a more open, distributed, standards based, pick-and-mix model prevailed.&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
There are other mega trends which impact on UC:&amp;nbsp;consumerisation, mobilisation; platform diversification and drive for BYOD in the&amp;nbsp;enterprise. At this point there is no consistent approach to dealing with all these aspects across the full range of UC&amp;nbsp;communication&amp;nbsp;techniques.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
There is one other mega trend that opens up a massive opportunity in the communications field, if applied successfully. IBM calls it Smarter Planet : instrumented, interconnected and intelligent. UC is already by and large instrumented and&amp;nbsp;interconnected, but it is not intelligent.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Today we rely on human beings to turn UC information into insights. Humans are pretty good at doing this up to a certain scale, but are latency and bandwidth limited to cope with huge volumes of data generated by UC systems. Distributed human activity also has a finite scale out for certain types of problems.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Until recently, even computer systems struggled to cope quickly enough with petabyte sized data pools, even if the huge cost of running such systems could be afforded. MapReduce frameworks like Hadoop&amp;nbsp;significantly&amp;nbsp;reduce the cost of both compute and storage capabilities, whilst at the same time provide almost limitless scale out.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Ability to process huge&amp;nbsp;amounts&amp;nbsp;of data, coupled with advanced analytics, open new opportunities for business optimisation by enabling rapid, informed and confident decisions and actions, not possible if humans alone are doing that work e.g. by using big data analytics over distributed systems, we can monitor topic sentiment and respond with speed and accuracy that would be impossible without automation.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
As I finished this mental journey, it dawned on me that if we are to meet all these new emerging needs and opportunities, we need something that is much more than UC, as it is understood today. So in it time honoured tradition, I made up a new term - Smart&amp;nbsp;Communications, to try and clearly differentiate it from today&#39;s Unified Communications, itself an evolution of Unified Messaging.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The need for differentiation is down to the&amp;nbsp;transformational&amp;nbsp;nature of changes required to meet new&amp;nbsp;challenges,&amp;nbsp;which were not as urgent when UC was first coined, and will fail to be addressed by sticky tape:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Extend&amp;nbsp;contemporary&amp;nbsp;UC to deeply integrate with social media, social networking and collaborative&amp;nbsp;communication&amp;nbsp;techniques using open, distributed, interoperable, plug-and-play standards.&lt;/li&gt;
&lt;li&gt;Evolve tools to cope with consumerisation, mobilisation, platform diversification and enterprise BYOD mega trends.&lt;/li&gt;
&lt;li&gt;Track, respond and gain humanely impossible insights from huge&amp;nbsp;amounts&amp;nbsp;of information generated by federated communications systems and processed by big data analytics.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
So Smart Communications is a term that represents a concept, implemented by a bunch of mashed-up tools.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.batlin.com/feeds/1724765315279233505/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.batlin.com/2012/02/smart-communications-concept-pitch.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/1724765315279233505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/1724765315279233505'/><link rel='alternate' type='text/html' href='http://blog.batlin.com/2012/02/smart-communications-concept-pitch.html' title='Smart Communications Concept Pitch'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13347962016972401089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5959340623347047497.post-3908992750153744427</id><published>2012-02-06T12:02:00.000-08:00</published><updated>2012-02-08T09:00:21.476-08:00</updated><title type='text'>Smart Communications 0.1 Specification</title><content type='html'>&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Abstract&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://blog.batlin.com/2012/02/smart-communications-concept-pitch.html&quot;&gt;Smart Communications&lt;/a&gt; (SC), as a concept, builds on Unified Communications (UC) to deeply integrate social and collaborative communication techniques using open, distributed, federated, plug-and-play standards which are able to cope with consumerisation, mobilisation, platform diversification and enterprise BYOD mega trends; whilst at the same time can track, respond and gain humanely impossible insights from huge amounts of information generated by federated communications systems and processed by big data analytics.&lt;br /&gt;
&lt;br /&gt;
Smart Communications, as a specification,&amp;nbsp;applies a group of related protocols (OStatus, XMPP etc.) to define Smart Communications standards to meet it&#39;s goals.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Motivation&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Integrating social networking and social media platforms gives us an opportunity to unlock social silos and get much better idea of a person&#39;s true social graph and the content they post across the internet, allowing exponential growth in ability to connect, recommend, comment and reply.&lt;br /&gt;
&lt;br /&gt;
That&#39;s not enough to give us the true social picture.&amp;nbsp;Vast majority of communication is still done via voice, IM, email, web conferencing etc, so all that social data is missing. To capture all that communication you must integrate social, real-time and non-real-time communication services as per the diagram above.&lt;br /&gt;
&lt;br /&gt;
But there is one other piece to this puzzle. Having enabled individuals to connect and work together better and faster than ever, we are still at the mercy of individuals to make the right connections, observe and react to events, make the necessary joins and turn data into information.&lt;br /&gt;
&lt;br /&gt;
Individuals are superb computational beings, and for their network, they have proven time and time again to be masters of data manipulation. What individuals are not great at, is analysis of huge amounts of data, quickly and consistently.&lt;br /&gt;
&lt;br /&gt;
Traditional RDBMS solutions are great for large data sets of structured data. However they start to struggle when processing data ranges of terabytes and beyond. Relational databases are being scaled out (VLDB), but often at a huge expense.&lt;br /&gt;
&lt;br /&gt;
Also, by it&#39;s very nature, communication data is semi-structured or just plain old unstructured. By forcing it into some sort of structure, you are in danger of either losing data (if aggregated and stored in a data warehouse) or stored in a way that makes asking new questions difficult.&lt;br /&gt;
&lt;br /&gt;
Big Data solutions like Hadoop change that. They allow cheap massive storage using HDFS, and ability to run MapReduce jobs on that data on an almost infinite number of compute resources. This way you can create a Hadoop grid using cheap commodity hardware.&lt;br /&gt;
&lt;br /&gt;
Since MapReduce always scans the entire data set (RDBMS full table scan), you can transform data on the fly every time. Using different regex&#39;s, you can scan the same data set, but ask all sorts of different questions, unlike with relational fixed schema databases. And since storage and compute are cheap, you can store a lot more data with aggregation.&lt;br /&gt;
&lt;br /&gt;
On the fly data transformation become even more powerful when coupled with&amp;nbsp;with natural language processing (NLP) to extract structured data out of unstructured content. The final piece is to apply content analytics and more traditional business intelligence tools to captured and extracted data to deduce solution to business problems e.g. are people duplicating effort, sentiment trading, what are the major bottom-up projects etc.&lt;br /&gt;
&lt;br /&gt;
This kind of&amp;nbsp;analyse&amp;nbsp;is already possible by social networking&amp;nbsp;fire hose&amp;nbsp;feeds. However that data is limited to interactions on that specific social site.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Background&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Each of the more established UC categories has it&#39;s own set of standards. &lt;a href=&quot;http://blog.batlin.com/2012/02/xmpp-irc-and-simple.html&quot;&gt;XMPP, IRC and SIMPLE&lt;/a&gt; are just three of the instant messaging and presence standards. &lt;a href=&quot;http://en.wikipedia.org/wiki/Real-time_Transport_Protocol&quot;&gt;RTP&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/RTP_Control_Protocol&quot;&gt;RTCP&lt;/a&gt; and &amp;nbsp;&lt;a href=&quot;http://en.wikipedia.org/wiki/Session_Initiation_Protocol&quot;&gt;SIP&lt;/a&gt;&amp;nbsp;are complimentary and commonly used protocols for voice and video transmission, both point to point and conferencing. &lt;a href=&quot;http://en.wikipedia.org/wiki/SMTP&quot;&gt;SMTP&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Post_Office_Protocol&quot;&gt;POP&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/IMAP&quot;&gt;IMAP&lt;/a&gt; are best known email standards.&lt;br /&gt;
&lt;br /&gt;
Social media and social networking systems are less mature, and are&amp;nbsp;largely&amp;nbsp;based on&amp;nbsp;proprietary&amp;nbsp;implementations. Much of the glue between those systems is based on RSS and Atom feeds. Standards like &lt;a href=&quot;http://blog.batlin.com/2012/02/ostatus-explained.html&quot;&gt;OStatus&lt;/a&gt; are emerging, but have low take up at this point. OStatus lets people on different social networks follow each other using HTTP based standards. It applies a group of related protocols:&amp;nbsp;&lt;a href=&quot;http://pubsubhubbub.googlecode.com/svn/trunk/pubsubhubbub-core-0.3.html&quot;&gt;PubSubHubbub&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;http://martin.atkins.me.uk/specs/activitystreams/atomactivity&quot;&gt;ActivityStreams&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;http://salmon-protocol.googlecode.com/svn/trunk/draft-panzer-salmon-00.html&quot;&gt;Salmon&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;http://portablecontacts.net/draft-spec.html&quot;&gt;Portable Contacts&lt;/a&gt;, and&amp;nbsp;&lt;a href=&quot;http://code.google.com/p/webfinger/wiki/WebFingerProtocol&quot;&gt;Webfinger&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Interestingly, instant messaging standards like XMPP have also defined &lt;a href=&quot;http://blog.batlin.com/2012/02/xmpp-for-social-media.html&quot;&gt;publish-subscribe and personal event extensions&lt;/a&gt; which define semantics for using the XMPP publish-subscribe protocol to broadcast state change events associated with an instant messaging and presence account.&amp;nbsp;In other words, it&#39;s way for an XMPP user to send updates or &quot;events&quot; to other users, who are typically contacts in the user&#39;s roster.&lt;br /&gt;
&lt;br /&gt;
In fact,&amp;nbsp;XMPP is designed with extensions in mind. It defines a concept called gateways - service on the XMPP network that translates between the XMPP protocols and the protocol used by another service e.g. IRC, SMS, Email etc. Social media and social networking were not on the radar when gateways were first designed, but they are flexible enough to adapt.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Architecture&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgguk9o2tL3We35uELIEBCFuWO3nQFJMlnzFE_0zMSAJW_eStV-hZGYXQhuXW_aYVep2-Ln2KE6Xg8j2KjfUrg-8jK8Y-DTvndUhQP38EPIDs3EKGtcMrZQeoyKBkXvK3isbQmDfXDjh1g/s1600/SmartSocialUCC.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgguk9o2tL3We35uELIEBCFuWO3nQFJMlnzFE_0zMSAJW_eStV-hZGYXQhuXW_aYVep2-Ln2KE6Xg8j2KjfUrg-8jK8Y-DTvndUhQP38EPIDs3EKGtcMrZQeoyKBkXvK3isbQmDfXDjh1g/s640/SmartSocialUCC.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Concepts&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Two key standards are relied upon: XMPP (with publish-subscribe and personal event extensions) and OStatus. XMPP&#39;s inbuilt extensibility via gateways is used as the glue. Hadoop is the chosen framework for big data analytics.&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;XMPP and OStatus gateway provides a deep integration between real-time and social communication services.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Email, SMS, voice mail and other unified messaging gateways bring the entire stack together.&lt;/li&gt;
&lt;li&gt;Firehosing all the generated information via a BigData gateway to HDFS and running analytics MapReduce jobs on captured data allows humanely impossible tracking, response and insights.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.batlin.com/feeds/3908992750153744427/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.batlin.com/2012/02/smart-social-uc.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/3908992750153744427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/3908992750153744427'/><link rel='alternate' type='text/html' href='http://blog.batlin.com/2012/02/smart-social-uc.html' title='Smart Communications 0.1 Specification'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13347962016972401089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgguk9o2tL3We35uELIEBCFuWO3nQFJMlnzFE_0zMSAJW_eStV-hZGYXQhuXW_aYVep2-Ln2KE6Xg8j2KjfUrg-8jK8Y-DTvndUhQP38EPIDs3EKGtcMrZQeoyKBkXvK3isbQmDfXDjh1g/s72-c/SmartSocialUCC.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5959340623347047497.post-6448819518783960770</id><published>2012-02-06T08:56:00.000-08:00</published><updated>2012-02-06T08:56:31.786-08:00</updated><title type='text'>XMPP for Social Media</title><content type='html'>The Extensible Messaging and Presence Protocol (&lt;a href=&quot;http://xmpp.org/about-xmpp/&quot;&gt;XMPP&lt;/a&gt;) is an open technology for real-time communication, which powers a wide range of applications including instant messaging, presence, multi-party chat, voice and video calls, collaboration, lightweight middleware, content syndication, and generalized routing of XML data.&lt;br /&gt;
&lt;br /&gt;
XMPP is designed with extensions in mind. One such extension is the XMPP &lt;a href=&quot;http://xmpp.org/extensions/xep-0163.html&quot;&gt;Personal Eventing Model&lt;/a&gt;, itself based on the XMP &lt;a href=&quot;http://xmpp.org/extensions/xep-0060.html&quot;&gt;Publish-Subscribe&lt;/a&gt; extension.&amp;nbsp;This specification defines semantics for using the XMPP publish-subscribe protocol to broadcast state change events associated with an instant messaging and presence account. This profile of pubsub therefore enables a standard XMPP user account to function as a virtual pubsub service, easing the discovery of syndicated data and event notifications associated with such an account.&lt;br /&gt;
&lt;br /&gt;
In other words, it&#39;s way for an XMPP user to send updates or &quot;events&quot; to other users, who are typically contacts in the user&#39;s roster. An event can be anything that a user wants to make known to other people, such as those described in User &lt;a href=&quot;http://xmpp.org/extensions/xep-0080.html&quot;&gt;Geolocation&lt;/a&gt;, &lt;a href=&quot;http://xmpp.org/extensions/xep-0107.html&quot;&gt;User Mood&lt;/a&gt;, &lt;a href=&quot;http://xmpp.org/extensions/xep-0108.html&quot;&gt;User Activity&lt;/a&gt;, and &lt;a href=&quot;http://xmpp.org/extensions/xep-0118.html&quot;&gt;User Tune&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
By creating an XMPP gateway to social media tools (e.g. Twitter, Facebook) via interfaces like &lt;a href=&quot;http://blog.batlin.com/2012/02/ostatus-explained.html&quot;&gt;OStatus&lt;/a&gt;, it&#39;s both possible now to syndicate social events for social media tools to messaging tools like IM, and vice-versa.</content><link rel='replies' type='application/atom+xml' href='http://blog.batlin.com/feeds/6448819518783960770/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.batlin.com/2012/02/xmpp-for-social-media.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/6448819518783960770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/6448819518783960770'/><link rel='alternate' type='text/html' href='http://blog.batlin.com/2012/02/xmpp-for-social-media.html' title='XMPP for Social Media'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13347962016972401089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5959340623347047497.post-4684401764319386319</id><published>2012-02-06T08:38:00.000-08:00</published><updated>2012-02-06T08:38:41.189-08:00</updated><title type='text'>XMPP, IRC and SIMPLE</title><content type='html'>&lt;br /&gt;
&lt;div style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; color: #575757; font-family: arial, helvetica, sans-serif; font-size: 10pt; line-height: 1.5em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 8px; padding-left: 8px; padding-right: 8px; padding-top: 8px; position: relative; text-align: left;&quot;&gt;
&lt;div style=&quot;margin-bottom: 0pt; margin-left: 0pt; margin-right: 0pt; margin-top: 0pt; padding-bottom: 0pt; padding-left: 0pt; padding-right: 0pt; padding-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 10pt; line-height: 1.5em;&quot;&gt;In this blog I wanted to compare and&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5em;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt; line-height: 1.5em;&quot;&gt;contrast competing near real time IM protocols, and suggest integration routes : XMPP, IRC and SIMPLE.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0pt; margin-left: 0pt; margin-right: 0pt; margin-top: 0pt; padding-bottom: 0pt; padding-left: 0pt; padding-right: 0pt; padding-top: 0pt;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0pt; margin-left: 0pt; margin-right: 0pt; margin-top: 0pt; padding-bottom: 0pt; padding-left: 0pt; padding-right: 0pt; padding-top: 0pt;&quot;&gt;
Whilst&amp;nbsp;&lt;a _mce_href=&quot;http://en.wikipedia.org/wiki/XMPP&quot; href=&quot;http://en.wikipedia.org/wiki/XMPP&quot; style=&quot;color: #2989c5; text-decoration: none;&quot;&gt;XMPP&lt;/a&gt;&amp;nbsp;evolved from Jabber as first of all a person to person protocol,&amp;nbsp;&lt;a _mce_href=&quot;http://en.wikipedia.org/wiki/IRC&quot; href=&quot;http://en.wikipedia.org/wiki/IRC&quot; style=&quot;color: #2989c5; text-decoration: none;&quot;&gt;IRC&lt;/a&gt;, an much earlier protocol was designed primarily for group chat. Both however have extended themselves to cover both group and person to person chat use cases.&amp;nbsp;&lt;a _mce_href=&quot;http://en.wikipedia.org/wiki/SIMPLE&quot; href=&quot;http://en.wikipedia.org/wiki/SIMPLE&quot; style=&quot;color: #2989c5; text-decoration: none;&quot;&gt;SIMPLE&lt;/a&gt;&amp;nbsp;protocol is an extension of the&amp;nbsp;&lt;a _mce_href=&quot;http://en.wikipedia.org/wiki/Session_Initiation_Protocol&quot; href=&quot;http://en.wikipedia.org/wiki/Session_Initiation_Protocol&quot; style=&quot;color: #2989c5; text-decoration: none;&quot;&gt;SIP&lt;/a&gt;&amp;nbsp;protocol, which originated from voice and video world, but was also extended to support IM. For details, see&amp;nbsp;&lt;a _mce_href=&quot;http://en.wikipedia.org/wiki/Comparison_of_instant_messaging_protocols&quot; href=&quot;http://en.wikipedia.org/wiki/Comparison_of_instant_messaging_protocols&quot; style=&quot;color: #2989c5; text-decoration: none;&quot;&gt;this&lt;/a&gt;&amp;nbsp;Wikipedia comparison.&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0pt; margin-left: 0pt; margin-right: 0pt; margin-top: 0pt; padding-bottom: 0pt; padding-left: 0pt; padding-right: 0pt; padding-top: 0pt;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0pt; margin-left: 0pt; margin-right: 0pt; margin-top: 0pt; padding-bottom: 0pt; padding-left: 0pt; padding-right: 0pt; padding-top: 0pt;&quot;&gt;
A nice feature of XMPP, is that it was designed with interop in mind - the standard defined gateways from XMPP to other protocols, both messaging such as&amp;nbsp;&lt;a _mce_href=&quot;http://en.wikipedia.org/wiki/AMPQ&quot; href=&quot;http://en.wikipedia.org/wiki/AMPQ&quot; style=&quot;color: #2989c5; text-decoration: none;&quot;&gt;AMPQ&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a _mce_href=&quot;http://en.wikipedia.org/wiki/JMS&quot; href=&quot;http://en.wikipedia.org/wiki/JMS&quot; style=&quot;color: #2989c5; text-decoration: none;&quot;&gt;JMS&lt;/a&gt;, as well as fire and forget ones like email and SMS.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0pt; margin-left: 0pt; margin-right: 0pt; margin-top: 0pt; padding-bottom: 0pt; padding-left: 0pt; padding-right: 0pt; padding-top: 0pt;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0pt; margin-left: 0pt; margin-right: 0pt; margin-top: 0pt; padding-bottom: 0pt; padding-left: 0pt; padding-right: 0pt; padding-top: 0pt;&quot;&gt;
XMPP has a number of defined standards that interop with voice and video (Jingle extension to XMPP relying on SIP connections). By adding IRC and SIMPLE gateways, you are now able to consolidate a whole host of messing platforms. If you wanted to bring in machine events, you could provide an SNMP and syslog gateways.&lt;/div&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.batlin.com/feeds/4684401764319386319/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.batlin.com/2012/02/xmpp-irc-and-simple.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/4684401764319386319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/4684401764319386319'/><link rel='alternate' type='text/html' href='http://blog.batlin.com/2012/02/xmpp-irc-and-simple.html' title='XMPP, IRC and SIMPLE'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13347962016972401089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5959340623347047497.post-2563482297317372360</id><published>2012-02-06T08:26:00.000-08:00</published><updated>2012-02-06T10:47:22.000-08:00</updated><title type='text'>OStatus explained</title><content type='html'>Another week and yet another social site. We are asked to network, but only within the confines of a specific website. Companies are creating their own closed social sites. They try to open them up to partners, but guess what? They have their own. Which one to use? Nightmare.&lt;br /&gt;
&lt;br /&gt;
A number of projects are trying to cover this gap, such as &lt;a href=&quot;http://diasporaproject.org/&quot;&gt;Diaspora &lt;/a&gt;and &lt;a href=&quot;http://status.net/open-source&quot;&gt;StatusNet&lt;/a&gt;. They are part of the &lt;a href=&quot;http://en.wikipedia.org/wiki/Distributed_social_network&quot;&gt;distributed social network&lt;/a&gt; movement, trying to break the grip of public sites like Twitter, Facebook, LinkIn and team centric tools like Chatter, Yammer and Jive. Note, these system often do offer some cross-posting, but no advanced features like following people across platforms.&lt;br /&gt;
&lt;br /&gt;
One of the standards I have been able to understand, is &lt;a href=&quot;http://ostatus.org/sites/default/files/ostatus-1.0-draft-2-specification.html&quot;&gt;OStatus&lt;/a&gt;, so I will try and explain it here. Just for sake of honesty, parts of the text to follow is copy/paste from the &lt;a href=&quot;http://ostatus.org/&quot;&gt;OStatus&lt;/a&gt; website.&amp;nbsp;OStatus lets people on different social networks follow each other. It applies a group of related protocols (&lt;a href=&quot;http://pubsubhubbub.googlecode.com/svn/trunk/pubsubhubbub-core-0.3.html&quot;&gt;PubSubHubbub&lt;/a&gt;, &lt;a href=&quot;http://martin.atkins.me.uk/specs/activitystreams/atomactivity&quot;&gt;ActivityStreams&lt;/a&gt;, &lt;a href=&quot;http://salmon-protocol.googlecode.com/svn/trunk/draft-panzer-salmon-00.html&quot;&gt;Salmon&lt;/a&gt;, &lt;a href=&quot;http://portablecontacts.net/draft-spec.html&quot;&gt;Portable Contacts&lt;/a&gt;, and &lt;a href=&quot;http://code.google.com/p/webfinger/wiki/WebFingerProtocol&quot;&gt;Webfinger&lt;/a&gt;) to this problem in a simple and obvious way.&lt;br /&gt;
&lt;br /&gt;
OStatus is a minimal specification for distributed status updates or microblogging. Many social applications can be modelled with status updates, however. Practically any software that generates RSS or &lt;a href=&quot;http://en.wikipedia.org/wiki/Atom_(standard)&quot;&gt;Atom&lt;/a&gt; feeds could be OStatus-enabled. Travel networks, event invitation systems, wikis, photo-sharing systems, social news sites, social music sites, podcasting servers, blogs, version control systems, and general purpose social networks would all be candidates for OStatus use.&lt;br /&gt;
&lt;br /&gt;
So let&#39;s start with Atom feeds.&amp;nbsp;The name Atom applies to a pair of related standards. The &lt;a href=&quot;http://tools.ietf.org/html/rfc4287&quot;&gt;Atom Syndication Format&lt;/a&gt; is an XML language used for web feeds, while the &lt;a href=&quot;http://bitworking.org/projects/atom/rfc5023.html&quot;&gt;Atom Publishing Protocol&lt;/a&gt; (AtomPub or APP) is a simple HTTP-based protocol for creating and updating web resources. In fact AtomPub is considered to be the canonical &lt;a href=&quot;http://tools.ietf.org/html/rfc5023&quot;&gt;RESTful protocol&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Application can generate Atom feeds based on any number of criteria e.g. system events, new database entries, new messages. Blogging sites can generate atom feeds of a user&#39;s blog posts. Those posts could have been generated using&amp;nbsp;proprietary&amp;nbsp;clients and stored in a database, and then exposed as Atom feeds, or they may support REST clients, so a user can&amp;nbsp;add/update/delete blog entries using a RESTful client via AtomPub protocol.&lt;br /&gt;
&lt;br /&gt;
ActivityStreams feed standard is based on Atom, and extends it to define a collection of activities. This way any client that understands this specific dialect of Atom can interoperate with any server that also support its.&amp;nbsp;Typical updates in the feed would be represented in the default &lt;a href=&quot;http://activitystrea.ms/head/activity-schema.html&quot;&gt;Activity Schema&lt;/a&gt;, another Atom standard, this time for items in the feed, not the feed itself.&lt;br /&gt;
&lt;br /&gt;
Activities such as user posting a new blog or note, someone replying to it to start a discussion, or just marking it as liked or sharing it with other users, all generate new activity entries in a feed. Typically these postings would be done via AtomPub, but they may have been captured by other means e.g. &lt;a href=&quot;http://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol&quot;&gt;SMTP&lt;/a&gt; or &lt;a href=&quot;http://xmpp.org/about-xmpp/&quot;&gt;XMPP&lt;/a&gt; traps.&lt;br /&gt;
&lt;br /&gt;
Since Atom (and RSS) feeds have been around, many tools have been created to read them e.g. desktop tools like RSS Bandit, MS Outlook; and web tools like Google Reader. Most of them rely on polling (fetch feed every 30 mins) to get new items. It&#39;s a working model, but in the new fast paced world we live in, can be too slow. So OStatus uses the PubSubHubbub protocol to ensure that as soon as a new activity has been published, a subscriber is notified of this event and can view the new entry in near real time.&lt;br /&gt;
&lt;br /&gt;
Social networking / media sites like Twitter do this already i.e. as soon as someone posts something, all those people that subscribe to those posts see it in near real time. Great if your entire system is based on a single tool, PubSubHubbub allows you to syndicate these posts to as many subscribers in any&amp;nbsp;compatible&amp;nbsp;system as you want.&lt;br /&gt;
&lt;br /&gt;
The other innovation introduced by Social tools is the ability to reply, share, comment and like posts. This is a great way to start a conversation. Most sites though keep all those social conversations locked within that tool. Use of the Salmon protocol, piggy backed off the PubSubHubbub protocol, ensures that all those social comments and conversation in may different tools are&amp;nbsp;propagated&amp;nbsp;back to the original source, and then re-syndicated in their consolidated form back to the subscribers.&lt;br /&gt;
&lt;br /&gt;
Let&#39;s give an example at this point. I am a blog poster, using Google&#39;s Blogger service. When I post a new blog, a new event is added to my ActivityStream. I have three subscribers. One user on Twitter, one on FaceBook and one on Google Reader. Note, Twitter and Facebook do not support OStatus at this point, so this is a fictional example. The Twitter user enjoys my post, and retwitts it. Based on that retwitt, people post a number of replies. The Facebook subscriber comments on blog entry, and their friends mark it as liked. Google Reader subscriber shares my post using +1.&lt;br /&gt;
&lt;br /&gt;
It&#39;s great that all those comments were made, but as the original blogger, I have no visibility of this, nor do the users of the&amp;nbsp;separate&amp;nbsp;systems. Ideally all those comments and updates should be visible to everyone, no matter which tool or service they use. By using PubSubHubbub and Salmon, that&#39;s exactly what happens.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigco5PKaJTYCZCM-j_VesSTTG-83NdSiNcVGkuJeEaFICrdJL1BT6RZg3DXe8iqYbpitW0p0Fl5fbGJWl66N2jbQF5n6qqYR-YD2PzPv0ZrCWpAExXiMRmRDmG2RW1lJCugO-grcwqkMc/s1600/OStatus.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;390&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigco5PKaJTYCZCM-j_VesSTTG-83NdSiNcVGkuJeEaFICrdJL1BT6RZg3DXe8iqYbpitW0p0Fl5fbGJWl66N2jbQF5n6qqYR-YD2PzPv0ZrCWpAExXiMRmRDmG2RW1lJCugO-grcwqkMc/s640/OStatus.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;span id=&quot;goog_1566996163&quot;&gt;&lt;/span&gt;&lt;span id=&quot;goog_1566996164&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Subscriber (e.g. Twitter user) polls Publisher&#39;s feed (e.g. Blogger ActivityStream);&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;Feed contains a forward link to the Hub.&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;Subscriber POSTs subscription request to the Hub;&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;The request contains the endpoint URL&amp;nbsp;where the Hub should POST new updates;&lt;/li&gt;
&lt;li&gt;Hub POSTs to the endpoint URL to verify the request was authentic;&lt;/li&gt;
&lt;li&gt;Subscriber responds with confirmation to the Hun.&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;New entry is posted, using AtomPub protocol, or by some other means (e.g. iPhone client to Blogger);&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;Publisher notifies Hub about updates by POSTing feed URLs to the Hub;&lt;/li&gt;
&lt;li&gt;Hub pulls the feed again to find new entries;&lt;/li&gt;
&lt;li&gt;If the Publisher does not inform the Hub, the Hub will periodically poll the Publisher&#39;s feed for new updates;&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;When the Hub&amp;nbsp;receives&amp;nbsp;new update to feed X, it POSTs the update to the Subscriber&#39;s endpoint URL;&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;If feed XY has multiple subscribers, the Hub sends updates to all of them. This reduces load on the Publisher.&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;New comment is posted on the Aggregator (e.g. Twitter);&amp;nbsp;&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;It pushes the comment back upstreat to the Source&amp;nbsp;using Salmon, based on a link contained in the feed;&lt;/li&gt;
&lt;li&gt;Step 3 is initiated which forms a loop.&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
All it takes to subscribe to someone&#39;s feed, is their email address, as long as domain support the &lt;a href=&quot;http://code.google.com/p/webfinger/wiki/WebFingerProtocol&quot;&gt;WebFinger&lt;/a&gt; protocol. Google supports it for all Google mail users.&lt;br /&gt;
&lt;br /&gt;
At it&#39;s simplest level, WebFinger specifies that you should take an email address, extract the domain name, and download that domain&#39;s &lt;a href=&quot;http://tools.ietf.org/html/draft-hammer-hostmeta-05&quot;&gt;host-meta&lt;/a&gt; &lt;a href=&quot;http://docs.oasis-open.org/xri/xrd/v1.0/xrd-1.0.html&quot;&gt;XRD&lt;/a&gt; file. Using &lt;a href=&quot;http://tools.ietf.org/html/draft-hammer-discovery-06&quot;&gt;LRDD&lt;/a&gt; templates, get user&#39;s XRD file.&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&amp;lt;Link rel=&quot;lrdd&quot; template=&quot;https://meta.example.org/?q={uri}&quot; &amp;nbsp;type=&quot;application/xrd+xml&quot; /&amp;gt;&lt;br /&gt;
So given {uri} = acct:foo@example.com, this yields after swizzling:&lt;br /&gt;
https://meta.example.org/?q=acct%3Afoo%40example.com&lt;/blockquote&gt;
Extract service links e.g. blogger ActivityStreams URL from user&#39;s XRD file. Alternatively, feed links may be include in user&#39;s profile page, and discovered using &lt;a href=&quot;http://tools.ietf.org/html/draft-nottingham-http-link-header-10&quot;&gt;Web Linking&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.batlin.com/feeds/2563482297317372360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.batlin.com/2012/02/ostatus-explained.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/2563482297317372360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/2563482297317372360'/><link rel='alternate' type='text/html' href='http://blog.batlin.com/2012/02/ostatus-explained.html' title='OStatus explained'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13347962016972401089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigco5PKaJTYCZCM-j_VesSTTG-83NdSiNcVGkuJeEaFICrdJL1BT6RZg3DXe8iqYbpitW0p0Fl5fbGJWl66N2jbQF5n6qqYR-YD2PzPv0ZrCWpAExXiMRmRDmG2RW1lJCugO-grcwqkMc/s72-c/OStatus.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5959340623347047497.post-8764559907223278518</id><published>2012-02-03T06:30:00.000-08:00</published><updated>2012-02-03T06:30:27.538-08:00</updated><title type='text'>Social feeds architecture</title><content type='html'>If you blog, most likely you want a lot of people to find and read your blog. In the good old days, blogging on a Google indexed site (Blogger) and exposing an RSS feed was good enough. Exposing your feed through FeedBurner also allows you to analyse traffic, usage etc. to help you improve your blog and possibly monetorize it.&lt;br /&gt;
&lt;br /&gt;
With the rise of social media platforms like LinkedIn, Facebook and Twitter, it&#39;s important to get your message out there too, so people can discuss, comment and recommend your blog. What you don&#39;t want to do though is have to remember to cross post your blog entries manually to multiple sites.&lt;br /&gt;
&lt;br /&gt;
No fear, with TwitterFeed, you can get it to scan your RSS feed (or using PubSubHubbub you can be notified of changes in near real time) and post new blog entries as Tweets.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizqRjOt9yBT7Rsa0Imxhmez5VKUgQAPfaPqA53zum26ZOMxakASvFBmH3Chi6oDuy9nKFyD5eAcqhuwdSP21cKnmyUKv8fKhqU58S7zKhOiE1XZIoKz4RfuSe3RM4OqIofhBsG0Ee4SNE/s1600/SocialFeeds.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizqRjOt9yBT7Rsa0Imxhmez5VKUgQAPfaPqA53zum26ZOMxakASvFBmH3Chi6oDuy9nKFyD5eAcqhuwdSP21cKnmyUKv8fKhqU58S7zKhOiE1XZIoKz4RfuSe3RM4OqIofhBsG0Ee4SNE/s640/SocialFeeds.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
You probably also have a personal web site. I use Google Sites. By using an RSS widget, I can display my Blogger entries on my personal site. People can also subscribe to that feed using Google Reader or such like.&lt;br /&gt;
&lt;br /&gt;
Twitter can be configured to post twits to Facebook, so that&#39;s pretty handy. LinkedIn can be configured to both post status updates to Twitter, and pick up Twitter twits and display them as LinkedIn status updates.&lt;br /&gt;
&lt;br /&gt;
Whilst Twitter has stopped exposing twits as RSS feeds, they do provide JavaScript&amp;nbsp;snippets to display your twits. You can wrap that JavaScript into an OpenSocial widget and add it to you Google Sites personal website.&lt;br /&gt;
&lt;br /&gt;
Now, when you read news stories in Google Reader from subscribed to feeds, you can share interesting stories by posting links to Twitter, which given the above set-up will post updates in Facebook, LinkedIn and display them on your personal website.&lt;br /&gt;
&lt;br /&gt;
If you want to read the stories off-line on your smartphone or tablet, you can send them from you Google Reader (or an app linked to your account on iOS or Android) to Instapaper, which will cache the story when you device is internet connected and mobilise it for easy reading - strip away ads etc. If you like a story that you have on Instapaper, mark it as liked, and Instapaper can post a link to that story to Twitter.</content><link rel='replies' type='application/atom+xml' href='http://blog.batlin.com/feeds/8764559907223278518/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.batlin.com/2012/02/social-feeds-architecture.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/8764559907223278518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/8764559907223278518'/><link rel='alternate' type='text/html' href='http://blog.batlin.com/2012/02/social-feeds-architecture.html' title='Social feeds architecture'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13347962016972401089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizqRjOt9yBT7Rsa0Imxhmez5VKUgQAPfaPqA53zum26ZOMxakASvFBmH3Chi6oDuy9nKFyD5eAcqhuwdSP21cKnmyUKv8fKhqU58S7zKhOiE1XZIoKz4RfuSe3RM4OqIofhBsG0Ee4SNE/s72-c/SocialFeeds.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5959340623347047497.post-5365217395103547057</id><published>2011-11-24T00:54:00.001-08:00</published><updated>2011-11-24T02:15:25.330-08:00</updated><title type='text'>Agile fundamentalism</title><content type='html'>Went along to a meeting last night to talk about Cloud technology, and was reminded how even most pragmatic ideas are turned into fundementalist dogmatic disciplines - I am indeed talking about agile development.&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;i&gt;Agile the agile. Agree to set the itteration duration at the beginning of each sprint to be as short as possible, but no shorter - based on the objective of the sprint, loosely sequenced by classical waterfall approach, and depended on factors such as architectual complexity (cost and time to re-architect), product maturity (need to back support),&amp;nbsp;importance of time to market, criticality of the solution, complexity of new use-cases and the time and cost to build, test and deploy.&lt;/i&gt;&lt;/blockquote&gt;
Having worked in the banking sector for over 10 years running software development and distribution engineering and development teams, I have learned the hard way that stakeholders are as hard to pin down as budget, requirements are never clear, and expectations always run way ahead of allocated resources, and change on a whim of political games.&lt;br /&gt;
&lt;br /&gt;
Agile development is naturally appealing, compared to university taught waterfall and iterative style methodologies. It acknowledges the fact that we simply cannot predict with any accuracy future delivery timelines largely because any captured use cases and requirements are models of the business analysts understanding of what a customer needs, which in turn is their model of a solution they have not seen yet. Models often fall apart once tested, so we need to accept the arrow and circle semi-chaotic nature of development.&lt;br /&gt;
&lt;br /&gt;
So I don&#39;t have an issue with agile, I have an issue how it is being promoted by many people i.e. all is well, we are agile. According to evangelists, over 80% project in 2012 will be agile.&amp;nbsp;But what the heck does that actually mean?&lt;br /&gt;
&lt;br /&gt;
This reminded me of the time I interviewed a developer whose CV had agile developer plastered all over it. We got on well, so I asked him what made him an agile developer, his answer was &quot;because it gets me a job&quot;. I kinda agree with him, agile has become a fashion statement, all I need to do is go to an interview with my iPad that has my agile CV on it, sold!&lt;br /&gt;
&lt;br /&gt;
This is a bit like the big vendors slapping enterprise in front of all their products, and repeating that mantra to scare you away from cheaper alternatives with little in a way of differentiating feature lists. &lt;br /&gt;
&lt;br /&gt;
Years ago I ran an event which I invited Grady Booch to, and he talked about agile. He describe the productivity gains that can be made by an agile team composed of smart, motivated, co-located developers with active participation from their stakeholders. Hmm, I think just about any methadology will deliver a success.&lt;br /&gt;
&lt;br /&gt;
Try doing it with a small team of de-motivated double-doughnut (no bonus, no pay rise) employees spread around the globe, with little time overlap, trying to manage an army of equally un-motivated out-sourcers with language and cultural differences, subject to ever decreasing budgets and complete lack of concrete requirements. See if agile will help you there :)&lt;br /&gt;
&lt;br /&gt;
So what&#39;s my point? Scrap agile? No! We must get back to basics and be pragmatic. Agile banner has both XP and Scrum as the two well known tags. XP is more about engineering best practices (test driven, continuous integration etc.) and says little about project management, whilst Scrum tries to define an agile project management style.&lt;br /&gt;
&lt;br /&gt;
I really like XP. I am less sure about Scrum. I like some of the principles of Scrum e.g. short time boxed iterations with clear deliverables i.e. sprints, but it really does not deal well with architecture. My interpretation is that architecture is done within each scrum (about 4 weeks), encouraging just enough architecture, to avoid over-architecture that can drive costs up and reduce delivery.&lt;br /&gt;
&lt;br /&gt;
So, any new use-case may trigger a need to re-architecture your product, and you are meant to do so within a 4 week sprint. That can work for very standard 3-tier systems, but usually does not. So then sprints start to be hacked, and shippable products are downgraded to documentation. Hmm, smells like itterative and even worse, waterfall.&lt;br /&gt;
&lt;br /&gt;
In my opinion, agile project management techniques (as opposed to engineering practices), are not so different to iterative, &amp;nbsp;which in themselves are not that different to waterfall. People want to show how progressive they are so find all sorts of killer differences, but to me there are more similarities than differences. And, all three never are followed to the letter, because they are just models for managing projects, which have a really annoying tendency not to follow the rules that models require.&lt;br /&gt;
&lt;br /&gt;
I think we need to agree that agile project management methodologies like Scrum are just short time box waterfall iterations, where everyone agrees that the only commitment we can make is that 4 week window, and even that is suspect. Each iteration is roughly equivalent to a software release, or at least that&#39;s the aim.&lt;br /&gt;
&lt;br /&gt;
But as argued before, this does not always work i.e. when the product is immature, and you need to design and implement architecture, it often takes much longer to get the first shippable release out. On the other hand if the product is mature and changes are incremental, 4 week sprints are perfect. However if a new use-case requires major re-architecture, sprints timelines are broken again.&lt;br /&gt;
&lt;br /&gt;
There are other variables i.e. cost of re-architecture, time to re-archirecture and risk of mis-architecture. Scrum largely relies on the fact that re-architecture is relatively cheap, and quick. Often it is not. It can take a lot of man-power (cost), and often cannot be sped up by throwing more people at it (time). And for some applications, having non-performant or reliable architecture can kill businesses and more importantly people.&lt;br /&gt;
&lt;br /&gt;
What&#39;s the solution? Agile the agile. Agree that agile, iterative and waterfall are complimentary. Good waterfall practices like design before coding must not be abandoned, but instead put into the current needs context i.e. maturity of the product, architectural complexity, how different is the solution compared to existing patterns, importance of time to market, criticality of the solution, complexity of new use-cases.&lt;br /&gt;
&lt;br /&gt;
Before you start any sprint/iteration/phase, agree the primary focus of the time box, loosely based on the waterfall &amp;nbsp;sequence. Decide the appropriate length of the time box, instead of being very rigid with the time box, depending on the complexity of the problem to be solved, keeping it as short as possible, but no shorter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.batlin.com/feeds/5365217395103547057/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.batlin.com/2011/11/agile-fundamentalism.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/5365217395103547057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/5365217395103547057'/><link rel='alternate' type='text/html' href='http://blog.batlin.com/2011/11/agile-fundamentalism.html' title='Agile fundamentalism'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13347962016972401089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5959340623347047497.post-5442354199313231593</id><published>2011-11-22T08:18:00.001-08:00</published><updated>2011-11-22T08:28:03.144-08:00</updated><title type='text'>SSH Remote Port Forwarding with Putty</title><content type='html'>Here is the use case:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;You are behind a firewall, and wish to expose an intranet site to the internet in a safe way&lt;/li&gt;
&lt;li&gt;You have SSH access to an internet connected server&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Here is what you do:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Install a web server on your local workstation or server&lt;/li&gt;
&lt;li&gt;Modify internet servers &quot;/etc/ssh/sshd_config&quot; to have &quot;GatewayPorts yes&quot; and restart &quot;service sshd restart&quot;&lt;/li&gt;
&lt;li&gt;Establish a Putty connection from local workstation or server to the internet server, ensuring that your local web port (80) is Remote forwarded to the internet server.&lt;/li&gt;
&lt;li&gt;If required, open up the firewall for the internet server, and in some use cases enable NAT, if you need to.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvPjlWriCWqBm7oHTV_cXWNzZZJUU4irK0vBpGo92-m-ULJ6TcsT7Zwh31cqjPmpDEZjafXorhC3YzxRt_bhrYydXKhDvRbY6TpmxzAKlm1k5QKpWHrLzBoMzOXvmIaD8rg_WujJDF-fo/s1600/putty-1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;307&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvPjlWriCWqBm7oHTV_cXWNzZZJUU4irK0vBpGo92-m-ULJ6TcsT7Zwh31cqjPmpDEZjafXorhC3YzxRt_bhrYydXKhDvRbY6TpmxzAKlm1k5QKpWHrLzBoMzOXvmIaD8rg_WujJDF-fo/s320/putty-1.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2KAzO3rD7_BpT9jwUOiMcucT74BTKnrv1raEsARqJswqcW1KzEIOnR7gwx-bGc4NGJQe4WEoHiLWQzasmMP-Sv7TOxpJM_Mp_cM8ZSC4HZM_lXWigH67Z5wPNSkqYlvOrsZu4p81AiIs/s1600/putty-2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;307&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2KAzO3rD7_BpT9jwUOiMcucT74BTKnrv1raEsARqJswqcW1KzEIOnR7gwx-bGc4NGJQe4WEoHiLWQzasmMP-Sv7TOxpJM_Mp_cM8ZSC4HZM_lXWigH67Z5wPNSkqYlvOrsZu4p81AiIs/s320/putty-2.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.batlin.com/feeds/5442354199313231593/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.batlin.com/2011/11/ssh-remote-port-forwarding-with-putty.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/5442354199313231593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/5442354199313231593'/><link rel='alternate' type='text/html' href='http://blog.batlin.com/2011/11/ssh-remote-port-forwarding-with-putty.html' title='SSH Remote Port Forwarding with Putty'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13347962016972401089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvPjlWriCWqBm7oHTV_cXWNzZZJUU4irK0vBpGo92-m-ULJ6TcsT7Zwh31cqjPmpDEZjafXorhC3YzxRt_bhrYydXKhDvRbY6TpmxzAKlm1k5QKpWHrLzBoMzOXvmIaD8rg_WujJDF-fo/s72-c/putty-1.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5959340623347047497.post-1674970345258655355</id><published>2011-11-21T10:09:00.001-08:00</published><updated>2011-11-21T10:14:18.128-08:00</updated><title type='text'>Social Analytics and Smart Tagging</title><content type='html'>Brainstormed about how social networking works differently in enterprise vs. consumer space, and current general challenges for both. Some thoughts:&lt;br /&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;
Use of hastags sucks when collaborating&lt;/blockquote&gt;
&lt;div&gt;
Now, gasp! People like tags! Self-organising etc. etc. but in a corporate environment they did not really work. People mis/under/over tag with no real consistency. &lt;br /&gt;&lt;br /&gt;Sure, it&#39;s better to have them than not, but we can do better. In consumer space where you are not paying any money for service it&#39;s ok if you discover 10% of total content, you still better off than 0%, but in an enterprise you need ~100%.&lt;br /&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;
Hashtags rule when used as personal bookmarks&lt;/blockquote&gt;
Because as a person you control your own namespace, being able to tag (without first creating an enum list of terms) contents you want to bookmark makes perfect sense. Tag acts a bookmark folder, with links to docs within in. Additionally, this is server stored, so those links move with you. &lt;br /&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;
Define classifications and tech system to apply them&lt;/blockquote&gt;
Large orgs will always want to define a lexicon to drive common goals, unlike self-defined social media tags. This cuts down on duplicate/overlapping tags but still risks under/over/mis classification. Newer systems like Apache Mahout allow you to define classifications, and then teach it based on input documents what classification to apply automatically using NLP and stat analysis.&lt;br /&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;
Content analytics to discover trending topics&lt;/blockquote&gt;
Just because management has defined strategy and lexicon, does not mean that on the ground reality matches vision. In fact vision may be organically defined from grass-root movement. Smart management wants to listen, hear and respond to this innovation. Sometimes even the individuals involved may not appreciate correlation, so relying on tagging is not enough. Use automated content analytics to identify trends, not social tagging.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.batlin.com/feeds/1674970345258655355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.batlin.com/2011/11/social-analytics-and-smart-tagging.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/1674970345258655355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/1674970345258655355'/><link rel='alternate' type='text/html' href='http://blog.batlin.com/2011/11/social-analytics-and-smart-tagging.html' title='Social Analytics and Smart Tagging'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13347962016972401089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5959340623347047497.post-8519121643492871860</id><published>2011-11-21T06:02:00.001-08:00</published><updated>2011-11-21T06:34:51.987-08:00</updated><title type='text'>Integrating social media platforms</title><content type='html'>Emergence of social media and social networks is pretty existing, however current inter-social-net integrations are pretty poor. Sure every provider claims to have open APIs, and a number of companies like HootSuite try to create a single interface to them all, but this is a pretty expensive way to operate for consumer social networks.&lt;br /&gt;
&lt;br /&gt;
It will get a lot worse once companies start to create gated social networks that can be accessed on the internet by employees, customers and partners. I call them social extranets.&lt;br /&gt;
&lt;br /&gt;
So what&#39;s the solution? Open standards is the common answer. But standard to do what? To answer that, ask your self, what are key social media / networking killer features? Well, to me&amp;nbsp;anyway, it&#39;s&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;activity streams (timelime, wall etc.) of your connections &amp;amp; interests&lt;/li&gt;
&lt;li&gt;search anything&lt;/li&gt;
&lt;li&gt;auto suggestions&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Note, security and DLP are BIG issues, but outside the scope of this post. So, let&#39;s look at how we support these features:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;u&gt;&lt;b&gt;Activity Streams&lt;/b&gt;&lt;/u&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
HTML websites do not support activity streams, as they are stateless, request-response system i.e. passive, but with broadcast capability. Email and IM are user-to-user or user-to-group systems, or in messaging speak they support both point-to-point and publish-subscribe patterns. IM is near-synchronous, email is asynchronous.&lt;br /&gt;
&lt;br /&gt;
So, we can enable activity streams by posting messages whenever an action is performed (an event), and subscribing to those messages for our connections. These does not need to be real-time, i.e. it can be&amp;nbsp;asynchronous.&lt;br /&gt;
&lt;br /&gt;
In other words, if we could agree on a standard to describe social events, we could use email as the message transport. Reason to use email v.s. IM? IM is still locked into&amp;nbsp;proprietary&amp;nbsp;systems, email is truly open. Alternative is to monitor RSS/ATOM feeds for new events, but email on first look should provide a more scalable platform.&lt;br /&gt;
&lt;br /&gt;
Each social network would need to be able to generate and consume event emails, and generate activity stream from internal events, plus external events. Individuals, groups etc. would need to configure their social tools to notify an explicit list of partner social media tools.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Search Anything&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Standards like OpenSearch already exist. Each tool needs to be able to expose their search system as an OpenSearch compatible system, and on the other side, be able to federate search across multiple search engines. Big challenge is around&amp;nbsp;opening&amp;nbsp;up URLs security to external partners.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Auto Suggestions&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Suggestions are very smart, and will get smarter as big data (Hadoop) and analytics (Mahout) gain momentum. There is a need to combine activity streams (including searches you have done) with content analytics engines that work off data warehouses created by storing all data that you have produced, be that documents, or you activity.&lt;br /&gt;
&lt;br /&gt;
This should then produce auto suggestions e.g. because you searched for XYZ, viewed document ABC, sent a message to FGH, and other people or documents match that profile, you get a link to that document, person etc.&lt;br /&gt;
&lt;br /&gt;
That takes care of the internal data, now just like with search, you need an open standard to federate that across many distributed systems e.g. OpenSuggest.</content><link rel='replies' type='application/atom+xml' href='http://blog.batlin.com/feeds/8519121643492871860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.batlin.com/2011/11/integrating-social-media-platforms.html#comment-form' title='62 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/8519121643492871860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/8519121643492871860'/><link rel='alternate' type='text/html' href='http://blog.batlin.com/2011/11/integrating-social-media-platforms.html' title='Integrating social media platforms'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13347962016972401089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>62</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5959340623347047497.post-222827883249756536</id><published>2011-11-21T01:28:00.001-08:00</published><updated>2011-11-21T02:12:32.991-08:00</updated><title type='text'>RDP over SSH Port Forwarding (Tunnelling) with Putty</title><content type='html'>Here is the use case:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;You have got a physical Linux server somewhere e.g. cloud&lt;/li&gt;
&lt;li&gt;You are running multiple Windows guest OS&#39;s on some hypervisor e.g. KVM sitting on top of those physical servers&lt;/li&gt;
&lt;li&gt;You&#39;ve got yourself a single public IP address, and optionally a DNS domain.&lt;/li&gt;
&lt;li&gt;You want to access those Windows guests via RDP from home via that single IP in a secure way&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Here is the solution on the server side:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Make sure that the Linux server is running SSH.&lt;/li&gt;
&lt;li&gt;Suggest you bridge your physical NIC to allow guest OS&#39;s access to same physical network&lt;/li&gt;
&lt;li&gt;Assign static IPs to guest OSs on your private LAN.&lt;/li&gt;
&lt;li&gt;Ensure that firewalls allow SSH traffic.&lt;/li&gt;
&lt;li&gt;Optionally, edit DNS zone files and create A records for public and private IPs e.g.&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;A record : server1.mydomain.com =&amp;gt; 90.12.44.11 (public IP)&lt;/li&gt;
&lt;li&gt;A record : windows1.local.mydomain.com &amp;gt; 162.0.0.21 (private IP)&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div&gt;
And on the client side (your home/work Windows PC):&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Download and install Putty.&lt;/li&gt;
&lt;li&gt;Configure your Putty session to:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Login&amp;nbsp;to the physical server over public IP,&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Forward RDP port (3389) from local windows OS IP to your PC&#39;s 3391 (or any other) port&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Start RDP client and connect to localhost:3391.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjya-H60URGjBFKgCUyMS7t3hMEeqN3kLpPCaIwhEVcKFXYAONBoAUkMd2B53dSjZIHiZAoFaGUh0OqUyLTz31CQOq86AE1L1TCMxtWxSZqYckyXCXH7CifSOYUonRLmVSugY4P9z_0KgZu/s1600/putty-1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;307&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjya-H60URGjBFKgCUyMS7t3hMEeqN3kLpPCaIwhEVcKFXYAONBoAUkMd2B53dSjZIHiZAoFaGUh0OqUyLTz31CQOq86AE1L1TCMxtWxSZqYckyXCXH7CifSOYUonRLmVSugY4P9z_0KgZu/s320/putty-1.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizsDOWq7r0lCrZ_ZNYlrtxR0bpaYrSc4wE5vd5R9r77HphaXwj3V-g1kep2Dz-NXX8vQy2owDOqXaaxMj-nvbRMA4S3cZT6_NvKjZ6pE5HRoz4w_ZE2nMVJruS0KcwPMGxrkpfkiHFJtZP/s1600/putty-2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;307&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizsDOWq7r0lCrZ_ZNYlrtxR0bpaYrSc4wE5vd5R9r77HphaXwj3V-g1kep2Dz-NXX8vQy2owDOqXaaxMj-nvbRMA4S3cZT6_NvKjZ6pE5HRoz4w_ZE2nMVJruS0KcwPMGxrkpfkiHFJtZP/s320/putty-2.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.batlin.com/feeds/222827883249756536/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.batlin.com/2011/11/here-is-use-case-you-have-got-physical_21.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/222827883249756536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5959340623347047497/posts/default/222827883249756536'/><link rel='alternate' type='text/html' href='http://blog.batlin.com/2011/11/here-is-use-case-you-have-got-physical_21.html' title='RDP over SSH Port Forwarding (Tunnelling) with Putty'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13347962016972401089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjya-H60URGjBFKgCUyMS7t3hMEeqN3kLpPCaIwhEVcKFXYAONBoAUkMd2B53dSjZIHiZAoFaGUh0OqUyLTz31CQOq86AE1L1TCMxtWxSZqYckyXCXH7CifSOYUonRLmVSugY4P9z_0KgZu/s72-c/putty-1.png" height="72" width="72"/><thr:total>1</thr:total></entry></feed>