Quantcast
Channel: Enabling Communications, Anywhere, Anytime
Viewing all 144 articles
Browse latest View live

Arduino Yun as a possible Mesh Extender Platform

$
0
0
Regular readers of this blog will know that we have been looking at a variety of hardware options for the Serval Mesh Extender.

The Serval Mesh Extender is a device that combines ad-hoc WiFi meshing with long-range license-free UHF packet radio to allow the easy formation of mesh networks spanning useful distances. Typically the UHF packet radio has a range about ten times greater than WiFi. This means that in ordinary suburban and urban areas we get a range of a block or two, and in open rural areas the range can be in the kilometres.

We run our award winning Serval Mesh software over the top, providing an easy to use communications system that lets you use your cell phone without cellular coverage, for example, during a disaster, or when you and your friends are near one another outside of the range of your native network. For example, if you are at an international gathering and don't want to pay $4 a minute for the privilege of calling someone a few hundred metres away.

The challenge with the Mesh Extender design is that we haven't had the budget to design our own device from the ground up. As a result we have been using existing hardware platforms, and trying to adapt them to accept the excellent RFD900UHF packet radios we source from RFDesign (their link margin is probably about 10dB better than competing radios that we are aware of).

This means that we have been doing things like modifying TP-LINK MR3020 wireless routers to build prototypes. While it works, the process is far from satisfactory, and the physical steps take a couple of hours per unit, which makes the effective unit price very high, despite the low cost of the MR3020 unit itself.

This is where the Arduino Yun is very exciting for us. It has all of the functionality of the MR3020 in the form of the mesh-friendly Atheros processor and WiFi system-on-a-chip running Linux, and of course being an Arduino it has plenty of connectivity options for us to connect to the RFD900, which just uses RS232 serial. As an added bonus the Yun has a microsd slot, so we don't need to use a USB memory stick for mass storage, which actually makes a noticable impact on power consumption. The larger flash on the Yun is also welcome, as the 4MB flash on the MR3020 is, frankly, a pain to work with.

While we are still working on the integration, the prospect is there for the Yun to save us a lot of time, and hence cost, in making future prototypes, and the Yun board itself could be the basis for a customised PCB that exactly meets our needs, and allows us to just plug the radio module directly onto the PCB.  Here you can see the Yun connected to an RFD900 radio ready for integration testing:





In short, the Yun is opening a new opportunity for us to innovate faster, more affordably, and with a better result.

Custom case for MR3020 based Mesh Extender prototypes

$
0
0
With the help of the very capable Musti from WLAN Slovenija and some of our crowd funding campaign funds (thank you again to everyone who contributed!) we now have a nice 3D-printable case for the MR3020-based Mesh Extender prototypes.

The following images are supplied by Musti, as we are yet to print some of these out ourselves in the lab.  You can be sure we will be doing this as soon as possible next week.

Having our own case is one of those little things that makes a big difference to the end usability, and also feasibility of manufacturing these units in small quantities.  No odd parts poking out. No lids that won't close properly. All little things that make a big difference.

Musti has made the case so that the PCB and radio just slide in, and with a little extra PCB all the connections can be made without having to solder anything -- a very nice time-saving trick.

We will be putting the CAD files up on http://developer.servalproject.org/wiki as soon as we get the chance.




















Next we are looking at doing the same for the MR3040, which is much the same as the MR3020, but has an internal rechargeable battery -- that would give us a one-piece complete Mesh Extender, which is very appealing. Also, the MR3040 is much easier to open to get the PCB out in the first place compared with the MR3020 whose lid is cemented and clipped shut, and generally Un-Fun to open by the dozen.

Mesh Extender custom case fitting

$
0
0
As mentioned in the last post we now have a 3D printable case for the MR3020-based Mesh Extender prototypes.  Until today we had only seen the images of the one that Musti printed in Slovenia.  But now thanks to the technical staff here in the department, we got one printed up this morning while I was teaching to see how it looks, and if it fit the components we were using here.

First, here is the unit after we put all the parts in, in fashionable Flourescent Yellow, almost verging on the appropriate International Standard Yellow-Green:



We did, however, hit a little snag: The USB memory sticks we are using here, while very small, are slightly larger than the ones that Musti was measuring against.  Similarly, the USB connector itself had a taller flange than anticipated.  The end result was the case is about 2.5mm too narrow, and about 1mm to low around the USB connector:

