I’m Joshua (or joshu, or @shu). I studied Geophysics, but now I work as an SRE. For fun, I read, make computers do math, go for hikes, and take pictures of things. Some of that makes its way onto here.

“Fearchar” should be pronounced FARE-uh-car, though pretty much everyone pronounces it FEAR-char.

Leaving Facebook

I’m going to start this off with a summary, because it seems silly to have a tl;dr at the end of a post:

I’m leaving Facebook because their attitude towards users and towards privacy makes me uncomfortable, but most of all because the cost of having Facebook doesn’t match the benefits for me.

I’ll explain in a little more detail.

Facebook and users

Most of the complaints I hear from other users of Facebook seem to boil down to “Facebook doesn’t care what I think”. On some level, I think that this is what the complaints about layout changes reduce to, and all of the various petitions: users want to be heard. As someone who’s worked with legacy systems, I agree that having to maintain backwards compatibility sucks, so if you’re going to change your layout, you should do it all-out. As a user, I’m frustrated when the service I’m using doesn’t seem to care. The “deal with it” mentality that I get from Facebook doesn’t cut it for me, and it’s a little weird for me to see other users, annoyed with their friends complaining about changes, using the same “suck it up” response, as though through some sort of weird social-media Stockholm syndrome.

Facebook’s attitudes towards privacy also seem sort of sneaky to me. They’ve given people better privacy controls, which is great, but I think most Facebook users still don’t understand them perfectly. I know I don’t feel confident in my grasp of the privacy controls, and I’ve tried to read through them pretty thoroughly. Whether the privacy controls are good and solid is irrelevant if the users don’t know how to use them, and I think that the burden for educating users should fall on Facebook if they want to be ethical about things.

Facebook is also interested in our data, which is reasonable since it’s how they make their money. The difficulty here, though, is that Facebook is a corporation (and a publicly traded one at that), and ~free market capitalism, while not immoral, is certainly amoral to some degree. Common wisdom states that capitalism operates at its best when everyone’s acting in their own personal self-interest, and since that goes for Facebook too, it seems naive to expect them to be very invested in not tracking what you’re reading on websites who are interested in reporting it to them. Overall, the amorality of Facebook makes me a little suspicious that the solidity of their privacy controls are intended more for posterity than for actual use by users to lock down the data they provide for Facebook’s services, which Facebook is, in turn, interested in using, sharing, or selling.

What services does Facebook provide me?

If it’s worth assessing whether staying with Facebook is in my best interest as a theoretical rational actor, then I need to weigh the benefits (i.e., services that Facebook provides me) against the costs. Some of these benefits may be provided elsewhere, but Facebook’s done a good job at being the service that they are, so others may not.

Instant messaging has been one of my primary uses for Facebook, but IM has been around for a long time, and even when I was using Facebook for IM, I certainly didn’t stop using other methods – I use Skype, IRC, AIM, and most of all GChat, and Facebook was really just another protocol to toss onto the pile and sign into when I remembered to do so.

