?

Log in

No account? Create an account

And so, she was beautiful to me

Jun. 20th, 2011 | 10:35 pm

This entry was originally published at my site's personal web log. Additional information or comments may be available on the original posting.

I remember the sunlight on 8th Avenue and 15th Street that morning vividly. New York City is beautiful in the morning, but only if the streets aren’t packed with throngs of hurried people. The sunlight streamed into the tangled mess of steel and concrete and glass, bouncing from one reflective surface to another until it finally lay flat on the ground, or on me.

Often, while alone—and only while alone—I’d walk facing the sky. In the Summer, if I woke early enough or stayed up late enough, I’d slow my typically brisk pace to relish the thick, warm air as I walked through it. In the Winter, when too many people woke before the sun, I’d wait for rush hour to end before venturing outside, because that’s when I could feel the sun drape its light on me the way I wanted to feel it.

It was one of those cold, late mornings in the Winter that I remember, except I wasn’t alone. On this particular morning, I was walking with my father and we were talking about school. I’d recently started attending another school after dropping out of the one I had just been in, and, again, I hated it.

But there was a girl, and her name was Bre, and one day she told me in visibly unconcerned confidence that she, like me, was diagnosed with bipolar disorder. And so, she was beautiful to me, and I got a crush on her. And on this particular morning, playing hooky for a while with an understanding father, I was explaining all this to him as matter-of-factly as I could, lest I seem too smitten.

As my father is wont to do when he correctly sensed I had shared something that made me feel uneasy, he paused momentarily, looked at me concertedly, and then began to tell me an allegorical tale. This time, he told me of a short story he had once read. It went something like this.

On a day very much like that sunlit day, a man and a woman met at a sidewalk café. They quickly struck up a conversation and, soon thereafter, found themselves spending a good deal of time with one another. As their friendship flourished and their fondness for one another deepened, however, they each became more afraid of revealing their romantic feelings to the other.

The story, my father told me, was written from both of their perspectives. The narrative voice switched from one to the other, so that the reader became a sort of voyeur able to peer into each of the protagonists’ minds. Although the details of his fears were different from hers, the outcome was the same: neither told the other the extent of their true feelings.

Ultimately, it was a very sad story. It ended on a note of mutual resignation rather than happy romance. But the moral is clear, and so was my father’s message.

I remember this story whenever I shy away from revealing something about myself for fear of rejection, ridicule, or even shame. Like the characters in the story, I don’t always muster the courage to lay myself bare. In fact, I never told Bre about my crush on her and before long my opportunity had gone, as she transferred to another school. However, the memory serves to make me that much braver in moments like these.

There are numerous things I’m struggling to work up the courage to offer for public view. I am afraid of being ridiculed and mocked. I am afraid of being ignored; that things important to me are not important to anyone else; of being unimportant, myself. Most of all, though, and contrary to some of my bravado, I am afraid of being disliked.

But I also know I am often ridiculed and mocked precisely because I show courage when others do not. I know I am often ignored precisely because the things important to me are too threatening for others to acknowledge. And I know I am often disliked precisely because of my conviction’s integrity.

Often, all of that makes me conspicuous, and so I’m sometimes thought to be “inspiring” when framed positively or “intimidating” when framed more negatively. I think enfant terribles are important, and I’ve rarely felt happier than when I receive (now weekly, if often private) thanks for sharing myself publicly. But at the same time, I really do not want to be any of those things. I want, instead, to be plain and largely forgotten.

I want to be in love and feel close with people. And I’m afraid the more “inspiring” or “intimidating” I become, the more I’ll stand out as someone hard to feel close to.

I remember when someone who was in love with me sang along to Billy Joel as we crossed the Golden Gate bridge. And I remember when another who was in love with me put her arm around me as I gently shook flowers off the tree we climbed on Atwell’s Avenue. And I remember both of the days when each of them stopped feeling safe enough to be in love with me, days I revealed the extent of my true feelings.

So I think that, these days, I share so much of myself with strangers so publicly because what I really want is to share myself with someone who loves me. And I just hope you’re reading.

Permanent Link | Leave a comment | Share

Internet censorship *FACEPALM* moment of the day

Apr. 27th, 2011 | 09:34 pm

This entry was originally published at my site's personal web log. Additional information or comments may be available on the original posting.

A friend linked me to “US National Science Foundation blocks Global Voices Advocacy website” by Ethan Zuckerman. In this post, Ethan discusses how the National Science Foundation (NSF), which (for those unfamiliar with the Internet’s history) in 1986 funded NSFNet as a cross country 56 Kbps backbone for academic purposes, essentially the first significant University computer internetwork, and thus the first Internet, blocked a website he and a number of other Internet freedom advocates write for:

[O]ne of the main functions of Global Voices Advocacy is to provide information to people in repressive nations so they can seek and publish information freely online.

After confirming from NSF officials that “the blockage is not in error,” Ethan states the almost too-obvious-to-be-deemed-important note:

[T]he National Science Foundation is spending taxpayer money to (ineffectively) prevent scientists from learning about a debate about “internet freedom” tools the US State Department and the Broadcasting Board of Governors are spending taxpayer money to support and promote, again using taxpayer money.

Is there a Federal irony department where I can lodge a complaint?

Thus: *FACEPALM.*

As if that wasn’t ludicrous enough, check out this explanation by JeffAlex in the comments:

This is an instance of unintended consequences rather than malevolent intent. The fact is, a few senior NSF employees got dinged a couple of years ago for viewing porn on their work computers. A Republican Senator took this up as an excuse to argue for budget cuts at NSF, the NSF got spooked, and NSF IT got the word that they should lock down the entire agency’s network. Obviously, there’s no point in trying to lock down a network unless you also try to lock down any access to sites that can tell you how to circumvent the lockdown. So, this is less about Internet or academic freedom than it is about simple inside-the-Beltway politics.

(Emphasis mine.) Others seem to agree. My own correspondence with government employees in other agencies also supports the explanation.

Yet again, porn is the scapegoat for political agendas. And not just the excuse, but the explicit rationale. A stupid one, to be sure, but unabashedly made, and—worse—unapologetically ceded.

Ethan’s snark is well deserved:

I’m pretty surprised to learn that the scientists at NSF are working in a filtered internet environment, and that the filtering is so aggressive that discussion of internet filtering and circumvention can’t be discussed. One wonders whether the State Department might consider offering some trainings for the National Science Foundation so that employees there can learn side by side with Chinese dissidents how to overcome filtering and learn about State Department sponsored research on internet filtering. Maybe we can sneak into the building with Tor on USB keys and clandestinely smuggle them to oppressed US scientists.

Well done, American bureaucrats. You self-defeating fucking morons.

Permanent Link | Leave a comment | Share

The food you eat has become a weapon of class antagonism

Apr. 27th, 2011 | 09:31 pm

This entry was originally published at my site's personal web log. Additional information or comments may be available on the original posting.

Revolutions and the price of bread: 1848 and now (via @KemoKid):

In the graph above the little blue crosses indicate the price of wheat in certain countries that have experienced social unrest this year. The further to the top right the cross is, the higher the medium and short term price hike the country has suffered: for wheat and therefore for bread.

Saudi and Algeria are stable, Occupied Palestine, Jordan and Egypt are on the high end of the price spike; Tunisia, Yemen, Morocco and Lebanon significantly high. There is, therefore, a rough – but only – rough correlation between bread prices and revolutions. So far.

