tag:blogger.com,1999:blog-13098464658328394042024-02-19T18:22:35.964-08:00nsquared blogDr. Neilhttp://www.blogger.com/profile/11504145045360157799noreply@blogger.comBlogger320125tag:blogger.com,1999:blog-1309846465832839404.post-67923385572922175842019-01-08T17:09:00.000-08:002019-01-08T17:09:15.205-08:00Containers, Docker, and Kubernetes In the last couple
of months I have been back in training mode and helping people understand more
about containers and how to manage them. The focus has been on Azure's container
offerings, although a lot of the work is very platform agnostic, and that is
really the point of containers.<br />
<br />
<div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
For those that have
never used Azure before, or need a refresher on some of the great things you
can do, in both, the Azure Portal, and from the command line, here are couple of
short modules in the new Microsoft Learn site:</div>
<br />
<a href="https://docs.microsoft.com/learn/modules/tour-azure-services-and-features/">https://docs.microsoft.com/learn/modules/tour-azure-services-and-features/</a><br />
<br />
<div style="font-family: Calibri; font-size: 11.0pt; margin-bottom: 0pt; margin-top: 10pt;">
<a href="https://docs.microsoft.com/learn/modules/control-azure-services-with-cli">https://docs.microsoft.com/learn/modules/control-azure-services-with-cli</a></div>
<br />
<div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
I encourage everyone
that uses Azure to learn how to use the command line tools. For the longest
time I avoided the CLI as I like the way the Portal allows you to discover new
features through exploration, which has always been the advantage of a graphical
user interface over the command line. Yet the strength of learning the command
line tools is how fast you can get tasks accomplished as well as the ability to
automate tasks with scripts.</div>
Microsoft Learn has
a module to learn about automating Azure tasks here <br />
<br />
<a href="https://docs.microsoft.com/learn/modules/automate-azure-tasks-with-powershell/">https://docs.microsoft.com/learn/modules/automate-azure-tasks-with-powershell/</a><br />
<br />
<div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
In order to
understand the value of containers I believe it is important to know how we (as
an industry) got to this point. I find that understanding the history of
technology helps to explain the current situation. (It also makes it easier to
extrapolate out potential futures.) From the perspective of server
technologies, and hosting applications with an intention to scale them,
virtualization, and virtual machines have been a standard mechanism for the
longest time. If you have never used a VM (virtual machine) you can get some
perspective from following this lab and setting up a VM.</div>
<br />
<a href="https://docs.microsoft.com/en-us/learn/modules/welcome-to-azure/"><span lang="en-US" style="font-family: "calibri light";">https://docs.microsoft.com/en-us/learn/modules/welcome-to-azure/</span></a><br />
<br />
<div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
A Virtual Machine
abstracts the physical hardware upon which it runs. When you deploy an
application to a VM you should not care what the actual hardware is. Often a
physical server can be running multiple virtual machines, and this provides a
higher level of potential resource utilization. Considering that data canters
are starting to become a noticeable consumer of world power supplies, it should
be obvious that the more energy efficient we can be with our servers the better
we are conserving our global resources. Yes, virtualization might be
economically efficient, and it could be considered ecological more efficient
than running everything on physical hardware. A virtual machine will host an
operating system, and the software you deploy will need to run on that operating system.<span style="mso-spacerun: yes;"> </span>Virtual Machine technology is
what enables most of the worlds big Cloud providers to work. For a high level
understanding of how Azure works this video provides a good overview</div>
<br />
<div lang="en-US" style="color: black; font-family: Calibri; font-size: 12.0pt; margin: 0in;">
<a href="https://www.microsoft.com/en-us/videoplayer/embed/RWlzQ6">https://www.microsoft.com/en-us/videoplayer/embed/RWlzQ6</a></div>
<br />
<div lang="en-US" style="color: black; font-family: Calibri; font-size: 12.0pt; margin: 0in;">
A container provides a host to run a software application that
abstracts another level of concern away from the deployment. While Virtual
Machines provide an abstraction from the physical hardware, containers provide
an abstraction from the operating system.</div>
<br />
<div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
By being abstracted
from the OS (operating system), there is no longer a need to be concerned about
the setup of the OS, how it hosts your application, where it has your
application installed, and numerous other issues. This enables a more agile
approach to be taken when deploying applications. An application running in a
container can be easily moved from one location to another, simply move the
container and everything you need will come with it. </div>
<br />
<div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
Containers also
enable an even greater level of resource (energy) efficiency. When an
application is hosted in a virtual machine, then you scale the application by
creating copies of that virtual machine (scale out), or adding more computer
resources to the virtual machine (scale up). The virtual machine is the unit of
scaling. With a container, the unit of scaling is closer to the application,
you scale out your application by creating more instances of your container. As
a virtual machine can host multiple container instances you are going to be
getting more from the potential resources than if you only have the application
running once per virtual machine.</div>
<br />
<div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
Containers are not
limited to specific types of application, or programming language either. Most
common languages and types of app can be containerized. A container can run on
a local machine, your laptop, a big data canter server, or an IOT device. This
means you can build and test containers locally and then deploy them to scale
with the confidence they will work the same way.</div>
<br />
<div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
One of the most
popular container runtimes is called Docker. Docker provides container
compatibility between Mac, Windows, and Linux machines. Using Docker, an
application can be deployed to a local container, tested and then the container
image can be deployed to scale by creating multiple instances of that container
image on devices anywhere you desire (as long as it supports Docker). </div>
<br />
<div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
<a href="https://www.docker.com/">https://www.docker.com/</a></div>
<div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
<br /></div>
<div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
When you create a
container (or Docker) image you are defining the contents of the container, You
might consider it a template definition of what the container will be running.
If you are a programmer then think about a container image as a class definition.
A container instance is a running version of the container image. Using the
programming metaphor again, the instance would be an object instantiated from
the image (class). </div>
<br />
<div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
In order to manage
your containers and make best use<span style="mso-spacerun: yes;"> </span>of the
resources you will want to perform tasks such as scheduling, monitoring,
scaling, connectivity (networking), upgrades, and failure management. This is
where Kubernetes comes into play. Kubernetes is an orchestration tools for
containers. This means Docker and Kubernetes work together to deliver a
great container experience.</div>
To understand the
basics of Containers and Kubernetes watch this video on Channel 9.<br />
<br />
<div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
<a href="https://channel9.msdn.com/Events/Connect/Microsoft-Connect--2018/T110">https://channel9.msdn.com/Events/Connect/Microsoft-Connect--2018/T110</a></div>
<div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
<br /></div>
<div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
If you want to setup
Kubernetes on a machine (or virtual machine) there is a fair amount of work
that needs to be done, you need to set up routing tables, storage to support
your applications, etc… The great thing about using Kubernetes in Azure is the setup is all managed for you. </div>
<br />
<div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
There is a tutorial that you can follow to get a simple website running in a Docker
container and then use AKS (Azure Kubernetes Service) to deploy and orchestrate
the containers. It should take you around an hour to complete and should help
you to better understand how Docker and Kubernetes work together using Azure
services.</div>
<br />
<div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
<a href="https://docs.microsoft.com/azure/aks/tutorial-kubernetes-prepare-app">https://docs.microsoft.com/azure/aks/tutorial-kubernetes-prepare-app</a></div>
<div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
<br /></div>
<div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
If you do not need
the orchestration provided by Kubernetes and simply want a container running
your app in the Cloud the Azure Container Instances (ACI) simplifies the setup
process even further. You can think of the ACI service as providing 'serverless'
containers. You do not need to care about managing servers at all. This
tutorial will help you understand how to use Azure Container Instances</div>
<br />
<div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
<a href="https://docs.microsoft.com/azure/container-instances/container-instances-tutorial-prepare-app">https://docs.microsoft.com/azure/container-instances/container-instances-tutorial-prepare-app</a></div>
<br />
<div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
If you want to find
out more about how to get the most from containers in your organization <a href="mailto:info@nsquaredsolutions.com" target="_blank">get in touch</a> and we can organize a workshop or training session for you and your team.</div>
<b></b><i></i><u></u><sub></sub><sup></sup><strike></strike>Dr. Neilhttp://www.blogger.com/profile/11504145045360157799noreply@blogger.com0tag:blogger.com,1999:blog-1309846465832839404.post-47177549033877320712018-08-13T18:40:00.000-07:002018-08-13T18:50:14.236-07:00Challenges in today’s meeting room<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
Over the last few weeks, we have written a series of articles focusing on the challenges that people deal with in the meeting room every day. These challenges are some of the things we are solving, as we progress with our mission to create the Intelligent Meeting Room.
<br /><br />
Contact us today to find out how we can help you create an Intelligent Meeting Room at <a href="mailto:info@nsquaredsolutions.com" style="color: #a0c73f; font-weight: bold; text-decoration: none;">info@nsquaredsolutions.com</a>
<br /><br />
</span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3chqJY8CqdensiNJPyf6N6psSYOWSlknmgYmq7UcER-iLq4aHiEK4_bvywpqbBVerqJZSXJVerRcVw7ZtadMD2EVlARX2EUuHNqMEJBzmFthmQjuYX94ToaHRQwbbqt_-EINdAgJrKuY/s1600/01_pay_attention.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="300" data-original-width="1124" height="107" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3chqJY8CqdensiNJPyf6N6psSYOWSlknmgYmq7UcER-iLq4aHiEK4_bvywpqbBVerqJZSXJVerRcVw7ZtadMD2EVlARX2EUuHNqMEJBzmFthmQjuYX94ToaHRQwbbqt_-EINdAgJrKuY/s400/01_pay_attention.jpg" width="400" /></a></span></span></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<br />
<span style="font-weight: bold;">Pay attention! The cost of losing focus.</span>
<br />
How can we remove distractions and create high quality output?
<br />
<a href="https://www.linkedin.com/pulse/pay-attention-cost-losing-focus-dr-neil-roodyn/?lipi=urn%3Ali%3Apage%3Ad_flagship3_profile_view_base_post_details%3BNkQ2Nd7bSTCdpYpqngq3OA%3D%3D" style="color: #a0c73f; font-weight: bold; text-decoration: none;">Read more</a>
<br /><br />
</span></span><br />
<div class="separator" style="border-top: 1px #dddddd groove; clear: both; clear: both; padding-top: 15px; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfY3lxSMjDq1OD1l4Mp6ou0D1tk-4j0GpFimMw5hNtzBPOBnQdB4YwTEdiF8JTUTqgIYDbadNxxxwT52GyL78vJFRZlPsmWTWV1YanyvJtTl6OPv52076-TxLrTHLAVC547j23XxjD-p0/s1600/02_personal_devices.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="300" data-original-width="1124" height="107" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfY3lxSMjDq1OD1l4Mp6ou0D1tk-4j0GpFimMw5hNtzBPOBnQdB4YwTEdiF8JTUTqgIYDbadNxxxwT52GyL78vJFRZlPsmWTWV1YanyvJtTl6OPv52076-TxLrTHLAVC547j23XxjD-p0/s400/02_personal_devices.jpg" width="400" /></a></span></span></span></span></span></span></div>
<br />
<span style="font-weight: bold;">Personal devices, who is in charge?</span>
<br />
We should be the ones in control of when we look at our phone, not our phone deciding that we should look at it.
<br />
<a href="https://www.linkedin.com/pulse/personal-devices-who-charge-dr-neil-roodyn/?lipi=urn%3Ali%3Apage%3Ad_flagship3_profile_view_base_post_details%3BNkQ2Nd7bSTCdpYpqngq3OA%3D%3D" style="color: #a0c73f; font-weight: bold; text-decoration: none;">Read more</a>
<br />
<br />
<div class="separator" style="border-top: 1px #dddddd groove; clear: both; clear: both; padding-top: 15px; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgP7bc6HmrYN2ng3qHCPAtAljtrAJwCdkR-LuA0kyLs8efsbfsTm4KmaMWbGRamQqjqGg2yAYkFixWmegI51X5AaX68HT5MZRsOZTOQUylFzMcwSIUuQqpBGGAc1Z3XEuydkOX9amdP0pA/s1600/03_connect_me.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="300" data-original-width="1124" height="107" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgP7bc6HmrYN2ng3qHCPAtAljtrAJwCdkR-LuA0kyLs8efsbfsTm4KmaMWbGRamQqjqGg2yAYkFixWmegI51X5AaX68HT5MZRsOZTOQUylFzMcwSIUuQqpBGGAc1Z3XEuydkOX9amdP0pA/s400/03_connect_me.jpg" width="400" /></a></span></div>
<br />
<span style="font-weight: bold;">Connect me to my meeting.</span>
<br />
How many times have you walked into a meeting only to find the presentation equipment requires an IT support person to make it work?
<br />
<a href="https://www.linkedin.com/pulse/connect-me-my-meeting-dr-neil-roodyn/?lipi=urn%3Ali%3Apage%3Ad_flagship3_profile_view_base_post_details%3BNkQ2Nd7bSTCdpYpqngq3OA%3D%3D" style="color: #a0c73f; font-weight: bold; text-decoration: none;">Read more</a>
<br />
<br />
<div class="separator" style="border-top: 1px #dddddd groove; clear: both; clear: both; padding-top: 15px; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjd2FpSH_9xZpMKcpBiFab4kl6O6W8VRmUWxP4q8k0xhHZ_hBDVzSZAVuO4hOonzv2S0zuk124B5fWU-rEVPNQ5TCEJnmuAX90SMOqzU0XlesmsANAfYpGGAvddzKVYoN9sZ3ChgNqpRxg/s1600/04_show_me_content.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="300" data-original-width="1124" height="107" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjd2FpSH_9xZpMKcpBiFab4kl6O6W8VRmUWxP4q8k0xhHZ_hBDVzSZAVuO4hOonzv2S0zuk124B5fWU-rEVPNQ5TCEJnmuAX90SMOqzU0XlesmsANAfYpGGAvddzKVYoN9sZ3ChgNqpRxg/s400/04_show_me_content.jpg" width="400" /></a></span></div>
<br />
<span style="font-weight: bold;">Show me my content.</span>
<br />
How many times have you sat in a meeting and things just took too long?
<br />
<a href="https://www.linkedin.com/pulse/show-me-my-content-dr-neil-roodyn/?lipi=urn%3Ali%3Apage%3Ad_flagship3_profile_view_base_post_details%3BNkQ2Nd7bSTCdpYpqngq3OA%3D%3D" style="color: #a0c73f; font-weight: bold; text-decoration: none;">Read more</a>
<br />
<br />
<div class="separator" style="border-top: 1px #dddddd groove; clear: both; clear: both; padding-top: 15px; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOA-kqbJrQ01RVCGNygesdd9C7HoiZfnMqN96VY90qxfbvAASDIBTD9RyDGFscwM4bZnHL-VLZBZw_wtZxdVUImtou3dv0IGKlXRMcKaToNZScglHQMPvqCOv96Tx1qHq9NMEnjlkDE98/s1600/05_agenda.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="300" data-original-width="1124" height="106" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOA-kqbJrQ01RVCGNygesdd9C7HoiZfnMqN96VY90qxfbvAASDIBTD9RyDGFscwM4bZnHL-VLZBZw_wtZxdVUImtou3dv0IGKlXRMcKaToNZScglHQMPvqCOv96Tx1qHq9NMEnjlkDE98/s400/05_agenda.jpg" width="400" /></a></span></div>
<br />
<span style="font-weight: bold;">Sticking to the agenda.</span>
<br />
How many meetings do you attend each month, for which there is no clear agenda?
<br />
<a href="https://www.linkedin.com/pulse/sticking-agenda-dr-neil-roodyn/?lipi=urn%3Ali%3Apage%3Ad_flagship3_profile_view_base_post_details%3BNkQ2Nd7bSTCdpYpqngq3OA%3D%3D" style="color: #a0c73f; font-weight: bold; text-decoration: none;">Read more</a>
<br />
<br />
<div class="separator" style="border-top: 1px #dddddd groove; clear: both; clear: both; padding-top: 15px; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDnNSNs0xp7DxxaGe8eSmRX8UDWYbRb2IhtHhgac7kXOXFVFT2uKdBTZDT3V8JcP5nKuQM-m3Jv-EMuTgkB7P7RsxVRnv7NTiYA6IkcxihJA0IN3jPyINTk7czOMJf3VEKfTFByVw1kxM/s1600/06_what_decide.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="300" data-original-width="1124" height="107" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDnNSNs0xp7DxxaGe8eSmRX8UDWYbRb2IhtHhgac7kXOXFVFT2uKdBTZDT3V8JcP5nKuQM-m3Jv-EMuTgkB7P7RsxVRnv7NTiYA6IkcxihJA0IN3jPyINTk7czOMJf3VEKfTFByVw1kxM/s400/06_what_decide.jpg" width="400" /></a></span></span></div>
<br />
<span style="font-weight: bold;">What did we decide?</span>
<br />
Have you ever been in a meeting where great decisions are made, only to realise a week later that a number of the decisions have been lost or forgotton?
<br />
<a href="https://www.linkedin.com/pulse/what-did-we-decide-dr-neil-roodyn/?lipi=urn%3Ali%3Apage%3Ad_flagship3_profile_view_base_post_details%3BNkQ2Nd7bSTCdpYpqngq3OA%3D%3D" style="color: #a0c73f; font-weight: bold; text-decoration: none;">Read more</a>
<br />
<br />
<div class="separator" style="border-top: 1px #dddddd groove; clear: both; clear: both; padding-top: 15px; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3Qxkx8VlE7D6_kOx1YSI4754xl0EOYKwleVezrEcJLOe6nERrjAqhVCl3r_8A6tviY8oXtQm-NeqCPHIZPg3UWJeCvobURQkkNyzhjVb55DIzPQfTDATCIMa0Bvd9I9sZSKJzCdztwN0/s1600/07_meeting_email.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="300" data-original-width="1124" height="107" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3Qxkx8VlE7D6_kOx1YSI4754xl0EOYKwleVezrEcJLOe6nERrjAqhVCl3r_8A6tviY8oXtQm-NeqCPHIZPg3UWJeCvobURQkkNyzhjVb55DIzPQfTDATCIMa0Bvd9I9sZSKJzCdztwN0/s400/07_meeting_email.jpg" width="400" /></a></span></span></div>
<br />
<span style="font-weight: bold;">Make that meeting an email.</span>
<br />
How many times have you sat in a meeting and realized that the only reason you are there is because someone has a couple of facts to share, that could easily have been sent in an email?
<br />
<a href="https://www.linkedin.com/pulse/make-meeting-email-dr-neil-roodyn/?lipi=urn%3Ali%3Apage%3Ad_flagship3_profile_view_base_post_details%3BNkQ2Nd7bSTCdpYpqngq3OA%3D%3D" style="color: #a0c73f; font-weight: bold; text-decoration: none;">Read more</a>
<br />
<br />
<div class="separator" style="border-top: 1px #dddddd groove; clear: both; clear: both; padding-top: 15px; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgoWk-8JiDXL8w_wTNP8HRrNPY2lOA0RtgQ0NER6UwLBHUvpo1p7a56fpP2nspzgR-O9WDVm3fZ2KzJaJElYyoAGJdS2Q2sJJGNafpTbLcvC8pC7oqfjcuV8Xl1RX9F94umFJF1M0DDEo/s1600/08_now_then.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="300" data-original-width="1124" height="107" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgoWk-8JiDXL8w_wTNP8HRrNPY2lOA0RtgQ0NER6UwLBHUvpo1p7a56fpP2nspzgR-O9WDVm3fZ2KzJaJElYyoAGJdS2Q2sJJGNafpTbLcvC8pC7oqfjcuV8Xl1RX9F94umFJF1M0DDEo/s400/08_now_then.jpg" width="400" /></a></div>
<br />
<span style="font-weight: bold;">Meetings, now and then.</span>
<br />
What has really changed in how we communicate ideas and come up with plans?
<br />
<a href="https://www.linkedin.com/pulse/meetings-now-dr-neil-roodyn/?lipi=urn%3Ali%3Apage%3Ad_flagship3_profile_view_base_post_details%3BNkQ2Nd7bSTCdpYpqngq3OA%3D%3D" style="color: #a0c73f; font-weight: bold; text-decoration: none;">Read more</a>
<br />
<br />
<div class="separator" style="border-top: 1px #dddddd groove; clear: both; clear: both; padding-top: 15px; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDOxa9H2R3a2fJAWgAWRJC7uj-xESVPNCCo4_0ovf0oimJzxqTZWupL5cSuW7Df4Umm4EBLfdfB8p0YN5pIFV6NSdUfqBEnOvI0WDp7ZsIgJyOzySrghm87v9JC7jC6cXZfFKGoLrezno/s1600/09_environment.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="300" data-original-width="1124" height="107" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDOxa9H2R3a2fJAWgAWRJC7uj-xESVPNCCo4_0ovf0oimJzxqTZWupL5cSuW7Df4Umm4EBLfdfB8p0YN5pIFV6NSdUfqBEnOvI0WDp7ZsIgJyOzySrghm87v9JC7jC6cXZfFKGoLrezno/s400/09_environment.jpg" width="400" /></a></div>
<br />
<span style="font-weight: bold;">The environment for getting things done.</span>
<br />
How many times have you walked into a space and immediately felt more relaxed or happier?
<br />
<a href="https://www.linkedin.com/pulse/environment-getting-things-done-dr-neil-roodyn/?lipi=urn%3Ali%3Apage%3Ad_flagship3_profile_view_base_post_details%3BNkQ2Nd7bSTCdpYpqngq3OA%3D%3D" style="color: #a0c73f; font-weight: bold; text-decoration: none;">Read more</a>
<br />
<br />
<div class="separator" style="border-top: 1px #dddddd groove; clear: both; clear: both; padding-top: 15px; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggdQkRDvPv97M-Za6948E5nC45UlGTpDk__FsidLOTL0bEesrkFkaBk93GxLk1wW6-dEc-Z7Q_q2E3nDcQhxLRSN3cC3i5Pqk3z8bkxhsTuWeyYKTm_E65gmvrO0nxCNwuCEhAVFJPWhI/s1600/10_privacy.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="300" data-original-width="1124" height="107" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggdQkRDvPv97M-Za6948E5nC45UlGTpDk__FsidLOTL0bEesrkFkaBk93GxLk1wW6-dEc-Z7Q_q2E3nDcQhxLRSN3cC3i5Pqk3z8bkxhsTuWeyYKTm_E65gmvrO0nxCNwuCEhAVFJPWhI/s400/10_privacy.jpg" width="400" /></a></div>
<br />
<span style="font-weight: bold;">The strange thing about privacy.</span>
<br />
Is it possible that removing privacy from many scenarios improves the situation for the group of people involved?
<br />
<a href="https://www.linkedin.com/pulse/strange-thing-privacy-dr-neil-roodyn/?lipi=urn%3Ali%3Apage%3Ad_flagship3_profile_view_base_post_details%3BNkQ2Nd7bSTCdpYpqngq3OA%3D%3D" style="color: #a0c73f; font-weight: bold; text-decoration: none;">Read more</a>
<br />
<br />
nsquared solutions
<br />
<br />nsquaredhttp://www.blogger.com/profile/17802027489389881952noreply@blogger.com0tag:blogger.com,1999:blog-1309846465832839404.post-11236335656005016492018-08-12T18:08:00.001-07:002018-08-12T20:08:04.924-07:00Defensive Coding<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
In continuation to a previous blog post <a href="https://nsquaredblog.blogspot.com/2018/05/test-driven-development-tdd.html" style="color: #a0c73f; font-weight: bold; text-decoration: none;">Test Driven Development</a>, we would like to discuss the <span style="font-weight: bold;">Defensive Coding</span> approach in this blog post.
<br /><br />
<span style="font-weight: bold;">What?</span>
<br />
Defensive programming is an approach to improve software quality by <span style="font-style: italic;">“Making the software behave in a predictable manner despite unexpected input or user actions".</span> The software's behavior should be consistent even in undesirable conditions.
<br /><br />
<span style="font-weight: bold;">When?</span>
<br />
Defensive programming techniques are used especially when a piece of software could be misused mischievously, or inadvertently, to cause a catastrophic effect, which is likely to be the case.
<br /><br />
<span style="font-weight: bold;">Why?</span>
<br />
One of the compelling reasons to perform defensive coding is that catching exceptions is computationally expensive. It is useful to follow techniques that allow the program to continue by gracefully handling the exceptional conditions, without throwing an exception.
Defensive coding also reduces the number of bugs and ensures code correctness.
<br /><br />
<span style="font-weight: bold;">How?</span>
<br />
The most widespread practice is to use guard statements like:
<br /><br />
<span style="font-style: italic;">Null Checks</span>
<br /><br />
</span><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyU59u0Wmo9L6DYPMcSJPzmMeSrTq2ItXbOpzSkZHysv0Z967cC3S3QOab1S866gmsxxl7bKsBpXK65uz4mq3j_bNtu23ejOGdc4WCZKEjlzuwl1Gnv67OsMy_y9rGcXqLGy2v6J1FMk8/s1600/01_nullchecks.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyU59u0Wmo9L6DYPMcSJPzmMeSrTq2ItXbOpzSkZHysv0Z967cC3S3QOab1S866gmsxxl7bKsBpXK65uz4mq3j_bNtu23ejOGdc4WCZKEjlzuwl1Gnv67OsMy_y9rGcXqLGy2v6J1FMk8/s400/01_nullchecks.png" width="400" height="170" data-original-width="701" data-original-height="298" /></a></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<br /><br />
<span style="font-style: italic;">Pre-conditions</span>
<br /><br />
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibcg1S0j4_Sued0ohMqvVtLVhXF3R7uHprJsnKwTPP98b7zLYZZYI3QThRdfJLXjqkes7dlTD9Z2txmHCtkn3f5dhAdznMMyawr7R0HnVSQzjpSSxWYADSAQZ4g0s6upgQPIgYwk9ttks/s1600/02_preconditions.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="156" data-original-width="890" height="70" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibcg1S0j4_Sued0ohMqvVtLVhXF3R7uHprJsnKwTPP98b7zLYZZYI3QThRdfJLXjqkes7dlTD9Z2txmHCtkn3f5dhAdznMMyawr7R0HnVSQzjpSSxWYADSAQZ4g0s6upgQPIgYwk9ttks/s400/02_preconditions.png" width="400" /></a></span></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<br /><br />
<span style="font-style: italic;">Assertions</span>
<br /><br />
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil_zfGjoM-xvsIUzb4lH5ZyDWosMLnI9C8wF_tT-xV_iB67NtDrnn8bLvG4bim7-zGufuEVVATDLQtobRjrQPlsGuXHKqKWQvYqrdXJ4A9kEHPg5N_Fwr9b8Xg747FAvPqhYRBHIVwvvU/s1600/03_assertions.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="220" data-original-width="712" height="124" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil_zfGjoM-xvsIUzb4lH5ZyDWosMLnI9C8wF_tT-xV_iB67NtDrnn8bLvG4bim7-zGufuEVVATDLQtobRjrQPlsGuXHKqKWQvYqrdXJ4A9kEHPg5N_Fwr9b8Xg747FAvPqhYRBHIVwvvU/s400/03_assertions.png" width="400" /></a></span></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<br /><br />
- Do not repeat the guard statements. We often tend to repeat code to perform validations. This repeated guard usage can lead to primitive obsession and wasted computational cycles. <br />
- In such cases, it is always better to either include abstractions to perform the validations or extract the duplicates into separate and reusable checks.<br />
- Since these validations are very crucial and spread across the code base, they should be kept intact. It also helps us to adhere to the DRY (Don’t Repeat Yourself) principle.<br />
- Always wrap a third party library usage with our own gateways or proxies.
<br /><br />
nsquared solutions
</span>nsquaredhttp://www.blogger.com/profile/17802027489389881952noreply@blogger.com0tag:blogger.com,1999:blog-1309846465832839404.post-8610781302539351812018-08-05T18:25:00.005-07:002018-08-05T18:25:58.839-07:00Setting up Hyper-V Server 2016 as Host<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<span style="font-weight: bold;">Setting up Hyper-V Server 2016 as Host, and connecting a Client computer with Hyper-V Manager in Windows 10</span>
<br /><br />
<span style="font-style: italic;">Scenario:</span> You want to use Hyper-V Manager, with a Windows 10 Pro client computer, to connect with to Windows Hyper-V Server 2016, which is a Workgroup computer (non-domain joined).
<br /><br />
<span style="font-style: italic; font-weight: bold;">Prerequisites</span>
<br />
<span style="font-weight: bold;">HOST Server</span><br />
- A bootable USB with a Hyper-V Server 2016 ISO Image. You can download it for free from here.<br />
- Target computer to be your Hyper-V Server. <br />
- One (1) Terabyte of storage disk space. This very much depends on what you want to do with your server, though we will assume you want to use it for Virtual Machines.<br />
- Minimum 4GB RAM (assuming you are going for Virtual Machines, though even then recommended at least 8GB).<br />
- Network connection to server.<br />
- Keyboard and mouse plugged into your server computer.<br />
<br /><br />
<span style="font-weight: bold;">CLIENT Computer</span><br />
- Windows Pro or Enterprise (to access Hyper-V).<br />
- Administrator privileges on your target client user.<br />
- Network connection to server (WIFI OK).
<br /><br />
<span style="font-weight: bold;">Setting up Host Server computer</span><br />
1. Boot your server computer with your bootable USB plugged in, and select from the initial screen, to go to the Boot Menu (sometimes F11 or F12, depending on your computer).
<br /><br />
2. Select to boot from your USB ISO, to begin the install for Windows Hyper-V Server 2016.
<br /><br />
3. You will see a message: <i>Press any key to boot from CD or DVD. Press any key (such as <b>enter</b>).</i>
<br /><br />
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioT9Klg1LDjERp0ea6sWiOuBk26KMnpZLEGPyOddeocYm3v4Es1ViE0jnzha5BvDywVYgC6leftn9Sq2LrN0mvzKE-gaWmoy-UKP6j64W__wa4Q80Hjx7yuci2ulRGqEW9xLMApdnJoqo/s1600/04.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="69" data-original-width="538" height="51" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioT9Klg1LDjERp0ea6sWiOuBk26KMnpZLEGPyOddeocYm3v4Es1ViE0jnzha5BvDywVYgC6leftn9Sq2LrN0mvzKE-gaWmoy-UKP6j64W__wa4Q80Hjx7yuci2ulRGqEW9xLMApdnJoqo/s400/04.PNG" width="400" /></a></span></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<br /><br />
4. The Install Microsoft Hyper-V Server Wizard will begin, where you will need to provide the Language to install, your Time and currency format, and your preferred Keyboard or input method; click <b>Next </b>when you are done:
<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjL4xLMYQY_G7eUPVR54-MHlRq2MvPG3eG32K1qvlwsjgwWYyGjAP2ksEJafi1aWzWB9OibIDQob0EyGwwZdVlwvIwstPPRPApsYCm1uOS83s4wRFOkx-Ne-CGf1wsc5XcrO_UyufSJGcc/s1600/05.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="364" data-original-width="483" height="301" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjL4xLMYQY_G7eUPVR54-MHlRq2MvPG3eG32K1qvlwsjgwWYyGjAP2ksEJafi1aWzWB9OibIDQob0EyGwwZdVlwvIwstPPRPApsYCm1uOS83s4wRFOkx-Ne-CGf1wsc5XcrO_UyufSJGcc/s400/05.PNG" width="400" /></a></div>
<br /><br />
5. Setup will begin (with a Setup is starting message), then you will be prompted to agree to the licensing terms by checking the checkbox and clicking Next.
<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiom8S0o-HWtVRb-ZWCiE66b_-MzyghzrPvBZU1rBZp-ZsFqsfjLzMqFe_MID0PY0vbcFZueGPaqybhfcnBj7IUx91TBUod9vbLPcNRHwMkIpp6tv2zSSMRt-vxjkNGwfM7h_0UHgwHSNI/s1600/06.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="374" data-original-width="496" height="302" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiom8S0o-HWtVRb-ZWCiE66b_-MzyghzrPvBZU1rBZp-ZsFqsfjLzMqFe_MID0PY0vbcFZueGPaqybhfcnBj7IUx91TBUod9vbLPcNRHwMkIpp6tv2zSSMRt-vxjkNGwfM7h_0UHgwHSNI/s400/06.PNG" width="400" /></a></div>
<br /><br />
6. For the purpose of this tutorial, we are setting up the server for the first time (rather than upgrading), so on the next window, select the selection <b>Custom: Install the newer version of Hyper-V Server only (advanced).
</b><br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1RDTK9S5iyd68MaH_MhQRLJRn-mx4putQlpVCqAX_z42alZTD6yJgCX4P8hMEIXucZ7Hi2RzrJyKWoz7-sl-1_lLZe7wmZQdudFWtQcAdkvH7yIRLcZILsuQzJ3Ip6HeE7QXhN4ZNRlk/s1600/07.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="369" data-original-width="492" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1RDTK9S5iyd68MaH_MhQRLJRn-mx4putQlpVCqAX_z42alZTD6yJgCX4P8hMEIXucZ7Hi2RzrJyKWoz7-sl-1_lLZe7wmZQdudFWtQcAdkvH7yIRLcZILsuQzJ3Ip6HeE7QXhN4ZNRlk/s400/07.PNG" width="400" /></a></div>
<br /><br />
7. On the next window, you will need to choose which <b>Drive </b>you wish to install onto. If you have multiple drives, you will need to select one to be the primary drive.
<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjP4IZB048nDWoYj_MojERXp5_96GI3L4FzbH_yLC9Bd7FspRJ5nc681QI5_a-GprtedY-2oqa9NjdIRgbyIuoVyYenOLCfHjrwTQ8FhQs0N6I-ryQcArvVqMudyhih7TAR5C7UljuosAY/s1600/08.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="440" data-original-width="583" height="302" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjP4IZB048nDWoYj_MojERXp5_96GI3L4FzbH_yLC9Bd7FspRJ5nc681QI5_a-GprtedY-2oqa9NjdIRgbyIuoVyYenOLCfHjrwTQ8FhQs0N6I-ryQcArvVqMudyhih7TAR5C7UljuosAY/s400/08.PNG" width="400" /></a></div>
<br /><br />
8. If your drive is <b>NOT </b>empty, now is the time to Format it: do this by selecting it within the inner window and click the <b>Format </b>button. Be aware, you will only need about eighty (80) gigabytes for Hyper-V Server 2016 to run well, so consider creating a new partition of this size, and selecting that.
<br /><br />
9. With your drive ready to go, click <b>Next</b>. Hypervisor will be installed locally, which may take some time (10-30 minutes, depending on your computers power). Once finished, the server will reboot and load hypervisor for the first time:
<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5NSy1yZV52sDm5sVCxM46IvnmzmRFHgcwsMEtnWstD-l5SeJut1GR71Ty2jQhggQAwDvJasZqUYm2mZfIegStAOiu3vqWMAIj0CFTRTTBUtmtjYRCTKpKjGSjIHbu2FHSx8JCBHxU64U/s1600/09.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="442" data-original-width="586" height="302" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5NSy1yZV52sDm5sVCxM46IvnmzmRFHgcwsMEtnWstD-l5SeJut1GR71Ty2jQhggQAwDvJasZqUYm2mZfIegStAOiu3vqWMAIj0CFTRTTBUtmtjYRCTKpKjGSjIHbu2FHSx8JCBHxU64U/s400/09.PNG" width="400" /></a></div>
<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjB9htrcbwdS9U_61YD0FWC1KPBAjaqsD20Lr2ZflCB8tNshdAah-Bk-17ikUAgL-VE8UGt_fHNNpxne36Y3qpaF_Ft4w5Dz7qDl1zAcwFG6hT-5GiJCu61TAXoEdN5L0kacEwng8cZD84/s1600/10.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="439" data-original-width="584" height="301" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjB9htrcbwdS9U_61YD0FWC1KPBAjaqsD20Lr2ZflCB8tNshdAah-Bk-17ikUAgL-VE8UGt_fHNNpxne36Y3qpaF_Ft4w5Dz7qDl1zAcwFG6hT-5GiJCu61TAXoEdN5L0kacEwng8cZD84/s400/10.PNG" width="400" /></a></div>
<br /><br />
10. Upon rebooting, the Hyper-V Server will scan available hardware and load Windows drivers.
<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlO-o2_XG5oFbxiypIJYtOWRvTV-cAin4jZJjSnvcIKtZN13k6VZ_DyO1mHi_5c2Kp_kZ_yZS3qvlEAYdE-bL_OYgEm3cx6f9iwc6LO3Jlc64bBxubsJIflax46OO5mu1z7W_x3aLWnLw/s1600/11.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="509" data-original-width="494" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlO-o2_XG5oFbxiypIJYtOWRvTV-cAin4jZJjSnvcIKtZN13k6VZ_DyO1mHi_5c2Kp_kZ_yZS3qvlEAYdE-bL_OYgEm3cx6f9iwc6LO3Jlc64bBxubsJIflax46OO5mu1z7W_x3aLWnLw/s400/11.PNG" width="388" /></a></div>
<br /><br />
11. When it is all ready, you will be prompted to set an <i>Administrator </i>password. Use the arrow keys to navigate to <b>OK</b>, and then press the <b>enter </b>key to continue.
<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_yL2c_tm0OdEpHE-xafchs2DjgrunYwOKN_nixTI3Ygj-0aTmZGxPCHO5yT_GL_6SlylkkIHTzI55fQdTWpN1lJZ9ABtT2oCXVkx2rZX0-2WC7K4rirRXmAavwNqEsoGxggCIpPrSEsg/s1600/12.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="277" data-original-width="514" height="216" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_yL2c_tm0OdEpHE-xafchs2DjgrunYwOKN_nixTI3Ygj-0aTmZGxPCHO5yT_GL_6SlylkkIHTzI55fQdTWpN1lJZ9ABtT2oCXVkx2rZX0-2WC7K4rirRXmAavwNqEsoGxggCIpPrSEsg/s400/12.PNG" width="400" /></a></div>
<br /><br />
12. Type your new password; it needs to have a level of complexity, so try lower and upper case letters, numbers, and a special character (<b>!@#$%^&()?/_</b>). This suggestion is for your security too, so set something reasonably strong. Press <b>enter </b>once done.
<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgJw2tz1Y5Wg7S__oSzoSYYXJHfbOpOmDwrBB8aIhgkiOkXcHRpdkYE1emI1DMG1XaPFZlCNwgG27-0q1g_trIuvVzI36j2EwIeK18kY82cIDcytNY8QTpGpwodAPg4h4-88KwGvtaGTE/s1600/13.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="319" data-original-width="599" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgJw2tz1Y5Wg7S__oSzoSYYXJHfbOpOmDwrBB8aIhgkiOkXcHRpdkYE1emI1DMG1XaPFZlCNwgG27-0q1g_trIuvVzI36j2EwIeK18kY82cIDcytNY8QTpGpwodAPg4h4-88KwGvtaGTE/s400/13.PNG" width="400" /></a></div>
<br /><br />
13. You will be prompted that your password has been changed, once you have set it well. Press the <b>enter </b>key on <b>OK</b>, to continue:
<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnJ5vteiD2Zz7tj41Sx7NxqehTEWeQNJocsWi-SYmvNdPCR9Kix6DH1QKP7g011-w1hzlyGCSclTK1hN_OkqGzJW_E3O_ZPdMlr5We4qZc0_5FN7aVgVGMdsYYwyT1056mRu_rSla5OTk/s1600/14.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="315" data-original-width="602" height="209" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnJ5vteiD2Zz7tj41Sx7NxqehTEWeQNJocsWi-SYmvNdPCR9Kix6DH1QKP7g011-w1hzlyGCSclTK1hN_OkqGzJW_E3O_ZPdMlr5We4qZc0_5FN7aVgVGMdsYYwyT1056mRu_rSla5OTk/s400/14.PNG" width="400" /></a></div>
<br /><br />
14. Two screens will be loaded: Server Configuration and a CLI (behind it):
<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgipq2nTv35XHzDQGCICLSITmYwRshSBhNwF2Dm72kMWE0RBkDL1mM-BprXFrKmNQADyLMGvmSJgXL2tLWkdx4ElO2mrJfIXNXn6oeUZGMIffiXiwzSGtGC8VwGMNL5iJ4vj44vbdIB9FY/s1600/15.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="477" data-original-width="742" height="257" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgipq2nTv35XHzDQGCICLSITmYwRshSBhNwF2Dm72kMWE0RBkDL1mM-BprXFrKmNQADyLMGvmSJgXL2tLWkdx4ElO2mrJfIXNXn6oeUZGMIffiXiwzSGtGC8VwGMNL5iJ4vj44vbdIB9FY/s400/15.PNG" width="400" /></a></div>
<br /><br />
<span style="font-style: italic;">a. Server Configuration screen (blue):</span><br />
i. This screen allows the administrator to make changes to the most common and necessary settings to ensure the server runs properly. <br />
ii. Make changes by entering the corresponding number next to the setting you wish to modify. You will then be prompted to enter the change to be made. Depending on the change, a reboot may be triggered, which you must do now or postpone.<br /><br />
<span style="font-style: italic;">b. Command-line interface (CLI) (black):</span>
<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLCDJfDGnYlXL8NhRJBYb4RYJyC9Ex39YbRXfBPgfNx-GujoK4fGF_WHjvMnCiLgoV3-VmMT5Oe-DnhJo2b9Z6BdOaZMz56SaixGmFKry5vhe9WjPvBFNx8xCqW3yG2sACIbO_4_-C8Xo/s1600/16.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="394" data-original-width="745" height="212" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLCDJfDGnYlXL8NhRJBYb4RYJyC9Ex39YbRXfBPgfNx-GujoK4fGF_WHjvMnCiLgoV3-VmMT5Oe-DnhJo2b9Z6BdOaZMz56SaixGmFKry5vhe9WjPvBFNx8xCqW3yG2sACIbO_4_-C8Xo/s400/16.PNG" width="400" /></a></div>
<br /><br />
i. Once you have exited the Server Configuration screen, you will be taken to the CLI screen. You can load PowerShell from here, and also load back into the Server Configuration screen:<br />
- PowerShell: powershell. <br />
-Server Config: C:\Windows\System32\Sconfig.cmd
<br /><br />
15. You must now enable Hyper-V Server remote management. This is accomplished through using the Server Config screen:<br />
a. Type: <b>4</b>, and press <b>enter</b>. This will open the settings for Remote Management.<br />
b. Type: <b>1</b>, to open config for Remote Management.<br />
c. Type: <b>E</b>, and press <b>enter</b>, to enable Remote Management. <br />
d. Also within Remote Management, type: <b>3</b>, to enable Remote Ping. Click <b>Yes</b>, when prompted.<br />
e. Navigate back to Server Config.<br />
f. Next, type: <b>7</b>, and press <b>enter</b>. This will open the settings for Remote Desktop.<br />
g. Type: <b>E</b>, and press <b>enter</b>. <br />
h. Then type: <b>1</b>. This will enable remote desktop (you will get a prompt) about the level of security. For this example, we are using more secure, though choose what suits your setup.<br />
i. A reboot may be required.
<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdcYS_5CTxYuccqUjlM5LZJjGF6VsIMWqT9jZCh-7nXY9IApABWgSdmqnXpKyxtUq9-RFjKRkSB2VyiCvjvzWWR4bUB2pivfo4QHiWoLSjtN43pxdxProXBLhpYuv8wSf0keKlMUP34oc/s1600/17.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="476" data-original-width="737" height="258" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdcYS_5CTxYuccqUjlM5LZJjGF6VsIMWqT9jZCh-7nXY9IApABWgSdmqnXpKyxtUq9-RFjKRkSB2VyiCvjvzWWR4bUB2pivfo4QHiWoLSjtN43pxdxProXBLhpYuv8wSf0keKlMUP34oc/s400/17.PNG" width="400" /></a></div>
<br /><br />
16. Once rebooted, open the hypervisor again (Ctrl + Alt + Del). Then, type: <b>14</b>, to exit to command-line (CLI).
<br /><br />
17. Within the CLI, type: <b>powershell</b>, and press the <b>enter </b>key.
<br /><br />
18. PowerShell will begin within the CLI (you will be able to see this, as Windows PowerShell will be printed as a message, before providing the cursor back to you).
<br /><br />
19. Type: <b>Enable-PSRemoting</b>, and press the <b>enter </b>key.
<br /><br />
20. Type: <b>Enable-WSManCredSSP -Role server</b>, and press the <b>enter </b>key.
<br /><br />
21. Type: <b>Y</b>, and press the <b>enter </b>key, to accept the CredSSP Authentication message.
<br /><br />
22. The server (Host) is now configured, and able to be pinged from another computer on the network.
<br /><br />
23. Then, type: <b>Set-NetFirewallRule -DisplayGroup 'Windows Management Instrumentation (WMI)' -Enabled true -PassThru</b>, and press the <b>enter </b>key.
<br /><br />
24. After, type: <b>Set-NetFirewallRule -DisplayGroup 'Remote Event Log Management' -Enabled true -PassThru</b>, and press the <b>enter </b>key.
<br /><br />
25. The next command will allow other computers to access your Host server drive (important when install you ISOs). It is recommended, that once you have copied your ISOs to the local drive, to disable this.
<br /><br />
- Type: <b>netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes</b><br />
- To later disable this, type:<b> netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=No
</b><br /><br />
26. Last, you need the <b>IP Address</b> of the server, and to note down your server <b>FQDN </b>(also known as your fully qualified domain name:<br />
- Navigate back to the Server Config screen, by typing: <b>sconfig </b>and pressing the <b>enter </b>key.<br />
- Type: <b>8 </b>in Sever Config, and press the <b>enter </b>key, to open the Network Settings section, and note down your <b>IP Address</b> and the <b>server name (FQDN);</b> you can edit the server name from Server Config also, just ensure you note it down, and reboot after the update.
<br /><br />
<span style="font-weight: bold;">Setting up Client computer</span><br />
1. Open PowerShell as Admin (<b>Windows Key + X</b>, then <b>A</b>).
<br /><br />
2. Activate Hyper-V on client computer; in PowerShell: <b>Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All</b>. If you have any issues, check PowerShell is open as Administrator.
<br /><br />
3. Edit the hosts file, to add your server's <b>IP Address</b> and <b>FQDN</b>.<br />
a. Type: <b>notepad C:\Windows\System32\drivers\etc\hosts</b>, and press the <b>enter </b>key, to open the hosts file within <i>Notepad</i>. <br />
b. At the bottom of the file, tab across, then add your <b>IP Address</b>, press tab again, and add your <b>FQDN </b>(server Name).<br />
c. Save the file.
<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqJO_i6DqXYm6EWnAcmvCzu9RQtnp3_4iN6bYLUL33VtVPco5FW_TTHTAsfA7PW76cF98uoyMuYQBJETLrvGKlY1VtYzbuwJCGD3GbHghpy3YEcJQcnDIdjub6UnlhKF9kQHNbZS5rc7g/s1600/19.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="496" data-original-width="1146" height="173" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqJO_i6DqXYm6EWnAcmvCzu9RQtnp3_4iN6bYLUL33VtVPco5FW_TTHTAsfA7PW76cF98uoyMuYQBJETLrvGKlY1VtYzbuwJCGD3GbHghpy3YEcJQcnDIdjub6UnlhKF9kQHNbZS5rc7g/s400/19.PNG" width="400" /></a></div>
<br /><br />
d. In PowerShell, type: <b>Enable-PSRemoting -SkipNetworkProfileCheck</b>.<br />
- The above parameter is added, so that you do not need to go through your computer, changing all your networks to Private or Domain. Though, be aware, that the above setting means that only connections on the same subnet as your computer, will be able to connect (which is fine, in this case, as the server Host is on the same network).<br />
e. Next, within PowerShell, Type: <b>gpedit </b>and press the <b>enter </b>key. The Local Group Policy Editor will open, where you need to update a setting:
<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7bCCfqsy7X0pXG7NiQ9lp-FoOg7wJF7ESMP_lWlZ27uQEWP1C6eUoMdDsIxJlGwEkzuraJbURPFEvhTm9yQG4dQsptcR4MQ-uM7yjWfsVV8XsxYoQt3qppZlsv381zrr2M55oXKu3khw/s1600/19a.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="740" data-original-width="1600" height="185" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7bCCfqsy7X0pXG7NiQ9lp-FoOg7wJF7ESMP_lWlZ27uQEWP1C6eUoMdDsIxJlGwEkzuraJbURPFEvhTm9yQG4dQsptcR4MQ-uM7yjWfsVV8XsxYoQt3qppZlsv381zrr2M55oXKu3khw/s400/19a.png" width="400" /></a></div>
<br /><br />
a. Navigate through: <i>Computer Configuration > Administrative Templates > System > Credentials Delegation</i>.<br />
b. Click <b>Credentials Delegation</b>, and in the window to the right, find <b>Allow delegating fresh credentials with NTLM-only server authentication</b>. Double-click to open.<br />
c. Change the configuration to <b>Enabled</b>, by clicking it. Then, within the <i>Options </i>box below that, click the newly enabled<b> Show...</b> button.<br />
d. The Show Contents popup window will open. Click the first row, second column, under the <i>Value </i>header, and type: <b>wsman/host-server-fqdn</b> (i.e. wsman/SERV01). Ensure that you place "wsman/" before the Host name. <br />
e. Click <b>OK </b>on the <i>Show Content Window</i>, and then lastly click <b>Apply </b>on the Allow delegating fresh credentials with NTLM-only server authentication window. Make sure to leave <b>gpedit </b>open for the next step.<br />
<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-O5jjGh0-8ADOiEmZQWQcrBGfJsSOjImEkuhlsSKnWu6KI__UAfinGio91GlPoFVfC8zFfwSGGQZoXiJlovnREG6VZij4NV15bSGjHVihqXLar4iPjkMnnBhx99nMeyMl8pJSG-Bv8EM/s1600/19b.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="415" data-original-width="614" height="270" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-O5jjGh0-8ADOiEmZQWQcrBGfJsSOjImEkuhlsSKnWu6KI__UAfinGio91GlPoFVfC8zFfwSGGQZoXiJlovnREG6VZij4NV15bSGjHVihqXLar4iPjkMnnBhx99nMeyMl8pJSG-Bv8EM/s400/19b.png" width="400" /></a></div>
<br /><br />
6. With <b>gpedit </b>still open, you also need to set the <i>Encryption Oracle Remediation</i>:<br />
a. Navigate through: <i>Computer Configuration > Administrative Templates > System > Credentials Delegation > Encryption Oracle Remediation</i>.<br />
b. It will likely be set as Not configured. Update this to <b>Enabled</b>.<br />
c. Once enabled, within the Options box below, click the Protection Level drop-down box, and update it to <b>Vulnerable</b>.<br />
d. Click <b>Apply </b>once set, and then <b>OK</b>.
<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_sCS5r80XXt6LlCwdSNUM0vksTGUOZHqXRGizdOzB2w_PN8bqG6Dg_0-Y5V1EVkJ89KhOxQGCa8lXfuPu4DJ-stSAAntlb0-lKaaxsxRblxUVtxzQ6J6NNuALW5yztWCaY4S_gca8_d4/s1600/19c.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="740" data-original-width="1600" height="185" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_sCS5r80XXt6LlCwdSNUM0vksTGUOZHqXRGizdOzB2w_PN8bqG6Dg_0-Y5V1EVkJ89KhOxQGCa8lXfuPu4DJ-stSAAntlb0-lKaaxsxRblxUVtxzQ6J6NNuALW5yztWCaY4S_gca8_d4/s400/19c.png" width="400" /></a></div>
<br /><br />
7. Within PowerShell, once again, type: <b>Set-Item WSMan:\localhost\Client\TrustedHosts -Value "FQDN"</b> (change FQDN with your Host name). Press the <b>enter </b>key, and a dialog box will prompt.
<br /><br />
8. Type: <b>Y </b>when prompted to modify the TrustedHosts list, then press the <b>enter </b>key, to accept.
<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoyacPrPTc_IGVJabEfOZKLVWGufuxb6csAGEx1EfzNkqE5MWXb7IP0NebyhzBCdb7D0WtcgTFZFGf8KksEOP9gvyGdnZDRmB0XOhWATgQq0JtdQD7QuMECosCRkW37RRBf_HZcBY7-lg/s1600/20.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="131" data-original-width="960" height="55" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoyacPrPTc_IGVJabEfOZKLVWGufuxb6csAGEx1EfzNkqE5MWXb7IP0NebyhzBCdb7D0WtcgTFZFGf8KksEOP9gvyGdnZDRmB0XOhWATgQq0JtdQD7QuMECosCRkW37RRBf_HZcBY7-lg/s400/20.PNG" width="400" /></a></div>
<br /><br />
9. Type: <b>Enable-WSManCredSSP -Role client -DelegateComputer "FQDN"</b> (change FQDN with your Host name). Press the <b>enter </b>key, and a dialog box will prompt.
<br /><br />
10. Type: <b>Y </b>when prompted to enable CredSSP authentication, then press the <b>enter </b>key, to accept.
<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgi4fxjRbATU-mvm5l5DcuvR5jW-LtvjdUehRdoPyD-VPYad38ZRFylvNwKu2kZzGb-VwnycpWVZm3s8NQ5BaRB8ColdccDrybxsBq-J_PtCVyxFGrhyphenhyphenq2BOsDVh4CW7oF61_6TIYVFyvU/s1600/21.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="334" data-original-width="962" height="139" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgi4fxjRbATU-mvm5l5DcuvR5jW-LtvjdUehRdoPyD-VPYad38ZRFylvNwKu2kZzGb-VwnycpWVZm3s8NQ5BaRB8ColdccDrybxsBq-J_PtCVyxFGrhyphenhyphenq2BOsDVh4CW7oF61_6TIYVFyvU/s400/21.PNG" width="400" /></a></div>
<br /><br />
11. Type: <b>MOFCOMP %SYSTEMROOT%\System32\WindowsVirtualization.V2.mof</b>, and press the <b>enter </b>key, to accept parsing the Virtualization (V2) file, using the MOF compiler.
<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQF2xdK1buSpWhe7UMXE16YeuOFnVhbd7mBlgfg3nQR9XOV38UvKg0rgCo1LpkDCgCP_PZqaE98f37-sHMHBxB_Jzkj2R63ZxLUe7B3jzw1dh8ZVWJ_hV1-swegT8_MK9J5q7iUw35seM/s1600/22.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="127" data-original-width="689" height="74" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQF2xdK1buSpWhe7UMXE16YeuOFnVhbd7mBlgfg3nQR9XOV38UvKg0rgCo1LpkDCgCP_PZqaE98f37-sHMHBxB_Jzkj2R63ZxLUe7B3jzw1dh8ZVWJ_hV1-swegT8_MK9J5q7iUw35seM/s400/22.PNG" width="400" /></a></div>
<br /><br />
12. Add the remote login next, by typing: <b>cmdkey /add:FQDN /user:Administrator /pass:p@ssword1</b>, (where you need to change FQDN with your Host server name, provide your user name - probably Administrator - and then provide your password for that user). Press the <b>enter </b>key to register the login information, which is necessary to connect with the Hyper-V Server.
<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEho22MOHaFns0NV-eFu0Ocm9PxxqfHsC6yo5Y0t-0CxH2jlBcVQynu7-cPWQXwMA6HZ61nd4szvwPvqglP8kZ3hY3YcKFxoO97Ia1sTRT13yAsEtBKXXNmUIX2QQ4Kf2mEOsqawEUeQV9E/s1600/23.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="58" data-original-width="668" height="35" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEho22MOHaFns0NV-eFu0Ocm9PxxqfHsC6yo5Y0t-0CxH2jlBcVQynu7-cPWQXwMA6HZ61nd4szvwPvqglP8kZ3hY3YcKFxoO97Ia1sTRT13yAsEtBKXXNmUIX2QQ4Kf2mEOsqawEUeQV9E/s400/23.PNG" width="400" /></a></div>
<br /><br />
13. As an additional <b>OPTIONAL </b>step, to help you copy your ISOs to your server Host, map the Host drive to your client computer, by typing: <b>Net use \\FQDN\c$</b>. Be aware, 'c$' here, denotes the main drive of the server. This may vary, depending on your set up.
<br /><br />
14. Open Hyper-V Manager, and click the Hyper-V Manager text, located in the left-side panel, to select it.
<br /><br />
15. With that selected, the far-right panel will provide the option to Connect to Server...: click this, and a popup window called <b>Select Computer</b> will appear.
<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnjDhBZZBXKLwGv5VOo2s5vmbUHs8hYK58OnDmokia94ddyk1-eaiMmaN-J8VtGafoDmXOduLYTNOdpwjzAhqg20GH3dy6AIxvvUXYZnYXy6IpbLNKx97ND9uYyg-s-aYqTHNtRa-eodo/s1600/24.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="421" data-original-width="585" height="288" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnjDhBZZBXKLwGv5VOo2s5vmbUHs8hYK58OnDmokia94ddyk1-eaiMmaN-J8VtGafoDmXOduLYTNOdpwjzAhqg20GH3dy6AIxvvUXYZnYXy6IpbLNKx97ND9uYyg-s-aYqTHNtRa-eodo/s400/24.PNG" width="400" /></a></div>
<br /><br />
16. With the <b>Another Computer:</b> radio button selected, type in the <b>FQDN </b>of your Host server, and press the <b>enter </b>key. You should <b>NOT </b>tick Connect as another user.
<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDXmufyPrkdLjOaVlpNL1Sh_TVzEz4Kivtx28xKTr2rkCD8HVWtesUnn_YUmF4ES8c5aDupQp48wl8q7HceonKIo61bxyU8L70GTDQJPXstO7Gw4ZnIb4PBSlAF352zTPDM4-NQDfEg_s/s1600/25.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="352" data-original-width="633" height="222" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDXmufyPrkdLjOaVlpNL1Sh_TVzEz4Kivtx28xKTr2rkCD8HVWtesUnn_YUmF4ES8c5aDupQp48wl8q7HceonKIo61bxyU8L70GTDQJPXstO7Gw4ZnIb4PBSlAF352zTPDM4-NQDfEg_s/s400/25.png" width="400" /></a></div>
<br /><br />
It is possible to completely automate the above, client computer, setup for PowerShell, so the next worthwhile step for you to take, is to create that. Though, keep in mind that any edits to the registry need you to reboot your client computer, to take effect.
<br /><br />
nsquared solutions
</span>nsquaredhttp://www.blogger.com/profile/17802027489389881952noreply@blogger.com0tag:blogger.com,1999:blog-1309846465832839404.post-70666679962930067102018-07-19T23:15:00.000-07:002018-07-19T23:16:25.022-07:00I've always wanted to be a cartoon...<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAhZVesycgR58Tp3UK3UYLqDPnOrPVKIalBmey63jJXnEo8aq1WQlte8ub-H06dZTNgXKsFy7qZAMI2wi2kK02Unli7msYnSUwnaCEP9IzjTl7PZLugbjhID6B94TUT3Y_kcakbN6AyBM/s1600/01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="864" data-original-width="1296" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAhZVesycgR58Tp3UK3UYLqDPnOrPVKIalBmey63jJXnEo8aq1WQlte8ub-H06dZTNgXKsFy7qZAMI2wi2kK02Unli7msYnSUwnaCEP9IzjTl7PZLugbjhID6B94TUT3Y_kcakbN6AyBM/s320/01.jpg" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaIo5_jHr9zI-qTDyGb2UwSFir3xblftPZdMMBtxhX9Pd4mjWr0udtK32sw0WPk8aioKSBvyyFJ9KSPeo2aWSScKKoccXthWU9Yd3PVPgfSPZYtE_iG6wUVI2nYus0b99118CaCHa6hQY/s1600/02+and+08.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1068" data-original-width="1600" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaIo5_jHr9zI-qTDyGb2UwSFir3xblftPZdMMBtxhX9Pd4mjWr0udtK32sw0WPk8aioKSBvyyFJ9KSPeo2aWSScKKoccXthWU9Yd3PVPgfSPZYtE_iG6wUVI2nYus0b99118CaCHa6hQY/s320/02+and+08.png" width="320" /></a></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
</span><br />
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;">Ever wanted to be a cartoon? Where there is a will, there is a way! Today, we are going to show you how you can take any image, and turn it into a cartoon style graphic using Adobe Illustrator. </span></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><br />
</span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7QL9WNDx8Rv5M7C59ROlSntVO4uupobIyUKYHN1fRgmmyDEYhjysyh0DgaeOX4zFaR2l2kGhe1OZ9ztIwTHi6RTyj15-8vXdl7YuOCd9k87gVukIKCId0gplszizzQJETQWnlzKtZLi8/s1600/03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="804" data-original-width="1600" height="160" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7QL9WNDx8Rv5M7C59ROlSntVO4uupobIyUKYHN1fRgmmyDEYhjysyh0DgaeOX4zFaR2l2kGhe1OZ9ztIwTHi6RTyj15-8vXdl7YuOCd9k87gVukIKCId0gplszizzQJETQWnlzKtZLi8/s320/03.png" width="320" /></a></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<br /><br />
1. Open up a new Illustrator file. The dimensions for this tutorial are 1296px by 864px, as they are the dimensions of the image we will be using. You can choose whichever dimensions you like. Click <span style="font-style: italic; font-weight: bold;">Create</span> once you have selected your dimensions.<br /><br />
2. Once the new file loads, press <span style="font-style: italic; font-weight: bold;">Cmd+Shift+P</span> on Mac, or <span style="font-style: italic; font-weight: bold;">Ctrl+Shift+P</span> on Windows on your keyboard, to open up a file directory to access your image. Alternatively, to find the same menu you can go to <span style="font-style: italic; font-weight: bold;">File > Place.</span><br /><br />
3. Locate the image in the file directory, then click <span style="font-style: italic; font-weight: bold;">Place.</span><br /><br />
4. Place and resize the image to where you would like it on the Artboard.<br /><br />
5. Go to <span style="font-style: italic; font-weight: bold;">Window > Image Trace</span> to open the <span style="font-style: italic;">Image Trace panel.</span>
<br /><br />
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0L4esBMvOe5pbJ7vaoc_-JXHuWZMfXpXXa36nV7bFyaBVlaGqv4liw-edqv2Z_4nDtFGsRL8wEVzmY_ZcMRPOEbDMgEhh2cOD1iCT2TXVi5U71gW5pdr3vMIzGfem3psITpSFSJgY6nM/s1600/04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="324" data-original-width="267" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0L4esBMvOe5pbJ7vaoc_-JXHuWZMfXpXXa36nV7bFyaBVlaGqv4liw-edqv2Z_4nDtFGsRL8wEVzmY_ZcMRPOEbDMgEhh2cOD1iCT2TXVi5U71gW5pdr3vMIzGfem3psITpSFSJgY6nM/s320/04.png" width="263" /></a></span></span></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<br /><br />
6. Now for the Fun! Select the image, and look over to the <span style="font-style: italic; font-weight: bold;">Image Trace</span> panel we just opened.<br /><br />
7. Click the <span style="font-style: italic; font-weight: bold;">Preset</span> drop down menu. These are all the settings for the image tracing, of which some will give you further options to tweak once selected. For this tutorial, select <span style="font-style: italic; font-weight: bold;">Sketched Art.</span><br /><br />
8. Under <span style="font-style: italic;">Preset,</span> is the <span style="font-style: italic; font-weight: bold;">View</span> drop down menu. Select <span style="font-style: italic; font-weight: bold;">Tracing Result.</span><br /><br />
9. Under <span style="font-style: italic;">View,</span> is the <span style="font-style: italic; font-weight: bold;">Mode</span> drop down menu. This is where you can select the colour mode. For this tutorial, we are going to select <span style="font-style: italic; font-weight: bold;">Colour.</span><br /><br />
10. You will then have <span style="font-style: italic; font-weight: bold;">Palette</span> options beneath <span style="font-style: italic;">View</span>. We find the most cartoon-like option to be <span style="font-style: italic; font-weight: bold;">Limited,</span> but feel free to see which suits your image best.<br /><br />
11. You can reduce the amount of colours in the <span style="font-style: italic; font-weight: bold;">Colors</span> option beneath <span style="font-style: italic;">Palette.</span> For this example, we have set it to 8.<br /><br />
12. Once you have played with the settings and are happy with the image, change <span style="font-style: italic; font-weight: bold;">View</span> to <span style="font-style: italic; font-weight: bold;">Tracing Result with Outlines.</span> This gives us outlines of where we are about to colour in.
<br /><br />
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6d6SpVAPe8A7GiHhi7y7X0MC9AcELDNAd87hdPARfMhsaTaz8V5_wZZvlyJ1PyZT8__WjWMRljxVfTNkjedu2N_f9kpajAS5o1FKs-HcULpuH4qfvjU8i9c9xJrHV0n-RW-cK3rE9O2w/s1600/05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1186" data-original-width="1600" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6d6SpVAPe8A7GiHhi7y7X0MC9AcELDNAd87hdPARfMhsaTaz8V5_wZZvlyJ1PyZT8__WjWMRljxVfTNkjedu2N_f9kpajAS5o1FKs-HcULpuH4qfvjU8i9c9xJrHV0n-RW-cK3rE9O2w/s320/05.png" width="320" /></a></span></span></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<br /><br />
13. Click the image and go to <span style="font-style: italic; font-weight: bold;">Object > Expand.</span> Ensure <span style="font-style: italic; font-weight: bold;">Fill</span> and <span style="font-style: italic; font-weight: bold;">Stroke</span> are selected, then click <span style="font-style: italic; font-weight: bold;">OK.</span>
<br /><br />
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfx55C70Jd8mC3e_SgBCDD2tiUBl7tqvlmIsSLCRHjXKuasBKNEC9eCiY8U4MSd2YS549IUOdyM9NwcxxRNWz20GtpFv2nMHYNJaECHNbVM7NCEVBKmap-hTgf9Ok4uVrydnQBPvd70ko/s1600/06.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="813" data-original-width="1020" height="255" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfx55C70Jd8mC3e_SgBCDD2tiUBl7tqvlmIsSLCRHjXKuasBKNEC9eCiY8U4MSd2YS549IUOdyM9NwcxxRNWz20GtpFv2nMHYNJaECHNbVM7NCEVBKmap-hTgf9Ok4uVrydnQBPvd70ko/s320/06.png" width="320" /></a></span></span></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<br /><br />
14. Once your object is expanded, colour away! Click a shape you would like to fill, and select a colour you would like.<br /><br />
15. Once you’re done, don’t forget to save the Illustrator file. Go to <span style="font-style: italic; font-weight: bold;">File > Save As,</span> and navigate to a location on your device.
<br /><br />
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsUPriaPM5zDuOptMR_KyEXy68IoXpkYnGK9dbPm1MqcMGrjhModr5XNYJOiGVcwrhCh8di_wkdOCwqruVQBt0ruH03cfc3VWqBUJH8vevk_q_KB5xtZIBw1wlKt2pABDFzU_sFBxu4xU/s1600/07.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="475" data-original-width="372" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsUPriaPM5zDuOptMR_KyEXy68IoXpkYnGK9dbPm1MqcMGrjhModr5XNYJOiGVcwrhCh8di_wkdOCwqruVQBt0ruH03cfc3VWqBUJH8vevk_q_KB5xtZIBw1wlKt2pABDFzU_sFBxu4xU/s320/07.png" width="250" /></a></span></span></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<br /><br />
16. To export your image, go to <span style="font-style: italic; font-weight: bold;">File > Export > Export As,</span> and navigate to a location on your device.
17. Select the format you wish to export the image as, from the <span style="font-style: italic; font-weight: bold;">Save as type</span> drop down menu. For this example, we will select <span style="font-style: italic; font-weight: bold;">PNG</span>. If you have selected PNG, a <span style="font-style: italic; font-weight: bold;">PNG Options</span> panel will appear. Select the <span style="font-style: italic; font-weight: bold;">Resolution, Anti-aliasing,</span> and <span style="font-style: italic; font-weight: bold;">Background Color</span> that suits you, and click <span style="font-style: italic; font-weight: bold;">OK.</span>
<br /><br />
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijXKduVi-Yedk90DaZTfHAlZsdYA-U1ePmwQVcapjYuB6o88DIeVLxLHga-WnqCnlVNV2wxBkSsXd-AcVJlH_kD-GlfHPKNvBCTHz-luvt6pDvWGnl1kGNYZAoY3k2vxcBp3uLJ_KVqko/s1600/02+and+08.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1068" data-original-width="1600" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijXKduVi-Yedk90DaZTfHAlZsdYA-U1ePmwQVcapjYuB6o88DIeVLxLHga-WnqCnlVNV2wxBkSsXd-AcVJlH_kD-GlfHPKNvBCTHz-luvt6pDvWGnl1kGNYZAoY3k2vxcBp3uLJ_KVqko/s320/02+and+08.png" width="320" /></a></span></span></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<br /><br />
Congratulations! You're a cartoon.
<br /><br />
nsquared solutions
</span>nsquaredhttp://www.blogger.com/profile/17802027489389881952noreply@blogger.com0tag:blogger.com,1999:blog-1309846465832839404.post-18144062535512175932018-07-10T19:23:00.000-07:002018-07-10T19:23:36.303-07:00Mixed reality training materials<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
In a previous post <a href="http://nsquaredblog.blogspot.com/2018/04/adding-ai-to-mixed-reality.html" style="color: #a0c73f; text-decoration: none;">Adding AI to Mixed Reality,</a> we
discussed how we have been helping developers add Artificial Intelligence (AI) to their mixed reality applications.
<br /><br />
The hands-on-labs from these events are now public on the <a href="https://docs.microsoft.com/en-us/windows/mixed-reality/academy" style="color: #a0c73f; text-decoration: none;">Microsoft Mixed Reality Academy.</a> These labs teach you how to add Microsoft Cognitive Services and Machine learning to a Unity application running on HoloLens, or in Microsoft's Mixed Reality Portal.
<br /><br />
One of the attendees of a recent event in Redmond wrote about his experiences at a week-long hack, where teams were formed around specific scenarios. You can read Ryan's thoughts on the event <a href="https://www.linkedin.com/pulse/microsoft-mr-airlift-reflections-our-hololens-inventory-ryan-atkins/" style="color: #a0c73f; text-decoration: none;">here.</a>
<br /><br />
We have been working hard to make this training material available to everyone. To help you get started with mixed reality development and design, you can find our Kindle eBook on
Amazon, <a href="https://www.amazon.com/dp/B07DQDLQB8/" style="color: #a0c73f; text-decoration: none;">Developing and Designing for Mixed Reality.</a>
<br /><br />
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVvQMPqGSOYesHp87ZI27-EV6z8ihmReFcmQXF95OMwhQHgMi703LAqOVt0iQNQZ_mFmRsnUcDkzvJu3NABvdvJHROaccLcqSRZ8DC7Cqs4qirq3Y8QvW_vXQihz-M_3RqyqFtkj6OmUg/s1600/MR_Guide_Cover_V01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="1132" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVvQMPqGSOYesHp87ZI27-EV6z8ihmReFcmQXF95OMwhQHgMi703LAqOVt0iQNQZ_mFmRsnUcDkzvJu3NABvdvJHROaccLcqSRZ8DC7Cqs4qirq3Y8QvW_vXQihz-M_3RqyqFtkj6OmUg/s320/MR_Guide_Cover_V01.jpg" style="border: 1px solid #000000;" width="226" /></a></span></span></span></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"></span><br />
<div style="text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><i><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: x-small;">'Developing and Designing for Mixed Reality' eBook</span>
</i></span></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
</span>
<div style="text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><i><br /></i></span></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
We have also put together a LinkedIn Learning course, <a href="https://www.linkedin.com/learning/mixedreality-%20development-fundamentals" style="color: #a0c73f; text-decoration: none;">Mixed Reality Development Fundamentals.</a>
<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjr8X6LGQLJ237_s1_tcV4Kp_POcLkpAfRXLmz7Bv40QSGzr_se_kEM6Tulbq2dlkVaEC8DRFYy-xj91G5T9ubpC94b6zsIncRMZw0Ser0GJ3lhaApzHt3R1-vO_9wXPXUOpbaPZu-4MX0/s1600/mixed_reality_training.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="900" data-original-width="1600" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjr8X6LGQLJ237_s1_tcV4Kp_POcLkpAfRXLmz7Bv40QSGzr_se_kEM6Tulbq2dlkVaEC8DRFYy-xj91G5T9ubpC94b6zsIncRMZw0Ser0GJ3lhaApzHt3R1-vO_9wXPXUOpbaPZu-4MX0/s400/mixed_reality_training.jpg" width="400" /></a></div>
<br /><br />
The labs we have been running to teach developers how to add AI to their mixed reality applictions can be found in the <a href="https://docs.microsoft.com/en-us/windows/mixedreality/academy" style="color: #a0c73f; text-decoration: none;">Microsoft Mixed Reality Academy.</a>
<br /><br />
We hope you can learn from all this content and build some beautiful mixed reality experiences that incorporate AI.
<br /><br />
nsquared solutions
</span>nsquaredhttp://www.blogger.com/profile/17802027489389881952noreply@blogger.com0tag:blogger.com,1999:blog-1309846465832839404.post-17275804344267043642018-07-08T20:29:00.000-07:002018-07-08T20:29:55.260-07:00The Joys of Forking<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
Some programming situations require handing off data processing sub-tasks to different processes, rather than to background threads; the ways in which you can do that are discussed in this blog.
<br /><br />
In many programming languages, on many types of CPUs, a single process (or thread) runs on a single CPU core. Threads created by a process, share time on the single CPU core with the main-line of the program. If you have a multi-processor CPU, your application is going to leave all the other cores in the CPU idle if your application is organised as a single process with threads. That might not matter on high powered machines, but it can become an issue on small, slower, devices (e.g. IOT devices, or mobile phones) that might have to do serious data crunching: perhaps in a signal processing, or AI machine learning environment.
<br /><br />
Let’s look at some ways of making an application run on multiple CPU cores. For this blog we will use Python, although in a Linux environment most languages have inherited equivalent methods all deriving from the original C implementations.
<br /><br />
In Python, there are basically two ways of starting another application from within an initial parent application. You can use the “Popen” method from the “subprocess” module, or the “fork” method from the “os” module. Either method results in a separate process running alongside the parent process, and hopefully, the OS will assign the new process to a CPU core of its own. Each process may need to use the “os” method, “nice”, to set its priority high enough to get a core, or the Linux shell command “taskset” might be required to set the affinity of a process to a specific CPU core.
<br /><br />
Using “Popen”, or “fork”, will depend on the amount, and type, of data you need to pass to the child process from the parent process. “Popen” passes command line parameters to the child (which is launched from the file referenced in the command line parameters). On the other hand, “fork” causes the parent process to be duplicated and continue executing from the fork point in the code. This makes “fork” a very interesting mechanism. Let’s look at the code in a typical “fork” scenario:
<br /><br />
<span style="color: #777777;">
<span style="padding-left: 50px;">.</span><br />
<span style="padding-left: 50px;">. application sets up data, class instances, and so on, ready for use by both parent and child</span><br />
<span style="padding-left: 50px;">.</span><br />
<span style="padding-left: 50px;">some_data_to be passed_on = [5, 6, 7, 8]</span><br />
<span style="padding-left: 50px;"># once the common code is done, we are ready to split into 2 processes</span><br />
line 1 <span style="padding-left: 7px;">parent_pid = os.getpid()</span><br />
line 2 <span style="padding-left: 7px;">fork_pid = os.fork()</span><br />
line 3 <span style="padding-left: 7px;">if fork_pid == 0:</span><br />
<span style="padding-left: 90px;"># this branch is running the child process</span><br />
<span style="padding-left: 90px;"># the fork method returns 0 in the child process</span><br />
<span style="padding-left: 90px;"># we can find out our pid as the child process</span><br />
line 4 <span style="padding-left: 46px;">child_pid = os.getpid()</span><br />
<span style="padding-left: 90px;"># now we add code which does the tasks required of the child</span><br />
line 5 else:<br />
<span style="padding-left: 90px;"># this branch is running in the parent process, the assert below will pass</span><br />
line 6 <span style="padding-left: 46px;">assert os.getpid() == parent_pid</span><br />
<span style="padding-left: 90px;"># now we add code which does the tasks required of the parent</span><br />
line 7 <span style="padding-left: 7px;"># statements following the “if” “else”</span>
</span>
<br /><br />
The fork operation can be confusing to use, even though it has some extremely useful characteristics, so we need to go through the numbered lines above to make things clear.
<br /><br />
At line 1, a variable is set to the process id (pid) of the parent process, which has run through its code down to line 1. At line 2, the fork operation is invoked. The fork copies the current application (which we are calling the parent here) including its working memory, its current stack, and the state of all its open files, and lets the copied application (which we are calling the child process) run from line 3. The original process is still alive, and it also moves on to line 3.
<br /><br />
If both the parent and child are the same, and execute the same code, how will the child do something different to the parent? The answer is in the value returned by the fork operation, which is being examined by both the parent and child, at line 3. In the child process, the fork operation returns zero while in the parent, the value returned is non-zero. The outcome is that the child process will execute line 4, after line 3, while the parent process will follow the “else” at line 5 and execute line 6 after line 3.
<br /><br />
When there is a need to pass the child process a great deal of information, forking provides the opportunity for any amount of data to be prepared. From the example above, both the child and parent inherit the local variable “some_data_to be passed_on” and its value among all the other variables local and global.
<br /><br />
In summary, the fork operation is a very powerful way of passing lots of data to a child process, but it requires some care in its use. BOTH processes (unless they terminate early) will arrive at line 7. Depending on the application design, it may be perfectly fine for both processes to proceed through the code following line 7, but on the other hand it might be an unexpected problem. It’s an unusual mindset for a programmer to look at a single piece of code from the point of view of two (or even more) processes and keep track of what should happen in them at the same time.
<br /><br />
nsquared solutions
<br /><br />
</span>nsquaredhttp://www.blogger.com/profile/17802027489389881952noreply@blogger.com0tag:blogger.com,1999:blog-1309846465832839404.post-92143822398326185562018-07-02T16:58:00.001-07:002018-07-02T16:58:21.847-07:00Mixed Reality<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
Mixed reality (MR) was defined in 1994 by Paul Milgram and Fumio Kishino as "...anywhere between the extrema of the virtuality continuum". Microsoft has adopted the term for its own platform, Windows Mixed Reality, to help group Virtual and Augmented reality. The technology has been accessible to developers and businesses for a few years now, yet, the clear majority of applications belonging to this not-so-new market are still mainly composed by single person experiences.
<br /><br />
This is surely appropriate for a lot of business cases, such as visualisation of data that should only be accessible by the interested party, or training on specific single-user scenarios.
<br /><br />
It is also not surprising that a person wearing a headset, gives the impression of “digital isolation” and inspires the idea that MR is more suitable for solo experiences and one-to-environment interactions. An impression that is often misleading.
<br /><br />
If we talk about games and entertainment, for example, several multi-player experiences show that it is possible to create immersive and engaging virtual experiences, where users interact with each other and share the same content.
<br /><br />
In the business environment, however, not only does there seem to be a resistance for adopting MR, but it is evident to us, that there is a lack of understanding of how this technology could improve collaboration and productivity within teams, possibly involving clients as well.
<br /><br />
What could these scenarios be? The list is literally never-ending.
<br /><br />
Obviously, any kind of situation that requires cooperation and involves expensive set-ups or dangerous situations, could potentially be recreated in a digital version. Reducing costs and risks is surely an objective of most companies, if not all, and MR could easily be leveraged to achieve better results with lower risks and costs.
<br /><br />
Thinking out of the box is paramount for business oriented people (and developers), wishing to work with bleeding edge technologies. Developers who want to engage and experiment in building mixed reality applications, for cooperative scenarios can really go wild, since not much has so far hit the public eye in a significant way.
At nsquared, we have brainstormed several scenarios related to what we do best: facilitating cooperation in the work space and improving the outcomes of business meetings.
<br /><br />
Our development facility, featuring multiple Microsoft HoloLens’ and immersive headsets allowed us to experiment and develop several ideas and solutions that would be compelling to many businesses using meeting spaces, multi-user interaction, and visual data. Difficult to explain in words, even more difficult to understand the potential of this technology unless you try first hand.
<br /><br />
If you are interested in seeing how mixed reality could change the way you do business, contact us and book a hands-on demonstration.
<br /><br />
nsquared solutions
</span>nsquaredhttp://www.blogger.com/profile/17802027489389881952noreply@blogger.com0tag:blogger.com,1999:blog-1309846465832839404.post-15171154775368029202018-07-02T01:24:00.001-07:002018-07-02T01:24:16.650-07:003D Printing<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
3D printing, or more specifically, additive manufacturing, is a manufacturing process the involves building 3D objects by adding layer upon layer of material to create the final product. Fused Deposition Modelling (FDM) is the most common type of additive manufacturing, especially among household printing technologies.
<br /><br />
In this blog, we are going to teach you <b>the basics</b> of how to prepare a file for 3D printing using <a href="http://www.flashforge.com/support-center/flashprint-support/" style="color: #a0c73f; font-weight: bold; text-decoration: none;">FlashPrint software</a>, which is free. Do not fiddle with the specifics of the settings until you have become more familiar with using the printer.
<br /><br />
<b>Keywords</b><br />
<i>Extrude:</i> The process of forcing out a thin layer of plastic.<br />
<i>Infill/Fill Density:</i> The percentage of material that is printed inside of the outer shell of an object. There are different shapes that can be used to create the infill pattern inside of solid object.
<br /><br />
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggwSieYMTA3EmZ67dH9wNcfWd4PII7F1h_KIuvTPxp64J57XfGDSVEUVgJ1e_VIAvHF5zVWW0BGpml_Mp3_9ktdlhE-qEUpCYqOMi-wAP39_gmhKyvPP5vX7II4xqUIpYWnCqOEiNzntY/s1600/filldensity.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="118" data-original-width="630" height="59" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggwSieYMTA3EmZ67dH9wNcfWd4PII7F1h_KIuvTPxp64J57XfGDSVEUVgJ1e_VIAvHF5zVWW0BGpml_Mp3_9ktdlhE-qEUpCYqOMi-wAP39_gmhKyvPP5vX7II4xqUIpYWnCqOEiNzntY/s320/filldensity.png" width="320" /></a></span></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<br /><br />
<i>Filament:</i> The material that is fed out of the printer.<br />
<i>Print bed:</i> The surface that the object is printed onto.<br />
<i>Raft:</i> Layer, or layers, of extruded thermoplastic that is used to stabilise a printed object. A raft helps an object to adhere to the print bed.
<br /><br />
<b>File preparation</b><br />
First you need to create a universal 3D file that the 3D printing software can open. STL is usually the easiest to use but fpp, x3g and obj files are also compatible. Open the 3D file that you have and it will appear in your window. You can pan and rotate around by holding the left or right mouse buttons and scroll to zoom in or out. Make sure that under ‘Print’, the machine type is set as ‘FlashForge Creator Pro’.
<br /><br />
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVR22mYvw1NIpWMn_zR9qgBk_GwLkTg9FnfvB_iFXUAsv2Tfs1G0TCBhBweGtVoAIt6uwAVQR_G2Y_VCmvQayH4vUumklzAXaELH0WjkWMScZHx2hWqXGBhUp2FSuZSBL3jbNV_hmcMCM/s1600/FlashforgeSS1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="748" data-original-width="962" height="248" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVR22mYvw1NIpWMn_zR9qgBk_GwLkTg9FnfvB_iFXUAsv2Tfs1G0TCBhBweGtVoAIt6uwAVQR_G2Y_VCmvQayH4vUumklzAXaELH0WjkWMScZHx2hWqXGBhUp2FSuZSBL3jbNV_hmcMCM/s320/FlashforgeSS1.png" width="320" /></a></span></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<br /><br />
Use ‘Move’ to move the object around the bounds of the print area. In this submenu, use ‘On Platform’ to choose a face and select it as the face that is in contact with the platform.
<br /><br />
Use ‘Rotation’ to rotate the object in any axis, as well as choose a surface to rotate to the platform.
<br /><br />
Use ‘Scale’ to change the scaling of the object.
<br /><br />
Use ‘Cut’ to slice the object.
<br /><br />
Use ‘Extruder’ to choose to print the object using the left or right extruder.
<br /><br />
<b>Supports Options</b>
<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2ViTE2tolmXdLMpJn8mCXRDzxlDfcf8LtvHvG9PHKjpu6sDVlweYQfHn_YyiED6Cusx6cCQgLYZ30aYry26eb45hEHeeY19aJIP2Qcw3UfyN7i41g8Tz489bFXcb3Yr-ORKQbBSejkLo/s1600/FlashforgeSS2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="422" data-original-width="957" height="141" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2ViTE2tolmXdLMpJn8mCXRDzxlDfcf8LtvHvG9PHKjpu6sDVlweYQfHn_YyiED6Cusx6cCQgLYZ30aYry26eb45hEHeeY19aJIP2Qcw3UfyN7i41g8Tz489bFXcb3Yr-ORKQbBSejkLo/s320/FlashforgeSS2.png" width="320" /></a></div>
<br /><br />We recommend using the ‘Linear’ support type, and sticking to the default settings. This will be required if your part has overhang. Click on the ‘Auto Supports’ button and the program will automatically create the required supports for your object. Then click 'Back', click ‘No’, and if you are ready, we can move onto the Print settings.
<br /><br />
<b>Print settings</b>
<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYEPzUzkkhULoM3wZPYE9fxZKkQa-4tJ8zfSU0nwDhyphenhyphen-ppoy1JzcGcmp5aKWug65IJkeGoRQ-tqED6W9zULAmIc2V9vFS4dxlEE-ZEwrm9V0B37voLF_n8f4O4X2MiRByfGJO92dvepgc/s1600/FlashforgeSS3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="748" data-original-width="961" height="249" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYEPzUzkkhULoM3wZPYE9fxZKkQa-4tJ8zfSU0nwDhyphenhyphen-ppoy1JzcGcmp5aKWug65IJkeGoRQ-tqED6W9zULAmIc2V9vFS4dxlEE-ZEwrm9V0B37voLF_n8f4O4X2MiRByfGJO92dvepgc/s320/FlashforgeSS3.png" width="320" /></a></div>
<br /><br />
First, make sure the 'Material Left' and 'Material Right' (extruders) are the same as the ones installed onto the printer. At the time of writing, both extruders have ABS filament installed (black and white). 'Supports' can be left on 'Automatch', but it refers to whether supports are printed by the left or right extruder. The 'Raft' setting will enable or disable the raft. If you disable the raft then it is important to monitor the printer during the start of its printing process to ensure that the extrusion is sticking to the bed during the first layer. The 'Resolution' setting tells you how thick each layer will be, and therefore how fine the detail of the print will be.
<br /><br />
In the ‘Infill’ tab, you can set the percentage and fill pattern used in the infill. For objects where the internal solid structural strength is important, the higher the infill should be used, up to 100%. We recommend that the minimum infill percentage should be 30%.
<br /><br />
<b>Recommended temperatures</b><br />
<i>Extruder Temperature:</i> ABS: 230C PLA: 200C <br />
<i>Platform Temperature:</i> ABS: 100C PLA: 50C
<br /><br />
Once you have chosen your Print settings, click 'OK' to save the file onto an SD card and then you can move onto the Printer setup.
<br /><br />
<b>Printer setup</b><br />
Plug in the SD card and turn on the printer using the switch found at the rear left of the printer. Select ‘Print from SD’ and find the path to the file that you have saved.
<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4sqFGFGj5_s2Dz4XeptteF_DkwHUcydOUQcJdGhAH3DEODpVFPf4_FC0DSPiMbT1997vbbuIukSYy-eoS6QjntryuAHe3_dJIWyYyHOJ-d5tq3fj6jsmkbJjwdqjcZgbkVarUMC6n0bg/s1600/IMG_20180702_165140.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4sqFGFGj5_s2Dz4XeptteF_DkwHUcydOUQcJdGhAH3DEODpVFPf4_FC0DSPiMbT1997vbbuIukSYy-eoS6QjntryuAHe3_dJIWyYyHOJ-d5tq3fj6jsmkbJjwdqjcZgbkVarUMC6n0bg/s320/IMG_20180702_165140.jpg" width="320" /></a></div>
<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQQQflMG3Rk69MA8qpkISt_VFHvohAefZHZz6O-kHUExCfI_p3HfKIiO7570D1JkC40tWKYAllCBULr2vIG_hBEi87R752DDfZs-V1jja9SjHjk2Uk2iRRtdHjrKac8Pt-B-sPCp6WXvU/s1600/IMG_20180702_165149.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQQQflMG3Rk69MA8qpkISt_VFHvohAefZHZz6O-kHUExCfI_p3HfKIiO7570D1JkC40tWKYAllCBULr2vIG_hBEi87R752DDfZs-V1jja9SjHjk2Uk2iRRtdHjrKac8Pt-B-sPCp6WXvU/s320/IMG_20180702_165149.jpg" width="320" /></a></div>
<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiK1jlUkgPnEKbLYiez0elh33Y8hec1-pux9rnIMoolH5tIB13M-EkQwxnqdjy6naSNlo43Xavm2i8gaC8rIi8MwdlmIBzcPuFxR7I_IYjeOgAThm5s_77U5h0xhbHEtBMG9bpYn0KR1WY/s1600/IMG_20180702_165204.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiK1jlUkgPnEKbLYiez0elh33Y8hec1-pux9rnIMoolH5tIB13M-EkQwxnqdjy6naSNlo43Xavm2i8gaC8rIi8MwdlmIBzcPuFxR7I_IYjeOgAThm5s_77U5h0xhbHEtBMG9bpYn0KR1WY/s320/IMG_20180702_165204.jpg" width="320" /></a></div>
<br /><br />
Here we have clicked on the file ‘dual test.x3g’. The printer will take some time to begin heating, and will commence printing once the heating process has finished.
<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivWPDxKGdqNjwVInt67WerW6EwUcteW8PfsmToZk2S2vBO48CwDH6UIh3OU_oAbW60FlY1RlmIGZxO1rjk20fJi8ihPRd6ucQ32FgMQ2D7uD6yF0GNGtIpYDZIJkAl7SAu15JShyphenhyphen_bwHM/s1600/IMG_20180702_165240.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivWPDxKGdqNjwVInt67WerW6EwUcteW8PfsmToZk2S2vBO48CwDH6UIh3OU_oAbW60FlY1RlmIGZxO1rjk20fJi8ihPRd6ucQ32FgMQ2D7uD6yF0GNGtIpYDZIJkAl7SAu15JShyphenhyphen_bwHM/s320/IMG_20180702_165240.jpg" width="320" /></a></div>
<br /><br />
It is a good idea to monitor the first layer to verify that it adheres well to the build surface, and then also periodically each hour after that.
<br /><br />
nsquared solutions
</span>nsquaredhttp://www.blogger.com/profile/17802027489389881952noreply@blogger.com0tag:blogger.com,1999:blog-1309846465832839404.post-58093957152605822162018-06-14T01:58:00.000-07:002018-06-14T01:58:04.007-07:00Creating a PowerApp with a SharePoint list as its datasource<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
PowerApp is a Microsoft service that lets you quickly create apps for displaying and manipulating data. In this blog post, we will be going through how to create a PowerApp for saving, viewing, and editing, info that is saved as a SharePoint list and is accessible to everyone in an organisation.
<br /><br />
First, we will look at creating a SharePoint list from an Excel sheet.
<br /><br />
1. Open an existing Excel sheet that you want to use for your PowerApp. Select the data in the Excel sheet and format it as a table.
<br /><br />
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimc_iE0byAE5yL39K084K3vWIcndO8l6BggUSX89h84UUXrluFCxlXwZHOaSOh_U1ouyS6UMqmSBsk90K9F1in6i970Y5pqZpH_s6bttMaaJe4rdsK0CArs7ygKMEewa9UNLw7iu_3mjg/s1600/Image_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="808" data-original-width="1134" height="285" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimc_iE0byAE5yL39K084K3vWIcndO8l6BggUSX89h84UUXrluFCxlXwZHOaSOh_U1ouyS6UMqmSBsk90K9F1in6i970Y5pqZpH_s6bttMaaJe4rdsK0CArs7ygKMEewa9UNLw7iu_3mjg/s400/Image_1.png" width="400" /></a></span></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<br /><br />
2. Login to SharePoint. From the <span style="font-style: italic; font-weight: bold;">New</span> tab, select <span style="font-style: italic; font-weight: bold;">App</span>.
<br /><br />
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhby78BMVI29_BYZsDTJXaiqzWTOmkqTtA6t6K3b1ONl7HJuGtRtNr2j77sb9CY6QF6fyAZzggc-alTZJYl-0ocfGcsPV6_2nyHKLvSuHtkxTdp9GTjbLm1MQQH4jeBOeDl5FUHQ8kqGzI/s1600/Image_2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1206" data-original-width="1600" height="301" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhby78BMVI29_BYZsDTJXaiqzWTOmkqTtA6t6K3b1ONl7HJuGtRtNr2j77sb9CY6QF6fyAZzggc-alTZJYl-0ocfGcsPV6_2nyHKLvSuHtkxTdp9GTjbLm1MQQH4jeBOeDl5FUHQ8kqGzI/s400/Image_2.png" width="400" /></a></span></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<br /><br />
3. Search for <span style="font-style: italic; font-weight: bold;">“Spreadsheet”</span> and click <span style="font-style: italic; font-weight: bold;">Import Spreadsheet</span> from the search result.
<br /><br />
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWiaT6OIJ7vnucpnyH0oHUQyWwTJZUKPV9Q3kDPbJWY3Te4BjfKHXk8jJIuTkuu7vbqGg32XsRBCKbO2jsumihS3Q-FbsmUR_xy3q-5DGv16Ei5BnGn5fETRrdCsu_R4SR2X3Hhl4sHtI/s1600/Image_3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1110" data-original-width="1335" height="332" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWiaT6OIJ7vnucpnyH0oHUQyWwTJZUKPV9Q3kDPbJWY3Te4BjfKHXk8jJIuTkuu7vbqGg32XsRBCKbO2jsumihS3Q-FbsmUR_xy3q-5DGv16Ei5BnGn5fETRrdCsu_R4SR2X3Hhl4sHtI/s400/Image_3.png" width="400" /></a></span></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<br /><br />
4. Browse the Excel sheet you used in Step 1 and click <span style="font-style: italic; font-weight: bold;">Import</span>.
<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2StOLAy3bHUzKEYSOW-3LdJe1XBoHTpPRVvGR3kdAdN_jXft6lcSLEgg_zCz_n8OCMa9ljF9Zp7VHEXjJ8wlEGpcFvFWEWDPHyHxW0hAwvF5OxnrwVbw5B-HOyJy1uQPQKLtkc1XJd8Y/s1600/Image_4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="979" data-original-width="1600" height="243" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2StOLAy3bHUzKEYSOW-3LdJe1XBoHTpPRVvGR3kdAdN_jXft6lcSLEgg_zCz_n8OCMa9ljF9Zp7VHEXjJ8wlEGpcFvFWEWDPHyHxW0hAwvF5OxnrwVbw5B-HOyJy1uQPQKLtkc1XJd8Y/s400/Image_4.png" width="400" /></a></div>
<br /><br />
<b>NOTE:</b> You might face one of these issues when trying to import the Excel sheet to SharePoint as a list.<br />
- <i>Error: “Specified file is not a valid spreadsheet or contains no data to import.” </i><br />
Solutions that worked for me: add SharePoint URL to your browsers trusted sites list.<br />
- <i>Error: “This feature requires a browser that supports ActiveX controls.”</i><br />
Solution that worked for me: as I was using Google Chrome on a Windows machine, installing the Internet Explorer (IE) tab extension on Google Chrome, then open SharePoint from the IE tab. The IE tab is not available for OSX.
<br /><br />
You have successfully imported the Excel sheet table as a list in SharePoint.
<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIyNDJh7hsA7Inqqpd1gy0PaBfINMIltC9kRA5PHqXBt_foYTg62hCF-B_r6At-EuI9m_dVuzrXP0hz2HBZUr24k2WqieyK21wV2tbEmGiVU4MPAV5qts5H_5Bv2sqi0rkQ6g3HFdW7OE/s1600/Image_5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="810" data-original-width="1600" height="201" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIyNDJh7hsA7Inqqpd1gy0PaBfINMIltC9kRA5PHqXBt_foYTg62hCF-B_r6At-EuI9m_dVuzrXP0hz2HBZUr24k2WqieyK21wV2tbEmGiVU4MPAV5qts5H_5Bv2sqi0rkQ6g3HFdW7OE/s400/Image_5.png" width="400" /></a></div>
<br /><br />
5. We will now use this list to create a PowerApp. To do this, from your list, click on the <span style="font-style: italic; font-weight: bold;">PowerApps</span> drop-down control, on the menu bar, and select <span style="font-style: italic; font-weight: bold;">Create form app</span>.
<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimkzBTCSHKo6zgcKDSnEW7WjDzaxw3x92vxMk66xsTV3IUwZ4dGH38cDLrC7_8GroYqHuryJCVFYhGETbSn8MiOsRZ00-kiBTp_GZ6PMf1UNP6iq8mOrvaB2JaoX8Kk9Fb-s2OQ544bVE/s1600/Image_6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="845" data-original-width="1600" height="211" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimkzBTCSHKo6zgcKDSnEW7WjDzaxw3x92vxMk66xsTV3IUwZ4dGH38cDLrC7_8GroYqHuryJCVFYhGETbSn8MiOsRZ00-kiBTp_GZ6PMf1UNP6iq8mOrvaB2JaoX8Kk9Fb-s2OQ544bVE/s400/Image_6.png" width="400" /></a></div>
<br /><br />
A new PowerApp with the SharePoint list as datasource will be automatically generated. This PowerApp displays a list of items. You can view the item details by clicking on <span style="font-style: italic; font-weight: bold;">(>)</span> next to each item. You can also edit the details of an item using this PowerApp.
<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbijC-IncLl7h_IMfslVp_igwsjHdpdHANjYOtDNuii397VAnc4Xf-f8_Lq0KMF5ySZqlzs-gqrxhBNPVgSHNQe9pkDuQDLVU8M-0ISlD0brCvOKIxSAi29U_lAtj8RxKH1PmWXdGPr7g/s1600/Image_7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="954" data-original-width="1600" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbijC-IncLl7h_IMfslVp_igwsjHdpdHANjYOtDNuii397VAnc4Xf-f8_Lq0KMF5ySZqlzs-gqrxhBNPVgSHNQe9pkDuQDLVU8M-0ISlD0brCvOKIxSAi29U_lAtj8RxKH1PmWXdGPr7g/s400/Image_7.png" width="400" /></a></div>
<br /><br />
Your PowerApp is now ready to be published so that it can be useful to everyone in the organisation.
<br /><br />
Sabina Pokhrel
</span>nsquaredhttp://www.blogger.com/profile/17802027489389881952noreply@blogger.com0tag:blogger.com,1999:blog-1309846465832839404.post-57245381493727648172018-06-04T23:32:00.000-07:002018-06-04T23:45:52.348-07:00Cross-Referencing using Adobe InDesign<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
Documentation is sometimes the most critical part of a project. Whether it is internal, or product documentation, finding a way to automate documentation can save a lot of time, and reduce the amount of mistakes that can be made if changed manually.
<br /><br />
At nsquared, all our software comes with an extensive user guide for customers to follow, so it’s important for us to automate as much as possible.
<br /><br />
The following steps will show you how to create Text Anchors, and create Cross-References to these anchors to automate referencing within your document. For example, if there are references in your document, such as, “…refer to <b>Chapter 5</b> on page 54”, the chapter name and page number will be automated. If the chapter moves from page 54, the reference will automatically update.
<br /><br />
<span style="text-decoration: underline;">Note:</span> This guide assumes that you have an intermediate level of experience with InDesign.
<br /><br /><br />
<i>Creating Text Anchors</i>
<br /><br />
1. With your document open, identify the text you would like to define as Text Anchors. Typically, these Text Anchors are chapters, headings, and sub headings. For example, <b>Chapter 5</b>.<br />
2. Once you have identified the Text Anchors, highlight the text.<br />
3. Open then <i>Hyperlinks</i> window by going to the <i>Window</i> menu, <i>Interactive > Hyperlinks</i>.<br />
4. With the text highlighted, click the hamburger menu icon in the top right corner of the <i>Hyperlinks</i> window, then click <i>New Hyperlink Destination</i>.<br />
5. A pop up window will appear. From the <i>Type</i> dropdown, select <i>Text Anchor</i>.<br />
6. Give the Text Anchor a <i>Name</i>. It is recommended that the name of the Text Anchor is the same as the text highlighted. This will make it easier to Cross-Reference later, which we will cover in the next section. For this example, we will call the Text Anchor <b>Chapter 5</b>.<br />
7. Click <i>OK</i>.<br />
8. Repeat steps 4-7 to create all the Text Anchors in your document.
<br /><br /><br />
<i>Inserting Cross-References through your document</i>
<br /><br />
1. Now it is time to reference the Text Anchors. Click where you want to insert a reference in your document. For example, taking the example from above, “…refer to <b>Chapter 5</b> on page 54”.<br />
2. Go to the <i>Type</i> menu, <i>Hyperlinks & Cross-References > Insert Cross-Reference</i>.<br />
3. From the <i>Link To</i> dropdown, select <i>Text Anchor</i>.<br />
4. From the <i>Document</i> dropdown, make sure the document you are working on is selected.<br />
5. From the <i>Text Anchor</i> dropdown, select the correct Text Anchor for this reference. For this example, we will find <b>Chapter</b> 5.<br />
6. From the Format dropdown, select the format you wish. These formats can be edited further by clicking the pencil icon.<br />
7. Click <i>OK</i>.<br />
8. Repeat steps 1-7 to insert all Cross-References in your document.<br />
<br /><br />
Now you have automated all references throughout your document. Now, if you rename a Text-Anchor, or it has moved to a different page, all Cross-References will automatically update.
<br /><br />
No more incorrect referencing!
<br /><br />
Jessica Ayad</span>nsquaredhttp://www.blogger.com/profile/17802027489389881952noreply@blogger.com0tag:blogger.com,1999:blog-1309846465832839404.post-36387068942451618102018-05-30T22:07:00.000-07:002018-05-30T22:07:50.923-07:00Test Driven Development (TDD)<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
What is TDD? How is it different from Unit Tests? How many tests should one write when using a TDD approach? - These and many more questions come to our mind when we think or decide to take a TDD approach.
<br /><br />
TDD stands for Test Driven Development and is different from writing Unit Tests Unit Tests refer to what you are testing, -where-as TDD describes when you are testing. To simplify this, with Unit tests we test and verify the smallest possible unit of behavior, wherein with TDD the tests drive the development. We can say that Unit tests are a part of a TDD approach where we write tests before writing the code. It can include Unit tests, functional tests, behavioral tests, acceptance tests, etcetera.
<br /><br />
The idea looks simple in theory, and represents a fundamental change to approaching software development.
<br /><br />
<span style="font-weight: bold;">Red-Green-Refactor cycle:</span>
<br />
The key to TDD is the Red-Green-Refactor cycle. Write tests that fail, fix the code and run the tests again - repeat this until they pass. The below diagram explains it well:
<br /><br />
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQkORz3_VW7qzeF2i690w1Z40IOAUraiLFcSqbsP8lW1Tp0Fp4DI9tlcuVkY9E8Hbiry1BhakH6TZRsOkvbIIqJqem-2o74L9QqtEv7zyvdFEVzn8vGGbLljIN4iz_O8XlZ40-fQa2hSU/s1600/image01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="395" data-original-width="440" height="286" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQkORz3_VW7qzeF2i690w1Z40IOAUraiLFcSqbsP8lW1Tp0Fp4DI9tlcuVkY9E8Hbiry1BhakH6TZRsOkvbIIqJqem-2o74L9QqtEv7zyvdFEVzn8vGGbLljIN4iz_O8XlZ40-fQa2hSU/s320/image01.png" width="320" /></a></span></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<span style="font-style: italic;">Source: <a href="https://centricconsulting.com/case-studies/agile-test-driven-development/">https://centricconsulting.com/case-studies/agile-test-driven-development/</a></span>
<br /><br />
<span style="font-weight: bold;">Workflow:</span>
<br />
<span style="color: red;">RED</span> - Write a failing test which captures the requirements.<br />
<span style="color: green;">GREEN</span> - Implement the functionality by writing just enough code to pass the test.<br />
<span style="color: blue;">REFACTOR</span> - Refine/improve the code without adding any new functionality.
<br /><br />
And then repeat the whole cycle.
<br /><br />
In my opinion, it is always helpful to see the code tested upfront using this painless testing approach. It gives a sense of confidence to us before we start end-to-end tests for the project. Not only this, I believe it gives a fair indication of code coverage, fewer defects and easy maintenance as well.
<br /><br />
As important as it is to start with this approach, it is equally important to make modifications, whilst continuing using the approach. Considering a real-world situation, applications change and over time a method may be removed/added/modified. While making any modifications in the code at a later stage in time, we should run all the tests written until now to ensure that we did not break any functionality while adding/modifying code. In my experience, this reduces the testing time by more than half.
<br /><br />
It is very important to monitor the code coverage though the development/maintenance cycle of the application. With code coverage, we get to know if any code is not being called by a test. The two scenarios that will be applicable here are: the code is missing a corresponding test, or it is dead code and needs to be removed.
<br /><br />
As writing-running-fixing tests consumes time, it is very tempting to put the writing of tests on the back-burner. The most pressing and difficult aspect of this is to keep the discipline and continue the practice. When it comes to shipping robust, high quality products the benefits of this approach are rewarding!
<br /><br />
At nsquared we are working using TDD on our latest products. If you want to find out more about how we work, please get in touch.
<br /><br />
Tripti Wani
</span>nsquaredhttp://www.blogger.com/profile/17802027489389881952noreply@blogger.com0tag:blogger.com,1999:blog-1309846465832839404.post-43745850970030716142018-05-21T18:01:00.000-07:002018-05-21T18:20:17.223-07:00Documentation for today's programmer<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
When creating documentation, whether for a project, lab, or technical, you would have run into the challenge of needing to move that documentation to different formats: PDF is a popular one, but perhaps also HTML, particularly if your company uses a wiki for such things. At nsquared, we found that this movement of documents can get frustrating, not only because they do not always come across cleanly, but also because if they are different, you then have to maintain a bunch of different documents. Time to solve this, using tools which are freely available: <a href="https://www.markdownguide.org/" style="color: #a0c73f; font-weight: bold; text-decoration: none;">Markdown</a>, <a href="https://pandoc.org/" style="color: #a0c73f; font-weight: bold; text-decoration: none;">Pandoc</a>, and <a href="https://docs.microsoft.com/en-us/powershell/scripting/powershell-scripting?view=powershell-6" style="color: #a0c73f; font-weight: bold; text-decoration: none;">PowerShell</a>.
<br /><br />
The solution is reasonably simple. You can still write your document up in your favourite word processor, however, keep the formatting to a minimum (avoid anything more complex than bold, italics, and hyperlinks; also, you can add images, but do not do it in your word processor). Once you have your file ready, save it out as a <i>.docx</i>, so that we can get underway in earnest. The first part covers converting your document to the Markdown format.
<br /><br />
<span style="font-style: italic; font-weight: bold;">Steps to convert from docx to Markdown:</span>
<br />
1. Download and install <a href="https://code.visualstudio.com/" style="color: #a0c73f; font-weight: bold; text-decoration: none;">Visual Studio Code</a>.</span><br />
<ul><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<li>- We will use this to edit your document later, but essentially this will be your go to program very soon.</li>
</span></ul>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
2. Download and install the <a href="https://github.com/jgm/pandoc/releases/tag/2.2.1" style="color: #a0c73f; font-weight: bold; text-decoration: none;">Pandoc installer</a> (download the latest Windows ‘x86_64.msi’ file).</span><br />
<ul><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<li>- Pandoc is a freely available program online, which will handle the conversion of your documents. It supports a <a href="https://pandoc.org/index.html" style="color: #a0c73f; font-weight: bold; text-decoration-line: none;">host of outputs</a>, including: <i>docx</i>, <i>HTML</i>, <i>Markdown</i>, <i>PDF</i>, <i>latex</i>, and <i>txt</i>, just to name a few.</li>
</span></ul>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
3. If you are running Windows 10, you will already have PowerShell available to you. This solution is written for Windows, though is transferable to Apple Mac, via the use of Terminal. Once you are ready, launch PowerShell (found by typing 'power' into the search of the Windows menu). <br />
4. You now need to navigate PowerShell to the location of your document. Generally, it will start in your user folder (C:\Users\YourAccount). You can use the 'cd' command, plus the path of your document to get there quickly:</span><br />
<ul>
<li><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">- Type: <i>cd 'C:\Users\YourAccount\Documents'</i>.</span></li>
<li><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">- Make sure to replace the path section with the location of your document (the above uses 'Documents' as that location). </span></li>
</ul>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
5. With the above completed, you will notice that the path that PowerShell is using is what you just typed - this means that it is now using this location as the point from which to execute commands.<br />
6. Now it is time to utilise Pandoc. In PowerShell, type: <i>pandoc 'YourDoc.docx' -f docx -t markdown -s -o 'YourNewDoc.md'</i></span><br />
<ul>
<li><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">- Make sure to substitute 'YourDoc' with the name of your current document, and update 'YourNewDoc' to have a name which you want, for your converted file.</span></li>
<li><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">- If you want to know about the commands available for Pandoc, make sure to visit their <a href="https://pandoc.org/MANUAL.html" style="color: #a0c73f; font-weight: bold; text-decoration-line: none;">documentation page</a>.</span></li>
</ul>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
7. With that all in place, press the <i>Enter</i> key on your keyboard to run the command.<br />
8. Your document will be converted to Markdown (though retaining the original document, though you will not need it by the end, so do with it what you like).<br />
9. You have successfully converted your document from <i>.docx</i> to Markdown, the next part is to update your document using Markdown.<br />
<br />
<br />
<span style="font-style: italic; font-weight: bold;">Steps to update your Markdown document for easy conversion:</span>
<br />
1. Open Visual Studio Code. Once open, you will be presented with a (mostly empty) window. This might look familiar in part, if you have used any other Visual Studio program; Visual Studio Code is the light weight version, and it is remarkably powerful, and allows you to easily write in many programming languages.
<br />
<br />
<br />
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCchbOvywhP_IH0wmSVhUdnchvzeuQKSzM-Gmm3pQXsl3ddzvbWdFIpeFac2fdpBE8bRPIoQcjxgYxJ_Wm7cLVu_2yYRpJWIyJ0lMeJI-aOoYFSMwA6M4fPMXbEZxaiCTqW8tRGXNMADg/s1600/01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="519" data-original-width="960" height="216" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCchbOvywhP_IH0wmSVhUdnchvzeuQKSzM-Gmm3pQXsl3ddzvbWdFIpeFac2fdpBE8bRPIoQcjxgYxJ_Wm7cLVu_2yYRpJWIyJ0lMeJI-aOoYFSMwA6M4fPMXbEZxaiCTqW8tRGXNMADg/s400/01.png" width="400" /></a></span></span></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<br /><br />
2. Click <i>File > Open File</i>, and then browse your files for your new Markdown file (we are opening it in VS Code). <br />
3. With your file now open in Markdown, you will notice that it is looking very plain. This is the power of Markdown, it utilises only the most basic of formatting, however, this allows it to easily be converted into other formats. <br />
4. Here is an excellent <a href="https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet" style="color: #a0c73f; font-weight: bold; text-decoration: none;">cheat sheet</a> of how Markdown works. Have it at the ready, for the next few steps. <br />
5. Now you will need to open the preview page (which shows you what your document will look like with Markdown applied). With your document open, navigate to the top right, and click the split window icon, with the magnifying glass in front of it:
<br /><br />
</span><br />
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6gov4wGtwogF364UBiM9DCzWEvnOPJGw68QflrFTXfPhugf2AzKhVvAhrICLbkPi0CI0nIu261DPnt9Twi6sMMTt1Y4bKBFHzjIJ6C1IdlUawosvhBRPGa8i93eK6rDIrxZhvInOdzuU/s1600/02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="93" data-original-width="187" height="199" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6gov4wGtwogF364UBiM9DCzWEvnOPJGw68QflrFTXfPhugf2AzKhVvAhrICLbkPi0CI0nIu261DPnt9Twi6sMMTt1Y4bKBFHzjIJ6C1IdlUawosvhBRPGa8i93eK6rDIrxZhvInOdzuU/s400/02.png" width="400" /></a></span></span></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<br /><br />
6. You will be presented with a panel to the right of your Markdown document, which is showing you what the output will be. You will notice, all the Markdown tags (#/*/---/```) are gone, and just plain text appears, with light formatting.
<br /><br />
</span><br />
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijnrv-OlNjcycqhsa3FGwEN4cQYHr6zD6OaM2xYsYJAQFsCDiubR4GbnaL6W38LS1Z3DH6kcXnj72bEEvqt-1E3y7IABsDOzdV4yI7ZSDJ0RDHMesn_Pcs14VREx3UmSCNLHgjNRwolaY/s1600/03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="166" data-original-width="1600" height="42" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijnrv-OlNjcycqhsa3FGwEN4cQYHr6zD6OaM2xYsYJAQFsCDiubR4GbnaL6W38LS1Z3DH6kcXnj72bEEvqt-1E3y7IABsDOzdV4yI7ZSDJ0RDHMesn_Pcs14VREx3UmSCNLHgjNRwolaY/s400/03.png" width="400" /></a></span></span></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<br /><br />
7. Now, using the cheat sheet as a guide, update your Markdown document, so that it presents how you would like it.<br />
8. With your Markdown complete, close Visual Studio Code, because, you are ready for further conversion!
<br /><br />
<span style="font-style: italic; font-weight: bold;">Steps to convert your Markdown to HTML:</span>
<br />
1. Open PowerShell once more, and navigate to your Markdown document:</span></span><br />
<ul>
<li><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">- Remember to use the ‘cd’ command, and the path to your document – <i>cd 'C:\Users\YourAccount\Documents'</i></span></span></li>
</ul>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
2. Once PowerShell is in the same location as your Markdown document, use the following command to convert from Markdown to HTML:<br /><ul>
<li><i>- Pandoc 'YourNewDoc.md' -f markdown -t html -s -o 'YourNewWebpage.html'</i></li>
</ul>
3. Your document is now in HTML! If you had images and set them up correctly (according to the cheat sheet), they will have come across cleanly, creating a ‘media’ folder along the way, to use with your new webpage.
<br /><br />
As you will realise, from now on, you simply need to maintain your Markdown document, and then you can convert it; as mentioned previously, this works for <i>PDF</i> and <i>docx</i> too, so you can always produce those formats if you need them.
<br /><br />
This is the start of your Markdown journey, though, expect to continue and go further. Through using Pandoc, and PowerShell, you could put together a PowerShell script to automatically convert your latest Markdown document to HTML, so that you can keep working on your documents, without worrying about the export process. This is an excellent workflow and may help you increase efficiency!
<br /><br />
Elliot Moule
</span></span>nsquaredhttp://www.blogger.com/profile/17802027489389881952noreply@blogger.com0tag:blogger.com,1999:blog-1309846465832839404.post-67517945594978401252018-05-08T21:09:00.004-07:002018-05-08T21:12:14.046-07:00Bringing your 3D Models into Unity<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
When you are working across multiple programs in technology, it’s important for any
designer to be aware of what file formats are suitable for the program you’re using. There is
nothing worse than working long and hard on making something look great in one program,
and having an error on it when dragged into another!
<br /><br />
3D is lots of fun and very straight forward to make simple models to deck out any scene in
Unity, so I’m going to walk you through a simple procedure of exporting for a 3D model into
Unity. My preferred 3D modelling software is Autodesk Maya but you can use any you wish,
as long as you can export the model into an FBX file.
<br /><br />
<b>Why .fbx?</b>
<br />
An fbx file is a 3D asset exchange format that is compatible with many 3D tools. It also
enables you in most cases to save your materials on the object if desired. As opposed to an
OBJ file, your capabilities are much larger.
<br /><br />
<b>Getting started:</b>
<br />
Jump into Maya and create your model. I have made a simple lamp to use as an example.
<i>Note:</i> you want your model to be on the lower side of the poly count. To keep track of the
count, select <i>Display > Heads Up Display ></i> <i>Poly Count</i>. The count will appear in the
top left corner.
<br /><br />
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzQ6pgVer01fDDZA_G94E7ju4zxMJbDxtLwpfgBFFudQtlqp9BvMwjPu7BBAo5BVXwAnUtK98RSqL7b3fPJUX0KR9B_w5mZfaJuAtzaib65J-mQ-ZzNxbQ1R04ODdsHPF7T8vAT459cX0/s1600/Image1_cropped.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="744" data-original-width="1600" height="185" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzQ6pgVer01fDDZA_G94E7ju4zxMJbDxtLwpfgBFFudQtlqp9BvMwjPu7BBAo5BVXwAnUtK98RSqL7b3fPJUX0KR9B_w5mZfaJuAtzaib65J-mQ-ZzNxbQ1R04ODdsHPF7T8vAT459cX0/s400/Image1_cropped.png" width="400" /></a>
</span></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<br /><br />
<b>Materials:</b>
<br />
You can apply your materials to the object in your 3D software, OR Unity. For the sake of
showing you how to do so in Unity I’m going to leave my model without a material in Maya.
<br /><br />
<b>A few things to check before exporting:</b>
<br />
- It is a good idea to combine your meshes. You can do this by holding the mouse and dragging a box over all the objects and selecting <i>Mesh > Combine</i>.<br />
- The ‘Up Axis’ should be set to ‘Y’. <br />
- Your model is on the ground plane, with all location and rotation values set to 0 in the ‘Attribute Editor’ panel.
</span>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<br />
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTsIXWtPDiNBIZ7iO96geUiozM9H2jngz2ElsUdL9KqCnZw-sQKMevKdyQQ29P_zC5e3QUM4vadh5zTxFaQ5-MSL5_W-bn51P6UrR_dynf91SQqO2iV9nZwfjczzONQYOs66KUD6UBZh4/s1600/Image2_cropped.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="185" data-original-width="442" height="166" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTsIXWtPDiNBIZ7iO96geUiozM9H2jngz2ElsUdL9KqCnZw-sQKMevKdyQQ29P_zC5e3QUM4vadh5zTxFaQ5-MSL5_W-bn51P6UrR_dynf91SQqO2iV9nZwfjczzONQYOs66KUD6UBZh4/s400/Image2_cropped.png" width="400" /></a></span></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<br /><br />
<b>Exporting:</b>
<br />
Getting your model export-ready is very straight forward. Ensure the alignment is correct and everything is squared-out and facing forward toward the positive Z-Axis. When you’re ready, go to <i>File > Export All</i>. Select FBX under ‘Files of Type’ to export in the correct file format. Name your file and place it somewhere you can easily access when you open up Unity to import the object.
<br /><br />
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTROT6KcdGZkjIfKY3QZo6N86_FjJzXhCXta-kLmJKEFLtFdyo1NRYQZFHnMFpbF4zR15MrL8vTSdGKaaevuxxbQ0W40ezi1W-uHrk5aknHrLp5wmXvK8anCAHJM9NRfzLGj4dP-puyfo/s1600/Image3_cropped.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="73" data-original-width="997" height="28" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTROT6KcdGZkjIfKY3QZo6N86_FjJzXhCXta-kLmJKEFLtFdyo1NRYQZFHnMFpbF4zR15MrL8vTSdGKaaevuxxbQ0W40ezi1W-uHrk5aknHrLp5wmXvK8anCAHJM9NRfzLGj4dP-puyfo/s400/Image3_cropped.png" width="400" /></a></span></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<br /><br />
<b>Once you’re in Unity:</b>
<br />
Once you’ve got a new or existing scene set up in Unity, simply drag and drop into the Assets panel. Once you can see your model, drag it into your scene. You can then right click in the Project panel and click <i>Create > Material</i>.
Now for the fun part! You can drag and drop a PNG if you’d like, or select a colour from the top right Inspector panel. It’s here you can also customise your material by toggling between the X and Y options in the tiling section.
<br /><br />
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjh3IqDtgClkaP1T3Afj3u3WcySZFaMPx_BYHSB6LUETx3XvGCfip19ZNjN5XMAV3T5FtjICD_Cb2nqtmcpr9O6Y7tAhhbcUuHlV7qwH3hWw6pkXzRTV5_W5b5gKE7qeZvNi6VZrM4A1P4/s1600/Image4_cropped.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="832" data-original-width="1600" height="207" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjh3IqDtgClkaP1T3Afj3u3WcySZFaMPx_BYHSB6LUETx3XvGCfip19ZNjN5XMAV3T5FtjICD_Cb2nqtmcpr9O6Y7tAhhbcUuHlV7qwH3hWw6pkXzRTV5_W5b5gKE7qeZvNi6VZrM4A1P4/s400/Image4_cropped.png" width="400" /></a></span></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<br /><br />
<b>So there you have it!</b>
<br />
A basic guide on how to get your 3D objects into Unity correctly as well as a little bit of customisation. Happy designing!
<br /><br />
Jacqui Leis
</span>nsquaredhttp://www.blogger.com/profile/17802027489389881952noreply@blogger.com0tag:blogger.com,1999:blog-1309846465832839404.post-65907480799519976402018-04-29T23:58:00.000-07:002018-04-29T23:58:37.704-07:00Adding AI to Mixed Reality <span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
Over the last few months I have had the privilege of helping numerous Microsoft Partners get started with building Artificial Intelligence into their Mixed Reality applications.
<br /><br />
It might help you to understand what I mean by Artificial Intelligence, as it is a heavily overloaded term used to describe everything from an algorithm to predict what you might like to buy next, through to a future technology that will run the world and take all of your jobs. For the purpose of this article I will limit the term of AI to describe a set of algorithms to help determine a result of a specific query with a certainty high enough to be useful by the customer making the query. For example, given a sentence spoken by a customer, the algorithm has an 80% (or greater) confidence that the intention of the sentence was to order a specified item for delivery at a given time.
<br /><br />
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkpvlmBI6tyY09EgYVTaq8Fk040UIzIfCxQ-XinwKMbU-ACIn3XL2i2YKr0SADVYJ0ZuzsYNXIt_vf5waXe_-sk1z7Ukyxo-WeR3v45mem-ZIuDg9CPm8YTdiO3ApNFRgj_OMldtv7VY4/s1600/image01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="516" data-original-width="688" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkpvlmBI6tyY09EgYVTaq8Fk040UIzIfCxQ-XinwKMbU-ACIn3XL2i2YKr0SADVYJ0ZuzsYNXIt_vf5waXe_-sk1z7Ukyxo-WeR3v45mem-ZIuDg9CPm8YTdiO3ApNFRgj_OMldtv7VY4/s400/image01.jpg" width="400" /></a></span></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><br />
One of the aspects of almost all AI is that software developers are no longer working with clear binary results (1 or 0, on or off), instead, with AI algorithms, the result is a percentage of certainty of correctness, often termed confidence.
<br /><br />
Working with this confidence, the application can modify the experience for the customer.<br />
<b>You might be asking why this is interesting for a Mixed Reality application? </b><br />
With the example I just provided, of understanding the intention of a spoken command, a Mixed Reality application can become far more useful. If you have ever worn a headset, VR, AR, or MR, you will know that the controls for input are limited. Either using hand controllers or simple hand gestures is often not enough to control a complex application or environment. Speech is a great way to enhance the interface. When the speech can be in the form of natural language input that an algorithm can translate into an intention the application can act upon the experience for the customer is greatly improved.
<br /><br />
In the one week workshops, the developers learn how to use computer vision services to recognize the objects that a camera is seeing, translate text between languages, understand the intention of a natural language command, and even build their own machine learning algorithm from scratch. The developers then take these lessons and build out a demo or proof of concept application they can take back to their workplace.
<br /><br />
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqCG1sAUHfk6ZthRH6QNEzFtrJB6bmoemO0_CbytrHC2ULmbb2URZSXmBnZLWB50KgJvbpISjnlgwan7L_DqGxNJzR7Eao85X273wmvXxuAP7_4bYte0RQ82nkYcGlnFWUb_Azjj9nEXU/s1600/image02.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="464" data-original-width="619" height="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqCG1sAUHfk6ZthRH6QNEzFtrJB6bmoemO0_CbytrHC2ULmbb2URZSXmBnZLWB50KgJvbpISjnlgwan7L_DqGxNJzR7Eao85X273wmvXxuAP7_4bYte0RQ82nkYcGlnFWUb_Azjj9nEXU/s400/image02.jpg" width="400" /></a></span></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<br />
One thing that is becoming clear is that while 5 years ago you would have struggled to find things you use every day that utilize some form of AI, in the coming years you will find it hard to find any technology that doesn’t take advantage of some form of AI.
<br /><br />
Dr. Neil Roodyn
</span>nsquaredhttp://www.blogger.com/profile/17802027489389881952noreply@blogger.com0tag:blogger.com,1999:blog-1309846465832839404.post-11259028286872070242018-04-23T17:05:00.001-07:002018-04-23T17:05:26.335-07:00Experiences with Microsoft’s Azure Face API<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
In the last few weeks I have been working with Microsoft’s Azure based Face API.
<br />
<br />
If you have never used the API you might well be surprised by how extensive the information about each face returned by the API can be. Here is just a small part of the information that comes back:
<br />
1. The coordinates of the face inside the scene.<br />
2. The amount the face is tilted.<br />
3. A guess of the person’s age.<br />
4. How much the person is smiling.<br />
5. Whether the person is wearing glasses or not.<br />
6. Whether the person has facial hair or not.<br />
7. Whether the person is male or female.<br />
8. A guess at the emotional state of the person.
<br />
<br />
All the above as well as very detailed information about positions of features in the face can be obtained.
<br />
<br />
The way in which the API is used has been designed to be very straightforward.
<br />
<br />
To be able to recognize a face, the Microsoft engine in Azure needs to have some sample images of the face. The set of samples is called the training set, and the project I worked on started by sending a set of images to Azure for each of the people we wanted to recognize later in our project.
<br />
<br />
When the time came to recognize people, we set up a camera connected to a PC and every few seconds sent the current camera image to Azure asking the Face API to tell us if any faces were in the image.
<br />
<br />
If a single person walked up to the camera, the response would be that there is one face in the image we had sent. The Face API is quite capable of picking up many faces in a single image (for instance where the image shows a number of people seated around a table).
<br />
<br />
Once we know there are faces in an image, we need to use a different function in the Azure Face API where we send just the area around a face to Azure and ask whether that face belongs to someone in our training sets. The response we get back is not just a yes/no response, but a probability of how likely it is that the face we sent matches someone. Generally, we would choose the highest probability match (if there is one).
<br />
<br />
In our project we wanted a PC app to trigger an activity whenever someone the app knew came into range of the camera. In effect we would also know when they had left as we would stop seeing them through the camera.
<br />
<br />
The Face API made it easy for us to set up the project and begin testing. At that stage, we began to realize it was not all quite so simple.
<br />
<br />
The first sign was that people who walked past the camera in profile were not recognized. Actually, they weren’t even detected as faces! After some investigation it was possible to determine a list of circumstances that were likely to have an impact on whether someone was going to be matched.
<br />
<br />
The first step in getting a match as noted above is to detect that there is a face in an image. This step, we discovered can be affected by quite a few things. Here is a partial list:
<br />
1. A person’s head should not be turned away from the camera by more than about 45 degrees.<br />
2. If the camera is positioned too far above the mid-line of the face, no face is detected. Similarly, even if the face and camera are at the same level but the person turns their face too far up or looks down too far, no face is detected.<br />
3. If the face is tipped too far from vertical with respect to the camera, a face will not be detected.<br />
4. The mouth should not be covered.<br />
5. The nose should not be covered.<br />
6. Each eye should be visible or at most obscured just by no more than a finger width.<br />
7. Ears, forehead and chin do not need to be visible.<br />
8. Placing a hand against the side of the head or chin does not prevent detection.<br />
9. Beards, moustaches and glasses do not prevent detection.<br />
10. Strong backlighting (e.g. A large window behind a person) can make detection impossible.
<br />
<br />
Even if a face is detected, the face may fail to match against the training set due to other problems:
<br />
1. If the place/camera where the training set was collected is different to the where the recognition is to be done, the success rate in matching may be lowered.<br />
2. If the resolution of the cameras used for training and for recognition are very different, the success rate in matching may be lowered.<br />
3. If the camera resolution is high (e.g. 1920x1080), matching is easily achieved at 2 metres distance from the camera. If the camera resolution is low (e.g. 640x480), matching at 2 metres from the camera becomes difficult.<br />
4. If the facial expression at recognition time is too different to the expression used in the training set (e.g. mouth open at recognition, while the training images all had mouth closed), recognition may fail.
<br />
<br />
Achieving a reliable result in a project once you know more about the characteristics of the API becomes not just a matter of putting some code together. The project design may need to juggle with the position of the camera, perhaps using more than one camera. Some thought will also need to go into lighting and possibly devising techniques to compensate for perfectly normal face obscuring activities such as people simply turning their heads.
<br />
<br />
Peter Herman
</span>nsquaredhttp://www.blogger.com/profile/17802027489389881952noreply@blogger.com0tag:blogger.com,1999:blog-1309846465832839404.post-27066596862540363672018-04-18T20:48:00.000-07:002018-04-18T20:56:14.323-07:00Wood Staining and Finishing for New and Old Timber<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
A lot of our furniture that we own, in and around the home, is made from wood, although this maybe less so the case in modern times. Often, when old wooden furniture starts looking worn, people will tend to dispose of it, but with just a little bit of time, effort, and some simple tools, you can make your furniture look new again. Alternatively, you might be working on a little project at home that could benefit aesthetically, and functionally, from a coat of stain and varnish. By conditioning, and varnishing, your timber, you helping to it keep its shape and extend its lifetime.
<br />
<br />
You will need some tools along the way, including sandpaper or sanding blocks (usually from 240GSM up to 150 GSM), a suitable bristle brush, rags, mineral turpentine, empty jars, and tack cloths. Tack cloth is a slightly adhesive cloth that will help pick up any little imperfections like dust that may settle on the wood between coats.
<br />
<br /><br />
<b>Sanding/preparation process</b>
<br />
If you want to recondition existing furniture, or whatever it may be, the first thing you will have to do is remove the existing coats of varnish and stain. If you want to keep the existing colour, then you will simply need to sand off the layer of varnish. I recommend using 180-grit sandpaper to begin with, then make your way down to 240. If you are removing a layer of varnish, using a suitable wet/dry sandpaper and soaking it with water will stop the varnish from sticking to it. If you would like to give it some new colour, keep sanding until you remove the stained layer and get down to the natural colour of the timber. Remember, with everything you do, always work in the direction of the grain: be it sanding, staining, or varnishing. Once you have finished sanding, clean off the dust with a rag, and then clean off again, with the tack cloth.
<br />
<br />
1. First make sure all the parts are sanded down to ensure a smooth surface before conditioning. Depending on condition of the timber start with a 160-grit sandpaper and finish on a 240 grit<br />
2. Wipe off the surface with a rag and tack cloth to remove any dust<br />
3. Mix wood conditioner using a clean paddle-pop<br />
4. (Optional) Apply wood primer on all surfaces of the wood with a flood coating, wait 2 hours before flipping over and applying on other side<br /> a. Wait at least 6 hours before staining<br />
<br />
<br />
<b>Staining</b>
<br />
Next, it is time to stain the timber if you have chosen to do so. If you would like a natural finish, or to keep the previous colour, you can skip this and go straight to varnishing. There are water based and oil based stains and varnishes, but stick to using one type for the stain and the varnish. There are also stain and finish (varnish) cans you can buy, which will also varnish your timber at the same time, but you may also need to do extra coats of varnish if you feel that you have reached the desired colour in the wood. Before you begin, make sure you are working in a well-ventilated environment that won’t be affected by the stain. Stain is near impossible to remove from clothes, and difficult to remove from skins, so wear gloves, and work somewhere that won’t be affected by any splashing.
<br />
<br />
1. Mix wood stain using a paddle-pop, or if the stain has not been used in a while shake vigorously an hour before use<br />
2. Apply wood stain on top side and end grains on the sides<br />
3. Wipe off any stain that has dripped onto the underside<br />
4. Wait 5-10 minutes<br />
5. Wipe off wood stain using a rag. Ensure this is done in a circular fashion (wax on, wax off)<br />
6. Wait 2 hours until stain is touch dry<br />
7. Flip wood onto the other side<br />
8. Apply wood stain on the new topside<br />
9. Wipe off any stain that has dripped down onto the sides, but take care not to take off any on the top’s edges<br />
10. Wait at least 6 hours before doing another coat<br />
11. Repeat this process so there are 2-3 layers of staining done (3 recommended)<br />
<br />
<br />
<b>Varnishing</b>
<br />
Now for the varnishing, make sure you have wiped the surface off with the tack cloth. If you’re working with mostly flat surfaces, start off with using a brush, and try and keep the coats even on the surface, but don’t go back and try to touch up the varnish if you spot something at the end. If there’s an imperfection, wait for it to cure and sand it off, and try again on the next coat. You will want around 2-3 coats with the brush and finish off with spray lacquer (of the same type); this will help you get a nice smooth finish. If you’re working with furniture with contoured surfaces you may find it easier to exclusively use spray lacquer. Leave the brush to soak in mineral turps between layers, and make sure the surface is touch dry before flipping it over and doing the other side.
<br />
<br />
1. Mix polyurethane clear coat while taking extreme care not to introduce and air bubbles<br />
2. Apply coat to the top and sides, but do not go back over areas that may not be exactly even; doing this afterwards may compromise the finish<br />
3. Wipe off any lacquer that has dripped onto the bottom side<br />
4. Wait 2-3 hours<br />
5. Flip wood back over<br />
6. Apply coat on new topside<br />
7. Wait at least 6 hours<br />
8. Use 180+ GSM sandpaper and sand the surface moderately and even out any blotches<br />
9. Use 240+GSM and be gentle after the first coat, careful not to remove any of the stain!<br />
10. Repeat until 2-3 coats have been applied<br />
11. Sand down once more<br />
12. Wipe off dust with tack cloth<br />
13. Apply an even coat of spray lacquer on top<br />
14. Wait 2-3 hours<br />
15. Flip over<br />
16. Spray even coat on other side<br />
17. Repeat until at least 3 layers of spray lacquer have been applied; until surface is uniform and sand lightly between each layer<br />
18. OPTIONAL coat the table surface with a layer of beeswax timber finish<br />
19. Rub off beeswax with a rag in a circular fashion once it is dry<br />
<br />
<br />
That concludes this condensed guide on how to complete wood staining and finishing on timber for new timber products, or give new life to your furniture at home. As always, remember to work in a well-ventilated space, and if you don’t want something to get dirty from splashes or spills, cover it up or work in a different area.
<br />
<br />
Charlie Ho Si
</span>nsquaredhttp://www.blogger.com/profile/17802027489389881952noreply@blogger.com0tag:blogger.com,1999:blog-1309846465832839404.post-64107409561568055562018-04-15T21:21:00.000-07:002018-04-15T21:21:04.578-07:00Business Applications for Mixed Reality<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSHUIM4W3tP1zHK4dfzntfje8pAV1t3OhQbmLumF_80ms-uDXaatuUwh3JXDkjyEUqguhvU9iYhglmX5j6pitqjgjN2LZtPi_e4vrjmMcsFGMDmGIZ-PyP3nPsuBWc264D9S4VFiYqmnU/s1600/image01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="576" data-original-width="1024" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSHUIM4W3tP1zHK4dfzntfje8pAV1t3OhQbmLumF_80ms-uDXaatuUwh3JXDkjyEUqguhvU9iYhglmX5j6pitqjgjN2LZtPi_e4vrjmMcsFGMDmGIZ-PyP3nPsuBWc264D9S4VFiYqmnU/s400/image01.jpg" width="400" /></a></div>
<br />
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
The vast majority of virtual, augmented and mixed reality software in the market right now is for entertainment.
<br />
<br />
A valid case can be made saying that games, social interactions and 360 videos are the reason for the success of these new technologies within the consumer market, but what I have yet to see, are widespread applications that leverage those technologies to benefit productivity and collaboration in the workplace, while also reducing costs for an enterprise.
<br />
<br />
Let me give you some examples:<br />
If a person wants to learn how to drive a car, the process begins with a test and then practising driving. Maybe starting in a parking lot of a factory on Sunday, like I did when I was younger, to minimise risks of accidents and then carefully moving to the road. What if driving schools had an Immersive driving experience, where the driver can learn the movements, how to control the car, in complete safety. The driver could also be challenged to drive in different weather conditions, like snow, rain and fog, some of which might not be possible to depending on where you live, and all in total safety. Nothing will replace the real experience, by all means, but the driving school could benefit by reducing the risk to staff and students, reducing the cost of insurance, and car usage, while improving the learning experience.
<br />
</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0IPwts57onhZOA9lctQ73AWgg7MDJSHjz1AEe_TgjbqL2mHFoPhxdVMa_ePLW0D6YsQXKbeCKc6HTFXrDpearRcQ3Nd7duWLeo5iU-1IyY0-eDxQKtcUqFSgixDqLusmNPsOL9X2ERlg/s1600/image02.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="683" data-original-width="1024" height="266" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0IPwts57onhZOA9lctQ73AWgg7MDJSHjz1AEe_TgjbqL2mHFoPhxdVMa_ePLW0D6YsQXKbeCKc6HTFXrDpearRcQ3Nd7duWLeo5iU-1IyY0-eDxQKtcUqFSgixDqLusmNPsOL9X2ERlg/s400/image02.jpg" width="400" /></a></span></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<br />
Let me take you through another example, something I have been secretly working on for some time, at nsquared, and from looking at the most recent results, we are now confident to talk about it. We call it ‘nsquared screens’. It’s an Immersive application, replicating an environment very similar to control rooms which they have at NASA, airport control towers, stock market trading offices and mall security rooms. Those environments can be very pricey to set up. We have replaced the hardware setup, and recreated it as an immersive application, where you can have the data displayed in multiple “floating screens”. Not only does it become much more affordable to create and sustain a control room of this kind, but it would also come with you when you travel for business.
<br />
<br />
</span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHgi_01Gu4rYyE9pnuX21k7KzXUuzw7YEtvXayoEmoMaTyQP4uOxRylAPGDoY5LSIUS1ebQnlr_cc3VALbynEBtuZqaw4JkEX7lCHk9JkhbkEJBa1cn56zaquOIYPJdBhxp9RX1lGHNd4/s1600/image03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="797" data-original-width="1055" height="241" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHgi_01Gu4rYyE9pnuX21k7KzXUuzw7YEtvXayoEmoMaTyQP4uOxRylAPGDoY5LSIUS1ebQnlr_cc3VALbynEBtuZqaw4JkEX7lCHk9JkhbkEJBa1cn56zaquOIYPJdBhxp9RX1lGHNd4/s320/image03.png" width="320" /></a></span></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<br />
Mixed reality is compelling, and can be incredibly entertaining, however, if you are as passionate as we are about this technology, imagine the ramifications that Mixed Reality can have improving your professional life and the productivity of your enterprise. At nsquared we surely are in a premium position to make this happen.
</span>
<br />
<br />
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">Stefano Deflorio<br /><br />
<b>References</b>
<br />
<i>Northeast Guilford High School (2018). Distracted Driving Awareness Event. [image] Available at: https://www.flickr.com/photos/ncdot/34126511795 [Accessed 16 April 2018]. </i>
<br /><br />
<i>Stefano Deflorio. (2017). nsquared screens. </i>
<br /><br />
<i>Microsoft (2018). Microsoft Mixed Reality [image] Available at: https://winblogs.azureedge.net/win/2016/12/Windows10-MR-Devices-1024x576.jpg [Accessed 16 April 2018].</i>
<br /><br />
</span>nsquaredhttp://www.blogger.com/profile/17802027489389881952noreply@blogger.com0tag:blogger.com,1999:blog-1309846465832839404.post-71562543776596424392018-04-12T18:47:00.000-07:002018-04-12T18:51:25.240-07:00Artificial Neural Networks<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
When you read about artificial neural network (ANN), the first thing you learn is that an artificial neural network is like the human brain: it can be trained to perform a certain task. Like how our brain is composed of neurons, that process information received either from the outer world or from other neurons, ANN has artificial neurons that work the same way. In the case of a human brain, when a person touches a kettle of boiling water, input is the touch sensation, and output is a signal from the brain, to remove the hand from the kettle. Similarly, for an ANN that is trained for image recognition, when input is an image of a furry puppy, the output is the word “puppy" or “dog", depending on how it was trained.
</span>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2whiLek5zo8HPqSUqz_GCjrQlPxsp2U2O5JVnpk-THqWx6y_NOY_QLLFlJ_-kH2fIEBgl9Z4TQcAZR5vHnj4Ekf0_ZcmXGaJFit-yJhRfpAu9eI6KzLY_eGkT4rOh_GffHENQX5wMq3s/s1600/image01.tif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1429" data-original-width="1600" height="356" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2whiLek5zo8HPqSUqz_GCjrQlPxsp2U2O5JVnpk-THqWx6y_NOY_QLLFlJ_-kH2fIEBgl9Z4TQcAZR5vHnj4Ekf0_ZcmXGaJFit-yJhRfpAu9eI6KzLY_eGkT4rOh_GffHENQX5wMq3s/s400/image01.tif" width="400" /></a></div>
<div style="text-align: center;">
</div>
<div style="text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<i>Figure 1 - Artificial Neural Network (ANN)</i>
</span>
</div>
<div style="text-align: center;">
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFkFSzE6YbA2Q_9-B7UFUOJKRfMG2svJryQplPU7QubyNuMLWTdoTbiOUwbQFkdOIfAntM2Ivk4qepf3qM1BqvY_B4uq04Zjih4_tVaOQfZpjZx9DngS51B7ilzXM7c0aC0UJNezbva9w/s1600/image02.tif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="596" data-original-width="1054" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFkFSzE6YbA2Q_9-B7UFUOJKRfMG2svJryQplPU7QubyNuMLWTdoTbiOUwbQFkdOIfAntM2Ivk4qepf3qM1BqvY_B4uq04Zjih4_tVaOQfZpjZx9DngS51B7ilzXM7c0aC0UJNezbva9w/s400/image02.tif" width="400" /></a></div>
</div>
<div style="text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<i>Figure 2 - Biological Neuron</i>
</span>
</div>
<br />
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
Although, in recent years, ANN has been proven to achieve exceptional results in a particular task, it is yet to reach the capabilities of a human brain, where a single network performs multiple tasks. An ANN is created and trained for a purpose, and with enough data and training, no doubt, it can outperform human brains in executing a task. AlphaGo can be taken as an example, which is the first computer program to defeat a human world champion of the game Go. Other such tasks, where ANN has shown better results, include image and object recognition, and voice recognition. However, the challenge for ANN lies in training one network that can learn and carry out multiple tasks. It would be absolutely amazing to see an ANN that is powerful enough to recognise a person, learn to play computer games, and write songs as well, and I believe, that is the next stepping stone for ANN.
</span>
<br />
<br />
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
At nsquared, we are excited to be working with cognitive services and machine learning systems, to improve the way we work together better. For an experimental project that I worked on, I created a UWP app that produces drawings of objects using Tensorflow, an open-source machine learning library. In this project, I worked with sketch-rnn, which is a neural network, based on a type of ANN, called recurrent neural network. I used pre-trained models, that were available online, as well as experimented with training my own ANN using existing datasets.
</span>
<br />
<br />
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">Sabina Pokhrel<br /><br />
<b>References</b>
<br /><i>
Burnett, C. (2018). Artificial neural network. [image] Available at: https://commons.wikimedia.org/wiki/File:Artificial_neural_network.svg [Accessed 28 Mar. 2018].
<br /><br />
DeepMind. (2018). AlphaGo | DeepMind. [online] Available at: https://deepmind.com/research/alphago/ [Accessed 28 Mar. 2018].
<br /><br />
Looxix (2018). Neuron - annotated. [image] Available at: https://commons.wikimedia.org/wiki/File:Neuron_-_annotated.svg [Accessed 28 Mar. 2018].
<br /><br />
Steinberg, R. (2018). 6 areas where artificial neural networks outperform humans. [online] VentureBeat. Available at: https://venturebeat.com/2017/12/08/6-areas-where-artificial-neural-networks-outperform-humans/ [Accessed 28 Mar. 2018].
<br /><br />
GitHub. (2018). tensorflow/magenta. [online] Available at: https://github.com/tensorflow/magenta/tree/master/magenta/models/sketch_rnn [Accessed 12 Apr. 2018].
</i>
</span>nsquaredhttp://www.blogger.com/profile/17802027489389881952noreply@blogger.com0tag:blogger.com,1999:blog-1309846465832839404.post-22939129478691645072018-04-11T17:40:00.000-07:002018-04-12T18:52:04.924-07:00Designing for Mixed Reality<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
At nsquared, we are working very closely with Microsoft to build training material to help you build the best Mixed Reality (MR) applications. One of the topics which we cover in our training material, is how to design for MR, and knowing when to optimise your 3D assets.
<br /><br />
Designing for MR can be a daunting challenge, but crucial to the successful performance of an application. The main goal of optimisation, is finding a balance between beautiful 3D assets and making sure assets do not hinder the performance of an application. Optimisation can be considered and applied when modelling, UV mapping, texturing and exporting 3D assets, but it is important to understand when to use the correct method.
<br /><br />
Generally, when building 3D assets for game engines, such as Unity, it is important to keep the polygon count as low as possible. The lower the polygon count, the more efficiently an application can run, reducing lag. This is even more important when building 3D assets for MR as the performance requirements are higher.
<br /><br />
Before reducing the polygon count of your 3D assets, there are a few key questions you need to keep in mind. This ensures that you are creating a well optimised application, while ensuring that the user experience is maintained.
<br /><br />
Ask yourself the following questions:
<br />
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzQ-WqtsY16z2XihJ390BBDB7wDonx7EY_m0KTkTWAcpLrlUHEVm7Phun3B0c6c5g3HDzgt-PXhyphenhyphenShNfAK9om1fN2gAxPuv_YIRmmDWDs3wz6WP7GS1HAom7Q6FRG6ikwuK-Jgp7ShYLk/s1600/decision_tree_screen-01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="500" data-original-width="500" height="398" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzQ-WqtsY16z2XihJ390BBDB7wDonx7EY_m0KTkTWAcpLrlUHEVm7Phun3B0c6c5g3HDzgt-PXhyphenhyphenShNfAK9om1fN2gAxPuv_YIRmmDWDs3wz6WP7GS1HAom7Q6FRG6ikwuK-Jgp7ShYLk/s400/decision_tree_screen-01.png" width="400" /></a></span></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<br />
The key is to understand what needs to be detailed, and what does not. Knowing which assets need more detail will help you prioritise the assets that need the greatest number of polygons, so time and effort is not spent on assets of lower importance.
</span>nsquaredhttp://www.blogger.com/profile/17802027489389881952noreply@blogger.com0tag:blogger.com,1999:blog-1309846465832839404.post-68093627397777126622018-04-10T20:51:00.000-07:002018-04-12T18:55:20.201-07:00Bots Everywhere!<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
</span>
<br />
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">As a kid, I used to wonder if I could make
an intelligent clone of myself: which would look like me, sound like me and do
all the work which I never enjoy doing or find boring to do. As I grew up and
entered the professional space, "scheduling meetings" was one of
them. Although Outlook was helpful to show the available times for everyone, I
wished to not even have to switch my laptop ON, for this. I know I am sounding
too lazy, but I am what I am :D.</span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US"><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">At nsquared Solutions, the place where I
work on amazing tech, and produce and develop awesome outcomes, I got an
opportunity to turn my wish to reality: working on automating the
"scheduling meetings", into a fun and interactive application. I am
glad to mention that I used the Microsoft Bot Framework along with my C#
skills, as I wanted the Bot to be up and running as soon as possible. Though,
the Microsoft Bot Framework also works with Node.js. It supports a variety of
platforms and can be hooked up with channels like Skype, Teams, Facebook, and
Slack, to mention a few. Coupled with LUIS (Language Understanding Intelligent
Service), the Bot gets more power-packed as it binds the natural language and
creates models which improve on usage.<o:p></o:p></span></span></div>
<div class="MsoNormal">
<br /></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
<span lang="EN-US">Whenever I talk about
Bots, I always think of Sci-fi movies with super complex and intelligent
digital beings. When I started to work on the Bot, my expectation was for it to
be intelligent and get even smarter over time. I expected it to deliver new
experiences, removing barriers between people and technology. And I wanted it
to help us make sense of the huge amount of data that is all around us, to
deliver those better experiences. The success in adopting AI to solve
real-world problems hinges on bringing a comprehensive set of AI services,
tools and infrastructure to every developer, so they can deliver AI-powered
apps of the future that offer unique, differentiated and </span>personalised<span lang="EN-US"> experiences. As a summary from my experience, I
can say that it is simple for existing developers without deep AI expertise to
start building such </span>personalised<span lang="EN-US"> data-driven app experiences of the future.</span></span><br />
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><span lang="EN-US"><br /></span></span>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><span lang="EN-US">Tripti Wani</span></span>nsquaredhttp://www.blogger.com/profile/17802027489389881952noreply@blogger.com0tag:blogger.com,1999:blog-1309846465832839404.post-59214638393382996162018-03-15T17:40:00.000-07:002018-04-12T18:56:56.266-07:00Augmented Reality: what could be, should be<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;">
</span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpwZJ0DZP0FJ2eElhl_kAHHpeM0O7NQaJFYRQCB6J-K7VgQq-fOx-kIKn8CTW0QpmU7Q06PU5X7qEMcxVAUZ_7VlYlgyGvWC3b_Ubm9rGntbCskEpCtKZdQ1h_6eRSxQCljkVkhF3lnco/s1600/image1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="489" data-original-width="1064" height="183" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpwZJ0DZP0FJ2eElhl_kAHHpeM0O7NQaJFYRQCB6J-K7VgQq-fOx-kIKn8CTW0QpmU7Q06PU5X7qEMcxVAUZ_7VlYlgyGvWC3b_Ubm9rGntbCskEpCtKZdQ1h_6eRSxQCljkVkhF3lnco/s400/image1.jpg" width="400" /></a></span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><br /></span></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;">
Tony Stark operates his Iron Man suit from his office, Aloy from Horizon Zero Dawn overrides Tall Necks, and Shuri drives a car remotely in Black Panther. Pokémon GO overlays your environment to show creatures, and Vuforia allows you to see and interact with digital content. All of these are powered by Augmented Reality, though the first three fictional examples are a bit different, aren’t they: they physically influence the real world, not just overlay it, or provide additional data. This is what needs to change about Augmented Reality development.
<br />
<br />
Just as the remote control revolutionised the use of the television, augmented reality should revolutionise our lives: allowing us to potentially remote control everything! Wave your hand at the TV to change the channel, or grip and turn your hand mid-air towards your air conditioner to turn it up or down. These kinds of gestures can surpass things like voice control because they are universal – no translation needed!
<br />
<br />
In Sydney, Australia, at nsquared solutions, I work with the team to create some truly amazing applications and experiences. We turn what was the ‘future’, into the ‘modern’, and show businesses and people how they can work together better, by harnessing technology to its full purpose, so to make our lives easier, and allow people to be more collaborative.
<br />
</span><br />
<span style="font-size: small;"><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><br /></span>
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg664zm7RQwMxfFzTvX-gFaLqn-HbY_UpFy0m8Am-hsUvF-r4X-zhQ-oQSvMME7LJRnNQS74AGk7lXZPYVsCRZSwsFd0L6g_52Hsx_cHPyq7h3S29_Nh2wDxRevp-aPTHgRuAuXVVTqNrU/s1600/image2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="545" data-original-width="968" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg664zm7RQwMxfFzTvX-gFaLqn-HbY_UpFy0m8Am-hsUvF-r4X-zhQ-oQSvMME7LJRnNQS74AGk7lXZPYVsCRZSwsFd0L6g_52Hsx_cHPyq7h3S29_Nh2wDxRevp-aPTHgRuAuXVVTqNrU/s320/image2.jpg" width="320" /></a></span></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-size: small;"><br /></span></div>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><span style="font-size: small;">
<br />
More recently I’ve been working on an application called nsquared space planner, which is usable with both the Microsoft HoloLens, and the new Mixed Reality Immersive Headsets. Though, it provides the user with a different experience, depending on their device. The core premise to the app is to help people design and plan their spaces. The app provides you with various furniture options (over forty), which can be placed in your space, so that you can see what it might look like in your space, in actual scale. The included tools allow for changing the various material styles of the furniture, and the ease of placing them in the world, using position and rotation. In this way, it helps people be more productive, by taking away the logistical headaches that would otherwise be associated with such a task.
<br />
<br />
What if you could take it a step further though, and whilst overlaying your surroundings, also interact with the real world? Make that lamp brighter or turn the stereo up! Have your Italian friend speak to you and receive live translation. Or mute your smartphone, because you’re too busy having fun – I mean, planning and designing your space.
<br />
<br />
The good news is that this is all very possible. We are already doing it at nsquared, in Sydney! Object shape, and image, recognition is available to devices like the HoloLens. So is translation of hundreds of languages, and the ability to interact with your lamp remotely.
<br />
<br />
So, the next time you are watching Tony Stark transform his environment with augmented reality, you will be able to also, and it won’t be so futuristic. From now on, let’s aim to work together better. </span></span><br />
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><span style="font-size: small;"><br /></span></span>
<span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: small;"><span style="font-size: small;">Elliot Moule<br />
<br />
<b>References</b>
<br /><i>
Coogler R, Black Panther (Marvel Studios 2018).
<br />
Favreau J, Iron Man (Marvel Studios 2008).
<br />
nsquared space planner, (nsquared solutions, 2018).
<br />
Tatsuo N, Pokemon GO (Niantic 2016).
<br />
van der Leeuw M, Horizon Zero Dawn (Guerilla Games 2017).
<br />
Vuforia (PTC Inc 2011).</i></span><br />
</span>nsquaredhttp://www.blogger.com/profile/17802027489389881952noreply@blogger.com0tag:blogger.com,1999:blog-1309846465832839404.post-14034481084012818832017-10-29T22:55:00.005-07:002017-12-10T16:13:45.173-08:00Design Better Together<div lang="en-AU" style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
<a href="http://digitable.co/#experience" style="color: #a0c73f; text-decoration: none;"><b>nsquared tabletop</b></a> re-imagines the way you design on the <a href="http://digitable.co/" style="color: #a0c73f; text-decoration: none;"><b>DIGITABLE</b></a>. We have made it easier
than ever to furnish a floor plan, or even build a custom brochure based on
your furnishing needs.</div>
<div lang="en-AU" style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
<br /></div>
<div lang="en-AU" style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
With the
Content Explorer pack for nsquared tabletop: </div>
<div lang="en-AU" style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
<br /></div>
<div lang="en-AU" style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
<span style="font-weight: bold;">nsquared attractor cloud -</span> Preload the
DIGITABLE with company brochures and artifacts ready to be used to furnish
client floor plans.</div>
<div lang="en-AU" style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
<span style="font-weight: bold;">nsquared artifacts -</span> Layer client floor plans
with artifacts to furnish a space that suits their requirements.</div>
<div lang="en-AU" style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
<span style="font-weight: bold;">nsquared drawing -</span> Annotate floor plans based
on decisions made.</div>
<div lang="en-AU" style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
<span style="font-weight: bold;">nsquared web -</span> Open up a web browser and search
for some living room inspiration.</div>
<div lang="en-AU" style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
<span style="font-weight: bold;">nsquared sharing -</span> Share custom brochures and
floor plans directly from the DIGITABLE to your clients inbox.</div>
<div lang="en-AU" style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
<br /></div>
<div lang="en-AU" style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
Watch the
video below to find out how Freda and Joel come to an agreement and furnish
their living space using the DIGITABLE:<br />
<br />
<div class="separator" style="clear: both; text-align: center; width: 450px;">
<iframe width="450" height="315" src="https://www.youtube.com/embed/TToG0x-DaMg" frameborder="0" gesture="media" allow="encrypted-media" allowfullscreen></iframe></div>
<br />
<br />
To find
out more about how we can help you design better together, contact us at <a href="mailto:info@nsquaredsolutions.com?subject=nsquared tabletop Content Explorer Pack" style="color: #a0c73f; text-decoration: none;"><b>info@nsquaredsolutions.com</b></a></div>
nsquaredhttp://www.blogger.com/profile/17802027489389881952noreply@blogger.com0tag:blogger.com,1999:blog-1309846465832839404.post-21234165804428481972017-09-13T22:14:00.000-07:002017-09-13T22:15:30.974-07:00Security and nsquared documents<div style="background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0px 0px; background-repeat: repeat; background-size: auto; border: 0px none rgba(0, 0, 0, 0.7); box-sizing: border-box; color: rgba(0, 0, 0, 0.7); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: "Source Serif Pro", serif; font-size: 21px; line-height: 32px; margin-bottom: 32px; outline-style: none; outline-width: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;">
One of the questions commonly asked about <a href="https://www.microsoft.com/en-au/store/p/nsquared-documents/9n1b1x5g3g67?rtc=1" rel="noopener nofollow" style="background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0px 0px; background-repeat: repeat; background-size: auto; border: 0px none rgb(0, 140, 201); box-sizing: border-box; color: #008cc9; margin: 0px; outline-style: none; outline-width: 0px; padding: 0px; text-decoration-line: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">nsquared documents</a> is around the security of the NFC tags and the associated PIN.</div>
<div style="background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0px 0px; background-repeat: repeat; background-size: auto; border: 0px none rgba(0, 0, 0, 0.7); box-sizing: border-box; color: rgba(0, 0, 0, 0.7); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: "Source Serif Pro", serif; font-size: 21px; line-height: 32px; margin-bottom: 32px; margin-top: 32px; outline-style: none; outline-width: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;">
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/DRP6DgRbypY/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/DRP6DgRbypY?feature=player_embedded" width="320"></iframe></div>
<br />
It is difficult to know how much we should disclose about the way we secure your authentication information. Therefore I will keep this post at a fairly high level and explain the concepts that keep your details safe.</div>
<div style="background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0px 0px; background-repeat: repeat; background-size: auto; border: 0px none rgba(0, 0, 0, 0.7); box-sizing: border-box; color: rgba(0, 0, 0, 0.7); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: "Source Serif Pro", serif; font-size: 21px; line-height: 32px; margin-bottom: 32px; margin-top: 32px; outline-style: none; outline-width: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;">
<div class="separator" style="clear: both; text-align: center;">
</div>
First the obligatory disclaimer; nothing is truly safe. Seriously, if you believe you have a system that is 100% secure you are naïve. In order for encrypted data to be useful it needs to be decrypted. The encryption and decryption is done in software using mathematical algorithms to make it hard for people without the correct corresponding components to access the data. The question, with security, is how hard do you make it for "bad" people to access your information? At nsquared we believe we have made it difficult for anyone to access your data without substantial effort.</div>
<div style="background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0px 0px; background-repeat: repeat; background-size: auto; border: 0px none rgba(0, 0, 0, 0.7); box-sizing: border-box; color: rgba(0, 0, 0, 0.7); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: "Source Serif Pro", serif; font-size: 21px; line-height: 32px; margin-bottom: 32px; margin-top: 32px; outline-style: none; outline-width: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizPoxBrK5PslFMv3OSJvhLXFcUdj7HRp8WZezjX-6l3tT2X9zzSowkKL1necZlt14etBK6t9oSLutwXalRzNVNgzvw_wlQRmWI7d0nOkdyOmtbdh9XbG6VUrxq9uIKU-kDuRjl-ODLFwA/s1600/Banner_v02_small.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1067" data-original-width="1600" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizPoxBrK5PslFMv3OSJvhLXFcUdj7HRp8WZezjX-6l3tT2X9zzSowkKL1necZlt14etBK6t9oSLutwXalRzNVNgzvw_wlQRmWI7d0nOkdyOmtbdh9XbG6VUrxq9uIKU-kDuRjl-ODLFwA/s320/Banner_v02_small.jpg" width="320" /></a></div>
<br />
When you log in to one of your cloud document stores (OneDrive, Dropbox etc) the service responds with a token that enables the software to access that cloud store. Somehow nsquared documents needs to store that token. We don’t need to store your username and password. In fact we don’t even have access to your username and password. That is hidden by the login screens provided by the cloud store providers (Microsoft and Dropbox). Even if we did have that data we wouldn’t store it, as we don’t need it.</div>
<div style="background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0px 0px; background-repeat: repeat; background-size: auto; border: 0px none rgba(0, 0, 0, 0.7); box-sizing: border-box; color: rgba(0, 0, 0, 0.7); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: "Source Serif Pro", serif; font-size: 21px; line-height: 32px; margin-bottom: 32px; margin-top: 32px; outline-style: none; outline-width: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;">
We then associate an NFC tag to that token. The NFC tag contains a unique ID, nothing else. We do not store the token or your PIN on the tag. The tag is like a locker number. It uniquely identifies a place your data is stored. Except it is encrypted. So even with that unique number on your tag your still need to know how to decrypt it in order to find the locker.</div>
<div style="background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0px 0px; background-repeat: repeat; background-size: auto; border: 0px none rgba(0, 0, 0, 0.7); box-sizing: border-box; color: rgba(0, 0, 0, 0.7); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: "Source Serif Pro", serif; font-size: 21px; line-height: 32px; margin-bottom: 32px; margin-top: 32px; outline-style: none; outline-width: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;">
So what about the PIN? We never store your PIN anywhere. The only place the PIN is stored is in your head. Please don’t write it down somewhere, your security will be lower. The PIN is a bit like your locker key. We use the PIN in combination with your tag ID to identify who you are, where your data is stored and how to decrypt your data.</div>
<div style="background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0px 0px; background-repeat: repeat; background-size: auto; border: 0px none rgba(0, 0, 0, 0.7); box-sizing: border-box; color: rgba(0, 0, 0, 0.7); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: "Source Serif Pro", serif; font-size: 21px; line-height: 32px; margin-bottom: 32px; margin-top: 32px; outline-style: none; outline-width: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;">
If you lose your tag and are concerned about the fact your PIN was written on a sticky note on your desk (yes, you know who I am talking about). Then you can go to your cloud store provider and disable access for nsquared documents to access your store. You can then create a new tag using nsquared documents and this will generate a whole new setup.</div>
<ul style="background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0px 0px; background-repeat: repeat; background-size: auto; border: 0px none rgba(0, 0, 0, 0.7); box-sizing: border-box; color: rgba(0, 0, 0, 0.7); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: "Source Serif Pro", serif; font-size: 21px; line-height: 32px; margin: 32px 0px; outline-style: none; outline-width: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;">
<li style="background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0px 0px; background-repeat: repeat; background-size: auto; border: 0px none rgba(0, 0, 0, 0.7); box-sizing: border-box; list-style-type: disc; margin: 24px 0px 24px 32px; outline-style: none; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline; width: 712px;"><a href="http://www.wikihow.com/Unlink-an-App-in-Dropbox" rel="noopener nofollow" style="background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0px 0px; background-repeat: repeat; background-size: auto; border: 0px none rgb(0, 140, 201); box-sizing: border-box; color: #008cc9; margin: 0px; outline-style: none; outline-width: 0px; padding: 0px; text-decoration-line: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">How to unlink from DropBox</a></li>
<li style="background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0px 0px; background-repeat: repeat; background-size: auto; border: 0px none rgba(0, 0, 0, 0.7); box-sizing: border-box; list-style-type: disc; margin: 24px 0px 24px 32px; outline-style: none; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline; width: 712px;"><a href="https://account.live.com/consent/Manage" rel="noopener nofollow" style="background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0px 0px; background-repeat: repeat; background-size: auto; border: 0px none rgb(0, 140, 201); box-sizing: border-box; color: #008cc9; margin: 0px; outline-style: none; outline-width: 0px; padding: 0px; text-decoration-line: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">The list of apps connected to your OneDrive Personal account</a> </li>
<li style="background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0px 0px; background-repeat: repeat; background-size: auto; border: 0px none rgba(0, 0, 0, 0.7); box-sizing: border-box; list-style-type: disc; margin: 24px 0px 24px 32px; outline-style: none; outline-width: 0px; padding: 0px; text-align: left; vertical-align: baseline; width: 712px;"> <a href="http://support.office.com/en-us/article/Manage-app-permissions-using-Advanced-Security-Management-2062C312-B1E4-4CE7-8CB2-EA39BC0DFDAD" rel="noopener nofollow" style="background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0px 0px; background-repeat: repeat; background-size: auto; border: 0px none rgb(0, 140, 201); box-sizing: border-box; color: #008cc9; margin: 0px; outline-style: none; outline-width: 0px; padding: 0px; text-decoration-line: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">Office 365 app permissions</a></li>
</ul>
<div style="background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0px 0px; background-repeat: repeat; background-size: auto; border: 0px none rgba(0, 0, 0, 0.7); box-sizing: border-box; color: rgba(0, 0, 0, 0.7); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: "Source Serif Pro", serif; font-size: 21px; line-height: 32px; margin-bottom: 32px; margin-top: 32px; outline-style: none; outline-width: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;">
If you are using a Surface Hub please download the <a href="https://www.microsoft.com/en-au/store/p/nsquared-documents/9n1b1x5g3g67?rtc=1" rel="noopener nofollow" style="background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0px 0px; background-repeat: repeat; background-size: auto; border: 0px none rgb(0, 140, 201); box-sizing: border-box; color: #008cc9; margin: 0px; outline-style: none; outline-width: 0px; padding: 0px; text-decoration-line: none; vertical-align: baseline; word-wrap: break-word;" target="_blank">free trial of nsquared documents from here</a>. </div>
<div style="background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0px 0px; background-repeat: repeat; background-size: auto; border: 0px none rgba(0, 0, 0, 0.7); box-sizing: border-box; color: rgba(0, 0, 0, 0.7); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: "Source Serif Pro", serif; font-size: 21px; line-height: 32px; margin-bottom: 32px; margin-top: 32px; outline-style: none; outline-width: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;">
If there are any features you would like to see added to nsquared documents please let us know.</div>
<div style="background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0px 0px; background-repeat: repeat; background-size: auto; border: 0px none rgba(0, 0, 0, 0.7); box-sizing: border-box; color: rgba(0, 0, 0, 0.7); counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; font-family: "Source Serif Pro", serif; font-size: 21px; line-height: 32px; margin-bottom: 32px; margin-top: 32px; outline-style: none; outline-width: 0px; padding: 0px; vertical-align: baseline; white-space: pre-wrap;">
<video link=""></video></div>
Dr. Neilhttp://www.blogger.com/profile/11504145045360157799noreply@blogger.com0tag:blogger.com,1999:blog-1309846465832839404.post-71037135633703906852017-09-06T18:25:00.000-07:002017-09-06T18:29:23.140-07:00nsquared documents 2.1<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/N2PF5v7zU7Q/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/N2PF5v7zU7Q?feature=player_embedded" width="320"></iframe></div>
<div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
<br /></div>
<div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
The Surface Hub is
an incredible achievement. As an interactive multi-user screen it presents a
canvas (or surface if you will) upon which your team can collaborate, create,
brainstorm, and present ideas.</div>
<div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
<br /></div>
<div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
As a true multi-user
device, you do not login to the Surface Hub; who would be the person logged in
when a team needs to work together at the screen? Authenticating the entire
session for a single person makes sense if only one person is going to need to access
their data. The latest update to Windows 10 Creators update does do this, and
it alleviates the challenge for a single presenter. </div>
<div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
<br /></div>
<div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
When you have a
meeting with multiple people, who want to bring their content to the screen,
you need a way for each person to authenticate. Authentication on the Surface
Hub is a cumbersome experience. If you log in using the on-screen
touch-keyboard you are sharing your password with all the people watching. This
is made far worse if your Surface Hub is projected out to other screens on a
teleconference or in room. </div>
<div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
To solve this
problem at nsquared we built nsquared documents, an application that allows
multiple people to authenticate with their accounts on the Surface Hub, in the
same session. With nsquared documents you associate an NFC tag with your
account the first time you use the application. </div>
<div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
<br /></div>
<div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
In the first version
we released you could connect to your OneDrive for Business account using your
Office 365 account. In version 2.0 we expanded nsquared documents to support
your SharePoint and Dropbox accounts. You still only need a single NFC tag and
you can access any of the accounts you have added to your profile.</div>
<div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
<br /></div>
<div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
This latest release
enables you to also add your OneDrive personal account to the same tag.</div>
<div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
With nsquared
documents 2.1 you and your team can access files from Dropbox, Office 365, and
OneDrive personal accounts.</div>
<div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
<br /></div>
<div style="border-width: 100%; direction: ltr;">
<div style="direction: ltr; margin-left: 0in; margin-top: 0in; width: 4.1666in;">
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiB3h59Wuj7JSI2twuz78Zs_z-gjjC4UBJofvfcWScGu0dawn-HtJ6s5HWp_uqwT_xMYqQo59D_yRHxKUu3MwAf32XffKKbcwNt_tM-eUSYrYpJLZS_Q9C6vrLVMSQ9prHQGYjYyZ5AZ00/s1600/registration.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="400" data-original-width="400" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiB3h59Wuj7JSI2twuz78Zs_z-gjjC4UBJofvfcWScGu0dawn-HtJ6s5HWp_uqwT_xMYqQo59D_yRHxKUu3MwAf32XffKKbcwNt_tM-eUSYrYpJLZS_Q9C6vrLVMSQ9prHQGYjYyZ5AZ00/s320/registration.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Create an NFC tag to connect to any of these cloud document stores</td></tr>
</tbody></table>
<div style="direction: ltr; margin-left: 0in; margin-top: 0in; width: 4.1666in;">
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgA6NYkhfh85K7fUe9VmetLIaeFco9_L86w4O0FRGAWNd2Mqgk1kUuOSdJJAZRpIlHlCwcSEwbNlX5Ho0vQXGPUfQqThDdFEb7toQQeMpAYVg28Sgx7cJfn01BGWEIuSr9xgVwzkTfqjnk/s1600/available+accounts.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="249" data-original-width="687" height="115" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgA6NYkhfh85K7fUe9VmetLIaeFco9_L86w4O0FRGAWNd2Mqgk1kUuOSdJJAZRpIlHlCwcSEwbNlX5Ho0vQXGPUfQqThDdFEb7toQQeMpAYVg28Sgx7cJfn01BGWEIuSr9xgVwzkTfqjnk/s320/available+accounts.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Add other cloud document stores to your tag in nsquared documents 2.1</td></tr>
</tbody></table>
<div style="direction: ltr; margin-left: 0in; margin-top: 0in; width: 4.1666in;">
<br /></div>
<div style="direction: ltr; margin-left: 0in; margin-top: 0in; width: 4.1666in;">
<div style="font-family: Calibri; font-size: 11pt; margin: 0in;">
If you are using a Surface Hub, please download the free trial of <a href="https://www.microsoft.com/store/apps/9n1b1x5g3g67" target="_blank">nsquared documents from here</a></div>
<div style="font-family: Calibri; font-size: 11pt; margin: 0in;">
<br /></div>
<div style="font-family: Calibri; font-size: 11pt; margin: 0in;">
If there are any features you would like to see added to nsquared documents please let us know.</div>
<div style="font-family: Calibri; font-size: 11pt; margin: 0in;">
<br /></div>
<div style="font-family: Calibri; font-size: 11pt; margin: 0in;">
For more details please <a href="https://youtu.be/N2PF5v7zU7Q" target="_blank">watch the video</a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div style="font-family: Calibri; font-size: 11pt; margin: 0in;">
<br /></div>
<br />
<div style="font-family: Calibri; font-size: 11pt; margin: 0in;">
<br /></div>
<div>
<br /></div>
</div>
</div>
</div>
Dr. Neilhttp://www.blogger.com/profile/11504145045360157799noreply@blogger.com0