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.

Roasted garlic and black bean spread

If I keep doing these recipe posts, sooner or later I'm going to need to break out my camera and start documenting it along the way. What good is writing about food if you don't take pictures too?

In any case, on Saturday I decided to make some more of a black bean spread that I'd made a while back. I had a few minor improvements to try out: I'd used olive oil the first time, but the flavor of extra virgin olive oil was way too strong and overpowered the beans.

The first step, naturally, was cooking up some black beans. Or, I guess, if you have canned black beans, opening up a can. I cooked the ones I made for a little longer than I would usually so that they'd be a little mushier and mix better in the blender. For this recipe, I wanted about a cup of cooked black beans, so I started with a half cup of dry black beans and two cups of water. I threw in some epazote (to relieve the gassy aspects of beans – or so I've been told) and tossed the beans a little in some oil in the dutch oven first (not really sure why I did that – usually if I’m making black beans for eating, I fry an onion in there first, so I guess it’s just force of habit).

I checked on the beans regularly, and when I was satisfied that they were done to a good consistency, I threw them into some tupperware to cool while I roasted three cloves of garlic in the broiler. If you haven't done it before, it's dead simple: wrap the whole cloves of garlic in aluminum foil and throw them in the broiler. Take them out when they're soft and a little mushy. I chopped them up into chunks (again, to aid the blending process) and threw them in the blender with the beans, some salt, and about a quarter cup of vegetable oil.

I didn't blend them too finely. Not because I like some texture in my spread, though I may claim that in the future, but rather because I'm impatient and turning the blender on, turning the blender off, poking at the beans that didn't get blended, turning the blender back on again, etc., is a long and tedious process. However, it was delicious.

Торт Медовик (Russian Honey Cake)

To ring in the new year, I decided to make a recipe that I’d been wanting to try out for ages, but had never had enough courage to try. This particular recipe is for Торт Медовик, or Russian Honey Cake, and the only recipe I could find was in Russian. My Russian’s sketchy at best, but after being run through a machine translator, it’s surprisingly comprehensible. To save everyone the confusion of a machine-translated, recipe, I’ll just provide a link to the original recipe and then post my translation (and general thoughts on the recipe).

Tort Medovik

Ingredients:

Cake Dough:
  • 2 eggs
  • 2 tablespoons of honey
  • 1 cup sugar
  • 1 teaspoon baking powder
  • 1 stick (or 125 g) butter or margarine
  • 3½ cups flour
Custard:
  • 300 g (about 2⅓ sticks) softened butter
  • 1½ cups (1 can) sweetened condensed milk
  • about ¾ a lemon’s worth of lemon juice
  • (optional) walnuts

Directions

Preheat your oven to 350 °F (180 °C).

In a double boiler, heat the butter/margarine and stir in the sugar and honey, stirring until smooth. Add in the baking powder and continue stirring; once the baking powder is mixed in, remove the mixture from heat and allow it to cool.

After the mixture has cooled, mix two eggs in a separate bowl and then mix them in. Add the first three cups of flour in and stir to mix the dough; the last half cup will probably need to be kneaded in by hand. If you need a little more flour to keep it from sticking to your hands, go for it; it’ll make the next steps easier.

The recipe says to divide the dough into 6-8 pieces, though 5 worked fine for me. Then flatten each piece of dough onto a greased baking sheet and bake for 6–12 minutes. My method was to stagger baking the dough: after 6 minutes with the first one in the oven, I’d put the second one in, and so forth. This worked relatively well and allowed me to only use two baking sheets.

If you’d like to have a more uniform cake, I’d recommend taking a cake pan and using it as a guide to cut off the edges of these pieces. If you do this, do it right after they come out of the oven: they’re soft then, but they get kind of brittle as they cool and don’t soften until they’ve been soaked with the custard.

For the custard, put the enormous mass of softened butter (seriously, we’re talking in like, Paula Deen quantities here) in a bowl and blend it with an electric mixer. Pour in the condensed milk slowly so that it doesn’t splatter all over the place, and then add lemon juice to taste. If you like the custard without lemon juice, more power to you: that’s how the original recipe is written … but personally it was a little too simple and sweet for me when made that way.

After the custard is made, interlayer the cake pieces with custard and frost the top (and edges) with some custard as well. Take the broken pieces from the edges that you trimmed/broke off and crumble them up, and top with the crumbs and walnuts, if you’d like (I didn’t). Put it in the fridge for a while and let the custard soak in a bit to soften the layers, and you’re done!

Personally, I’m a little wary about making a recipe with this much butter a second time, because I kind of like my arteries to permit some flow through them. I was thinking about trying it again but with the custard replaced with whipped egg whites or a cream-cheese based frosting, but I’m not sure how well it would work in terms of soaking into the pastry. If I give that a go, I’ll post the results on here.

Oh, and happy new year!