To put the above into perspective, take a look at the USDA’s estimates of food prices from countries around the world:

See how Pakistan is all the way over to the right with 45.5% of the average household spending going to food and America is all the way to the left, where only 6.9% of average household earnings are spent on food? That doesn’t seem fair. Quoting the Nielsen article:

[A]t a time when many countries around the world are facing double-digit inflation on basic food items, can the U.S. be far behind?

The simple answer is no.

At first glance, it looks like America is doing well keeping its food prices low—and thus its populace safely dissuaded from revolution. But peel away the curtain and the story is far more sinister. The question becomes, “How the hell can America afford to keep food prices so low when the average American farm size has actually decreased from 431 acres in 1997 to 418 acres in 2007?”

We have less farmland and yet more food today than we ever did before. And although many people, myself included, ignorantly believed that this was actually proof of “science’s achievements,” that simplistic analysis is wholly quantitative. What of our food’s quality?

According to sources compiled in 2010, the average american eats 1,996.3 lbs. of food per year. Unsurprisingly, most of it is mostly garbage. While charts like the one below may look nice, they don’t seem to account for how much the commodity, subsidized foods like corn are inside other foods and even in the diets of food-producing animals, such as (amazingly) COWS!

american-average-food-consumption

The answer to my question, I’m sadly beginning to realize, is that America keeps food prices low using government subsidies—corn subsidies, totaling $75 billion from 1995 to 2009, are the biggest there are, and by a long shot, as wheat subsidies come in a distant second totaling a mere $31.8 billion in the same timeframe—and immigrant labor trafficking. The best documentation I’ve seen of these issues is in the movie Food, Inc., which, to borrow the words of one review:

…is the definitive statement on how America produces crappy food to the detriment of the people who eat it, the animals who are treated cruelly in farms and slaughterhouses, and the largely immigrant workforce that labors in unsafe and low wage conditions. The only benefactors it would appear are the men who run Monsanto, Purdue, Smithfield and a small group of other huge multinationals that only see food as the ultimate commodity. When they look at a tomato, they don’t see something to eat but something to turn into a dollar no matter the consequences to society.

These are the other pieces in the same puzzle that Stephen Colbert highlighted when he testified on immigration reform to Congress. And thanks in part to America’s overwhelming—and overwhelmingly corrupt—military and economic dominance, such “consequences to society” are not confined to American soil. They are actively, intentionally exported to other countries, and all the problems that America’s food lobby foists onto Americans are also being foisted on the rest of the planet.

In 2002, Andrew Cassel discussed Why U.S. Farm Subsidies Are Bad for the World:

The farm bill, which the House of Representatives has approved and which the Senate could vote on this week, calls for taxpayers to fork over some $180 billion to farmers during the next decade. That’s a 70 percent hike above the cost of current farm-subsidy programs, most of which represent direct payments to wealthy farmers and agribusinesses.

Those subsidies make it possible to export millions of tons of food so cheaply that native farmers in places such as Jamaica can’t possibly compete.

By guaranteeing U.S. farmers a minimum payment for commodities such as corn, rice and soybeans, the government encourages overproduction. That drives down the market price, forcing even higher subsidies and creating surpluses that can be shipped to Jamaica and elsewhere.

As far as I can tell, little has changed since 2002. In fact, things have gotten worse. Since then, the Bush administration’s illegal wars in the Middle East have further destabilized the region and, in turn, caused oil prices to rise. And since so much of the food industry is mechanized, it needs oil to function. And that? Yup. You guessed it. Back to the Nielsen article:

With continued unrest in the Middle East and northern Africa and the resulting impact on global oil prices, we will likely see increased inflationary pressures from rising fuel prices have a similar impact on U.S. consumers as experienced in 2008 (i.e., shopping trip compression, more at-home consumption, value buying and increased coupon usage).

In short, it is a food pyramid, except the pyramid isn’t food groups, it’s classes of people, and the food isn’t really food anymore, it’s a weapon of class antagonism.

As the Obama administration continues Bush’s wars, and engages their own in Libya, oil prices continue to rise. This, in turn, raises costs for the food corporations, which, in turn, gives them reason to lobby the government for more food subsidies corporate welfare, which, in turn, help keep food unhealthy yet cheap, which, in turn, keep the American populace lethargic and compliant and fed, which, in turn, prevents us from revolting (at least in a mass democratic movement).

And if that weren’t bad enough, with food prices so low, and with America’s military literally blowing up acre after acre of the rest of the world so that they can’t produce their food natively even if they could compete economically, the large food corporations can supply the demand for food from other countries:

Global demand for U.S. food in developing countries is great for U.S. exports, but those gains may also lead to higher food prices for U.S. consumers.

So. Are you still proud of what your country has become, my fellow Americans?

Permanent Link | Leave a comment | Share

Disagreeing with “How to Disagree”

Apr. 20th, 2011 | 09:00 pm

This entry was originally published at my site's personal web log. Additional information or comments may be available on the original posting.

This is cross-posted from my scratchpad, Maybe Days.

A visual representation of Paul Graham’s Hierarchy of Disagreement, also called the Argument Pyramid. Each layer in the pyramid can also be referred to as a numbered Disagreement Hierarchy level. For example, name-calling is sometimes referred to as DH1, while refutation is sometimes referred to as DH6.

In his words and from his essay, How to Disagree:

The web is turning writing into a conversation. Twenty years ago, writers wrote and readers read. The web lets readers respond, and increasingly they do—in comment threads, on forums, and in their own blog posts.

Many who respond to something disagree with it. That’s to be expected. Agreeing tends to motivate people less than disagreeing. And when you agree there’s less to say. You could expand on something the author said, but he has probably already explored the most interesting implications. When you disagree you’re entering territory he may not have explored.

The result is there’s a lot more disagreeing going on, especially measured by the word. That doesn’t mean people are getting angrier. The structural change in the way we communicate is enough to account for it. But though it’s not anger that’s driving the increase in disagreement, there’s a danger that the increase in disagreement will make people angrier. Particularly online, where it’s easy to say things you’d never say face to face.

If we’re all going to be disagreeing more, we should be careful to do it well. What does it mean to disagree well? Most readers can tell the difference between mere name-calling and a carefully reasoned refutation, but I think it would help to put names on the intermediate stages. So here’s an attempt at a disagreement hierarchy

See also: solving disputes.

Not to be confused with arguments that rest on the shoulders of other arguments, ala, an Argument Pyramid where an argument is an explanation, reasoning, rational, or story.

While I agree with the majority of Graham’s points, I do disagree with one of his main rationales (i.e., arguments). Graham says:

[W]hile DH levels don’t set a lower bound on the convincingness of a reply, they do set an upper bound. A DH6 response might be unconvincing, but a DH2 or lower response is always unconvincing.

If I’m reading Graham correctly, he’s saying that disagreeing by using ad-hominem and name-calling tactics are “always unconvincing.” However, then he says:

The most obvious advantage of classifying the forms of disagreement is that it will help people to evaluate what they read. In particular, it will help them to see through intellectually dishonest arguments. An eloquent speaker or writer can give the impression of vanquishing an opponent merely by using forceful words. In fact that is probably the defining quality of a demagogue.

I’m left wondering: If an eloquent speaker or writer does successfully “give the impression of vanquishing an opponent merely by using forceful words,” does this leave the opponent or, often more importantly, the unnamed third party in any dispute (the observer) convinced of their argument? Often, at least in my experience, the answer is yes. In fact, the widespread “successes” of demagogues are a testament that it’s not always necessary to be correct—that is, to be truthful or, in Graham’s words, intellectually honest—in one’s assertions to either realize a particular intent or to sway people’s minds, but rather one merely be right—that is, to be perceived as the winner of the dispute.

