<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Everything In Between &#187; Tech/Computing</title>
	<atom:link href="http://maymay.net/blog/category/techcomputing/feed/" rel="self" type="application/rss+xml" />
	<link>http://maymay.net/blog</link>
	<description>The brutally honest, first-person account of Meitar Moscovitz&#039;s life.</description>
	<lastBuildDate>Thu, 19 Jan 2012 08:54:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Stop wasting energy fighting Internet ID: If you don&#8217;t trust the government, fight bills like SOPA &amp; PIPA instead!</title>
		<link>http://maymay.net/blog/2012/01/19/stop-wasting-energy-fighting-internet-id-if-you-dont-trust-the-government-fight-bills-like-sopa-pipa-instead/</link>
		<comments>http://maymay.net/blog/2012/01/19/stop-wasting-energy-fighting-internet-id-if-you-dont-trust-the-government-fight-bills-like-sopa-pipa-instead/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 08:44:47 +0000</pubDate>
		<dc:creator>Meitar</dc:creator>
				<category><![CDATA[Crosspost]]></category>
		<category><![CDATA[Maybe Maimed]]></category>
		<category><![CDATA[Security & Privacy]]></category>
		<category><![CDATA[Tech News]]></category>
		<category><![CDATA[Tech/Computing]]></category>
		<category><![CDATA[NSTIC]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/?p=1435</guid>
		<description><![CDATA[This evening over dinner after Poly-NYC&#8216;s &#8220;Politics and Passion&#8221; meeting, I found myself in an unexpected debate over Internet ID, part of the US government&#8217;s plan to centralize Internet identity mechanisms. Although this is actually old news&#8212;over a year old at this point!&#8212;fears about it seem to be cropping up again this week on places [...]]]></description>
			<content:encoded><![CDATA[<p>This evening over dinner after <a href="http://poly-nyc.com/">Poly-<acronym title="New York City">NYC</acronym></a>&#8216;s &#8220;Politics and Passion&#8221; meeting, I found myself in an unexpected debate over Internet ID, part of the US government&#8217;s plan to centralize Internet identity mechanisms. Although this is actually old news&mdash;over a year old at this point!&mdash;fears about it seem to be <a href="http://www.reddit.com/r/politics/comments/oeesj/obama_eyeing_internet_id_for_americans/">cropping up again this week on places like Reddit</a>, and my Google searches return <a href="http://nation.foxnews.com/president-obama/2012/01/12/obama-plans-create-internet-id-all-americans">this 6-day old FauxNews article</a> that links to <a href="http://www.cbsnews.com/8301-501465_162-20027837-501465.html">a 12-month old CNET article cross-posted at CBSNews</a>. (And, as an aside: WTF, Fox‽ You really are a piece of shit &#8220;news&#8221; network, aren&#8217;t you?)</p>
<p>Maybe what gave some people a new injection of Internet ID-induced fear was the fact that <a href="https://twitter.com/maymaym/status/159777146884206592">the truly horrid SOPA and PIPA Internet censorship laws</a> were in the news this week thanks to <a href="http://sopastrike.com/">the #SOPAStrike Internet blackout</a> (which <a href="https://twitter.com/maymaym/status/159462958571851777">I enjoyed participating in</a>). Or maybe it was because <a href="http://gov20.govfresh.com/2011-trends-national-strategy-for-trusted-identities-in-cyberspace-highlights-key-online-privacy-security-challenges/">the latest versions of the Internet ID specifications are nearing their release date</a>, so everyone&#8217;s a little on edge.</p>
<p>Whatever it was, though, I think that fear is misplaced. Most of this fear seems to stem from a real misunderstanding of the way Internet identities (not just Internet ID itself) work. Like so many things involving computer network security, something like Internet ID can sound scary when you&#8217;re not up on the nitty gritty details—that&#8217;s nothing to be ashamed of. Knowledge is power, and lack of knowledge breeds fear.</p>
<p>But Internet ID, or more formally known as National Strategy for Trusted Identities in Cyberspace (NSTIC) is actually not something to be fearful of. In fact, it could be a really good step forward, one that many Internet security, privacy, and free speech experts seem pretty excited about. And, what&#8217;s more, they have been for quite some time.</p>
<p>For example, <a href="http://identitywoman.net/">Kaliya Hamlin</a> is founder of the <a href="http://www.internetidentityworkshop.com/">Internet Identity Workshop</a> and <a href="http://www.nist.gov/nstic/governance-comments/Kaliya-NSTIC-NOI.pdf">an Internet identity expert who&#8217;s formally weighed in on NSTIC</a>. She&#8217;s also a personal friend and someone I greatly trust to handle these matters with a lot of care, specifically to people who express an alternative sexuality. <a href="http://lists.idcommons.net/lists/arc/community/2011-08/msg00056.html">She&#8217;s done so time and again</a>.</p>
<p>But don&#8217;t take my word for it! Listen to her thoughtful inclusion of how Facebook&#8217;s privacy-degrading actions late in 2009 would affect closeted users on <a href="http://kinkontap.com/?p=275">Kink On Tap Episode 21: Welcome to the Privacy Wars</a>. Her fantastic year-old piece, <cite><a href="http://www.fastcompany.com/1715659/national-identity-cyberspace-why-we-shouldnt-freak-out-about-nstic">National! Identity! Cyberspace! Why We Shouldn&#8217;t Freak Out About NSTIC</a></cite> is still highly relevant today:</p>
<blockquote cite="http://www.fastcompany.com/1715659/national-identity-cyberspace-why-we-shouldnt-freak-out-about-nstic"><p>Our main conference <a href="http://www.Internetidentityworkshop.com">Internet Identity Workshop</a> held every 6 months since the fall of 2005 has for a logo the identity dog: an allusion to the famous New Yorker cartoon <a href="http://en.wikipedia.org/wiki/On_the_Internet,_nobody_knows_you're_a_dog">On the Internet, nobody knows you are a dog</a>. To me, this symbolizes the two big threads of our work: 1) maintaining the freedom to be who you want to be on the Internet AND 2) having the freedom and ability to share verified information about yourself when you do want to. I believe the intentions of NSTIC align with both of these[…].</p></blockquote>
<p>As another high-profile example, computer and Internet security expert <a href="http://grc.com/">Steve Gibson</a> also recorded <a href="http://twit.tv/sn307">a netcast that dealt directly with NSTIC</a> and explained it in remarkably clear detail. He dissected the way it functions, why it&#8217;s useful, where it can be improved, and what the big fears about it were.</p>
<p>Gibson rightfully concluded the fear is largely due to ignorance of the technology and a general mistrust of the government, but that the technical specification as it exists today is so good as to <em>actually prevent</em> the majority of the fears being espoused by people like those I spoke with who have not actually taken the time to grok the specifics. Here&#8217;s an excerpt from <a href="http://www.grc.com/sn/sn-307.txt">the transcription of the netcast</a>:</p>
<blockquote cite="http://www.grc.com/sn/sn-307.txt"><p>LEO:  I know some people, the idea of government doing this makes them nervous.  To me it actually seems sensible because you need a centralized third party to certify it.</p>
<p>STEVE:  Yes.</p>
<p>LEO:  And I know people, a lot of people who listen to this show, don&#8217;t trust our government.  And we probably shouldn&#8217;t trust government.  But who better?  I mean, you want Microsoft to do this?  They have been, by the way, with little success.  So I think it needs to be that.  And then I think this is a nice &#8211; you liken it to certificates, and I think that&#8217;s a good &#8211; the web certificate system, I think that&#8217;s a good analogy.  I think it makes sense to have third parties that are certified and that kind of thing.  I&#8217;m excited.  We needed this.  I&#8217;ve been signing my email for years, to no avail.  It&#8217;s all been the Web of Trust technique.</p>
<p>STEVE:  Yes.  And this document establishes the right principles.  I mean, and I&#8217;ve read the whole thing.  Everything about it, as I&#8217;m reading &#8211; and I&#8217;m skeptical of Big Brother, too.  I don&#8217;t know how we&#8217;re going to do it. I mean, as a coder and technologist I think about all of the hurdles and the pitfalls and the challenges we face.  But it&#8217;s clear that we need that.  We need this in order to move forward and to really leverage cyberspace to the full extent possible, I mean, we have the technology. </p>
<p>LEO:  Yes, yes.  Identity is critical.  We&#8217;ve learned that lesson.  And anonymity, while you &#8211; I think this is nicely done because you can have anonymity.</p>
<p>STEVE:  Yes.</p>
<p>LEO:  But there&#8217;s also a way to certify you are who you say you are.  And I think you need both.  So I think this is good.  This sounds &#8211; I&#8217;m excited.</p>
<p>STEVE:  Yeah, me, too.</p></blockquote>
<p>The nice thing about technology such as that being built by NSTIC is that, unlike the need to rely on <a href="http://kinkontap.com/?p=996">flimsy promises of the government&#8217;s benevolence</a>, we can actually audit the specifications and open-source implementations of these technologies ourselves. And many people do. Steve Gibson did, and I trust him.</p>
<p>None of this is to say there are not valid concerns&mdash;<a href="http://searchenginewatch.com/article/2123513/Google-NSTIC-Leading-the-March-to-Digital-Totalitarianism">there are</a>. For one, Trusted Identity Providers are still going to be privy to most everything you do with one of your Internet ID identities, but I don&#8217;t see how that&#8217;s any worse than what we have today: your <acronym title="Internet Service Provider">ISP</acronym>, your <acronym title="Domain Name System or Domain Name Server">DNS</acronym> provider, and countless third-party advertising companies can and are tracking everywhere you go on the Web today. NSTIC, on the other hand, could give users like you and me both the technical and legal ability to have more fine-grained control over what such third parties see about us as we use the Web.</p>
<p>Technology that puts users back in charge of their identity? Now that&#8217;s an Internet law I can be proud of.</p>
<p>So, as I said in the discussion over dinner earlier tonight, rather than spend our time wringing our hands over this Internet ID stuff, we&#8217;ll all be far better off saving our energy to fight foolhardy initiatives like SOPA, PIPA, and <a href="http://maybemaimed.com/2011/03/29/anti-censorship-best-practices-for-the-sex-positive-publisher-atlanta-poly-weekend-2011/">other forms of political</a>, <a href="http://maybemaimed.com/2010/07/29/anti-porn-is-pro-censorship-even-if-they-say-theyre-not/">social</a>, and <a href="http://maybemaimed.com/2010/12/08/what-sex-has-to-do-with-the-first-world-infowar-against-wikileaks/">technical censorship</a>.</p>
<p>Internet ID/NSTIC is not an enemy. It is going to be an important and useful tool for users like you and me.</p>
]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2012/01/19/stop-wasting-energy-fighting-internet-id-if-you-dont-trust-the-government-fight-bills-like-sopa-pipa-instead/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On Being a Social Cyborg: How iCalendar Helps Me Fight Loneliness</title>
		<link>http://maymay.net/blog/2011/11/05/on-being-a-social-cyborg-how-icalendar-helps-me-fight-loneliness/</link>
		<comments>http://maymay.net/blog/2011/11/05/on-being-a-social-cyborg-how-icalendar-helps-me-fight-loneliness/#comments</comments>
		<pubDate>Sun, 06 Nov 2011 06:04:30 +0000</pubDate>
		<dc:creator>Meitar</dc:creator>
				<category><![CDATA[Crosspost]]></category>
		<category><![CDATA[Geeky]]></category>
		<category><![CDATA[Maybe Maimed]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Tech/Computing]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/?p=1369</guid>
		<description><![CDATA[Here&#8217;s a topic I&#8217;ve been meaning to write about ever since I was deeply depressed last Fall and Winter. Back then, I was incredibly lonely, and despite my best efforts I simply found it damn near impossible to do anything to improve my situation. That&#8217;s because my &#8220;best efforts&#8221; consistently lead me to dead-end resources [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s <a href="https://www.facebook.com/meitar.moscovitz/posts/10150745384665005">a topic I&#8217;ve been meaning to write about</a> ever since <a href="http://maymay.net/blog/2010/09/10/dear-cassandra/" title="Dear Cassandra">I was deeply depressed last Fall and Winter</a>. Back then, I was incredibly lonely, and despite my best efforts I simply found it damn near impossible to do anything to improve my situation. That&#8217;s because my &#8220;best efforts&#8221; consistently lead me to dead-end resources that <em>sounded</em> good but that had no practical or immediately useful information; resources like <a href="http://www.wikihow.com/Deal-With-Loneliness">WikiHow.com&#8217;s &#8220;How to Deal With Loneliness&#8221; article</a>.</p>
<p>In their article, WikiHow contributors write:</p>
<blockquote cite="http://www.wikihow.com/Deal-With-Loneliness"><p><strong>Get involved in anything where you will meet people.</strong> If you are very shy, find a group for social anxiety, even if it has to be online (obviously it&#8217;s better if it&#8217;s not). Look on places like Craig&#8217;s List, or local news websites for your town for activities in your area. Volunteering can help. But don&#8217;t attend functions with the idea of making friends or meeting people. Being too demanding is a sign of loneliness. Try to go with no expectations whatsoever, and to enjoy yourself regardless of what happens. Look for activities that interest you, that also involve groups of people, like intramural sports, book clubs, church groups, political campaigns, concerts, art exhibitions, etc.</p></blockquote>
<p>While it all &#8220;makes sense,&#8221; the WikiHow article reads like an elaborate horoscope. It&#8217;s incredibly annoying because it contains no meaningful, discrete, actionable items. Where, exactly, can I find &#8220;activities in my area&#8221;? And once I find them, how do I make sure I know about them <em>when they are happening</em>? And as if that wasn&#8217;t hard enough, how do I make the process workable under the extreme energy constraints that being depressed and lonely put me under? (See also: <a href="https://www.facebook.com/meitar.moscovitz/posts/10150753819955005">without using up too many &#8220;spoons&#8221;</a>.)</p>
<p>Ironically, when I finally concocted a solution to this problem, I no longer had the time to write the blog post about solving the problem because I was so busy doing things and being social. I proceeded to pull myself out of <a href="http://maybemaimed.com/2010/11/15/this-is-me-here-now-and-i-just-wanted-you-to-know/">my depression</a>, have <a href="http://days.maybemaimed.com/post/10422252352/omnipresent-eroticization-can-suck-my-big">a pretty good (if still difficult at times) Spring and Summer, and even Fall in 2011</a>. But now that <a href="https://twitter.com/maymaym/status/132413060177600512">the days are getting shorter</a> and I&#8217;m increasingly feeling like my moods are walking on a tightrope of &#8220;happy&#8221; above <a href="https://twitter.com/maymaym/status/132697741510979584">a pit of bleakness</a>, I figure it&#8217;s about time to document my process. That, and it seems <a href="http://nixvisceral.tumblr.com/post/12365622189/goddam-the-things-i-missed-out-on-today#disqus_thread">people I know are running into the same problem</a>, so hopefully sharing my own solution can really make a positive impact on others&#8217; lives.</p>
<h2>Creating a Cyborg&#8217;s Social Calendar</h2>
<p>The basic problem was two-fold. First, I needed an easy way to <em>discover</em> local goings-on. Second, I needed a way to remember to actually <em>attend</em> events that I was interested in.</p>
<p>It turns out this is far more difficult to accomplish than one may at first believe since the set of events that I both <em>want</em> to attend and <em>have the capability (energy, time, money, motivation, physical accessibility, etc.) to attend</em> are actually relatively limited. Moreover, I also need to align the set of events that match both of those criteria with the knowledge that said event is occurring <em>when</em> it is occurring. It&#8217;s a bit like playing temporal Tetris.</p>
<p>In a nutshell, the solution I implemented was similarly two-fold. First, I cast an incredibly wide but low-cost sensor net, integrated directly into the process I already used for keeping track of my daily appointments. (See also the &#8220;<a href="http://www.tonyrobbins.com/products/no-extra-time.php">no extra time</a>&#8221; concept and <a href="http://shirconsulting.com/2011/10/24/set-it-and-forget-it/">its wide applicability</a>). Second, I classified the &#8220;activities in my area&#8221; into two distinct groups: &#8220;engagements&#8221; (stuff I&#8217;ve said &#8220;yes&#8221; or &#8220;maybe&#8221; to) and &#8220;opportunities&#8221; (stuff I haven&#8217;t yet said &#8220;no&#8221; to).</p>
<p>Here&#8217;s what my calendar looks like after all the pieces of the system are in place:</p>
<p><a href="http://maymay.net/blog/wp-content/uploads/2011/11/social-cyborg-calendar-complete.png"><img src="http://maymay.net/blog/wp-content/uploads/2011/11/social-cyborg-calendar-complete-300x210.png" alt="" title="social-cyborg-calendar-complete" width="300" height="210" class="aligncenter size-medium wp-image-1370" /></a></p>
<p>As you can see, I have an <em>enormous</em> selection of activities I could participate in at any given time. Better yet, they all show up on my calendar without my ever needing to repeatedly go &#8220;look[ing] on places like Craig&#8217;s List&#8221; to find them, the events on my calendar <em>update themselves</em>, and I can show or hide sets of events on a whim.</p>
<p>The prerequisite tool for doing this is the <a href="https://secure.wikimedia.org/wikipedia/en/wiki/ICalendar">iCalendar</a> feed, which, in <a href="http://events.stanford.edu/about/rss.html">the words of Stanford University</a>, is <q cite="http://events.stanford.edu/about/rss.html">a popular calendar data exchange format which allows you to subscribe to a calendar and receive updates as calendar data changes.</q> Each of those calendars under the &#8220;Subscriptions&#8221; heading in the screenshot of my iCal is actually an iCalendar feed from a remote website. <strong>iCalendar feeds are to calendars as <acronym title="Really Simple Syndication">RSS</acronym> feeds are to blogs.</strong></p>
<p>The first thing I did was add the event subscription feed from my Facebook. Do this:</p>
<ol>
<li>Log into your Facebook account and go to the &#8220;<a href="https://www.facebook.com/events/">Events</a>&#8221; page.</li>
<li><a href="https://www.facebook.com/help/?faq=152652248136178">Scroll to the very bottom of the page and click on the small &#8220;Export&#8221; link</a>. This will reveal a personalized web address (<a href="https://secure.wikimedia.org/wikipedia/en/wiki/Uniform_Resource_Locator"><acronym title="Uniform Resource Locator">URL</acronym></a>) listing all upcoming Facebook events you&#8217;ve been invited to or have <acronym title="Répondez s'il vous plaît">RSVP</acronym>&#8216;ed either &#8220;Yes&#8221; or &#8220;Maybe&#8221; to, in iCalendar feed (<code>.ics</code>) format. Copy that <acronym title="Uniform Resource Locator">URL</acronym>.</li>
<li><a href="http://www.apple.com/findouthow/mac/#subscribeical">Back in iCal (or your calendaring application of choice), choose &#8220;Subscribe…&#8221; from the menu</a> and paste in the <acronym title="Uniform Resource Locator">URL</acronym> you got from Facebook.</li>
<li>Give this calendar subscription a meaningful name. I called it &#8220;Facebook Events&#8221; (see above screenshot).</li>
<li>Set the &#8220;Refresh&#8221; interval to something that makes sense; I set it to once &#8220;every 15 minutes,&#8221; since the Facebook feed is one I check often because it changes so frequently. (For feeds from calendars that I check or that update less often, such as those of community groups, or calendars listing events that are far from home, I set the refresh rate much, much slower, such as once &#8220;every week.&#8221;)</li>
</ol>
<p>Okay! Now, whenever a friend invites you to an event on Facebook, your calendar will be updated to reflect that event at the appropriate date and time. If you <acronym title="Répondez s'il vous plaît">RSVP</acronym> &#8220;No&#8221; to the event, it will disappear from your calendar when iCal next checks your Facebook iCalendar feed.</p>
<p>Repeat the same steps for any other event-management website that you use and that offers iCalendar feeds. Some <a href="https://plancast.com/meitar">services I use, such as Plancast.com</a> and Meetup.com, <a href="http://www.meetup.com/help/Can-I-export-all-of-my-Meetups-to-a-Calendar-or-RSS-feed/">actually offer two distinct iCalendar feeds</a>, one for all of the events visible to you on the service, and one for events that you have <acronym title="Répondez s'il vous plaît">RSVP</acronym>&#8216;ed &#8220;Yes&#8221; to. Subscribe to both; in the screenshot of my iCal window, above, you&#8217;ll note the existence of a &#8220;&#8216;meitar&#8217; on Plancast&#8221; calendar as well as a &#8220;Plancast Subscriptions&#8221; calendar, and similarly a &#8220;My &#8216;Yes/Maybe&#8217; Meetups&#8221; calendar as well as a &#8220;My Meetups&#8221; calendar.</p>
<p>Now that you&#8217;ve got a bunch of subscriptions, it behooves you to organize them in a way that makes sense to you. How you can do this will depend a little bit on the tools you have at your disposal. <a href="http://www.macforbeginners.com/page.php?id=112">I found Apple iCal the best choice because of its Calendar Group feature</a>, while I found Google Calendar an incredibly frustrating tool to use.</p>
<p>In iCal, I first created two calendar groups. The first one was called &#8220;Social Engagements,&#8221; into which I placed all the iCalendar feeds that showed me events to which I&#8217;ve <acronym title="Répondez s'il vous plaît">RSVP</acronym>&#8216;ed &#8220;Yes&#8221; to on the remote site. This included the Facebook, &#8220;&#8216;meitar&#8217; on Plancast&#8221;, and &#8220;My &#8216;Yes/Maybe&#8217; Meetups&#8221; feed. The second group was called &#8220;Social Opportunities,&#8221; into which I placed all the other calendars.</p>
<p>Every time I learned about a new local venue, such as a nightclub, or a café, or a bookstore that had an open mic, I would scour its website to see if it offered an iCalendar feed. If it did, or if it used a tool that did, such as <a href="http://www.google.com/support/calendar/bin/answer.py?answer=41207">embedding a Google Calendar on their website</a>,<sup><a href="http://maymay.net/blog/2011/11/05/on-being-a-social-cyborg-how-icalendar-helps-me-fight-loneliness/#footnote_0_1369" id="identifier_0_1369" class="footnote-link footnote-identifier-link" title="Every public Google Calendar also publishes its information in an iCalendar feed. For example, rather than view the Occupy SF calendar on their website, just subscribe to the iCalendar feed provided by Google. Also, while you can create an aggregate view of multiple Google Calendars to embed on a Web page, it seems to me like this isn&amp;#8217;t a feature offered for iCalendar feeds, so if you come across such a calendar, you&amp;#8217;ll likely need to add the individual calendars&amp;#8217; feeds one by one.">1</a></sup> I&#8217;d add their feed to my &#8220;Social Opportunities&#8221; calendar group, too. I&#8217;d do the same every time I learned of a new event aggregating website, such as the <a href="http://www.indybay.org/calendar/">IndyBay.org calendar</a> or <a href="http://calagator.org/">the Calagator Portland Tech Community calendar</a>, which both offer feeds.</p>
<p>In very short order, I became one of the go-to people to ask about what was happening &#8217;round town&mdash;including some towns I didn&#8217;t even live in!</p>
<p>However, as <a href="http://maybemaimed.com/2011/10/16/dreaming-of-compassion-technology-polyamory-and-social-justice-public-anthropology-conference-2011/">I travelled across the country speaking at conferences</a>, I realized that my &#8220;Social Opportunities&#8221; group was getting cluttered with events that I could not <em>actually</em> attend because I was literally thousands of miles away from them. To solve that problem, I created distinct &#8220;Social Opportunities&#8221; calendar groups based on geographic region, and moved the individual subscriptions to the group with which they were geographically associated; <a href="https://www.google.com/calendar/ical/occupydc.org_oi92rk9k96d8gb9buca0t12rd0%40group.calendar.google.com/public/basic.ics">the Occupy DC calendar feed</a> is in the &#8220;Social Opportunities &#8211; DC&#8221; calendar group, and so on. I also created an &#8220;A-geographic&#8221; group to house feeds that listed events from all over the place.<sup><a href="http://maymay.net/blog/2011/11/05/on-being-a-social-cyborg-how-icalendar-helps-me-fight-loneliness/#footnote_1_1369" id="identifier_1_1369" class="footnote-link footnote-identifier-link" title="Currently that&amp;#8217;s just Meetup and Plancast, for me, since I&amp;#8217;ve joined Meetup groups all over the country and I&amp;#8217;ve subscribed to people on Plancast who live in dozens of cities.">2</a></sup></p>
<p><ins datetime="2011-11-07T04:56:07+00:00">Some event-management services let you filter by geography, making this even easier. For instance, <a href="http://upcoming.yahoo.com/">Yahoo!&#8217;s &#8220;Upcoming&#8221; event listing website</a> shows you events by &#8220;place,&#8221; and <a href="http://upcoming.yahoo.com/news/archives/2004/03/11/ical_int/">you can subscribe to an iCalendar feed</a> of just those events. For instance, here are <a href="http://upcoming.yahoo.com/place/xbp0.jWbBZWDASue">the Upcoming events in Seattle</a>, and here is <a href="webcal://upcoming.yahoo.com/calendar/v2/place/xbp0.jWbBZWDASue">the same information in iCalendar feed format</a>. I added the feed of each Upcoming Place to which I regularly travel to its appropriate regional calendar group.</ins></p>
<p>The benefits of this set up are obvious:</p>
<ul>
<li><strong>Visually overlay social opportunities on top of social engagements</strong> to ensure few conflicts, and help make the most informed choice about which events I want to go to when there <em>are</em> conflicts, to mitigate <a href="https://www.facebook.com/meitar.moscovitz/posts/10150780946015005">my social opportunity cost</a>.</li>
<li><strong>Toggle calendars on/off to find nearby activities.</strong> Ordinarily, I simply leave all the &#8220;opportunities&#8221; calendars deselected, so I&#8217;m just looking at my personal calendars and the &#8220;Engagements&#8221; group, since this view shows me &#8220;stuff I have to do today.&#8221; When I&#8217;m bored or I&#8217;m looking for new things to do in the upcoming week, however, I simply turn on the &#8220;opportunities&#8221; calendars. Voila! In 1 click, I&#8217;m browsing a wealth of stuff to do!<sup><a href="http://maymay.net/blog/2011/11/05/on-being-a-social-cyborg-how-icalendar-helps-me-fight-loneliness/#footnote_2_1369" id="identifier_2_1369" class="footnote-link footnote-identifier-link" title="Frustratingly, although Facebook also offers you a page listing events that you were not invited to but that your friends were, there seems to be no iCalendar feed of that list, forcing me to periodically check that page for events that would be &amp;#8220;Social Opportunities&amp;#8221; if I knew of them. Thankfully, to add them to my own calendar, I just RSVP &amp;#8220;Yes&amp;#8221; or (more likely) &amp;#8220;Maybe.&amp;#8221;">3</a></sup> </li>
<li><strong>Quickly orient oneself within the social space of a new city.</strong> If I&#8217;m taking a trip to Washington DC for a few days, all I have to do is deselect/uncheck the &#8220;Social Opportunities &#8211; SF/Bay Area&#8221; calendar group to hide all of my calendar subscriptions in that group, then select/check the &#8220;Social Opportunities &#8211; DC&#8221; calendar group and, voila, my calendar view has instantly shifted to showing me events that I can attend in Washington, DC.</li>
<li><strong>Make <acronym title="Répondez s'il vous plaît">RSVP</acronym>&#8216;s meaningful</strong>: if I <acronym title="Répondez s'il vous plaît">RSVP</acronym> &#8220;Yes&#8221; to an event on Meetup, the event is automatically removed from my &#8220;Social Opportunities &#8211; A-geographic&#8221; calendar group and added to my &#8220;Social Engagements&#8221; calendar group.</li>
<li><strong>Easily move event information from a calendar feed to a personal calendar</strong> using copy-and-paste <em>without ever leaving the calendaring tool of your choice</em>.</li>
</ul>
<p>Of course, none of this matters with regards to feeling lonely if I don&#8217;t also <em>show up</em> at events in physical space. Admittedly, actually mustering the physical and social energy to get up and <em>go</em> is by far the hardest part of this whole process. Typing on a keyboard is all fine and well (rest assured I do more than enough of it!), but there is no substitute for actually being around other human beings face-to-face. Physically vibrating the air using one&#8217;s mouth and having those vibrations move another&#8217;s ear drum (or physically moving one&#8217;s hands and letting the photons bounce off those movements and onto the retina of another&#8217;s eyes, in the case of sign language) is a vital part of the <em>experience</em> of being social.</p>
<p>This system isn&#8217;t perfect, but the imperfections are mostly due to the way sites like Facebook handle <acronym title="Répondez s'il vous plaît">RSVP</acronym> information. For my purposes, though, this workflow gets me well over 80% of the way towards my goal, and since I&#8217;m <em>actually</em> a human (not a machine), I can deal with a little data pollution here and there. There&#8217;s also plenty more I could write about with regards to &#8220;being a social cyborg,&#8221; such as how I use my calendar in conjunction with my contact management application (my digital rolodex) to maintain &#8220;loose&#8221; or &#8220;weak&#8221; <a href="https://secure.wikimedia.org/wikipedia/en/wiki/Interpersonal_ties">interpersonal ties</a> with over 1,000 people spread across the world&mdash;again, using &#8220;no extra time.&#8221; But I&#8217;ll save that for another post.</p>
<p>For now, hopefully this gave you a better understanding why my most frequent response to being informed of a party is something along the lines of, &#8220;Can you send me a link (to Facebook/Meetup/Google Calendar)?&#8221; and also why <a href="http://maybemaimed.com/2011/08/08/scaling-the-walls-of-fetlife%E2%80%99s-walled-garden-with-new-tools/">I&#8217;m so, so, so critical of important websites like FetLife that seem to prioritize everything <em>but</em> user security and interoperability</a>.</p>
<ol class="footnotes"><li id="footnote_0_1369" class="footnote">Every <a href="http://www.google.com/support/calendar/bin/answer.py?answer=37083">public Google Calendar</a> also <a href="http://www.google.com/googlecalendar/event_publisher_guide.html">publishes its information</a> in an iCalendar feed. For example, rather than view the <a href="http://occupysf.com/calendar-a/calendar-view">Occupy SF calendar</a> on their website, just <a href="https://www.google.com/calendar/ical/occupysf.com_dqborvr8panpsiqh6br9t2v34o%40group.calendar.google.com/public/basic.ics">subscribe to the iCalendar feed provided by Google</a>. <ins datetime="2011-11-08T06:03:28+00:00">Also, while you can <a href="http://blog.ouseful.info/2008/12/04/displaying-events-from-multiple-google-calendars-in-a-single-embedded-calendar-view/">create an aggregate view of multiple Google Calendars to embed on a Web page</a>, it seems to me like this isn&#8217;t a feature offered for iCalendar feeds, so if you come across such a calendar, you&#8217;ll likely need to add the individual calendars&#8217; feeds one by one.</ins></li><li id="footnote_1_1369" class="footnote">Currently that&#8217;s just Meetup and Plancast, for me, since I&#8217;ve joined Meetup groups all over the country and I&#8217;ve subscribed to people on Plancast who live in dozens of cities.</li><li id="footnote_2_1369" class="footnote">Frustratingly, although <a href="https://www.facebook.com/events/friends/">Facebook also offers you a page listing events that you were <em>not</em> invited to but that your friends were</a>, there seems to be no iCalendar feed of that list, forcing me to periodically check that page for events that would be &#8220;Social Opportunities&#8221; if I knew of them. Thankfully, to add them to my own calendar, I just <acronym title="Répondez s'il vous plaît">RSVP</acronym> &#8220;Yes&#8221; or (more likely) &#8220;Maybe.&#8221;</li></ol>]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2011/11/05/on-being-a-social-cyborg-how-icalendar-helps-me-fight-loneliness/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Internet censorship *FACEPALM* moment of the day</title>
		<link>http://maymay.net/blog/2011/04/27/internet-censorship-facepalm-moment-of-the-day/</link>
		<comments>http://maymay.net/blog/2011/04/27/internet-censorship-facepalm-moment-of-the-day/#comments</comments>
		<pubDate>Thu, 28 Apr 2011 04:34:06 +0000</pubDate>
		<dc:creator>Meitar</dc:creator>
				<category><![CDATA[Crosspost]]></category>
		<category><![CDATA[Tech News]]></category>
		<category><![CDATA[Tech/Computing]]></category>
		<category><![CDATA[censorship]]></category>
		<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/?p=1353</guid>
		<description><![CDATA[A friend linked me to &#8220;US National Science Foundation blocks Global Voices Advocacy website&#8221; by Ethan Zuckerman. In this post, Ethan discusses how the National Science Foundation (NSF), which (for those unfamiliar with the Internet&#8217;s history) in 1986 funded&#160;NSFNet as a cross country 56 Kbps backbone for academic purposes, essentially the first significant University computer [...]]]></description>
			<content:encoded><![CDATA[<p>A friend linked me to &#8220;<a href="http://www.ethanzuckerman.com/blog/2011/04/20/us-national-science-foundation-blocks-global-voices-advocacy-website/">US National Science Foundation blocks Global Voices Advocacy website</a>&#8221; by Ethan Zuckerman. In this post, Ethan discusses how the <a href="https://secure.wikimedia.org/wikipedia/en/wiki/National_Science_Foundation">National Science Foundation (NSF)</a>, which (for those unfamiliar with the Internet&#8217;s history) in 1986 funded&nbsp;<a href="https://secure.wikimedia.org/wikipedia/en/wiki/National_Science_Foundation_Network">NSFNet</a> 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:</p>
<blockquote>
<p>[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.</p>
</blockquote>
<p>After confirming from NSF officials that &#8220;the blockage is not in error,&#8221; Ethan states the almost too-obvious-to-be-deemed-important note:</p>
<blockquote>
<p>[T]he National Science Foundation is spending taxpayer money to (ineffectively) prevent scientists from learning about a debate about &ldquo;internet freedom&rdquo; tools the US State Department and the Broadcasting Board of Governors are spending taxpayer money to support and promote, again using taxpayer money.</p>
<p>Is there a Federal irony department where I can lodge a complaint?</p>
</blockquote>
<p>Thus: *FACEPALM.*</p>
<p>As if that wasn&#8217;t ludicrous enough, check out <a href="http://www.ethanzuckerman.com/blog/2011/04/20/us-national-science-foundation-blocks-global-voices-advocacy-website/#comment-2469210">this explanation by JeffAlex in the comments</a>:</p>
<blockquote>
<p>This is an instance of unintended consequences rather than malevolent intent. The fact is, <strong>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&rsquo;s network.</strong> Obviously, there&rsquo;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 <strong>about simple inside-the-Beltway politics</strong>.</p>
</blockquote>
<p>(Emphasis mine.) <a href="http://www.ethanzuckerman.com/blog/2011/04/20/us-national-science-foundation-blocks-global-voices-advocacy-website/#comment-2469840">Others seem to agree</a>. My own <a href="http://days.maybemaimed.com/post/4883938724/my-blog-is-often-censored-in-fact-personal-blogs">correspondence with government employees in other agencies also supports the explanation</a>.</p>
<p>Yet again, <a href="http://maybemaimed.com/2011/03/29/anti-censorship-best-practices-for-the-sex-positive-publisher-atlanta-poly-weekend-2011/">porn is the scapegoat for political agendas</a>. And not just the excuse, but the explicit <em>rationale</em>. A stupid one, to be sure, but unabashedly made, and&mdash;worse&mdash;<a href="http://maybemaimed.com/2010/12/08/what-sex-has-to-do-with-the-first-world-infowar-against-wikileaks/">unapologetically ceded</a>.</p>
<p>Ethan&#8217;s snark is well deserved:</p>
<blockquote>
<p>I&rsquo;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&rsquo;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 <acronym title="Universal Serial Bus">USB</acronym> keys and clandestinely smuggle them to oppressed US scientists.</p>
</blockquote>
<p>Well done, American bureaucrats. You self-defeating fucking morons.</p>
]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2011/04/27/internet-censorship-facepalm-moment-of-the-day/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to spoof your MAC address on Mac OS X (for reals)</title>
		<link>http://maymay.net/blog/2011/03/29/how-to-spoof-your-mac-address-on-mac-os-x-for-reals/</link>
		<comments>http://maymay.net/blog/2011/03/29/how-to-spoof-your-mac-address-on-mac-os-x-for-reals/#comments</comments>
		<pubDate>Wed, 30 Mar 2011 05:50:43 +0000</pubDate>
		<dc:creator>Meitar</dc:creator>
				<category><![CDATA[Crosspost]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Security & Privacy]]></category>
		<category><![CDATA[Tech/Computing]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/?p=1324</guid>
		<description><![CDATA[One of the oddities of Apple&#8217;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 &#8220;Ethernet ID&#8221; (aka. MAC address, aka. link-level address) of a network interface card. This [...]]]></description>
			<content:encoded><![CDATA[<p>One of the oddities of Apple&#8217;s Mac <acronym title="Operating System">OS</acronym> X platform is that some things that should be easy are obtusely difficult, and remarkably so. <a href="http://maymay.net/blog/2007/09/19/changing-the-hostname-on-mac-os-x-server/">Changing the hostname of a Mac <acronym title="Operating System">OS</acronym> X Server</a> is one good example. Another is changing the <a href="https://secure.wikimedia.org/wikipedia/en/wiki/MAC_address">&#8220;Ethernet ID&#8221; (<acronym title="Also Known As">aka</acronym>. <acronym title="Media Access Control (networking) or Message Authentication Code (cryptography)">MAC</acronym> address, <acronym title="Also Known As">aka</acronym>. link-level address)</a> of a network interface card.</p>
<p>This should be really simple, as the correct command line is plain as day (where the string of colon-separated 00&#8242;s is your preferred <acronym title="Media Access Control (networking) or Message Authentication Code (cryptography)">MAC</acronym> address):</p>
<pre><code class="shell">sudo ifconfig en1 lladdr <var>00:00:00:00:00:00</var></code></pre>
<p>There are <a href="http://hints.macworld.com/article.php?story=20080119114003330">numerous</a> <a href="http://snowleopardtips.net/tutorials/spoofing-your-mac-address-in-snow-leopard.html">blog</a> <a href="http://osxdaily.com/2008/01/17/how-to-spoof-your-mac-address-in-mac-os-x/">posts</a> all over the &#8216;net that tell you this time and again, but each one seems to have comments from <a href="http://osxdaily.com/2008/01/17/how-to-spoof-your-mac-address-in-mac-os-x/#comment-42854">users complaining that it doesn&#8217;t work</a> on their system. I ran into a similar problem not long ago when my MacBook Pro didn&#8217;t do what I expected. Just like others, whenever I tried to run the above command, nothing seemed to happen:</p>
<pre><code class="shell">ifconfig | grep ether # Determine current <acronym title="Media Access Control (networking) or Message Authentication Code (cryptography)">MAC</acronym> addresses
sudo ifconfig en1 lladdr <var>00:00:00:00:00:00</var> # Try changing <acronym title="Media Access Control (networking) or Message Authentication Code (cryptography)">MAC</acronym> address for en1 (usually Airport)
ifconfig | grep ether # Confirm change; but uh-oh! Output is the same as before! Why?</code></pre>
<p>Here&#8217;s how I fixed this problem.</p>
<p>The thing to know is that there seem to be a number of conditions that will prevent Mac <acronym title="Operating System">OS</acronym> X from successfully changing a <acronym title="Network Interface Card">NIC</acronym>&#8216;s <acronym title="Media Access Control (networking) or Message Authentication Code (cryptography)">MAC</acronym> address. Some are obvious and some are not. As far as I can tell, these conditions are:</p>
<ul>
<li>having the interface &#8220;down&#8221; (i.e., if you&#8217;ve recently run <code>ifconfig en0 down</code> or an equivalent),</li>
<li>being associated with (i.e., connected to) a Wi-Fi network with your Airport card,</li>
<li>having the System Preferences application running,</li>
<li>forgetting to &#8220;unstick&#8221; the current system configuration set.</li>
</ul>
<p>It&#8217;s the last one that bit me. Mac <acronym title="Operating System">OS</acronym> X has a feature called &#8220;system configuration sets&#8221; or &#8220;<a href="http://support.apple.com/kb/HT2712">locations</a>,&#8221; as it&#8217;s termed in much of the <acronym title="Graphical User Interface">GUI</acronym>. These can be accessed via the Network pane in System Preferences, or via the <code>scselect</code> command from Terminal; it&#8217;s that <code>scselect</code> command which offers the key to changing a Mac&#8217;s <acronym title="Media Access Control (networking) or Message Authentication Code (cryptography)">MAC</acronym> address.</p>
<p>On my MacBook Pro (which, for the record and if it matters, is running Mac <acronym title="Operating System">OS</acronym> X 10.6.7), I need to do <em>all</em> of the following before running <code>ifconfig</code>, as shown above:</p>
<ul>
<li>If I&#8217;m changing my Airport card&#8217;s <acronym title="Media Access Control (networking) or Message Authentication Code (cryptography)">MAC</acronym> address, I need to disassociate from any network. (This can most easily be done by invoking <code>airport -z</code> from Terminal. If you don&#8217;t have this command, see <a href="http://maymay.net/blog/2010/12/05/one-minute-mac-tip-sniffing-wi-fi-traffic-and-capturing-packets-with-the-built-in-airport-utility/">my tips on where to find <code>airport</code></a>.)</li>
<li>Quit System Preferences if it&#8217;s open.</li>
<li>Tell the operating system to &#8220;delay changing the system&#8217;s &#8216;location&#8217; until the next system boot&#8221; by running: <code>scselect -n</code>.</li>
</ul>
<p>According to <a href="http://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man8/scselect.8.html">the <code>man</code> page for <code>scselect</code></a>:</p>
<blockquote cite="http://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man8/scselect.8.html"><p>scselect provides access to the system configuration sets, commonly referred to as &#8220;locations&#8221;.  When invoked with no arguments, scselect displays the names and associated identifiers for each defined &#8220;location&#8221; and indicates which is currently active.  scselect also allows the user to select or change the active &#8220;location&#8221; by specifying its name or identifier.  Changing the &#8220;location&#8221; causes an immediate system re-configuration, unless the -n option is supplied.</p>
<p>[…]</p>
<p>-n  Delay changing the system&#8217;s &#8220;location&#8221; until the next system boot (or the next time that the system configuration preferences are changed).</p></blockquote>
<p>Once I perform the above rigmarole, I can then change my <acronym title="Media Access Control (networking) or Message Authentication Code (cryptography)">MAC</acronym> 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 <em>again</em> before changing my <acronym title="Media Access Control (networking) or Message Authentication Code (cryptography)">MAC</acronym> address will work as expected.</p>
]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2011/03/29/how-to-spoof-your-mac-address-on-mac-os-x-for-reals/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>One Minute Mac Tip: Sniffing Wi-Fi traffic and capturing packets with the built-in airport utility</title>
		<link>http://maymay.net/blog/2010/12/05/one-minute-mac-tip-sniffing-wi-fi-traffic-and-capturing-packets-with-the-built-in-airport-utility/</link>
		<comments>http://maymay.net/blog/2010/12/05/one-minute-mac-tip-sniffing-wi-fi-traffic-and-capturing-packets-with-the-built-in-airport-utility/#comments</comments>
		<pubDate>Sun, 05 Dec 2010 10:58:27 +0000</pubDate>
		<dc:creator>Meitar</dc:creator>
				<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Tech/Computing]]></category>
		<category><![CDATA[Wi-Fi]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/?p=1318</guid>
		<description><![CDATA[Many Mac OS X users lament the lack of sophisticated network analysis tools, often prevalent and seemingly prolific on Linux systems. What many don&#8217;t know is that Mac OS X comes with a built-in command-line tool to do all sorts of nifty things with Wi-Fi networks, from packet capture (traffic sniffing) to scanning nearby networks&#8217; [...]]]></description>
			<content:encoded><![CDATA[<p>Many Mac <acronym title="Operating System">OS</acronym> X users lament the lack of sophisticated network analysis tools, often prevalent and seemingly prolific on Linux systems. What many don&#8217;t know is that Mac <acronym title="Operating System">OS</acronym> X comes with a built-in command-line tool to do all sorts of nifty things with Wi-Fi networks, from packet capture (traffic sniffing) to scanning nearby networks&#8217; signal to noise ratios.</p>
<p>Mac <acronym title="Operating System">OS</acronym> X ships with a command-line tool called <code>airport</code> that can do all sorts of nifty things with Wi-Fi networks. Unfortunately, it&#8217;s so squirreled away that most people don&#8217;t seem to know about it. The utility is part of the <code>Apple80211</code> Private Framework used to power your Mac&#8217;s Airport menubar icon.</p>
<p>Invoking the utility without arguments prints a useful (if incomplete) usage message. At a Terminal command prompt, type:</p>
<pre>/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport</pre>
<p>The tool let&#8217;s you do a number of interesting things, so it&#8217;s worth playing around with. While you&#8217;re playing, you may as well create a symlink (a shortcut) to the utility so you don&#8217;t have to type that long path name all the time:</p>
<pre>sudo ln -s /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport /usr/bin/airport</pre>
<p>Among the easiest things you can do is print a list of the Wi-Fi networks within range of your computer, but unlike the Airport menubar item, this report shows you a bunch of extra, precise data, such as which encryption protocol (if any) is being used on the network:</p>
<pre>&#36; airport en1 scan
                            SSID BSSID             RSSI CHANNEL HT <acronym title="Columbia College">CC</acronym> SECURITY (auth/unicast/group)
                       moscohome 00:22:6b:8b:86:51 -61  10      N  -- WPA2(PSK/AES/AES)
                     PUBLIC-455H 00:15:6d:60:95:d1 -82  1       N  -- NONE
                    Alex Network 00:1e:e5:24:c4:4f -86  1       Y  TW <acronym title="Wi-Fi Protected Access; the successor to the weaker WEP">WPA</acronym>(PSK/TKIP,AES/TKIP) WPA2(PSK/TKIP,AES/TKIP)
                   linksysELNIDO 00:21:29:a3:fd:99 -90  6       N  -- <acronym title="Wi-Fi Protected Access; the successor to the weaker WEP">WPA</acronym>(PSK/AES,TKIP/TKIP) WPA2(PSK/AES,TKIP/TKIP)
                        2WIRE024 00:18:3f:02:2f:49 -88  6       N  US <acronym title="Wired Equivalency Protocol; a weak Wi-Fi encryption standard">WEP</acronym>
                        2WIRE940 00:12:88:d9:85:41 -93  6       N  US <acronym title="Wired Equivalency Protocol; a weak Wi-Fi encryption standard">WEP</acronym>
</pre>
<p>If I wanted to see which of my neighbors still haven&#8217;t upgraded from <acronym title="Wired Equivalency Protocol; a weak Wi-Fi encryption standard">WEP</acronym>, I could just filter using <code>grep</code>:</p>
<pre>airport en1 scan | grep <acronym title="Wired Equivalency Protocol; a weak Wi-Fi encryption standard">WEP</acronym></pre>
<p>More awesome, perhaps, is the tool&#8217;s ability to actually perform traffic sniffing and capture packets. Tell <code>airport</code> to <code>sniff</code>, and optionally provide a channel (which you now know thanks to your ability to <code>scan</code>). You need to be an administrator (i.e., you need <code>sudo</code> privileges) to do this:</p>
<pre>sudo airport en1 sniff 6</pre>
<p>This creates a file called <code>airportSniffXXXXXX.cap</code> in the <code>/tmp</code> directory, where <code>XXXXXX</code> is a string for uniqueness. You can then feed this file into your favorite network analyzer such as <a href="http://wireshark.org/">Wireshark</a> to examine the traffic offline.</p>
]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2010/12/05/one-minute-mac-tip-sniffing-wi-fi-traffic-and-capturing-packets-with-the-built-in-airport-utility/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Cross-post: Edenfantasys&#8217;s unethical technology is a self-referential black hole</title>
		<link>http://maymay.net/blog/2010/05/19/web-merchants-inc-edenfantasys-unethical-technology/</link>
		<comments>http://maymay.net/blog/2010/05/19/web-merchants-inc-edenfantasys-unethical-technology/#comments</comments>
		<pubDate>Wed, 19 May 2010 23:20:04 +0000</pubDate>
		<dc:creator>Meitar</dc:creator>
				<category><![CDATA[Business & E-Commerce]]></category>
		<category><![CDATA[Content Syndication]]></category>
		<category><![CDATA[Crosspost]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Maybe Maimed]]></category>
		<category><![CDATA[Search Engine Optimization]]></category>
		<category><![CDATA[Tech/Computing]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/?p=1217</guid>
		<description><![CDATA[This entry was originally published at my other blog. I&#8217;m cross-posting it here in order to make sure it gets copied to more servers, as some people have suggested I&#8217;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 [...]]]></description>
			<content:encoded><![CDATA[<p><em>This entry was originally published at <a href="http://maybemaimed.com/2010/05/19/edenfantasyss-unethical-technology-is-a-self-referential-black-hole/">my other blog</a>. I&#8217;m cross-posting it here in order to make sure it gets copied to more servers, as some people have suggested I&#8217;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 <acronym title="Columbia College">CC</acronym>-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.</em></p>
<p>A few nights ago, I received an email from Editor of EdenFantasys&#8217;s SexIs Magazine, Judy Cole, asking me to modify <a href="http://kinkontap.com/?p=676">this Kink On Tap brief</a> I published that cites Lorna D. Keach&#8217;s writing. Judy asked me to &#8220;provide attribution and a link back to&#8221; SexIs Magazine. An ordinary enough request soon proved extraordinarily unethical when I discovered that <strong>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</strong>, <a href="http://www.ted.com/talks/jonathan_zittrain_the_web_is_a_random_act_of_kindness.html">a courtesy on which the ethical Internet is based</a>.</p>
<p>While what they&#8217;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.</p>
<p>For busy or non-technical readers, see the next section, <a href="#executive-summary">Executive Summary</a>, to quickly understand what EdenFantasys is doing, why it&#8217;s unethical, and <a href="#how-this-affects-you">how it affects you</a> whether you&#8217;re a customer, a contributor, or a syndication partner. For the technical reader, the <a href="#technical-details">Technical Details</a> section should provide ample evidence in the form of a walkthrough and sample code describing the unethical Search Engine Optimization (<acronym title="Search Engine Optimization">SEO</acronym>) and Search Engine Marketing (<acronym title="Search Engine Marketing">SEM</acronym>) techniques EdenFantasys, <acronym title="Also Known As">aka</acronym>. Web Merchants, Inc., is engaged in. For anyone who wants to read further, I provide an <a href="#editorial">Editorial</a> section in which I share some thoughts about what you can do to help combat these practices and bring transparency and trust&mdash;not the sabotage of trust EdenFantasys enacts&mdash;to the market.</p>
<h2 id="executive-summary">EXECUTIVE SUMMARY</h2>
<p>Internet sex toy retailer Web Merchants, Inc., which bills itself as the &#8220;sex shop you can trust&#8221; and does business under the name EdenFantasys, has implemented technology on their websites that actively interferes with contributors&#8217; 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&#8217; policies, EdenFantasys&#8217;s publishing platform has effectively outsourced the task of <a href="http://en.wikipedia.org/wiki/Spamdexing#Types_of_Link_Spam">&#8220;link farming&#8221; (a questionable Search Engine Marketing [<acronym title="Search Engine Marketing">SEM</acronym>] technique)</a> to sites with which they have &#8220;an ongoing relationship,&#8221; such as <a href="http://AlterNet.org/">AlterNet.org</a>, other large news hubs, and individual bloggers&#8217; blogs.</p>
<p>Articles published on EdenFantasys websites, such as the &#8220;community&#8221; website SexIs Magazine, contain <acronym title="HyperText Markup Language">HTML</acronym> crafted to look like links, but aren&#8217;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 &#8220;link-like&#8221; elements, fetching their intended destination from the server and redirecting users there. Due to the careful and deliberate implementation, the browser&#8217;s status bar is made to appear as though the link is legitimate, and that a destination is provided as expected.</p>
<p>For non-human visitors, including automated search engine indexing programs such as Googlebot, the &#8220;link&#8221; remains non-functional, making the article a search engine&#8217;s dead-end or &#8220;orphan&#8221; page whose only functional links are those whose destination is EdenFantasys&#8217;s own web presence. <strong>This makes EdenFantasys&#8217; website(s) a self-referential black hole that provides no reciprocity for contributors who author content, nor for any website ostensibly &#8220;linked&#8221; to from article content.</strong> At the same time, EdenFantasys editors actively solicit inbound links from individuals and organizations through &#8220;link exchanges&#8221; and incentive programs such as &#8220;awards&#8221; and &#8220;free&#8221; 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&#8217;s websites after republication on their partner&#8217;s media channels.</p>
<h3 id="how-this-affects-you">How EdenFantasys&#8217;s unethical practices have an impact on you</h3>
<p>Regardless of who you are, EdenFantasys&#8217;s unethical practices have a negative impact on you and, indeed, on the Internet as a whole.</p>
<div class="admonition tip" style="float: right; width: 33%; margin: 0 0 1em 1em;">
<strong>See for yourself</strong>: First, <em>log out of any and all EdenFantasys websites</em> or, preferably, use a different browser, or even a proxy service such as <a href="http://torproject.org/">the Tor network</a> for greater anonymity. Due to EdenFantasys&#8217;s technology, <em>you cannot trust that what you are seeing on your screen is what someone else will see on theirs.</em> Next, temporarily disable JavaScript (<a href="http://www.tucows.com/article/1690">read instructions for your browser</a>) and then try clicking on the links in SexIs Magazine articles. If clicking the intended off-site &#8220;links&#8221; doesn&#8217;t work, you know that your article&#8217;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>
<p><strong>Here&#8217;s another verifiable example</strong> 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 <a href="http://www.edenfantasys.com/sex-community/companies/aslan-leather/" rel="nofollow">EdenFantasys company page on Aslan Leather</a> (note, for the sake of comparison, the link in this sentence will work, even with JavaScript off). Try clicking on the link in the &#8220;Contact Information&#8221; section in the lower-right hand column of the page (shown in the screenshot, below). This &#8220;link&#8221; <em>should</em> take you to the Aslan Leather homepage but in fact it does not. So much for that &#8220;link exchange.&#8221;<br />
<a href="http://maybemaimed.com/wp-content/uploads/2010/05/edenfantasys-company-contact-information.png"><img src="http://maybemaimed.com/wp-content/uploads/2010/05/edenfantasys-company-contact-information-300x266.png" alt="" title="edenfantasys-company-contact-information" width="300" height="266" class="size-medium wp-image-1752" /></a><br />
(Click to enlarge.)
</div>
<ul>
<li><strong>If you&#8217;re an EdenFantasys employee</strong>, people will demand answers from you regarding the unethical practices of your (hopefully former) employer. While you are working for EdenFantasys, you&#8217;re seriously soiling your reputation in the eyes of ethical Internet professionals. Ignorance is no excuse for the lack of ethics on the programmers&#8217; part, and it&#8217;s a shoddy one for everyone else; you should be aware of your company&#8217;s business practices because you represent them and they, in turn, represent you.</li>
<li><strong>If you&#8217;re a partner or contributor</strong> (reviewer, affiliate, blogger), while you&#8217;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&#8217;re attaching your handle, pseudonym, or real name <em>directly</em> to all of their link farming (i.e., spamming) efforts. They <em>look</em> like they&#8217;re linking to you and they <em>look</em> like their content is syndicated fairly, but they&#8217;re actually playing dirty. They&#8217;re going the extra mile to ensure search engines like Google do not recognize the links in articles you write. They&#8217;re trying remarkably hard to make certain that all roads lead to EdenFantasys, but none lead outside of it; no matter what the &#8220;link,&#8221; 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&#8217;s lack of technical knowledge—potentially your own as well as your readership&#8217;s. Do you want to keep doing business with people like that?</li>
<li><strong>If you&#8217;re a customer</strong>, you&#8217;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&#8217;s perpetual reappearance, including the practices of companies like Web Merchants, Inc. EdenFantasys&#8217;s unethical practices may not be illegal, but they are unabashedly a hair&#8217;s width away from it, just like many spammers&#8217;. If you want to keep companies honest and transparent, if you really want a &#8220;sex shop you can trust,&#8221; 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 <a href="#what-you-can-do">the &#8220;What you can do&#8221; section, below</a>.</li>
<li><strong>If you&#8217;ve never heard about EdenFantasys before</strong>, 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&#8217; 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&#8217;t that the Internet and, indeed, the future you want, too?</li>
</ul>
<h2 id="technical-details">TECHNICAL DETAILS</h2>
<p>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&#8217;d welcome any and all clarifications provided by the EdenFantasys CTO and technical team in an appropriately transparent, public, and ethical manner. (You&#8217;re welcome—nay, <em>encouraged</em>—to leave a comment.)</p>
<p>Although I&#8217;m unconvinced that EdenFantasys understands this, it is the case that honesty is the best policy&mdash;especially on the Internet, where <em>everyone</em> has the power of &#8220;View source.&#8221;</p>
<h3>The &#8220;EF Framework&#8221; for obfuscating links</h3>
<p>Article content written by contributors on SexIs Magazine pages is published after all links are replaced with a <code>&lt;span&gt;</code> element bearing the <code>class</code> of <code>linklike</code> and a unique <code>id</code> attribute value. This apparently happens across any and all content published by Web Merchants, Inc.&#8217;s content management system, but I&#8217;ll be focusing on Lorna D. Keach&#8217;s post entitled <cite>SexFeed:Anti-Porn Activists Now Targeting Female Porn Addicts</cite> for the sake of example.</p>
<p>These fake links look like this in HTML:</p>
<pre><code class="html">And according to Theresa Flynt, vice president of marketing for Hustler video, &lt;span class="linklike" ID="EFLink_68034_fe64d2"&gt;female consumers make up 56% of video sales.&lt;/span&gt;</code></pre>
<p>This originally published <acronym title="HyperText Markup Language">HTML</acronym> is what visitors without JavaScript enabled (and what search engine indexers) see when they access the page. Note that the <code>&lt;span&gt;</code> is not a real link, even though it is made to look like one. (See Figure 1; click it to enlarge.)</p>
<p><strong>Figure 1:</strong></p>
<p><a href="http://maybemaimed.com/wp-content/uploads/2010/05/figure-11.png"><img src="http://maybemaimed.com/wp-content/uploads/2010/05/figure-11-300x241.png" alt="" title="figure-1" width="300" height="241" class="alignnone size-medium wp-image-1759" /></a></p>
<p>In a typical user&#8217;s browser, when this page is loaded, a JavaScript program is executed that mutates these &#8220;linklike&#8221; elements into <code>&lt;a&gt;</code> elements, retaining the &#8220;linklike&#8221; <code>class</code> and the unique <code>id</code> attribute values. However, no value is provided in the <code>href</code> (link destination) attribute of the <code>&lt;a&gt;</code> element. See Figure 2.</p>
<p><strong>Figure 2:</strong></p>
<p><a href="http://maybemaimed.com/wp-content/uploads/2010/05/figure-2.png"><img src="http://maybemaimed.com/wp-content/uploads/2010/05/figure-2-300x241.png" alt="" title="figure-2" width="300" height="241" class="alignnone size-medium wp-image-1760" /></a></p>
<p>The JavaScript program is downloaded in two parts from the endpoint at <code>http://cdn3.edenfantasys.com/Scripts/Handler/jsget.ashx</code>. The first part, retrieved in this example by accessing the <acronym title="Uniform Resource Identifier">URI</acronym> at <code>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&#038;v_14927484.12.0</code>, loads the popular <a href="http://jquery.org/">jQuery JavaScript framework</a> as well as custom code called the &#8220;EF Framework&#8221;.</p>
<p>The EF Framework contains code called the <code>DBLinkHandler</code>, an object that parses the <code>&lt;span&gt;</code> &#8220;linklike&#8221; elements (called &#8220;pseudolinks&#8221; in the EF Framework code) and retrieves the real destination. The entirety of the <code>DBLinkHandler</code> object is shown in <a href="#code-listing-1">code listing 1</a>, below. Note the code contains a function called <code>handle</code> that performs the mutation of the <code>&lt;span&gt;</code> &#8220;linklike&#8221; elements (seen primarily on lines 8 through 16) and, based on the prefix of each elements&#8217; <code>id</code> attribute value, two key functions (<code>BuildUrlForElement</code> and <code>GetUrlByUrlID</code>, whose signatures are on lines 48 and 68, respectively) interact to set up the browser navigation after responding to clicks on the fake links.</p>
<pre id="code-listing-1"><code class="javascript">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 = $("&lt;a&gt;&lt;/a&gt;").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
    }
};</code></pre>
<p>Once the mutation is performed and all the content &#8220;links&#8221; 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, <acronym title="Also Known As">aka</acronym>. classic prototypal inheritance, in another part of the code, the <code>live</code> function on line 2,280 of the (de-minimized) <code>jsget.ashx</code> program, as shown in code listing 2, here:</p>
<pre id="code-listing-2"><code class="javascript">        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
        },
</code></pre>
<p>At this point, clicking on one of the &#8220;pseudolinks&#8221; triggers the EF Framework to call code set up by the <code>GetUrlByUrlID</code> function from within the <code>DBLinkHandler</code> object, initiating an <a href="http://en.wikipedia.org/wiki/XMLHttpRequest">XMLHttpRequest (XHR)</a> connection to the <code>AjaxLinkHandling.aspx</code> server-side application. The request is an <acronym title="HyperText Transfer Protocol">HTTP</acronym> POST containing only one parameter, called <code>urlid</code>, and its value matches a substring from within the <code>id</code> value of the &#8220;pseudolinks.&#8221; In this example, the <code>id</code> attribute contains a value of <code>EFLink_68034_fe64d2</code>, which means that the unique ID POST&#8217;ed to the server is <code>68034</code>. This is shown in Figure 3, below.</p>
<p><strong>Figure 3:</strong></p>
<p><a href="http://maybemaimed.com/wp-content/uploads/2010/05/figure-3.png"><img src="http://maybemaimed.com/wp-content/uploads/2010/05/figure-3-300x199.png" alt="" title="figure-3" width="300" height="199" class="alignnone size-medium wp-image-1761" /></a></p>
<p>The response from the server, shown in Figure 4, is also simple. If successful, the intended destination is retrieved by the <code>GetUrlByUrlID</code> object&#8217;s <code>success</code> function (on line 79 of <a href="#code-listing-1">Code Listing 1</a>, 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.</p>
<p><strong>Figure 4:</strong></p>
<p><a href="http://maybemaimed.com/wp-content/uploads/2010/05/figure-4.png"><img src="http://maybemaimed.com/wp-content/uploads/2010/05/figure-4-300x199.png" alt="" title="figure-4" width="300" height="199" class="alignnone size-medium wp-image-1762" /></a></p>
<p>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 &#8220;linked to&#8221; from EdenFantasys&#8217;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.</p>
<h3>The EdenFantasys Outsourced Link-Farm</h3>
<p>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 &#8220;relationships,&#8221; underhandedly creating an outsourced and distributed link-farm, just like a spammer. The difference is that this spammer (Web Merchants, Inc. <acronym title="Also Known As">aka</acronym> EdenFantasys) is cleverly crowd-sourcing high-value, high-quality content from its own &#8220;community.&#8221;</p>
<p>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, <cite>Anti-Porn Activists Now Targeting Female Porn Addicts</cite>, we can see that <a href="http://www.alternet.org/story/146774/christian_anti-porn_activists_now_targeting_female_">this content was republished on AlterNet.org</a> shortly after original publication through EdenFantasys&#8217; website on May 3<sup>rd</sup> at <code>http://www.alternet.org/story/146774/christian_anti-porn_activists_now_targeting_female_</code>. However, a closer look at the <acronym title="HyperText Markup Language">HTML</acronym> 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.</p>
<p><strong>Figure 5:</strong></p>
<p><a href="http://maybemaimed.com/wp-content/uploads/2010/05/figure-5.png"><img src="http://maybemaimed.com/wp-content/uploads/2010/05/figure-5-300x199.png" alt="" title="figure-5" width="300" height="199" class="alignnone size-medium wp-image-1763" /></a></p>
<p>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 &#8220;natural,&#8221; high-value links to the EdenFantasys website from these third-party sites; EdenFantasys doesn&#8217;t merely scrounge pagerank from harvesting the sheer number of incoming links, but as each link&#8217;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.</p>
<p>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 <q>provide attribution and a link back to us</q>, 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 &#8220;link exchanges,&#8221; 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.</p>
<p><a href="http://aagblog.com/2005/10/17/problems-with-edenfantasyscom/">More information about EdenFantasys&#8217;s unethical practices</a>, which are not limited to technical subterfuge, can be <a href="http://aagblog.com/?s=edenfantasys">obtained via AAGBlog.com</a>.</p>
<h3 id="editorial">EDITORIAL</h3>
<p>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.</p>
<p>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&#8217;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. <acronym title="Also Known As">aka</acronym> EdenFantasys.</p>
<p>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 <em>trusted</em> place for the community which they claim to serve. These practices are exactly the ones that &#8220;the sex shop you can trust&#8221; should in no way support, far less be actively engaged in. And yet, here is unmistakable evidence that EdenFantasys is doing <em>literally</em> everything it can not only to bolster its own web presence at the cost of others&#8217;, but to hide this fact from its understandably non-tech-savvy contributors.</p>
<p>On a personal note, I am angered that I would be contacted by the Editor of SexIs Magazine, and asked to properly &#8220;attribute&#8221; and provide a link to <em>them</em> 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:</p>
<blockquote><p>From: Judy Cole &lt;luxuryholmes@gmail.com&gt;<br />
Subject: Repost mis-attributed<br />
Date: May 17, 2010 2:42:00 PM PDT<br />
To: kinkontap+viewermail@gmail.com<br />
Cc: Laurel &lt;laurelb@edenfantasys.com&gt;</p>
<p>Hello Emma and maymay,</p>
<p>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: </p>
<p>http://kinkontap.com/?s=alternet</p>
<p>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.</p>
<p>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.)</p>
<p>Thanks and Best Regards,</p>
<p>Judy Cole<br />
Editor, SexIs</p></blockquote>
<p>Judy&#8217;s email <em>probably</em> intended to reference the new <a href="http://kinkontap.com/?cat=11">Kink On Tap briefs</a> 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: <a href="http://KinkOnTap.com/?p=676">http://KinkOnTap.com/?p=676</a>. I said as much in my reply to Judy:</p>
<blockquote><p>Hi Judy,</p>
<p>The <acronym title="Uniform Resource Locator">URL</acronym> in your email doesn&#8217;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?</p>
<p>   <a href="http://KinkOnTap.com/?p=676">http://KinkOnTap.com/?p=676</a></p>
<p>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&#8217;m sure you understand, this is the nature of the Internet. Its distribution capability is remarkable, isn&#8217;t it?</p>
<p>Also, while we&#8217;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:</p>
<p>   <a href="http://wiki.kinkontap.com/wiki/Community_links_feed">http://wiki.kinkontap.com/wiki/Community_links_feed</a></p>
<p>Congratulations on the continued success of SexIs.</p>
<p>Cheers,<br />
-maymay</p></blockquote>
<p>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 &#8220;re-posts,&#8221; 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 <a href="http://kinkontap.com/?cat=11">see some Kink On Tap briefs for yourself</a>), and clearly demarcating quotes from the source article in our editorializing to ensure we play fair. Clearly, my somewhat snarky reply betrays my annoyance.</p>
<p>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&#8217;s technical subterfuge would be as pervasive as it has proven to be. It&#8217;s so deeply embedded in the EdenFantasys publishing platform that I&#8217;m willing to give Judy the benefit of the doubt regarding this hypocrisy because she doesn&#8217;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:</p>
<blockquote><p>From: Judy Cole &lt;luxuryholmes@gmail.com&gt;<br />
Subject: Re: Repost mis-attributed<br />
Date: May 18, 2010 4:57:59 AM PDT<br />
[&hellip;redundant email headers clipped&hellip;]</p>
<p>Funny, the <acronym title="Uniform Resource Locator">URL</acronym> in my email opens the same link as the one you sent me when I click on it. </p>
<p>Maybe if you pick up one of our stories in future, you could just say something like &#8220;so and so wrote for SexIs.&#8221; ?</p>
<p>As it stands, it looks as if Lorna wrote the piece for Alternet. Thanks.</p>
<p>Judy</p></blockquote>
<p>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 <em>everyone</em> who has an interest in seeing honesty on the Internet to follow my lead here.</p>
<p>As some of my friends are currently contributors to SexIs Magazine, I would like all of you to know that <strong>I sincerely hope you immediately sever all ties with any and all Web Merchants, Inc. properties, suppliers, and business partners</strong>, 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).</p>
<h4 id="what-you-can-do">What you can do</h4>
<ul>
<li>If you are an EdenFantasys reviewer, a SexIs Magazine contributor, or have any other arrangement with Web Merchants, Inc., <strong><a href="mailto: luxuryholmes@gmail.com?subject=EdenFantasys%20and%20SexIs%20Magazine%20must%20conduct%20themselves%20ethically%20or%20I%20quit%20now">write to Judy Cole</a></strong> 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&#8217;ll do my best to help you sort out any l33t answers.)</li>
<li>EdenFantasys wants to stack the deck in Google. They do this by misusing your content and harvesting your links. To combat this effort, <strong>immediately remove any and all links to EdenFantasys websites and web presences</strong> from your websites. Furthermore, do not&mdash;I repeat&mdash;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&#8217; posts about this issue. (Such posts will probably be mentioned in <a href="#comments">the comments section of this post</a>.)</li>
<li><strong>Boycott EdenFantasys</strong>: 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&#8217;re interested in, but then go buy those products elsewhere, perhaps from the manufacturers directly.
<ul>
<li>On the recommendation of my friend <a href="http://charlieglickman.com/">Dr. Charlie Glickman</a>, I suggest <a href="http://www.goodvibes.com/">Good Vibrations</a>.</p>
<li>On the recommendation of <a href="http://maybemaimed.com/2010/04/26/femquaker-shanna-katz-sex-positive-sexuality-educator/">my friend Shanna Katz</a>, I also recommend <a href="http://funlove.com/">Fascinations</a>.</li>
</ul>
</li>
<li><strong>Watch for &#8220;improved&#8221; technical subterfuge from Web Merchants, Inc.</strong> 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&#8217;re &#8220;just&#8221; a savvy blogger, you can keep a close watch on EdenFantasys and, if you notice <em>anything</em> that doesn&#8217;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.</li>
</ul>
<p>If you have additional ideas or recommendations regarding how more people can help keep sex toy retailers honest, please suggest them in the comments.</p>
<p><ins datetime="2010-05-19T20:32:44+00:00"><strong>Update:</strong> To report website spamming or any kind of fraud to Google, use the <a href="https://www.google.com/webmasters/tools/spamreport?pli=1">authenticated Spam Report tool</a>.</ins></p>
<p><ins datetime="2010-05-20T00:07:22+00:00">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 <a href="http://www.google.com/support/webmasters/bin/answer.py?answer=66355">Cloaking, sneaky Javascript redirects, and doorway pages</a> at the Google Webmaster Tools help site for additional <acronym title="Search Engine Optimization">SEO</acronym> information. Using Google&#8217;s terminology, EdenFantasys&#8217;s unethical technology is a very skilled mix of social engineering and &#8220;sneaky JavaScript redirects.&#8221;</ins></p>
]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2010/05/19/web-merchants-inc-edenfantasys-unethical-technology/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>How to work around &#8220;sorry, you must have a tty to run sudo&#8221; without sacrificing security</title>
		<link>http://maymay.net/blog/2010/03/17/how-to-work-around-sorry-you-must-have-a-tty-to-run-sudo-without-sacrificing-security/</link>
		<comments>http://maymay.net/blog/2010/03/17/how-to-work-around-sorry-you-must-have-a-tty-to-run-sudo-without-sacrificing-security/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 01:21:50 +0000</pubDate>
		<dc:creator>Meitar</dc:creator>
				<category><![CDATA[Bash/Shell Scripting]]></category>
		<category><![CDATA[Security & Privacy]]></category>
		<category><![CDATA[Tech/Computing]]></category>
		<category><![CDATA[Unix/Linux]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/?p=1208</guid>
		<description><![CDATA[While working on $client&#8216;s Linux server last week, I found myself installing a cron job that ran as root. The cron job called a custom bash script that, in turn, called out to various custom maintenance tasks client had already written. One task in particular had to run as a different user. During testing, I [...]]]></description>
			<content:encoded><![CDATA[<p>While working on $<var>client</var>&#8216;s Linux server last week, I found myself installing a cron job that ran as <code>root</code>. The cron job called a custom bash script that, in turn, called out to various custom maintenance tasks <var>client</var> had already written. One task in particular had to run as a different user.</p>
<p>During testing, I discovered that the odd-ball task failed to run, and found the following error in the system log:</p>
<pre>sudo: sorry, you must have a tty to run sudo</pre>
<p>I traced this error to a line trying to invoke a <code>perl</code> command as a user called <code>dynamic</code>:</p>
<pre>sudo -u dynamic /usr/bin/perl run-periodic-tasks --load 5 --randomly</pre>
<p>A simple Google search turned up an obvious solution to the error: <a href="http://www.adminmyserver.com/articles/sorry-you-must-have-a-tty-to-run-sudo">use <code>visudo</code> to disable sudo&#8217;s tty requirement</a>, allowing <code>sudo</code> to be invoked from any shell lacking a tty (including <code>cron</code>). This would have solved my problem, but it just felt wrong, dirty, and most troublingly <em>insecure</em>.</p>
<p>One reason why <code>sudo</code> ships with the <code>requiretty</code> option enabled by default is, among other reasons, to <a href="http://www.cyberciti.biz/faq/linux-unix-bsd-sudo-sorry-you-must-haveattytorun/">prevent remote users from exposing the root password over <acronym title="Secure SHell">SSH</acronym></a>. Disabling this security precaution for a simple maintenance task <em>already running as root</em> seemed totally unnecessary, not to mention irresponsible. Moreover, <var>client</var>&#8216;s script didn&#8217;t even need a tty.</p>
<p>Thankfully, there&#8217;s a better way: use <code>su --session-command</code> and send the whole job to the background.</p>
<pre>su --session-command="/usr/bin/perl run-periodic-tasks --load 5 --randomly" dynamic &#038;</pre>
<p>This line launches a new, non-login shell (typically <code>bash</code>) <em>as the other user</em> in a separate, background process and runs the command you passed using the shell&#8217;s <code>-c</code> option. Sending the command to the background (using <code>&#038;</code>) continues execution of the rest of the cron job.</p>
<p>A process listing would look like this:</p>
<pre>root     28109     1  0 17:10 ?        00:00:00 su --session-command=/usr/bin/perl run-periodic-tasks --load 5 --randomly dynamic
dynamic  28110 28109  0 17:10 ?        00:00:00 bash -c /usr/bin/perl run-periodic-tasks --load 5 --randomly</pre>
<p>Note the parent process (PID 28109) is owned by root but the actual <code>perl</code> process (PID 28110) is being run as <code>dynamic</code>.</p>
<p>This in-script solution that replaces <code>sudo -u <var>user</var> <var>cmd</var></code> with <code>su --session-command=<var>cmd</var> <var>user</var></code> seems much better than relying on a change in <code>sudo</code>&#8216;s default (and more secure) configuration to me.</p>
]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2010/03/17/how-to-work-around-sorry-you-must-have-a-tty-to-run-sudo-without-sacrificing-security/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Crosspost: My impressions on the new “sex-positive social network” Blackbox Republic</title>
		<link>http://maymay.net/blog/2009/12/14/blackbox-republic-social-network-review/</link>
		<comments>http://maymay.net/blog/2009/12/14/blackbox-republic-social-network-review/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 19:46:29 +0000</pubDate>
		<dc:creator>Meitar</dc:creator>
				<category><![CDATA[Branding & Identity]]></category>
		<category><![CDATA[Business & E-Commerce]]></category>
		<category><![CDATA[Crosspost]]></category>
		<category><![CDATA[Information & Communication]]></category>
		<category><![CDATA[Internet Marketing]]></category>
		<category><![CDATA[Maybe Maimed]]></category>
		<category><![CDATA[Tech News]]></category>
		<category><![CDATA[Tech/Computing]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Writing and blogging]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/?p=1041</guid>
		<description><![CDATA[This post was originally published on my other blog, a much more Not Safe For Work site, at maybemaimed.com. However, it turns out that blog is censored in various countries, such as Dubai. Gotta love Internet censorship. Sigh. Anyways, since I think the material there is interesting and technology-relevant, and in order to help people [...]]]></description>
			<content:encoded><![CDATA[<p>This post was <a href="http://maybemaimed.com/2009/12/12/my-impressions-on-the-new-sex-positive-social-network-blackbox-republic/">originally published on my other blog</a>, a much more Not Safe For Work site, at <a href="http://maybemaimed.com/2009/12/12/my-impressions-on-the-new-sex-positive-social-network-blackbox-republic/">maybemaimed.com</a>. However, it turns out that blog is <a href="http://identi.ca/notice/16736914">censored in various countries, such as Dubai</a>. Gotta love Internet censorship. <em>Sigh.</em> Anyways, since I think the material there is interesting and technology-relevant, and in order to help people avoid Internet censorship, I&#8217;m cross-posting the contents here. Enjoy.</p>
<hr />
<p>Social media. Internet publishing. Privacy. Three phrases that have seemed to be at tenacious odds with each other in a multitude of subtle and not-so-subtle ways. For people like me, who have progressive views about sexuality, these three things are constantly on our minds. How do we participate in the online revolution without being forced to &#8220;come out&#8221; about every sex act we enjoy, some of which are still illegal thanks to <a href="http://malesubmissionart.com/post/271520580/in-forbidding-darkness-a-young-man-is">draconian restrictions on sexual freedom</a>, <a href="http://maybemaimed.com/2009/11/01/on-youth-sexuality-education-and-your-fears/">even (and especially?) in America</a>.</p>
<p>This month, a new social network called <a href="http://blackboxrepublic.com/">Blackbox Republic</a> (BBR) is attempting to tackle this head-on and aims to create a place for, <a href="http://www.readwriteweb.com/archives/can_blackbox_republic_breathe_new_life_into_the_on.php">as Marshall Kirkpatrick put it</a>, this particular <q cite="http://www.readwriteweb.com/archives/can_blackbox_republic_breathe_new_life_into_the_on.php">large and unserved group of people</q>. Although BBR is clearly a business, it&#8217;s a business whose creators have laudable intentions for positive social and cultural change. In that respect, and in many others, Blackbox Republic is worth a close look.</p>
<p>I was informed about the venture via <a href="http://clarissethorn.wordpress.com/">Clarisse Thorn</a> many months ago. I got in touch with BBR and signed up for a limited-offer &#8220;founder&#8221; account—basically a private beta. The founder account gave me free access to the <a href="http://www.blackboxrepublic.com/private-and-social">features of the BlackboxRepublic.com website</a> for what would <a href="http://www.blackboxrepublic.com/dues">normally be a $25 monthly subscription fee</a>. </p>
<p>So, without further ado, here are my impressions about Blackbox Republic, and how its launch may be just what the Internet needs to get us moving in the right direction with regards to personal privacy, and mainstream awareness of the different needs of different people on the Internet.</p>
<h2>Mainstream sex-positivity or a VIP room in cyberspace? Or both?</h2>
<p>Over the past few months, Blackbox Republic has been building a marketing arsenal of anticipation and intrigue. Its creators are successful in non-sexuality-focused spheres of influence: <a href="http://www.linkedin.com/in/samlawrence">Sam Lawrence</a> is the respected former Chief Marketing Officer of <a href="http://www.jivesoftware.com/">Jive Software, Inc.</a>, and April Donato, has experience in community management. They also both jive (pun!) well with the sex-positive movement, discussing it at length in the early stages of their marketing efforts after de-cloaking the new company.</p>
<p>In <a href="http://www.socialnetworkingwatch.com/2009/08/sam-lawrence-ceo-of-blackbox-republic.html">an interview for Social Networking Watch</a>, Sam Lawrence said,</p>
<blockquote cite="http://www.socialnetworkingwatch.com/2009/08/sam-lawrence-ceo-of-blackbox-republic.html"><p>[<strong>Sam Lawrence:</strong>] The co-founder [April Donato] and myself are part of [the sex-positive] community. Sex positive means that your sexuality is not an issue. You don’t have an issue with other people’s sexuality. You’re open to what other people are interested in and what their boundaries are, and you’re open with your own.</p>
<p>[…]</p>
<p>[<strong>Interviewer:</strong>] To what extent do you practice a sex-positive lifestyle?</p>
<p>[<strong>Sam Lawrence:</strong>] From the perspective of sex not being an issue, I think that love is generated by people being open enough about who they are as people to put all of themselves out on the table. As far as putting all of myself on the table, it’s something that I do every single day.</p></blockquote>
<p>I have an enormous amount of respect for anyone able to so capably present themselves as authentically as Sam does. On the eve of <a href="http://kinkforall.pbworks.com/KinkForAllNewYorkCity2Schedule">KinkForAll New York City 2</a>, I met Sam and April at one of their &#8220;founder meetups&#8221; and had the chance to talk to them face-to-face. Our conversation revolved around the importance of steadfastly holding true to one&#8217;s own desires and having appropriate places to express those things with appropriate communication tools. I really liked their emphasis on self-identification over labeling throughout our discussion.</p>
<p>I also really appreciated the way that Sam and April spoke about their target audience. Blackbox Republic will welcome everyone, but it&#8217;s not <em>designed</em> for everyone, and I think that&#8217;s a good thing. <a href="http://onlinedatingpost.com/archives/2009/12/blackbox-republic-remixs-dating-love-and-social-life/">David Evans writing at Online Dating Post says</a>,</p>
<blockquote cite="http://onlinedatingpost.com/archives/2009/12/blackbox-republic-remixs-dating-love-and-social-life/"><p>BBR has room for everyone, but is not for everyone. Definitely catering to non-mainstream folks, it will soon feature a constellation of micro-communities, or groups, called Camps. BBR doesn’t tell people how to organize their camps; we’ll do it ourselves, thankyouverymuch.</p></blockquote>
<p>So is Blackbox Republic a dating site, or a social network? Well, both, kind of. Part of BBR&#8217;s slogan includes, &#8220;Dates will happen. Sex will happen. It matters how you get there.&#8221; The implication, of course, being that the current suite of tools for finding love or play online—sites like <a href="http://alt.com/">Alt.com</a>, <a href="http://okcupid.com/">OkCupid</a>, and <a href="http://craigslist.org/">countless</a> <a href="http://personals.nerve.com/">personals</a> <a href="http://personals.yahoo.com/">boards</a>—focus too strongly on the end result, turning matchmaking into a meat market instead of the natural process of getting to know one another. The focus BBR is placing on each person&#8217;s &#8220;journey&#8221; is an extremely welcome paradigm shift in the online dating world.</p>
<p>Along with the welcome and (IMHO, painfully obviously better) new approach to online dating, however, Blackbox Republic faces some real challenges. For new users, the service costs a minimum of $5 a month to use (and $9 per month for new sign-ups starting in 2010), which gives access to basic features like a personal profile. For $25 a month, members get added features like the ability to list real-world meet-ups, send private messages, and partake in a virtual &#8220;gifting&#8221; economy (think LiveJournal&#8217;s &#8220;<a href="http://www.livejournal.com/shop/vgift.bml?cat=gifts">virtual gifts</a>&#8220;).</p>
<p>For that reason, BBR has been called a &#8220;members-only club.&#8221; There are some legitimate differences of opinion as to whether this is a positive or a negative thing. In a press release over the summer, <a href="http://blogs.zdnet.com/collaboration/?p=741">Blackbox Republic is reported as stating</a>:</p>
<blockquote cite="http://blogs.zdnet.com/collaboration/?p=741"><p>Blackbox Republic will be a members-only experience that will unite the sex-positive community and give them a personal, private and secure way to connect online and in person.</p></blockquote>
<p>Writing for ZDNet, <a href="http://blogs.zdnet.com/collaboration/?p=1123">Oliver Marks likens Blackbox Republic&#8217;s approach to online dating to the fashionability of owning an Apple computer</a>:</p>
<blockquote cite="http://blogs.zdnet.com/collaboration/?p=1123"><p>Think of Blackbox Republic as a fashionable online ‘members-only’ club where you might expect to meet people with similar interests to your own, and ideally the person of your dreams. […] Blackbox Republic is arguably an Apple product to Facebook’s Windows look &#038; feel: a much more intimately crafted, fuller featured personal user interface which should appeal to Apple generation sensibilities.</p></blockquote>
<div id="attachment_1163" class="wp-caption alignright" style="width: 310px"><a href="http://maybemaimed.com/wp-content/uploads/2009/12/bbr-chic-new-club-design-screenshot.png"><img src="http://maybemaimed.com/wp-content/uploads/2009/12/bbr-chic-new-club-design-screenshot-300x214.png" alt="Many pages on Blackbox Republic&#039;s website showcase fashionably dressed women." title="bbr-chic-new-club-design-screenshot" width="300" height="214" class="size-medium wp-image-1163" /></a><p class="wp-caption-text">Many pages on Blackbox Republic's website showcase fashionably dressed women.</p></div>
<p>Indeed, almost everything about Blackbox Republic&#8217;s marketing and design seems to me as though it&#8217;s positioning itself as the equivalent of the hip, new, <em>and exclusive</em> nightclub down the street. There are images of super-chic women in short skirts and tight pants all over the Blackbox Republic promotional pages—way more than there are pictures of men. I was (yet again) <a href="http://malesubmissionart.com/post/270107422/an-uncircumcised-dark-skinned-man-lays-on-his-side">put-off by this over-prevalence of women in all advertising material</a>.</p>
<p>This isn&#8217;t really a criticism of the site, but rather a statement of disappointment that the marketing gurus behind the effort seemed to me to have succumbed to overwhelming cultural pressure to sell their site with <a href="http://malesubmissionart.com/post/168794536/a-naked-man-lays-on-a-bed-next-to-a-video-camera">old-school sex appeal: women&#8217;s sex appeal, of course</a>. How…traditional.</p>
<p>Not only is the <a href="http://twitter.com/maymaym/statuses/6486477499">Blackbox Republic intro video markedly gender-skewed</a>, but somewhere along the line <a href="http://www.xconomy.com/seattle/2009/12/09/blackbox-republic-no-longer-just-sex-positive-opens-alternative-social-site/">Sam and April decided to drop the &#8220;sex-positive&#8221; phraseology from their marketing</a>:</p>
<blockquote cite="http://www.xconomy.com/seattle/2009/12/09/blackbox-republic-no-longer-just-sex-positive-opens-alternative-social-site/"><p>[L]ike most startups, Blackbox decided it needed to change up. Observers were confused by the sex-positive label.</p></blockquote>
<p>Oh well. I think this just goes to further showcase how much more social change we really need in our culture.</p>
<p>However, while the clubby, cliquey feel is totally my own subjective perception, there are other issues at play here, too. Most notably, as Clarisse Thorn and many others rightfully remind us very often, <a href="http://clarissethorn.wordpress.com/2009/04/17/my-kinkforall-nyc-presentation/">the sex-positive movement is overwhelmingly white</a>, middle- to upper-class, college-educated, and privileged in a huge number of ways that many people often take for granted. Even without a for-pay social network, not everyone who wants to <em>can</em> participate in the great-sex-for-everyone party atmosphere of many sex-positive niches.</p>
<p>Will creating a &#8220;members-only club&#8221; of sex-positivity on the Internet really be a positive thing for &#8220;the movement&#8221;? Well, maybe. Although it has the potential to exclude lower-income people from the experience, who are sadly also often the people with the most pressing need for the kinds of privacy-related tools BBR offers (school teachers spring to mind!), one upside is that <a href="http://www.socialnetworkingwatch.com/2009/08/sam-lawrence-ceo-of-blackbox-republic.html">Blacbox Republic promises to pledge a portion of membership dues to a charity of the user&#8217;s choice</a>.</p>
<blockquote cite="http://www.socialnetworkingwatch.com/2009/08/sam-lawrence-ceo-of-blackbox-republic.html"><p> It’s $25 a month and $5 of those community dues go to charity. One way to think about it is if you’re sex-positive, you can either spend money on expensive coffee every month or upgrade your social life and meet other sex-positive people like you.</p></blockquote>
<p>Inescapably, the major selling point of any social network is, of course, the network! If your friends aren&#8217;t on Twitter, then you&#8217;re probably not going to find it useful. The same truth holds for Blackbox Republic: if the users you want to interact with aren&#8217;t there, I doubt you&#8217;re going to find the experience fruitful. Due to the membership fees and the socioeconomic realities of the sex-positive community, I&#8217;m concerned that BBR&#8217;s current business model is <em>too</em> exclusive, and as a result it will have a lot of trouble attracting the kind of diverse community its creators seem to be hoping for.</p>
<p>Yet, some others think differently (pun!). For instance, <a href="http://www.accmanpro.com/2009/07/15/blackbox-republic-and-the-sex-positive-community/">Dennis Howlett welcomes the for-pay model for a social network</a>:</p>
<blockquote cite="http://www.accmanpro.com/2009/07/15/blackbox-republic-and-the-sex-positive-community/"><p>anyone can join provided they’re willing to pay the $25 a month (I like that he has a pay model from the get go. That sorts out the weirdos and hangers on from day one)</p></blockquote>
<p>I wonder if adopting a <a href="http://en.wikipedia.org/wiki/Freemium">free-mium</a> approach might work better. Still, there are real-world limits to business. Everyone needs to make money, and I don&#8217;t think Blackbox Republic&#8217;s business model is inherently more exclusive than, say, purchasing access to porn. If anything, BBR&#8217;s got some real promise to inject much-needed financial awareness to the sexually insensitive corporate infrastructure of our society. Nevertheless, convincing people to join &#8220;the Republic&#8221; is going to be a hard sell.</p>
<h2>Show me the features!</h2>
<p>Let&#8217;s say you do decide to join. What do you get? Other than the sex-positive mindset, what&#8217;s the benefit?</p>
<p>Well, the bulk of the experience is what you&#8217;d expect. Profiles (called &#8220;personas&#8221;), messaging, user search capabilities (called &#8220;explore&#8221;), and so forth. A Twitter-like &#8220;activity stream&#8221; dominates the main page where you can post text, picture, or video status updates. Event listings fill the sidebar. (I&#8217;m not going to provide internal screenshots in deference to <a href="http://www.blackboxrepublic.com/faq">BBR&#8217;s strict confidentiality rules</a>.)</p>
<p>While that&#8217;s fun, it&#8217;s nothing special. What makes Blackbox Republic different is flexibility, and privacy.</p>
<h3>Goodbye drop-downs, hello sliders!</h3>
<div id="attachment_1165" class="wp-caption alignright" style="width: 260px"><a href="http://maybemaimed.com/wp-content/uploads/2009/12/bbr-sliders-screenshot.png"><img src="http://maybemaimed.com/wp-content/uploads/2009/12/bbr-sliders-screenshot-250x300.png" alt="An innovative new interface acknowledges (most of) the diversity in human sexual experience and desire." title="bbr-sliders-screenshot" width="250" height="300" class="size-medium wp-image-1165" /></a><p class="wp-caption-text">An innovative new interface acknowledges (most of) the diversity in human sexual experience and desire.</p></div>
<p>Blackbox Republic&#8217;s most visible feature is the way its interface allows you to flexibly self-identify various facets of yourself. Rather than give you static drop-down menus or radio buttons for things like your sexual orientation and relationship status, you&#8217;re presented with sliders you can change at will. Perhaps you&#8217;re feeling particularly same-sex attracted one day. Just move the &#8220;Orientation&#8221; slider towards the &#8220;Gay&#8221; end and away from the &#8220;Hetero&#8221; end. If that changes tomorrow, just move the slider back. Sho-weet!</p>
<p>BBR offers you 5 different sliders for your profile. In addition to the one for sexual orientation, you also get one for relationship &#8220;status&#8221; (ranging from attached to unattached, with Facebook&#8217;s famous &#8220;it&#8217;s complicated&#8221; neatly in the middle), whether you&#8217;re available for more partners or not, how comfortable you are with casual sexual activity, and how eagerly you&#8217;re looking to par-tay. I&#8217;m instantly reminded of <a href="http://fetlife.com/">FetLife</a>&#8216;s innovative, if dull-looking, mechanism for specifying multiple relationships. Blackbox Republic gives you similar flexibility as FetLife does but presented in a superb and far more intuitive interface.</p>
<p>All that said, one slider is conspicuously missing: the one for gender. The sliders are a very interesting idea and might just be the most innovative feature of the entire site. It speaks volumes about the sensitive and thoughtful mindset of the developers, and that&#8217;s why I&#8217;m so disappointed that the interface for self-identifying gender is relegated to the Sex 1.0 days of a single, binary option of &#8220;male&#8221; or &#8220;female.&#8221;</p>
<p>What gives? Are polyamorous people more welcome here than those who don&#8217;t fit the gender binary? I hope this is simply an omission that will be fixed as the service matures, since I couldn&#8217;t find any other reason why gender was absent from the sliders. For extra credit, I hope to see <em>different</em> profile options for &#8220;Sex&#8221; and &#8220;Gender,&#8221; two distinct concepts that frequently and incorrectly get used interchangeably. This would make it possible to represent complex gender presentations like <a href="http://sexpositive.wikia.com/wiki/Additive_gender">additive gender</a> on a social networking interface for the first time ever, and that&#8217;d totally be something to write home about!</p>
<h3>Privacy and security</h3>
<p>The other major selling point of Blackbox Republic is its careful attention to privacy. The entire offering, including its name, is predicated on letting users very carefully segment their information based on their privacy boundaries. I love some of the things BBR has done to enable this, and I can only imagine it&#8217;s going to get better from here.</p>
<h4>Blackbox Republic&#8217;s Web of Trust</h4>
<p>There are three levels of privacy, which (as far as I can figure out) map directly to the level of trust other members have gained within the Republic&#8217;s community. It works like a <a href="http://en.wikipedia.org/wiki/Web_of_trust">web of trust</a>. New users are &#8220;un-vouched.&#8221; As they begin to interact with others on the site and, hopefully, make some friends, they should receive &#8220;vouches&#8221;—or votes of trust—from previously-vouched members. As a member, you get to control whether something you do, such as posting a status update, gets sent to the &#8220;public,&#8221; (i.e., the entire public-facing Internet), to all Blackbox Republic members (i.e, to both vouched and un-vouched members) or only to vouched members.</p>
<p>Additionally, privacy settings allow you to specify whether you want to allow un-vouched members to send you private messages, to follow your updates, to comment on your posts, or to see you in search results.</p>
<p>Unlike Facebook, which has very good privacy controls that almost nobody on Earth is aware of (thus negating the control&#8217;s usefulness), Blackbox Republic makes it a point to highlight their privacy controls at just about every sensical turn. Each of the settings I found defaults to the most private setting, not the most public, which is exactly the right move. I gotta say, I found turning <em>off</em> privacy settings instead of having to turn (or leave) them on to be a really empowering feeling.</p>
<h4>You&#8217;re not a &#8220;friend,&#8221; you&#8217;re an acquaintance!</h4>
<p>Moreover, the Blackbox Republic platform makes a native distinction between &#8220;friends&#8221; (again, like Facebook, or FetLife) and &#8220;followers&#8221; (like Twitter). When I friend someone, I&#8217;m connected to them in a way that I&#8217;m not if I just follow someone. I&#8217;m not yet certain what the practical distinction between &#8220;friending&#8221; and &#8220;following&#8221; are, other than the fact that your view of the people you&#8217;re connected with is segmented based on which button you clicked, but I think the distinction is a very appropriate and natural one to embed in the software.</p>
<p>This separation is probably the single most important innovation in the space of social networks as a medium of communication and collaboration that I can point at. I love that I can indicate without ambiguity which people I want to remain in constant communication with and which I simply want to watch from a distance. After all, aren&#8217;t at least <em>some</em> of your &#8220;friends&#8221; on Facebook really just &#8220;acquaintances&#8221; in reality? I think that for the first time ever in a social network, Blackbox Republic gets this feature right. Now, if only I could figure out what it actually <em>does</em>. :)</p>
<h4>What? No on-the-wire encryption?!</h4>
<p>With all that being said, there&#8217;s still at least one really frightening problem with Blacbox Republic&#8217;s careful attention to privacy: as far as I could tell, no part of my session is <a href="http://en.wikipedia.org/wiki/Transport_Layer_Security"><acronym title="Secure Sockets Layer">SSL</acronym>/TLS</a> encrypted!</p>
<div id="attachment_1164" class="wp-caption alignleft" style="width: 310px"><a href="http://maybemaimed.com/wp-content/uploads/2009/12/bbr-login-screen.png"><img src="http://maybemaimed.com/wp-content/uploads/2009/12/bbr-login-screen-300x263.png" alt="Stunningly, for a site that sells privacy, not even Blackbox Republic&#039;s login form is on a secure page." title="bbr-login-screen" width="300" height="263" class="size-medium wp-image-1164" /></a><p class="wp-caption-text">Stunningly, for a site that sells privacy, not even Blackbox Republic's login form is on a secure page.</p></div>
<p>The entire BlackboxRepublic.com website is served over <acronym title="HyperText Transfer Protocol">HTTP</acronym>, including the login form and—again, as far as I could tell—every  page on the <em>inside</em> of the site. This means that it&#8217;s trivial for malicious people who don&#8217;t even have a Blackbox Republic subscription to intercept, eavesdrop, and modify my interaction with the site. They could watch—and save—private messages between me and one of my friends (or lovers!), for instance.</p>
<p>In Blackbox&#8217;s defense, I don&#8217;t know of any social network that protects you from this. FetLife is another example of a website that should seriously consider <acronym title="HyperText Transfer Protocol Secured; HTTP over SSL">HTTPS</acronym>-only pages, but as of this writing hasn&#8217;t implemented it. Therein lies one of the most frightening oversights in the entire social networking space: regardless of so-called privacy settings, everything you do on the vast majority of social networks, blogs, and other sites on the Internet are the equivalent of passing notes between friends in a classroom. Better hope that big bully who likes to steal your lunch money doesn&#8217;t open the note and read it himself while he&#8217;s passing along your login details!</p>
<p>The thing is, few other social networking sites place so strong a spotlight on user privacy and security. Since Blackbox Republic seems to be nobly and rightfully holding itself up to a new standard of privacy, I feel justified in pointing out this glaring omission in their service offering. Given everything else they&#8217;ve done <em>so well</em>, and how well-aligned the majority of their technical implementation seems to be with their philosophy, this omission came as a big surprise to me.</p>
<p>Until Blackbox Republic only serves <acronym title="HyperText Transfer Protocol Secured; HTTP over SSL">HTTPS</acronym> traffic for all private areas of their site, I can&#8217;t make a recommendation in good conscious that it&#8217;s the place to be for privacy-conscious people. But again, despite public opinion to the contrary, I&#8217;ve never been able to make that claim for FetLife either.</p>
<h2>Conclusion</h2>
<p>Blackbox Republic is one of the most interesting websites on the Internet today. Its privacy-conscious and sexually open approach to social networking and online dating deserves huge praise. Its technical implementation—although plagued with some glaring oversights for now—is to be seriously respected.</p>
<p>From a social change perspective, I think the site is a mixed bag. Its exclusivity arguably makes the insularity of the sexuality communities an even bigger problem than it already is. On the other hand, the market-value of that very same exclusivity, if steered toward a benevolent purpose, can end up benefiting philanthropic, non-profit, and other sex-positive endeavors that often struggle to find necessary financial support.</p>
<p>Moreover, Blackbox Republic&#8217;s internal gifting economy does seem to encourage a sort of altruistic nature among members. How that may or may not translate into increased support for non-commercial activists has yet to be seen. Nay-sayers should remember that this kind of thing simply hasn&#8217;t been done before and the net effect could be quite positive.</p>
<p>Having just launched, however, I don&#8217;t think Blackbox Republic should be touted as the go-to site for sex-positive people quite yet. Like other social networks, it needs to grow to become truly useful, and its subscription fee business model poses a serious obstacle to many people. I was fortunate to get in with a free &#8220;founder&#8221; account, but I have mixed feelings about encouraging my friends to join me knowing they—or someone nice enough to &#8220;gift&#8221; a limited-time subscription to them—will have to pay for the service.</p>
<p>Additionally, its focus on being, well, a black box and <a href="http://www.xconomy.com/seattle/2009/12/09/blackbox-republic-no-longer-just-sex-positive-opens-alternative-social-site/">its commitment to not allow Google or other search engines to index its internal content</a> simply doesn&#8217;t resonate that strongly with me.</p>
<blockquote cite="http://www.xconomy.com/seattle/2009/12/09/blackbox-republic-no-longer-just-sex-positive-opens-alternative-social-site/"><p>Lawrence emphasizes that what members say in Blackbox Republic will stay private. There’s no danger of what they post inside becoming part of their “Google resume,” as he puts it. He says he would resist efforts from search engines to index content the way Facebook and Twitter allow. “The value proposition is this is the first private, large social network out there,” Lawrence says.</p></blockquote>
<p>Put simply, and noting that I&#8217;m probably not the majority case here, <a href="http://maybemaimed.com/2009/11/14/online-reputation-management-for-sex-bloggers-when-a-tweet-wont-do/">I <em>rely</em> on my &#8220;Google résumé,&#8221;</a> to use Sam&#8217;s words, to live the life I want. My lukewarm reaction to this isn&#8217;t a criticism of the goal, simply an observation that it turns out I&#8217;m not in the ideal target market for Blackbox Republic&#8217;s value proposition.</p>
<p>In other words, I think I&#8217;m &#8220;too out&#8221; for this site to be immediately useful to me. The fact that FetLife is not readily available to the public Internet is the single biggest reason why I don&#8217;t sign on to that site very often, and so I have the same reason not to spend all that much time behind the curtains of Blackbox Republic.</p>
<p>Nevertheless, many other people do. If you&#8217;re among the cross-section of the populace who&#8217;d like a sociosexual experience online and would also like to effectively outsource your social reputation management, if you will, but you feel that sites like Facebook just aren&#8217;t cutting it, then Blackbox Republic is definitely worth checking out.</p>
<p>If you do check it out, or even if you don&#8217;t, I&#8217;d love to know what you think in the comments. And if you&#8217;re definitely sold, consider signing up via <a href="http://www.blackboxrepublic.com/partner/maymay">my partner link</a>. Full disclosure: signing up that way earns me a small commission. If you&#8217;d rather sign up but not give me a commission for the referral, just register from the front page.</p>
]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2009/12/14/blackbox-republic-social-network-review/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HowTo: Use Rules to Automatically Manage Email in Apple Mail</title>
		<link>http://maymay.net/blog/2009/07/27/howto-use-rules-to-automatically-manage-email-in-apple-mail/</link>
		<comments>http://maymay.net/blog/2009/07/27/howto-use-rules-to-automatically-manage-email-in-apple-mail/#comments</comments>
		<pubDate>Mon, 27 Jul 2009 21:07:47 +0000</pubDate>
		<dc:creator>Meitar</dc:creator>
				<category><![CDATA[Crosspost]]></category>
		<category><![CDATA[HOWTO]]></category>
		<category><![CDATA[Information & Communication]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Tech/Computing]]></category>
		<category><![CDATA[Email]]></category>
		<category><![CDATA[LinkedIn]]></category>
		<category><![CDATA[Mail.app]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/?p=935</guid>
		<description><![CDATA[After recently moving to San Francisco, I joined the San Francisco Freecyclers&#8217; Network. Freecycle is a really cool set of local groups who prefer to give away items to people who want them instead of throwing them away into the trash. The group uses email to connect people who offer items and those who want [...]]]></description>
			<content:encoded><![CDATA[<p>After recently moving to San Francisco, I joined the <a href="http://www.freecycle.org/group/US/California/San%20Francisco">San Francisco Freecyclers&#8217; Network</a>. Freecycle is a really cool set of local groups who prefer to give away items to people who want them instead of throwing them away into the trash. The group uses email to connect people who offer items and those who want them. In order to stay sane, a simple, <a href="http://www.freecycle.org/faq/faq/faq_guidelines" title="Read more about Freecycle guidelines.">conventional format for writing an email&#8217;s subject line</a> lets you quickly figure out what&#8217;s on offer and where.</p>
<p>Thanks to this simple text convention in subject lines, I could trivially automate the process of sorting through the approximately 100 emails a day that the email list generates in order to single out only the emails that interest me. Here&#8217;s how I did it.</p>
<h2>Define Your Goals</h2>
<p>Before setting out on any task, it behooves you to take a moment and think about what it is you&#8217;re trying to accomplish. For me, with the San Francisco Freecycling Network (SFFN) email list, I wanted to achieve the following goals:</p>
<ul>
<li>Keep my inbox clear of email from the SFFN list unless a message was particularly interesting.</li>
<li>Browse the SFFN messages when I wanted to look at them without having to go to the web site.</li>
<li>Highlight particularly interesting messages in my inbox visually and play a special sound to alert me that such email has been found in case Mail was running in the background (since free stuff gets taken fast!).</li>
</ul>
<p>I defined &#8220;particularly interesting&#8221; messages as ones that offered items of need for my recent move. With this in mind, I set out to create email rules that accomplished each goal in turn.</p>
<h2>Step 1: Create a mailbox to store the appropriate messages</h2>
<p>I began by creating a new mailbox to store all the SFFN messages I was getting. This alternate mailbox would be the mailbox I would shunt all SFFN email to so as to keep my inbox clear of it. I called the mailbox simply &#8220;SFFN&#8221;.</p>
<p><strong>Do this:</strong></p>
<ol>
<li>From the <em>Mailbox</em> menu, select <em>New Mailbox…</em>. The New Mailbox sheet appears.</li>
<li>Select any location (&#8220;On My Mac&#8221; is fine, as is the account that receives the mailing list messages), and give it a name.</li>
<li>Click OK.</li>
</ol>
<h2>Step 2: Create an email rule to move all appropriate messages to the new mailbox</h2>
<p>With the new mailbox created, I now needed to get all the appropriate messages in there and out of my inbox.</p>
<p>Apple Mail&#8217;s email rules work by looking at each incoming message and matching it against a set of conditions that you provide. If the message being evaluated matches the conditions you specify, such as &#8220;from the San Francisco Freecycler&#8217;s Network mailing list&#8221;, then an associated action is automatically performed. Every email you get is evaluated against every rule you have unless a rule moves the message to another mailbox or until you trigger the &#8220;stop evaluating rules&#8221; action.</p>
<p>Since moving an email message to a new mailbox ends the process of evaluating rules and moving messages to the SFFN mailbox I just created is the goal of the rule I&#8217;m creating, I decided to name the rule &#8220;END &#8211; SFFN&#8221;.</p>
<p><strong>Do this:</strong></p>
<ol>
<li>From the Mail menu, select <em>Preferences…</em>. The Mail Preferences window opens.</li>
<li>Click the <em>Rules</em> button. The Rules pane appears.</li>
<li>Click the <em>Add Rule</em> button. The Add Rule sheet appears:
<ol>
<li>Enter a meaningful description (I chose &#8220;END &#8211; SFFN&#8221;) in the <em>Description:</em> field.</li>
<li>Provide the conditions you want to match. Since all SFFN emails must be addressed to the mailing list, I simply provided the email address of the mailing list (<kbd>sffn@yahoogroups.com</kbd>) as the condition for the <em>To</em> header.</li>
<li>Provide the actions you want Mail to perform. I simply wanted to move the matched messages to the SFFN mailbox.</li>
</ol>
<li>Click OK.</li>
</ol>
<p>For me, the above configuration looked like this:</p>
<p><a href="http://maymay.net/blog/wp-content/uploads/2009/07/end-sffn-mail-rule.gif"><img src="http://maymay.net/blog/wp-content/uploads/2009/07/end-sffn-mail-rule.gif" alt="end-sffn-mail-rule" title="end-sffn-mail-rule" class="alignnone wp-image-936" /></a></p>
<h2>Step 3: Create an email rule to highlight a message of particular interest</h2>
<p>At this point, any and all email I receive from the San Francisco Freecyclers&#8217; Network is being moved to the SFFN mailbox I created for it. This is nice because it keeps my inbox clear, but it&#8217;s still not very helpful since I still have to go trudging through the SFFN mailbox in order to find anything that might be interesting to me. The whole point of this exercise is to reduce the amount of time I spend actively looking for interesting things and let my computer do that work for me. So the next step is to tell Mail what I&#8217;m looking for so it can show the interesting messages to me.</p>
<p>Now, as it happens I&#8217;m in need of a wireless router. Since &#8220;router&#8221; is an appropriately unique word, I&#8217;m going to tell Mail to look for that word in a subject line. However, since I only want Mail to tell me when a router is available and not when other people like me are looking for routers, I&#8217;ll also tell Mail to look for the keyword &#8220;OFFER&#8221; in the subject line. (And this is why the <a href="http://www.freecycle.org/faq/faq/faq_guidelines">Freecycle guidelines</a> tell users to format their subject lines in a conventional way.)</p>
<p>Finally, since I don&#8217;t want to have to go digging for the interesting email message and since my inbox is already going to be kept clear by the previous rule, I&#8217;ll simply have Mail highlight the message in a bright green color and leave the message in my inbox <em>without</em> moving it to the SFFN mailbox I created earlier.</p>
<p><strong>Do this:</strong></p>
<ol>
<li>From the Rules pane in Mail&#8217;s preferences, click <em>Add Rule</em>.</li>
<li>Enter a meaningful description in the <em>Description:</em> field. (Since I&#8217;m looking for a router, I called it &#8220;SFFN &#8211; Search for OFFERed &#8216;router&#8217;&#8221;.)</li>
<li>Provide the conditions you wish to match. For me, this meant email sent to the Freecycler&#8217;s mailing list with the two words &#8220;OFFER&#8221; and &#8220;router&#8221; in the subject line.</li>
<li>Specify the actions you wish Mail to perform. I wanted Mail simply to color the message green and to leave the email go to the inbox (where it was originally destined for), so I chose &#8220;Stop evaluating rules&#8221;. (I also decided I&#8217;d want Mail to play a special sound to alert me that it had found something interesting. This is optional, of course.)</li>
<li>Click OK.</li>
</ol>
<p>When I was done creating my rule, the above configuration looked like this:</p>
<p><a href="http://maymay.net/blog/wp-content/uploads/2009/07/highlight-router-sffn-mail-rule.gif"><img src="http://maymay.net/blog/wp-content/uploads/2009/07/highlight-router-sffn-mail-rule.gif" alt="Screenshot of Mail.app rule to highlight incoming Freecycling emails offering a router." title="highlight-router-sffn-mail-rule" width="556" height="330" class="alignnone size-full wp-image-945" /></a></p>
<p>I can now repeat this step as many times as desired to tell Mail to highlight other messages that may be of particular interest for some other reason. For instance, say instead of looking for a wireless router, I wanted to look for a toaster. I would simply need to click on &#8220;Duplicate Rule&#8221; and replace all instances of &#8220;router&#8221; with &#8220;toaster&#8221;.</p>
<h2>Step 4: Place email rules in appropriate order</h2>
<p>Since Mail will repeatedly check incoming email against all the active rules, we need to be sure to place the rules in the correct order. You can think of each email rule as part of large Rube Goldberg machine, each message getting funneled through some piece of the logic at each successive rule. That&#8217;s why I began the name of the first rule I created with &#8220;END,&#8221; so that I&#8217;d know it should be placed <em>after</em> the rest of the SFFN-related email rules.</p>
<p>I decided that I wanted Mail to look for anything related to cameras and, of course, to toasters. This gave me a total of 4 rules (three to search for items of interest, and one to keep my inbox clear). Since the three highlighting rules all perform the same action, it doesn&#8217;t really matter which order they go in, but it is important that all of them appear before the rule to move messages to the SFFN mailbox.</p>
<p>To order rules, simply click-and-drag them into the order you wish Mail to evaluate them in. When I was done, my Rules pane looked like this:</p>
<p><a href="http://maymay.net/blog/wp-content/uploads/2009/07/mailapp-rules-pane.gif"><img src="http://maymay.net/blog/wp-content/uploads/2009/07/mailapp-rules-pane.gif" alt="Screenshot of the Mail.app Rules pane with sorted rules." title="mailapp-rules-pane" width="550" height="309" class="alignnone size-full wp-image-946" /></a></p>
<h2>Conclusion</h2>
<p>Mail rules are an extremely powerful feature that most email clients have, but that too few people use. They can save you enormous amounts of time and increase your productivity by automating simple yet time-consuming tasks.</p>
<p>The conventional, standardized subject lines that the Freecycle mailing list uses simplifies the logic required to have your computer automatically process your messages for you. This is a useful observation because it can be applied to other areas of your life where using simple conventions can help to organize otherwise overwhelming information tasks into manageable batches. Although this particular example uses stock, simple commands, you can get as fancy as you like by having an action trigger an <a href="/blog/category/applescript/">AppleScript</a>.</p>
<p>Now, hopefully, finding some additional housewares and a wireless router for my new San Francisco apartment will be as easy as checking (but not manually sorting!) my own email!</p>
]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2009/07/27/howto-use-rules-to-automatically-manage-email-in-apple-mail/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Guest Appearance on Technocolor NYC Technology Talk Radio Show</title>
		<link>http://maymay.net/blog/2009/04/07/guest-appearance-on-technocolor-nyc-technology-talk-radio-show/</link>
		<comments>http://maymay.net/blog/2009/04/07/guest-appearance-on-technocolor-nyc-technology-talk-radio-show/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 08:45:38 +0000</pubDate>
		<dc:creator>Meitar</dc:creator>
				<category><![CDATA[Crosspost]]></category>
		<category><![CDATA[Tech News]]></category>
		<category><![CDATA[Tech/Computing]]></category>
		<category><![CDATA[LinkedIn]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/?p=918</guid>
		<description><![CDATA[Last week, I was invited to make a guest appearance on a technology talk radio show called Technocolor, which airs on 90.3 FM locally in New York City. The radio station is WHCR. The invitation was rather unexpected but I had a great time and a fun conversation with the host, Lena Marvin. We had [...]]]></description>
			<content:encoded><![CDATA[<p>Last week, I was invited to make a guest appearance on a technology talk radio show called Technocolor, which airs on 90.3 FM locally in New York City. The radio station is <a href="http://WHCR.org">WHCR</a>. The invitation was rather unexpected but I had a great time and a fun conversation with the host, <a href="http://blog.hellmaggot.com/">Lena Marvin</a>. We had such a fun time, actually, that Lena invited me to make a second guest appearance this week and, unlike the first show, I managed to record the audio stream, so you can <a href="http://maymay.net/blog/wp-content/uploads/2009/04/Technocolor_recording_2009-04-06.mp3">replay the taping of the show and download it</a>.</p>
<p>Here are my late-night and very sleepy attempts at listing some of the stuff we talked about, with as many links for show notes as I can manage to find:</p>
<ul>
<li>April Fools&#8217; Day jokes: GMail Autopilot automatically writes your emails for you, Identi.ca acquires Twitter, The Guardian will publish its archives by tweeting them.</li>
<li>NetFlix will demolish traditional cable television.</li>
<li><a href="http://drop.io/">Drop.io</a> can replace email attachments.</li>
<li>Skype has an official iPhone client; AT&#038;T is not happy.</li>
<li><a href="http://news.stanford.edu/news/2009/april1/free-iphone-software-development-course-apple-040109.html">Stanford University to offer free iPhone development courses</a>. Why go to college anymore? MIT already offers plenty of educational material from <a href="http://ocw.mit.edu/">Open Courseware</a>, iTunes University does something similar.</li>
<li>iPod Shuffle randomly maximizes its volume when people exercise. Owch. DRM physically bad for your ears?</li>
<li><a href="http://www.nypl.org/">New York Public Library</a> offers free access to language learning courses from <a href="http://mangolangauges.com">MangoLanguages.com</a>, a $150 value.</li>
<li>Internet not actually good for job hunts.</li>
<li>Identi.ca hopes to add OpenID support (eventually). It&#8217;s a distributed &#8220;micro-blogging&#8221; platform. Fear vendor lock-in; Laconi.ca implements the <a href="http://openmicroblogging.org/">open micro-blogging standard</a>. Community organizations are especially vulnerable to vendor-lock in.</li>
<li>Free as in beer is an open source cultural reference. But wait, there is actually a <a href="http://www.freebeer.org/">&#8220;free beer&#8221;</a>.</li>
<li>How to create your own secure, yet memorable, password algorithm: use the name of the site you&#8217;re on combined with a secret prefix to create unique passwords for each site.</li>
<li>Financial software to help you do taxes: <a href="http://mint.com/">Mint.com</a> versus Quicken or Microsoft Money. <a href="http://www.taxslayer.com/">TaxSlayer.com</a> helps you file taxes electronically, <em>possibly</em> for free! Also, online government tools exist at, for instance, the <a href="http://www.tax.state.ny.us/">New York State Department of Taxation and Finance</a>.</li>
<li>PDFs should be used better than they are; <acronym title="Portable Document Format">PDF</acronym> creators can use PDFs as online, electronic forms. Lots to learn about Adobe&#8217;s products for free at <a href="http://creativesuitepodcast.com/">CreativeSuitePodcast.com</a>.</li>
<li>Newer Microsoft Word document formats cause pain for the uninformed. Also, will newer versions of the <acronym title="Portable Document Format">PDF</acronym> standard stay backwards compatible with older <acronym title="Portable Document Format">PDF</acronym> files?</li>
</ul>
<p>Listening to myself is a bit odd, and makes me realize just how quickly I speak. I need to learn to slow down a little. Nonetheless, I think I did okay, although I suppose I should have plugged <a href="/blog/2008/07/21/how-web-designers-can-do-their-own-htmlcss/">my own web dev book</a> a bit more. Meh, whatever. I was just there to have a good time, and I did exactly that—it&#8217;s incredible how quickly an hour goes by when you&#8217;re having fun!</p>
<p>Still, I&#8217;d love to hear feedback from listeners, as I very much welcome constructive criticism of what I could have done better and how. I&#8217;m also hopeful that I&#8217;ll get even more opportunities to chat with Lena, Javier, and the rest of the Technocolor crew semi-regularly from now on, since she mentioned something about being able to Skype me in even after I move to San Francisco.</p>
]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2009/04/07/guest-appearance-on-technocolor-nyc-technology-talk-radio-show/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
<enclosure url="http://maymay.net/blog/wp-content/uploads/2009/04/Technocolor_recording_2009-04-06.mp3" length="50315099" type="audio/mpeg" />
		</item>
		<item>
		<title>How To Use Git-SVN as the Only Subversion Client You&#8217;ll Need</title>
		<link>http://maymay.net/blog/2009/02/24/how-to-use-git-svn-as-the-only-subversion-client-youll-need/</link>
		<comments>http://maymay.net/blog/2009/02/24/how-to-use-git-svn-as-the-only-subversion-client-youll-need/#comments</comments>
		<pubDate>Tue, 24 Feb 2009 18:17:37 +0000</pubDate>
		<dc:creator>Meitar</dc:creator>
				<category><![CDATA[HOWTO]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tech/Computing]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[Subversion]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/?p=891</guid>
		<description><![CDATA[I&#8217;ve been using git as my favorite version control tool for quite a while now. One of its numerous distinguishing features is an optional component called git-svn, which serves as a bi-directional &#8220;bridge&#8221; that enables native git repositories to interact with a Subversion repository, performing all the normal operations you would need to use svn [...]]]></description>
			<content:encoded><![CDATA[<p><a href="/blog/tag/git/">I&#8217;ve been using git</a> as my favorite version control tool for quite a while now. One of its  numerous distinguishing features is an optional component called git-svn, which serves as a bi-directional &#8220;bridge&#8221; that enables native git repositories to interact with a Subversion repository, performing all the normal operations you would need to use <code>svn</code> for. In other words, since you can checkout, commit to, and query the logs of Subversion repositories (among other things) using git-svn, <strong>git can serve as your all-in-one Subversion client</strong>.</p>
<p>One reason why you might use git-svn because your project <em>actually</em> resides in a Subversion repository and other people need to access it using Subversion-only tools. Another might be because you have multiple projects, some that use git and others that use Subversion, and you&#8217;re tired of switching between <code>svn</code> and <code>git</code> commands—like me. For us, it&#8217;s far easier to simply use git as a Subversion client and never have to call <code>svn</code> directly.</p>
<p>As an important aside, please note that I would strongly discourage people who are new to git from learning about it by using git-svn. Although you may think that moving to git from Subversion would be eased by using the git-svn bridge, I really don&#8217;t think that&#8217;s the case. You&#8217;re much, much better off simply using git by itself right off the bat, and you can <a href="/blog/2008/03/26/howto-use-git-for-personal-development-when-everyone-else-is-using-subversion-part-1/">do this even if your fellow committers are using subversion</a>.</p>
<p>Also, I&#8217;m going to assume you&#8217;ve already got a Subversion repository set up somewhere.</p>
<p>First, checkout the subversion repository. In Subversion you would do this:</p>
<pre><code class="shell">svn checkout <var>http://example.com/path/to/svn/repo</var></code></pre>
<p>With git-svn, you do this:</p>
<pre><code class="shell">git svn clone <var>http://example.com/path/to/svn/repo</var></code></pre>
<p>This will cause git-svn to create a new directory called <code>repo</code>, switch to it, initialize a new git repository, configure the Subversion repository at <var>http://example.com/path/to/svn/repo</var> as a remote git branch (confusingly called <code>git-svn</code> by default, although you can specify your name by passing a <code>-R<var>remote_name</var></code> or <code>--svn-remote=<var>remote_name</var></code> option), and then does a checkout.</p>
<p>The output of this command will be a little awkward. Here&#8217;s a sample from one my repositories:</p>
<pre><samp>r14 = dbd7266f328ef2ad061ea4532f39ce7cebaba0c5 (git-svn)
	M	trunk/Chapter 6/Chapter 6.doc
	M	trunk/Chapter 6/code examples/6.1.html
	A	trunk/Chapter 6/code examples/6.2.html
r15 = 4cca08341ab0600069cece77ce67afc449caca68 (git-svn)
	M	trunk/Chapter 6/Chapter 6.doc
	A	trunk/Chapter 6/code examples/print.css
	A	trunk/Chapter 6/code examples/screen.css
	M	trunk/Chapter 6/code examples/6.1.html
	M	trunk/Chapter 6/code examples/6.2.html
r16 = 7b2f3e0ccfd79be61b527b6ba325f8689475dc01 (git-svn)
	M	trunk/Chapter 5/Chapter 5.doc
r17 = a319764855361d92bb6e006cfd18a51319046cae (git-svn)
	M	trunk/Chapter 5/Chapter 5.doc
r18 = 4cd5cb43d33b2dd45bd39b9a2b7ea9416f9e3d8f (git-svn)
	M	trunk/Chapter 6/Chapter 6.doc
	M	trunk/Chapter 6/code examples/screen.css
	M	trunk/Chapter 6/code examples/6.1.html
</samp></pre>
<p>As you can see, git-svn is associating specific Subversion revisions with particular git commit objects. Due to this required mapping, the initial cloning process of a Subversion repository may take some time. This is a good opportunity for your morning coffee break.</p>
<p>When this process is done, you&#8217;ll have a typical git repository with a local master branch and one remote branch for the Subversion repository:</p>
<pre><code class="shell">Perseus:repo maymay$ git branch
* master
Perseus:repo maymay$ git branch -r
  git-svn
</code></pre>
<p>You can now treat the Subversion repository as though it were a remote branch of sorts. Say you&#8217;ve done a bunch of work and, as you typically do with git, you commit this work to your topic branch.</p>
<pre><code class="shell">Perseus:repo maymay$ git checkout -b awesome-feature
<samp>Switched to a new branch "awesome-feature"</samp>
Perseus:repo maymay$ vim awesome-feature-stylesheet.css
Perseus:repo maymay$ git add awesome-feature-stylesheet.css
Perseus:repo maymay$ git commit -m "Now I'm perty."
<samp>Created commit 07ee832: Now I'm perty.
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 awesome-feature-stylesheet.css</samp>
</code></pre>
<p>Right now your changes are still in the topic branch (called <code>awesome-feature</code> in the above example). To get them to Subversion, you merely need to say <code>git svn dcommit</code>:</p>
<pre><code class="shell">Perseus:repo maymay$ git svn dcommit
<samp>Committing to <var>http://example.com/path/to/svn/repo</var> ...</samp>
</code></pre>
<p>Note that pesky extra &#8220;d&#8221; in the command. This is the equivalent of Subversion&#8217;s <code>svn commit</code>, but the commit message used is the one from the previous command, which in this case was <code>git commit -m "Now I'm perty."</code>. Also interesting to note here is that because Subversion doesn&#8217;t understand git branches, any change on any branch can be &#8220;pushed&#8221; to Subversion at any time using <code>git svn dcommit</code>—the git commits don&#8217;t have to be on any specific branch, since all git-svn does is map a git commit object to a Subversion revision and vice versa.</p>
<p>Similarly, you can at any time run the equivalent of <code>svn update</code> to get the latest changes from the Subversion repository into your Subversion branch.</p>
<ul>
<li>To do this, <em>without</em> affecting your working tree—that is, to only fetch the latest changes but not write them to the filesystem, just to the git-svn metadata area and the remote git branch—use <code>git svn fetch</code>. To apply these changes to your local branch, you simply merge: <code>git checkout master; git merge git-svn</code>.</li>
<li>If you do want to write out the changes to the filesystem (as <code>svn update</code> would do), use <code>git svn rebase</code>, which automatically linearizes your local git commit history after the commit history of the incoming Subversion changesets. Very slick.</li>
</ul>
<p>If your fetching/rebasing causes a conflict, you&#8217;ll be notified and will have to resolve it as per usual. If your &#8220;pushes&#8221; to the svn repo causes a Subversion conflict, you&#8217;ll be notified and you should again edit the appropriate files to resolve it, but this time make sure you run a <code>git svn rebase</code> before you try <code>dcommit</code>-ing again (since, remember, Subversion can only handle linear commit history).</p>
<p>As always, saying <code>man git-svn</code> or <code>git help svn</code> to your shell will give you all the other details. Among these, the most likely you&#8217;ll probably want to learn about is <a href="http://www.jukie.net/~bart/blog/svn-branches-in-git">how to track multiple Subversion branches as normal git branches</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2009/02/24/how-to-use-git-svn-as-the-only-subversion-client-youll-need/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Gender and Technology at IgniteSydney (with presentation slides)</title>
		<link>http://maymay.net/blog/2009/01/22/gender-and-technology-at-ignitesydney-with-presentation-slides/</link>
		<comments>http://maymay.net/blog/2009/01/22/gender-and-technology-at-ignitesydney-with-presentation-slides/#comments</comments>
		<pubDate>Fri, 23 Jan 2009 01:02:11 +0000</pubDate>
		<dc:creator>Meitar</dc:creator>
				<category><![CDATA[Crosspost]]></category>
		<category><![CDATA[Maybe Maimed]]></category>
		<category><![CDATA[Tech/Computing]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/?p=869</guid>
		<description><![CDATA[Last night at Ignite Sydney, I presented a 5-minute talk about how technology influences sexual awareness and how sexual awareness returns the favor, influencing the technology that we build. I had an amazing time, although I&#8217;m surprised I wasn&#8217;t literally vibrating from all my nervous energy. Thankfully, I think it all turned out okay and [...]]]></description>
			<content:encoded><![CDATA[<p>Last night at <a href="//ignitesydney.com/">Ignite Sydney</a>, <a href="http://www.zdnet.com.au/insight/software/soa/Ignite-Sydney-sparks-up/0,139023769,339294563-12s,00.htm" title="ZDnet.com has a photo gallery of Ignite Sydney that includes me presenting.">I presented</a> a 5-minute talk about how technology influences sexual awareness and how sexual awareness returns the favor, influencing the technology that we build. I had an amazing time, although I&#8217;m surprised I wasn&#8217;t literally vibrating from all my nervous energy. Thankfully, I think it all turned out okay and my presentation was received rather well.</p>
<p>For those of you that missed it, you can expect to find videos of all the presentations, including mine, posted on YouTube <del datetime="2009-03-27T16:43:25+00:00">within the next few weeks and I&#8217;ll update this post when mine gets published. In the mean time,</del> <ins datetime="2009-03-27T16:43:25+00:00">It took longer than I&#8217;d hoped and sadly the audio isn&#8217;t so great, but <a href="http://www.youtube.com/watch?v=zzw1jtju6OU">my talk is now published on YouTube</a>. Along with that,</ins> here are my presentation slides in various formats for your remixing pleasure:</p>
<p><ins datetime="2010-03-12T10:10:48+00:00">I gave this presentation again some months later at Noisebridge&#8217;s 5 Minutes of Fame, shown below, followed by the YouTube version:</ins></p>
<p><object width="480" height="386" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"><param name="flashvars" value="vid=2180170&#038;hid=137879&#038;autoplay=false"/><param name="allowfullscreen" value="true"/><param name="allowscriptaccess" value="always"/><param name="src" value="http://www.ustream.tv/flash/viewer.swf"/><embed flashvars="vid=2180170&#038;hid=137879&#038;autoplay=false" width="480" height="386" allowfullscreen="true" allowscriptaccess="always" src="http://www.ustream.tv/flash/viewer.swf" type="application/x-shockwave-flash"></embed></object></p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/zzw1jtju6OU&#038;hl=en&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/zzw1jtju6OU&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<ul>
<li><a href="/blog/wp-content/uploads/2009/01/Gender%20and%20Technology%20-%20IgniteSydney.key.zip">ZIP Archive of Keynote presentation</a></li>
<li><a href="/blog/wp-content/uploads/2009/01/Gender%20and%20Technology%20-%20IgniteSydney.ppt">PowerPoint presentation</a></li>
<li><a href="/blog/wp-content/uploads/2009/01/Gender%20and%20Technology%20-%20IgniteSydney.mov">QuickTime Movie of presentation slides</a></li>
<li><a href="/blog/wp-content/uploads/2009/01/Gender%20and%20Technology%20-%20IgniteSydney.pdf"><acronym title="Portable Document Format">PDF</acronym> with presenter notes (includes slide builds)</a></li>
<li><ins datetime="2011-04-24T06:16:17+00:00"><a href="http://maymay.net/blog/wp-content/uploads/2009/01/Gender-and-Technology-IgniteSydney.txt">Transcript-like talk notes</a> (<a href="http://days.maybemaimed.com/post/4889208398/back-in-2009-when-i-lived-in-sydney-australia-i">cross-post</a>)</ins></li>
</ul>
<p>All materials in my presentation are by attribution <a href="//creativecommons.org/">Creative Commons</a> licensed. Briefly, this means you can do whatever you want with it but please give credit where credit is due, just as I&#8217;ve done. :)</p>
<p>I do wonder if perhaps this presentation would have been even better received in a place like New York City or San Francisco, where I feel that there is more of an awareness of gender theory and its effects on the way we live day-to-day than there is in Sydney. Still, I&#8217;m glad that I set myself this challenge and really thrilled to have pulled it off. It&#8217;s <em>amazingly</em> difficult to condense gender theory 101 along with all the stuff I wanted to say about technology into a five minute presentation.</p>
<p>My thanks go out to all the wonderful people who cheered me on both before and after I presented, and to the organizers and volunteers at the event.</p>
]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2009/01/22/gender-and-technology-at-ignitesydney-with-presentation-slides/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>clickjane.css: A CSS User Style Sheet to Help Detect and Avoid Clickjacking Attacks</title>
		<link>http://maymay.net/blog/2008/12/29/clickjanecss-a-css-user-style-sheet-to-help-detect-and-avoid-clickjacking-attacks/</link>
		<comments>http://maymay.net/blog/2008/12/29/clickjanecss-a-css-user-style-sheet-to-help-detect-and-avoid-clickjacking-attacks/#comments</comments>
		<pubDate>Mon, 29 Dec 2008 10:31:07 +0000</pubDate>
		<dc:creator>Meitar</dc:creator>
				<category><![CDATA[Crosspost]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Maymay Media]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Security & Privacy]]></category>
		<category><![CDATA[Tech/Computing]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/?p=847</guid>
		<description><![CDATA[Clickjacking or, more formally, user interface redressing, is a class of security vulnerabilities similar to phishing scams. The technique uses web standards to trick unsuspecting victims into performing actions they were not intending to. Clickjacking does not rely on bugs in any software. Instead, the technique is simply an abuse of the growing graphical capabilities [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Clickjacking">Clickjacking</a> or, more formally, <dfn>user interface redressing</dfn>, is a class of security vulnerabilities similar to phishing scams. The technique uses web standards to trick unsuspecting victims into performing actions they were not intending to.</p>
<p>Clickjacking does not rely on bugs in any software. Instead, the technique is simply an abuse of the growing graphical capabilities that advanced web standards like <acronym title="Cascading Style Sheets">CSS</acronym> provide to web browsers. A good <a href="http://www.grc.com/sn/sn-168.htm">introduction to clickjacking</a> is provided by <a href="//grc.com/">Steve Gibson</a> and <a href="http://leoville.com/">Leo Laporte</a> on their <a href="//twit.tv/sn">Security Now! podcast</a>.</p>
<p>As far as I&#8217;m aware, only <a href="//mozilla.com/firefox/">Firefox</a> when combined with the <a href="//noscript.net/">NoScript</a> <a href="https://addons.mozilla.org/firefox/addon/722">add-on</a> and Internet Explorer when combined with the <a href="//guardedid.com/">GuardedID product</a> provide any measure of protection against clickjacking attacks. To date no other browser can detect, alert, or otherwise help you to avoid or mitigate the risks of clickjacking attacks.</p>
<p>That said, there&#8217;s gotta be <em>something</em> users of other browsers can do. Well, it may not be as much as what NoScript can do, but there is something: use a user style sheet to help expose common clickjacking attack attempts.</p>
<h2><code>clickjane.css</code> helps detect clickjacking attacks for all browsers</h2>
<p>Until browser manufacturers provide built-in protections against clickjacking attacks in their software (which is arguably the best place for such logic in the first place), I&#8217;ve started putting together <a href="http://github.com/meitar/clickjane-css/">a user style sheet I&#8217;m calling <code>clickjane.css</code></a> that attempts to instantly reveal common clickjacking attempts. Since it&#8217;s a <acronym title="Cascading Style Sheets">CSS</acronym> user style sheet, this approach should be cross-browser compatible so that users of any browser including Safari, Opera, and other browsers that don&#8217;t have other means of protecting against clickjacking attacks can use it.</p>
<p>I&#8217;ve only recently learned about this class of exploits and so I&#8217;m not supremely well-informed on the topic. As a result, the <code>clickjane.css</code> file is relatively sparse and currently only reveals what I&#8217;m sure is a small set of clickjacking attmpts. However, as I research the topic further and learn more about the actual underlying <acronym title="HyperText Markup Language">HTML</acronym> and <acronym title="Cascading Style Sheets">CSS</acronym> that clickjacking uses, I&#8217;ll be updating the <code>clickjane.css</code> code to reveal those attempts as well.</p>
<p>Naturally, contributions and assistance in any form are most welcome! Learn more about <code>clickjane.css</code> as well as how to use it at the <a href="http://github.com/meitar/clickjane-css/wikis">Clickjane <acronym title="Cascading Style Sheets">CSS</acronym> Github wiki</a>.</p>
<h2>Before and after <code>clickjane.css</code></h2>
<p>Here are two example screenshots of <a href="http://www.planb-security.net/notclickjacking/iframetrick.html">a benign clickjacking demo</a>.</p>
<ol>
<li>Before:
<div><div id="attachment_858" class="wp-caption alignnone" style="width: 310px"><a href="http://maymay.net/blog/wp-content/uploads/2008/12/before-clickjane.png"><img src="http://maymay.net/blog/wp-content/uploads/2008/12/before-clickjane-300x283.png" alt="Screenshot of Safari before clickjane.css is used to expose clickjacking attempts." title="before-clickjane" width="300" height="283" class="size-medium wp-image-858" /></a><p class="wp-caption-text">Screenshot of Safari before clickjane.css is used to expose clickjacking attempts.</p></div></div>
</li>
<li>After:
<div><div id="attachment_859" class="wp-caption alignnone" style="width: 310px"><a href="http://maymay.net/blog/wp-content/uploads/2008/12/after-clickjane.png"><img src="http://maymay.net/blog/wp-content/uploads/2008/12/after-clickjane-300x283.png" alt="Screenshot of Safari after clickjane.css is used to expose clickjacking attempts." title="after-clickjane" width="300" height="283" class="size-medium wp-image-859" /></a><p class="wp-caption-text">Screenshot of Safari after clickjane.css is used to expose clickjacking attempts.</p></div></div>
</li>
</ol>
<h2>Good habits you should get into to mitigate clickjacking risks</h2>
<p>Here is a list of behaviors that you should make habitual while you browse the web. Engaging in these behaviors can dramatically reduce the likelihood that you will be victimized by a clickjacking attack.</p>
<ul>
<li>Explicitly log out of any service you have logged in to when you are done. That log-out button is there for a reason: use it!</li>
<li>Avoid providing your browser with &#8220;Auto-Complete&#8221; information for critical sites, such as your bank.</li>
<li>Make sure you are <a href="http://www.adobe.com/support/security/advisories/apsa08-08.html">running Flash Player 10 or greater, which mitigates this vulnerability</a> for Adobe Flash content.</li>
</ul>
<h2>More resources to learn about clickjacking</h2>
<ul>
<li><a href="http://hackademix.net/2008/10/26/more-clickjacking/">Hackademix.net &#8211; More clickjacking</a> links to the <a href="http://video.google.com/videoplay?docid=-5747622209791380934">OWASP presentation</a>, the <a href="http://www.sectheory.com/clickjacking.htm">white paper</a>, and a blog post showing <a href="http://sirdarckcat.blogspot.com/2008/10/about-css-attacks.html">several <acronym title="Cascading Style Sheets">CSS</acronym>-based exploits</a>.</lI>
</ul>
<h2>Translations of this article:</h2>
<ul>
<li><ins datetime="2011-04-20T07:06:13+00:00"><a href="http://www.designcontest.com/show/everything-in-between-be">Belorussian (thanks, Bohdan Zograf)</a></ins></li>
<li><ins datetime="2011-08-24T20:14:39+00:00"><a href="http://webhostingrating.com/libs/clickjane-css-a-css-ua">Ukrainian (thanks, Alyona Lompar)</a></ins></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2008/12/29/clickjanecss-a-css-user-style-sheet-to-help-detect-and-avoid-clickjacking-attacks/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>Why CSS needs delegation capabilities and not &#8220;variables&#8221;</title>
		<link>http://maymay.net/blog/2008/12/14/why-css-needs-delegation-capabilities-and-not-variables/</link>
		<comments>http://maymay.net/blog/2008/12/14/why-css-needs-delegation-capabilities-and-not-variables/#comments</comments>
		<pubDate>Sun, 14 Dec 2008 07:55:04 +0000</pubDate>
		<dc:creator>Meitar</dc:creator>
				<category><![CDATA[Crosspost]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tech/Computing]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Web Standards]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/?p=815</guid>
		<description><![CDATA[It&#8217;s been too long since I joined the fun, if amazingly heated, debates over the direction that Web standards are moving in. Recently, given the &#8220;free&#8221; time to do so, I decided to dive head first into what is (sadly) an almost 14 year old debate. The result is this blog post, which is mostly [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been too long since I joined the fun, if amazingly heated, debates over the direction that Web standards are moving in. Recently, given the &#8220;free&#8221; time to do so, I decided to dive head first into what is (sadly) an almost 14 year old debate. The result is this blog post, which is mostly a response to Bert Bos&#8217;s essay <cite><a href="http://www.w3.org/People/Bos/CSS-variables">Why &#8220;variables&#8221; in <acronym title="Cascading Style Sheets">CSS</acronym> are harmful</a></cite> and Matt Wilcox&#8217;s opposing response to that essay, <cite><a href="http://mattwilcox.net/archive/entry/id/991/">Why <acronym title="Cascading Style Sheets">CSS</acronym> needs to borrow from programming languages</a></cite>. Their articles are each worthy of a read, possibly before this one.</p>
<p>Here&#8217;s <strong>the summary</strong> of my argument.</p>
<p class="summary">Adding many &#8220;programmatic&#8221; features to the <acronym title="Cascading Style Sheets">CSS</acronym> language such as variables, macros, or flow control <em>is</em> a mistake. However, <acronym title="Cascading Style Sheets">CSS</acronym>&#8216;s failure to simply encode visual <em>relationships</em> (instead of merely typographic properties)&mdash;a severe deficiency in the core language itself&mdash;requires the addition of delegation features. With the additional capability to reference an arbitrary element&#8217;s computed value regardless of its hierarchical context, <acronym title="Cascading Style Sheets">CSS</acronym> will be more accessible to both amateur and professional web designers, more capable, and will more forcefully promote the semantic Web and its ideals.</p>
<h3>In this corner: <acronym title="Cascading Style Sheets">CSS</acronym> variables are harmful</h3>
<p>Bert does a great job of summarizing the conclusion of his argument himself. In his essay, Bert says:</p>
<blockquote cite="http://www.w3.org/People/Bos/CSS-variables"><p>Adding any form of macros or additional scopes and indirections, including symbolic constants, is not just redundant, but changes <acronym title="Cascading Style Sheets">CSS</acronym> in ways that make it unsuitable for its intended audience. Given that there is currently no alternative to <acronym title="Cascading Style Sheets">CSS</acronym>, these things must not be added.</p></blockquote>
<p>As we all know, one of the wonderful things about <acronym title="Cascading Style Sheets">CSS</acronym> is that the core language itself is remarkably simple. (What&#8217;s <em>not</em> simple is the spectacular way browser manufacturers have destroyed everyone&#8217;s hope that implementing <acronym title="Cascading Style Sheets">CSS</acronym>-based designs in the real world will ever be easy, but that&#8217;s a whole different can of worms.) Fundamentally, <acronym title="Cascading Style Sheets">CSS</acronym>&#8216;s syntax can be explained with a mere three major components: property/value pairs, declaration blocks, and rule sets.</p>
<p>What this means is that <acronym title="Cascading Style Sheets">CSS</acronym> <em>as a language</em> is stupidly easy to learn. I think everyone would agree that it&#8217;s certainly easier to learn than, say, JavaScript or <a href="//en.wikipedia.org/wiki/Extensible_Stylesheet_Language"><acronym title="eXtensible Stylesheet Language">XSL</acronym></a>. Now, that&#8217;s important because, without putting too fine a point on it, Bert mentions multiple times that <acronym title="Cascading Style Sheets">CSS</acronym>&#8216;s &#8220;intended audience&#8221; are the diverse and likely relatively technically ignorant content authors that are responsible for the overwhelming majority of web pages on the public Internet today.</p>
<p>He makes the very good point that <q cite="http://www.w3.org/People/Bos/CSS-variables">The value of the semantic Web isn&#8217;t defined by how well structured the best documents are, but by how well structured the vast majority of documents</q> are. In other words, <acronym title="Cascading Style Sheets">CSS</acronym> needs to remain instantly useable <em>and reusable</em> to these untrained, amateur web content publishers for the benefits of self-describing documents (i.e., the semantic Web) to see mass adoption.</p>
<p>To wit:</p>
<blockquote cite="http://www.w3.org/People/Bos/CSS-variables"><p>reusing other people&#8217;s style sheets is more difficult if those style sheets contain user-defined names. Class names are an example. Their names may suggest why the author created them (assuming they are in a language you understand), but typically you will have to look at the document to see where they occur and why. Symbolic constants make that problem worse.</p></blockquote>
<p>And, later:</p>
<blockquote cite="http://www.w3.org/People/Bos/CSS-variables"><p>For many people, style sheets with constants will thus simply not be usable. It is too difficult to look in two places at once, the place where a value is used and the place where it is defined, if you don&#8217;t know why the rule is split in this way. Many people are confused by indirection anyway and adding an extra one, in addition to the element and class names, has the same effect as obfuscating the style sheet.</p></blockquote>
<p>Whether or not you believe Bert Bos is underestimating the average web designer, it&#8217;s pretty clear that these are really good points. Nobody wants <acronym title="Cascading Style Sheets">CSS</acronym> to be obfuscated, hard to learn, or hard to reuse. That&#8217;d just be crazy talk.</p>
<h3>In the other corner: <acronym title="Cascading Style Sheets">CSS</acronym> variables are a real-world requirement</h3>
<p>The more features you add to an application, a programming language, or indeed any software, the more difficult it becomes to grok it. As the Python people would say, the larger a language gets the more difficult it is to hold all of it in your head. Nevertheless, adding &#8220;features&#8221; is sometimes the only way to add <em>capabilities</em>, and I don&#8217;t think anyone in their right mind would argue that, once written, software should never change. (That&#8217;d just be crazy talk, too.)</p>
<p>In his opposing arguments, Matt Wilcox recognizes this when he says, <q cite="http://mattwilcox.net/archive/entry/id/991/">Yes, the syntax should be simple, but the capabilities of <acronym title="Cascading Style Sheets">CSS</acronym> should not.</q> What he&#8217;s alluding to without verbalizing it is the balance between adding necessary capabilities without unnecessarily growing the &#8220;size of the language.&#8221;</p>
<p>However, Matt says that modern web design <em>methodologies</em> (e.g., separation of concerns between structure, presentation, and behavior) dictate that <acronym title="Cascading Style Sheets">CSS</acronym> needs more capabilities than it currently has:</p>
<blockquote cite="http://mattwilcox.net/archive/entry/id/991/"><p><acronym title="Cascading Style Sheets">CSS</acronym> lacks capabilities to allow truly flexible design, requiring layer upon layer of ‘tricks’ to accomplish certain objectives, requiring content to be structured ‘just so’ to achieve a display objective, or in the case of some designs proving instead to be completely incapable.</p>
<p>[…]</p>
<p><acronym title="Cascading Style Sheets">CSS</acronym>’s positioning is a cludge. It’s a cludge because you can only position relative to the last positioned parent container. Well, that limitation in itself dictates that all positioning relies upon how the content is structured. And that means the presentation and the content are not truly separable.</p></blockquote>
<p>To align <acronym title="Cascading Style Sheets">CSS</acronym>&#8216;s capabilities with the requirements of real-world web design objectives, he says, <acronym title="Cascading Style Sheets">CSS</acronym> needs to be capable of describing relationships between semantically and structurally arbitrary but visually related elements.</p>
<blockquote cite="http://mattwilcox.net/archive/entry/id/991/"><p>Visual design is fundamentally about relationships between elements. For all of the artistic flourishes and creativity, it’s about relationships. ‘That yellow’ only grabs your attention because of its contrasting relationship with ‘that blue’. ‘This heading’ only works as a heading because of it’s exaggerated relationship to the size of the body text. […] <acronym title="Cascading Style Sheets">CSS</acronym> has no clue about relationships, period. And that’s why <acronym title="Cascading Style Sheets">CSS</acronym> as it stands right now, is not good enough. That’s why <acronym title="Cascading Style Sheets">CSS</acronym> without variables (true variables), without basic logic, without maths, can never be as flexible as we need it to be.</p></blockquote>
<p>This is what web designers have been complaining about for (what feels like hundreds of) years. The fact that <acronym title="Cascading Style Sheets">CSS</acronym> has no capability to describe <em>presentational relationships</em> between elements in addition to directly describing an individual element&#8217;s presentational properties is a gaping hole that sorely degrades its ability to be a media-agnostic styling language. Every single web designer I&#8217;ve worked with has gasped at this omission, and though at first I didn&#8217;t understand why, the more I understood the principles behind graphic design the more I came to realize how fundamentally problematic this omission really is.</p>
<h3>Adding delegation makes <acronym title="Cascading Style Sheets">CSS</acronym> <em>easier</em> for designers</h3>
<p>As Matt eloquently stated, design is all about relationships. Good web designers create designs by constructing visual elements that have strong, often exacting relationships with other visual elements. There are many names and examples for this: visual language, visual hierarchy, the golden ratio, the grid, visual balance, the typographer&#8217;s scale, and so on.</p>
<p>What happens when the designer tries to define <em>a relationship</em> between elements? &#8220;How do I say that the whitespace between element A and element B should always be the same? How do I define element A&#8217;s height as half of element B&#8217;s?&#8221; These definitions, which are natural and necessary to the way designers work in both their mind and their mediums, are impossible to encode in <acronym title="Cascading Style Sheets">CSS</acronym>.</p>
<p>The closest you can get is declaring the same values to each element&#8217;s properties, not describing the relationship itself. This suffices only so long as these values are known ahead of time and are the same as one another, which severely limits the design possibilities we are capable of (without resorting to what Matt calls &#8220;tricks&#8221;). <em>That&#8217;s</em> why achieving simple visual effects are actually very complex and so, sadly, <em>that&#8217;s</em> where you&#8217;ll find the majority of indirection and obfuscation in <acronym title="Cascading Style Sheets">CSS</acronym> today. (I&#8217;m looking at you, <a href="http://www.alistapart.com/articles/fauxcolumns/">faux columns</a>.)</p>
<h3>So who wins?</h3>
<p>Both Bert Bos and Matt Wilcox have made some great points. Bert rightfully wishes to keep <acronym title="Cascading Style Sheets">CSS</acronym> lean and simple, even at the expense of some arguably beneficial styling power. Matt, on the other hand, argues that our needs as web designers have evolved faster than the technology to the point where <acronym title="Cascading Style Sheets">CSS</acronym> is <em>too</em> limited, fundamentally so.</p>
<p>The truth is, they&#8217;re both right. And they&#8217;re both wrong. Or rather, they are each taking a position that is too extreme. Bert&#8217;s absolutely correct when says that many of these proposed extensions are redundant and harmful, and yet Matt&#8217;s also correct that <acronym title="Cascading Style Sheets">CSS</acronym> lacks some fundamental capabilities that designers <em>expect</em> to be present.</p>
<p>Bert says that the <acronym title="Cascading Style Sheets">CSS</acronym> capabilities everyone&#8217;s asking for can be implemented using techniques that don&#8217;t rely on <acronym title="Cascading Style Sheets">CSS</acronym> whatsoever. These techniques, he says, make things like true <acronym title="Cascading Style Sheets">CSS</acronym> variables &#8220;redundant.&#8221;</p>
<blockquote cite="http://www.w3.org/People/Bos/CSS-variables"><p>There are examples of <acronym title="Cascading Style Sheets">CSS</acronym> with constants to satisfy all styles of programming, e.g.: <a href="http://davidwalsh.name/css-variables-php-dynamic">David Walsh</a> (in <acronym title="PHP Hypertext Preprocessor; an HTML-embedded scripting language">PHP</acronym>), <a href="http://sperling.com/examples/pcss/">Tedd Sperling</a> (in <acronym title="PHP Hypertext Preprocessor; an HTML-embedded scripting language">PHP</acronym>), <a href="http://www.digital-web.com/articles/generating_dynamic_css_with_php/">Digital Web Magazine</a> (in <acronym title="PHP Hypertext Preprocessor; an HTML-embedded scripting language">PHP</acronym>), <a href="http://ecoconsulting.co.uk/training/css_includes.shtml">Eco Consulting</a> (in <acronym title="Server Side Include">SSI</acronym>), and <a href="http://icant.co.uk/articles/cssconstants/">Christian Heilmann</a> (<acronym title="Server Side Include">SSI</acronym> and <acronym title="PHP Hypertext Preprocessor; an HTML-embedded scripting language">PHP</acronym>).</p></blockquote>
<p>Quite simply, he&#8217;s correct in stating that programmatic features need not be added to <acronym title="Cascading Style Sheets">CSS</acronym> proper to achieve desired results, but he&#8217;s incorrect in his apparent thinking that designers will be able to use these other tools to leverage <acronym title="Cascading Style Sheets">CSS</acronym>. Take, for instance, the probably more familiar (though not linked above) notion of using JavaScript to manipulate <acronym title="Cascading Style Sheets">CSS</acronym> values.</p>
<pre><code class="javascript">var x = document.getElementById('SideBar'); // get #SideBar element
var y = document.getElementById('MainColumn'); // get #MainColumn
var z = document.defaultView.getComputedStyle(y, '').getPropertyValue('height'); // get computed height of #MainColumn
x.style.height = ( parseInt(z) / 2 ) + 'px'; // set #SideBar's height 1/2 of #MainColumn's</code></pre>
<p>This is an example of programmatic code that uses variables and expressions. It sets the element with the ID of <code>SideBar</code> to half the pixel height of the element with the ID of <code>MainColumn</code>. It does this by obtaining the <code>MainColumn</code>&#8216;s height (at the time this code runs) and saving it in a variable, then performs some trivial math to half the value and use the result as the pixel height of the <code>SideBar</code>.</p>
<p>Doing this is currently impossible with <acronym title="Cascading Style Sheets">CSS</acronym> alone, yet it&#8217;s something that clearly belongs with whatever other &#8220;presentational&#8221; code exists and not in &#8220;programmatic&#8221; scripts that would otherwise be charged with defining &#8220;functionality.&#8221; As Matt states, using JavaScript to &#8220;script&#8221; solutions to <acronym title="Cascading Style Sheets">CSS</acronym>&#8216;s shortcomings like this is not an acceptable answer.</p>
<blockquote cite="http://mattwilcox.net/archive/entry/id/991/"><p><acronym title="Cascading Style Sheets">CSS</acronym> doesn’t have [basic logic or maths]. Nor is it the job of JavaScript to make up for this lack of abilities. JavaScript is about interaction behaviour, and what we are talking about here is pure display logic. Not interaction logic.</p></blockquote>
<p>Moreover, the <em>place</em> designers expect to put code like this is, of course, into a <acronym title="Cascading Style Sheets">CSS</acronym> style sheet. The <em>way</em> designers expect to put code like this into <acronym title="Cascading Style Sheets">CSS</acronym> is by adding delegation features. Requiring designers to learn JavaScript (or any other programming language) to encode such design relationships is nothing short of ridiculous. In what world is that easier for untrained laymen to understand than <acronym title="Cascading Style Sheets">CSS</acronym>?</p>
<h3>Adding delegation to <acronym title="Cascading Style Sheets">CSS</acronym> is worth the effort</h3>
<p>One of Bert&#8217;s arguments against such additions to <acronym title="Cascading Style Sheets">CSS</acronym> is that implementations would become harder to create, and that we&#8217;ll (almost certainly) see more bugs.</p>
<blockquote cite="http://www.w3.org/People/Bos/CSS-variables"><p>extending <acronym title="Cascading Style Sheets">CSS</acronym> makes implementing more difficult and programs bigger, which leads to fewer implementations and more bugs. That has to be balanced against the usefulness of the extension.</p></blockquote>
<p>Although I do agree with his statement that an extension&#8217;s usefulness has to be balanced against its potential costs, I think something so fundamental to design methodology as delegation greatly overcompensates for the cost of such implementation efforts. Moreover, if I understand Bert correctly and as he also discusses, the majority of implementations that would need to implement such delegation already have relatively complex internal structures to make the implementation effort somewhat easier:</p>
<blockquote cite="http://www.w3.org/People/Bos/CSS-variables"><p>There is no scoping [in proposals that only define <em>global</em> constants]. That means that an implementation needs a symbol table, but no stack. A stack would require a little bit more memory, but mostly it would make implementations more complex. (Although every programmer has, one hopes, learnt to program a symbol table with lexical scope during his training.) Constants in <acronym title="Cascading Style Sheets">CSS</acronym> are thus easier than, e.g., <a href="http://www.w3.org/TR/xml-names/"><acronym title="eXtensible Markup Language">XML</acronym> Namespaces,</a> which <em>are</em> lexically scoped.</p>
<p>It is different for those <acronym title="Cascading Style Sheets">CSS</acronym> implementations that provide a <a href="http://www.w3.org/TR/DOM-Level-2-Style/"><acronym title="Cascading Style Sheets">CSS</acronym> Object Model</a> (an <acronym title="Application Programming Interface">API</acronym> for manipulating a style sheet in memory). Those implementations <em>do</em> need to keep track of scope in some way, because adding or removing a line of the style sheet can make a previously redundant definition become meaningful.</p></blockquote>
<p>In order to use JavaScript to solve many of the shortcomings of <acronym title="Cascading Style Sheets">CSS</acronym>, as <em>huge</em> numbers of professional web developers do routinely, we use the very <acronym title="Cascading Style Sheets">CSS</acronym> Object Model whose prior implementation already exists for us to build upon.</p>
<h3><acronym title="Cascading Style Sheets">CSS</acronym> delegation doesn&#8217;t grow the size of the language</h3>
<p>For the sake of argument, let&#8217;s simplify our requirement somewhat so that our somewhat contrived example of design intent is to <em>create a relationship</em> between the <code>MainColumn</code> and the <code>SideBar</code> elements such that they are of equal height. This is more informally known as &#8220;making columns.&#8221;</p>
<p>Here&#8217;s what a natural, hypothetical snippet of <acronym title="Cascading Style Sheets">CSS</acronym> would look like if the language supported delegation features such that it could encode visual relationships.</p>
<pre><code class="css">#SideBar { height: #MainColumn; }</code></pre>
<p>This code theoretically says almost the exact same thing as the JavaScript shown earlier (save for the division, of course); it takes the computed value of the <code>MainColumn</code> element&#8217;s height property and applies that value to the <code>SideBar</code> element&#8217;s height property. In other words, &#8220;The SideBar&#8217;s (element B&#8217;s) height is always the same as the MainColumn&#8217;s (element A&#8217;s).&#8221; (Of course, this is a parse error in reality today.)</p>
<p>This extremely trivial example has some remarkably far-reaching implications, and yet there is really nothing radical about its syntax. Making this a reality significantly expands the capabilities of <acronym title="Cascading Style Sheets">CSS</acronym> without dramatically increasing the size of the language. This capability would not only <a href="http://mattwilcox.net/archive/entry/id/1030/" title="Why you should not use display:table; for layout.">beat the pants off</a> &#8220;<a href="http://www.sitepoint.com/blogs/2008/10/22/everything-you-know-about-css-is-wrong/" title="SitePoint's featuring articles and books about browser support for this."><acronym title="Cascading Style Sheets">CSS</acronym> tables</a>,&#8221; it also potentially obsoletes the arguably <a href="http://ejohn.org/blog/css3-template-layout/" title="Just because John Resig likes it doesn't mean it's good.">misguided efforts of the <acronym title="Cascading Stlye Sheets level 3">CSS3</acronym> Advanced Layout</a> and Grid Positioning modules, too.</p>
<p>We&#8217;ve long since abandoned <code>table</code> layouts because they force us to use presentational markup. That&#8217;s still what &#8220;<acronym title="Cascading Style Sheets">CSS</acronym> tables&#8221; force us to do, too. In other words, with <code>display: table</code>, the <code>SideBar</code> needs to be a child of the <code>MainColumn</code> element or, maybe worse and more likely, a child of a semantically meaningless wrapper element.</p>
<p><acronym title="Cascading Style Sheets">CSS</acronym> positioning was introduced with the promise of freeing us from source-order-dependent styling, without which there is no hope of efficiently abstracting presentation away from structure. Moreover, <strong>abstracting presentation away from structure is the single most important prerequisite needed to improve document reusability and strengthen the semantic Web</strong>. Absolute positioning works, but limitations elsewhere in <acronym title="Cascading Style Sheets">CSS</acronym> mean its use is problematic for many designs, so in practice it doesn&#8217;t gain widespread adoption.</p>
<p>Here&#8217;s a theoretical solution to a two-column and a footer layout using <acronym title="Cascading Style Sheets">CSS</acronym> delegation with this semantic HTML:</p>
<pre><code class="html">&lt;body&gt;
    &lt;div id="MainColumn"&gt;I'm the main column.&lt;/div&gt;
    &lt;div id="SideBar"&gt;I'm the right-hand sidebar.&lt;/div&gt;
    &lt;div id="Legalese"&gt;No one will read me.&lt;/div&gt;
&lt;/body&gt;
</code></pre>
<p>The <acronym title="Cascading Style Sheets">CSS</acronym> would look extremely familiar, possibly like this:</p>
<pre><code class="css">#MainColumn { margin: 0 25% 1em 0; float: left; }
#SideBar { width: 25%; min-height: #MainColumn; }</code></pre>
<p>Using the same <acronym title="HyperText Markup Language">HTML</acronym>, the same solution using the <acronym title="Cascading Stlye Sheets level 3">CSS3</acronym> Advanced Layout module would look something more like this, although to be frank I&#8217;m not certain I fully understand this syntax even after staring at it for months:</p>
<pre><code class="css">body {
    display: "a  b"
             ".  ." /1em
             "c  c"
             75% 25%
}
#MainColumn { position: a; }
#SideBar { position: b; }
#Legalese { position: c; }
</code></pre>
<p>Not only does there seem to me to be far more indirection in this method than there would be using <acronym title="Cascading Style Sheets">CSS</acronym> delegation, there is also an enormous increase to the size of the <acronym title="Cascading Style Sheets">CSS</acronym> language: a new (ASCII-art?!) value to the display property whose syntax is clunky at best. A similar story can be <a href="http://ajaxian.com/archives/w3c-css-grid-positioning" title="Ajaxian reports on a rumor that Internet Explorer 8 will add support for Grid Positioning and shows what that might look like in code.">said of the <acronym title="Cascading Stlye Sheets level 3">CSS3</acronym> Grid Positioning module</a>, which does lots more than just add a new (already complex) <code>gr</code> <acronym title="Cascading Style Sheets">CSS</acronym> unit.</p>
<p>The upshot is that the Advanced Layout and the Grid Positioning modules are doing <em>some</em> of the right things in <em>many</em> of the wrong ways. Both those modules add unnecessary complexity to <acronym title="Cascading Style Sheets">CSS</acronym> without giving designers a natural way to say what they mean. They do more to introduce obfuscation and indirection than simple delegation would, and they aren&#8217;t as broadly capable. Both of them try to solve a specific problem instead of dealing with fundamental deficiencies in the <em>toolset</em> designer&#8217;s have to work with.</p>
<h3>Designers want relationships via delegation, not variables</h3>
<p>Adding delegation such as that I&#8217;ve just shown is a natural, necessary addition to <acronym title="Cascading Style Sheets">CSS</acronym> because it is how designers create visual components&mdash;such as grids&mdash;in their designs. Variables (and constants, and macros, etc.), which simply reuse and modify pre-defined statements aren&#8217;t what designers care about. Adding them <em>will</em> bloat <acronym title="Cascading Style Sheets">CSS</acronym> without adding useful functionality.</p>
<p>&#8220;Okay,&#8221; you may be saying to yourself, &#8220;but delegation is itself a kind of variable, isn&#8217;t it?&#8221; Technically yes, however adding delegation resolves the core deficiency in the <acronym title="Cascading Style Sheets">CSS</acronym> language that designers need to use every day. Yes, it&#8217;s technically a form of variable, but that&#8217;s not how designers think of it. To say that one element&#8217;s visual properties is like another makes a variable only by creating a logical and visually appropriate mapping from the first element&#8217;s property to the second independent of markup, thereby avoiding indirection in the form of a variable name or other unfamiliar symbol.</p>
<p>Delegation like this doesn&#8217;t require the addition of anything other than what already exists in <acronym title="Cascading Style Sheets">CSS</acronym>. Class names and ID values are identifiers whose indirection people <em>already</em> have to deal with. Using them for delegation (to reference another element&#8217;s <em>style</em>) doesn&#8217;t increase the cognitive load any more than using them to reference <em><acronym title="HyperText Markup Language">HTML</acronym> elements</em> does. Though untested, the cognitive load might actually be even less since the <acronym title="Cascading Style Sheets">CSS</acronym> delegation&#8217;s references could be in the same (style sheet) file.</p>
<p>Moreover, delegation will increase the likelihood of document reusability by enabling style sheets to be more self-describing, more self-referential, in a similar way as good markup is. It satisfies a very fundamental need that designers have to define graphical relationships between elements. At the same time, it does so in a way that is natural to both their way of thinking and beneficial to the separation of concerns principle on which the &#8220;web stack&#8221; (the trifecta of <acronym title="HyperText Markup Language">HTML</acronym>, <acronym title="Cascading Style Sheets">CSS</acronym>, and JavaScript) is based.</p>
]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2008/12/14/why-css-needs-delegation-capabilities-and-not-variables/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>WP-Oomph: Add the Oomph Microformat Overlay to your WordPress blog</title>
		<link>http://maymay.net/blog/2008/11/11/wp-oomph-add-the-oomph-microformat-overlay-to-your-wordpress-blog/</link>
		<comments>http://maymay.net/blog/2008/11/11/wp-oomph-add-the-oomph-microformat-overlay-to-your-wordpress-blog/#comments</comments>
		<pubDate>Tue, 11 Nov 2008 12:44:02 +0000</pubDate>
		<dc:creator>Meitar</dc:creator>
				<category><![CDATA[Crosspost]]></category>
		<category><![CDATA[Tech/Computing]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Web Standards]]></category>
		<category><![CDATA[Writing and blogging]]></category>
		<category><![CDATA[microformats]]></category>
		<category><![CDATA[Semantic Web]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/?p=767</guid>
		<description><![CDATA[I&#8217;ve just developed a completely idiotic (by which I mean brain-dead simple) plugin for WordPress that will add the Oomph Microformat Toolkit to all WordPress-generated pages. If you use a WordPress template that encodes your data with valid microformats anywhere on your page, this means when you install the plugin your users will see the [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just developed a completely idiotic (by which I mean brain-dead simple) plugin for WordPress that will add the <a href="http://visitmix.com/Lab/Oomph">Oomph Microformat Toolkit</a> to all <a href="//wordpress.org/">WordPress</a>-generated pages. If you use <a href="http://wordpress.org/extend/themes/tags/microformats" title="Check out the various WordPress themes that support microformats out of the box!">a WordPress template that encodes your data with valid microformats</a> anywhere on your page, this means when you install the plugin your users will see the Oomph microformat overlay and will be able to instantly export this encoded data.</p>
<p>This page is a live example, so if you&#8217;re using a JavaScript-enabled browser you should see a microformat icon on the top-left of the viewport that is pulling data from (at least) my &#8220;The bio&#8221; section in my sidebar. Go ahead, click it. I&#8217;ll wait.</p>
<p>Pretty nifty, isn&#8217;t it? Naturally, all of the credit for this functionality belongs to the Oomph team, not me. If you want to learn how to add <em>microformats</em> to your blog, I&#8217;d recommend <a href="http://www.ablognotlimited.com/articles/getting-semantic-with-microformats-part-1-rel/">Emily Lewis&#8217;s latest series of blog posts, <cite>Getting Semantic with Microformats</cite></a>. If you want to learn how to easily add the Oomph microformat overlay to your WordPress blog, read on.</p>
<h3>The backstory</h3>
<p>After <a href="http://arstechnica.com/news.ars/post/20081006-ask-com-rearms-with-semantics-rich-media-in-search-war.html">Ask.com&#8217;s announcement that they are adding semantic search capabilities to their search engine</a>, there&#8217;s little doubt in anyone&#8217;s mind that the semantic web is the future&#8217;s web. As far as I know, Google has yet to reveal similar initiatives but they are clearly in the know as well. Mark Birbeck, one of the smart folks who <a href="http://www.w3.org/TR/xhtml-rdfa-primer/">devised <acronym title="Resource Description Framework attributes">RDFa</acronym></a>, recently gave <a href="http://youtube.com/watch?v=mxE3FeOyS-E">a Google Tech Talk</a> that made the point that semantics are the next big thing in the Internet search engine game.</p>
<p>However, for semantic web <em>stuff</em> to really take hold, two things need to happen first. I think these things need to look like this:</p>
<ol>
<li>Developers must create tools, plugins, and other software that makes it possible for the wider community to create compelling, interoperable applications that support semantic encoding. Thankfully, we are already at this point, with toolkits like the <a href="http://visitmix.com/Lab/Oomph">Oomph Microformat toolkit coming out of MixLabs</a>.</li>
<li>Armed with these software tools, <acronym title="Content Management System">CMS</acronym> and other publishing platforms need to adopt semantics as first-class features of their platforms, and build interfaces that end-users can make immediate use of. This is where we still need to go, though some platforms like <a href="http://www.sitepoint.com/blogs/2008/03/05/drupal-7-a-living-breathing-semantic-web-citizen/">Drupal have begun to pave the way for this</a>.</li>
</ol>
<p>Drupal 7 will be fantastic, I&#8217;m sure, but we live in the here and now. I saw the Oomph microformat overlay on Emily Lewis&#8217;s blog and was more convinced than ever that if everyone—programmers and laymen alike—had easy access to these tools, they&#8217;d simply be pounding down the doors to use them. So that&#8217;s why I sat down and wrote a completely idiotic plugin for WordPress that makes it completely, utterly, brain-dead simple for anyone with <a href="http://wordpress.org/extend/themes/tags/microformats" title="Check out the various WordPress themes that support microformats out of the box!">a microformats-enabled WordPress theme</a> to add the overlay to their site.</p>
<h3 id="wp-oomph-download-the-plugin">WP-Oomph: Download the plugin</h3>
<p>My request to add the plugin to the <a href="//wordpress.org/extend/plugins/">WordPress.org Plugin Directory</a> has <del datetime="2008-11-12T14:45:28+00:00">not yet</del> been completed<del datetime="2008-11-12T14:45:28+00:00">, so in the mean time I&#8217;m hosting the plugin right here. (When/if it&#8217;s accepted it&#8217;ll end up being</del> <ins datetime="2008-11-12T14:45:28+00:00">The plugin is</ins> <a href="//wordpress.org/extend/plugins/wp-oomph/">hosted on that site permanently</a>.<del datetime="2008-11-12T14:45:28+00:00">)</del></p>
<p>The latest version is: <strong class="latest-version">0.1.1</strong>.</p>
<p>Download the <a href="http://wordpress.org/extend/plugins/wp-oomph/">latest version of the WP-Oomph plugin</a>.</p>
<p>Thanks to the Oomph team&#8217;s work, the plugin is a ridiculous 1-liner (for now) that uses <a href="http://codex.wordpress.org/Function_Reference/wp_enqueue_script">WordPress&#8217;s <code>wp_enqueue_script()</code> function</a> to call both its included <a href="//jquery.com/">jQuery</a> library and the Oomph library itself. And, well, that&#8217;s it. I told you it was idiotic, but at least now the whole process of microformat-enabling a WordPress blog is 100% point-and-click.</p>
<h3 id="wp-oomph-frequently-asked-questions">WP-Oomph: Frequently Asked Questions</h3>
<dl>
<dt>I installed and activated the plugin, but nothing is different. How come?</dt>
<dd>
<p>First, view the source of your WordPres-generated page and make sure you see a line similar to the following near the top:</p>
<pre class="html" style="white-space:normal;">&lt;script type='text/javascript' src='http://visitmix.com/labs/oomph/1.0/Client/oomph.min.js?ver=1.0'&gt;&lt;/script&gt;</pre>
<p>If you see that but there&#8217;s still nothing different about your page, then you probably don&#8217;t have any (valid) microformats. You might consider <a href="http://wordpress.org/extend/themes/tags/microformats" title="Check out the various WordPress themes that support microformats out of the box!">switching to a WordPress theme with built-in microformat support</a>, or modifying your theme&#8217;s code to add some of your own. You can <a href="http://microformats.org/wiki/wordpress">learn more about the support WordPress offers for microformats in the Microformat wiki</a>.</p>
</dd>
<dt>The plugin does let me do <var>X</var> thing that I want to do! Why not?</dt>
<dd>
<p>Most likely because I haven&#8217;t taken <var>X thing</var> into account. Sorry, I&#8217;m not a psychic (as much as I wish I were). However, you&#8217;re encouraged to leave a comment on this post or to contact me elsewhere to request that I add capabilities to the plugin. Better yet, if you&#8217;re comfortable doing so, send me a patch.</p>
</dd>
</dl>
]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2008/11/11/wp-oomph-add-the-oomph-microformat-overlay-to-your-wordpress-blog/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Are you missing the point of using a version control tool?</title>
		<link>http://maymay.net/blog/2008/11/08/are-you-missing-the-point-of-using-a-version-control-tool/</link>
		<comments>http://maymay.net/blog/2008/11/08/are-you-missing-the-point-of-using-a-version-control-tool/#comments</comments>
		<pubDate>Sat, 08 Nov 2008 05:49:09 +0000</pubDate>
		<dc:creator>Meitar</dc:creator>
				<category><![CDATA[Crosspost]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Tech/Computing]]></category>
		<category><![CDATA[bzr]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[Subversion]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/?p=745</guid>
		<description><![CDATA[The other day I gave a brief (and overly-hyper) talk about git, the (very) dumb, (very) fast version control system. It was part of SyPy&#8216;s Git vs. Hg vs. Bzr night. Rather than be flamingly competitive, however, I had a lot of fun that night learning about the differences between the DSCM tools, which was [...]]]></description>
			<content:encoded><![CDATA[<p>The other day <a href="blog/2008/11/09/git-fundamentals-in-30-minutes-or-less/">I gave a brief (and overly-hyper) talk</a> about <a href="//git.or.cz">git, the (very) dumb, (very) fast version control system</a>. It was part of <a href="//sypy.org/">SyPy</a>&#8216;s <cite>Git vs. Hg vs. Bzr</cite> night. Rather than be flamingly competitive, however, I had a lot of fun that night learning about the differences between the <acronym title="Distributed Source Code (or Change) Management">DSCM</acronym> tools, which was especially interesting since I&#8217;ve only ever used Git in real life scenarios.</p>
<p>Since <a href="/blog/2008/06/17/fix-subversion-checksum-mismatch-error-by-editing-svnentries-file/">I&#8217;m a Subversion refugee</a>, my only experience with different version control systems is mostly with the distinctions between the centralized versus the distributed models, not between the various tools you can use in either paradigm. What struck me when I first began using git was how conceptually similar it felt to using Subversion when I was using it <em>by myself</em> (as a lone developer) but how radically different it suddenly felt the moment I was sharing my code with someone else.</p>
<p>Now, I&#8217;m a die-hard individualist. I want things to happen my way as much as possible, and I don&#8217;t really care what happens for anyone else as long as when I interact with other people those interactions are as mutually beneficial as they can possibly be. That&#8217;s why I love <acronym title="Distributed Source Code (or Change) Management">DSCM</acronym> tools so much.</p>
<p>Distributed source code management systems feel much more like translator tools between the ways in which people work as opposed to feeling like a dogma of workflow management processes, like centralized systems do. This paradigm appeals both to my preferred way to work and, as it turns out, helps more people stay more productive all at the same time.</p>
<p>This is also why I&#8217;m a firm believer that most of the people I&#8217;ve worked with in the past completely missed the point of using version control systems. It seems to me that most developers I&#8217;ve worked with have thought of SCM tools as &#8220;the &#8216;Save As…&#8217; button on steroids.&#8221; While these developers are technically correct, their narrow view of what a VCS does means they aren&#8217;t taking advantage of the full potential of the concept.</p>
<p>The power of a version control system isn&#8217;t just in that it gives you the ability to easily hit the proverbial &#8220;Save As…&#8221; button as much as you want, but rather in that <em>you get to retrieve those other versions when you&#8217;re ready for them</em>, regardless of what your fellow developers are doing to the code on their machines. This means that <strong>a version control system&#8217;s real purpose is to insulate you from changes of any sort until you&#8217;re ready to deal with them</strong>. A good tool also does this reciprocally; it will insulate your fellow developers from the changes you&#8217;re making until they&#8217;re ready for them.</p>
<p>Admittedly, that&#8217;s not a very concrete &#8220;feature.&#8221; It&#8217;s more like a fundamental philosophical principle, which is probably why it&#8217;s so hard to encode into the physical manifestation of a tool. Then on top of all of that complicatedness you have to add things like usability and interoperability and resource efficiency. That&#8217;s where I learned about the majority of the distinctions between the various <acronym title="Distributed Source Code (or Change) Management">DSCM</acronym> tools discussed in SyPy&#8217;s presentation.</p>
<p>However, for me, all of those things ultimately get evaluated against the following question: Does Feature X help insulate me from change (does it help in persisting my view of the state of the world until I&#8217;m ready for it to change), or not?</p>
<p>For example, Bazaar&#8217;s interesting notion of &#8220;nested commits&#8221; with dotted revision numbers is really intriguing because it&#8217;s much (<em>much</em>) more user-friendly than git&#8217;s notion of exposing SHA-1 hashes to (mere mortal) end user&#8217;s eyes. Yet, while it&#8217;s certainly less painful than copying-and-pasting hashes all over the place, there&#8217;s little fundamental difference in the way these mechanisms actually portray the state of the world to me. Any given SHA-1 will always be the exact same commit object. Any given dotted revision number will also always be the same commit (within one&#8217;s own unchanged repository).</p>
<p>In contrast, I learned from <a href="//sourcefrog.net/">Martin Pool</a> that <a href="http://bazaar-vcs.org/FAQ#head-e5eac1a6e54ce992e2b5e4d16548b6b4837c4373">Bazaar has a &#8220;push over SFTP&#8221; feature</a> to let you &#8220;export&#8221; or &#8220;archive&#8221; a version of code by transmitting it over an SFTP connection. Now <em>that</em> really caught my attention because it&#8217;s an example of the version control tool acting like that translator I was mentioning earlier; the interoperability helps people <em>not need to change until they want to</em>. In this case, it means you <em>never</em> have to install Bazaar on a remote server to get your content there via the tool. That&#8217;s very cool—much cooler than the mundane technical fact that <code>bzr</code> supports the SFTP protocol out of the box.</p>
<p>Of course, it&#8217;s technically pretty trivial to write an <a href="/blog/tag/expect/">expect</a> or <a href="/blog/category/programming/bashshell-scripting">shell script</a> wrapper to enable git (or whatever other tool you want to use) mimic this behavior. And that&#8217;s exactly the point: technology is always the easy part. It&#8217;s <em>doing it right</em> at a fundamental level that&#8217;s actually really difficult to do correctly.</p>
]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2008/11/08/are-you-missing-the-point-of-using-a-version-control-tool/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SECURITY FAIL: Workamajig.com encourages users to email cleartext passwords</title>
		<link>http://maymay.net/blog/2008/10/22/security-fail-workamajigcom-encourages-users-to-email-cleartext-passwords/</link>
		<comments>http://maymay.net/blog/2008/10/22/security-fail-workamajigcom-encourages-users-to-email-cleartext-passwords/#comments</comments>
		<pubDate>Wed, 22 Oct 2008 08:29:33 +0000</pubDate>
		<dc:creator>Meitar</dc:creator>
				<category><![CDATA[Business & E-Commerce]]></category>
		<category><![CDATA[Crosspost]]></category>
		<category><![CDATA[Security & Privacy]]></category>
		<category><![CDATA[Tech/Computing]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/?p=711</guid>
		<description><![CDATA[Creative agency management tool company Workamajig.com is a sizable operation with an international client base. Their product used to be called &#8220;Creative Manager Pro&#8221; which I can only assume they changed because it wasn&#8217;t actually creative enough. Anyway, it turns out that Workamajig has what is without doubt the absolute worst error message I can [...]]]></description>
			<content:encoded><![CDATA[<p>Creative agency management tool company <a href="http://workamajig.com/">Workamajig.com</a> is a sizable operation with an international client base. Their product used to be called &#8220;Creative Manager Pro&#8221; which I can only assume they changed because it wasn&#8217;t actually creative enough. Anyway, it turns out that Workamajig has what is without doubt the absolute worst error message I can possibly think of from a security standpoint.</p>
<p>The error, which is triggered on login regardless of whether or not the username and password you enter are correct (presumably because the issue occurs while trying to authenticate), displays the username <em>and the password</em> the user has entered <em>in cleartext</em> and then (as if that wasn&#8217;t bad enough) <em>encourages the user to email this information to their support department!</em></p>
<p>Yes, we have made the company aware of the problem. No, they have not fixed it yet. Proof in the form of a screen capture from literally 10 minutes ago:</p>
<div id="attachment_712" class="wp-caption aligncenter" style="width: 419px"><a href="http://maymay.net/blog/wp-content/uploads/2008/10/workamajig-security-fail.png"><img src="http://maymay.net/blog/wp-content/uploads/2008/10/workamajig-security-fail.png" alt="Workamajig.com login error echoes the entered password in cleartext and encourages the user to send this to their support via email." title="workamajig-security-fail" width="409" height="361" class="size-full wp-image-712" /></a><p class="wp-caption-text">Workamajig.com login error echoes the entered password in cleartext and encourages the user to send this to their support via email.</p></div>
<p>No, these are not real credentials, but an uninformed user may very well enter access credentials that are valid. Since this issue is <em>not</em> triggered by invalid credentials, that means valid login information for god knows how many Workamajig user accounts is very likely sitting in the <acronym title="Simple Mail Transfer Protocol">SMTP</acronym> logs of countless mail servers. Since in many countries these logs are federally mandated to be saved for at least two years, if I were a user of Workamajig I would seriously consider changing my account password <acronym title="As Soon As Possible">ASAP</acronym>, as well as changing any other account that I used the same password for!</p>
<p>I can&#8217;t be sure from this screen shot, but I <em>sincerely</em> hope that user&#8217;s passwords are passed around in the application as well as stored on disk as salted cryptographic hashes. Of course, after seeing this, I wouldn&#8217;t be shocked if that wasn&#8217;t the case. The good news is that the login screen to their application is only accessible with an <acronym title="Secure Sockets Layer">SSL</acronym>/TLS connection, which does prevent someone from snooping on the wire. Nevertheless, there are still many attack vectors that <acronym title="Secure Sockets Layer">SSL</acronym>/TLS doesn&#8217;t protect against if the rest of the application is not secure or, say, if you&#8217;re encouraged to bypass those protections by sending emails with sensitive data in order to request technical support.</p>
<p>Anyway, hopefully this gets fixed sooner rather than later. At the very least, <strong>don&#8217;t encourage users to email cleartext passwords</strong>. That is pretty much always a Very Bad Thing.</p>
<p><ins datetime="2008-10-23T23:39:14+00:00"><strong>Update:</strong> It took only a couple of days for Workamajig to notice <em>this</em> blog post, which is great because it means I woke up to a forwarded email in my inbox in which a Workamajig representative said:</p>
<blockquote><p>On the issue of showing the user id and password in an error message, [we] will be changing the way that error message is displayed. […] Just to clarify the user id and password is just on the screen of the user that is logged in, and that message to copy and paste is a standard messages and it is just intended for you to copy and paste the error message; you are not required to send the user id and password.</p></blockquote>
<p>I haven&#8217;t encountered the same issue again (but then again I only tried to login to my account twice in between then and now), so I can&#8217;t verify that the error message really has changed but I&#8217;d give Workamajig the benefit of the doubt. If you&#8217;re using Workamajig and notice a change in the way this login error is handled before I do, leave a comment to let me know it&#8217;s really been changed.<br />
</ins></p>
]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2008/10/22/security-fail-workamajigcom-encourages-users-to-email-cleartext-passwords/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>One Minute Mac Tip: Create an encrypted disk image to store confidential files</title>
		<link>http://maymay.net/blog/2008/10/13/one-minute-mac-tip-create-an-encrypted-disk-image-to-store-confidential-files/</link>
		<comments>http://maymay.net/blog/2008/10/13/one-minute-mac-tip-create-an-encrypted-disk-image-to-store-confidential-files/#comments</comments>
		<pubDate>Mon, 13 Oct 2008 06:33:17 +0000</pubDate>
		<dc:creator>Meitar</dc:creator>
				<category><![CDATA[Crosspost]]></category>
		<category><![CDATA[HOWTO]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Security & Privacy]]></category>
		<category><![CDATA[Tech/Computing]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/?p=548</guid>
		<description><![CDATA[Nary a day goes by when I don&#8217;t use my computer for some extremely personal stuff. I would consider it a Very Bad Thing if some of this information (my bank account details or private SSH keys, for instance) fell out of my control. Everyone has sensitive files that they keep on their computer and, [...]]]></description>
			<content:encoded><![CDATA[<p>Nary a day goes by when I don&#8217;t use my computer for some <em>extremely</em> personal stuff. I would consider it a <a href="http://www.catb.org/jargon/html/B/Bad-Thing.html">Very Bad Thing</a> if some of this information (my bank account details or private <acronym title="Secure SHell">SSH</acronym> keys, for instance) fell out of my control.</p>
<p>Everyone has sensitive files that they keep on their computer and, fortunately for Mac <acronym title="Operating System">OS</acronym> X Users, Apple has made it ridiculously easy to create a cryptographically secure containers for such files. You can think of a container like this, which is just a standard Mac <acronym title="Operating System">OS</acronym> X disk image (<code>.dmg</code>) file, like a vault that you open, put stuff you want to keep safe inside, and then close again.</p>
<p>Here&#8217;s how you go about making and using one.</p>
<h3>Create the container, an encrypted disk image</h3>
<ol>
<li>First, open up your copy of Disk Utility.app, which is located in your computer&#8217;s <code>/Applications/Utilities</code> folder. (As an aside, this program is a bit like a swiss army knife for handling disk operations in Mac <acronym title="Operating System">OS</acronym> X. You should definitely <a href="http://en.wikipedia.org/wiki/Disk_Utility">find out what else it can do</a>).</li>
<li>Next, select the <em>File &rarr; New &rarr; Blank Disk Image&hellip;</em> option. This will cause the New Blank Image window to appear.</li>
<li>Fill in the typical details such as the disk image file&#8217;s name and where you want to save it to. In addition, you&#8217;ll be presented with a number of options such as Volume Name, Volume Size, and Image Format. The defaults are usually adequate except for Volume Name, which you should customize so that when you mount the disk image the disk label is meaningful for you, and the Image Format, which I recommend you switch to &#8220;<a href="http://en.wikipedia.org/wiki/Sparse_disk_image">sparse disk image</a>.&#8221;
<p>Sparse disk images can start small and grow automatically as you write more files into them. If what you want to keep secure in this manner are very large files, say gigantic high resolution PhotoShop documents, then you might <a href="http://macosx.com/article/live-filevaultsparse-bundle-backups-in-leopard.html">consider the sparse <em>bundle</em> disk image format</a> instead.</p>
<p>Also, obviously, set the Encryption to a value other than &#8220;None.&#8221;</p>
<p>Here&#8217;s an example screenshot from my Mac:<div id="attachment_691" class="wp-caption aligncenter" style="width: 510px"><a href="http://maymay.net/blog/wp-content/uploads/2008/10/new-blank-image-screenshot.png"><img src="http://maymay.net/blog/wp-content/uploads/2008/10/new-blank-image-screenshot.png" alt="Screenshot of the New Blank Image window showing meaningful values entered, Encryption field set to 128-bit, and Image Format field set to sparse disk image." title="new-blank-image-screenshot" width="500" height="470" class="size-full wp-image-691" /></a><p class="wp-caption-text">Screenshot of the New Blank Image window showing meaningful values entered, Encryption field set to 128-bit, and Image Format field set to sparse disk image.</p></div></li>
<li>Press the &#8220;Create&#8221; button and you&#8217;ll be presented with a standard password selection dialogue. This is the password you&#8217;ll use to mount the disk image and is analogous to the idea of setting the combination on your vault&#8217;s lock. <a href="http://support.apple.com/kb/HT1506" title="Learn how to choose good passwords in Mac OS X.">It&#8217;s critical that the password you choose is a good one</a>. Ideally, your password is a totally random string that may include any printable character. Since that&#8217;s hard to remember, you can <a href="http://maymay.net/blog/2008/05/06/one-minute-mac-tip-use-mac-os-xs-keychain-to-store-recover-and-sync-all-your-passwords-from-one-place/">have the Mac <acronym title="Operating System">OS</acronym> X keychain manage your passwords for you</a>.</li>
</ol>
<h3>Encrypt some files by writing them to the disk image</h3>
<p>Now that you have an encrypted disk image, a secure container for your sensitive data, you can make use of it just as you might any other disk image on Mac <acronym title="Operating System">OS</acronym> X. For instance, say I have a top secret file called &#8220;My Killer Business Plan.pages&#8221; and I don&#8217;t want anyone to get at it. All I need to do is copy the file into my encrypted disk image, as the following screenshot shows:</p>
<a href="http://maymay.net/blog/wp-content/uploads/2008/10/encrypting-files-via-copy-to-image.jpg"><img src="http://maymay.net/blog/wp-content/uploads/2008/10/encrypting-files-via-copy-to-image-300x138.jpg" alt="Copying &quot;My Killer Business Plan.pages&quot; to the encrypted disk image encrypts the file, too." title="encrypting-files-via-copy-to-image" width="300" height="138" class="size-medium wp-image-693" /></a>
<p>It should go without saying that you want to delete the original, unencrypted copy of the file you&#8217;re copying into the encrypted disk image, but I&#8217;ll say that anyway. Don&#8217;t leave unprotected copies of your files lying around. Also, be certain to unmount (eject) the disk image when you&#8217;re done using it because the only thing the password protects is opening the disk image, not the files contained within it.</p>
<h3>External references</h3>
<p>Here are some additional places where this technique is discussed. Check out these additional articles about this topic elsewhere for more information and other perspectives:</p>
<ul>
<li><a href="http://support.apple.com/kb/HT1578">Mac <acronym title="Operating System">OS</acronym> X: How to create a password-protected (encrypted) disk image</a></li>
<li><a href="http://docs.info.apple.com/article.html?artnum=107332">Mac <acronym title="Operating System">OS</acronym> X: About Encrypted Disk Images</a></li>
<li><a href="http://www.macosxhints.com/article.php?story=20030212055706937">MacOSXHints.com: Create an encrypted disk image that grows as required</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2008/10/13/one-minute-mac-tip-create-an-encrypted-disk-image-to-store-confidential-files/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Extract list of all Apple WikiServer wiki titles into CSV format</title>
		<link>http://maymay.net/blog/2008/09/22/extract-list-of-all-apple-wikiserver-wiki-titles-into-csv-format/</link>
		<comments>http://maymay.net/blog/2008/09/22/extract-list-of-all-apple-wikiserver-wiki-titles-into-csv-format/#comments</comments>
		<pubDate>Mon, 22 Sep 2008 05:35:55 +0000</pubDate>
		<dc:creator>Meitar</dc:creator>
				<category><![CDATA[Bash/Shell Scripting]]></category>
		<category><![CDATA[Crosspost]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Tech/Computing]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/?p=652</guid>
		<description><![CDATA[An interesting request came in today from a coworker. She wanted to create a spreadsheet that contained all of our intranet&#8217;s wiki pages (which uses the Apple WikiServer), presumably because Apple doesn&#8217;t provide an easy way to &#8220;list all pages&#8221; in the wiki itself. Along with the page title, she also wanted to extract its [...]]]></description>
			<content:encoded><![CDATA[<p>An interesting request came in today from a coworker. She wanted to create a spreadsheet that contained all of our intranet&#8217;s wiki pages (which uses the Apple WikiServer), presumably because Apple doesn&#8217;t provide an easy way to &#8220;list all pages&#8221; in the wiki itself. Along with the page title, she also wanted to extract its internal ID, its <acronym title="Uniform Resource Locator">URL</acronym>, and the time the page was created as well as the time it was last modified.</p>
<p>I spent about an hour looking into this this afternoon and it turns out that much of this information is readily available on the filesystem in the Apple WikiServer&#8217;s data store. I whipped up the following shell script to extract this information in CSV format, exactly as requested.</p>
<p>I&#8217;m posting this script here in case someone else wants similar &#8220;export a list of WikiServer pages to a comma-separated values (CSV) file&#8221; functionality but isn&#8217;t sure how to go about getting it. To use this, just edit the line that reads <code>http://my-server.example.com/groups/wiki/</code> so that it refers to the wiki base <acronym title="Uniform Resource Identifier">URI</acronym> of your own server.</p>
<p><ins datetime="2008-09-23T07:15:49+00:00"><strong>Update:</strong> The latest version of this script is now available at <a href="//github.com/meitar/wikipages2csv/">its Github-hosted repository</a>. <strong>You should probably use that instead of the script below.</strong></ins></p>
<pre class="shell">
#!/bin/<var>sh</var> -
#
# Script to extract data from an Apple WikiServer's data store by querying the
# filesystem itself. Creates a 'wikipages.csv' file that's readable by any
# spreadsheeting application, such as Numbers.app or Microsoft Excel.app.
#
# USAGE:   To use this script, change to the WikiServer's pages directory, then
#          just run this script. A file named wikipages.csv will be created in
#          your current directory. For instance:
#
#              cd /Library/Collaboration/Groups/mygroup/wiki  # dir to work in
#              wikipages2csv.sh                               # run the script
#              cp wikipages.csv ~/Desktop                     # save output
#
# WARNING: Since the WikiServer's files are only accessible as root, this script
#          must be run as root to function. Additionally, this is not extremely
#          well tested, so use at your own risk.
#
# Author:  Meitar Moscovitz
# Date:    Mon Sep 22 15:03:54 EST 2008

##### CONFIGURE HERE ########

# The prefix to append to generated links. NO SPACES!
WS_URI_PREFIX=http://my-server.example.com/groups/wiki/

##### END CONFIGURATION #####
# DO NOT EDIT PAST THIS LINE
#############################

WS_CSV_OUTFILE=wikipages.csv
WS_PAGE_IDS_FILE=`mktemp ws-ids.tmp.XXXXXX`

function extractPlistValueByKey () {
    head -n \
      $(expr 1 + `grep -n "&lt;key&gt;$1&lt;/key&gt;" page.plist | cut -d ':' -f 1`) page.plist | \
        tail -n 1 | cut -d '&gt;' -f 2 | cut -d '&lt;' -f 1
}

function linkifyWikiServerTitle () {
    echo $1 | sed -e 's/ /_/g' -e 's/&amp;amp;/_/g' -e 's/&amp;gt;/_/g' -e 's/&amp;lt;/_/g' -e 's/\?//g'
}

function formatISO8601date () {
    echo $1 | sed -e 's/T/ /' -e 's/Z$//'
}

function csvQuote () {
    echo $1 | grep -q ',' &gt;/dev/null
    if [ $? -eq 0 ]; then
        echo '"'$1'"'
    else
        echo $1
    fi
}

ls -d [^w]*.page | \
  sed -e 's/^\([a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9]\)\.page$/\1/' &gt; $WS_PAGE_IDS_FILE

echo "Title,ID,Date Created,Last Modified,<acronym title="Uniform Resource Identifier">URI</acronym>" &gt; $WS_CSV_OUTFILE
while read id; do
    cd $id.page
    title=$(extractPlistValueByKey title)
    created_date="$(formatISO8601date $(extractPlistValueByKey createdDate))"
    modified_date="$(formatISO8601date $(extractPlistValueByKey modifiedDate))"
    link=$WS_URI_PREFIX"$id"/`linkifyWikiServerTitle "$title"`.html
    cd ..
    echo `csvQuote "$title"`,$id,$created_date,$modified_date,`csvQuote "$link"` &gt;&gt; $WS_CSV_OUTFILE
done &lt; $WS_PAGE_IDS_FILE
rm $WS_PAGE_IDS_FILE
</pre>
<p>For those new to the Wiki Server, this <a href="/blog/2008/04/05/a-web-developers-introduction-to-the-apple-wikiserver-part-1/">introduction to the Apple WikiServer for web developers</a> may be of interest.</p>
]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2008/09/22/extract-list-of-all-apple-wikiserver-wiki-titles-into-csv-format/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Add a post limit and output format to the WordPress Category Posts plugin v2.0</title>
		<link>http://maymay.net/blog/2008/09/19/add-a-post-limit-and-output-format-to-the-wordpress-category-posts-plugin-v20/</link>
		<comments>http://maymay.net/blog/2008/09/19/add-a-post-limit-and-output-format-to-the-wordpress-category-posts-plugin-v20/#comments</comments>
		<pubDate>Fri, 19 Sep 2008 15:24:25 +0000</pubDate>
		<dc:creator>Meitar</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tech/Computing]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Writing and blogging]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/?p=643</guid>
		<description><![CDATA[Tonight I wrote a quick (and idiotic) patch to the very simple WordPress Category Post plugin v2.0. This backwards-compatible patch features: parameter-based post limit to define how many posts the plugin function will print parameter-based format option to output the posts in real &#60;li&#62; elements The wp-category-posts.php patch file is available for download here. To [...]]]></description>
			<content:encoded><![CDATA[<p>Tonight I wrote a quick (and idiotic) patch to the very simple WordPress Category Post plugin v2.0. This backwards-compatible patch features:</p>
<ul>
<li>parameter-based post limit to define how many posts the plugin function will print</li>
<li>parameter-based format option to output the posts in real <code>&lt;li&gt;</code> elements</li>
</ul>
<p>The <a href='http://maymay.net/blog/wp-content/uploads/2008/09/wp-category-posts.patch'><code>wp-category-posts.php</code> patch file is available for download here</a>. To apply the patch, run the following commands at your shell promp:</p>
<pre class="shell">
cd <var>path/to/wordpress/installation</var>/wp-content/plugins/wordpress-category-posts
patch -p0 < <var>path/to/downloaded</var>/wp-category-posts.patch
</pre>
<p>I&#8217;m hoping this will get integrated as the next version of the plugin, perhaps version 2.1.</p>
]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2008/09/19/add-a-post-limit-and-output-format-to-the-wordpress-category-posts-plugin-v20/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

