Food, fireworks, and inside M Mall (Times Square)
Amy added 40 photos to https://i.amy.gy/2016-penang/
Amy added 11 photos to https://i.amy.gy/2016-penang/
Sweet potato pancakes on the Wholey Wonder grill at lunch, and a naked burger for MM for dinner.
Amy added 3 photos to https://i.amy.gy/madefood/
Chips (deep fried in coconut oil) and baked beans (from a can) in a toasted sandwich. I've said it once, and I'll say it a thousand times: I'm not vegan for my health.
Smoothie: papaya, dragonfruit, orange juice, soy milk. Noodles: mee with daikon, seitan, chillis, cabbage and bok choi. Fried in coconut oil with a little soy sauce and curry powder.
Amy added 5 photos to https://i.amy.gy/madefood/
Pancake night for me and MM! Potato pancakes (with chilli and bok choi) followed by banana pancakes (with coconut). Bot made with soy milk and regular white wheat flour, dry fried.
Amy added 8 photos to https://i.amy.gy/madefood/
Wander to Northam Beach Cafe and dinner in JanXDen. (Plus one evening sunset from apartment).
Amy added 25 photos to https://i.amy.gy/2016-penang/
Amy added 'Whou2019s Afraid of AAARG? u2013 Guernica' to Bookmarks
Amy added 'Elsevier journal subscription costs - a Freedom of Information request to University of Plymouth - WhatDoTheyKnow' to Bookmarks
Amy added 'The top 10 reasons why blog posts are better than scientific papers' to Bookmarks
Amy added 'Is it time for a Retraction Index? - Retraction Watch at Retraction Watch' to Bookmarks
Amy added 'Blog posts are better than scientific papers because blog posts are not competitive' to Bookmarks
Amy added 'Credibility, peer review, and Nature, 1945u20131990 | Notes and Records' to Bookmarks
Amy added 'Why Blog Posts Are Better Than Scientific Papers? | Avil Page' to Bookmarks
Amy added 'Innovations in Scholarly Communication | Changing Research Workflows' to Bookmarks
Amy added 'FAIRness in scientific publishing - F1000Research' to Bookmarks
Amy added 'Cognonto - Data. Structure. Meaning.' to Bookmarks
Pizza pizza pizza pizza... with Wholey Wonder almond meal in the crust, because it was too sticky. It didn't help much though.
Amy added 7 photos to https://i.amy.gy/madefood/
Hearty potato and lentil soup with bread and butter. Just what you need on a sweltering Malaysian winter's day.
Amy added 1 photos to https://i.amy.gy/madefood/
I made bee hoon (vermicelli) salad with cucumber, carrot, chilli and tofu for Malaysian Mum. She provided peanut Chinese New Year cookies, I made the almond ones, and the granola bars are Wholey Wonder castoffs.
Amy added 2 photos to https://i.amy.gy/madefood/
I tried to make pancakes with only almond meal (and soy and coconut milk). They tasted great, but totally fell apart. Threw in just a little bit of wheat flour, and they held together.
Wholey Wonder is innundated with almond meal, so I made cookies. Unmeasured quantities of almond meal, brown sugar, grapeseed oil, and baking soda; drizzle of vanilla extract. I thought my ratio of sugar to flour would make them crunchy, but almond meal is not flour... so they took much longer to cook than expected (over 30 minutes) and were pretty fally-aparty. A little better once cool. Taste good, because... how can you go wrong with almond?
Amy added 6 photos to https://i.amy.gy/madefood/
Green smoothie (kiwi, apple, banana, orange juice)
Photos from the walk to George Town library; plus Behind 50, Ee Beng, and 24 hour curry.
Amy added 14 photos to https://i.amy.gy/2016-penang/
Photos by Rohan Chowdhary at the CS Penang meetup
Amy added 2 photos to https://i.amy.gy/2016-penang/
Amy added 6 photos to https://i.amy.gy/2016-penang/
Walk up Penang Hill and trip to Batu Ferringhi. Associated blog post.
Amy added 39 photos to https://i.amy.gy/2016-penang/
Dinner at new Pin Xin with the Wholey Wonder gang
Amy added 18 photos to https://i.amy.gy/2016-penang/
Cicu and other fruit. Wander through George Town to Chew Jetty and Occupy Beach St market
Amy added 3 photos to https://i.amy.gy/2016-penang/
Amy added 8 photos to https://i.amy.gy/2016-penang/
Dinner at Wholey Wonder with MM and a quick wander around a WWA art display in Hin Bus Depot next door
Amy added 4 photos to https://i.amy.gy/2016-penang/
Amy added 1 photos to https://i.amy.gy/2016-penang/
Amy added 10 photos to https://i.amy.gy/2016-penang/
Today I made loooads of exciting things. Banana almond muffins (destined for the homeless of George Town's KOMTAR bus station), marmalade, a gooey chocolate orange cake (containing the marmalade), and vegan nacho cheese. A good day in the Wholey Wonder kitchen!
Amy added 54 photos to https://i.amy.gy/2017-01-langkawi/
Ferry from Penang to Langkawi, arriving in Kuah, evening at Tengah beach and Cenang beach
Amy added 39 photos to https://i.amy.gy/2017-01-langkawi/
Amy added 19 photos to https://i.amy.gy/2017-01-langkawi/
Seven Wells waterfalls, various beaches and night market
Amy added 46 photos to https://i.amy.gy/2017-01-langkawi/
Langkawi cable cars, sky bridge, and all of the silly things that come with it
Amy added 89 photos to https://i.amy.gy/2017-01-langkawi/
Gunung Raya (highest point in Langkawi), Tanjung Rhu (beach) and Air Terjung Temerun (waterfall)
Amy added 36 photos to https://i.amy.gy/2017-01-langkawi/
Amy added 11 photos to https://i.amy.gy/madefood/
Ice cream: coconut cream, cocoa, fig syrup, coffee
Noticed the light outside was a bit weird. Went to investigate closer. It's cos the air is water. Malaysia doesn't do rain in half measures. It's either all the rain, or nothing.
So I knew there was a volunteer-run, pay-what-you-want vegetarian Indian restaurant somewhere in George Town, but somehow neglected to find it and save it on a map with the rest. And today I discovered... It's around the corner from where I live. So it's probably a good job I didn't find it sooner as I'd have neglected all of the other restaurants, but really. The food is so good, and the ambience is beautiful. It's part of a temple; roof but no walls, surrounded by trees and plants and bamboo, with tranquil music playing. While I was there, the sky opened and the downpour clattering on the sheet metal roof added to the peaceful atmosphere. To top it all off, one of the staff gave me a ride home as it was still raining heavily when they were closing up. Absolutely <3
This is a script to convert a Firefox bookmarks export to ActivityStreams 2.0 so you can import it into your own website or ActivityPub system. You can export Firefox bookmarks as HTML, but if you choose 'backup' instead of export, you get JSON. So this is just a couple of PHP functions which parse that JSON, pull out the useful information, and shuffle it into AS2 objects. It turns each bookmark URL into an as:Article with a name. These Articles are the object of an as:Add Activity. The target of the Add you can configure yourself to be the URL of your bookmarks collection. The date from the Firefox data I use as the published date in the Add, and I also auto-generate a summary. The script generates a unique new URL for every Add using the pattern /yyyy/mm/unique-id. You can of course configure this to match your Activity URLs template. This is what one looks like: { "@context": "https://www.w3.org/ns/activitystreams#", "type": "Add", "id": "https://rhiaro.co.uk/2016/06/58749e0b104c8", "published": "2016-06-13T15:32:44+00:00", "summary": "Amy added 'Web memex' to Bookmarks", "object": { "id": "http://webmemex.org/", "type": "Article", "name": "Web memex" }, "target": "https://rhiaro.co.uk/bookmarks/", "actor": "https://rhiaro.co.uk/#me" } It also generates the contents of your bookmarks collection: { "@context": "https://www.w3.org/ns/activitystreams#", "id": "https://rhiaro.co.uk/bookmarks/", "type": "Collection", "name": "Bookmarks", "items": [ "https://rhiaro.co.uk/2016/06/58749f535ac7b", "https://rhiaro.co.uk/2017/01/58749f535ce3e", "https://rhiaro.co.uk/2016/04/58749f535cee0", "https://rhiaro.co.uk/2016/09/58749f535d068", ... ] } The truth is, until yesterday most of my Firefox bookmarks are accidents; side effects of me accidentally clicking bookmark or mashing keyboard shortcuts. Then csarven shared his bookmarks export with me so I needed to do something to get a handle on all this data. The script includes a form which lists all of the bookmarks with checkboxes beside them once it has parsed the Firefox data. This lets you choose which ones to include in the final output. When you confirm your selection, it generates a JSON list with all of the Adds inside. This lets me filter out all of the crap from accidental bookmarks... so I saved the JSON, converted it to Turtle, and dumped it in my triplestore. Voila, quadrupled the size of my bookmarks on my site.
Firefox bookmarks to ActivityStreams 2.0
There are a whole bunch of big Buddhist temples not far from my apartment. I went to see them today. They include many shiny things, giant domes, belltowers, and a sleeping ('reclining') buddha. There was a great big angry bird with a sword, which I decided must be Tigo's ancestor. From the top of one of the towers I could see my apartment. In general, they were a lot bigger and had a lot more to see than I expected. Photos and walking trail.
Buddhist temples near Jalan Burma, followed by lunch at IE Organic.
Amy added 127 photos to https://i.amy.gy/2016-penang/
Last night I joined the CouchSurfing Penang meetup at coffeeshop/bar Behind 50 on Love Lane. They're a really lively and enthusiastic bunch, locals and travellers alike. They meet every Friday, and frequently arrange adventures. After a couple of hours and a group photo, they broke into two groups: beer and food. I joined the food party, and we got curry from a 24 hour place in Little India: a huge plate of cabbage, rice and dahl for 3.50myr (about 64p). Rohan, the main organiser, was kind enough to give me a ride home after that, since it was about midnight by then. They're going on a motorbike trip to the mainland this weekend, to see a ton of attractions and camp overnight. I'd seen the post about it on their CS group a week or so ago, but it read like it was for people who could ride motorbikes... it didn't occur to me to ask if anyone was going in a car with a spare seat. Turns out a few of them are, but now I have other committments this weekend. But I'll certainly be joining their next adventure!
My year in review is delayed because part of it includes a summary of everything I spent. I used six different currencies this year, and juggling them all into one so I can add them up (and then total per category, etc) is proving to be a pain. All APIs which have enough different currencies available are rate limited for their free tier, and I'm exceeding them very quickly. I need a new plan. Sneak preview though: I spent more than expected, and more than I should have :(
Today I made date syrup and almond milk. The ingredients were dates and water, and almonds and water, respectively. In the first case, I soaked the dates in hot water for five minutes, then applied a blender; this took far longer than expected, but was well worth it. Actually I think the main ingredient is patience. Two parts dates, one part water. In the second case, the almonds had already been soaked overnight and drained. I applied a juicer. Two parts almonds, two and a half parts water. Both suuuuuper good. I might use date syrup for anything that requires any kind of sweetening in future.
I'm super disappointed with how sleazy Dr. Bashir is. He's clearly supposed to come across as the poor geek who just has no luck with women and we're supposed to feel sorry for him. But the way he is hitting on Dax every episode when she's clearly not interested is awful. No amount of boyish charm, cheesey jokes and British accent can make up for his blatant disregard for her wishes and... is just entitled and intolerable. And he's so arrogant. All the time. I hope his character grows. The way Dax reacts with kind of light amusement and appreciation of the attention is kind of sad, too. She should have smacked him in the face four episodes ago.
I found out why my apartment number in Malaysia is 3A not 4! It's because 4 is unlucky for Chinese. Obvs.
There's a gecko in the bathroom. Everywhere I go there's a gecko in the bathroom. Tenth floor condo, still a gecko in the bathroom. Her name is Petunia.
I interrupt the writing of this paper about quantified self to log my dinner.
Fatal error: Call to undefined function json_decide() I think I'm subconsciously trying to outsource my decision making to my website.
First impressions: much more chill than Penang. After a totally boring three hour ferry ride in a tiny little boat where I couldn't even see out of the windows, I arrived in Kuah. It was immediately more welcoming than the jetty in George Town. I wandered around Eagle Square which I spotted from the jetty exit, and then towards the town center. Most of this walk was through a seafront park, with a little beach and lots of places to relax. It was very tranquil, and the temperature was pleasantly cooler than I have got used to. I stopped for some juice and tofu, before getting a taxi to Pantai Tengah, just south of Pantai Cenang. There's no public transport on Langkawi. It was 30 minutes and 30 ringgitts (5 less than if I'd got it directly from the jetty). I booked a hostel last minute; my CS host went AWOL before arranging to meet, and though I had others I could call on I realised I need some alone time. The hostel is super chill as well, complete with Bob Marley posters and hammocks. It's a five minute walk from the beach, where I went just as the sun was setting. I walked the length of Tengah beach in the lap of the waves, and then along the road to Cenang. This feels like a place people come on holiday, whereas George Town feels like a real place where people live. There are pros and cons for both, but right now the vibe here is exactly what I have been looking for. The road to Cenang is lined with market stalls and cafes, and bustling with people in sarongs and swimsuits; yet still relaxed. I picked up a coconut, and walked back to Tengah along Cenang beach itself. This, more touristy, beach is lined with little beach bars (coffee, cocktails, shisha), and people in huddles around candles or guitars. This morning I chilled out in hostel hammocks for a little while before heading to the closest beach. I brought my laptop, but used my backpack to rest my head, and alternated napping and feeling rubbish about the state of the world. I sat in the sea a bit before heading back to the road. I found a cafe, but I think I'll go look for somewhere with a beach view now, then try to do something useful. Photos.
After a full day, the Langkawi party vibe is wearing thin. It's more expensive than Penang all round, and the food is catered for tourists. Veggie stuff is few and far between (thank goodness for Indian). The beach the hour around sunset is gorgeous though. Staff at bars are friendly but exasperated. Tourists are... tourists. But that's just Pantai Cenang. Tomorrow brings a new adventure. My hostel is still so fucking chill though. Even though I'm sleeping in what is basically a cupboard with four beds in, and share a single shower/toilet (one room) with at least eight other people, I still love it. It's probably the hammocks. Anyway this morning I napped on the beach for a while, continuing to despair about the state of the world. Dipped in the sea, sat on rocks, got covered in ants. Then I tried: Yam Yam - a normal cafe between Pantai Tengah and Pantai Cenang; with working wifi, but it closed at 3pm. Decent long black, reasonable homemade giant hash brown. Yellow Beach Cafe - a beachfront cafe with no less than three wifi networks, none of which worked. Dismal homemade sorbet. Nice view. Kelut - a beachfront cafe/bar with working wifi, beanbags on the sand, beach umbrellas, cheerful staff and a gorgeous view. Acceptable lime juice (customised to elevate sourness). Between the three of them, I got past the napping / beach bum phase, and conjured some thesis thoughts. Now I'm in an Indian restaurant (Indian Palace) on the way back to Pantai Tengah. I ate a spicy vegetable curry and roti. Pretty good, nothing magical. Wifi. More expensive than ideal. I'll go back to the hostel and make tea and see if I can squeeze another hour or so of typing out. In the long run, I think the superior food of Penang is actually more important for my happiness than beach paradise. Photos.
I was picked up just after 9 from the hostel and joined a mixed group of tourists on a boat for an 'island hopping' tour. I had no idea what this involved , and our boat captain was particularly uncommunicative. We were first dropped for an hour at Beras Basak Island beach. Everyone dived into the same bit of ocean. I went for a wander and a paddle and chatted to some of the other passengers. Next we stopped in a bay between islands to watch eagles soaring and diving to catch fish from the water. After that we went to Dayang Bunting Marble geoforest park. 6rm entry and a five minute walk down winding steps to the lake of the pregnant maiden, so called because of the shape of the surrounding hills. The lake is packed with people swimming (in a small roped area) or pedal boats. Life jackets are required for swimming and can be rented for 5rm. We had an hour here. I dangled my feet over the edge and enjoyed feeling them being bumped by catfish. There's an overpriced touristic food court by the entrance, and the return of boats (numbered) are announced over a tannoy. There are groups from dozens of boats, so the place is always busy. The boat returned us to a jetty different from Pantai Tengah where we departed from; a minibus was there to meet us. The whole thing took about 3.5 hours. Since it's cheap I'd say it's worth doing to get a feel for the nearby islands, but hundreds of other people are also doing it via dozens of tour operators, and the boats follow the same route at roughly the same times of day; so it's crowded. Photos of island hopping. I got lunch on my way back to the hostel, then read for a bit in a hammock before heading to Cenang to meet my CS host for the next two nights. My host, J, picked me and another, Ira, up from the same spot. He drove us to his place in Kampung Yoi and we hung out while he prayed and waited for his wife to get home from work. J and his wife are Malay, and have lived on Langkawi for four years, having moved for work reasons. They like it. The four of us drove to Seven Wells waterfalls, and swam in the pools at the midpoint. We didn't have time to hike to the very top before dark, but did get in plenty of scrambling over rocks. There were a few people there, but it wasn't super crowded. Next we went to a lesser known point to watch the sunset, with a lighthouse. Then, the night market. I ate everything I laid eyes one: laici juice, peanut and corn pancakes, vegetables and rice. J dropped Ira back at her hotel in Cenang and we went back to his place. Photos of Seven Wells and night market. The power was out from when we got in until just after midnight. Good time to chat. They live in a small, two storey concrete house with two bedrooms upstairs and a kitchen/dining room and bathroom downstairs. Kampung Yoi is small and near the center of the island, not far from the airport where J works as an engineer.
J and I met Ira in Cenang, then we drove to the base of the Cable Car. J had been up before and the cheapest ticket is 55rm, so he went off to do his own thing while Ira and I touristed. We were there before ten and it was bustling. Though we were able to buy our tickets after queuing for about ten minutes and get into a cable car straight away. This is the steepest cable car in the world, and leads to not the highest point in Langkawi. At the top, you can walk to the SkyBridge down (and up again) steep winding steps for 5rm, or take a small tram for 15. Ira and I walked. The bridge felt pretty full but not packed; I'm glad I didn't go at peak times. We spent about 2 hours up there, ambling around and taking in the views. Looking out across 150 million year old mountain formations lent a moment of perspective. The tram is called the SkyGlider, the cable car is the SkyCab, and everything else in the vicinity is prefixed with Sky as well. I was disappointed they didn't have a wifi network called SkyFi. Really missing a trick there. We took the cable cars down again, and stopped for a snack in one of the terrible overpriced cafes in the complex. We didn't realise there's better, slightly cheaper, food as you get further from the ticket counters. When we got back down, the lines for tickets stretched to the carpark and they were giving out times rather than sending people straight to the cable cars. Glad we went early. The ticket (we got the basic package) included a subset of random shit in the complex at the bottom, so we went to check that out as well. The 3D art museum was silly, and I entertained myself as usual by taking pictures of other people posing with the displays from the wrong perspectives. There were many examples of irresponsible parenting. We saw the SkyDome, which is a screen covering one half of the inside of a sphere which you sit beneath; they played a series of short films, including an underwater scene and a space rollarcoaster. We skipped the SkyRex (I think it's some kind of animatronic dinosaur ride?) and sat with bunnies until J was back to pick us up. Photos of the SkyBridge and associated nonesense. We went to Tomato Nasi Kandar in Pantai Cenang for lunch. Lots of veggie options on the buffet, as well as the usual a la carte menu. I just dived into the buffet because I'm more convinced by food immediately in front of me than words on a page. I can understand why lots of people prefer to order from the menu in nasi kandar places. This buffet food had been sitting around in what is basically open air all day. But whatever. I loaded the plate up with tomato rice, cabbage, dahl and tempeh, and drank watermelon juice. I also tried a yam jelly. I don't know exactly how much this cost but Ira and I split the bill for three people between the two of us and it was 26rm in total. Our next stop was Gunung Raya, the highest point in Langkawi. We drove up, parked, and paid 10rm to climb the tower. Views were good, and at the top of the tower was seating and free cardamom tea. We spent longer than expected at the top as it was very peaceful. We heard and then saw a hornbill. Next J took us to a craft center. This was a huge complex with everything from batik teextiles to glass blowing. It was an enormous shop with different sections, plus workshop areas where if you go at the right times (we didn't) you can see things being made. I bought a postcard from Gram and a shell turtle for my hair. Next stop was Tanjung Rhu beach to watch the sunset. This is widely agreed to be the best beach on Langkawi. Nearby are only expensive resorts. It was pretty much deserted while we were there. Its shape is such that you can see both sunrise and sunset from the same place. It's kind of a large spit. Photos of Gunang Raya, Tanjung Rhu and Air Terjung Temerun waterfall. We at dinner at a Thai place (I had vegetable fried rice) and went home to crash. The following morning J took me to the jeti and even bought my roti canai and coffee for breakfast. I'm grateful for generous people in the world with the sharing, caring, couchsurfing spirit. I try to pay it forward wherever I can.
Late for something because just as I was about to leave I remembered my https certificates expire today.
I went for a walk around my neighbourhood today. As ever, in search of the nearest sand and sea. This time I headed in a straight line towards the nearest coast. It's consistently inaccessible, but there's a seafront seafood restaurant called Ocean Green and their driveway leads to a small tranquil beach. Barely a sliver of sand, but just enough to walk along or sit around for a while and listen to the rhythm of the ocean. And the caw of crows, which makes a change from seagulls. There's trash and boats making the water grimy, and the beach less than idyllic, but there are also no tourists. One or two locals working on boats or digging things from the sand. I made my way north, until I couldn't walk any further along the beach. I got as far as I got when I was coming from the other direction on my walk home from Gurney Drive a couple of weeks ago. I backed up, and entered Northam Beach Cafe, an open seating area outlined by hawker stands. It was just before 16.30, so they weren't quite open and the staff were just stirring. I took a seat in one of the blue plastic chairs, which had the KL Tower embossed in the back, and watched the sea. I could see distant mountains on the mainland straight ahead; construction and cranes off Gurney Drive to the north; and heavy equipment of George Town jetty to the south. It wasn't long before one of the guys wiping the tables asked me what I want to drink, so I ordered a small apple juice, no ice: 5myr. Steep, I think, but it came in a pint glass. He was also able to furnish me with the wifi password (northambeach123). Suddenly this becomes a viable place to work. At hawker areas like this, you order food at the individual stalls, but give your drink order to someone who comes to your table. In both cases, you pay when your item is brought over to you. It doesn't look like there's much in the way of veggie food. I saw signs for fruit rojak, beancurd, and grass jelly though, so maybe I could hang around for a while without starving to death completely. I also saw popiah... I wonder if they'll make it without meat and egg. It's a shame this place is only open in the evenings. On the other hand, it doesn't have walls, and I have the wifi password now, so I'll see if I can get away with sitting around in the morning sometime. Northam Beach Cafe started to get busy around 18.30, though not all of the stalls were open yet, including the potentially veggie looking ones. As I got up to leave, my table was immediately jumped on by two guys who had been about to sit down nearby. I looked around, and realised every other seaview seat was taken, though most of the rest of the place was empty. People were gravitating to the outer wall. Five minutes later, I'm in JanXDen Greenlife. A weird name for a restaurant, but an incredible menu. All vegetarian, with eggs and milk labelled. I'd read somewhere they had a lot of vegan desserts, but was disappointed to see a massive selection of eggless cheesecakes containing milk, and dairy-free waffles made with egg. They have some unfamiliar jelly things and tofu things though. Just nothing that'll hit the cake spot. I ordered pasembur and black sesame doufu hua. The pasembar is similar to rojak; the same spicy peanut sauce. Shredded veggies and cucumber, but this time with boiled potatoes and vegetable fritters, and pappadom pieces on the side. The doufu hua is savoury and nutty from the sesame, but a little sweet from the tofu, served in a teacup (but far to thick to drink). Perfect for washing down the spicy salad. There's also a chocolate flavour, which I see a future with.. They have some great looking pasta dishes and savoury porridges I want to try, as well as nasi lemak. Plus a breadcrumbed/fried Mexican spice plate. I would eat more now (because eating is fun, not because this meal wasn't satisfying) but I shouldn't... There are four kids here being very loud, and nobody else. They're playing board games and drawing and flailing and yelling at each other, and their surroundings in general, in a seamless mix of Chinese and American-accented English. There's wifi and power.
Oops, DuckDuckGo craps out when I put an apostrophe in my search string.
I had a vague plan of hiking from the Botanical Gardens to Batu Ferringhi. I found a trail from Batu Ferringhi which claimed to connect to a road to the Botanical Gardens, so I figured how hard could it it to be to reverse engineer it? So I met a bunch of my new energetic vegan yogi friends in the Botanical Gardens at 8am, and we wandered around a bit before embarking up Penang Hill, which all trails seem to lead to. About half way up Penang Hill we saw this dilapidated and entirely unreliable sign to Batu Ferringhi. We decided not to follow it, and instead carried on to the top of Penang Hill, as nobody else I was with had been up before. We had been following the jeep track, but diverged onto a muddy trail when we found one. This was the route I took last time, when I started at the Moon Gate. Starting by the jeep track is much faster, though far less interesting in terms of terrain. At the top I had cendol (twice the price of at the bottom..) and the far more experienced yogis than I piled up a bit, for a fascinated audience of tourists and locals alike. The beach was calling, so we decided to charge back to the Botanical Gardens as fast as we could, pick up T's car, and drive to Batu Ferringhi. Close enough, right? About one quarter of the way down the hill an unsmiling chap offered us a ride in the back of his truck. We accepted, enjoyed the bouncing rollarcoaster ride, and cut about 45 minutes of our journey. We drove to Batu Ferringhi, and chilled on the beach opposite the Tropical Spice Garden. It had been overcast for most of the hike (good) but the sun was emerging while we were at the beach. It was hot, anyway. I lounged around in the sun for a while, then relocated to lounging around in the shallows of the sea. Lying on the sand, letting the waves wash over me was thoroughly tranquil. The sand at this beach was great, too. Big grains, so they weren't annoying and sticky like normal sand. As it moved around underneath me due to the waves, it felt like a body-scrub massage. I went in deeper to float a bit for a while. It wasn't long before stabbing pains in my leg propelled me back to shore. Jellyfish alert! "Pee on it" said everyone. T went to warn an elderly man who was playing in the sea with his young grandaughters. "Pee on it!" they said in Mandarin. Another passer by stopped to see what the fuss was about. He also said "pee on it" in Mandarin. I didn't retain how to say "pee on it" in Mandarin, but I should ask T and add that to my repertoire of useful foreign phrases. My leg went red and bubbled up in a couple of places. It felt like it was burning. It wasn't unbearable pain, but coupled with a probably-sun-induced headache I had I felt pretty crap. My understanding friends got dressed and we all piled back into the car to find a pharmacy. My headache worsened and the car ride escalated everything. By the time I was home I was in full migraine mode and had thrown up a couple of times. On the way, C helped me buy rehydration sachets and Tiger Balm, so when I got in drank loads of water and then slept for 14 hours. I was skeptical about the medicinal properties of Tiger Balm, but I applied to to my head, shoulders (hiking/backpack aches), and jellyfish wounds and everything seems to be magically better. I'm disappointed that this day didn't end with us all checking out a new vegan restaurant, but I'm grateful to have met wonderful people who looked after me. Better luck next time. Rest of photos here.
Pee on it: Penang Hill, Batu Ferringhi, and a close encounter with a jellyfish
I thought about writing some of my thesis this evening, but I made pizza from scratch instead. But growing up, I was always told it's the thought that counts, so that's progress right?
Five episodes in, Quark and Odo are my favourite. But O'Brien is definitely coming into his own.
I've been shipping Janeway and Chakotay for the last four seasons, but Chakotay and Seven... oh. my. god. They're adorable. They're all awkward and excited. They're doing the little thing where they pretend to be professional, calling each other "sir" etc, but with little smirks. I'm melting. In related news, this last episode is an emotional rollarcoaster and I didn't realise I was at the last one and I'm not ready :'o Update: Wow, seriously. They got back to the alpha quadrant, destroyed the Borg, Seven and Chakotay got together and broke up and got back together, Harry saved the day, Tuvok was flawlessly selfless, B'Lanna had a baby whilst Tom flew Voyager through a transwarp conduit being fired on by the last Borg ship, and there were two Janeways. That was fucking awesome. I will watch these again someday. But next up.. Deep Space Nine! Stay tuned for more in the exciting adventures of rhiario binges Star Trek.
I'm sitting on the balcony as waves of rain wash by. It started just before sunset; I noticed a change in the lighting which turned out to be caused by a dense downpour. First the mountains in the distance are consumed, then some of the tower blocks. As I watch, a dark black cloud rolls overhead, distinct against the grey-blue dusk behind. It brings with it bigger droplets, surging straight downwards instead of smattering at angles. The dramatic contrast between the clouds is lost as the sunlight disappears. It's replaced by flashes of yellow, blue, white, even pink, lighting up the inky black night. The flashes are quickly followed by ear-splitting roars, one every few minutes. The rain drowns out the sound of traffic, of anything. The balcony is set into the building, so I'm well-sheltered, but still the occasional spit of water reaches me. Before the darkness sets in completely, I see birds stumbling through the rain. I don't know how they're holding up under the force of the water. Gradually the torrent of water lessens, and the sounds of engines re-emerge. The lightning persists, though. And the mosquitoes are waking up. Time to go back inside.
This and that. An amalgamation of standards held together with PHP and string and naive hope.
I've been tracking everything I've acquired all year, and how much it cost. I even built a wee budgeting app on top of this feed last summer. This all worked fine until I was travelling a lot, and logging purchases in the local currency. I ignored it for a while, and could only budget for things I was buying in USD, however when it came to summarising all of this for the year-in-review I had to deal with it. I searched for currency conversion APIs, and found fixer.io which is not rate-limited and takes a date parameter for historical exchange rates. However, it only contains about 20 currencies, and didn't include Qatari Rial, which I need from my trip to Doha in March. There are various APIs which contain more currencies, but all the ones I found are rate limited and required API keys. They usually have other restrictions on the free tier, as well. Initially I wrote a script that cycled through every single acquire post and fetched the exchange rate for that currency from currencylayer, one by one. I immediately exceeded 1000 request (per month!) rate limit, fetching all exchange rates for all individual purchases in a year. So then I wrote a script that cycled through all of my posts and aggregated the currencies I used for each day, by date. I then grabbed the exchange rates for these from fixr.io in one request per day (rather than per post). Fixer.io is not rate limited, and this cut the number of requests down to about one third or less. Then only for rates that were missing from the fixer.io response, I called rate-limted currencylayer to retrieve those, again in one request per day. This worked in bringing the number of requests down, but for anything more than a couple of months was still a request per day in the time period to the API, and took a while. Also, while I thought I wouldn't exceed the currencylayer rate limit given I have a finite amount of posts with currencies missing from fixer.io (in this case ten days of QAR) in the whole year, this is not sustainable in the long term, as I don't know what other currencies I'll be spending over time. But the main problem is that it was really slow. So, new plan. I moved all my code into a standalone script, which cycles through acquire posts between two dates and retrieves the currency codes used per day, then fetches the relevant exchange rates. Then dumps this to a JSON file. So, I ran that once. Now my /summary code just consults this static JSON file. Since historical exchange rates don't change... this is all I need. For some reason, I'd like it to be more dynamic. I don't want to be storing random data about the world on my own server if I can fetch it from somewhere else. Oh well. The code is here. It still takes ages to run for a whole year, but at least I only have to do it once now. If you have your own feed of posts with currencies, you can just modify `posts_between` to fetch them from your own system, and `get_rates` to read the cost from the post. I'll add that I have a couple of functions to wrangle official 3 digit currency codes from the messy inconsistent values of cost I have for my posts, including a local cache of all currency codes. Next is to update my publishing endpoint to trigger fetching and storing the exchange rates for a new day when the first acquire post of that day/currency combination is made.
Finished improving my LDN endpoint so notifications actually go into my triplestore with everything else, albeit into a different graph. Contributed a bit to the LDN test suite. Updated sloph to display Add activities where the objects are many images and the target is a photo album.. and ported all of my recent travel pics to this format. Finally fixed my Acquire posts so they display photos. Made type-based post collections. Made progress on between-date summary aggregates (so I can use this for a year in review). Started yoga classes at Wholey Wonder. Joined a drive to Penang Airport in Bayan Lepas, and back. Successfully avoided New Year's Eve celebrations.
Made some progress on /summary, but stuck on silly bugs. Fixed /where to return my latest checkin, and updated botbot to read it properly. Finished Voyager :o Spent a lot of time in Wholey Wonder. Colossally failed to get my thesis act together.
Got some of a report done on a year of using sloph as a personal datastore and 'personal web observatory', for submission to WOW2017, and inclusion in my thesis. Started on implementation report aggregation and viewer for LDN Test results (from the reports which are sent as LDNs to the test suite inbox). Wrote a script to convert Firefox bookmarks to AS2, and used it to import bookmarks into my site. Wandered around some more parts of George Town, including Northam Beach, to the library, and accidentally to Chew Jetty while looking for the Beach Street market. Met some cool CS people.
Finished Observing the decentralised social web (one telescope at a time) for WOW2017 and my thesis. Reviews and feedback welcome. Went to see temples. Ate and cooked a lot.
Climbed Penang Hill again and went to the beach at Batu Ferringhi. Made some improvements to paging for sloph. Went to Langkawi. Get this... actually though about my thesis. Braindumped some new titles, summarised contents of each chapter and braindumped some more about structure/intent.
When is this all going to be over so I can go back to being sad and stressed about my own stupid problems like php errors, finishing my thesis, and who I'm not allowed to be in love with; instead of this descent into fascism bullshit.
This article was accepted to the 2017 Workshop on Web Observatories and I'll present about it on the 4th of April in Perth. As an article on my site it is subject to ongoing updates and improvements. To comply with submission deadlines for the workshop, a static snapshot from 22nd January 2017 is at archive.org. Abstract This is a short report on iteratively developing and using a Personal Web Observatory for one year. Herein are described the architecture of the technical system and, subjectively, the social and personal impact of daily use. The goal is to provoke further conversation about what it means to 'observe' individuals, and the benefits and drawbacks of this on a personal scale. We also discuss how peoples' attitudes towards social media and personal publishing may impact the quality of data collected by Web Observatories. Introduction Studying communities through passive and active digital traces, as Web Observatories are designed to do [9, 26], brings with it a host of privacy, ethical, and methodological concerns. Attempts to address online privacy issues in general are being made with a push towards re-decentralising the Web [8], in part through open Web standards and work on promoting personal data stores as alternatives to centralised or third-party services. Using this momentum can benefit the Web Science community as well as their observees (though it brings with it its own set of challenges). Decentralisation is applied to Web Observatories in particular through the idea of a Personal Web Observatory [11] as a user-controlled (as opposed to third-party imposed) means of collecting and tracking data. I believe that the perspectives of both subject and experimenter are valuable when it comes to studying people in new ways. Taking inspiration from the reflective practices of the Quantified Self community, I progressively built features into my own personal website which allow monitoring and visualisation of day-to-day aspects of my life, and used it continuously for the period of one year. Immersion in the ongoing effects of self-tracking in a decentralised manner led to greater insight in working towards Personal Web Observatories than either developing a personal data store or engaging in self-tracking through third-party services could do alone. This article begins by outlining related work on Web Observatories, Quantified Self, and the decentralised Social Web. It includes a summary of the architecture of the personal data store being studied, and the types of data collected. I discuss the results in terms of psychological impact of the experiment, evolving motivations, and expected and unexpected consequences. In conclusion I relate these results to new and existing challenges for Web Observatories and Web Scienctists who want to study data generated by Personal Web Observatories or similarly decentralised systems. Background Personal Web Observatories Web Observatories concern the use of peoples' digital footprints as the subject of academic inquiry [9, 26]. Such data encompasses all manner of online and offline activities, and it may be collected passively by systems with which individuals interact, or actively logged, or some combination of the two. In order to address negative privacy implications of collecting and analysing this data, [11] introduces the idea of a Personal Web Observatory. Personal data stores are presented as an architecture for a decentralised Web Observatory, to allow individuals to maintain control over their data whilst still participating in scientific studies or otherwise releasing their data for use by third parties. A Personal Web Observatory relies on individuals opting in to self-tracking activities; connecting their personal data store to sensors or user interfaces. Self-tracking and Quantified Self There have been a small number of high profile instances of individuals collecting a large volume of data about themselves, then offering it up for auction [5, 20]. Even more common are those who track data about themselves in order to: orchestrate behavioural changes; monitor bodily functions; learn new things about themselves; discern cause-and-effect relations; aid memory; manage information and life events; make better decisions; or just for the fun of it (for surveys of self-tracking motivations and tools, see [12, 2, 7, 23]). This personal self-tracking is disruptive to traditional notions of big data and data science [23]. The Quantified Self (QS) community is large, global, and growing. In-person conferences and meetups are held regularly [14, 15]. Whilst they use a wide range and combination of DIY and off-the-shelf devices for self-tracking [15, 21], what is particularly interesting are their reflective practices. QS practitioners engage in creative ways to collect, visualise, and understand data about themselves. At meetups, talks are focussed around deep personal insights, optimisation and improvement, and active self-awareness, rather than technology or tools [2, 21, 15]. However, the psychological impact of quantifying day-to-day activities is more complex than detecting trends and setting goals. Self-tracking may work against our best interests as interpretation of data is both subjective, and prone to re-interpretation at each viewing. There is also evidence that attempting to enforce a particular behaviour can have the opposite effect. Peoples' memories and impressions are easily influenced by external and internal factors [3]. A participant in [12] expressed concern about becoming "compulsive" about data collection, and [12] also describes how many off-the-shelf self-tracking services do not provide adequate means to aid user reflection. Another negative effect of QS tracking is poor security of sensor software and third-party storage which can compromise individuals' data [1]. Plus, using third-party software typically comes with terms of service which are problematic from a privacy perspective. Quantified self tracking is gamification of non-play activities, and [28] describes gamification as having surveillance at its root. [28] emphasises that quantification is a tool for governance and control and [15] concurs that statistics are historically used to manage populations, and this form of control is internalised by individuals for management of self. Prevalence of QS devices and habits can serve to normalise surveillance. Further, QS tracking in the workplace is being introduced in ways that are becoming increasingly difficult to opt-out of, and raises unrealistic expectations of workers "fostered by a quantified, machine-like image of human productivity" [13]. Nonetheless, [15] describes QS participants who pushing back against the expectations and categories of the companies whose devices they use with their own interpretations of their data, "calling into question who gets to do the aggregation and how". Social Publishing Though most bloggers and social media users do not explicitly set out to log small events in their lives, other kinds of social publishing can also be considered a form of self-tracking. Indeed, it is these types of data which Web Observatories today are most commonly consuming and analysing. Blogs have been around since the early days of the Web, initially for collecting links and then for documenting ideas and experiences. More recently, such expressions are commonly published to centralised social networking site, and many systems facilitate deeper data logging than just prose content. For example, the Facebook 'status update' input presents preset options for mood, location, films, books, friends, and other activities. These are easily attached to a text post through a seamless user interface, where the intent feels quite different to services and devices specifically marketed for self-tracking, but the end result in terms of data collected is largely the same. While there are various efforts to address decentralisation of the Social Web [8], of particular note are ongoing formal standardisation efforts at the W3C. The W3C Social Web and Web Annotations Working Groups are developing standards for not only publishing content, but interacting with content in the same manner as one would through centralised social networking sites. Unlike centralised systems, instead of coordination between common technology stacks or shared access to databases, they use mutually implemented communication protocols. The ActivityStreams 2.0 (AS2) [19] specification provides a syntax and vocabulary for types of data commonly found on the Social Web, as well as an extension mechanism for adding new types of activities and objects. ActivityPub [24], Micropub [16] and the Web Annotations Protocol [18] define protocols for publishing which facilitate decentralision by decoupling clients from the servers which store the data. Linked Data Notifications (LDN) [4], Webmention [17], and WebSub [6] provide mechanisms for propagating social interactions and other data between otherwise unrelated servers. Building a Personal Web Observatory In this section I describe my Personal Web Observatory setup. One notable constraint from the outset was that in order to minimise maintenance requirements the system needed to be no more complicated to run than a personal website. As such it is implemented in PHP and runs on standard shared Web hosting, with a MySQL backend. Architecture The system (which is named sloph) constitutes a central database which is an RDF quadstore (layered on top of a MySQL database by the ARC2 PHP library). Using a graph data model facilitates the addition of new data without the overhead of updating schema or models in the core code. For incoming data, it uses two endpoints: publication and notification, which implement the server portions of ActivityPub and LDN respectively. To compensate for overlapping standards, the publication endpoint additionally includes bridging code which converts Micropub requests in ActivityPub requests before proceeding, and the notification endpoint converts Webmentions into LDN. Data is processed to examine its validity, and stored as-is in the quad store. Publication data all uses the AS2 syntax and vocabulary (or extensions thereof), and notification data is stored using whatever vocabulary is sent by the notifying party. Data from each endpoint are stored in different graphs in the quad store to manage provenance. The notifications endpoint can receive unsolicted messages from any LDN Sender, which may be somebody else's personal data store, or a clientside tool. In addition, some third-party services have been configured to send notifications to the notification endpoint. Webmention.io and GitHub have webhook settings, which are set to the notifications endpoint. They forward JSON data, which is easily convertible into JSON-LD, used by the LDN standard. Brid.gy is a service which runs in the background and monitors my social media profiles for replies to my posts, then sends these as Webmention notifications. Upon certain new incoming notifications, the endpoint sends a request to the PushOver API, which sends a push notification to my Android phone. Data may be retrieved as individual items (AS2 Objects or Activities), or in sets (AS2 Collections); all are identified by URLs. Content negotiation is employed so that requesting clients may access the data in any desired RDF syntax, or HTML. For HTML display, simple templates are created for each 'type' (or shared between a set of similar types) of data item. It is expected that most requests come from Web browsers, so the HTML content is delivered most often. However, other applications or services may consume the data, including readers (which may mix together multiple streams of data for the user), aggregators (which read the data and perform some manipulation or calculation over it to display the results) or publishing clients (which offer editing or combining of existing data). All data is public; I did not implement access control. The publication endpoint performs additional functions for data enhancement and distribution. It automatically adds missing metadata to posts if necessary (for example, published date and author), as well as storing new relations between posts and relevant collections such as tags, as well as the specific collections required by ActivityPub. The publication endpoint forwards text posts to Twitter, if necessary truncating them and adding a link back to the original, which helps with reach of content (since I don't yet have a subscription mechanism implemented). The publication endpoint also scans the content and certain attributes of incoming data for URLs, and behaves as an LDN and Webmention Sender to deliver notifications to others, if possible. The high level architecture for my Personal Web Observatory. Parts in black are the core, and parts in grey are external or third-party services which interact or interoperate. Data [11] suggests that the first feature of a PWO should be to allow individuals to consolidate data collected by third parties into one repository under their control. Rather than attempting to aggregate - or even find - all data about myself spread across the Web, I chose a handful of services which have particular value to me, that I have been using to actively log particular things. I exported data from Lastfm (over ten years of music listening history), Twitter (7 years of short notes), Runkeeper (1 year of runs, walks and hikes with GPS traces), and Github and Bitbucket (5 years of code commit history), and Firefox bookmarks (2 years). I also exported data from 750words.com (almost 7 years of intermittent use) but did not import this into my store due to private content and no reliable access control built in. On top of these data dumps I created the following templates: Type of data Attributes displayed * * All posts contain tags and a published date, and may contain a last modified date. Articles (blog posts) name, content Short notes (like Tweets) content Meals logged description, restaurant if applicable Travel plans start and end location (map), date and time, means of transport, cost Checkins to specific places location (map) Checkins to categories of place, aka 'vague' checkins (eg. 'home', 'office') location, duration of time there, associated colour Likes URL of thing liked Bookmarks URL of bookmark, name of bookmark, optional comment or quote Reposts (aka shares aka retweets aka reblogs) URL of post, optional comment Acquisitions (purchases and free stuff) description, source, cost, photo Additions to photo albums photos and URL of album Events and RSVPs location, date and time, name, description, event website Subscriptons / follows URL of profile followed Sleep times start and end date and time, optional comment Templates were created not all at once, but as I decided to start tracking something new and wanted to visualise it. Templates were continually modified and improved over the course of the year. At the time of writing, I display posts in three different formats on my homepage (figure 2): a feed of the most recent eight article and note posts displayed in full; a list of the most recent of each type of post, displayed as a sentence (eg. "the last thing I ate was toast with peanut butter, 25 minutes ago"); and the last 1600 posts of all kinds, visualised as a string of small coloured boxes with icons. The colours represent where I was at the time of making the post (according to the most recent prior 'vague' checkin) and the icons indicate the type of post. Clicking on any of these boxes takes you to the post itself. In addition, the background colour of the homepage changes according to where I am at the present time. I also show my top 128 tags, and the number of posts for each. Another type of output is a /summary page, which aggregates data between any two dates, defaulting to the past seven days. This is useful for producing a year- and week-in-review, and includes total amount of money spent, top foods eaten, number of words written, and various averages. A screenshot of my homepage at the time of writing. The purple background shows I was at home. Note: I do not profess to be a designer. One year of using a Personal Web Observatory Recording data All data is actively recorded; that is, I enter all of the data and no posts are triggered by some other process or sensor. Unfortunately, for the sources of data exported from other services mentioned previously, I did not (yet) implement a connection to their various APIs to post subsequent data directly to my site. As I decided to log a new kind of data, I either created or sought out a suitable client. As an intermediary measure (eg. while a client was in development), I could insert data into the quadstore directly using my SPARQL endpoint, which turns out to be a pretty useful bootstrapping measure. Clients I developed myself are simple web forms, which post AS2 data as JSON-LD to my publication endpoint. I typically logged data at the time of its occurrence if possible. If I didn't have an internet connection (a frequent occurrence whilst traveling) I used a local 'timestamp' Android app to record the time and note crucial details, then back-dated posts at the earliest opportunity. Practical uses for small data [11] proposes that "small data analytics, while sparse, could be made statistically viable when gathered longitudinally over time." Whilst I haven't done any complex statistical analysis on my data, certainly aggregated results, counts, and some calculations of means have been personally insightful. To take some trivial examples: that I drank on average 0.8 cups of coffee per day in 2016 was lower than I expected; that I spent an average of $28.71 per day was higher than I expected; and that I spent 1 month, 15 days, 6 hours, 41 minutes, and 15 seconds travelling between places is just kind of interesting (and something I particularly wanted to find out when I started recording 'vague' checkins). I don't expect these statistics to be remotely captivating for anyone else; such is the value of personal "small data." Such aggregations were able to be put to more focused uses. Logging all of my purchases did not raise my internal awareness of how much I was spending on a weekly or monthly basis, but when I realised I wasn't saving money after about six months it was trival to write a small web app which consumed my data stream, aggregated the total cost by certain categories, and displayed the amount I spent in any given month or week. Adding a setting for a monthly budget goal let the app send me notifications to stop spending when it noticed I was on track to exceed this in the current week. The app is not coupled to my personal site or data, so it can be used by anyone who publishes a stream of their purchases using AS2. An initial motivation of recording 'vague' checkins was so people could check my site to see whether I was on my way if we were planning to meet, or if I shouldn't be disturbed (eg. if I was in a meeting). Industrious computer science friends created an IRC bot that consumed my /where endpoint and responded when asked $whereis rhiaro. Other users of the same IRC channel added their own location reporting endpoints for the bot to read, some down to GPS accuracy with a map, shortly thereafter. Other unanticipated uses of data I was recording include launching a travel blog which filtered travel-related posts and photos from my main feed, and a food blog which includes my food logs, food-related photos, and any posts or bookmarks about recipes or restaurant reviews. If my website is down, I do not exist Having visible output for each log on my website motivated me to keep logging. I am missing lots of checkins to specific cities because I had trouble with a maps API and didn't complete the template to display them. Similarly I never got around to creating a compelling view of sleep records, so logs for those are few and far between. I felt an internal pressure to ensure my data stream was complete. If I was offline or out of battery for a length of time, I would keep logs on paper to back-date later. This was due both to wanting to ensure aggregate data was accurate, and fear of 'losing' associated memories. Relatedly, I looked (and in fact still do) through historical logs with surprising frequency, and found memories of events, people and places were triggered by descriptions of meals or photos of purchases that I might otherwise have forgotten. I worry that this is unhealthy, boarding on obsessive behaviour though. At times, particularly before I had a streamlined offline-logging plan in place, or if it was socially inappropriate to be writing or typing logs, I felt anxious that I would neglect to log something. When my webhost experienced outages, leaving me unable to record data, I both noticed far more quickly and felt a far stronger personal impact than I previously would have when my site was mostly static and for infrequent blogging. I complained to my hosting provider more frequently, and projected a sense of urgency that was probably disproportionate. I was left with a feeling of if my website is down, I do not exist, and I found myself wondering if sysadmins in a data center the other side of the world could possibly know or care about the anxiety they were causing me. Other, predicted, psychological impact was that publicly logging photos of all of my purchases made me more conscious about what I bought. Even though I didn't actually think anyone looked at my feed, I found being aware that someone could see it helped me to, for example, resist buying junk food at the supermarket. Discussion In this section I expand on some of the topics raised by the results of my creation and use of a PWO, and in particular the implications for Web Observatories, and Web Science as a whole. I think these results highlight many open questions and future research challenges. PWOs are at the intersection of Web Observatories and Personal Data Stores. Research on the former is concerned with passively collecting and analysing how individuals and communities already use the Web, in order to learn about society. Research on the latter is concerned with improving and often actively influencing the lives of individuals. When we think about integrating individual data stores into an architecture for mass observation, we need to find a way to account for the conflicts that arise. Personal and social impact Good user interfaces for visualising data from logs and perhaps making recommendations for improvements to a particular aspect of someone's life can be a strong way to encourage people to engage in self-tracking. However given the potential for compulsive behaviour around self-tracking, we also need to enable people to be 'off the grid' without affecting their overall aggregates or statistics. The motivational write-every-day site 750words.com has a 'vacation' setting, by which you can tell the system when you'll be away so that it doesn't penalise you for 0-word days during this time. If self-tracking is going to become the norm (as implicit self-tracking via social media already is in certain parts of the world, and as would be beneficial for Web Observatories) then taking breaks from tracking should be part of that norm. The benefits of continuous self-tracking can be acknowledged, but disconnecting can also be accepted as a healthy practice. Building this in from the outset can perhaps help to mitigate against internalised normalisation of surveillence, too. Relatedly, the effects of missing data or inaccurate logs for any reason may have a damaging psychological effect on people. I posit that an important part (and in fact an ethical responsibility) of Web Science research would be to examine these effects with at least as much priority as working on the best gamification techniques for encouraging people to self-track. It is critical that interfaces for visualising data logs are effective in helping the subject of the data to interpret its meaning. On the one hand, simply displaying correlations may incline people towards inferring spurious cause-effect relationships; on the other hand, as members of the QS community have shown, individuals may be far more effective at interpreting their own data than a third party service - which is perhaps missing other relevant information - could be. A challenge for PWOs would be to offer data visualisation interfaces which not only take into account all available data, but account for what is (or might be) missing as well. Furthermore, there is no one-size-fits-all for causing positive behavioural change based on self-tracking. How we can use personal data logs to improve the lives of individuals might vary by personality as well as the social and cultural context in which the tracking takes place. Ways of tailoring PWOs may be extremely important when it comes to actually benefitting their users. From a traditional social media Web Observatories perspective, subjects are not aware necessarily that their data is being observed and analysed by academics. People use social media for different reasons, and I suspect that enabling social scientists to understand the world is pretty far down the list. Especially given the assumption that users of PWOs are actively opting in to being observed, and perhaps have fine grained control over what can and cannot be used for the purposes of research, is going to impact how they engage in self-tracking. As people shape and are shaped by social media use, people will shape and be shaped by their use of PWOs. What are the tradeoffs when it comes to benefits to individuals, and benefits to academic research? How can we take this into account when drawing conclusions from collected data? Technical considerations People are likely to be discouraged from using a PWO if it comes with a high burden of maintenance or cost of running [11]. I was able to minimise the impact of this on myself by integrating it into a system I was already maintaining (my personal website). Doing this had a significant impact on the technologies I was able to use, which was in some ways restricting, but beneficial in the long term. Shared Web hosting, PHP and MySQL are widespread and well-supported; this demonstrates that a PWO need not be architected around specialist or niche technologies, and need not be difficult or burdensome to set up and use. Certainly lowering the barrier to entry to people who already run their own websites could help to springboard adoption. Centralised services are frequently bought out, shut down, or change focus or terms of service. Whilst the technical burden of maintaining ones own personal data store may be higher than delegating this to a third-party comes with different, but not insubstantial, risks. Serious review of common practices and formal Web standards can smooth the path to interoperability between different instances of WOs and PWOs. Though the standards discussed in this article were designed from a decentralised Social Web perspective rather than a Web Observatories one, the overlap is clear. Implicit self-tracking that makes up a part of ordinary social media use can be supported in the move towards decentralisation, and privacy-preserving PWOs may start to exist as a side-effect. In my implementation, I did not address the use case from [11] of aggregation of data from a crowd to produce net benefit. This is also something that shared use of open standards, in particular for data representation, subscription and notification, could facilitate. Anticipation of future needs is raised as a challenge by [11]. With regard to my changing motivations and day-to-day requirements, I did not set out with a specific list of things I wanted to record and design the system around that. Instead, I used a flexible schemaless architecture which meant that for any new type of data I decided to log I had a minimum of new engineering to do: build a client (or potentially hook up a sensor) to generate the data; and (optionally) create a template to view it. Working with open standards for creating, updating and deleting data helped here too, as I had the option to look for pre-existing standards compliant clients to post to my data store. Conversely, others whose data stores use the server portion of the publishing protocols can use my clients with their own storage. Discussion of Personal Data Store architectures tends to revolve around reducing fragmentation and prioritises gathering together all kinds of data in one place [25]. This results in generalised tools and interfaces, which try to make it possible to do a variety of things in one place. I argue that more effective and appealing applications are specialised: particularly good at doing one thing. Whilst the data store itself is generic, standards for decentralisation permit the decoupling of clients - both for creating and displaying data - which is perhaps the best of both worlds. Data context and integrity Web Observatories which collect data from centralised social networking sites may be vulnerable to ingesting misinformation, ranging from subconscious selective disclosure to deliberate acts of protest against privacy infringement [10]. It is difficult to say whether proliferation of personal WOs would mitigate this, but it becomes increasingly important to find ways to capture contextual information when data is recorded. If Web Observatories begin to collect data from both decentralised and centralised services, it is natural to want to align the data so it can be combined into the same data set. However the source of the data cannot simply be discarded. The same type of data from different types of sources is not necessarily equivalent or directly comparable. Just as different centralised social media sites (and the communities and subcommunities within) have their own cultural norms and expectations, as well as technical constraints or affordances, individual personal data stores come with their own unique contextual information as well. In the decentralised case, the context for data logs may be more difficult to discern, as well as capture. To take a concrete example: for researchers to find more meaning in the logs in my PWO they need to look at in the context of all of the systems I interact with. My system forwards text notes and longer articles to Twitter, which in term drives traffic back to my site where all my other kinds of logs can be seen. Researchers studying my data would need to consider how my awareness of my Twitter audience (directly through known followers and extended through their audiences in the case of retweets) impacts all of the content I post. This might be different for someone who shares their PWO content with a different social network, or not at all. The interface used to log the data can also have an impact. Whilst I use a Web form based user interface to check in to a place, someone else might generate exactly the same data automatically by the GPS on their phone, making less of a conscious effort to record their movements. Researchers studying how people use, for example, Swarm, have the advantage of knowing that the interface used by everyone is consistent as well as being able to directly explore it themselves. I anticipate that PWOs will be far more diverse, personalised to fit into their users' day-to-day lives, and possibly inaccessible to researchers. Limitations Using data from QS activities for scientific research comes under fire for a number of reasons: self-reported data may be unreliable or biased; context is often lost when quantifying qualitative data; and data collection is limited to individuals who are inclined to record details about their lives [2]. Though I am not using the contents of my data logs in this report, the same issues apply to my recall of the effects of logging. Perhaps most importantly, though the length of the study is significant, my sample size is 1. As such, I make no claims about generalisability or conclusivity of the results. I am documenting these experiences as a starting point, to begin to explore Personal Web Observatories in depth, and to highlight areas for focus in the future; this is similar to [25], in which the authors conducted their research on MyLifeBits with large amount of a single person's data as well. I invested a considerable amount of time in building new features, fixing bugs, and making small improvements and adjustments to my PWO. As the only user and only developer, I was first to notice if something wasn't working properly, and unhindered by conflicting interests or opinions when it came to making changes. This has advantages for rapid prototyping of a somewhat novel system, as well as commitment to the ideology of dogfooding: if I don't want to use a system I've built, why should anybody else? It similarly meant that features I lost interest in fell by the wayside, whilst features I used regularly were well-maintained, so I didn't invest time in developing unnecessary functionality as I might have done had I been designing this for others. Whilst use cases and UI improvements were constrained strictly to my personal needs, and discussion of features was limited to a handful of like-minded developers, this approach was nonetheless appropriate for the purposes of this analysis. Conclusions This article documents a year of developing and using a PWO. By taking the role of subject, not only developer, I have come to a better understanding of the day-to-day impact of PWO technology on an individual. 'Small data' is of interest to the academic community in terms of understanding how individuals engage with their own self-tracking activities and outputs, as well as to highlight the diversity of contexts in which data is logged and how this can impact analysis of an aggregation. I believe that Personal Web Observatories are more useful when intimately personalised for the individual user. Small scale, pluggable components may help to enable this, and using open standards to integrate components can help with designing specialised logging clients or data interpretation interfaces. This gives users more choice to pick and choose the tools they use with their personal data store, as well as making it easier to add and remove components as desired. This does not mark the end of my self-tracking experiment, but the beginning of the next phase. Over the next twelve months, I expect to add to my repository: data about mood and health (specifically headaches); the people I spend time with offline, and amount of time spent chatting online; and to add more detail about exercise, and to re-start tracking sleep. I will continue to self-track publicly, but experiment with different views over my data for others, so that vistors to my site from different contexts (eg. professional) are not overwhelmed with data, nor left with an impression of inappropriate oversharing. Finally, I want to reiterate that providers of PWOs have a great responsibility to the individuals whose data they host. For people who engage in frequent self-tracking, a disruption in service can provoke a minor existential crisis... so such an arrangement should not be entered into lightly. References Ballano Barcena, M., Wueest, C., Lau, H.: How safe is your quantified self? Symantec Security Response, 2014 Van den Bulck, J.: Sleep apps and the Quantified Self: a blessing or a curse?, Journal of Sleep Res. 24, 121-123, 2015 Calvo, R.A. and Peters, D.: The Irony and Re-interpretation of Our Quantified Self, OZCHI'13, 2013 Capadisli, S. and Guy, A.: Linked Data Notifications. W3C Candidate Recommendation, 2016 Gallagher, R.: New York Student Selling His Private Data on Kickstarter, Slate, 2013 Genestoux, J. and Parecki, A.: WebSub. W3C Working Draft, 2016 Gimpel, H., Nißen, M. and Görlitz, R.: Quantifying the Quantified Self: A study on the motivation of patients to track their own health, Thirty Fourth International Conference on Information Systems, Milan, 2013 Halpin, H. and Bria, F.: State of the Art of social networking systems, identity ecosystem and social data stores. Decentralised Citizens ENgagement Technologies project, CAPS, 2014 Hall, W., Tiropanis, T., Tinati, R., et al: The Southampton University Web Observatory. pages 1-4. van Kleek, M., Murray-Rust, D., Guy, A., O'Hara, K. and Shadbolt, N. Computationally Mediated Pro-Social Deception. In Proceedings of the 2016 CHI Conference on Human Factors in Computing Systems (CHI '16). ACM, New York, NY, USA, 552-563. 2016. van Kleek, M., Smith, D., Tinati, R. et al: 7 Billion Home Telescopes: Observing Social Machines through Personal Data Stores, WWW 2014 Companion, 2014 Li, I., Dey, A.K. and Forlizzi, J.: Understanding My Data, Myself: Supporting Self-Reflection with Ubicomp Technologies, UbiComp'11, Beijing, China, 2011 Moore, P.V, and Robinson, A.: The quantified self: what counts in the neoliberal workplace. New Media and Society 18 (11). pp. 2774-2792, 2016 Moore, P and Piwek, L.: Unintended Consequences and Dark Sides of Quantifying Selves, Sustainable Societies Network commissioned paper, 2015 Nafus, D. and Sherman, J.: This One Does Not Go Up to 11: The Quantified Self Movement as an Alternative Big Data Practice, International Journal of Communication 8, 1784-1794, 2014 Parecki, A.: Micropub. W3C Candidate Recommendation, 2016 Parecki, A.: Webmention. W3C Recommendation, 2017 Sanderson, R.: Web Annotation Protocol. W3C Proposed Recommendation, 2017 Snell, J., and Prodromou, E.: ActivityStreams 2.0 Core. W3C Candidate Recommendation, 2016 Solon, O.: 'Data soul' of Shawn Buckles sells for £288, Wired, 2014 Swan, M.: Sensor Mania! The Internet of Things, Wearable Computing, Objective Metrics, and the Quantified Self 2.0, Journal of Sensor and Actuator Networks 1, 217-253, 2012 Swan, M.: Health 2050: The Realization of Personalized Medicine through Crowdsourcing, the Quantified Self, and the Participatory Biocitizen, Journal of Personalized Medicine 2, 93-118, 2012 Swan, M.: The Quantified Self: Fundamental Disruption in Big Data Science and Biological Discovery, Big Data, Jun;1(2):85-99, 2012 Tallon, J. and Webber, C.: ActivityPub. W3C Candidate Recommendation, 2016 Tan, D. et al: Save everything: Supporting human memory with a personal digital lifetime store, Personal Information Management, 90-107, 2007 Tiropanis, T., Hall, W., Shadbolt, N., et al: The Web Science Observatory. IEEE Intelligent Systems, 28(2):100-104, 2013 Till, C.: Exercise as Labour: Quantified Self and the Transformation of Exercise into Labour, Societies 4, p. 446-462, 2014 Whitson, J.: Gaming the Quantified Self, Surveillance & Society 11(1/2): 163-176 2013 Acknowledgements Thanks to csarven for proof reading and vastly improving the semantic markup in this article, and of course for pushing me to publish according to the Linked Research agenda.
Observing the decentralised social web (one telescope at a time)