I both personally appreciate and sympathize with Graham’s clear and noble intent to bring more happiness to more people. I even agree that using higher DH levels will generally achieve more happiness during dispute resolution, but I remain unconvinced that higher DH levels are always more convincing (or, “useful,” or “effective”) than lower ones. This is not to discount the usefulness of understanding DH levels. After all, one must know the rule to break it well.

Perhaps the most useful example of situations where lower DH levels are, potentially, more useful is applicable to leadership. For example, David Logan speaks of 5 “tribal” stages of leadership. Stage 1 tribes are, in his words, “a group where people systematically sever relationships from functional tribes, and then pool together with people who think like they do.” People in a “stage 1 tribe” may be gang members, prison inmates, or anyone else who, effectively, believes that “life sucks.” Logan describes “tribes” from stage 1 all the way up through stage 5. A stage 3 tribe, he explains, “is the one that hits closest to home for many of us because it’s in stage 3 that many of us move. And we park. And we stay. Stage 3 says, ‘I’m great and you’re not.’”

Indeed, Logan’s not just talking about some nebulous notion of community, he’s talking about the way people move between communities, and, moreover, how they talk to each other when they do that—he’s talking about communication. Now, it should almost go without saying that convincing people of something is simply one part of communication, and if one is to communicate convincingly with others, one ought know how others communicate. Moreover, one ought identify these others explicitly: opponent(s), comrade(s), and observer(s).

How do each of these groups communicate? In what “tribal stages” are these three groups? In my experience, and in many disputes, one is attempting to convince one’s observers rather than one’s opponents, and the more observers there are—such as is afforded by the Internet’s development, as Graham states—the less likely it is that all of these observers are in the same tribal stage.

So Graham is correct when he says that “you find there is a lot more meanness down in DH1 than up in DH6.” But if we are willing to accept Logan’s conclusion that “leaders need to be able to talk at all the levels so that [one] can touch every person in society,” then Graham is incorrect when he asserts that “[y]ou don’t have to be mean when you have a real point to make. In fact, you don’t want to. If you have something real to say, being mean just gets in the way.”

I think, actually, it’s quite the contrary. Sometimes, being “mean” is the point. Moreover, depending on the context and, yes, perhaps counterintuitively, that’s not necessarily a bad thing. As Walt Whitman once famously said, “Do I contradict myself? Very well then: I contradict myself. (I am large, I contain multitudes.)”

For antagonism, dearest loves, is not in fact the inverse of intimacy.

Permanent Link | Leave a comment | Share

How to spoof your MAC address on Mac OS X (for reals)

Mar. 29th, 2011 | 10:50 pm

This entry was originally published at my site's personal web log. Additional information or comments may be available on the original posting.

One of the oddities of Apple’s Mac OS X platform is that some things that should be easy are obtusely difficult, and remarkably so. Changing the hostname of a Mac OS X Server is one good example. Another is changing the “Ethernet ID” (aka. MAC address, aka. link-level address) of a network interface card.

This should be really simple, as the correct command line is plain as day (where the string of colon-separated 00′s is your preferred MAC address):

sudo ifconfig en1 lladdr 00:00:00:00:00:00

There are numerous blog posts all over the ‘net that tell you this time and again, but each one seems to have comments from users complaining that it doesn’t work on their system. I ran into a similar problem not long ago when my MacBook Pro didn’t do what I expected. Just like others, whenever I tried to run the above command, nothing seemed to happen:

ifconfig | grep ether # Determine current MAC addresses
sudo ifconfig en1 lladdr 00:00:00:00:00:00 # Try changing MAC address for en1 (usually Airport)
ifconfig | grep ether # Confirm change; but uh-oh! Output is the same as before! Why?

Here’s how I fixed this problem.

The thing to know is that there seem to be a number of conditions that will prevent Mac OS X from successfully changing a NIC‘s MAC address. Some are obvious and some are not. As far as I can tell, these conditions are:

  • having the interface “down” (i.e., if you’ve recently run ifconfig en0 down or an equivalent),
  • being associated with (i.e., connected to) a Wi-Fi network with your Airport card,
  • having the System Preferences application running,
  • forgetting to “unstick” the current system configuration set.

It’s the last one that bit me. Mac OS X has a feature called “system configuration sets” or “locations,” as it’s termed in much of the GUI. These can be accessed via the Network pane in System Preferences, or via the scselect command from Terminal; it’s that scselect command which offers the key to changing a Mac’s MAC address.

On my MacBook Pro (which, for the record and if it matters, is running Mac OS X 10.6.7), I need to do all of the following before running ifconfig, as shown above:

  • If I’m changing my Airport card’s MAC address, I need to disassociate from any network. (This can most easily be done by invoking airport -z from Terminal. If you don’t have this command, see my tips on where to find airport.)
  • Quit System Preferences if it’s open.
  • Tell the operating system to “delay changing the system’s ‘location’ until the next system boot” by running: scselect -n.

According to the man page for scselect:

scselect provides access to the system configuration sets, commonly referred to as “locations”. When invoked with no arguments, scselect displays the names and associated identifiers for each defined “location” and indicates which is currently active. scselect also allows the user to select or change the active “location” by specifying its name or identifier. Changing the “location” causes an immediate system re-configuration, unless the -n option is supplied.

[…]

-n Delay changing the system’s “location” until the next system boot (or the next time that the system configuration preferences are changed).

Once I perform the above rigmarole, I can then change my MAC address without issue. But I have to be ludicrously careful. As soon as I open the Network System Preferences pane or otherwise do something to change the system configuration preferences, I have to run through that rigmarole again before changing my MAC address will work as expected.

Permanent Link | Leave a comment {2} | Share

I was mugged. Will you please help me out?

Sep. 15th, 2010 | 04:09 am

This entry was originally published at my site's personal web log. Additional information or comments may be available on the original posting.

Dear readers,

About an hour ago, while walking home from Noisebridge, I was mugged. Two men who seemed to be in their mid-twenties, one dark-skinned gentleman and one lighter-skinned, wearing black hoodies and jeans attacked me at the corner of Fillmore and Waller streets. The dark-skinned man looped his arm around my throat roughly and yanked me to the floor, catching my bag as I fell and pulling it above me.

“Give me everything you’ve got!” he yelled at me.

“Hold on! Hold on!” I said.

I was on the floor in an instant and trying to find the strap of my bag. I couldn’t, he pulled it above my head, and the two men bolted as fast as they could.

As I got up, I pulled out my phone from my pocket and dialed 9-1-1. A few minutes later a police car sped up to me, I waved at it, and the officer inside rolled down his window as he slowed. He asked me a few questions, including asking for a brief description and the direction the perps ran. I told him, he said he’d be right back, and he sped off.

A few minutes later he returned empty handed. I tweeted. I filed a police report.

Inside my beige one-strap bag was a 15” MacBook Pro laptop, (serial number W89410HRB22) one with a specially-ordered matte display. (I hate the glossy ones.) There was also the laptop charger, my Samsung mobile phone charger, and a bunch of other odds-and-ends, including two Rubik’s cubes. All told, it was pretty expensive: upwards of about $2,500. While I’m pretty sure the data on my laptop is (mostly) backed up safely, my pen-and-paper notebook, which I’ve carried with me for more than two years and is full of irreplaceable notes and memories, was also stolen. That’s hard copy, and can’t be backed up digitally. Damn.

