I just wrote on LinkedIn's Pulse about How I got my dream job: My wearables journey at Evernote
A generation inspired.
In it the protagonist navigates through cyberspace.
If you don’t know what cyberspace means, you are not alone. At the time that William Gibson wrote Neuromancer, nobody else knew what it meant either. He invented the term.
Cyberspace in that book was a virtual reality. An immersive computer generated world which when you are in it, feels just like the real thing, beamed directly to the brain via a neural interface.
Our imaginations were fired. We wanted it so badly. Looking back, I’m not even sure why, but man was it cool.
There was no way anything like it was possible then. A personal computer could barely output color, let alone create that kind of world.
Time passed, and by the 1990s my generation still hadn't forgotten the dream of Neuromancer. Computers and computer graphics were getting more and more powerful.
You even started to see video arcades with games with virtual reality headsets. I still remember the day I tried one on, sickly smell of cigarette smoke, music from the arcade games pouring in my ears, almost as loud as the pounding of my heart. This was it, I was going to experience Virtual Reality. I placed the headset on my head, and looked around as it projected images into my eyes.
The disappointment was devastating. Not only did it feel like I was wearing a dustbin on my head, it was so clumsy and heavy, but the experience was terrible too. Clunky objects drawn as outlines, which struggled to be re-drawn as I over my head around.
The virtual reality dreams of a generation were dashed on those arcades, as I and many others consigned the idea of virtual reality to the dustbin.
A new hope
Time passed. Whole new business sprang up, such as Amazon. Not only did new business spring up, but new ways of doing business sprang up too.
In the old days if you had an idea for a hardware product, such as some kind of electronic gadget you’d need to go to a big company to get it funded. Endless bureaucracy and meetings. You’d likely have to give up the rights to your product, and compromise your soul in order to get something like your idea to market.
But the internet and the world wide web changed that. Now, when someone has an idea for something, such as a new watch, they can go to sites such as Kickstarter, and pitch their idea not to a committee in a bureaucracy, but instead they can pitch their idea to the world. They can describe what they want to make, what their experience is in the field, what it will cost to bring it to the market, and they can let thousands of individuals invest in their idea, in return for a sample of the product if it ever gets made.
The Pebble watch I’m wearing right now started on Kickstarter. Their goal was to raise 100,000 dollars to bring it to market. They didn’t raise 100,000 dollars. They raised 10 million dollars.
So that's one thing that happened”": decentralized “crowd funding” as it is called, a new way of bringing products to market.
The other thing that happened is mobile phones: Incredibly powerful miniature computers that we all carry in our pockets. Because they are being made in massive quantities the costs of the components that go into them has dropped massively too. And those components are interesting.
These phones have small, but incredibly high resolution screens. They have a vast array of sensors in them, such as gyroscopes so that they can tell when they have been turned, accelerometers to tell when they are moved, and magnetometers to tell which direction they are facing.
Can you imagine what would happen if you took those screens, attached them to some kind of a helmet, like ski goggles, included the sensors from phones to accurately track your head position, and hooked them up to a computer to generate slightly different images on each screen? You’d have a virtual reality system.
As it happens, someone in the states did have that idea. Someone that knew enough about virtual reality headsets to put together a working prototype.
If only they had some way to bring their idea to market. Of course they did, and the Oculus Rift Kickstarter was a massive success.
Those that have tried them on have been astounded by the results. It creates a truly immersive virtual reality experience.
Anyone who was wondering what value virtual reality can possibly have beyond games need only watch a 90 year old women trying them on, screaming with joy, walking around an Italian villa, leaves blowing in the wind, butterflies flittering in the air.
There are plenty of people who for one reason or another are unable to travel, or even to move, yet they can experience the world through virtual realty.
School kids can watch the birth of the universe, or chemical reactions happening, and step into the reaction to see it from different perspectives.
This technology is still young. The Oculus Rift is still not publicly available. Its only available to software developers who wish to create for it. But its coming.
I’ve talked about the ski goggles, but what about the sick bag? Well all is not perfect with the Oculus Rift. Many people report nausea after trying it on for a while. Perhaps its the eye strain, or perhaps the image still isn’t moving quite fast enough and the body senses that.
I’m sure that they will lick the nausea, and soon, very soon indeed, you too will be visiting new parts of our world, or even other worlds, in virtual realty.
I was at the speaker’s dinner after speaking at the excellent Reaktor conference in Helsinki, chatting about our favorite authors, and rather than just sending an email to the people that were there, I thought I’d instead write a blog post.
Good authors are hard to find.
These are books I’ve enjoyed over the last couple of years, culled from my Audible and Kindle accounts, skipping over many many “meh” books. Bing links brought to you courtesy of Gmail.
- Where the Red Fern Grows by Wilson Rawls, about a young boy growing up in the Ozarks and his relationship with his dogs, the land and hunting: A great book for kids 10+, but I loved it too. If you are not crying at the end then you have no soul.
- Masters Of Doom by David Kushner, about the people behind Doom. Not so much about technology, a lot about personalities.
- Life Itself by Roger Ebert: Recommended on Macbreak Weekly by Andy Ihnatko: so much more than than a movie reviewer – although the Venice café he describes is likely long gone, its shadow lives on in my mind – a lovely autobiography
- This Immortal by Roger Zelazny: I read it long ago, and it isn’t as good as Lord of Light, but he conjures a believable, flawed, real world.
- 14 by Peter Clines: very well written, a little loose at the end, but a great read.
- The Dangerous Animals Club by Stephen Tobolowsky: very very funny.
- Benjamin Franklin by Walter Isaacson: I’d previously read his autobiography – this is why biographies can do so much more
- My Side of the Mountain by Jean Craighead George: as with Where the Red Fern Grows, a book you must read to your children when they are 10 or so or older
- Nerd do Well by Simon Pegg: his auto-biography interspersed with wish-fulfillment fiction at its best
- Stories I only tell my Friends, by Rob Lowe: a raw, enjoyable, autobiography.
- Patrick Rothfuss’ Kingkiller Chronicles. If you’ve not consumed these, do so, now.
- Flowers for Algernon by Daniel Keyes: an older book that I’d somehow not read but should have. Poignant and worth reading.
- The Hunger Games books by Suzanne Collins
- Matterhorn: A Novel of the Vietnam War by Karl Marlantes: I’ve never lived that kind of life, and hope never to do so, but it was an experience that I’ll never forget
- The Speed of Dark by Elizabeth Moon: beautifully written, not sure how I feel about the ending, and that is as it should be.
- Daemon and Freedom ™ by Daniel Suarez: characterization: 6/10, but ideas: 12/10
- The Windup Girl by Paolo Bacigalupi: characterization 10/10, ideas: 10/10
- Way Station by Clifford D Simak: another re-read but classic.
- Red Country by Joe Abercrombie: a great story in its own right, but also nice to see what happened to an old “friend”
- Enders Game by Orson Scott Card: I know of the controversy about his beliefs, but this book stands by itself. A re-read, but I still enjoyed it
- Espedair Street by Iain Banks: for me the best of his non sci-fi books.
- The Hydrogen Sonata by Iain M Banks: read before his announcement of his imminent death and thoroughly enjoyed it
- The Dog Stars by Peter Heller: a really really really well written book. It is post-apocalypse, but its not just that. Read this.
- Remnant Population by Elizabeth Moon: didn’t grab me as much as the Speed of Dark, but far better than almost all sci-fi;
- The Passage and The Twelve by Justin Cronin: more post-apocalypse very well written work
- How to be Black by Thurston Baratunde: uncomfortable reading at times, which says more about me than Thurston, but an insight into his life, what his mother did for him, what he did for himself, and how we should treat others, black or white.
- Ready Player One by Ernest Cline: a walk through both the future and the past
- Room by Emma Donoghue: recommended by Scott Hanselmann on one of his podcasts. Didn’t know what I was in for, but I am so glad I read this. Don’t be put off by the subject matter.
Amazon just released the first version of their Windows app to sync Amazon Cloud Drive. It’s very much a first version, with no ability to pause/resume sync, sync selective folders, or even (as far as I can see) a way of changing the default sync folder.
It chose the smallest drive on my machine (of course), but I found a way to change it.
Do this entirely at your own risk, and if you don’t know what this means, then don’t do it. You can use regedit to change the sync folder’s location, under "HKEY_CURRENT_USER\Software\Amazon\AmazonCloudDrive\SyncRoot" change “SyncRoot” to a different folder.
Works for me, but no guarantees.
I have an HTC Incredible S, and it’s a very nice phone indeed.
I recently upgraded Android 2.3.3 (Gingerbread), and discovered that the Wifi connection was dropping in places at home where it had a perfectly usable (albeit weak) Wifi signal. Places where previously it had worked.
I fiddled with my Wifi base station, repositioning it, to no avail.
Finally I googled and found that HTC had decided to switch from Wifi to data if the Wifi signal dropped below a certain strength (88dbm). How nice of them to decide on my behalf that I wanted to switch from my (free) Wifi to my (expensive) data plan, even though I still had a perfectly usable (and free) Wifi connection – one that worked perfectly well in the previous OS version.
This is annoying for a couple of reasons. Firstly I can now run up horrendous data plan charges even though I’m within range of my Wifi. Secondly, I have services I run on my local Wifi (IP Cams, remote control software) that can no longer connect when I’m off my Wifi.
I’ve been a big HTC fan for a long time, and have gone through many of their ‘phones. This is a big disappointment for me – it stinks of paternalism/arrogance – deciding what is best for me without giving me a chance to override it. I am sure that it isn’t arrogance/paternalism – I am sure it made perfectly good engineering sense, perhaps because less battery will be consumed on data than on Wifi when on a weak link, but give me a choice.
I contacted HTC support and was told that yes, this behavior is new and that no, there was no way to downgrade – the suggestion was to switch off the Data connection when I was at home. Right, as if I will remember to do that.
I’ve ended up installing Tasker, and setting up a rule to switch off my Data connection when within range of my home Wifi. Not ideal, but it works.
Thrift is a software framework for scalable cross-language services development. It combines a software stack with a code generation engine to build services that work efficiently and seamlessly between C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk, and OCaml. http://thrift.apache.org/
There are two reasons for this post:
- to float some ideas for C#changes to the Thrift development community.
- to remind myself in the future what I need to do to download, modify and build the Windows Thrift compiler, and
The idea is to maintain backwards compatibility, whilst at the same time generating Silverlight (and consequently Windows Phone 7) compatible proxies.
Downloading and building the thrift compiler
To try out these changes on Windows, first install the latest version of Cygwin from http://cygwin.com/, then install the various packages as described here: http://wiki.apache.org/thrift/ThriftInstallationWin32
You’ll also need to install Subversion.
Next pop open the Cygwin shell, and fetch the latest source, as described here: http://thrift.apache.org/download/
Finally, build the source you downloaded, again as described here:
In my environment I build using:
And then I run the new thrift compiler:
Code Generator changes
The code generator (t_cpp_generator.cpp) changes involve generating two additional methods for each “standard” method: a Begin_… method and an End_… method.
Whereas previously there might just have been a method such as this:
Now, two additional methods get generated:
The two methods allow for the asynchronous invocation of methods, using the standard .NET asynchronous invocation pattern.
In addition, the generated standard method (“getSyncState”) method is modified when building for Silverlight, to make use of the Begin… and End… methods:
As you can see, when not running Silverlight the standard code path is invoked, but when running Silverlight the asynchronous methods are invoked (the End… method blocks the current thread until the Begin… method completes). This is not something you should be doing on the UI thread.
The generated Begin… and End… methods are pretty thin:
Note the call to EndFlush above – this is one of the changes made to the runtime. The other is invoked by the generated send_getSyncState method:
The generated recv_getSyncState() has not changed.
The changes in the generated code boil down to asynchronous invocations at the transport layer (BeginFlush and EndFlush).
There are also changes to #ifdef out the Serializable attribute for generated structs, since this is not supported by Silverlight.
There are minor tweaks required to THashSet, TProtocol and TBinaryProtocol because Silverlight does not support the full .NET framework API.
The main change is to TTransport.cs to introduce the BeginFlush and EndFlush methods shown above, and then to THttpClient.cs to actually implement these methods.
The existing Flush method is #ifdefed out when building using Silverlight, because it makes synchronous calls which are not supported by Silverlight.
Instead, the BeginFlush builds a request and then invokes the HttpWebRequest.BeginGetRequestStream method, passing a local GetRequestStreamCallback method as the callback.
The GetRequestStreamCallback method is invoked once the runtime has the request stream. It then writes out the data and invokes the HttpWebRequest.BeginGetResponse method, passing a local GetResponseCallback method as callback.
The GetResponseCallback notifies the original caller (in the generated code) that the request has now completed.
The EndFlush method waits for the corresponding BeginFlush method to complete, and if there was an exception thrown at any point, it raises the corresponding exception.
All the documentation says to press two-fingers and click, but actually you must press down three fingers and then click to right-click when running Vista, Boot Camped on the new MacBook Pros (late 2008).
A couple of days ago I decided to move this blog from being hosted at WordPress,com, to an account I have at Webhost4life. You can add new domains to your account for only US$15 a year.
When I set the blog up at WordPress.com, I ordered my custom domain (damianblog.com) and that is what I have been using.
Export your WordPress.com hosted blog
The first thing I did was to export my blog from my WordPress.com account, by logging in to WordPress.com administration page for Damianblog, clicking on Manage, and then clicking on Export:
This generated an XML file which I saved on my local hard disk.
Installing WordPress on webhost4life
Webhost4life offer a an automated installation of WordPress using the "Php Free Plug-ins" item on the "Site Admin" tab of their control panel. I first tried using this, however it currently installs version 2.0.3, which will not import the file I'd just exported from WordPress.com.
After a little searching I came across this excellent page, which explains in detail what you need to do to set up the latest version of WordPress.
It worked well for me, except for step 18 (giving NETWORK access) - I found I had to give access to IUSER_DEDI... and also IUSER_<webhost4life account name>.
I also created the zip at step 14 as 'damianblog.zip' and copied that to my root directory and then unzipped it, so that WordPress was now installed under a 'damianblog' directory under my account root directory.
Setting up the damianblog DNS so that it points to Webhost4life
In the webhost4life control panel I went to the "Domain Name" item on the "Domains" tab in the control panel and added damianblog.com to map to the damianblog directory to which I'd installed WordPress.
I paid my US$15, and I was given the name of two domain servers that I could now use to resolve damianblog.com.
Configuring your domain's DNS servers to point to the webhost4life servers
In the WordPress.com admin site I clicked on Upgrades and then on Domains (to the right of "Upgrades" and "Gifts") and saved the Customer Number shown at the bottom of the page, and then clicked on "Manage Your Domains" at the very bottom of the page.
This took me to a new page on securepaynet.net on which I entered my Customer Number that I just saved, and my password. I clicked on damianblog.com and then clicked on "Nameservers" (the fourth tab), selected "Custom nameservers", and entered the name of the two name servers I'd been given when I set up the damianblog domain name in the Webhost4life control panel.
An hour or so later, when I pinged damianblog.com it returned my webhost4life IP address.
I went into my new WordPress admin page on webhost4life, and clicked on Settings (on the right-hand part of the page), and made sure the WordPress address (URL) was http://damianblog.com
I clicked on the Import link in the admin page, and imported the XML file I'd exported from the old blog hosted at WordPress.com
I checked, and sure enough when I went to http://damianblog.com all was well. I could relax.
As an afterthought I tried clicking on one of the links on the web that pointed to my blog. It didn't work. Aggh.
It turns out that the default Permalink URL in my new blog was of the form
http://damianblog.com/?p=123, whereas all my old postings hosted on WordPress.com were of the form http://damianblog.com/2007/02/25/ajax-screencast/
I went to the Permalink section but none of the common settings were in the form I wanted (they all wanted to add 'index.php' to the URL). I could configure a custom structure to be the way I wanted, but when you clicked on URLs the page was not found:
The solution was to create a small PHP file which handled the "URL Not Found" error and remapped the page as described here. Just be careful when copying the PHP code from the web page because some of the single quotes are not the standard quotes that they should be.
Finally: the Simpla Theme
The new WordPress installation did not come with the theme I've chosen: Simpla. Installing it was pretty easy, I just unzipped the theme from http://ifelse.co.uk/simpla into the /wp-content/themes/ directory.
Unfortunately none of my widgets showed on the right hand side. I had to make a couple of small modifications to get that resolved.
Now it all seems to be working properly and I can customize my installation as I wish.
Z-Wave is a home automation technology which uses a mesh network to allow devices to talk to each other.
Some devices, such as infrared motion sensors can run for years off of batteries, since their power requirements are so low.
Other devices that are wired-in (such as light switches) act as relays between devices, thus forming the mesh.
I've got a few of these devices set up now, and have ordered a load more to fully automate my home. I'm going to be talking about the purchase experience, installation, configuration, and controlling them from software.
I didn't want to "pollute" this blog with a bunch of Z-Wave information, so I've just started a new blog at http://www.thezwave.com/
I'll be posting there as my Z-Wave experience evolves.