Last week, I attended Into the Future(Part - II): Transmogrified Reality
Meetup in San Jose organized by @techinmotion.
Even though I had collaborated on a project that involved Augmented Reality, I
would consider myself to be a novice in this fast evolving technological
landscape that is attracting a lot of attention. The intent of this post is to
help explain Reality Technologies, the vendors, and the use-cases that they are
addressing.
Virtual Reality
As the name suggests, Virtual Reality provides an immersive experience in a
make-believe or fictional or fantasy world that is completely different from
the real world. It is important to understand that the immersion is achieved by
deceiving the user’s senses of sight and sound to believe that they are in a
different setting/environment. These experiences are achieved through a
head-mounted display(HMD) along with a tethered PC with an extremely powerful
graphics cards or GPUs.
Most of the Virtual Reality headsets resemble ski goggles and use a pair of screens
displaying two images side by side, one for each eye. The 3D effect is created
by placing a set of lenses on top of those screens. The embedded sensors pickup
the user’s head movement and the image is adjusted accordingly.
Here are some of the VR platforms available in the market:
Facebook’s Oculus Rift
PIMAX 4K UHD
HTC Vive
Currently, the use-cases that are gaining traction with Virtual Reality include
rich interactive video games, visual learning experience, and training. Lack of
content and compelling reasons/use-cases for one to be glued to a Virtual Reality
headset/goggles for an extended period of time during a day are the reasons why
some people think that Virtual Reality is for a niche audience and may not
materialize into a huge market. However, with significant investments tied into
this technology from some of the major companies along with VR experience such
as Capturing Everest
becoming available, I would think that Virtual Reality is going to be around for
a while.
Since the number of Virtual Reality platforms are increasing, it is also becoming a
challenge for application/game developers to port their applications and games to
each vendors’ APIs as the VR device can only run apps that been ported to its SDK.
To address this fragmentation, a cross-platform architecture called
OpenXR is being developed to enable applications
and games to be written once to run on any VR platform.
Augmented Reality
Unlike Virtual Reality, in Augmented Reality we are dealing with the real world
that has been modified or enhanced with contextual information by superimposing
graphics over a view of the real world. In Augmented Reality, the user’s senses
will not be deceived but continue to function in a real, albeit a bit more richer
and interactive surrounding. For example, in a smartphone’s camera held against
a window, you can see planes headed in the direction but are not visible to the
naked eye at that point in time. Or, you can look at the temperature and
the weather data on your bathroom mirror.
Consumers can get the taste of Augmented Reality technology using either
smartphone apps or untethered transparent glasses such as Google Glass. Here
is a youtube video for Google Glass and it’s features:
Some of the popular use-cases that feature Augmented Reality are:
Pokemon Go
IKEA Concept Kitchen
IKEA Furniture
Mixed Reality
Mixed Reality uses the real world as the canvas and overlays it with elements from
virtual world to create new environments made up of physical and virtual objects
that can interact. Mixed Reality keeps the real world interactivity aspect of
Augmented Reality and merges it with the fantasy aspect of Virtual Reality. The
fact that the objects from the real world and the objects from the virtual world
can react to each other in real time makes Mixed Reality very compelling.
With the HoloLens initiative, Microsoft
is betting big on holographic computing as it opens up Windows Holographic
operating system to VR headset makers to push it’s vision of Mixed Reality where
VR headsets interact with the HoloLens to create holograms in the real world.
So, what is is a HoloLens? In simple terms, it is a special headset that has the
ability to let a user interact with holograms in a real world space such as a
living room or a board room. Unlike the VR headsets which are tethered, these
headsets are untethered and can communicate wirelessly with a PC and use
high-definition lenses for 3D display and spatial sound technology to create an
immersive yet interactive holographic experience.
Microsoft has put out some really exciting videos showcasing HoloLens like the
one below that includes holoportation as one can interact with holograms of
family members, who are in a different part of the world, in one’s living room:
Or, play Minecraft on a table:
Windows 10 will include APIs for developers to create holograms to make holographic
experiences for the HoloLens.
Microsoft is working with NASA, car manufacturers, school districts, construction
companies, gaming companies, etc. to help increase the adoption of HoloLens
across various segments of the economy.
Transmogrified Reality
I hadn’t been exposed to this term till I signed up for the aforementioned Meetup.
While Virtual Reality and other forms are exciting, they require the users to
strap on headsets for long periods of time which can be fraught with risks. Google’s,
Game Design Chief, Noah Falstein describes Transmogrified Reality as the most
realistic form of virtual and augmented reality conceivable through our current
and emerging technologies. Based on the demos in Noahs’ Game Developer Conference
2015 presentation, one can surmise that consumers will be experiencing
Transmogrified Reality via Google’s Project Tango tablet. With real time 3D-sensing
abilities and inexpensive head mounts, Tango will be able to capture it’s
vicinity or the surrounding area and incorporate elements of virtual reality
into a player’s vision while allowing the player move freely around any
environment in the real world.
Here is Noah’s presentation where he talks about Transmogrified Reality:
Tango
In conclusion, VR/AR/MR/TR are all incredibly exciting technologies that have
tremendous potential in not just gaming/entertainment but various other industries
such as automotive, healthcare, education, space, tourism, marketing, retail etc.
When I was asked to create a blog site, I started researching the popular blogging platforms. However, I was getting overwhelmed while trying to understand the pros/cons of paid vs free platforms and the strategies of hosted vs self-hosted and the issues with each of them. That is when I came across Hugo in a comment section of one of the blogs that I was reading. And, according to the comment, the only thing that was needed to create a site using Hugo is a Github account.
Since I already have a Github account, the comment appealed to the developer in me and I decided to investigate Hugo. As part of my investigation, when I learnt that Hugo is not only open source and completely free but the generated site is also fast(because of static assets) and served directly off of Github using https://<username>.github.io URL, I was sold! But, when I learnt that Hugo allows content to be created using Markdown, I was blown away!
Having decided to create a static HTML site running on Github using Hugo, I wasn’t sure how successful my efforts would be as I didn’t know Golang and the thought of handcrafting HTML pages and CSS style classes wasn’t too appealing. Then, I stumbled upon Nate Finch’s excellent posts at nfp.io to make me a true believer in Hugo. Using the layouts and the theme templates from Nate’s Github repo as the starting point, I was able to personalize them to create the code for my static HTML site. Though I have a long ways to go to automate things using Wercker for CI and other hooks, I think I am in much better shape as I got the basic stuff working.
This blog includes steps that one can take to create a static HTML site running on Github using Hugo. To be able to create a static HTML site on Github, you must sign-up/register with Github and get a username. In the remainder of this post, treat <username> as a placeholder for your Github username.
Install Hugo
Based on your operating system, you can follow these instructions to install Hugo on your machine.
Create Github Repositories
Sign into Github and create the following two public repositories and select the checkbox to initialize the repository with a README:
<username>-hugo: This repository will contain the source code for your site such as templates, etc.
<username>.github.io: Name of this repository must follow the convention. This repo will contain the actual artifacts such as HTML, CSS, etc. that will be served up when it is accessed using https://<username>.github.io URL.
Register Site with Disgus
Hugo has inbuilt support for Disgus to manage comments on any of the content that is served from your generated static site. While registering your site with Disgus, you can specify the site name as either <username>.github.io or your own vanity domain name to create a Disgus shortname. Then, all you need to do is specify the shortname in Hugo’s config.toml using disgusShortname parameter.
Setup Working Environment
Once the repositories are created, here are the steps for creating a working environment that would allow you to create content:
Create Hugo Site
$ cd ~; mkdir Workdir; cd Workdir
$ hugo new site <username>-hugo
To generate the static HTML content, you will have to execute hugo command from <username>-hugo folder. By default, hugo generates the static artifacts in a sub-folder named public. These artifacts will have to merged/pushed to the https://github.com/<username>/<username>.github.io repository. To make this a bit easier, we can create a symbolic link as shown below:
$ cd ~/Workdir
$ git clone https://github.com/<username>/<username>.github.io.git
$ cd <username>-hugo
$ ln -s ../<username>.github.io public
$ echo public > .gitignore
Copy Nate’s Templates
To get started, you can copy Nate’s templates as shown below:
You can update the minimal ~/Workdir/<username>-hugo/config.toml that Hugo generated. For inspiration, you can look at Nate’s /tmp/npf/config.toml. You should certainly update the following site attributes and parameters in:
baseURL
title
description
disgusShortname
copyright
URLs to social media sites using your own details
Update Other Files
Here are some of the other files that you need to update:
~/Workdir/<username>-hugo/README.md: Update the links and the repository names.
~/Workdir/<username>-hugo/static/README.md: This README.md will get copied to the public folder when the site is generated and will end up in the content root of your generated site. Update the links using your site specific details.
~/Workdir/<username>-hugo/static/CNAME: If you have a vanity domain name registered with a DNS provider, update this file with your domain name. This file also gets copied to the public folder when the site is generated and will end up in the content root of your generated site. If you do not have a domain name registered and are planning on using https://<username>.github.io to server your content, then you should delete this file.
~/Workdir/<username>-hugo/themes/hyde/layouts/chrome/sidebar.html: Update the links for social networking sites with your information. Also, update the copyright and other boilerplate information.
~/Workdir/<username>-hugo/themes/hyde/layouts/chrome/head.html: Replace reference to the obsoleted API RSSlink with RSSLink to avoid seeing an error while building the static site.
Merge Changes
Once the scaffolding is created, you can push it to https://github.com/<username>/<username>-hugo repository as shown below:
At this point, your environment is ready and you can create content.
Add Hello World Blog
Now that you environment is all set, you can add the first blog entry using the following command:
$ cd ~/Workdir/<username>-hugo
$ hugo new blog/hello-world.md
$ cd content/blog
Edit hello-world.md by changing draft = true to draft = false. Also, update the title by making it more user friendly and use markdown syntax to add a title and text as shown below:
+++
type = "post"
date = "2017-04-07T19:32:12-07:00"
title = "Hello World using Hugo"
draft = false
+++
Hello World using Hugo
======================
My first flog with Hugo!
Preview Content
Using Hugo’s inbuilt server, you can preview the content using the following command:
$ cd ~/Workdir/<username>-hugo
$ hugo server --buildDrafts
Then, you can point your browser to http://localhost:1313 to preview the content. You can click on the Posts link in the side-nav to look at the list view of your posts.
Generate Content
Once satisfied, the content can be generated using the following commands:
$ cd ~/Workdir/<username>-hugo
$ hugo
This will result in the static HTML artifacts to be generated in the public sub-folder that is a symbolic-link to ../<username>.github.io folder.
Merge Changes
Note that the hello-world.md will be merged/pushed to https://github.com/<username>/<username>-hugo repository and the generated content in the public sub-folder will be merged/pushed to https://github.com/<username>/<username>.github.io repository.
Here are the steps to merge hello-world.md to https://github.com/<username>/<username>-hugo repository:
Here are the steps to merge generated artifacts to https://github.com/<username>/<username>.github.io repository:
$ cd ~/Workdir/<username>-hugo/public
$ git add .
$ git commit -am "First checkin with Hello World blog"
$ git push -u origin master
Load https://<username>.github.io in your browser and checkout your shiny little site! If you want to use a vanity domain name instead of https://<username>.github.io, then you need to register with a DNS provider and follow these instructions to add your custom domain to your Github site.
From this point on, whenever you need to add a new post, it’s just lather, rinse, and repeat the aforementioned steps outlined for adding the Hello World blog!