I don’t have a budget for replacing this stuff. Some of it can’t be replaced. I’m taking the somewhat uncharacteristic step of asking you to donate whatever amount that you can to me through the donation button below to help me weather the budget crunch I’m going to have to deal with in the next couple of months as I replace my equipment. It’s particularly bad timing; I just bought airfare for the upcoming CSPH conference as well as a conference ticket for the Poly Leadership Summit in Seattle, which I have yet to purchase travel for.

HELP MAYMAY REPLACE STOLEN EQUIPMENT AFTER STREET MUGGING:


If you can’t offer me financial support, then please, please, please simply take the time to tweet about this blog post. Muggings rarely end with stolen goods returned to their owners, but the ones that do all have one thing in common: people are able to identify the goods quickly because word gets around. Here are some 140-character postings you can use to help me out. (Consider it a karmic investment.)

  • Help @maymaym recover from getting mugged on the street in #SF. His laptop and bag was stolen. Help him out: http://ur1.ca/1mqz0 Pls RT—thx!
  • Activist @maymaym’s laptop stolen in SF street mugging. Chip in to help replace it http://ur1.ca/1mqz0 and/or RT to get item description out
  • See 15″ MacBook Pro laptop w/matte screen selling in Bay Area in odd circumstances? Contact @maymaym. Was stolen: http://ur1.ca/1mqz0 Pls RT

Alternatively, of course, write your own tweet or cross-post this entry and include a link back to this blog post.

So, yeah, it’s kind of been a shitty month. Thanks for your help, in whatever form it may take.

This was originally published on my other blog.

Permanent Link | Leave a comment {2} | Share

Settling in San Francisco

Aug. 25th, 2010 | 04:38 am

This entry was originally published at my site's personal web log. Additional information or comments may be available on the original posting.

I wrote this on July 27, 2009, a little over a year ago:

Not long ago I moved to San Francisco, California in order to make a fresh start for myself in a number of different ways. Creating a new home turns out to be a ton of work, especially since I had almost nothing except for a bunch of clothes and my computer with me. I had no housewares, and after spending a week literally putting blisters in my feet trying to find an apartment in which to live, for the first few nights I ate delivery with plastic utensils out of tupperware.

Soon enough, though, and with the help of some inspirational friends (most notably Susan Mernit, Sarah Dopp, James Carp, Emms, and Gabrielle and Tara) things started to come together. I visited Ikea twice for some furniture, but a lot of the other things in my apartment from the futon I sleep on to the plates I eat off of came from friends. I even got a microwave as I started to make mental lists of the things I needed.

Then, without publishing those words, I stopped writing. A year passed. In that time, a lot happened. But San Francisco is no more home today than it was before I arrived. If anything, I feel more out of place than ever. More alone than ever.

I am struggling. No one who thinks they know me, who sees all the stuff I do, no one knows how hard each and every day is for me. No one.

Permanent Link | Leave a comment {1} | Share

Quick and Dirty: Clone Custom Field, Template Linked Files on Movable Type

Jun. 8th, 2010 | 08:19 pm

This entry was originally published at my site's personal web log. Additional information or comments may be available on the original posting.

Movable Type is a pretty frustrating platform to work with because every so often (or, “way too often,” depending on who you ask) a function of the system simply doesn’t do what you’d expect it to do. Such is the case with the “Clone Blog” functionality. Although it dutifully copies most of a website from one “blog” object to another, a few things are missing.

Most notably, custom fields and templates’ linked files are not copied. This is a deal-breaker for any large installation that uses the built-in MT “Clone” feature.

To get around this limitation, I wrote a stupid, quick ‘n’ dirty PHP script to finish the cloning process, called finishclone.php. It takes only 1 argument: the “new ID” you are cloning to. If all goes well, you’ll see output like this:

[root@dev www]$ php finishclone.php 28
Cloning process complete.
[root@dev www]$ 

In this example, 28 is the newly created blog’s ID. The blog you want to clone from is set as a constant within the script. I’ll leave modifying the script to support more flexible command line arguments as an exercise for the reader.

<?php
/**
 * Ease the final steps in cloning a Movable Type blog.
 *
 * Description:   This script should be run after Movable Type's "Clone Blog"
 *                function has completed and before the cloned blog is used.
 *
 * Author:        "Meitar Moscovitz" <meitar@maymay.net>
 */

// Set constants.
define('MT_ORIG_BLOG', 0); // the ID of the blog you are cloning from
define('MYSQL_HOST', 'localhost');
define('MYSQL_USER', 'movabletype');
define('MYSQL_PASS', 'PASSWORD_HERE');
define('MYSQL_DB', 'movabletype');

// Get command line arguments.
if (2 > $_SERVER['argc']) { die('Tell me the ID of the blog to clone into.'); }

$blog_id = (int) $argv[1];

// Connect to db
if ( !mysql_pconnect( MYSQL_HOST, MYSQL_USER, MYSQL_PASS ) ) {
	die( 'Connection to the database has failed: ' . mysql_error( ) );
}
mysql_select_db( MYSQL_DB );

// Clone custom fields.
$result = mysql_query('SELECT * FROM mt_field WHERE field_blog_id='.MT_ORIG_BLOG.';');
while ($row = mysql_fetch_object($result)) {
	mysql_query(
		sprintf("INSERT INTO mt_field ("
			."field_basename,"
			."field_blog_id,"
			."field_default,"
			."field_description,"
			."field_name,"
			."field_obj_type,"
			."field_options,"
			."field_required,"
			."field_tag,"
			."field_type) "
			."VALUES('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s');",
			mysql_real_escape_string($row->field_basename),
			mysql_real_escape_string($blog_id),
			mysql_real_escape_string($row->field_default),
			mysql_real_escape_string($row->field_description),
			mysql_real_escape_string($row->field_name),
			mysql_real_escape_string($row->field_obj_type),
			mysql_real_escape_string($row->field_options),
			mysql_real_escape_string($row->field_required),
			mysql_real_escape_string($row->field_tag),
			mysql_real_escape_string($row->field_type)
		)
	) OR print mysql_error() . "\n";
}

// Link template files to filesystem for git repositories.
$arr = array();
$result = mysql_query('SELECT template_name,template_linked_file FROM mt_template WHERE template_blog_id='.MT_ORIG_BLOG.';');
while ($row = mysql_fetch_object($result)) {
	$arr[$row->template_name] = $row->template_linked_file;
}
foreach ($arr as $k => $v) {
	mysql_query("UPDATE mt_template SET template_linked_file='$v' WHERE template_blog_id=$blog_id AND template_name='$k';");
}

print "Cloning process complete.\n";

Permanent Link | Leave a comment | Share

Quick and Dirty: Clone Custom Field, Template Linked Files on Movable Type

Jun. 8th, 2010 | 08:19 pm

This entry was originally published at my site's personal web log. Additional information or comments may be available on the original posting.

Movable Type is a pretty frustrating platform to work with because every so often (or, “way too often,” depending on who you ask) a function of the system simply doesn’t do what you’d expect it to do. Such is the case with the “Clone Blog” functionality. Although it dutifully copies most of a website from one “blog” object to another, a few things are missing.

Most notably, custom fields and templates’ linked files are not copied. This is a deal-breaker for any large installation that uses the built-in MT “Clone” feature.