Social broadcasting is another way that Facebook is useful: broadcasting opinions, thoughts, etc., to a group of friends or to the public. As evidenced by the fact that I’m writing here, it’s pretty clear that Facebook doesn’t have a monopoly on this, and I think that Twitter and a blog can serve the needs for public opinion broadcasting fairly well. This leaves the matter of more private opinion broadcasting (just to select groups of friends), but I think that can be provided either by Google+ (or Diaspora*.

Sharing photos with friends and seeing the photos they share is another big use of Facebook for me. This is one of the few items on the “benefits” list for which I don’t have a clear solution lined up. That said, there’s no shortage of photo-sharing services out there: Google+ could do this with high granularity, or Flickr, or even Skydrive, Dropbox, or Imgur.

One of the hardest services to replace as far as I’m concerned is the cultivation of a network of friends and contacts who can be reminded to get into contact with me. Facebook reminds you when it’s someone’s birthday (and I’m sure birthdays off of Facebook will be a bit more quiet), and it also gives a quiet reminder of other people you know online via Facebook’s instant messenger. I don’t think there’s an easy solution for this other than re-building a network of friends outside of Facebook and making sure they have the appropriate means of communication to talk to me. Maybe I’ll talk with them less, for better or for worse.

… and at what cost?

So some of this will be replaced (with ease, or with some difficulty), and some of it may not be. What’s the cost that I’m weighing these services against?

I already mentioned that I consider Facebook as a corporation to be necessarily somewhat amoral. It’s not that they’re unethical or bad, just that they’re trying to maximize their profits, and don’t mind pushing the outside of the envelope. The expectation, then should be that I’ll push back, which isn’t necessarily a struggle that I’m interested in having for the payoff.

Even with their privacy controls, some of Facebook’s overall decisions unsettle me (e.g., keeping deleted messages forever, which is more unsettling now that IMs are treated as messages). Even when their actual decisions don’t unsettle me, the direction that they’re headed does, and that seems as good a gauge as any to me. Analogously, I don’t think I would stay on a ship that’s headed in a direction that I don’t want to go, even if it hasn’t arrived there yet.

Another cost of Facebook is putting all of my eggs in one basket. Facebook wants my data, and they want as much of my data as they can. This is good for them if it keeps me locked in, but also leads to obnoxious things like changing everyone’s listed email address to <username>@facebook.com. Even if I didn’t want friends to have ways to contact me outside of Facebook for reasons of discomfort with Facebook, it’d still be nice to know that, in the event of Facebook going down, friends would still have ways of getting in touch with me, and I wouldn’t lose all of the data I’ve uploaded there.

Most importantly to me, with the introduction of Facebook’s social graph search it may no longer be enough for me to be vigilant about my own privacy settings – since social graph search works on social relationships (to friends, relatives, etc.), staying on Facebook means I either need to lock down these settings and ensure my friends and family do as well, or else throw in the towel on those particular privacy concerns.

And so, au revoir

So, I’m leaving Facebook, and here are the ways to get in touch with me:

If you’re interested in taking a break from Facebook as well, I highly recommend it, as part of a larger attempt to take a break from any kind of habit every so often to see whether it still makes sense. Facebook gives you a manipulative “your friends will miss you!!!” page when you temporarily deactivate your account, but you can always re-activate it with ease.


Fruit bread

ingredients

  • ½ cup (125 mL) Greek yogurt
  • 1 ¼ cup (300 mL) lukewarm water
  • 1 Tbsp. yeast
  • 1 scant Tbsp. salt
  • 1 Tbsp. oil
  • 2 Tbsp. honey
  • 2 ¼ cups (325 g) whole wheat flour
  • 1 cup (100 g) rye flour
  • ½ cup (75 g) buckwheat flour
  • ¼ cup (25 g) gluten
  • 1 cup (175 g) chopped fruit:
    • ⅓ cup (60 g) chopped dried apricots
    • ⅓ cup (60 g) chopped dried plums
    • ⅓ cup (55 g) chopped dried apples
  • rye flakes & sunflower seeds, if desired -- about 1 Tbsp each.
  • yolk of one egg
  • rye flakes, rolled oats, and/or sunflower seeds to top

directions

Greek yogurt warming in a cup
Greek yogurt, warming in a cup

Spoon out a half cup of Greek yogurt and let it sit and warm on the kitchen counter for about fifteen minutes, until it’s come closer to room temperature. While you’re waiting, mix the lukewarm water, yeast, salt, oil, and honey in a large bowl -- I found a whisk helped to mix all of it together. Once the yogurt has warmed enough to be mixed in.

Salt, yeast, and honey standing on the counter
Salt, yeast, and honey

Chop the fruit on a cutting board, then measure the various flours (and gluten) into a separate bowl and mix them together. Add just enough of the flour to get the mixture to a sort of runny consistency (like batter) and then add the chopped fruit and nuts/seeds if desired before mixing in the rest of the flour.

Dough in a batter-like consistency
The batter-like consistency

Dough in a batter-like consistency with chopped dried fruit
The fruit being mixed in

Dough in a batter-like consistency with seeds and flakes
Plus seeds and flakes.

Knead for a few minutes, adding a bit more flour (of any of the three types), kneading until the dough is slightly sticky but still manageable. Cover the bowl and let the dough rise for an hour.

Hands kneading the dough
Kneading the dough

The dough, ready to rise
The dough, ready to be covered and rise.

After an hour, punch the dough down and form into a round on a cutting board with a bit of cornmeal on top so that it can slide more easily into the oven. Let it rise again for about a half hour, and start preheating the oven to 375 °F (190 °C).

After the bread has risen again, brush the top with egg yolk, sprinkle oats, rye flakes, or sunflower seeds over it, and bake for about 35 minutes.

The dough being painted with egg yolk
Painting the dough with egg yolk

The dough, painted and topped with flakes, ready to bake Ready to bake


command-line Google

Because I was bored today, and do such things when I’m bored, I came up with a command-line interface for Google in Python using Google’s web search JSON API.

Hafnia % google-search -n 1 "Google"
Google (http://www.google.com/):
 * Enables users to search the Web, Usenet, and images. Features include
   PageRank,   caching and translation of results, and an option to find similar
   pages.

Strangely enough, Google seems to leave bold tags (as well as an entity or two) in the “content” section of their search results on this API, so I ended up using lxml to parse the HTML into plain text, but other than that, google-search doesn’t use anything outside of the stdlib.

EDIT: I changed the script to use string modification so that lxml is no longer necessary. If I feel like it, I might put all of the text processing into something more suited for it …

Rather than pasting the source code here, I’ll just link to google-search on my website.


Japan earthquake data

After a big earthquake, I’m always tempted to pull some data from various sources and see what kind of graphs I can produce. My friend Charlie found the NOAA tide data by station, once again driving home the point that NOAA (and USGS, to a lesser extent) is great at collecting data but not that great about indexing it in a way that makes it easy to find by a casual user.

USGS, however, publishes a catalog of earthquakes in various formats; they offer a list of the last earthquakes >= 2.5 Mw in the last week: in Atom/RSS if you’d like to track it in a feedreader, or in CSV for more base crunching. I decided to use R for the more base crunching. But first, a little bash:

#!bash
curl -s 
"http://earthquake.usgs.gov/earthquakes/catalogs/eqs7day-M2.5.txt" 
   | grep -Ee '^(.*Japan|Src,)' | sed -En 
   -e '1,/05:46:23 UTC/ p' &gt; ~/japan-earthquakes.csv

Then opened R, and ran:

earthquakes &lt;- read.csv(file="~/japan-earthquakes.csv",head=TRUE,
    sep=",")
times &lt;- strptime(earthquakes$Datetime,
    format="%A, %B %d, %Y %H:%M:%S UTC", tz="UTC")
times &lt;- times - times[350]distances &lt;- ((earthquakes$Lat -
    earthquakes$Lat[350]) ** 2 + (earthquakes$Lon - 
    earthquakes$Lon[294]) ** 2) ** 0.5

Having all of the data now compiled, we can do things like produce a histogram, demarcated at every 24 hours, of frequency with time:

Histogram of time

hist(times, freq=F, breaks=0:60 * 3600, col=heat.colors(24),
    main="Histogram of time", xlab="time (in seconds)", 
    ylab="frequency")

or a histogram of magnitude:

Histogram of magnitude

hist(earthquakes$Magnitude, freq=F, breaks=45:90/10,
   col=heat.colors(45), main="Histogram of earthquake magnitude", 
    xlab="magnitude (Mw)")

or a histogram of distances:

Histogram of distance

hist(distances,freq=F,breaks=0:50/10,col=heat.colors(50),
    xlab='distances (in degrees)',main='Histogram of distances')

On “Eskimos have [many] words for snow”:

From Pullum’s The Great Eskimo Vocabulary Hoax:

[When you encounter this hoax,] don't be a coward like me. Stand up and tell the speaker this: C.W. Schultz-Lorentzen's Dictionary of the West Greenlandic Eskimo Language (1927) gives just two possibly relevant roots: qanik, meaning 'snow in the air' or 'snowflake', and aput, meaning 'snow on the ground'. Then add that you would be interested to know if the speaker can cite any more.

This will not make you the most popular person in the room. It will have an effect roughly comparable to pouring fifty gallons of thick oatmeal into a harpsichord during a baroque recital. But it will strike a blow for truth, responsibility, and standards of evidence in linguistics.