This we remedied with a bit of filing to make a slot to accept the USB memory stick until we can tweak the design.  I filed off some of the stylistic curves on the memory stick as well to make this easier.  Then it all fit:
Musti has done a great job making it all slot together, and feel really firm and stable in terms of the positions of the components.

Now to build an updated servald binary including all our recent changes and bug fixes...

Improved 3D printable case for mesh extender

$
0
0
In recent blog posts I have been talking about the 3D printable cases for the mesh extender prototypes.  We had a little problem with the first prototype not fitting the USB memory sticks that we had, so Musti kindly tweaked the design to make more room, as can be seen in this shot:





 With the lid on it looks like this:

The ABS plastic just has a nicer finish than the other plastic we used on the first test unit.  With this change it is just about right, except that it ended up bring a little too short for some reason, perhaps an issue with our 3D printer, as you can see by the little gap behind the lid here:



We will just print the case 1mm longer, and all should be well.

The next step from here is to adapt it for the MR3040 router which has a small rechargeable battery, and means that we can have a single-piece Mesh Extender with at least a few hours of battery life before adding an external battery.

Serval recognised in International Red Cross/Crescent World Disasters Report

$
0
0
It is very pleasing to see our partnership with New Zealand Red Cross to enable communications during disasters has been recognised in the International Federation of the Red Cross/Crescent (IFRC) World Disasters Report.



"This collaboration between the New Zealand Red Cross, DeLorme and Serval has created a communications system with many benefits from the complementary capabilities of the three technologies, including the smarts and sensors of the smartphone; the global reach of Iridium; resilient communications due to path diversity and the store and forward mechanism; the value for money of commercial off-the-shelf components; and a familiar interface that can be used before, during and after the disaster."

The full report can be downloaded here:

http://www.ifrc.org/PageFiles/134658/WDR%202013%20complete.pdf

Open-Source Collapsable Communications Tower

$
0
0
I have been helping some mechanical engineering students from the side-lines with a project to make an open-source rapidly-erectable communications tower, with internal space for comms gear and batteries.

I hadn't caught up with them for a few months, but today was student expo for the department, and so I went down to see what they had created.

It was very pleasing to see a nice that they had indeed managed to make a 6m high tower that can be assembled in less than 10 minutes, and consists entirely of common hardware and a few 3D printable parts, as you can see below:



And again with one of the students who designed it for scale:

The design uses three guy ropes for stabilisation, and was designed to accept an 85m/s static wind load.  The practical limit would be less than that under realistic dynamic wind conditions.

Following my suggestion, the entire tower when broken down is small (<140cm total linear dimensions, approximately 1m in longest direction) and light enough (19kg) that it can be included in checked luggage on a normal commercial flight.



By using only common plumbing components and a few 3D printed components, it could in principle be manufactured (or repaired) in relatively infrastructure deprived settings, provided you had a 3D printer, of course.



Think you'll have trouble finding 3D printer filament?  Then you might want to make use of one of the other student's projects, turning plastic milk bottles into 3D printer filament.  That project has a bit more work to do, but the general concept is there and working.  There are also some other projects around the world working on the same kind of resource scavenging approach.




Don't Panic, it's a Serval Mesh Extender

$
0
0
I have been working on the firmware for the Mesh Extenders the last couple of weeks.

This has involved combining a few features to make a 0.01 release that can go out on the perk Mesh Extenders, as well as some WR703N-based mesh extenders we are preparing for a monastery (more on that in a later post).

I wanted the firmware to support updating of the servald binary and config file, as well as preventing login as root in normal operation, and operating a captive portal so that people connecting to a mesh extender get some idea of what is going on. It also needs to support the different hardware types we are using.

This is all finally coming together as the following image shows.   The captive portal automatically pops up on my Mac if I associate with a mesh extender by Wi-Fi.


I'll talk more about the firmware structure later, and document it on the wiki.  Anyone wanting to take an early look can checkout the source code and look in the somewhat erroneously named mr3020 directory.

But for now, I am happy that we have the main functions of the mesh extender firmware functioning.

OpenITP UX Sprint ahead of RightsCon 2014

$
0
0
In just a couple of weeks it will be time for RightsCon.org 2014 in San Francisco.

In the days just before RightsCon, OpenITP are running a UX sprint that we are participating in.

