Deploy core functions of Unity as web services? - web-services

By core functions I mean like rendering, physics engine, scripting etc. Basically distribute the Unity engine over the network, while each of them can communicate with each other via HTTP requests.
I would imagine that to do so, one would have to access the source code of Unity engine? But since it's not open-source, would Unreal Engine be a better bet?
Any info will be hugely appreciated. Thank you!

The question is rather vague, but in theory of course you can make any functionality available to the web that is available to your code.
You'd write a Mediator that takes requests from the web, translates them into specific tasks and forwards them to the Unity engine, using Unity's API. Once Unity has finished processing the tasks, the results are collected by your Mediator and sent as a response to the initial request.

Related

Holographic Remoting to multiple HoloLenses using Unity

I am looking for a way to build a Unity application that allows multiple users to see (and at least one of them interact with) the same hologram. I am using the MRTK for user interaction.
When using the UnityEngine.XR.WSA.HolographicRemoting class, it seems I can only establish a single connection to a HoloLens. (The class is used in Microsoft's tutorials, for example here)
I am now wondering if it is at all possible to connect multiple HoloLenses to a single Unity application. I tried looking into implementing a custom remoting app as described here, but my C++ knowledge is too limited to assess if it's even possible.
If it's not possible I would also welcome any suggestion on how to attempt this
otherwise.
Edit:
It also seems like the class mentioned above is not compatible with Unity's new XR Plug-In Management. It does not recognize Holographic Remoting being enabled in the Plug-In settings. I couldn't find another (new) implementation to use Remoting via script.
Edit 2:
I failed to mention, that I absolutely need to use Remoting, because the content I want to display is too detailed for the Hololens to handle itself. So basically I am looking for a way to combine Remoting and Sharing in a nice way.
It seems like you want to share experiences and each user has his/her own perspective on the holograms in the scene and can each interact with the holograms. If so, Holographic Remoting does not match your request, it isn't an aim at share experience.
To create shared experiences to let multiple users collectively view and interact with the same hologram, you need to leverage Azure Spatial Anchors for local users and Photon SDK for syncing the content/state in the scene. For documentation, have a look at Multi-user capabilities tutorials
If you just want to enable other devices to see what the HoloLens sees from a different perspective in the same location, and receive updates on interactions of the host HoloLens user interacting with the holograms, please see:Spectator View

What are the pros and cons of developing a web app using Parse vs. AWS?

From what I know, Parse offers convenient communication stacks for various platforms such as iOS, so it is easy to build clients that use your web app.
But Parse also seems to be tightly integrated with Facebook. If you were to build a web app that does not need Facebook, but that may integrate with Facebook in the long term, is Parse the clear winner over deploying directly to AWS, or are there important disadvantages to consider?
As far as I understand their page Parse is a PaaS (platform as a service) provider like Heroku and others while AWS is a IaaS (infrastructure as a service) provider.
Pros for PaaS:
They care about the infrastructure
You build your app on an existing platform
For the start you don't need "ops-guys" as you don't do ops
You can take their knowledge and prebuilt tools for your advance
Pros for IaaS:
You have full control about the underlaying infrastructure
You can start with a greenfield and build what ever you want
You can use tools like Puppet / Chef / ... to control your servers
You don't have to pay for the additional stuff you get when using PaaS
(but have to pay your people for it)
So there is not a winner of this "battle" but you have to decide whether you want to use prebuilt tooling and give some independence for this or whether you want to have the absolute control over everything (nearly as you can't touch the hardware) and invest time and manpower into building your own tooling.
"Better, Faster, Cheaper.."
If you are pursuing mobile first strategy, Parse is a great tool for bootstrapping a mature, full web-presence from nothing more than an original beta app.
I dont have direct experience with AWS.
I have used Heroku/Parse integrating (very quickly) a stand alone mobile app with the back-end where the back end needs to cover following:
DB/persistence/noSql
Workflow - async tasks
REST API interface HTTP
Once the mobile app existed with only stubbed local data , Parse allowed a single engineer to build out ALL infrastructure mentioned above very quickly, taking the app from single user to multi-user with full DB and workflow that backs client side events with considerable server-side and cloud side business logic and process. Scaling related startup stuff that used to take weeks took only days.
The compression (time&money) when scaling up an app stack is really something. The Parse API did almost everything that i needed with one small exception (remuxing UGC media).
Personally, i abandoned the parse/android SDK in favor of a more robust REST API (threading on client-side and heavy HTTP activity ).
Developers used to Curl/REST dev stacks will take to Parse.

Testing Distributed File System

I have been developing a robust distributed file system to be run on tcp/udp network.
I am writing the application in C++.
Currently I am looking for test framework that I can use for basic testing of the DFS.
I am assuming I have to write some sort of plugin for the test framework.
As, I don't have bunch of computing power(have two machines). Also, would like to know ideas on whether to use some sort of simulator or buy some hardware for testing. Currently I am thinking about putting multiple VM's on my machines to create my test environment.
Test framework should be agnostic to network protocol being used. I am assuming most are, but not sure.
Any addition suggestions regarding test environment/framework would be appreciated.
Using MIT's Star Cluster toolkit you can launch a cluster. Amazon provides free tier service, you can use that.

Create a webservice that connects to another webservice every hour to update my DB

I want to create a weather app for my android phone but now I got stuck on the backend part of the app.
I have found a weatherservice where I can, for free, get detailed information about a certain location through their webservice. But they have stated in their rules that I am not allowed to poll their service with a high frequency. So I thought that I could create a webservice on my own that retrieve weatherinformation from the weatherstation that I found and then make it available through my webservice so that my app only make calls to my service.
the communication will be like below
MyApp <--> MyWebService <--> commercial webservice
the android app talks to MyWebService. And my webservice talks to the commercial service.
So I want MyWebService to do to things.
retrieve information from the commercial webservice once every hour and update my database
handle requests from my androidApp
My problem is that I know to little about web application and web services. I don't really know what language to choose for the webservice.
PHP with soap or REST looks like a good candidate for the second task. But I can't find any sample on how to handle the first task. Is there any easy way to tell the server to run my script once every hour?
I have been looking a litle into C# as well which would suit me a litle bit more as I am more used to C#. But the same question arise here. How do I handle the second task?
This is something that I wanted to write for a long time, but I feel totaly lost here.
Doing things "once an hour" (or more generally, scheduling tasks) from a web-only application is tricky for a number of reasons. It is much better in general to use the built-in mechanism of the operating system to perform scheduled tasks (e.g. cron under Linux, or Scheduled Tasks under Windows), or to write a service/daemon process that handles the updates.
Having said that, there is a fairly straightforward way to meet your requirement. You can cache the result of the commercial web service in your web application tier, along with a timestamp of the last time you retrieved the information. When a web request comes into your web service from your app, first check the timestamp of the cache. If the timestamp is less than one hour old, just returned the cached weather data. If the timestamp is more than an hour, call the commercial web service directly from there, write the result and the current time into your cache, and return the data you just got to the app.
PHP is certainly well-suited to this kind of task. Detailed instructions on how to do that are beyond the scope of a Stack Overflow question. Google for PHP and caching, try out some examples, and ask detailed follow-up questions if you get stuck.

How does one go about breaking a monolithic application into web-services?

Not having dealt much with creating web-services, either from scratch, or by breaking apart an existing application, where does one start? Should a web-service encapsulate an entity, much like a class does, or should the service have more/less to it?
I realize that much of this is based on a case by case analysis of what the needs are, but are there any general guide-lines or best practices or even small nuggets of information that web-service veterans can impart to a relative newbie?
Our web services are built around functional areas. Sometimes this is just for a single entity, sometimes it's more than that.
For example, if you have a CRM, one of your web services might revolve around managing Contacts. Creating, updating, searching for, etc. If you do some type of batch type processing, a web service might exist to create and submit a job.
As far as best practices, bear in mind that web services add to the processing overhead. Mainly in serializing / deserializing the data as it goes across the wire. Because of this the main upside is solely in scalability. Meaning that you trade an increased per transaction processing time for the ability to run the service through multiple machines.
The main parts to pull out into a web service are those areas which are common across multiple applications, or which you intend to expose publicly, or which would benefit from greater load balancing.
Of course, you need to analyze your application to see where any bottlenecks really are. In some cases it doesn't make sense. For example, if you have a single application that isn't sharing its code and/or the bottleneck is primarily database related.
Web Services are exactly what they sound like Services for the Web.
A web service should be built as an API for the service layer of your app.
A service usually encapsulates an entity larger than a single class.
To learn more about service layers and refactoring to add a service layer read about DDD.
Good Luck
The number 1 question is: To what end are you refactoring your application functionality to be consumned as a bunch of web services?