To get around this limitation, I wrote a stupid, quick ‘n’ dirty PHP script to finish the cloning process, called finishclone.php. It takes only 1 argument: the “new ID” you are cloning to. If all goes well, you’ll see output like this:

[root@dev www]$ php finishclone.php 28
Cloning process complete.
[root@dev www]$ 

In this example, 28 is the newly created blog’s ID. The blog you want to clone from is set as a constant within the script. I’ll leave modifying the script to support more flexible command line arguments as an exercise for the reader.

<?php
/**
 * Ease the final steps in cloning a Movable Type blog.
 *
 * Description:   This script should be run after Movable Type's "Clone Blog"
 *                function has completed and before the cloned blog is used.
 *
 * Author:        "Meitar Moscovitz" <mmoscovitz@newamericamedia.org>
 */

// Set constants.
define('MT_ORIG_BLOG', 0); // the ID of the blog you are cloning from
define('MYSQL_HOST', 'localhost');
define('MYSQL_USER', 'movabletype');
define('MYSQL_PASS', 'PASSWORD_HERE');
define('MYSQL_DB', 'movabletype');

// Get command line arguments.
if (2 > $_SERVER['argc']) { die('Tell me the ID of the blog to clone into.'); }

$blog_id = (int) $argv[1];

// Connect to db
if ( !mysql_pconnect( MYSQL_HOST, MYSQL_USER, MYSQL_PASS ) ) {
	die( 'Connection to the database has failed: ' . mysql_error( ) );
}
mysql_select_db( MYSQL_DB );

// Clone custom fields.
$result = mysql_query('SELECT * FROM mt_field WHERE field_blog_id='.MT_ORIG_BLOG.';');
while ($row = mysql_fetch_object($result)) {
	mysql_query(
		sprintf("INSERT INTO mt_field ("
			."field_basename,"
			."field_blog_id,"
			."field_default,"
			."field_description,"
			."field_name,"
			."field_obj_type,"
			."field_options,"
			."field_required,"
			."field_tag,"
			."field_type) "
			."VALUES('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s');",
			mysql_real_escape_string($row->field_basename),
			mysql_real_escape_string($blog_id),
			mysql_real_escape_string($row->field_default),
			mysql_real_escape_string($row->field_description),
			mysql_real_escape_string($row->field_name),
			mysql_real_escape_string($row->field_obj_type),
			mysql_real_escape_string($row->field_options),
			mysql_real_escape_string($row->field_required),
			mysql_real_escape_string($row->field_tag),
			mysql_real_escape_string($row->field_type)
		)
	) OR print mysql_error() . "\n";
}

// Link template files to filesystem for git repositories.
$arr = array();
$result = mysql_query('SELECT template_name,template_linked_file FROM mt_template WHERE template_blog_id='.MT_ORIG_BLOG.';');
while ($row = mysql_fetch_object($result)) {
	$arr[$row->template_name] = $row->template_linked_file;
}
foreach ($arr as $k => $v) {
	mysql_query("UPDATE mt_template SET template_linked_file='$v' WHERE template_blog_id=$blog_id AND template_name='$k';");
}

print "Cloning process complete.\n";

Permanent Link | Leave a comment | Share

Cross-post: Edenfantasys’s unethical technology is a self-referential black hole

May. 19th, 2010 | 06:20 pm

This entry was originally published at my site's personal web log. Additional information or comments may be available on the original posting.

This entry was originally published at my other blog. I’m cross-posting it here in order to make sure it gets copied to more servers, as some people have suggested I’ll face a cease and desist order for publishing it in the first place. Please help distribute this important information by freely copying and republishing this post under the conditions of my CC-BY-NC-ND license: provide me with attribution and a (real) back link, and you are free to republish an unaltered version of this post wherever you like. Thanks.

A few nights ago, I received an email from Editor of EdenFantasys’s SexIs Magazine, Judy Cole, asking me to modify this Kink On Tap brief I published that cites Lorna D. Keach’s writing. Judy asked me to “provide attribution and a link back to” SexIs Magazine. An ordinary enough request soon proved extraordinarily unethical when I discovered that EdenFantasys has invested a staggering amount of time and money to develop and implement a technology platform that actively denies others the courtesy of link reciprocity, a courtesy on which the ethical Internet is based.

While what they’re doing may not be illegal, EdenFantasys has proven itself to me to be an unethical and unworthy partner, in business or otherwise. Its actions are blatantly hypocritical, as I intend to show in detail in this post. Taking willful and self-serving advantage of those not technically savvy is a form of inexcusable oppression, and none of us should tolerate it from companies who purport to be well-intentioned resources for a community of sex-positive individuals.

For busy or non-technical readers, see the next section, Executive Summary, to quickly understand what EdenFantasys is doing, why it’s unethical, and how it affects you whether you’re a customer, a contributor, or a syndication partner. For the technical reader, the Technical Details section should provide ample evidence in the form of a walkthrough and sample code describing the unethical Search Engine Optimization (SEO) and Search Engine Marketing (SEM) techniques EdenFantasys, aka. Web Merchants, Inc., is engaged in. For anyone who wants to read further, I provide an Editorial section in which I share some thoughts about what you can do to help combat these practices and bring transparency and trust—not the sabotage of trust EdenFantasys enacts—to the market.

EXECUTIVE SUMMARY

Internet sex toy retailer Web Merchants, Inc., which bills itself as the “sex shop you can trust” and does business under the name EdenFantasys, has implemented technology on their websites that actively interferes with contributors’ content, intercepts outgoing links, and alters republished content so that links in the original work are redirected to themselves. Using techniques widely acknowledged as unethical by Internet professionals and that are arguably in violation of major search engines’ policies, EdenFantasys’s publishing platform has effectively outsourced the task of “link farming” (a questionable Search Engine Marketing [SEM] technique) to sites with which they have “an ongoing relationship,” such as AlterNet.org, other large news hubs, and individual bloggers’ blogs.

Articles published on EdenFantasys websites, such as the “community” website SexIs Magazine, contain HTML crafted to look like links, but aren’t. When visited by a typical human user, a program written in JavaScript and included as part of the web pages is automatically downloaded and intercepts clicks on these “link-like” elements, fetching their intended destination from the server and redirecting users there. Due to the careful and deliberate implementation, the browser’s status bar is made to appear as though the link is legitimate, and that a destination is provided as expected.

For non-human visitors, including automated search engine indexing programs such as Googlebot, the “link” remains non-functional, making the article a search engine’s dead-end or “orphan” page whose only functional links are those whose destination is EdenFantasys’s own web presence. This makes EdenFantasys’ website(s) a self-referential black hole that provides no reciprocity for contributors who author content, nor for any website ostensibly “linked” to from article content. At the same time, EdenFantasys editors actively solicit inbound links from individuals and organizations through “link exchanges” and incentive programs such as “awards” and “free” sex toys, as well as syndicating SexIs Magazine content such that the content is programmatically altered in order to create multiple (real) inbound links to EdenFantasys’s websites after republication on their partner’s media channels.

How EdenFantasys’s unethical practices have an impact on you

Regardless of who you are, EdenFantasys’s unethical practices have a negative impact on you and, indeed, on the Internet as a whole.