With the generous support of various organisations and individual supporters Jeremy and I will be attending, and hoping to make some good progress on desktop clients for the Serval Mesh, so that people can make secure VoMP calls, send and receive MeshMS and other files from Linux, MAC OSX or Windows based computers.

Our goal is to make the Serval Mesh much more useful for more people.  Being able to receive data and communications from the mesh on the three major operating systems will obviously be a a big step forward.

So if you are a software developer, technical writer or user experience engineer and in the Bay Area that week, or even if you are not, and would like to help from afar, we would love for you to participate.
 

Low-cost mobile medical devices might just happen

$
0
0
People who know me well know that I have been talking about my desire to commoditise many medical devices by making a mobile-phone based platform that can accept a variety of medical sensors.

The general idea is that the expensive certification can be done once for all on a common hardware platform and core libraries for acquiring, visualising, and storing signals from medical sensors.

This would reduce the cost of developing new medical devices, and allow the same hardware to support many medical devices, driving the cost per function even lower.

I have been thinking for a while about how to get the necessary hardware made, which would have entailed making a custom mobile phone and other complex and expensive things.

However, this all looks much more possible now, thanks to a project that Google have been working on: their Project Ara:

http://www.extremetech.com/extreme/177708-googles-modular-smartphone-project-ara-could-go-on-sale-next-year-for-50

Ara is a modular mobile phone design, where the various parts can be easily replaced.

This would seem to make this concept much easier to make, at least from the hardware side.

Imitation is the best form of flattery

$
0
0
Recently Jeremy and I attended RightsCon 2014.  Among a variety of good things we were able to do and good people to meet with, we caught up with Miles, who has replicated our Mesh Extenders using the open documentation we have created.  While we know the documentation can always be better, it was pleasing that there was enough information for Miles to be able to replicate our work.  You can see our yellow mesh extender next to the one that Miles built himself.  Hopefully this is the first of many replications of our work.  Thanks again Miles for all your work on this and other things!





The DARPA Spectrum Challenge is interesting

$
0
0
The DARPA Spectrum Challenge was held last week.  This is an interesting event encouraging innovation in using spectrum much more efficiently.

http://spectrum.ieee.org/telecom/wireless/radio-wrestlers-fight-it-out-at-the-darpa-spectrum-challenge

This is one of those events where it would have been nice to have been there, and talk to some of the people involved in the various entries.

The technologies being developed have huge potential impact for "unlicensed" (really public licensed) spectrum, both existing and future.

Perhaps the biggest outcome was the further validation that cooperating radios can share spectrum, without any central authority or database.  Of course, we already knew that, but this is an extra data point to give regulators courage to make TV white space and other shared spectrum resources available for general use.

Humanitarian UAVs

$
0
0
A good friend pointed me to this blog post this morning about the use of UAVs in Humanitarian contexts:

http://irevolution.net/2014/05/01/intro-to-humanitarian-uavs/

This is something that we have been thinking about for a while, and talking to a few folks about, including Patrick (the author of the blog).

We agree that Serval's store-and-forward Rhizome file distribution service seems a good fit for this kind of use case.  It would allow UAVs to opportunistically transfer data between them while in flight whenever they were able, and similarly to opportunistically and automatically downlink data whenever in range of a suitable base station (which could just be a mobile phone someone is carrying).

All up, this could make it very feasible to collect imagery, cellular signal strength maps and other useful data in a fairly automatic and continuous basis, especially if combined with some intelligent flight control and coordination software.

Stopping Samsung Galaxy S2 data partition filling up

$
0
0
We have a number of Galaxy S2's that we use for Serval.  Some of those we keep "stock", so no root or anything fancy, for testing Serval Mesh on. The one of those I use as my day-to-day phone has recently been filling up the internal storage so that I couldn't install even small apps, even though I had very little installed on the phone.

After a bit of digging around, I discovered that this can be fixed by dialling *#9900# and then choosing the option to delete logcat.  Suddenly my phone was back to having 1.6GB of free space on the internal storage :)

Hopefully this will help others who encounter the same problem.


Tunnelling IP traffic over the Serval Overlay Mesh

$
0
0
We have been asked a number of times over the past few years if it is possible to carry IP traffic over a Serval Mesh network.  

