Back in 2012 I booked a flight to Berlin that was scheduled to land at the new Berlin Brandenburg Airport. Before I flew, however, I received a message from the airline telling me that the new airport’s opening was delayed and that I’d be landing at the venerable Berlin Tegel instead.

Remarkably, Berlin Brandenburg still has yet to open, and the reasons behind this are the subject of the four-episode podcast, How To Fuck Up An Airport, from Radio Spaetkauf:

Every Berliner knows the new airport is late. Few know exactly why. We’re here to explain. BER is the international airport code for Berlin Brandenburg Airport, nickname Willy Brandt. It has also become a signifier of failure, incompetence, corruption and Berlin’s general inability to get its act together.

If you’ve flown to Berlin Schönefeld Airport in the last few years, you’ll have seen BER as your plane taxied along the runway. But despite outward appearances, BER is far from finished. It has been under construction for 11 years, blown through six opening dates, three general managers and two state leaders. Costs have ballooned from around €1 billion to at least €5.4 billion.

Across this series, you’ll learn why the escalators are too short, why the lights are always on, and why the rooms seemed to be numbered by bingo. We’ll interview insiders and disgruntled workers, chase ghost trains running to the terminal, and go inside the unfinished airport.

Because I was raised in an era when we were willing to conceive of mobile devices as servers as much as clients, it’s always bothered me that the ability to mount an Android phone’s storage on a desktop PC or Mac disappeared when Google removed USB Mass Storage Mode from its operating system.

My phone is a powerful sensor array, it can have a Linux command line, making it a programmable mobile powerhouse. Not being able to easily transfer files to and from its storage is disabling.

But there’s a solution for this.

On the Phone

For greatest ease, assuming your version of Android supports it, assign your phone a static IP address on your wifi network; on Android Pie you’ll find this under the “Advanced” settings for your wifi connect:

Android screen shot showing setting a static IP address

Install Termux, either from Google Play or from F-Droid.

Once it’s installed, start the app, and start an SSH server with:

sshd

On the Mac

For greatest ease, add an entry in /etc/hosts for your phone like this:

192.168.2.8	phone

You can do this with:

sudo nano /etc/hosts

Next, assuming you already have Homebrew installed (look here if you need to install it):

brew cask install osxfuse
brew install sshfs

This will install SSHFS, which you’ll use on your Mac to mount the Android storage.

Once it’s installed, create a directory where you’d like to mount the phone storage, and do the mount:

mkdir motog7
sshfs phone:/storage/emulated/0 ~/motog7 -o volname=motog7 -p 8022

In that sshfs command:

  • phone is the name I assigned to my Android phone’s static IP address in /etc/hosts
  • /storage/emulated/0 is the Android path I want to mount on my phone
  • ~/motog7 is the directory I created on my Mac for the mount
  • -p 8022 sets the SSH port to use for the mount as 8022, which is what Termux uses by default

You might get a warning dialog “System Extension Blocked” when you attempt the mount; you can allow this to proceed under System Preferences > Security & Privacy.

Use your new superpowers…

Assuming all went according to plan, you now have the Android’s storage mounted on your Mac.

It will show up in the Finder:

Screen shot of Mac Finder showing mounted Android storage

And it will be accessible from the command line:

macmini:~ peter$ ls ~/motog7
Alarms		Download	Recordings	bluetooth
Android		Movies		Ringtones	osmand
BROTHER		Music		Signal		osmdroid
Cardboard	Notifications	Telegram	osmtracker
DCIM		Pictures	Vespucci
Documents	Podcasts	alt_autocycle

You can treat it like another disk drive.

To Unmount

To umount the phone:

umount ~/motog7

You may find that the mount kills itself if the Termux app on your phone is terminated by Android.

Me: Oliver, do you have your Spotify playlist ready for tonight?

Oliver: No. I’m watching Beto O’Rourke.

Me: Okay.

This is a post about gluing some things together, and about the IndieWeb. It started, however, with a photo of a child on a bicycle.

I liked that photo, and I wanted to express that somehow in a public fashion.

I didn’t want to leave a comment on that blog post, as my aspirations were simply to express admiration for the photo and its subject; I was looking for something more “hej!”

It turns out that there’s IndieWeb for that.

One way of thinking about the IndieWeb is “all the plumbing of corporate social networks, without any of the corporate social networks required.”

In other words, in this case, “a like button for the web.”

Another way of thinking about the IndieWeb is to focus on the Indie: it’s a decentralized jam that allows us all to bring our own tools to the table, but to interoperate.

In my case the tools I needed to glue together are FreshRSS (the RSS feedreader where that bicycle photo originally caught my eye) and Drupal, which I use to write this blog.

Click the Star in FreshRSS

The way I decided to make this all work is to wire up “favouriting” a post in FreshRSS to sending a Webmention.