See for yourself: First, log out of any and all EdenFantasys websites or, preferably, use a different browser, or even a proxy service such as the Tor network for greater anonymity. Due to EdenFantasys’s technology, you cannot trust that what you are seeing on your screen is what someone else will see on theirs. Next, temporarily disable JavaScript (read instructions for your browser) and then try clicking on the links in SexIs Magazine articles. If clicking the intended off-site “links” doesn’t work, you know that your article’s links are being hidden from Google and that your content is being used for shady practices. In contrast, with JavaScript still disabled, navigate to another website (such as this blog), try clicking on the links, and note that the links still work as intended.</p>

Here’s another verifiable example from the EdenFantasys site showing that many other parts of Web Merchants, Inc. pages, not merely SexIs Magazine, are affected as well: With JavaScript disabled, visit the EdenFantasys company page on Aslan Leather (note, for the sake of comparison, the link in this sentence will work, even with JavaScript off). Try clicking on the link in the “Contact Information” section in the lower-right hand column of the page (shown in the screenshot, below). This “link” should take you to the Aslan Leather homepage but in fact it does not. So much for that “link exchange.”

(Click to enlarge.)

  • If you’re an EdenFantasys employee, people will demand answers from you regarding the unethical practices of your (hopefully former) employer. While you are working for EdenFantasys, you’re seriously soiling your reputation in the eyes of ethical Internet professionals. Ignorance is no excuse for the lack of ethics on the programmers’ part, and it’s a shoddy one for everyone else; you should be aware of your company’s business practices because you represent them and they, in turn, represent you.
  • If you’re a partner or contributor (reviewer, affiliate, blogger), while you’re providing EdenFantasys with inbound links or writing articles for them and thereby propping them up higher in search results, EdenFantasys is not returning the favor to you (when they are supposed to be doing so). Moreover, they’re attaching your handle, pseudonym, or real name directly to all of their link farming (i.e., spamming) efforts. They look like they’re linking to you and they look like their content is syndicated fairly, but they’re actually playing dirty. They’re going the extra mile to ensure search engines like Google do not recognize the links in articles you write. They’re trying remarkably hard to make certain that all roads lead to EdenFantasys, but none lead outside of it; no matter what the “link,” search engines see it as stemming from and leading to EdenFantasys. The technically savvy executives of Web Merchants, Inc. are using you without giving you a fair return on your efforts. Moreover, EdenFantasys is doing this in a way that preys upon people’s lack of technical knowledge—potentially your own as well as your readership’s. Do you want to keep doing business with people like that?
  • If you’re a customer, you’re monetarily supporting a company that essentially amounts to a glorified yet subtle spammer. If you hate spam, you should hate the unethical practices that lead to spam’s perpetual reappearance, including the practices of companies like Web Merchants, Inc. EdenFantasys’s unethical practices may not be illegal, but they are unabashedly a hair’s width away from it, just like many spammers’. If you want to keep companies honest and transparent, if you really want a “sex shop you can trust,” this is relevant to you because EdenFantasys is not it. If you want to purchase from a retailer that truly strives to offer a welcoming, trustworthy community for those interested in sex positivity and sexuality, pay close attention and take action. For ideas about what you can do, please see the “What you can do” section, below.
  • If you’ve never heard about EdenFantasys before, but you care about a fair and equal-opportunity Internet, this is relevant to you because what EdenFantasys is doing takes advantage of non-tech-savvy people in order to slant the odds of winning the search engine game in their favor. They could have done this fairly, and I personally believe that they would have succeeded. Their sites are user-friendly, well-designed, and solidly implemented. However, they chose to behave maliciously by not providing credit where credit is due, failing to follow through on agreements with their own community members and contributors, and sneakily utilizing other publishers’ web presences to play a very sad zero-sum game that they need not have entered in the first place. In the Internet I want, nobody takes malicious advantage of those less skilled than they are because their own skill should speak for itself. Isn’t that the Internet and, indeed, the future you want, too?

TECHNICAL DETAILS

What follows is a technical exploration of the way the EdenFantasys technology works. It is my best-effort evaluation of the process in as much detail as I can manage within strict self-imposed time constraints. If any of this information is incorrect, I’d welcome any and all clarifications provided by the EdenFantasys CTO and technical team in an appropriately transparent, public, and ethical manner. (You’re welcome—nay, encouraged—to leave a comment.)

Although I’m unconvinced that EdenFantasys understands this, it is the case that honesty is the best policy—especially on the Internet, where everyone has the power of “View source.”

The “EF Framework” for obfuscating links

Article content written by contributors on SexIs Magazine pages is published after all links are replaced with a <span> element bearing the class of linklike and a unique id attribute value. This apparently happens across any and all content published by Web Merchants, Inc.’s content management system, but I’ll be focusing on Lorna D. Keach’s post entitled SexFeed:Anti-Porn Activists Now Targeting Female Porn Addicts for the sake of example.

These fake links look like this in HTML:

And according to Theresa Flynt, vice president of marketing for Hustler video, <span class="linklike" ID="EFLink_68034_fe64d2">female consumers make up 56% of video sales.</span>

This originally published HTML is what visitors without JavaScript enabled (and what search engine indexers) see when they access the page. Note that the <span> is not a real link, even though it is made to look like one. (See Figure 1; click it to enlarge.)

Figure 1:

In a typical user’s browser, when this page is loaded, a JavaScript program is executed that mutates these “linklike” elements into <a> elements, retaining the “linklike” class and the unique id attribute values. However, no value is provided in the href (link destination) attribute of the <a> element. See Figure 2.

Figure 2:

The JavaScript program is downloaded in two parts from the endpoint at http://cdn3.edenfantasys.com/Scripts/Handler/jsget.ashx. The first part, retrieved in this example by accessing the URI at http://cdn3.edenfantasys.com/Scripts/Handler/jsget.ashx?i=jq132_cnf_jdm12_cks_cm_ujsn_udm_stt_err_jsdm_stul_ael_lls_ganl_jqac_jtv_smg_assf_agrsh&v_14927484.12.0, loads the popular jQuery JavaScript framework as well as custom code called the “EF Framework”.

The EF Framework contains code called the DBLinkHandler, an object that parses the <span> “linklike” elements (called “pseudolinks” in the EF Framework code) and retrieves the real destination. The entirety of the DBLinkHandler object is shown in code listing 1, below. Note the code contains a function called handle that performs the mutation of the <span> “linklike” elements (seen primarily on lines 8 through 16) and, based on the prefix of each elements’ id attribute value, two key functions (BuildUrlForElement and GetUrlByUrlID, whose signatures are on lines 48 and 68, respectively) interact to set up the browser navigation after responding to clicks on the fake links.