Our answer has always been along the lines of "yes, you could in principle tunnel it, but we haven't added support for it, and we have other tasks higher on our priority list." Thanks to a research agreement with the New America Foundation's Commotion Wireless project, and a lot of excellent work by Jeremy, this has now changed.  

We are now able to tunnel IP traffic over the newly implemented Mesh Streaming Protocol (MSP).  MSP is kind of like TCP for Serval Mesh, in that it provides reliable in-order delivery of a data stream.  It isn't exactly like TCP, however.  For example, we intend to add a kind of hybrid mode where it tries to reliably deliver traffic, but is okay with missing the occasional packet if it will delay the whole stream too much.  That sort of feature is good for streaming live audio, for example.

To tunnel IP traffic over a mesh we need more than just MSP, we need some sort of port-forwarding between IP and MSP, in other words a protocol converter.  We also need a proxy server, and ideally, some sort of access control mechanism to decide who can use the service.  It would also be great to have an automatic service discovery mechanism.

Jeremy has implemented all of these things, as can be seen in the video below.


Talking about the access control, one of the nice things about the Serval overlay mesh protocols is that node addresses are public keys.  This means that you can reliably limit services to a particular node, just by filtering on network address, because no one can spoof the network address of any other party.

Another happy side effect is that all traffic over the tunnel is automatically end-to-end encrypted.  As can be seen in the video, there is nothing the user needs to do in order to get the encryption.


Serval Rugged Battery Pack

$
0
0
One of the tasks we have been funding from our crowd funding campaign last year is the design of a rugged battery pack that can run from a solar panel, car battery, hand crank or other various power sources.  This is desired to run Serval Mesh Extenders and other wireless nodes in the field.  Musti has been doing the work on this, putting in much more effort and time than we have paid, and has made some really great progress as the image and video below show.


Image (C) Musti, CC-BY-NC-SA from https://github.com/servalproject/ServalRuggedBatteryPack



The unit should be able to run a Mesh Extender for 2 - 4 days when the design is complete.

As with all we do, the entire design is open-source.  The source code is available at https://github.com/servalproject/ServalRuggedBatteryPack, along with some more pictures of the device in action.




Design files for free and open-source collapsable communications tower

$
0
0
After rather a long time, we finally have the design files for the communications tower online at:

https://github.com/servalproject/foss-comms-tower

We also have a paper that we will present at the IEEE Global Humanitarian Technology Conference in San Jose in October 2014.

Once the conference has been held, we will post a link to an open-access copy of the paper.  However, you can already get more detail from the thesis of Greg, the lead student on the project.  His thesis is included as a PDF in the GitHub repository mentioned above.

Problems with SanDisk Cruzer Fit flash drives

$
0
0
For the Mesh Extender we need physically very small USB memory sticks for the Rhizome data store.

We have had problems with these in the past: some Verbatim ones wouldn't mount reliably at boot.

So we switched to the SANDisk Cruzer Fit.

However, those drives are not without their own problems.

In fact, they have a really nasty habit of going permanently read-only under certain circumstances.  This is fairly well documented on the internet, and SanDisk have known about the problem for at least a couple of years, e.g.:

http://forums.sandisk.com/t5/All-SanDisk-USB-Flash-Drives/Sandisk-cruzer-16GB-became-read-only/td-p/255218/page/2

http://www.bleepingcomputer.com/forums/t/483270/sandisk-cruzer-usb-thumb-drive-8gb-write-protected/

https://discussions.apple.com/message/19239201

It turns out that one of those circumstances is when installing a Mesh Extender upgrade bundle.

We have had two more fail within the space of an hour today, in addition to others that have failed in the past.

We have contacted SANDisk to ask if they have fixed the root problem in their later drives, and are awaiting a response.  We have also got in touch with them to see about getting replacement drives.  We have offered to show them our use case that triggers the units to go read-only. Right now they signs aren't good that that they will sort things out, or even honour their statutory obligations, but we will keep you posted.

In the meantime, until SanDisk asserts and we can verify that the problem with these drives has been corrected, we strongly recommend against buying any SANDisk USB memory sticks.

Getting ready for National Science Week again

$
0
0
Australian National Science Week is coming up fast, and similar to last year, my family and I will visit some remote schools to encourage young people to think positively about science, and maybe consider including it in their future study and employment aspirations.