So I do this:

and I cause this to happen:

A Like on Elmine's blog

Pull The Favourites

My original approach was to try to code up a FreshRSS extension that would make this all happen in real time; I quickly decided that I didn’t want to have to grok a new MVC framework to make this happen, and that real time liking didn’t really need to happen.

I decided, instead, to simply extract favourites from FreshRSS on a regular schedule and to create new Drupal posts for new ones I encounter.

FreshRSS’s “entry” table makes this easy, as there’s a boolean field for each entry called is_favorite:

FreshRSS entry marked as a favourite

I only want to create a post in Drupal once, so I created an additional table, favourites_rss, to track those I’ve already processed. The result is that I can extract the details of new favourites by this bit of SQL:

SELECT en.id,title,link,date,website,name 
   from freshrss_peter_entry en,freshrss_peter_feed 
   where 
     (freshrss_peter_feed.id = en.id_feed) and 
     (is_favorite = 1) and 
     en.id not in (select fav.id from favourites_rss fav)

This returns me all the information I need about each favourite:

  • The title of the post
  • The link to the post
  • The date of the post
  • The title of the blog where the post lives
  • The link to the blog

Post the Favourites

I created a new Drupal content type called Favourite with fields for each of these pieces of information:

The Favourites content type in Drupal

With that in place I can programmatically add new favourites in Drupal like this, in PHP:

foreach($favs as $key => $row) {

	$node = new stdClass();

	$node->type = $nodetype;

	node_object_prepare($node);

	$node->language = 'und';
	$node->title = html_entity_decode($row['title']);
	$node->uid = 1;
	$node->status = 1; //(1 or 0): published or not
	$node->promote = 0; //(1 or 0): promoted to front page
	$node->comment = 0; // 0 = comments disabled, 1 = read only, 2 = read/write
	$node->field_feed_title[$node->language][0]['value'] = html_entity_decode($row['name']);
	$node->field_website[$node->language][0]['url'] = $row['website'];
	$node->field_website[$node->language][0]['title'] = html_entity_decode($row['name']);
	$node->field_link[$node->language][0]['url'] = $row['link'];
	$node->field_link[$node->language][0]['title'] = html_entity_decode($row['title']);

	if($node = node_submit($node)) { // Prepare node for saving
		$node->created = $row['date'];
		node_save($node);
		webmention_send($node->nid);
	}
}

The post that got created for the bicycle photo is here; if you look at the HTML of that post, you’ll see that the link includes the CSS class u-like-of:

<a href="http://infullflow.net/2019/06/naar-het-park/" class="u-like-of">Naar het park</a>

The call to webmention_send() is the secret sauce that sends a Webmention to the original favourites post, a Webmention that signals “I like you” because of that CSS class.

Release the Favourites!

With all my favourites now safely tucked away in Drupal posts, with Webmentions sent to their hosts, I can also expose everything I’ve favourited to all-comers.

Drupal makes this easy using Views, which I used to create this Favourites page, that lists them all, in reverse chronological order; I also used Views to create an RSS feed of my favourites that you can plug into your RSS reader, should you like (and to allow the river of love to overflow its banks ever further).

Although it took some fiddling to make all this happens, now that the fiddling is fiddled, it just works: I click the star in FreshRSS and the favourite appears on this list, in this RSS feed, and, should the blog I favourited the link from support Webmentions, as a “like” on the original post.

The Plastic Bag Reduction Act comes into force here on PEI next week.

My favourite part of the legislation—other than the “no more plastic bags” part—is that there’s an exemption to allow plastic bags to “transport live fish.”

“Hold on, Marv, what about goldfish?!”, one can imagine the engaged public servant exclaiming during the drafting of the bill.

Which causes me to recall a song I wrote for Catherine during our early courting:

I don’t like your fish, I don’t like them very much.

I don’t like the way they look at me, and talk about such and such (and such and such).

I don’t like your fish, I don’t like them one bit.

I don’t like the way they swim around, and I don’t like the way they shit (all over the place).

Chorus:

But I sure (sure) do like you. Yes I do.

Not the best wooing song, perhaps. But it worked.

I met this morning with Shayne Connolly, my personable life insurance broker. While reviewing our coverage he scrolled by the section of the PDF that had my actuarial age at death as 84.

It wasn’t so much that this was news to me as how casually it floated by.

According to the US Social Security actuarial tables, my probability of dying in the next year is 0.65%. By the time I’m 84 it goes up to 8%. If I live to 119, I’ll have an 88% probability of being dead with a year.

In this, as in all things statistical, the words of the late Stephen Jay Gould in The Median Isn’t the Message are helpful:

We still carry the historical baggage of a Platonic heritage that seeks sharp essences and definite boundaries. (Thus we hope to find an unambiguous “beginning of life” or “definition of death,” although nature often comes to us as irreducible continua.) This Platonic heritage, with its emphasis in clear distinctions and separated immutable entities, leads us to view statistical measures of central tendency wrongly, indeed opposite to the appropriate interpretation in our actual world of variation, shadings, and continua. In short, we view means and medians as the hard “realities,” and the variation that permits their calculation as a set of transient and imperfect measurements of this hidden essence. If the median is the reality and variation around the median just a device for its calculation, the “I will probably be dead in eight months” may pass as a reasonable interpretation.

Some encouraging discussion about cycling during Question Period in the Legislative Assembly yesterday, prompted by a question from Steve Howard, Green Party Shadow Critic for Transportation, Infrastructure, and Energy:

Mr. Howard: Thank you, Mr. Speaker. Electric bikes are another emerging trend. These can be used to get around outside of winter months. This combination of active transportation and small scale electrification will become more prevalent. Are there any plans to encourage the uptake of electric bikes?

Speaker: The hon. Minister of Transportation, Infrastructure and Energy.

Mr. Myers: Thank you, Mr. Speaker. At this point we haven’t even gotten a program off the ground to help people get into electric cars, so we’re working towards that. As we talked about in House here last week, I believe our solar option is stage one to living a sustainable lifestyle and as I’ve said to you in private discussions, I believe that electric vehicles is clearly stage two – something that I’m committed to work towards, it’s something that our government is committed to work towards and I’ll take any recommendations you have seriously and I’ll bring them back to our efficiency people and to our energy people and make sure that they get on the agenda.

Speaker: The hon. Member from Summerside-South Drive.

Mr. Howard: Thank you, Mr. Speaker. The active transportation network’s bike lanes and regulations will be sufficient to encourage the safe use of these of these types of active transportation. The range extension that electric assist affords means it would become much easier to bike into town from rural areas – meaning we will see an uptake in bicycles on our highways. Can we expect to see any improvements to highway planning infrastructure that will accommodate the inclusion of more bicycle traffic?

Speaker: The hon. Minister of Transportation, Infrastructure and Energy.

Mr. Myers: Thank you, Mr. Speaker. So we have a sustainable transportation committee – the Minister of Environment, Water and Climate Change; him and I set that up not that long ago. We have a strategy that we’re about to unveil that’s going to cover a number of topics, one of them will be active transportation links and how we plan to deal with them moving forward in the future, so yes, it’s on our agenda. I realize there hasn’t been a lot done in the province in the last 100 years as far as bicycle goes. Prior to that probably there was. At this point, since there are some vehicles on the road there’s been very little done to accommodate any other type of vehicle on the road. Yes, it’s something that we’re looking at. It’s something that’s in our planning, and it’s something that we’re going to try to get to as we build new highway structures across Prince Edward Island.

I’m happy both that the question was asked, and also the spirit of the reply.

Clark reports on the experience of his family eating at Hojo’s Japanese Cuisine, a new restaurant “in the old Pat & Willys.”

As is the case with most restaurants in Charlottetown, the cost was about 2-3x the price of a similar meal in Hsinchu, but unlike the “fries-with-that” places that litter the city, it’s a worthwhile treat.

Relative to 25 years ago, when we arrived here in Charlottetown, the proportion of “fries-with-that” restaurants has dramatically decreased; there was a time when that was almost all you could get if you ate out.

Today, within walking distance of my office I can get bibimbap at three different places; we have two Vietnamese restaurants, three Thai restaurants, and three Indian restaurants. Our 1993 selves wouldn’t recognize the place.

I first met Jeff Eagar when the PEI Home and School Federation hired him to shoot and edit a short film about the Island’s universal provincial school food program.

Tonight, as I was waiting to pick up our food at Richard’s, Jeff said hello, and we had a chat.

He was just back from India, he told me, a trip planned in part to recognize the 20th anniversary of Bang7, a holiday that Jeff invented in 1999 with his brothers, and that they–and an increasing number of their friends and familiars–have celebrated every year since.

Happiness.  Good health.  Love.  These are simple concepts buried under skinny jeans, social media hashtags and shiny, new cell phones. Society is lost in a culture fixated on possessions, appearance and impatience.  Contentment seems illusive in today’s manic and ‘wired’ world.  It’s a problem that affects nearly all of us and it’s this reason that 20 years ago us brothers created the unique holiday Bang 7 – Life Day.