var DBLinkHandler = {
    pseudoLinkPrefix: "EFLink_",
    generatedAHrefPrefix: "ArtLink_",
    targetBlankClass: "target_blank",
    jsLinksCssLinkLikeClass: "linklike",
    handle: function () {
        var pseudolinksSpans = $("span[id^='" + DBLinkHandler.pseudoLinkPrefix + "']");
        pseudolinksSpans.each(function () {
            var psLink = $(this);
            var cssClass = $.trim(psLink.attr("class"));
            var target = "";
            var id = psLink.attr("id").replace(DBLinkHandler.pseudoLinkPrefix, DBLinkHandler.generatedAHrefPrefix);
            var href = $("<a></a>").attr({
                id: id,
                href: ""
            }).html(psLink.html());
            if (psLink.hasClass(DBLinkHandler.targetBlankClass)) {
                href.attr({
                    target: "_blank"
                });
                cssClass = $.trim(cssClass.replace(DBLinkHandler.targetBlankClass, ""))
            }
            if (cssClass != "") {
                href.attr({
                    "class": cssClass
                })
            }
            psLink.before(href).remove()
        });
        var pseudolinksAHrefs = $("a[id^='" + DBLinkHandler.generatedAHrefPrefix + "']");
        pseudolinksAHrefs.live("mouseup", function (event) {
            DBLinkHandler.ArtLinkClick(this)
        });
        pseudolinksSpans = $("span[id^='" + DBLinkHandler.pseudoLinkPrefix + "']");
        pseudolinksSpans.live("click", function (event) {
            if (event.button != 0) {
                return
            }
            var psLink = $(this);
            var url = DBLinkHandler.BuildUrlForElement(psLink, DBLinkHandler.pseudoLinkPrefix);
            if (!psLink.hasClass(DBLinkHandler.targetBlankClass)) {
                RedirectTo(url)
            } else {
                OpenNewWindow(url)
            }
        })
    },
    BuildUrlForElement: function (psLink, prefix) {
        var psLink = $(psLink);
        var sufix = psLink.attr("id").toString().substring(prefix.length);
        var id = (sufix.indexOf("_") != -1) ? sufix.substring(0, sufix.indexOf("_")) : sufix;
        var url = DBLinkHandler.GetUrlByUrlID(id);
        if (url == "") {
            url = EF.Constants.Links.Url
        }
        var end = sufix.substring(sufix.indexOf("_") + 1);
        var anchor = "";
        if (end.indexOf("_") != -1) {
            anchor = "#" + end.substring(0, end.lastIndexOf("_"))
        }
        url += anchor;
        return url
    },
    ArtLinkClick: function (psLink) {
        var url = DBLinkHandler.BuildUrlForElement(psLink, DBLinkHandler.generatedAHrefPrefix);
        $(psLink).attr("href", url)
    },
    GetUrlByUrlID: function (UrlID) {
        var url = "";
        UrlRequest = $.ajax({
            type: "POST",
            url: "/LinkLanguage/AjaxLinkHandling.aspx",
            dataType: "json",
            async: false,
            data: {
                urlid: UrlID
            },
            cache: false,
            success: function (data) {
                if (data.status == "Success") {
                    url = data.url;
                    return url
                }
            },
            error: function (xhtmlObj, status, error) {}
        });
        return url
    }
};

Once the mutation is performed and all the content “links” are in the state shown in Figure 2, above, an event listener has been bound to the anchors that captures a click event. This is done using prototypal extension, aka. classic prototypal inheritance, in another part of the code, the live function on line 2,280 of the (de-minimized) jsget.ashx program, as shown in code listing 2, here:

        live: function (G, F) {
            var E = o.event.proxy(F);
            E.guid += this.selector + G;
            o(document).bind(i(G, this.selector), this.selector, E);
            return this
        },

At this point, clicking on one of the “pseudolinks” triggers the EF Framework to call code set up by the GetUrlByUrlID function from within the DBLinkHandler object, initiating an XMLHttpRequest (XHR) connection to the AjaxLinkHandling.aspx server-side application. The request is an HTTP POST containing only one parameter, called urlid, and its value matches a substring from within the id value of the “pseudolinks.” In this example, the id attribute contains a value of EFLink_68034_fe64d2, which means that the unique ID POST’ed to the server is 68034. This is shown in Figure 3, below.

Figure 3:

The response from the server, shown in Figure 4, is also simple. If successful, the intended destination is retrieved by the GetUrlByUrlID object’s success function (on line 79 of Code Listing 1, above) and the user is redirected to that web address, as if the link was a real one all along. The real destination, in this case to CNN.com, is thereby only revealed after the XHR request returns a successful reply.

Figure 4:

All of this obfuscation effectively blinds machines such as the Googlebot who are not JavaScript-capable from seeing and following these links. It deliberately provides no increased Pagerank for the link destination (as a real link would normally do) despite being “linked to” from EdenFantasys’s SexIs Magazine article. While the intended destination in this example link was at CNN.com, it could just as easily have been—and is, in other examples—links to the blogs of EdenFantasys community members and, indeed, everyone else linked to from a SexIs Magazine article or potentially any website operated by Web Merchants, Inc. that makes use of this technology.

The EdenFantasys Outsourced Link-Farm

In addition to creating a self-referential black hole with no gracefully degrading outgoing links, EdenFantasys also actively performs link-stuffing through its syndicated content “relationships,” underhandedly creating an outsourced and distributed link-farm, just like a spammer. The difference is that this spammer (Web Merchants, Inc. aka EdenFantasys) is cleverly crowd-sourcing high-value, high-quality content from its own “community.”

Articles published at SexIs Magazine are syndicated in full to other large hub sites, such as AlterNet.org. Continuing with the above example post by Lorna D. Keach, Anti-Porn Activists Now Targeting Female Porn Addicts, we can see that this content was republished on AlterNet.org shortly after original publication through EdenFantasys’ website on May 3rd at http://www.alternet.org/story/146774/christian_anti-porn_activists_now_targeting_female_. However, a closer look at the HTML code of the republication shows that each and every link contained within the article points to the same destination: the same article published on SexIs Magazine, as shown in Figure 5.

Figure 5:

Naturally, these syndicated links provided to third-party sites by EdenFantasys are real and function as expected to both human visitors and to search engines indexing the content. The result is “natural,” high-value links to the EdenFantasys website from these third-party sites; EdenFantasys doesn’t merely scrounge pagerank from harvesting the sheer number of incoming links, but as each link’s anchor text is different, they are setting themselves up to match more keywords in search engine results, keywords that the original author likely did not intend to direct to them. Offering search engines the implication that EdenFantasys.com contains the content described in the anchor text, when in fact EdenFantasys merely acts as an intermediary to the information, is very shady, to say the least.

In addition to syndication, EdenFantasys employs human editors to do community outreach. These editors follow up with publishers, including individual bloggers (such as myself), and request that any references to published material provide attribution and a link back to us, to use the words of Judy Cole, Editor of SexIs Magazine in an email she sent to me (see below), and presumably many others. EdenFantasys has also been known to request “link exchanges,” and offer incentive programs that encouraged bloggers to add the EdenFantasys website to their blogroll or sidebar in order to help raise both parties search engine ranking, when in fact EdenFantasys is not actually providing reciprocity.

More information about EdenFantasys’s unethical practices, which are not limited to technical subterfuge, can be obtained via AAGBlog.com.

EDITORIAL

It is unsurprising that the distributed, subtle, and carefully crafted way EdenFantasys has managed to crowd-source links has (presumably) remained unpenalized by search engines like Google. It is similarly unsurprising that nontechnical users such as the contributors to SexIs Magazine would be unaware of these deceptive practices, or that they are complicit in promoting them.

This is no mistake on the part of EdenFantasys, nor is it a one-off occurrence. The amount of work necessary to implement the elaborate system I’ve described is also not even remotely feasible for a rogue programmer to accomplish, far less accomplish covertly. No, this is the result of a calculated and decidedly underhanded strategy that originated from the direction of top executives at Web Merchants, Inc. aka EdenFantasys.

It is unfortunate that technically privileged people would be so willing to take advantage of the technically uneducated, particularly under the guise of providing a trusted place for the community which they claim to serve. These practices are exactly the ones that “the sex shop you can trust” should in no way support, far less be actively engaged in. And yet, here is unmistakable evidence that EdenFantasys is doing literally everything it can not only to bolster its own web presence at the cost of others’, but to hide this fact from its understandably non-tech-savvy contributors.