This year we will be visiting Hawker and Leigh Creek Area Schools, and the students from Marree Aboriginal School will make the (relatively) short trip down from Marree to Leigh Creek.

Apart from our existing love for this area, I purposely make my National Science Week plans to remote areas because they tend to miss out on a lot of the opportunities available in the cities and regional centres.  This is the tyranny of distance and isolation at work, which is also one of our prime motivators with the Serval Project.

It is pleasing that the South Australian Science Week Community Grants scheme has generously supported my efforts in this way for the past several years.  If you are a scientist, science teacher or communicator in South Australia and would like to contribute something to the festivities of Science Week in future years, they are a good port of call.

But back to National Science Week present...

I try to include something a bit different each time where the general public can get involved in some way.  This year that is establishing a permanent wireless communications link between the Arkaroola Village and the Arkaroola Homestead area where the Arkaroola Wilderness Sanctuary plans to setup a research facility, which are several kilometres apart, and separated by some spectacular and rugged hills and ridges, some of which looks just like this:



Here you can see the wireless communications gear we will be using that arrived this morning from the nice people at CityTechnology:


In the future, this will allow for high-bandwidth real-time communications to support future research activities in the sanctuary.  But right now, it is a great chance to join us at Arkaroola to be part of the team who are setting up and testing this facility, and explore parts of the sanctuary that are not normally easily accessed.  Arkaroola will be providing us with transport to the ridges and locations where we need to setup the links.

So if you would like a bit of an outback adventure with some science content, hop over to the information page on the National Science Week website and register your interest.  Of course you don't have to just join in with us, you can enjoy many of the other great things that Arkaroola has to offer, including fantastic astronomy, scenic flights over what Hans Heysen described as "the bones of the earth laid bare", and much more.  You will also be close to some of the world's oldest fossils of complex life.

Pure C firmware loader for RFD900 Radios

$
0
0
We are using the RFD900 radios in the Mesh Extenders, as described in previous posts.

The normal route for programming these is to use a python script or mono based GUI that comes with the SiK firmware.  However, for auto-updates on the Mesh Extender we need to run the update process from on the Mesh Extender itself.

It is possible to install python on the little OpenWRT boxes we use for the Mesh Extenders, however it isn't ideal on several fronts.

First, it is way bigger than the entire rest of the mesh extender distribution, and seriously bloats the upgrade bundles if we want them to be all-inclusive.

Second, for reasons I don't entirely understand, it isn't possible to run the python script headless in an /etc/rc.d script, which is basically a show stopper.

Third, the python firmware loader doesn't check if the firmware is already the same as what is on the radio.  This means that the flash would get worn out a little with each Mesh Extender software update, even if it doesn't change the radio firmware.

Fourth, you have to specify the baudrate of the radio.  It would be much nicer and safer to have it auto-detect.

Our solution is to write our own compact RFD900 firmware loader in pure C that addresses all these problems.

I have just finished the first working version, which can be downloaded from https://github.com/servalproject/flash-rfd900.

It probably has some bugs, and might brick your RFD900 (although it might also help un brick it, too ;)

It is very easy to build and use:

To compile, just type make.  It is bland enough that it should work on most UNIX-like systems.  That said, I have only tested it on my Mac.

To run, you need to tell it the firmware file (in intelhex format) and serial port, e.g.:

flash900 radio~rfd900a.ihx /dev/cu.usbserial-A901G64G

When running, it will display something like:

Read 1760 IHEX records from firmware file
Trying to get command mode...
Checking if stuck in bootloader
Trying to switch to AT command mode
Switching to boot loader...
Got OK at 115200
Board id = $43, freq = $91
Erased parameters.
Checking if the radio already has this version of firmware...

Firmware differs: erasing and flashing...
Erasing flash.
Flash erased, now writing new firmware.
Range $f7fe - $f7ff

The Range line shows the memory range currently being verified/written, so you know how far along it is.  The flash gets verified as it is written, and the program will exit with an error if verification fails after writing.

If you want to force it to flash the radio even if the firmware is the same, add "force" to the end of the command line:

flash900 radio~rfd900a.ihx /dev/cu.usbserial-A901G64G force

While this little program is far from perfect, hopefully it will be of use to some people out there.

Arkaroola Long-shot Wi-Fi for National Science Week

