We (Kostas, Daniel Lam and I ) have finally finished an augmented reality based app for an exhibit at the “Almost Lost: London’s Buildings Loved and Loathed” exhibition organised by English heritage at Quadriga Gallery, Wellington Arch. The event ( http://goo.gl/Qq6twI ) is going to be open until 2nd Feb – if anyone is interested in the architectural conservation history of london.
Our work in the exhibit was to build an AR app which adds animations (smoke,people, carriages) to a physical model and also augments it with the current day 3D buildings in the same area and RAF imagery. Screen Shots of the app (in the making) are below. The press coverage of the event can be seen at http://goo.gl/DtPG60 andhttp://goo.gl/OvQvMT .
Credits: 3D model of Bloomsbury by Blom
After trying to organise the reading for my research last week, I realised that research process in my mind is not organised as a list or a checklist but as a network of interconnected ideas from various sources. This is where I felt the reference managers which I was using were failing miserably. Though they did a good job in organising the meta data on the papers, books and articles which I was reading and including them as references in my write-up, they did not help me in the research process. My research still remained as an exercise where I go through search engines and list of references in other papers manually and trying to put together all the stuff in my mind by myself. This is where I decided that If I cannot find a tool which I want I would rather build one myself and also that all the things I learned about networks and web development in the past year has to be put in use somewhere.
So here it is, RefNet – A reference manager which organises the references/bibliography as network of objects rather than a list. The idea is to build a tool where you can drag and drop papers and books as objects, and based on the citations in them they are organised as network of interconnected ideas. I started a github repository and using vivagraph library (inspired from here), put together a very preliminary working concept and added some data on the things I have been reading the past week. The result is as below, (click the image for interactive version)
The plan forward is to make the tool more dynamic with drag and drop option, automatic citation importing from a database such as web of knowledge, possibly a suggestion tool to say which papers to read further based on the network properties and finally a plugin to integrate this with google docs/ ms word. As mentioned earlier the project and code as of now is up on github (here) and would be really happy to collaborate with interested people on building this.
The visualisation is similar to what I did for the IRIS competition earlier but the difference is in the backend. Instead of reading a preset datafile and displaying it, this map here has a MySQL database in backend and queries it through PHP and visualises the result. It also has PHP based POST mechanism to send data to the database from the user. The best part is that none of the data in the image above is collected or entered by me (except for my two data points). It is rather generated by the people who individually entered their own locations.
There are two problems faced by everyone who is starting with Unity3D. First is version control – There is virtually no rollback mechanism and any changes done at the project level is absolutely irreversible which causes most of the data loss. Second is collaboration – if you are working as a part of a team, it is absolutely painful to transfer and sync files across workstations. Unity has an elegant built in solution for both these problems with its asset server and team license. But setting up an simple local asset server with version control is tough if you are an absolute beginner let alone making it remotely accessible. So here is a walk through for setting up an asset server over a local network in windows environment which I figured out after spending a some time.
Before we go into the entire process, it is better to understand how a local network works and how does a server – client relationship works in it. When I say a local network, I mean a set of computers connected through wifi/lan with or without a router. Here the router is also a computer in itself (usually running an embedded Linux) which is capable of only one specialised function – ‘routing’ traffic between computers inside and outside of the network.
I think it is better to understand the setup using a real world analogy. Consider every computer as a house/property in real-world and communication between them as sending mail between these properties. Here the local network would be a neighbourhood and the router would be a neighbourhood post office. Post office is a property in itself but its only purpose is handling mail.
Now imagine that you are in property A and a letter has to be sent to Property B within the neighbourhood. So naturally you will write the address of property B on the envelope and send it to the post office and the post office delivers it to property B. Here the address of a property has a digital counterpart – IP address. IP address is unique to every computer within a local network and even the router (post office) has one. Since post office has a fixed address, all you mail by default goes to the post office. This is a simple process and it is exactly how a local network of computers works, except for a small complication.
Properties usually don’t have just one occupant; they have multiple people living in them. So what if you want to send a letter to an occupant living on property B? You write the number of his mailbox along with the address. Isn’t it? This is where the concept of ‘ports’ come in. so imagine a computer in a local network with multiple programs running on it. Every program which wants to connect to another specifically listens to a ‘port’ allocated to it, so that any packet received at the port directly goes to the program. The diagram below illustrates the concept.
Translating this concept to our unity setup, we have two types of programs, unity asset server and the Unity3D software itself. unity asset server will reside in one computer in the network which will be our server and listen to a specific port and Unity3D software (client) will be residing in all the computers in the network. One interesting case in this setup is that it is possible to have a Unity3D (client) running on the server computer itself. The diagram below illustrates the setup,
With this background on the overall setup, now we can move forward to implement this in the network.
- Unity3D installed with Pro licence – Specifically, Team license [link] (in all machines)
- TKdiff installer [download]
- Unity Asset Server installer [download] (not cache server)
Install and Start the Asset Server:
This is a straightforward step except for the admin password, which is really important. Make sure that you remember this for later. This process has to be done only on server computer. Once installed and started, the asset server program in the server machine starts listening to the port 10733.
Find out your server Address and Add a Firewall exception:
With the asset server running in the server computer, we need to know the address of the server in the network to communicate with it. It can be found out as shown in screenshots below. (Remember that if you constantly shuffle your computers in the network, the server’s address might change as well. To overcome this you can either set the ip of the server manually in the TCP/IPv4 properties or can access the settings in your router to make it assign constant ip to certain computers). Note down your IP address and keep it aside for later use.
Since the windows firewall usually blocks all connections to programs in the computer unless it is explicitly allowed, any incoming and outgoing connections through this port has to be set to be allowed in all types of networks (private to be specific) as shown below.
Now out server is ready and accepting connections. now we have to connect to this server via unity3D client.
Install and Setup tkDiff:
Before connecting to the asset server we need to some preparation at client side as well. First is to install a diff tool – tkDiff. Installing tkDiff is straightforward as well. Since this is an external software which unity uses to display and resolve the difference between two files clashing during the sync (commit), you have to tell unity to use this through the preferences dialog after installation. This process has to be done on all the client computers.
Set Google DNS: This is not that important/ necessary at local network but do set your dns servers to google DNS whenever you run into strange bugs (sometimes your public IP and local ip can be the same creating problems)
Using the Asset Server:
Its done! The server is set up and the clients are ready to connect to the server. To test the availability of the server from the client, you can use this app (https://code.google.com/p/paping/) with your server address and 10733 port. Now we have to set up projects and users in the server for the client to connect to the network – this is the administration and in unity asset server this has to carried out from the client end for decent GUI.
Administration: The administration is done through the asset server window (ctrl+0) in unity 3D, as shown below.
Now there is a project folder (actually a database) created in the server machine to which we’ll connect our local project folders in Unity3D running in client machines.
Client-side: Now from same asset server (ctrl+0) window, we can connect to the server from the overview tab. Here the server IP is the same but the username and password would be the one we created using administration.
Thats it… done. Now you have a proper asset server managing your project files which can accessed and edited collaboratively by the users (as allowed in the administration panel), with version control.
For details on using the version control and asset server (pulling updates, committing changes, resolving conflicts etc.) please check this documentation. If you need an introduction to version control in general consult here (particularly the ‘Centralised VC’ section). Hope this is useful.
Its been a month since I have submitted my dissertation and as promised in the previous posts (http://goo.gl/XqYvuP and http://goo.gl/c7Lvu6 ) now it’s time to start blogging about the dissertation and its outputs. So starting from today I would try to do one post every day for at least 2 weeks, talking about one aspect of my dissertation, leading up to the final results and conclusions.
To give brief introduction, In my dissertation (titled-“Network theory approach on modelling occurrence of Road Accidents – Case study UK”) I set out to create a dual graph of UK roads, attach the Road accidents data to the graph, find patterns in the distribution of accidents in the dual graph and find correlations between this distribution and the properties of the network.
Today, as a start I want to do a flash-forward into the whole process and share one of the key outputs produced as a part of the dissertation – A static visualisation of the dual graph of the entire road network of UK (England, Scotland and Wales) showing the betweenness centrality of each and every node.
Explanation: The above visualisation shows all the roads in UK as points (simplified by averaging the coordinates of their constituent segments) and intersections between roads as lines connecting the corresponding points. The size of the points show the betweenness centrality of the corresponding roads in the information space. To put it simply, the visualisation highlights the most central roads in UK when the network is resolved as a dual graph. We can see that M25 is the most central road in the whole network with a the highest probability of being in a shortest path derived between any two random roads in the network. The visualisation is produced using Processing.
Though it is simple plot of a series of data on a 2D plane, lot of things have been done in the background to create this abstract representation of the UK road network, about which I would be blogging in detail starting from tomorrow. I am hoping this series of posts are interesting to the readers and help me identify all the holes, drawbacks and errors in my research process.
The current functions available with this map are,
1) Speak to navigate – Click on the microphone button (or click “ctrl+alt+.” ) on the text box and start speaking. The field will recognise when you stop speaking, analyse and interpret the sound as text and if it is a place, takes you right to place you just spoke.
2) Zoom and Pan – you can use the same trick with some preliminary commands as well, the system as of now understands ,
“east direction“, “west direction“, “south direction” and “north direction” will pan the map in the corresponding direction.
“zoom in/ zoom out ” zooms the map.
3) Other commands,
“satellite“ – switches the map to a satellite map
“simple“ – switched the map to, above shown simplified default look and feel.
As usual, I request the readers to give it a try and share the results & problems in the comments section below. Also feel free to put in your suggestions and point out any mistakes.
As I have started working on my dissertation full-flegedly, I have been reading a lot on networks and the properties of networks. This work is a part of the reading process where I built a simple random network generator in processing so that I can understand the the stuff I am reading better. The generator can be accessed here (http://balaspa.50webs.com/r_net/) and it is really fun to experiment with simple Erdos-Renyi’s random network. The instructions are included in the page.