<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~files/feed.xsl"?>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:feedpress="https://feed.press/xmlns" xmlns:media="http://search.yahoo.com/mrss/" xmlns:podcast="https://podcastindex.org/namespace/1.0" version="2.0">
  <channel>
    <feedpress:locale>en</feedpress:locale>
    <feedpress:newsletterId>hiddentao</feedpress:newsletterId>
    <atom:link rel="hub" href="http://feedpress.superfeedr.com/"/>
    <title><![CDATA[Hiddentao Labs]]></title>
    <description><![CDATA[Ram (Hiddentao Labs) is a software developer based in London, UK.]]></description>
    <link>https://hiddentao.com</link>
    <generator>RSS for Node</generator>
    <lastBuildDate>Wed, 22 Mar 2023 09:09:22 GMT</lastBuildDate>
    <atom:link href="https://feedpress.me/hiddentao" rel="self" type="application/rss+xml"/>
    <copyright><![CDATA[Copyright HiddenTao Ltd. All Rights Reserved.]]></copyright>
    <managingEditor><![CDATA[Ramesh Nair]]></managingEditor>
    <webMaster><![CDATA[Ramesh Nair]]></webMaster>
    <item>
      <title><![CDATA[Upgrading multiple proxy contracts in Solidity in one call]]></title>
      <description><![CDATA[If you have hundreds of Solidity proxy contracts deployed, upgrading all of them one-by-one will cost a lot of gas. If they are all to point to the same implementation contracts, can't we upgrade them all in one go? We can using a clever pattern of indirect resolution with the Diamond standard.]]></description>
      <link>https://hiddentao.com/archives/2021/07/01/upgrading-multiple-proxy-contracts-in-solidity-in-one-call</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2021/07/01/upgrading-multiple-proxy-contracts-in-solidity-in-one-call</guid>
      <pubDate>Thu, 01 Jul 2021 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Mailmask shutting down]]></title>
      <description><![CDATA[It has been a good run but it's time to move on. Mailmask will continue serving customers until May 1st, 2022, after which the service will be discontinued.]]></description>
      <link>https://hiddentao.com/archives/2021/05/03/mailmask-shutting-down</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2021/05/03/mailmask-shutting-down</guid>
      <pubDate>Mon, 03 May 2021 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[My first smart contract in Rust on Elrond VM]]></title>
      <description><![CDATA[Elrond network is soon launching its blockchain mainnet. In anticipation of this I decided to have go with the Elrond SDK to see if what it was like building smart contracts on Elrond, using Rust.]]></description>
      <link>https://hiddentao.com/archives/2020/07/17/my-first-smart-contract-in-rust-on-elrond-vm</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2020/07/17/my-first-smart-contract-in-rust-on-elrond-vm</guid>
      <pubDate>Fri, 17 Jul 2020 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Building your Next.js web app using GraphQL]]></title>
      <description><![CDATA[This article covers how to get GraphQL working with Next.js with good error handling as a bonus.]]></description>
      <link>https://hiddentao.com/archives/2020/06/17/building-your-nextjs-web-app-using-graphql</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2020/06/17/building-your-nextjs-web-app-using-graphql</guid>
      <pubDate>Wed, 17 Jun 2020 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Upgradeable smart contracts using the Diamond Standard]]></title>
      <description><![CDATA[The Diamond Standard is a recent addition to the list of ways in which you can build upgradeable smart contracts on Ethereum. In this post I cover how it helps to solve some of the problems with existing upgradeability patterns and how one might make use of it to maximum effect in an enterprise-level project.]]></description>
      <link>https://hiddentao.com/archives/2020/05/28/upgradeable-smart-contracts-using-diamond-standard</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2020/05/28/upgradeable-smart-contracts-using-diamond-standard</guid>
      <pubDate>Thu, 28 May 2020 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Advanced role-based access control in Solidity]]></title>
      <description><![CDATA[A look at a comprehensive yet flexible Access Control List (ACL) contract for controlling access to Ethereum resources on-chain.]]></description>
      <link>https://hiddentao.com/archives/2020/03/21/advanced-role-based-access-control-in-solidity</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2020/03/21/advanced-role-based-access-control-in-solidity</guid>
      <pubDate>Sat, 21 Mar 2020 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Nested delegate call in Solidity]]></title>
      <description><![CDATA[An example of using nested delegate calls in Solidity, whereby a contract delegates to a contract which in turn delegates to another contract.]]></description>
      <link>https://hiddentao.com/archives/2020/03/19/nested-delegate-call-in-solidity</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2020/03/19/nested-delegate-call-in-solidity</guid>
      <pubDate>Thu, 19 Mar 2020 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[What is needed for Ethereum to go mass-market]]></title>
      <description><![CDATA[What is needed for Ethereum to go mass-market]]></description>
      <link>https://hiddentao.com/archives/2020/02/19/what-is-needed-for-ethereum-to-go-mass-market</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2020/02/19/what-is-needed-for-ethereum-to-go-mass-market</guid>
      <pubDate>Wed, 19 Feb 2020 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Upgradeable smart contracts with eternal storage]]></title>
      <description><![CDATA[Upgradeable smart contracts with eternal storage]]></description>
      <link>https://hiddentao.com/archives/2019/10/03/upgradeable-smart-contracts-with-eternal-storage</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2019/10/03/upgradeable-smart-contracts-with-eternal-storage</guid>
      <pubDate>Thu, 03 Oct 2019 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Maker OTC on-chain orderbook deep-dive]]></title>
      <description><![CDATA[Maker OTC on-chain orderbook deep-dive]]></description>
      <link>https://hiddentao.com/archives/2019/09/08/maker-otc-on-chain-orderbook-deep-dive</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2019/09/08/maker-otc-on-chain-orderbook-deep-dive</guid>
      <pubDate>Sun, 08 Sep 2019 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[How to use Serializable Isolation with Postgres transactions]]></title>
      <description><![CDATA[How to use Serializable Isolation with Postgres transactions]]></description>
      <link>https://hiddentao.com/archives/2019/07/29/how-to-use-serializable-isolation-with-postgres-transactions</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2019/07/29/how-to-use-serializable-isolation-with-postgres-transactions</guid>
      <pubDate>Mon, 29 Jul 2019 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Building a multi-lingual static site with Gatsby]]></title>
      <description><![CDATA[Building a multi-lingual static site with Gatsby]]></description>
      <link>https://hiddentao.com/archives/2019/05/07/building-a-multilingual-static-site-with-gatsby</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2019/05/07/building-a-multilingual-static-site-with-gatsby</guid>
      <pubDate>Tue, 07 May 2019 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Architecting microservices for effective development and deployment]]></title>
      <description><![CDATA[Microservice architecture is in vogue now. However, there are downsides of switching to such an architecture, and in particular in terms of the local development story. This post discusses how these issues can be mitigated and even bypassed completely.]]></description>
      <link>https://hiddentao.com/archives/2019/03/26/architecting-microservices-for-effective-development-and-deployment</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2019/03/26/architecting-microservices-for-effective-development-and-deployment</guid>
      <pubDate>Tue, 26 Mar 2019 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[React useReducer hook for form handling]]></title>
      <description><![CDATA[React useReducer hook for form handling]]></description>
      <link>https://hiddentao.com/archives/2019/03/22/react-usereducer-hook-for-form-handling</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2019/03/22/react-usereducer-hook-for-form-handling</guid>
      <pubDate>Fri, 22 Mar 2019 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Deploying single-page apps on Zeit using Now]]></title>
      <description><![CDATA[Deploying single-page apps on Zeit using Now]]></description>
      <link>https://hiddentao.com/archives/2019/02/07/deploying-single-page-apps-on-zeit-using-now</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2019/02/07/deploying-single-page-apps-on-zeit-using-now</guid>
      <pubDate>Thu, 07 Feb 2019 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Using bitmaps for efficient Solidity smart contracts]]></title>
      <description><![CDATA[Using bitmaps for efficient Solidity smart contracts]]></description>
      <link>https://hiddentao.com/archives/2018/12/10/using-bitmaps-for-efficient-solidity-smart-contracts</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2018/12/10/using-bitmaps-for-efficient-solidity-smart-contracts</guid>
      <pubDate>Mon, 10 Dec 2018 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Authentication in GraphQL via directives and custom Apollo links]]></title>
      <description><![CDATA[Authentication in GraphQL via directives and custom Apollo links]]></description>
      <link>https://hiddentao.com/archives/2018/10/07/authentication-in-graphql-via-directives-and-custom-apollo-links</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2018/10/07/authentication-in-graphql-via-directives-and-custom-apollo-links</guid>
      <pubDate>Sun, 07 Oct 2018 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Mixpanel server-side proxy to bypass blockers]]></title>
      <description><![CDATA[Mixpanel server-side proxy to bypass blockers]]></description>
      <link>https://hiddentao.com/archives/2018/10/03/mixpanel-server-side-proxy-to-bypass-blockers</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2018/10/03/mixpanel-server-side-proxy-to-bypass-blockers</guid>
      <pubDate>Wed, 03 Oct 2018 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Setup CouchDB and Futon behind a secure Nginx proxy]]></title>
      <description><![CDATA[Setup CouchDB and Futon behind a secure Nginx proxy]]></description>
      <link>https://hiddentao.com/archives/2018/05/09/setup-couchdb-futon-secure-nginx-proxy</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2018/05/09/setup-couchdb-futon-secure-nginx-proxy</guid>
      <pubDate>Wed, 09 May 2018 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Updating a Google spreadsheet via the Javascript API]]></title>
      <description><![CDATA[Updating a Google spreadsheet via the Javascript API]]></description>
      <link>https://hiddentao.com/archives/2017/11/23/updating-google-spreadsheet-via-javascript-api</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2017/11/23/updating-google-spreadsheet-via-javascript-api</guid>
      <pubDate>Thu, 23 Nov 2017 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[React.js cached function binding for efficient props]]></title>
      <description><![CDATA[React.js cached function binding for efficient props]]></description>
      <link>https://hiddentao.com/archives/2017/11/16/react-cached-function-binding-for-efficient-props</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2017/11/16/react-cached-function-binding-for-efficient-props</guid>
      <pubDate>Thu, 16 Nov 2017 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Tabbed pages using React Native NavigationExperimental]]></title>
      <description><![CDATA[Tabbed pages using React Native NavigationExperimental]]></description>
      <link>https://hiddentao.com/archives/2017/03/16/tabbed-pages-using-react-native-navigation-experimental</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2017/03/16/tabbed-pages-using-react-native-navigation-experimental</guid>
      <pubDate>Thu, 16 Mar 2017 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[React Native push notification using Batch and Fastlane]]></title>
      <description><![CDATA[React Native push notification using Batch and Fastlane]]></description>
      <link>https://hiddentao.com/archives/2017/03/15/react-native-push-notifications-with-batch-and-fastlane</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2017/03/15/react-native-push-notifications-with-batch-and-fastlane</guid>
      <pubDate>Wed, 15 Mar 2017 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Get custom fonts working in React Native]]></title>
      <description><![CDATA[Get custom fonts working in React Native]]></description>
      <link>https://hiddentao.com/archives/2017/03/10/get-custom-fonts-working-in-react-native</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2017/03/10/get-custom-fonts-working-in-react-native</guid>
      <pubDate>Fri, 10 Mar 2017 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Using React Native Navigation CardStack with Redux]]></title>
      <description><![CDATA[Using React Native Navigation CardStack with Redux]]></description>
      <link>https://hiddentao.com/archives/2017/02/22/using-react-native-navigation-cardstack-with-redux</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2017/02/22/using-react-native-navigation-cardstack-with-redux</guid>
      <pubDate>Wed, 22 Feb 2017 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Continuous Integration for React Native with TestFlight and TestFairy deployment]]></title>
      <description><![CDATA[Continuous Integration for React Native with TestFlight and TestFairy deployment]]></description>
      <link>https://hiddentao.com/archives/2017/02/17/continuous-integration-for-react-native-with-testfairy-testflight-deploy</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2017/02/17/continuous-integration-for-react-native-with-testfairy-testflight-deploy</guid>
      <pubDate>Fri, 17 Feb 2017 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Mocha  multiple reporters for CircleCI and Slack]]></title>
      <description><![CDATA[Mocha  multiple reporters for CircleCI and Slack]]></description>
      <link>https://hiddentao.com/archives/2016/12/27/mocha-multiple-reporters-for-circle-ci-and-slack</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2016/12/27/mocha-multiple-reporters-for-circle-ci-and-slack</guid>
      <pubDate>Tue, 27 Dec 2016 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[React hot-module-reload in Electron desktop apps]]></title>
      <description><![CDATA[React hot-module-reload in Electron desktop apps]]></description>
      <link>https://hiddentao.com/archives/2016/10/12/react-hot-module-reload-electron-desktop-apps</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2016/10/12/react-hot-module-reload-electron-desktop-apps</guid>
      <pubDate>Wed, 12 Oct 2016 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Redux asynchronous dispatcher pattern]]></title>
      <description><![CDATA[Redux asynchronous dispatcher pattern]]></description>
      <link>https://hiddentao.com/archives/2016/09/27/redux-asynchronous-dispatcher-pattern</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2016/09/27/redux-asynchronous-dispatcher-pattern</guid>
      <pubDate>Tue, 27 Sep 2016 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[React.js Hot-Module-Replacement with Browserify]]></title>
      <description><![CDATA[React.js Hot-Module-Replacement with Browserify]]></description>
      <link>https://hiddentao.com/archives/2016/09/09/react-hot-module-replacement-with-browserify</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2016/09/09/react-hot-module-replacement-with-browserify</guid>
      <pubDate>Fri, 09 Sep 2016 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Getting geth client mining to work in Travis CI builds]]></title>
      <description><![CDATA[Getting geth client mining to work in Travis CI builds]]></description>
      <link>https://hiddentao.com/archives/2016/09/07/getting-geth-mining-to-work-in-travis-ci-builds</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2016/09/07/getting-geth-mining-to-work-in-travis-ci-builds</guid>
      <pubDate>Wed, 07 Sep 2016 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[We need a decentralized, censorship-resistant Twitter-like platform]]></title>
      <description><![CDATA[We need a decentralized, censorship-resistant Twitter-like platform]]></description>
      <link>https://hiddentao.com/archives/2016/08/30/we-need-a-decentralized-censorship-resistant-twitter-like-platform</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2016/08/30/we-need-a-decentralized-censorship-resistant-twitter-like-platform</guid>
      <pubDate>Tue, 30 Aug 2016 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Trigger a Travis CI build from another project's build]]></title>
      <description><![CDATA[Trigger a Travis CI build from another project's build]]></description>
      <link>https://hiddentao.com/archives/2016/08/29/triggering-travis-ci-build-from-another-projects-build</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2016/08/29/triggering-travis-ci-build-from-another-projects-build</guid>
      <pubDate>Mon, 29 Aug 2016 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Setting up HTTPS for Github organization pages with custom domains]]></title>
      <description><![CDATA[_Thanks to Robin Winslow for the [original post](https:&#47;&#47;robinwinslow.uk&#47;2016&#47;02&#47;13&#47;free-https-custom-hosting&#47;)_.

Github Organization pages are awesome, but they do not support HTTPS, presumably because doing so would require Github to serve up your domain-specific SSL certificate for incoming requests - which would be a real pain for them to manage.

Robin Winslow has written a great [tutorial](https:&#47;&#47;robinwinslow.uk&#47;2016&#47;02&#47;13&#47;free-https-custom-hosting&#47;) which explains how get around this limitation by also setting up Cloudflare account and using that to "layer on" SSL - all for free. 

My requirements were slightly different to Robin's, in that I needed to set up an apex domain (i.e. `mydomain.com`) rather than a subdomain, as Robin does. Here is the process I followed...
]]></description>
      <link>https://hiddentao.com/archives/2016/07/04/setting-up-https-for-github-organization-pages-with-custom-domains</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2016/07/04/setting-up-https-for-github-organization-pages-with-custom-domains</guid>
      <pubDate>Mon, 04 Jul 2016 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[EtherPing - get notified when you receive Ethereum payments]]></title>
      <description><![CDATA[My friend [Jeff Lau](http:&#47;&#47;jefflau.net) and I this week finished work on [EtherPing](https:&#47;&#47;etherping.com), a simple web service which notifies you by email when your [Ethereum](https:&#47;&#47;ethereum.org&#47;) address receives a payment. EtherPing monitors the global Ethereum network for transactions sent to your specified address and emails you according to the notification rules you have setup. You can get notified as soon as a transaction appears on the network and then again after a certain no. of "confirmation" (i.e. blocks in the blockchain) have passed since your transaction first appeared. Best part is, you don't need to sign-up and it's totally free!
]]></description>
      <link>https://hiddentao.com/archives/2016/05/14/etherping-get-notified-when-you-receive-ethereum-payments</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2016/05/14/etherping-get-notified-when-you-receive-ethereum-payments</guid>
      <pubDate>Sat, 14 May 2016 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Thinodium - a light-weight Object Document Mapper for Node.js]]></title>
      <description><![CDATA[I've just released [Thinodium](https:&#47;&#47;github.com&#47;hiddentao&#47;thinodium), a flexible yet light-weight Object Document Mapper (ODM) for Node.js. In this post I'm going to talk about what it is, why it's useful, and my motivations for building it the way I did.
]]></description>
      <link>https://hiddentao.com/archives/2016/05/08/thinodium-a-light-weight-object-document-mapper-for-node-js</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2016/05/08/thinodium-a-light-weight-object-document-mapper-for-node-js</guid>
      <pubDate>Sun, 08 May 2016 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Setting up geth Ethereum node to run automatically on Ubuntu]]></title>
      <description><![CDATA[Setting up geth Ethereum node to run automatically on Ubuntu]]></description>
      <link>https://hiddentao.com/archives/2016/05/04/setting-up-geth-ethereum-node-to-run-automatically-on-ubuntu</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2016/05/04/setting-up-geth-ethereum-node-to-run-automatically-on-ubuntu</guid>
      <pubDate>Wed, 04 May 2016 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[geth-private - easily setup private Ethereum blockchains from the command-line and Node]]></title>
      <description><![CDATA[I've recently been getting into [Ethereum](https:&#47;&#47;ethereum.org&#47;) development. As part of that I want to be able to setup a local, private blockchain whenever needed so that I can easily and quickly test my contracts and dapps prior to deploying them to the live network. I found a [great tutorial by Ade Duke](http:&#47;&#47;adeduke.com&#47;2015&#47;08&#47;how-to-create-a-private-ethereum-chain&#47;) which helped me get setup with a private blockchain, but the process was a bit cumbersome, and furthermore I wondered if I could automate the process and save myself some time. As it turned out, I was able to and thus `geth-private` was born!
]]></description>
      <link>https://hiddentao.com/archives/2016/04/04/geth-private-easily-setup-private-ethereum-blockchains-from-the-command-line-and-node</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2016/04/04/geth-private-easily-setup-private-ethereum-blockchains-from-the-command-line-and-node</guid>
      <pubDate>Mon, 04 Apr 2016 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Taking the next steps in remote working]]></title>
      <description><![CDATA[Taking the next steps in remote working]]></description>
      <link>https://hiddentao.com/archives/2016/03/16/taking-the-next-steps-in-remote-working</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2016/03/16/taking-the-next-steps-in-remote-working</guid>
      <pubDate>Wed, 16 Mar 2016 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Client-side encryption for strong security - guidelines]]></title>
      <description><![CDATA[I recently released [version 2 of Heartnotes](https:&#47;&#47;heartnotes.me) - my secure, encrypted diary app. This was a major rewrite which changed it from being a purely offline app into one which synchronized with a server back-end. 

The challenge with this was to ensure that a good user experience could be maintained given these changes. Heartnotes' security comes from its implementation of _client-side encryption_. All data is encrypted on the user's computer before it gets pushed to the server. And the user's password never leaves their computer. All together this means that only the user can open and read their diary; no one else can, not even the server owner.

In this post I'm going to outline the general principles behind the encryption architecture I've implemented - these principles are applicable to any app that does client-side encryption though I'll refer to Heartnotes as an example.

First, let's talk about the raw data...
]]></description>
      <link>https://hiddentao.com/archives/2016/01/19/client-side-encryption-for-strong-security-guidelines</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2016/01/19/client-side-encryption-for-strong-security-guidelines</guid>
      <pubDate>Tue, 19 Jan 2016 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Logarama - hierarchical, level-based browser-side logging library]]></title>
      <description><![CDATA[A few days ago I released [logarama](https:&#47;&#47;github.com&#47;hiddentao&#47;logarama), a Javscript logging library for browser-side code. Logarama came out of my approach to logging in various React apps I've been building lately. None of the existing logging libraries out there (and boy, there are many) did quite what I wanted so I built my own.
]]></description>
      <link>https://hiddentao.com/archives/2015/08/20/logarama-hierarchical-level-based-browser-side-logging-library</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2015/08/20/logarama-hierarchical-level-based-browser-side-logging-library</guid>
      <pubDate>Thu, 20 Aug 2015 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Heartnotes - offline, encrypted diary using Electron.js + React.js]]></title>
      <description><![CDATA[I am proud to announce the release of [Heartnotes](http:&#47;&#47;heartnotes.me), an offline, encrypted personal diary app for desktop, built using [Electron](http:&#47;&#47;electron.atom.io) and [React](https:&#47;&#47;facebook.github.io&#47;react). Heartnotes has been a labour of love for a couple of months now, in between various other projects, and it's my first desktop app for any platform.

What does it do exactly? It allows you to keep a personal diary - one you can write to even when offline. All your data is encrypted (AES-256) by a password your provide and stored within a file which you can then backup any you wish (e.g. using Dropbox).
]]></description>
      <link>https://hiddentao.com/archives/2015/08/19/heartnotes-offline-encrypted-diary-using-electron-js-react-js</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2015/08/19/heartnotes-offline-encrypted-diary-using-electron-js-react-js</guid>
      <pubDate>Wed, 19 Aug 2015 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[React.js + Flux server-side rendering with Koa]]></title>
      <description><![CDATA[I recently had to get server-side rendering working on a React.js client project. We had augmented our front-end React app with [flummox](https:&#47;&#47;github.com&#47;acdlite&#47;flummox) and [react-router](https:&#47;&#47;github.com&#47;rackt&#47;react-router) and I wanted to be sure that we could re-use these components on the server-side without much extra work. I'm going to document our final file structure and code in this article.
]]></description>
      <link>https://hiddentao.com/archives/2015/07/15/react-js-flux-server-side-rendering-with-koa</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2015/07/15/react-js-flux-server-side-rendering-with-koa</guid>
      <pubDate>Wed, 15 Jul 2015 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Sending file logs to Loggly in a Docker container]]></title>
      <description><![CDATA[I'm going to outline how I automate the sending of file logs to [Loggly](http:&#47;&#47;loggly.com&#47;) inside my Docker containers. This article is a minor follow-on to my previous article on [automated deployments](http:&#47;&#47;www.hiddentao.com&#47;archives&#47;2014&#47;06&#47;03&#47;shippable-ansible-docker-loggly-for-awesome-deployments&#47;), which gives a good overview of my overall deployment process. In this one I will show you how to use the latest Loggly API to send your file logs across.

I'm going to assume that you are building your docker container using a [Dockerfile](https:&#47;&#47;docs.docker.com&#47;reference&#47;builder&#47;). If not I recommend doing so, as they provide you ample flexibility and allow you to use version control to track changes to your container setup. 
]]></description>
      <link>https://hiddentao.com/archives/2015/05/24/sending-file-logs-to-loggly-in-a-docker-container</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2015/05/24/sending-file-logs-to-loggly-in-a-docker-container</guid>
      <pubDate>Sun, 24 May 2015 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Why I am asking for a refund from the ind.ie project]]></title>
      <description><![CDATA[Today I asked for a refund from the [ind.ie project](https:&#47;&#47;ind.ie) for the donation I'd made to them last November.  For those of you unfamiliar with **ind.ie** it is a project and team headed by [Aral Balkan](aralbalkan.com&#47;) that has as its goal the promotion and development of independently funded (i.e. non-Venture Capitalist-backed) technology and products that respect and protect your privacy and let you own and control your data (see their [manifesto](https:&#47;&#47;ind.ie&#47;about&#47;manifesto&#47;)). This is in contrast to companies like Google and Facebook who [mine](http:&#47;&#47;www.zdnet.com&#47;article&#47;facebook-turns-user-tracking-bug-into-data-mining-feature-for-advertisers&#47;) and [manipulate](http:&#47;&#47;www.forbes.com&#47;sites&#47;kashmirhill&#47;2014&#47;06&#47;28&#47;facebook-manipulated-689003-users-emotions-for-science&#47;) your data, [share it with Governments](http:&#47;&#47;www.dailymail.co.uk&#47;news&#47;article-2337863&#47;PRISM-Google-Facebook-DID-allow-NSA-access-data-talks-set-spying-rooms-despite-denials-Zuckerberg-Page-controversial-project.html), [don't respect your privacy](http:&#47;&#47;www.theregister.co.uk&#47;2012&#47;04&#47;30&#47;google_slurp_ok&#47;) and moreover, [own the rights](http:&#47;&#47;www.telegraph.co.uk&#47;technology&#47;social-media&#47;9780565&#47;Facebook-terms-and-conditions-why-you-dont-own-your-online-life.html) to the data you give them.

Most people use Google and Facebook because they're convenient, established and benefit from network effects. But everybody wants to maintain their privacy and everybody would love to have more of a say over how their data is used. Privacy is a fundamental [human right](http:&#47;&#47;www.claiminghumanrights.org&#47;udhr_article_12.html#at13) and is a necessary [prerequisite for democracy](http:&#47;&#47;www.scu.edu&#47;ethics&#47;practicing&#47;focusareas&#47;technology&#47;internet&#47;privacy&#47;why-care-about-privacy.html). Any product which protects a person's privacy is always going to be welcomed.
]]></description>
      <link>https://hiddentao.com/archives/2015/05/15/why-i-am-asking-for-a-refund-from-the-ind-ie-project</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2015/05/15/why-i-am-asking-for-a-refund-from-the-ind-ie-project</guid>
      <pubDate>Fri, 15 May 2015 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Parse push notifications for your Android and iOS Cordova app]]></title>
      <description><![CDATA[I recently had to get [Parse](http:&#47;&#47;parse.com) push notifications working with a Phonegap&#47;Cordova application. It took of a lot of Google-ing and documentation reading to figure out all the steps needed. I'm documenting what's needed here in case it helps anybody else.

Instructions are for both Android (Jellybean+) and iOS (8+). I'm running Phonegap v4.2.0-0.24.2.

## Android

These steps are based on what's in Parse's [Quickstart guide](https:&#47;&#47;parse.com&#47;apps&#47;quickstart#parse_push&#47;android&#47;existing).

First of all let's write our application code for handling incoming notifications. We need an `Application` class which will be responsible for registering with Parse.
]]></description>
      <link>https://hiddentao.com/archives/2015/04/10/parse-push-notifications-for-your-android-and-ios-cordova-app</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2015/04/10/parse-push-notifications-for-your-android-and-ios-cordova-app</guid>
      <pubDate>Fri, 10 Apr 2015 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[DARPA 2015 report]]></title>
      <description><![CDATA[I noticed articles talking [DARPA's](http:&#47;&#47;www.defenseone.com&#47;technology&#47;2015&#47;03&#47;world-2020-according-darpa&#47;108517&#47;) [plans](http:&#47;&#47;www.extremetech.com&#47;extreme&#47;202111-darpa-to-re-invent-gps-navigation-without-satellites) and was curious to go and read from [their original report](http:&#47;&#47;go.usa.gov&#47;3rut4). It's quite an interesting read, covering what DARPA do, what they're working on for the future and some of the success stories they've had from the past. Below I've given highlights, specifically the parts I found most interesting.
]]></description>
      <link>https://hiddentao.com/archives/2015/03/30/darpa-2015-report</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2015/03/30/darpa-2015-report</guid>
      <pubDate>Mon, 30 Mar 2015 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Meteor localhost smtp using Postfix on Ubuntu]]></title>
      <description><![CDATA[For [Youlist](https:&#47;&#47;youlist.io) I had to setup Meteor to use a localhost SMTP server to send out all the emails. In this article I'm going to outline the Postfix and Meteor steps needed to get this running properly.

I'm going to assume that you have your own domain - let's call it `mydomain.com`. We're going to set it up on a Ubuntu 14.04 64-bit server.
]]></description>
      <link>https://hiddentao.com/archives/2014/12/18/meteor-localhost-smtp-using-postfix-on-ubuntu</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2014/12/18/meteor-localhost-smtp-using-postfix-on-ubuntu</guid>
      <pubDate>Thu, 18 Dec 2014 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[PhoneGap development with on-device livereload]]></title>
      <description><![CDATA[PhoneGap development with on-device livereload]]></description>
      <link>https://hiddentao.com/archives/2014/08/18/phonegap-development-with-on-device-livereload</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2014/08/18/phonegap-development-with-on-device-livereload</guid>
      <pubDate>Mon, 18 Aug 2014 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Linear Algebra in Javascript]]></title>
      <description><![CDATA[Linear Algebra in Javascript]]></description>
      <link>https://hiddentao.com/archives/2014/07/23/linear-algebra-in-javascript</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2014/07/23/linear-algebra-in-javascript</guid>
      <pubDate>Wed, 23 Jul 2014 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Ansijet - Ansible playbook automation server]]></title>
      <description><![CDATA[**Project renamed from Ansibot to Ansijet, to avoid confusion with Github's Ansibot**

I have just released [Ansijet](http:&#47;&#47;hiddentao.github.io&#47;ansijet), an Ansible playbook automation server. This server exposes a REST API which allows you to automatically trigger Ansible playbooks based on other events within your system. For my purposes I use it to automatically re-deploy to my servers when a successful build completes (I blogged about this [previously](&#47;archives&#47;2014&#47;06&#47;03&#47;shippable-ansible-docker-loggly-for-awesome-deployments&#47;)).
]]></description>
      <link>https://hiddentao.com/archives/2014/06/20/ansijet-ansible-playbook-automation-server</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2014/06/20/ansijet-ansible-playbook-automation-server</guid>
      <pubDate>Fri, 20 Jun 2014 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Clockmaker, flexible timer management for Javascript]]></title>
      <description><![CDATA[As part of my tests for [Ansibot]() I need to be able to shutdown and startup the server multiple times in succession. This involves stopping and starting various timers spread throughout the system. I was using `setTimeout` and `setInterval` directly (Javascript's built-in goodies) to create my timers, and this made it hard to control the timers once they were running. After a quick fruitless search around for a nice library that would make this easier I decided to build [Clockmaker](https:&#47;&#47;github.com&#47;hiddentao&#47;clockmaker), my solution to this.
]]></description>
      <link>https://hiddentao.com/archives/2014/06/19/clockmaker-flexible-timer-management-for-javascript</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2014/06/19/clockmaker-flexible-timer-management-for-javascript</guid>
      <pubDate>Thu, 19 Jun 2014 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Melkor, a wiki engine built using node.js]]></title>
      <description><![CDATA[Melkor, a wiki engine built using node.js]]></description>
      <link>https://hiddentao.com/archives/2014/06/17/melkor-a-wiki-engine-built-using-nodejs</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2014/06/17/melkor-a-wiki-engine-built-using-nodejs</guid>
      <pubDate>Tue, 17 Jun 2014 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Shippable + Ansible + Docker + Loggly for awesome deployments]]></title>
      <description><![CDATA[This post is about how to use Ansible and Docker for both setting up a server environment for your app and then deploying your web app to it, and preserving your logs in case of server crash. Since I wrote my post on ["Automated deployment with Docker containers"](http:&#47;&#47;www.hiddentao.com&#47;archives&#47;2013&#47;12&#47;26&#47;automated-deployment-with-docker-lessons-learnt&#47;), both Docker and my own understanding have improved. In this post I'm going to detail my latest deployment setup. One that is more robust than what I had previously. So without further ado, let's get stuck in.
]]></description>
      <link>https://hiddentao.com/archives/2014/06/03/shippable-ansible-docker-loggly-for-awesome-deployments</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2014/06/03/shippable-ansible-docker-loggly-for-awesome-deployments</guid>
      <pubDate>Tue, 03 Jun 2014 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Why Promises are more flexible than callbacks]]></title>
      <description><![CDATA[Every now and then I see an article explaining why Promises in Javascript are awesome. And almost in all cases they never quite go into enough depth about exactly how Promises offer more flexibility than callbacks. In this post I shall attempt to provide my explanation as to how and why Promises are more flexible than callbacks and why you should consider using them.

Let's take a simple example of reading from a file. Assume we have an asynchronous method `readFile(fileName, cb)` which reads the contents of a file and invokes a callback. Here is how we might use it:
]]></description>
      <link>https://hiddentao.com/archives/2014/04/21/why-promises-are-more-flexible-than-callbacks</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2014/04/21/why-promises-are-more-flexible-than-callbacks</guid>
      <pubDate>Mon, 21 Apr 2014 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Javascript generator delegation and coroutine performance]]></title>
      <description><![CDATA[I am currently building a web app framework on top of [Koa](https:&#47;&#47;github.com&#47;koajs&#47;koa), the generator-based middleware framework for node.js. If you are not familiar with Generators then I highly recommend reading [Toby Ho's introduction to Generators](http:&#47;&#47;tobyho.com&#47;2013&#47;06&#47;16&#47;what-are-generators&#47;). Towards the end of that article he mentions [co](https:&#47;&#47;github.com&#47;visionmedia&#47;co), one of the available co-routine methods for use with generator functions. In a nutshell **co** handles the iteration of a generator function so that you don't have to:
]]></description>
      <link>https://hiddentao.com/archives/2014/02/14/javascript-generator-delegation-and-coroutine-performance</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2014/02/14/javascript-generator-delegation-and-coroutine-performance</guid>
      <pubDate>Fri, 14 Feb 2014 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Automated deployment with Docker - lessons learnt]]></title>
      <description><![CDATA[**(The information in this article pertains to Docker v0.7. I have also a written a more [recent post on using Docker](http:&#47;&#47;www.hiddentao.com&#47;archives&#47;2014&#47;06&#47;03&#47;shippable-ansible-docker-loggly-for-awesome-deployments&#47;))**

Recently for my client's project we decided to automate our staging server deployments using [Docker](https:&#47;&#47;www.docker.io&#47;learn_more&#47;), as a pre-cursor to rolling out Docker deployments across our production servers is everything worked out well. For those who haven't heard of Docker before I can briefly summarize what it does.

## What is Docker?

Normally when you need to deploy your web application to a server you first need to setup the necessary pre-requisites on the server in order to run your application. This might mean setting up MongoDB, PostgreSQL, Nginx, PHP, Python, Node, basically whatever is needed to get your application running. This is all well and good until you wish to, for example, deploy a second application onto the same server. Perhaps that second application requires a slightly different version of a particular environment, e.g. a different Python environment setup. In most cases there are ways in which you can run multiple versions of a particular environment without them conflicting with each other. But this isn't always easy. When it gets too difficult you might opt to use virtual machines, and maybe using something like [Vagrant](http:&#47;&#47;www.vagrantup.com&#47;) to do so. These are great but they add a lot of resource overhead - you're essentially running two or more copies of an entire OS in their own sandboxes, and this will have an impact on performance, RAM usage and even disk space usage no matter how much you optimise it.
]]></description>
      <link>https://hiddentao.com/archives/2013/12/26/automated-deployment-with-docker-lessons-learnt</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2013/12/26/automated-deployment-with-docker-lessons-learnt</guid>
      <pubDate>Thu, 26 Dec 2013 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Cloud Primecoin mining on Ubuntu 12.04 with auto restart]]></title>
      <description><![CDATA[Following [some helpful instructions](http:&#47;&#47;www.peercointalk.org&#47;index.php?topic=937.0), I got myself a [new cloud server at Digital Ocean](https:&#47;&#47;www.digitalocean.com&#47;?refcode=98d0e3d7eb67) to start mining [Primecoins](http:&#47;&#47;primecoin.org) with. I wanted to have the miner running automatically and continuously, and being restarted even if the server itself got rebooted for whatever reason. Here is how I got things setup.
]]></description>
      <link>https://hiddentao.com/archives/2013/11/24/cloud-primecoin-mining-on-ubuntu-12-04-with-auto-restart</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2013/11/24/cloud-primecoin-mining-on-ubuntu-12-04-with-auto-restart</guid>
      <pubDate>Sun, 24 Nov 2013 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[An improved angular.module() - split your modules into multiple files]]></title>
      <description><![CDATA[The <a href="http:&#47;&#47;docs.angularjs.org&#47;api&#47;angular.module">angular.module()<&#47;a> call is unfortunately not very well designed, if you read the docs. If you call it with a single argument (the module name) it expects the module to already exist. The create the module you have to pass in an array as a second argument, telling it which modules need to be loaded before this module gets loaded - Angular will then create this module:
]]></description>
      <link>https://hiddentao.com/archives/2013/11/04/an-improved-angular-module-split-your-modules-into-multiple-files</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2013/11/04/an-improved-angular-module-split-your-modules-into-multiple-files</guid>
      <pubDate>Mon, 04 Nov 2013 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Setting up TightVNC on Ubuntu 12.04]]></title>
      <description><![CDATA[I just got [TightVNC](http:&#47;&#47;www.tightvnc.com&#47;) working properly with Ubuntu 12.04. There are various guides around the web which tell you what to do so what I'm about to give you is nothing new. Nevertheless, some of the guides out there are quite old so I hope that mine provides more up-to-date instructions.

First of all I'm assuming you've installed Ubuntu 12.04 and that you have SSH access into it. In order to make VNC worthwhile you'll need Ubuntu desktop access so go ahead and install it if you haven't already done so:
]]></description>
      <link>https://hiddentao.com/archives/2013/09/17/setting-up-tightvnc-on-ubuntu-12-04</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2013/09/17/setting-up-tightvnc-on-ubuntu-12-04</guid>
      <pubDate>Tue, 17 Sep 2013 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Nginx configuration file for ownCloud 5 server with PHP 5.5 FastCGI]]></title>
      <description><![CDATA[Nginx configuration file for ownCloud 5 server with PHP 5.5 FastCGI]]></description>
      <link>https://hiddentao.com/archives/2013/09/12/nginx-configuration-file-for-owncloud-5-server-with-php-5-5-fastcgi</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2013/09/12/nginx-configuration-file-for-owncloud-5-server-with-php-5-5-fastcgi</guid>
      <pubDate>Thu, 12 Sep 2013 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Ember.JS is stupidly easy, and stupidly difficult]]></title>
      <description><![CDATA[*NOTE: This post is a rant*

I've recently begun working on an [Ember.JS](http:&#47;&#47;emberjs.com&#47;) project for a client. A quick look at the homepage and the associated guides makes it sound really good. Computed and observable properties - if I change one property everything (upto and including UI elements) will automatically be updated. Cool. A view hierarchy that manages itself, including giving me the ability to target URLs to sub-views. Yes, yes, this sounds really good. Until you start coding.
]]></description>
      <link>https://hiddentao.com/archives/2013/08/27/ember-js-is-stupidly-easy-stupidly-difficul</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2013/08/27/ember-js-is-stupidly-easy-stupidly-difficul</guid>
      <pubDate>Tue, 27 Aug 2013 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Abide - observable object properties in Javascript using Ember-style syntax]]></title>
      <description><![CDATA[I have just released [abide](https:&#47;&#47;github.com&#47;hiddentao&#47;abide) - a small library I've been working on for the last few days. Inspired by [Ember.JS observables](http:&#47;&#47;emberjs.com&#47;api&#47;classes&#47;Ember.Observable.html), it provides a mechanism for auto-updating object properties and auto-triggering object methods based on updates made to other properties within the object. The example in the docs illustrates this well:
]]></description>
      <link>https://hiddentao.com/archives/2013/08/24/abide-observable-object-properties-in-javascript-using-ember-style-syntax</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2013/08/24/abide-observable-object-properties-in-javascript-using-ember-style-syntax</guid>
      <pubDate>Sat, 24 Aug 2013 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Javascript IMAP email client for browsers]]></title>
      <description><![CDATA[Javascript IMAP email client for browsers]]></description>
      <link>https://hiddentao.com/archives/2013/08/15/javascript-imap-email-client-for-browsers</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2013/08/15/javascript-imap-email-client-for-browsers</guid>
      <pubDate>Thu, 15 Aug 2013 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Generate overridable getters and setters in Javascript]]></title>
      <description><![CDATA[Javascript has given you the ability to define _properties_ on objects for a while now, utilising [Object.defineProperty](https:&#47;&#47;developer.mozilla.org&#47;en-US&#47;docs&#47;Web&#47;JavaScript&#47;Reference&#47;Global_Objects&#47;Object&#47;defineProperty) to control how properties are read and written. In this post I will detail how to make getters and setters which can be overridden in subclasses. At the end I will provide a utility method you can add to your own code which makes it real easy to add overridable getters and setters to your classes. ]]></description>
      <link>https://hiddentao.com/archives/2013/07/08/generate-overridable-getters-and-setters-in-javascript</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2013/07/08/generate-overridable-getters-and-setters-in-javascript</guid>
      <pubDate>Mon, 08 Jul 2013 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[How to capture email addresses using Analytics]]></title>
      <description><![CDATA[For an upcoming project of mine - [learnchinesegym.com](http:&#47;&#47;learnchinesegym.com) - I wanted a 'soon-to-be-launched' page with a simple sign up form through which users could submit their email addresses in order to be notified of updates. Typically, unless one already has the back-end built one would use [Launchrock](http:&#47;&#47;launchrock.com), [Mailchimp](http:&#47;&#47;mailchimp.com) and similar solutions for something like this. The problem is that, unless you're a paying customer, you just don't have much control over the whole sign up process when using these services. Submitting the form usually causes the page to redirect to one on their server, causing a discontinuity in the user's mental model of your site's flow. Furthermore, you probably already have Google Analytics or something like that setup, giving you information about each visitor - why not link this information directly to that visitor's email address?
]]></description>
      <link>https://hiddentao.com/archives/2013/07/06/how-to-capture-email-addresses-using-analytics</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2013/07/06/how-to-capture-email-addresses-using-analytics</guid>
      <pubDate>Sat, 06 Jul 2013 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[How to check if a JPEG is progressive]]></title>
      <description><![CDATA[I'm trying to optimise my JPEGs so that they're progressive. That way they will appear to load quicker for visitors to my website. This practise seems to be [gaining steam](http:&#47;&#47;calendar.perfplanet.com&#47;2012&#47;progressive-jpegs-a-new-best-practice&#47;) recently. In fact, remember in the late 90's when computers and internet speeds were slower? progressive JPEGs were a sure thing then. With today's mobile devices still being resource constrained, they again have a chance to shine. In searching for how to integrate the creation of progressive JPEGs into the my Grunt imagemin task I came across an [interesting technical discussion]((https:&#47;&#47;github.com&#47;yeoman&#47;yeoman&#47;issues&#47;810)) of the pros and cons, well worth checking out. 

A tricky problem is checking whether a JPEG is progressive in the first place. ]]></description>
      <link>https://hiddentao.com/archives/2013/06/11/how-to-check-if-a-jpeg-is-progressive</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2013/06/11/how-to-check-if-a-jpeg-is-progressive</guid>
      <pubDate>Tue, 11 Jun 2013 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[How to wrap fs.exists() within a Promise]]></title>
      <description><![CDATA[I have started using the [Q](https:&#47;&#47;npmjs.org&#47;package&#47;q) module - an implementation of the [Promises specification](https:&#47;&#47;github.com&#47;promises-aplus&#47;promises-spec). One nifty function it provides is [denodify](https:&#47;&#47;github.com&#47;kriskowal&#47;q&#47;wiki&#47;API-Reference#qdenodeifynodefunc-args). This makes it easy to convert a Node.js function (which takes a normal callback) into one which returns a Promise. All good until you decide you want to use [fs.exists()](http:&#47;&#47;nodejs.org&#47;api&#47;fs.html#fs_fs_exists_path_callback). 
]]></description>
      <link>https://hiddentao.com/archives/2013/06/10/how-to-wrap-fs-exists-within-a-promise</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2013/06/10/how-to-wrap-fs-exists-within-a-promise</guid>
      <pubDate>Mon, 10 Jun 2013 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Mocking calls to a class constructor in Javascript]]></title>
      <description><![CDATA[The other day, whilst writing tests with [SinonJS](http:&#47;&#47;sinonjs.org&#47;) I realised that there was no obvious way of mocking calls to class constructors in Javascript. A quick search for _"mocking Javascript class constructor"_ [did](http:&#47;&#47;stackoverflow.com&#47;questions&#47;7548974&#47;mock-stub-constructor) [lead](http:&#47;&#47;stackoverflow.com&#47;questions&#47;9347631&#47;spying-on-a-constructor-using-jasmine) [me](http:&#47;&#47;stackoverflow.com&#47;questions&#47;14569499&#47;javascript-mocking-constructor-using-sinon) to some helpful answers. 
]]></description>
      <link>https://hiddentao.com/archives/2013/06/10/mocking-calls-to-a-class-constructor-in-javascript</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2013/06/10/mocking-calls-to-a-class-constructor-in-javascript</guid>
      <pubDate>Mon, 10 Jun 2013 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Updated Google text-to-speech library and added to Bower]]></title>
      <description><![CDATA[Just pushed a few updates to the Google text-to-speech API library - [google-tts](https:&#47;&#47;github.com&#47;hiddentao&#47;google-tts) - I first put out a while back. Here are the higlights...
]]></description>
      <link>https://hiddentao.com/archives/2013/06/10/updated-google-text-to-speech-library-and-added-to-bower</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2013/06/10/updated-google-text-to-speech-library-and-added-to-bower</guid>
      <pubDate>Mon, 10 Jun 2013 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Wordpress Flickr Embed 1.1 released]]></title>
      <description><![CDATA[I've just pushed out a new release of [Wordpress Flickr Embed](http:&#47;&#47;wordpress.org&#47;support&#47;plugin&#47;wp-flickr-embed), a plugin which makes it really easy to insert Flickr images into your posts. The big new thing is...
]]></description>
      <link>https://hiddentao.com/archives/2013/05/18/wordpress-flickr-embed-1-1</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2013/05/18/wordpress-flickr-embed-1-1</guid>
      <pubDate>Sat, 18 May 2013 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[If I had Google Glass... #ifihadglass]]></title>
      <description><![CDATA[If I had [Google Glass](http:&#47;&#47;www.google.com&#47;glass&#47;start&#47;) I would want to recreate the Darknet glasses featured in [Daemon Inc.](http:&#47;&#47;www.amazon.co.uk&#47;gp&#47;product&#47;1847249612&#47;ref=as_li_ss_tl?ie=UTF8&camp=1634&creative=19450&creativeASIN=1847249612&linkCode=as2&tag=hidd-21) by Daniel Suarez. The Darknet is a network of people connected through the internet, coordinating activities using an RPG-like HUD visible through the glasses each member wears. Members can leave virtual objects for each other in different parts of the world. They can look at any individual through the glasses and instantly access that person's personal data, including name, age, address, financial net worth and other details. Members can also see another person's "reputation" score or rating as given to them by other Darknet members, thus turning this into a currency in a way in that this score can be trusted. If you haven't read the book I highly recommend doing so, as well as the sequel, [Freedom](http:&#47;&#47;www.amazon.co.uk&#47;gp&#47;product&#47;0857381229&#47;ref=as_li_ss_tl?ie=UTF8&camp=1634&creative=19450&creativeASIN=0857381229&linkCode=as2&tag=hidd-21).
]]></description>
      <link>https://hiddentao.com/archives/2013/05/02/if-i-had-google-glass-ifihadglass</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2013/05/02/if-i-had-google-glass-ifihadglass</guid>
      <pubDate>Thu, 02 May 2013 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Fast Levenshtein algorithm implementation]]></title>
      <description><![CDATA[Fast Levenshtein algorithm implementation]]></description>
      <link>https://hiddentao.com/archives/2013/04/18/fast-levenshtein-algorithm-implementation</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2013/04/18/fast-levenshtein-algorithm-implementation</guid>
      <pubDate>Thu, 18 Apr 2013 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Squel 1.1 - now with custom query building]]></title>
      <description><![CDATA[Squel 1.1 is now available. This release was a major rewrite of how Squel works underneath the hood and has been a long time coming. There are two main benefits introduced by this new release:

* The ability to customize the query building logic
* The ability to build new types of queries

The [documentation has been updated](http:&#47;&#47;hiddentao.github.com&#47;squel&#47;#custom) with info and demos of the above. I'll talk a bit about the architectural changes in this post.
]]></description>
      <link>https://hiddentao.com/archives/2013/03/28/squel-1-1-now-with-custom-query-building</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2013/03/28/squel-1-1-now-with-custom-query-building</guid>
      <pubDate>Thu, 28 Mar 2013 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Thoughts on: an open, distributed peer-to-peer Twitter eco-system]]></title>
      <description><![CDATA[As Twitter becomes ever more important and people begin to wonder whether it can even be used to [balance out biased&#47;incomplete mainstream news outlets](http:&#47;&#47;mediamatters.org&#47;blog&#47;2013&#47;03&#47;18&#47;could-twitter-have-stopped-the-medias-rush-to-w&#47;193074) it becomes clear that leaving it in control of one entity (the [Twitter](http:&#47;&#47;www.twitter.com&#47;) company) is unwise. Don't get me wrong, I love Twitter and I love what the folks behind are doing with it. I am also a fan of how their efforts to [stand up for users' rights](http:&#47;&#47;www.nbcbayarea.com&#47;news&#47;local&#47;Twitter-Goes-to-Court-to-Protect-User-Data-150665965.html). But perhaps it's now time to build a more resilient, decentralised alternative to a) make such privacy violations more difficult, and b) reduce the likelihood and impact of a server failure or hack impacting the entire twitter-verse.
]]></description>
      <link>https://hiddentao.com/archives/2013/03/21/thoughts-on-an-open-distributed-peer-to-peer-twitter-eco-system</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2013/03/21/thoughts-on-an-open-distributed-peer-to-peer-twitter-eco-system</guid>
      <pubDate>Thu, 21 Mar 2013 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Thoughts on dynamically loading parts of a mobile app]]></title>
      <description><![CDATA[One of the great benefits of building your mobile app in Javascript (with PhoneGap as the wrapper) is that you can load in bits of code (via the <code>script<&#47;code> tag) as and when needed. Of course, you can do this in any language as long as it gives you the ability to load external files or data into into program memory. But why would you want to do this?

If, for instance, you wish to provide in-app purchases to the user those purchased items need not be limited to data. For instance, if you write an app which lets people edit and manipulate their photos you could have an *advanced blur effect* or something like that available as an in-app purchasable upgrade. The code for implementing said effect can be delivered as the purchased download rather than having to package it into the original distributable app. This reduces the download size and installation time for your initial distributable and shifts this additional burden to when the user actually needs said feature and purchases it. 
]]></description>
      <link>https://hiddentao.com/archives/2013/03/13/thoughts-on-dynamically-loading-parts-of-a-mobile-app</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2013/03/13/thoughts-on-dynamically-loading-parts-of-a-mobile-app</guid>
      <pubDate>Wed, 13 Mar 2013 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Mocking jQuery methods such as fadeIn]]></title>
      <description><![CDATA[In writing UI tests for my new web app I hit a snag today. I have a notification system which uses jQuery's [fadeIn()](http:&#47;&#47;docs.jquery.com&#47;Effects&#47;fadeIn) and [fadeOut()](http:&#47;&#47;docs.jquery.com&#47;Effects&#47;fadeOut) methods to control how notification messages get displayed to the user. And I want to test that these methods are being called with right parameters and in the right order. So I should just be able to [sinon.spy()](http:&#47;&#47;sinonjs.org&#47;docs&#47;#sinonspy) them, right? Not quite.
]]></description>
      <link>https://hiddentao.com/archives/2013/01/29/mocking-jquery-methods-such-as-fadein</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2013/01/29/mocking-jquery-methods-such-as-fadein</guid>
      <pubDate>Tue, 29 Jan 2013 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Squel 1.0.6 with automatic name quoting]]></title>
      <description><![CDATA[Squel 1.0.6 with automatic name quoting]]></description>
      <link>https://hiddentao.com/archives/2013/01/10/squel-1-0-6-with-automatic-name-quoting</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2013/01/10/squel-1-0-6-with-automatic-name-quoting</guid>
      <pubDate>Thu, 10 Jan 2013 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Wordpress Flickr Embed 1.0.1 released]]></title>
      <description><![CDATA[Wordpress Flickr Embed 1.0.1 released]]></description>
      <link>https://hiddentao.com/archives/2012/12/06/wordpress-flickr-embed-1-0-1-released</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2012/12/06/wordpress-flickr-embed-1-0-1-released</guid>
      <pubDate>Thu, 06 Dec 2012 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[A plugin for embedding Flickr images into Wordpress posts]]></title>
      <description><![CDATA[I'm pleased to announce the immediate availability of <a href="http:&#47;&#47;wordpress.org&#47;extend&#47;plugins&#47;wp-flickr-embed&#47;">Wordpress Flickr Embed<&#47;a>, a plugin which makes it <em>really<&#47;em> easy to insert Flickr images into your Wordpress posts. 

The plugin is very user-friendly. It adds a button to the editing toolbar which will pop up an interactive interface when clicked. The interface lets you search for photos using free text. Click on a photo to insert it and customise the title&#47;caption, inserted size, alignment and also the size to show in the lightbox. It also provides a mechanism (on its settings page) for you to authenticate it with your Flickr account so that you can access your private images.
]]></description>
      <link>https://hiddentao.com/archives/2012/11/13/a-plugin-for-embedding-flickr-images-into-wordpress-posts</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2012/11/13/a-plugin-for-embedding-flickr-images-into-wordpress-posts</guid>
      <pubDate>Tue, 13 Nov 2012 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Squel 1.0.5 with Mocha, Chai and Sinon]]></title>
      <description><![CDATA[Squel 1.0.5 with Mocha, Chai and Sinon]]></description>
      <link>https://hiddentao.com/archives/2012/11/03/squel-1-0-5-with-mocha-chai-and-sinon</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2012/11/03/squel-1-0-5-with-mocha-chai-and-sinon</guid>
      <pubDate>Sat, 03 Nov 2012 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[google-tts - a Javascript API for Google Text-to-Speech engine]]></title>
      <description><![CDATA[google-tts - a Javascript API for Google Text-to-Speech engine]]></description>
      <link>https://hiddentao.com/archives/2012/04/01/google-tts-a-javascript-api-for-google-text-to-speech-engine</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2012/04/01/google-tts-a-javascript-api-for-google-text-to-speech-engine</guid>
      <pubDate>Sun, 01 Apr 2012 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Weber - compile scripts, stylesheets and templates on-the-fly]]></title>
      <description><![CDATA[I'd like to introduce [Weber](https:&#47;&#47;github.com&#47;hiddentao&#47;weber), a slick command-line tool for compiling, concatenating and minifying scripts, stylesheets and templates **on-the-fly**. Weber is a fork of the excellent [Hem](https:&#47;&#47;github.com&#47;maccaw&#47;hem) tool by [Alex Maccaw](http:&#47;&#47;alexmaccaw.com&#47;) which improves on the original by providing more flexibility.
]]></description>
      <link>https://hiddentao.com/archives/2012/03/15/weber-compile-scripts-stylesheets-and-templates-on-the-fly</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2012/03/15/weber-compile-scripts-stylesheets-and-templates-on-the-fly</guid>
      <pubDate>Thu, 15 Mar 2012 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Zhongwen.co.uk - a simple jQuery Mobile web app]]></title>
      <description><![CDATA[I started attending Mandarin language classes recently at the [Meridian Chinese School](http:&#47;&#47;www.meridiandao.co.uk&#47;) in London. Studying involves a 2 hour lesson once a week and a few hours spent at home revising what I've learnt. And one of the best ways to study is to practise writing the characters (fun too!) and translating sentences. So I decided to build a web app which would allow me to practise whilst on the go. My aim was to enable character recognition using HTML 5 canvas and get it working on mobiles.
]]></description>
      <link>https://hiddentao.com/archives/2012/03/14/zhongwen-co-uk-a-simple-jquery-mobile-web-app</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2012/03/14/zhongwen-co-uk-a-simple-jquery-mobile-web-app</guid>
      <pubDate>Wed, 14 Mar 2012 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Processing long-running Django tasks using Celery + RabbitMQ + Supervisord + Monit]]></title>
      <description><![CDATA[For a recent project I'm working on we had a requirement to be able to process long-running tasks in Django triggered by user interaction on the front-end. For instance, the user would click a button on the web page in order to trigger the back-end to, for example, build a CSV file containing a subset of the data in the database. In the browser a little popup window would get displayed, showing the progress of the task in the back-end. Once the task got completed in the back-end the user would be notified in the front-end of its completion and provided a link to download the final output (e.g. the built CSV file).
]]></description>
      <link>https://hiddentao.com/archives/2012/01/27/processing-long-running-django-tasks-using-celery-rabbitmq-supervisord-monit</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2012/01/27/processing-long-running-django-tasks-using-celery-rabbitmq-supervisord-monit</guid>
      <pubDate>Fri, 27 Jan 2012 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Squel.js - lightweight Javascript library for building SQL query strings in node.js or the browser]]></title>
      <description><![CDATA[I'd like to announce the immediate availability of [Squel.js](http:&#47;&#47;squeljs.org&#47;), a lightweight Javascript library for building SQL query strings. Squel exposes an object-oriented API for building SQL query strings in a server-side or browser-side Javascript environment. It's well tested using [Vows](http:&#47;&#47;vowsjs.org&#47;) and is available for forking on [github](https:&#47;&#47;github.com&#47;hiddentao&#47;squel).
]]></description>
      <link>https://hiddentao.com/archives/2011/12/23/squel-js-lightweight-javascript-library-for-building-sql-query-strings-in-node-js-or-the-browser</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2011/12/23/squel-js-lightweight-javascript-library-for-building-sql-query-strings-in-node-js-or-the-browser</guid>
      <pubDate>Fri, 23 Dec 2011 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Instructing Cakefile to exit with error if a vows test fails]]></title>
      <description><![CDATA[I'm using the [vows](http:&#47;&#47;vowsjs.org&#47;) "behaviour-driven development" framework to test the [squel](https:&#47;&#47;github.com&#47;hiddentao&#47;squel) Javascript library. I have a Cakefile which acts as my build script and inside it there is function which runs all of my tests. I decided to hook it up to the excellent [Travis CI](http:&#47;&#47;travis-ci.org&#47;) automated build system to ensure continuous testing on commits. One of the problems I had was that `cake` script exited normally even when one of the vows tests broke.
]]></description>
      <link>https://hiddentao.com/archives/2011/12/21/instructing-cakefile-to-exit-with-error-if-a-vows-test-fails</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2011/12/21/instructing-cakefile-to-exit-with-error-if-a-vows-test-fails</guid>
      <pubDate>Wed, 21 Dec 2011 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Django - fetching list of all SQL queries executed so far for all requests]]></title>
      <description><![CDATA[As part of a recent Django project I had to provide a way to view all the SQL queries which had been executed through the Django app across all requests, when using the Django test server. Although the debug toolbar that ships with Django shows such query information it doesn't work for queries executed as a part of AJAX requests. 
]]></description>
      <link>https://hiddentao.com/archives/2011/12/18/django-fetching-list-of-all-sql-queries-executed-so-far-for-all-requests</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2011/12/18/django-fetching-list-of-all-sql-queries-executed-so-far-for-all-requests</guid>
      <pubDate>Sun, 18 Dec 2011 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Primary key, foreign key improvements to Sequelize + Date.js alternatives]]></title>
      <description><![CDATA[I've created a [patch][&#47;patch](https:&#47;&#47;github.com&#47;sdepold&#47;sequelize&#47;pull&#47;110) for [Sequelize](http:&#47;&#47;sequelizejs.com&#47;) which enables one to use primary key fields as foreign keys too, something I find myself doing often with my relational schemas as I don't like using the standard `id` primary key field unless it's the most sensible primary key to have. In practice the changes mean you can do the following (not currently possible in vanilla Sequelize):
]]></description>
      <link>https://hiddentao.com/archives/2011/11/18/primary-key-foreign-key-improvements-to-sequelize-date-js-alternatives</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2011/11/18/primary-key-foreign-key-improvements-to-sequelize-date-js-alternatives</guid>
      <pubDate>Fri, 18 Nov 2011 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Adding model validation to the Sequelize ORM library for node.js]]></title>
      <description><![CDATA[I've been using the [Sequelize ORM](http:&#47;&#47;sequelizejs.com&#47;) library for node.js lately and it's a really nicely done piece of work by Sascha Depold. It's still got some way to go before one can consider it to be mature framework. One thing I miss having is a nice easy way of specifying how to validate field values (e.g. [Kohana's validation](http:&#47;&#47;docs.kohanaphp.com&#47;libraries&#47;validation)). Luckily there is already the excellent [node-validator](https:&#47;&#47;github.com&#47;chriso&#47;node-validator) library and yesterday I was able to integrate it into Sequelize to provide declarative validation for fields.
]]></description>
      <link>https://hiddentao.com/archives/2011/11/12/adding-model-validation-to-the-sequelize-orm-library-for-node-js</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2011/11/12/adding-model-validation-to-the-sequelize-orm-library-for-node-js</guid>
      <pubDate>Sat, 12 Nov 2011 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[CoffeeScript function binding gotcha when using cloned Spine models]]></title>
      <description><![CDATA[I've come across a CoffeeScript "gotcha" whilst cloning [Spine models](http:&#47;&#47;spinejs.com&#47;docs&#47;models). Let's say we have model as such:

[code lang="js"]
Spine = require("spine")
class MyModel extends Spine.Model
    id : 1
    output: () =>
        console.log @id
[&#47;code]
]]></description>
      <link>https://hiddentao.com/archives/2011/11/09/coffeescript-function-binding-gotcha-when-using-cloned-spine-models</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2011/11/09/coffeescript-function-binding-gotcha-when-using-cloned-spine-models</guid>
      <pubDate>Wed, 09 Nov 2011 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[How to write a custom widget for jQuery Mobile]]></title>
      <description><![CDATA[I needed to write a custom widget for the [jQuery Mobile](http:&#47;&#47;jquerymobile.com&#47;) library but couldn't find any step-by-step documentation on how to do it in the official docs. A search on Google didn't result in any better luck. In the end it turned out to be quite easy to do - I was able to figure it out by looking at the source code of jQuery Mobile and that of the excellent [DateBox](http:&#47;&#47;dev.jtsage.com&#47;jQM-DateBox&#47;) plugin. In this post I outline the essentials to adding your own custom widget to jQuery Mobile.
]]></description>
      <link>https://hiddentao.com/archives/2011/11/07/how-to-write-a-custom-widget-for-jquery-mobile</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2011/11/07/how-to-write-a-custom-widget-for-jquery-mobile</guid>
      <pubDate>Mon, 07 Nov 2011 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Comparison of RequireJS and Hem for JS minification]]></title>
      <description><![CDATA[As I've hinted at in <a href="http:&#47;&#47;www.hiddentao.com&#47;archives&#47;2011&#47;08&#47;17&#47;notes-on-using-requirejs-with-backbone-andor-spine&#47;" title="Notes on using RequireJS with Backbone and&#47;or Spine">previous posts<&#47;a> I've been using [RequireJS](http:&#47;&#47;requirejs.org&#47;) for a while now to help "modularize" my client-side Javascript code and make it easy to package it into minified and compressed script files at deployment time. And ditto for my CSS files.

Recently I started using the [Spine](http:&#47;&#47;spinejs.com&#47;) Javascript framework to base my app on a simple MVC architecture. Even more recently I found out that Spine's creator Alex McCaw had written a tool called [Hem](https:&#47;&#47;github.com&#47;maccman&#47;hem) which pretty much does whatever RequireJS except that it's optimised for use with Spine. I gave it a go and having now used both it and RequireJS I am better placed to comment on the differences and relative advantaged of the two tools.
]]></description>
      <link>https://hiddentao.com/archives/2011/10/24/comparison-of-requirejs-and-hem-for-js-minification</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2011/10/24/comparison-of-requirejs-and-hem-for-js-minification</guid>
      <pubDate>Mon, 24 Oct 2011 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Notes on using RequireJS with Backbone and&#47;or Spine]]></title>
      <description><![CDATA[For a project I'm currently working on I've decided to jump on the Javascript bandwagon with full weight. I intend to code in [CoffeeScript](http:&#47;&#47;jashkenas.github.com&#47;coffee-script&#47;), use either [Spine](http:&#47;&#47;maccman.github.com&#47;spine&#47;) or [Backbone](http:&#47;&#47;documentcloud.github.com&#47;backbone&#47;) to give me a light-weight MVC architecture, and then deploy it all together in a clean, optimized way using [RequireJS](http:&#47;&#47;requirejs.org&#47;). If you're not familiar with these tools and libraries then I recommend you follow the links to find out more about them. Basically, client-side Javascript-driven web app development is getting very exciting :)

I started off by getting Spine to to work with the [RequireJS CoffeeScript adapter](https:&#47;&#47;github.com&#47;jrburke&#47;require-cs). In development mode everything worked fine but when I tested using the RequireJS-optimized output some of my Spine code didn't seem to work. Here is my HTML file:
]]></description>
      <link>https://hiddentao.com/archives/2011/08/17/notes-on-using-requirejs-with-backbone-andor-spine</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2011/08/17/notes-on-using-requirejs-with-backbone-andor-spine</guid>
      <pubDate>Wed, 17 Aug 2011 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Idea for a local app based social network]]></title>
      <description><![CDATA[Here's a crazy idea which popped into my head the other day. What if we could build a secure social network using a local app manipulating locally stored data?

Why would we want to do this? After all there are a number of [alternative](https:&#47;&#47;github.com&#47;diaspora&#47;diaspora), [open](http:&#47;&#47;elgg.org&#47;) [source][&#47;source](http:&#47;&#47;buddycloud.com&#47;) [social](http:&#47;&#47;opensource.appleseedproject.org&#47;) [networks](http:&#47;&#47;movim.eu&#47;) currently being built which give you control over your data and allow you to move all your data from one host to another, where each host adheres to the specification laid out by said social network. The immediate problem with all of these is that if you're a non-technical user, setting up and running your own host is a pain. It's all good and well trusting somebody else to host your data but for ultimate privacy and control you'll want to have your own local copy of it and be able to manipulate your profile locally without having to use a third-party website.
]]></description>
      <link>https://hiddentao.com/archives/2011/08/11/idea-for-a-local-app-based-social-network</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2011/08/11/idea-for-a-local-app-based-social-network</guid>
      <pubDate>Thu, 11 Aug 2011 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Asynchronous implementation of LZW algorithm in Javascript]]></title>
      <description><![CDATA[I'm quite pleased to announce availability of my latest mini-project - an efficient Javascript implementation of the [Lempel-Ziv-Welsh (LZW) compression algorithm](http:&#47;&#47;en.wikipedia.org&#47;wiki&#47;Lempel%E2%80%93Ziv%E2%80%93Welch). It's **only 4 KB** (minified size) and available right now from [Github](https:&#47;&#47;github.com&#47;hiddentao&#47;lzw-async) where you'll also find instructions on use and the full API. This post provides details of the implementation and discusses some of the design decisions, as well as providing some performance metrics.
]]></description>
      <link>https://hiddentao.com/archives/2011/08/01/asynchronous-implementation-of-lzw-algorithm-in-javascript</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2011/08/01/asynchronous-implementation-of-lzw-algorithm-in-javascript</guid>
      <pubDate>Mon, 01 Aug 2011 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Redmine plugin which pushes updates to external URL]]></title>
      <description><![CDATA[A recent client wished to integrate the [Redmine](http:&#47;&#47;www.redmine.org) issue tracking system with their front-end software change request system. Specifically, they wanted 2-way integration such that changes made in one system were immediately reflected in the other. Redmine provides a REST API for accessing and modifying data which meant it was easy to keep Redmine up-to-date. I needed a way of knowing about Redmine changes as soon as they occurred, separate to the email which Redmine sends out with each change. There were already plugins which would [update specific third-party services when a Redmine issue got updated](http:&#47;&#47;www.redmine.org&#47;boards&#47;3&#47;topics&#47;7117) but I needed one which would call back to a custom URL exposed by our other system. And so the **Updates notifier** plugin was born.
]]></description>
      <link>https://hiddentao.com/archives/2011/07/24/redmine-plugin-which-pushes-updates-to-external-url</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2011/07/24/redmine-plugin-which-pushes-updates-to-external-url</guid>
      <pubDate>Sun, 24 Jul 2011 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Javascript array and object lookup speeds]]></title>
      <description><![CDATA[I'm currently working on an an implementation of the [LZW algorithm](http:&#47;&#47;en.wikipedia.org&#47;wiki&#47;Lempel%E2%80%93Ziv%E2%80%93Welch) in Javascript and one of the things I need to decide to test out is whether using an `Array` is faster than using an `Object` for storage and retrieval of items which are indexed numerically. I decided to write a little Javascript test to see which was faster and find out how if the choice of browser made a difference to the relative results.
]]></description>
      <link>https://hiddentao.com/archives/2011/07/20/javascript-array-and-object-lookup-speeds</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2011/07/20/javascript-array-and-object-lookup-speeds</guid>
      <pubDate>Wed, 20 Jul 2011 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[wuPlay - real-time multiplayer web gaming on your mobile]]></title>
      <description><![CDATA[Introducing [wuPlay.com](wuPlay.com), an experiment in real-time multiplayer gaming on a mobile-friendly website. wuPlay is a web-based multiplayer implementation of the excellent [Connect6](http:&#47;&#47;en.wikipedia.org&#47;wiki&#47;Connect6) game that works well on desktops, tablets as well as on most good mobile devices (so far I've tested on Android 2.3 and iOS 4.2 devices).
]]></description>
      <link>https://hiddentao.com/archives/2011/07/15/wuplay-real-time-multiplayer-web-gaming-on-your-mobile</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2011/07/15/wuplay-real-time-multiplayer-web-gaming-on-your-mobile</guid>
      <pubDate>Fri, 15 Jul 2011 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Javascript client-side file generation and download]]></title>
      <description><![CDATA[For a project I'm currently working on I need to be able to generate a file in Javascript and then prompt the user to save it to their hard drive. I've spent some time searching the web for the various available solutions to this and have decided to list them here for others to benefit.
]]></description>
      <link>https://hiddentao.com/archives/2011/07/04/javascript-client-side-file-generation-and-download</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2011/07/04/javascript-client-side-file-generation-and-download</guid>
      <pubDate>Mon, 04 Jul 2011 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[jQuery AJAX progress indicator plugin]]></title>
      <description><![CDATA[Some of my latest projects rely heavily on [jQuery's AJAX method](http:&#47;&#47;api.jquery.com&#47;jQuery.ajax&#47;) to perform AJAX requests against the server-side code. I wanted my projects to be mobile-friendly and this meant that I had to take into account intermittent drops in the internet connection as well as temporary slow downs in speed when making my AJAX calls. I decided to display a "loading" progress indicator to the user for every critical AJAX request which I needed to make so that in case there was a delay in receiving a response from the server at least the user would know what was going on (you can see this concept in action on [WuPlay](http:&#47;&#47;wuplay.com&#47;)).
]]></description>
      <link>https://hiddentao.com/archives/2011/07/02/jquery-ajax-progress-indicator-plugin</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2011/07/02/jquery-ajax-progress-indicator-plugin</guid>
      <pubDate>Sat, 02 Jul 2011 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Setting up a simple Ubuntu apt repository]]></title>
      <description><![CDATA[For a recent project I needed to deploy a custom build of PHP 5.2 to multiple Lucid servers. It had to be deployed in such a way as to make it easy to update all the servers with newer versions of the build in future. We decided to set up a Ubuntu repository containing the installation packages which we would access through the `apt` utilities. This post outlines the steps needed to get something like this working.
]]></description>
      <link>https://hiddentao.com/archives/2011/06/27/setting-up-a-simple-ubuntu-apt-repository</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2011/06/27/setting-up-a-simple-ubuntu-apt-repository</guid>
      <pubDate>Mon, 27 Jun 2011 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Ubuntu 10.04 Lucid 64-bit + PHP 5.2 FastCGI + APC + nginx]]></title>
      <description><![CDATA[This post outlines the steps needed to get PHP 5.2 running on Ubuntu 10.04 ("Lucid Lynx") 64-bit under nginx and FastCGI with APC enabled. The current Lucid apt repositories contain PHP 5.3 so I needed compile 5.2 from source in order to get this setup working. I also decided to use the new-ish [FastCGI Process Manager](http:&#47;&#47;php-fpm.org&#47;) that comes with PHP in order to manage FastCGI processes. 
]]></description>
      <link>https://hiddentao.com/archives/2011/06/24/ubuntu-10-04-lucid-64-bit-php-5-2-fastcgi-apc-nginx</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2011/06/24/ubuntu-10-04-lucid-64-bit-php-5-2-fastcgi-apc-nginx</guid>
      <pubDate>Fri, 24 Jun 2011 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[RequireJS with progress indicator]]></title>
      <description><![CDATA[I've just started using the excellent [RequireJS](http://requirejs.org/) library with a new Javascript-heavy project I'm working on. This post considers an easy way in which to add a progress indicator to all `require()` calls such that the user is always aware of what's going on.]]></description>
      <link>https://hiddentao.com/archives/2011/06/23/requirejs-with-progress-indicator</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2011/06/23/requirejs-with-progress-indicator</guid>
      <pubDate>Thu, 23 Jun 2011 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Getting Vagrant working on Ubuntu 10.10]]></title>
      <description><![CDATA[I've recently started using [Vagrant](http:&#47;&#47;vagrantup.com&#47; "Vagrant") to create and deploy virtualized development environments and thought I'd post the steps required to get it working on Ubuntu 10.10 ("Maverick Meerkat").
]]></description>
      <link>https://hiddentao.com/archives/2011/06/22/getting-vagrant-working-on-ubuntu-10-10</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2011/06/22/getting-vagrant-working-on-ubuntu-10-10</guid>
      <pubDate>Wed, 22 Jun 2011 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Simple online calculator using HTML and Javascript]]></title>
      <description><![CDATA[Last Friday I was looking for a simple online calculator which I could use via a web browser and which was mobile friendly. The best ones I could find were all done in [Flash](http:&#47;&#47;www.adobe.com&#47;products&#47;flashplayer&#47;) which I though kinda sucked since it was perfectly possible to build one using HTML and Javascript. Not to mention that Flash doesn't work on iPhones&#47;iPads. As I was feeling a little creative I decided to build one myself, which you can now see at [calc8.com](http:&#47;&#47;calc8.com&#47;).
]]></description>
      <link>https://hiddentao.com/archives/2010/11/25/simple-online-calculator</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2010/11/25/simple-online-calculator</guid>
      <pubDate>Thu, 25 Nov 2010 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Using Gradle + Juicer to minify and GZip Javascript and CSS]]></title>
      <description><![CDATA[Recently I've been focussing more and more on performance in the web projects I'm working on. By now the [benefits of merging, minifying and GZipping](http:&#47;&#47;developer.yahoo.com&#47;performance&#47;rules.html) external Javascript and CSS files are well documented - your web page loads quicker (due to smaller download sizes and less HTTP requests to make). For a web project I'm currently working on I decided to investigate what tools were available out there and particularly, how I could automate the whole process using a build script.
]]></description>
      <link>https://hiddentao.com/archives/2010/11/10/using-gradle-juicer-to-minify-and-gzip-javascript-and-css</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2010/11/10/using-gradle-juicer-to-minify-and-gzip-javascript-and-css</guid>
      <pubDate>Wed, 10 Nov 2010 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Setting up Hudson on Debian for continuous integration with Git]]></title>
      <description><![CDATA[For the [Tornado](http:&#47;&#47;www.tornadoweb.org&#47;) project I'm currently working on I decided to get continuous integration setup on my Debian Lenny server. In the past I've used [CruiseControl](http:&#47;&#47;cruisecontrol.sourceforge.net&#47;) for doing automated builds but recently I've been getting to know [Hudson](http:&#47;&#47;hudson-ci.org&#47;) and I find it to be a superior alternative ([stackoverflow](http:&#47;&#47;stackoverflow.com&#47;questions&#47;604385&#47;what-is-the-difference-between-hudson-and-cruisecontrol-for-java-projects) has a good discussion on the respective pros and cons). In this post I'm going to outline the steps I took in order to get Hudson up and running on my box. 
]]></description>
      <link>https://hiddentao.com/archives/2010/10/27/setting-up-hudson-on-debian-for-continuous-integration-with-git</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2010/10/27/setting-up-hudson-on-debian-for-continuous-integration-with-git</guid>
      <pubDate>Wed, 27 Oct 2010 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[A bulk stock updater module for Ubercart]]></title>
      <description><![CDATA[On a recent Drupal project I was asked to build an interface whereby administrators could easily bulk-edit the stock levels for all their [Ubercart](http:&#47;&#47;www.ubercart.org&#47;) products. I had a look on the web for something which already did this. I found [Multiple stock edit](http:&#47;&#47;www.ubercart.org&#47;contrib&#47;5411) - which only really worked with Ubercart 1.x and Drupal 5 (not to mention that it used the standard Drupal form submission mechanism, thus making it difficult to quickly bulk-edit large numbers of items). [Stock and Price updater](http:&#47;&#47;www.ubercart.org&#47;contrib&#47;12428) only worked by importing CSV files. And [Views Bulk Operations](http:&#47;&#47;drupal.org&#47;project&#47;views_bulk_operations) would only let you set the stock level to the same value across a range of products. 
]]></description>
      <link>https://hiddentao.com/archives/2010/08/29/a-bulk-stock-updater-module-for-ubercart</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2010/08/29/a-bulk-stock-updater-module-for-ubercart</guid>
      <pubDate>Sun, 29 Aug 2010 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[A simple pager script for Drupal]]></title>
      <description><![CDATA[Today I found myself needing to render pager links in [Drupal 6](http:&#47;&#47;drupal.org&#47;) for a list of items. By _pager_ I mean the links you usually see at the bottom of the page which indicate what page you're currently on, what pages comes before and after and where you are in the grand context of the total number of pages available (example: [http:&#47;&#47;drupal.org&#47;search&#47;apachesolr_search&#47;e](http:&#47;&#47;drupal.org&#47;search&#47;apachesolr_search&#47;e)). 
]]></description>
      <link>https://hiddentao.com/archives/2010/08/24/a-simple-pager-script-for-drupal</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2010/08/24/a-simple-pager-script-for-drupal</guid>
      <pubDate>Tue, 24 Aug 2010 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[My first Android Market app purchasing experience]]></title>
      <description><![CDATA[Today I decided to make my first purchase on the [Android Market](http:&#47;&#47;www.android.com&#47;market&#47;). Up until now I've been downloading and using free apps. Then recently I came across [KJ Sawka's DrumBanger](http:&#47;&#47;www.youtube.com&#47;watch?v=c9SqPKgLSI4) for the iPhone and decided that I definitely needed to get in on that action on my HTC Hero. The closest thing I could find (atleast I think it's similar) is the [Electrum Drum Machine](http:&#47;&#47;www.nikotwenty.com&#47;). It's been getting great user reviews in the Market and at $4 and between 10-50,000 downloads I figured it had to be somewhat decent. So the next bit was to pay for the app and get hold of it on my phone. And this is where things got interesting...
]]></description>
      <link>https://hiddentao.com/archives/2010/08/20/my-first-android-market-app-purchasing-experience</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2010/08/20/my-first-android-market-app-purchasing-experience</guid>
      <pubDate>Fri, 20 Aug 2010 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Git + Windows Vista + Eclipse]]></title>
      <description><![CDATA[I've recently begun using [Git](http:&#47;&#47;git-scm.com&#47;) for some of my software projects. I've also started storing my repository on [GitHub](http:&#47;&#47;github.com&#47;hiddentao), a great way of sharing open source code with other developers. Git was originally developed for use on *nix systems - Windows support came a little bit later and many of the Git GUI tools have yet to reach an equivalent level of maturity to the SVN tools out there (such as [TortoiseSVN](http:&#47;&#47;tortoisesvn.tigris.org&#47;)). Nevertheless, I needed to Git working on Vista laptop and this post talks about the setup I'm using to get everything working.
]]></description>
      <link>https://hiddentao.com/archives/2010/08/12/git-windows-vista-eclipse</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2010/08/12/git-windows-vista-eclipse</guid>
      <pubDate>Thu, 12 Aug 2010 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[My Three Words now on Facebook and your website]]></title>
      <description><![CDATA[Remember [My Three Words](&#47;archives&#47;2010&#47;03&#47;31&#47;my-three-words&#47;)? Over the last month or so we've been busy adding lots more to it. 

You can now get it on Facebook at [http:&#47;&#47;apps.facebook.com&#47;mythreewords&#47;](http:&#47;&#47;apps.facebook.com&#47;mythreewords&#47;). And you can share your favourite stories on Facebook itself and invite your friends to play with you.

But the coolest new thing is the little widget (see below) which can be embedded on your website. ]]></description>
      <link>https://hiddentao.com/archives/2010/05/17/my-three-words-now-on-facebook-and-your-website</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2010/05/17/my-three-words-now-on-facebook-and-your-website</guid>
      <pubDate>Mon, 17 May 2010 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[The 14 spiritual laws of success]]></title>
      <description><![CDATA[Last weekend I attended a retreat with [Chinmya Mission UK](http:&#47;&#47;www.chinmayauk.org&#47;), a non-profit organisation which promotes the [Advaita Vedanta](http:&#47;&#47;en.wikipedia.org&#47;wiki&#47;Vedanta#Advaita_Vedanta) philosophies. I got to meet one of their teachers - [Swami Swaroopananda](http:&#47;&#47;www.chinmayauk.org&#47;Our%20Leaders&#47;Swami%20Swaroopananda.htm). He was a jolly fellow, always with a smile on his face and very accomodating to our questions. The topic of the weekend was **"The 14 Spiritual laws of success"** and Swami-ji (what people call him out of respect) gave us a number of inspiring lectures covering this topic, littered throughout with funny observations and anecdotes from his own life. I found it to be an inspirational weekend and decided to write up my notes in this blog post. So without further adue...
]]></description>
      <link>https://hiddentao.com/archives/2010/04/27/the-14-spiritual-laws-of-success</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2010/04/27/the-14-spiritual-laws-of-success</guid>
      <pubDate>Tue, 27 Apr 2010 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[My Three Words]]></title>
      <description><![CDATA[I'm currently doing some work for [Miura](http:&#47;&#47;miura.gi&#47;), a digital design agency based in London. A month ago the creative director came up with a silly but fun idea: "how about a page where different people can come in and type in 3 words a time, building up a short story?". I told him I could probably knock up a prototype within an hour though I didn't think he'd want me to actually do it!
]]></description>
      <link>https://hiddentao.com/archives/2010/03/31/my-three-words</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2010/03/31/my-three-words</guid>
      <pubDate>Wed, 31 Mar 2010 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Getting page tags to show on your Wordpress pages]]></title>
      <description><![CDATA[A number of users of [Page Tagger](&#47;code&#47;wordpress-page-tagger-plugin&#47;) have emailed in asking how to get their page tags showing on their pages. So I thought I'd put up a short blog post on how to do this.

Once you've happily tagged your pages using Page Tagger you need to edit your theme's `page.php` template. This is the [template which gets used by Wordpress](http:&#47;&#47;codex.wordpress.org&#47;Pages#What_Template_is_used_to_Display_a_Particular_Page.3F) whenever you view a static page (as opposed to a blog post) on your site.
]]></description>
      <link>https://hiddentao.com/archives/2010/03/24/getting-page-tags-to-show-on-your-pages</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2010/03/24/getting-page-tags-to-show-on-your-pages</guid>
      <pubDate>Wed, 24 Mar 2010 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Dropbox on removable media]]></title>
      <description><![CDATA[I've been using [Dropbox](http:&#47;&#47;www.dropbox.com&#47;) for a while now. For those who are unfamiliar with it it's an application which makes it easy to share files online with anyone. Essentially, Dropbox creates a "My Dropbox" folder on your computer. This folder is automatically kept in sync with your Dropbox account online - thus, anything you put into this folder gets automatically uploaded to your Dropbox online account. If you choose to share your Dropbox folder (or even just a specific file) with somebody else then the changes you make to the folder will show up in their local copy of it (they have to be signed up to Dropbox too) and vice versa. Dropbox simply sits in the background and synchronises the folder - the folder looks and works just like a normal filesystem folder.
]]></description>
      <link>https://hiddentao.com/archives/2010/02/07/dropbox-on-removable-media</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2010/02/07/dropbox-on-removable-media</guid>
      <pubDate>Sun, 07 Feb 2010 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[3D demo]]></title>
      <description><![CDATA[A while back I decided to write a simple 3D graphics engine in Java after being inspired by [Daniel Tebbutt's Bedlam solver](http:&#47;&#47;danieltebbutt.com&#47;bedlam.html). Essentially I wanted to show a cube like his but with the added ability to split it apart so that you could see how the pieces fit together. As I got going with this I was enjoying it so much I put aside the puzzle algorithm and just started adding more 3D rendering features.

Fast forward many hours of coding and here is a simple demo (click the image to launch it):
]]></description>
      <link>https://hiddentao.com/archives/2010/01/20/3d-demo</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2010/01/20/3d-demo</guid>
      <pubDate>Wed, 20 Jan 2010 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Page Tagger 0.3.5 and Common-Utils]]></title>
      <description><![CDATA[Page Tagger 0.3.5 and Common-Utils]]></description>
      <link>https://hiddentao.com/archives/2010/01/16/page-tagger-0-3-5-and-common-utils</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2010/01/16/page-tagger-0-3-5-and-common-utils</guid>
      <pubDate>Sat, 16 Jan 2010 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Page Tagger 0.3.4]]></title>
      <description><![CDATA[Page Tagger 0.3.4]]></description>
      <link>https://hiddentao.com/archives/2009/12/20/page-tagger-0-3-4</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2009/12/20/page-tagger-0-3-4</guid>
      <pubDate>Sun, 20 Dec 2009 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Copenhagen target converter]]></title>
      <description><![CDATA[As we near the [15th Annual UNFCCC conference](http:&#47;&#47;en.cop15.dk&#47; "COP15") in Copenhagen more and more countries are pledging emissions cuts. But the devil is always in the details, as a [recent article in the Guardian](http:&#47;&#47;www.guardian.co.uk&#47;environment&#47;cif-green&#47;2009&#47;nov&#47;26&#47;us-china-targets-mean) pointed out.

For instance, [Russia recently announced](http:&#47;&#47;www.bloomberg.com&#47;apps&#47;news?pid=20601130&sid=a0vyS5jDWR0M) that it would cut its greenhouse gas emissions by 25% on 1990 levels. ]]></description>
      <link>https://hiddentao.com/archives/2009/11/27/copenhagen-target-converter</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2009/11/27/copenhagen-target-converter</guid>
      <pubDate>Fri, 27 Nov 2009 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Page Tagger 0.3.2]]></title>
      <description><![CDATA[Page Tagger 0.3.2]]></description>
      <link>https://hiddentao.com/archives/2009/11/18/page-tagger-0-3-2</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2009/11/18/page-tagger-0-3-2</guid>
      <pubDate>Wed, 18 Nov 2009 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Launch48]]></title>
      <description><![CDATA[This weekend just gone I attended [Launch48](http:&#47;&#47;www.launch48.com&#47; "Launch48 homepage"), an event where the objective was to build a viable commercial web application in just 48 hours with a diverse group of random people you meet at the event itself.

There is already information on the Launch48 site about [how the weekend unfolded](http:&#47;&#47;www.launch48.com&#47;4pm-board-meetings-live-blog&#47;) as well [what came out of it](http:&#47;&#47;eu.techcrunch.com&#47;2009&#47;10&#47;18&#47;launch48-startups-present-their-ideas-after-a-frantic-48-hours&#47;), so I'm going to talk about my experiences at the event and reflect upon what I learned.
]]></description>
      <link>https://hiddentao.com/archives/2009/10/20/launch48</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2009/10/20/launch48</guid>
      <pubDate>Tue, 20 Oct 2009 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Creating an archives page like mine]]></title>
      <description><![CDATA[A plugin user recently wrote in asking me how to create an [archives page like mine](&#47;archives&#47;). So I thought I'd give everyone the lowdown on how to do this in this post.
]]></description>
      <link>https://hiddentao.com/archives/2009/09/22/creating-an-archives-page-like-mine</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2009/09/22/creating-an-archives-page-like-mine</guid>
      <pubDate>Tue, 22 Sep 2009 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA["You are now friends with Android"]]></title>
      <description><![CDATA[Having worked at [Symbian](http:&#47;&#47;www.symbian.com) a few years ago and gotten to learn about mobile operating systems, I believe that Symbian have the best mobile OS kernel in terms of performance, responsiveness and robustness. Unfortunately almost the opposite can be said for the S60 UI layer (which Nokia makes) that sits on top of it. The end result being that a lot of Symbian phones (a lot of which are Nokias) tend to feel slow and buggy more often than they should. Nevertheless, they do pack a lot of features and thus for the last 3 years I've happily moved around with a Nokia N73, running S60v3 on Symbian 9.1. 
]]></description>
      <link>https://hiddentao.com/archives/2009/09/19/you-are-now-friends-with-android</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2009/09/19/you-are-now-friends-with-android</guid>
      <pubDate>Sat, 19 Sep 2009 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[One Giant Leap!]]></title>
      <description><![CDATA[One of my current clients is the [Sandbag Climate Campaign](http:&#47;&#47;sandbag.org.uk&#47; "Sandbag"). They're a small organisation primarily focussed on the [European carbon emissions trading scheme](http:&#47;&#47;en.wikipedia.org&#47;wiki&#47;European_Union_Emission_Trading_Scheme) as well as the upcoming global climate conference at Copenhagen ([COP-15](http:&#47;&#47;en.cop15.dk&#47;)). 

One of their latest projects is a global parkour jam titled ["One Giant Leap!"](http:&#47;&#47;sandbag.org.uk&#47;campaigns&#47;copenhagen), designed to raise the public's awareness of the importance of the upcoming conference. The jam is scheduled to take place on Saturday, September 26th, 2009 in over 30 countries simultaneously ([see the map](http:&#47;&#47;maps.google.com&#47;maps&#47;ms?ie=UTF8&hl=en&msa=0&msid=108986355714869234623.000471a40042e76d97dc8&ll=26.74561,2.8125&spn=133.559418,303.75&z=2)). 
]]></description>
      <link>https://hiddentao.com/archives/2009/09/10/one-giant-leap</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2009/09/10/one-giant-leap</guid>
      <pubDate>Thu, 10 Sep 2009 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Page-Tags 0.3]]></title>
      <description><![CDATA[Page-Tags 0.3]]></description>
      <link>https://hiddentao.com/archives/2009/09/08/page-tags-0-3</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2009/09/08/page-tags-0-3</guid>
      <pubDate>Tue, 08 Sep 2009 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Page-Tags is now known as "Page Tagger"]]></title>
      <description><![CDATA[Page-Tags is now known as "Page Tagger"]]></description>
      <link>https://hiddentao.com/archives/2009/09/08/page-tags-is-now-known-as-page-tagger</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2009/09/08/page-tags-is-now-known-as-page-tagger</guid>
      <pubDate>Tue, 08 Sep 2009 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Do online music stores share the same back-end database?]]></title>
      <description><![CDATA[A couple of days ago I bought the classic track **Amen UK - Passion (Paul Masterson Radio Edit)** from <a href="http:&#47;&#47;www.tescodigital.com&#47;Store&#47;Pages&#47;SearchResults2.aspx?searchexpression=Amen+UK&searchtype=AllProducts">TescoDigital<&#47;a> - Tesco's online music store. I purchased it, downloaded it and then loaded it into Winamp. What came out of my speakers sounded totally different to <a href="http:&#47;&#47;www.last.fm&#47;music&#47;Amen+UK&#47;_&#47;Passion+(Paul+Masterson+Radio+Edit)">what I was expecting<&#47;a>. So I went back to Tesco's webpage and previewed the track, thinking that it might just have been a downloading error in their system. Turns out the preview track sounds exactly the same as what I had been given in the download, and therefore also wrong. I immediately fired off an email to their customer support team regarding the matter and am still awaiting a reply.
]]></description>
      <link>https://hiddentao.com/archives/2009/08/07/do-online-music-stores-share-the-same-back-end-database</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2009/08/07/do-online-music-stores-share-the-same-back-end-database</guid>
      <pubDate>Fri, 07 Aug 2009 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Page-Tags 0.2]]></title>
      <description><![CDATA[A <a href="http:&#47;&#47;www.hiddentao.com&#47;archives&#47;2009&#47;01&#47;18&#47;tag-your-wordpress-27-pages&#47;#comment-435"> recently noticed<&#47;a> issue with the <a href="https://hiddentao.com&#47;code&#47;wordpress-page-tags-plugin&#47;">Page-Tags<&#47;a> plugin was that if you added a new tag when editing a page the tag didn't show up in the tag cloud sidebar widget. Only tags which were also associated with one or more blog posts were showing up in the tag cloud. I was seeing the same problem on my <a href="https://hiddentao.com&#47;archives&#47;">archives<&#47;a> page.

This issue has now been fixed in the <a href="https://hiddentao.com&#47;code&#47;wordpress-page-tags-plugin&#47;">latest version<&#47;a>. **To get the tags you've already added showing, install the updated plugin, and then edit and save the corresponding pages without making any changes**.
]]></description>
      <link>https://hiddentao.com/archives/2009/04/03/page-tags-02</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2009/04/03/page-tags-02</guid>
      <pubDate>Fri, 03 Apr 2009 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Web server information plugin]]></title>
      <description><![CDATA[I do all the development work for this site on my local machine, using a mirror copy of the live database and Wordpress installation. Once I'm happy with any changes made I apply them to the live web server (usually via Subversion). I use the <a href="http:&#47;&#47;en.wikipedia.org&#47;wiki&#47;Hosts_file">HOSTS file<&#47;a> to redirect all browser calls for <strong>hiddentao.com<&#47;strong> to the local IP address (127.0.0.1) so that I can properly test URL linking and redirection. This way I can experiment as much as I like on my local copy without worrying about causing any damage to the live website.
]]></description>
      <link>https://hiddentao.com/archives/2009/03/31/server-information-plugin</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2009/03/31/server-information-plugin</guid>
      <pubDate>Tue, 31 Mar 2009 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Tag your Wordpress 2.7 pages!]]></title>
      <description><![CDATA[A few weeks ago I upgraded to Wordpress 2.7 and was immediately liking the new admin interface and all the other features. But I needed a way of tagging my pages as well as my blog entries. So I went and grabbed the <a href="http:&#47;&#47;wordpress.org&#47;extend&#47;plugins&#47;simple-tags&#47;">Simple Tags plugin<&#47;a> by Amaury Balmer. But for some reason it didn't seem to re-use my existing blog post tags, and its tagging interface (when editing a page) didn't seem to work as well as the blog post tagging interface that comes with Wordpress.

So I decided to write my own plugin (both as a learning experience and for fun!) which would let me tag pages ]]></description>
      <link>https://hiddentao.com/archives/2009/01/18/tag-your-wordpress-27-pages</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2009/01/18/tag-your-wordpress-27-pages</guid>
      <pubDate>Sun, 18 Jan 2009 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Redmine + SVN + MySQL 5 + Lighttpd 1.5 + FastCGI]]></title>
      <description><![CDATA[For about a year now I've been using <a href="http:&#47;&#47;trac.edgewall.org&#47;">Trac<&#47;a> as my software project management system. If you haven't heard of Trac then let me say that it's one of the few free open source project management systems that works really well.

Recently I've come across a different project management system - <a href="http:&#47;&#47;www.redmine.org&#47;">Redmine<&#47;a>. This is very similar to Trac in the way it works, except that it's built using Ruby on Rails. And notably, it has support for a larger variety of version control systems than Trac, and most importantly (for me), it has support for multiple projects (including sub-projects of projects) within a single, cohesive web interface.
]]></description>
      <link>https://hiddentao.com/archives/2008/12/06/redmine-svn-mysql-5-lighttpd-15</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2008/12/06/redmine-svn-mysql-5-lighttpd-15</guid>
      <pubDate>Sat, 06 Dec 2008 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[RandomHello plugin - 'Hello' in different languages]]></title>
      <description><![CDATA[I've always thought it was cool that Flickr would say "Hello" to you in a different language each time you logged in. So a couple of days ago I decided to code up a simple Wordpress plugin which would allow me (and hopefully others!) to do the same on any page or post. And the result is the [RandomHello](&#47;code&#47;wordpress-randomhello-plugin&#47; "RandomHello plugin page") plugin. The plugin is currently active on this site and you can see it in action on the [homepage](&#47;). 

]]></description>
      <link>https://hiddentao.com/archives/2008/08/09/randomhello-plugin-hello-in-different-languages</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2008/08/09/randomhello-plugin-hello-in-different-languages</guid>
      <pubDate>Sat, 09 Aug 2008 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Enabling SSL in Wordpress 2.6]]></title>
      <description><![CDATA[Yesterday I upgraded this site to [Wordpress 2.6](http:&#47;&#47;wordpress.org&#47;development&#47;2008&#47;07&#47;wordpress-26-tyner&#47;). All in all, everything went smoothly. But then I noticed that the *Admin-SSL* plug-in was no longer working, which meant that I couldn't force my admin sessions (i.e. ``wp-admin&#47;`` stuff) to be accessible only over SSL. An excerpt from the [plug-in's homepage](http:&#47;&#47;www.kerrins.co.uk&#47;blog&#47;admin-ssl&#47; "Admin-SSL homepage") confirms this:

> "Admin SSL 1.1 will not work with WordPress 2.6 due to the changes they have made, attempting to include their own SSL features.  I have tried them, and they only work with Private SSL, you cannot secure individual URLs, and the feature that allows you only to secure the login page does not work (for me, anyway).  So I'll have to update Admin SSL to work with the new WordPress - perhaps I should ask them to include my code in 2.7!"

]]></description>
      <link>https://hiddentao.com/archives/2008/07/28/enabling-ssl-in-wordpress-26</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2008/07/28/enabling-ssl-in-wordpress-26</guid>
      <pubDate>Mon, 28 Jul 2008 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[SMTP server not working for Yahoo UK accounts]]></title>
      <description><![CDATA[I've had a [Yahoo!](http:&#47;&#47;www.yahoo.com&#47;) **.co.uk** email address for donkeys years. And I've always been thankful for having POP access to this account so that I can work with it from within my [desktop mail client](http:&#47;&#47;www.mozilla.com&#47;thunderbird&#47;).

Although I check my email every day I don't have the need to send messages that often. But this week I tried to send one and it seemed that the SMTP server didn't like the password I was supplying it. After checking and double-checking my login credentials and still not getting it to work I fired up my browser and logged in at [http:&#47;&#47;mail.yahoo.com&#47;](http:&#47;&#47;mail.yahoo.com&#47;) and checked out the server settings for POP and SMTP access:

]]></description>
      <link>https://hiddentao.com/archives/2008/07/12/smtp-server-not-working-for-yahoo-uk-accounts</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2008/07/12/smtp-server-not-working-for-yahoo-uk-accounts</guid>
      <pubDate>Sat, 12 Jul 2008 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[BCS interview with Mindtree co-founder]]></title>
      <description><![CDATA[Here's a cool interview with Anjan Lahiri, one of the co-founders of [Mindtree](http:&#47;&#47;www.mindtree.com&#47;):

[http:&#47;&#47;www.bcs.org&#47;server.php?show=ConWebDoc.19390](http:&#47;&#47;www.bcs.org&#47;server.php?show=ConWebDoc.19390)

I particularly liked his response regarding the wisdom of offshoring&#47;outsourcing:

> The question is 'should enterprises look for the most efficient ways of producing and delivering their goods and services', not 'is offshoring or outsourcing a good thing?' 

]]></description>
      <link>https://hiddentao.com/archives/2008/07/05/bcs-interview-with-mindtree-co-founder</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2008/07/05/bcs-interview-with-mindtree-co-founder</guid>
      <pubDate>Sat, 05 Jul 2008 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Now running Wordpress 2.5]]></title>
      <description><![CDATA[Now running Wordpress 2.5]]></description>
      <link>https://hiddentao.com/archives/2008/03/30/now-running-wordpress-25</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2008/03/30/now-running-wordpress-25</guid>
      <pubDate>Sun, 30 Mar 2008 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Why the Vodafone flat-rate data tariff is lacking]]></title>
      <description><![CDATA[Most households in the UK that are connected to the internet are have got a broadband connection. And the vast majority (if not all) broadband packages are charged at a fixed monthly rate - a flat-rate tariff. So UK consumers are quite used to the idea of paying a fixed monthly amount for copious amounts of broadband bandwidth (we're talking Gigabytes of data).

It is only in the last 2 years or so that mobile network operators have truly realised this and started to adjust their internet&#47;data tariffs to bill in a similar way to home broadband packages. ]]></description>
      <link>https://hiddentao.com/archives/2008/03/27/why-the-vodafone-flat-rate-data-tariff-is-no-good</link>
      <guid isPermaLink="false">https://hiddentao.com/archives/2008/03/27/why-the-vodafone-flat-rate-data-tariff-is-no-good</guid>
      <pubDate>Thu, 27 Mar 2008 00:00:00 GMT</pubDate>
    </item>
  </channel>
</rss>