$
0
0
Last week was National Science Week, which had my family and I heading up to Hawker Area School and Leigh Creek Area School and Marree Aboriginal School for sessions with students, before heading up to Arkaroola to attempt to install a wireless link between the village and homestead, with the goal of later extending it to the research facility in the old shearing shed.  

The school visits were designed to give students from areas that are fairly disadvantaged some taste of science week. It was great to see a number of the students engage well, including one budding inventor from Leigh Creek. 

I have some pictures from the schools, which I need to clear with the schools before posting them. But here is the rest of the week in pictures.

To depart Tuesday morning, I needed to bring some of the equipment home from work on Monday ready to pack.  My trusty cargo bike came in handy again:


Then it was driving north on the highway, staying at Hawker and Leigh Creek for the school visits before leaving the bitumen at Copley to head over to Arkaroola.  Fortunately the roads were all open and in quite good condition:


We arrived at Arkaroola about 5:30pm after dodging lots of Yellow Footed Rock Wallabies.  It was great to see so many of them, as they were very endangered in the past, but with a lot of conservation support have made a great bounce back.

Here is the Arkaroola Village, as viewed from up by the newer observatory:


It was great to be travelling as a family, and our kids had a pretty good time, even if Caleb didn't always want to be photographed.


 There is always a lot to see if you take the time to look around at Arkaroola, although a phone camera is not the best way to capture it.  As a result the following shot is a bit of a where's-Wally to find the parrot in the shot.


After the pre-breakfast walk it was time for the first of our hands-on sessions as we set about trying to install the communications link.

It was great to have a group of seven people for most of the morning as we tried climbing a few possible locations to mount the dishes, talking about the technology and various other things along the way.  Here is one of the older in our group as we picked our way down from the summit above the old observatory trying (in vain) to see the homestead vantage point.  I did have a shot with the whole group, but it seems to have been lost.



 Here is the "Telstra pit" on the top of the vantage point behind the homestead that we were trying to see from by the old observatory.  This pit carries the land line from the Telstra microwave relay on the vantage point down to the homestead.  We did have a chuckle about the in-congruency of the nice neat cement pit cover and plastic pit liner sitting above the ground, with the cable then proceeding fully exposed down the hill side.  That said, the ground is basically ironstone, and the slope is quite steep, so we totally that understand Telstra didn't want to dig a ditch all the way.


 Here is John, one of the group up on the vantage point. You can see Telstra's big microwave relay tower and electronics cabinet here.  That extra 15m height at each end makes all the difference for being able to get line-of-sight back to the old observatory.



This is the view back towards the old observatory and village.  Neither are visible thanks to the low hill in the middle of the background.


My wife and daughter had a quick game of badminton on the hill top while we came to realise that we would have to run the link down the other side of the range.



 The trail-head map shows the village and Arkaroola Station.  We had been trying to get a link roughly along the Station Backtrack.  Now our attention was turning to the Acacia Ridge, where we knew there was good line of sight, but access would be more difficult, requiring a 1 hour walk up to the ridge line.

Instead of walking up to the ridge, we decided that it would be more fun to give John the chance to setup a temporary link between the two observatories, to get an idea of how to aim the dishes.

Unfortunately some the pole in the handy location was too fat for the mount:


So we attached it to the fence rail instead:

It's a bit tricky to tighten up, but we got there:

A quick visual inspection to see that the dish was more or less aimed in the right direction. We would come back later to trim the direction, only to discover we had it pointed perfectly to begin with.


It was back to the new observatory to pick a mounting point.  Lots of big I-section here, too large to clamp onto.  If you look at the full resolution image you can just make out the dish above the green-roofed building right of centre:


Unloading the gear...


Then applying a bit of bush ingenuity to make a mount that we could attach to:


And a few minutes later we had a nicely aimed dish:


Connect the battery, and aim it up, and obtain a very nice 55dB link margin at 300 mega-bits/second.


Due to the difficult access on the ridge, we didn't have enough time left to actually install the permanent link, although we did spend some time with Marg Sprigg to work out exactly where to mount the hardware at the homestead and village when we head back up in October.

We did however have a little time to enjoy some of the beautiful landscape, the following shot just 50 metres from our accommodation.  The natural history, amazing minerology of Arkaroola is a whole other dimension to explore.



Caleb found a few minutes to chat to the bar staff, and then it was time to head home.


Viewing all 144 articles
Browse latest View live