On a personal note, I am angered that I would be contacted by the Editor of SexIs Magazine, and asked to properly “attribute” and provide a link to them when it is precisely that reciprocity which SexIs Magazine would clearly deny me (and everyone else) in return. It was this request originally received over email from Judy Cole, that sparked my investigation outlined above and enabled me to uncover this hypocrisy. The email I received from Judy Cole is republished, in full, here:

From: Judy Cole <luxuryholmes@gmail.com>
Subject: Repost mis-attributed
Date: May 17, 2010 2:42:00 PM PDT
To: kinkontap+viewermail@gmail.com
Cc: Laurel <laurelb@edenfantasys.com>

Hello Emma and maymay,

I am the Editor of the online adult magazine SexIs (http://www.edenfantasys.com/sexis/). You recently picked up and re-posted a story of ours by Lorna Keach that Alternet had already picked up:

http://kinkontap.com/?s=alternet

We were hoping that you might provide attribution and a link back to us, citing us as the original source (as is done on Alternet, with whom we have an ongoing relationship), should you pick up something of ours to re-post in the future.

If you would be interested in having us send you updates on stories that might be of interest, I would be happy to arrange for a member of our editorial staff to do so. (Like your site, by the way. TBK is one of our regular contributors.)

Thanks and Best Regards,

Judy Cole
Editor, SexIs

Judy’s email probably intended to reference the new Kink On Tap briefs that my co-host Emma and I publish, not a search result page on the Kink On Tap website. Specifically, she was talking about this brief: http://KinkOnTap.com/?p=676. I said as much in my reply to Judy:

Hi Judy,

The URL in your email doesn’t actually link to a post. We pick up many stories from AlterNet, as well as a number from SexIs, because we follow both those sources, among others. So, did you mean this following entry?

http://KinkOnTap.com/?p=676

If so, you should know that we write briefs as we find them and provide links to where we found them. We purposefully do not republish or re-post significant portions of stories and we limit our briefs to short summaries in deference to the source. In regards to the brief in question, we do provide attribution to Lorna Keach, and our publication process provides links automatically to, again, the source where we found the article. :) As I’m sure you understand, this is the nature of the Internet. Its distribution capability is remarkable, isn’t it?

Also, while we’d absolutely be thrilled to have you send us updates on stories that might be of interest, we would prefer that you do so in the same way the rest of our community does: by contributing to the community links feed. You can find detailed instructions for the many ways you can do that on our wiki:

http://wiki.kinkontap.com/wiki/Community_links_feed

Congratulations on the continued success of SexIs.

Cheers,
-maymay

At the time when I wrote the email replying to Judy, I was perturbed but could not put my finger on why. Her email upset me because she seemed to be suggesting that our briefs are wholesale “re-posts,” when in fact Emma and I have thoroughly discussed attribution policies and, as mentioned in my reply, settled on a number of practices including a length limit, automated back linking (yes, with real links, go see some Kink On Tap briefs for yourself), and clearly demarcating quotes from the source article in our editorializing to ensure we play fair. Clearly, my somewhat snarky reply betrays my annoyance.

In any event, this exchange prompted me to take a closer look at the Kink On Tap brief I wrote, at the original article, and at the cross-post on AlterNet.org. I never would have imagined that EdenFantasys’s technical subterfuge would be as pervasive as it has proven to be. It’s so deeply embedded in the EdenFantasys publishing platform that I’m willing to give Judy the benefit of the doubt regarding this hypocrisy because she doesn’t seem to understand the difference between a search query and a permalink (something any laymen blogger would grok). This is apparent from her reply to my response:

From: Judy Cole <luxuryholmes@gmail.com>
Subject: Re: Repost mis-attributed
Date: May 18, 2010 4:57:59 AM PDT
[…redundant email headers clipped…]

Funny, the URL in my email opens the same link as the one you sent me when I click on it.

Maybe if you pick up one of our stories in future, you could just say something like “so and so wrote for SexIs.” ?

As it stands, it looks as if Lorna wrote the piece for Alternet. Thanks.

Judy

That is the end of our email exchange, and will be for good, unless and until EdenFantasys changes its ways. I will from this point forward endeavor never to publish links to any web property that I know to be owned by Web Merchants, Inc., including EdenFantasys.com. I will also do my best to avoid citing any and all SexIs Magazine articles from here on out, and I encourage everyone who has an interest in seeing honesty on the Internet to follow my lead here.

As some of my friends are currently contributors to SexIs Magazine, I would like all of you to know that I sincerely hope you immediately sever all ties with any and all Web Merchants, Inc. properties, suppliers, and business partners, especially because you are friends and I think your work is too important to be sullied by such a disreputable company. Similarly, I hope you encourage your friends to do the same. I understand that the economy is rough and that some of you may have business contracts bearing legal penalties for breaking them, but I urge you to nevertheless consider looking at this as a cost-benefit analysis: the sooner you break up with EdenFantasys, the happier everyone on the Internet, including you, will be (and besides, you can loose just as much of your reputation, money, and pagerank while being happy as you can being sad).

What you can do

  • If you are an EdenFantasys reviewer, a SexIs Magazine contributor, or have any other arrangement with Web Merchants, Inc., write to Judy Cole and demand that content you produce for SexIs Magazine adheres to ethical Internet publication standards. Sever business ties with this company immediately upon receipt of any non-response, or any response that does not adequately address every concern raised in this blog post. (Feel free to leave comments on this post with technical questions, and I’ll do my best to help you sort out any l33t answers.)
  • EdenFantasys wants to stack the deck in Google. They do this by misusing your content and harvesting your links. To combat this effort, immediately remove any and all links to EdenFantasys websites and web presences from your websites. Furthermore, do not—I repeat—do not publish new links to EdenFantasys websites, not even in direct reference to this post. Instead, provide enough information, as I have done, so visitors to your blog posts can find their website themselves. In lieu of links to EdenFantasys, link to other bloggers’ posts about this issue. (Such posts will probably be mentioned in the comments section of this post.)
  • Boycott EdenFantasys: the technical prowess their website displays does provide a useful shopping experience for some people. However, that in no way obligates you to purchase from their website. If you enjoy using their interface, use it to get information about products you’re interested in, but then go buy those products elsewhere, perhaps from the manufacturers directly.
  • Watch for “improved” technical subterfuge from Web Merchants, Inc. As a professional web developer, I can identify several things EdenFantasys could do to make their unethical practices even harder to spot, and harder to stop. If you have any technical knowledge at all, even if you’re “just” a savvy blogger, you can keep a close watch on EdenFantasys and, if you notice anything that doesn’t sit well with you, speak up about it like I did. Get a professional programmer to look into things for you if you need help; yes, you can make a difference just by remaining vigilant as long as you share what you know and act honestly, and transparently.

If you have additional ideas or recommendations regarding how more people can help keep sex toy retailers honest, please suggest them in the comments.

Update: To report website spamming or any kind of fraud to Google, use the authenticated Spam Report tool.

Update: Google provides much more information about why the kinds of practices EdenFantasys is engaged in degrade the overall web experience for you and me. Read Cloaking, sneaky Javascript redirects, and doorway pages at the Google Webmaster Tools help site for additional SEO information. Using Google’s terminology, EdenFantasys’s unethical technology is a very skilled mix of social engineering and “sneaky JavaScript redirects.”

Permanent Link | Leave a comment {2} | Share