Twenty years ago in the tiny remote town of Pushkar in the Rajasthan desert of western India us brothers decided we needed something that would remind us of what is actually important in life.  We needed something that would keep us grounded and remind us of what truly makes us happy.  We had been travelling through India for months with little more than a backpack and a few basic provisions, but we were happy, healthy and content; a simple and fulfilling existence.  Sunsets had beauty, food had flavour, conversations with strangers were fun.  So on June 7th, back in 1999, in a wonderful moment of simplicity and clarity, we created Bang 7 – Life Day in order to never forget what life is truly about.  Since that day, every year on the 7th of June, we have been taking that day to celebrate life, love, our health and the people around us.  In addition, we have been sharing the celebration with as many people as we can around the world.  Whether you are Indian, American or Japanese, regardless if you’re black or white, female or male, Sikh or Christian it’s all the same, Bang 7 is for everyone.

Given the spirit of Bang7, it’s kind of appropriate that I reconnected with Jeff at Richard’s: a visit there is one of Catherine’s favourite summertime things to do, and yet our last time there was in August of 2016, two years ago.

There are myriad reasons for our long absence: some, like “when you’re on chemo everything tastes like metal” are completely understandable.

But there’s also a good dose of forgetting to do the things that really matter that was responsible, and I’m happy that we took the effort today, and thus got a reminder of “what is actually important in life.”

I’m happy to report that Richard’s is better than ever–with the long lines to match: the fish and chips were simply fantastic, the sun was shining, and the summertime vibe everywhere.

Bang7 Card

In Google Maps you can click on any point of interest on the map to see details and, optionally, you can click “Save” to save the point for later reference.

When you click “Save” you’re presented with a list of options: Favorites, Want to go, Starred places, plus any lists you’ve created previously:

Google Map saving a place option

You might imagine, because of the way they’re presented, that each of these options simply represents a co-equal category in the “Your Places” section in Google Maps, and certainly the way the lists are presented there suggests this is the case:

Google Maps Your Places menu

It turns out, however, that under the hood, at least as far as your ability to export your places using Google Takeout is concerned, these are very different categories.

Starred places

The Starred places list is exported from Google Takeout via the Maps (your places) export:

The Maps (your places) category in Google Takeout

The list that gets exported as a result is a GeoJSON file with each starred place represented like this:

{
    "geometry" : {
      "coordinates" : [ -0.1305119, 51.5109554 ],
      "type" : "Point"
    },
    "properties" : {
      "Google Maps URL" : "http://maps.google.com/?cid=14538551136252988017",
      "Location" : {
        "Address" : "5-6 Leicester Square, London WC2H 7NA, United Kingdom",
        "Business Name" : "Cineworld Cinema - London Leicester Square",
        "Country Code" : "GB",
        "Geo Coordinates" : {
          "Latitude" : "51.5109554",
          "Longitude" : "-0.1305119"
        }
      },
      "Published" : "2016-05-15T16:32:36Z",
      "Title" : "Empire Cinema",
      "Updated" : "2016-05-15T16:32:36Z"
    },
    "type" : "Feature"
}

That’s about as much information as I’d ever want about a starred place, and it’s very helpful to have.

Everything else

Everything else–Favorites, Want to go, plus any lists you’ve created previously–is available from Google Takeout via the Saved export:

Google Takeout Saved section

These places cannot be exported as a helpful GeoJSON file, only as a CSV, and the CSV only contains the title of the saved place, any note you added, its Google Maps URL and any comments:

Title,Note,URL,Comment
Cyclesmith,,https://www.google.com/maps/place/Cyclesmith/data=!4m2!3m1!1s0x4b5a222a1bfe6b69:0xf8fad3e13f099e36,
3660 Strawberry Hill St,,https://www.google.com/maps/place/3660+Strawberry+Hill+St/data=!4m2!3m1!1s0x4b5a21095c7e943b:0xcaafa3916fb4a0e6,
Sportwheels Sports Excellence,,https://www.google.com/maps/place/Sportwheels+Sports+Excellence/data=!4m2!3m1!1s0x4b5988577cfca89f:0x7002bb9c32866180,
The eBike Centre Halifax,,https://www.google.com/maps/place/The+eBike+Centre+Halifax/data=!4m2!3m1!1s0x4b5a2367215d4d2b:0x51aa4206ac656daf,
Dragon E Bikes Ltd,,https://www.google.com/maps/place/Dragon+E+Bikes+Ltd/data=!4m2!3m1!1s0x4b5a21a86a32afe3:0xc6fe4d5ec596b038,

There’s no geographical information in the file.

If you’ve been treating Google Maps’ ability to save places as a way of building up a list of places that you later hope to use in some other system, you’ll want to consider only saving to the Starred places list, as it provides the greatest flexibility for later export.

About This Blog

Photo of Peter RukavinaI am . I am a writer, letterpress printer, and a curious person.

To learn more about me, read my /nowlook at my bio, read presentations and speeches I’ve written, or get in touch (peter@rukavina.net is the quickest way). You can subscribe to an RSS feed of posts, an RSS feed of comments, or receive a daily digests of posts by email.

Search