<?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; Productivity</title>
	<atom:link href="http://maymay.net/blog/category/information-communication/productivity/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>Tue, 22 May 2012 03:33:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<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>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>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>Scrum-style Burn Down Chart in iWork &#8217;08 Numbers.app</title>
		<link>http://maymay.net/blog/2008/09/06/scrum-style-burn-down-chart-in-iwork-08-numbersapp/</link>
		<comments>http://maymay.net/blog/2008/09/06/scrum-style-burn-down-chart-in-iwork-08-numbersapp/#comments</comments>
		<pubDate>Sat, 06 Sep 2008 11:46:26 +0000</pubDate>
		<dc:creator>Meitar</dc:creator>
				<category><![CDATA[Apple/Macintosh]]></category>
		<category><![CDATA[Crosspost]]></category>
		<category><![CDATA[Information & Communication]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tech/Computing]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/?p=617</guid>
		<description><![CDATA[Ever since I was introduced to the Scrum methodology of software development, I&#8217;ve enjoyed my work so much more than before. Most of that enjoyment is due to a sense of visibility, of knowing what&#8217;s going on. I find working without an accurate awareness of the situation at large very disorienting, and software and web [...]]]></description>
			<content:encoded><![CDATA[<p>Ever since I was introduced to the <a href="http://en.wikipedia.org/wiki/Scrum_(development)">Scrum methodology of software development</a>, I&#8217;ve enjoyed my work so much more than before. Most of that enjoyment is due to a sense of visibility, of knowing what&#8217;s going on.</p>
<p>I find working without an accurate awareness of the situation at large very disorienting, and software and web development are notorious for being circumstances that change rapidly. That&#8217;s why one of my favorite things about Scrum is the <a href="http://en.wikipedia.org/wiki/Burn_down_chart">burn down chart</a>. This is nothing more complex than a simple graph that depicts how much work you bit off and how far along trying to chew it you actually are. The benefit, of course, is that it&#8217;s pretty obvious pretty quickly if you&#8217;ve bit off more than you can chew. ;)</p>
<p>So up &#8217;til now, my team and I have been doing this all on paper. There&#8217;s a certain tactile appreciation I have for doing this sort of thing on paper, but of course there are disadvantages, too. For instance, you can&#8217;t easily archive the information. You can&#8217;t easily share it with remote contractors. You can&#8217;t automatically mine this valuable data with software tools. You get the picture.</p>
<p>There are a few <a href="http://trac-hacks.org/wiki/ScrumBurndownPlugin">cool plugins to some tools like Trac</a> that do all this, but at first blush most of these tools seem to require that you move <em>all</em> of your Scrum&#8217;s planning into the digital world. That is, you can&#8217;t just do the burn down chart, you have to do all your estimation (MoSCoW desirability, sizing, estimating ideal hours) through some tool. That&#8217;s a big step, and I wanted something simpler.</p>
<p>So naturally, I came up with a spreadsheet in <a href="http://www.apple.com/iwork/numbers/">Numbers.app</a> as my solution. I mean, how much simpler can you get? Sure, it&#8217;s not exactly &#8220;well integrated&#8221; with other tools, but your non-tech-savvy boss will probably love it, and <a href="/blog/category/programming/applescript/">AppleScript</a> can be used to automate data extraction. Here&#8217;s what it looks like:</p>
<div id="attachment_618" class="wp-caption aligncenter" style="width: 310px"><a href="http://maymay.net/blog/wp-content/uploads/2008/09/example-burn-down-chart-in-numbers.png"><img src="http://maymay.net/blog/wp-content/uploads/2008/09/example-burn-down-chart-in-numbers-300x203.png" alt="An example Scrum-style burn down chart in Apple&#039;s iWork &#039;08 Numbers spreadsheeting application, complete with an actual chart." title="example-burn-down-chart-in-numbers" width="300" height="203" class="size-medium wp-image-618" /></a><p class="wp-caption-text">An example Scrum-style burn down chart in Apple's iWork '08 Numbers spreadsheeting application, complete with an actual chart.</p></div>
<p><small>(Click the screenshot to get a full-size view.)</small></p>
<p>As you can see, the Numbers sheet is a simple table and a line chart. I&#8217;ve embedded instructions for how to use the chart into the example itself, which I&#8217;ll quote here:</p>
<blockquote><p>
This is a sample Scrum-style iteration burn down chart for software development created by <a href="http://MeitarMoscovitz.com/">Meitar Moscovitz</a>. It can be used to plot a team’s progress throughout a development cycle (<acronym title="Also Known As">aka</acronym>. “iteration” or “sprint”). This sample chart depicts a 3-week iteration (15 working days) with a 150-point target goal.</p>
<p>The <em>X-axis</em> represents time, and is thus labelled <strong>Time in Days</strong>, while the <em>Y-axis</em> represents the work to be completed, and is labelled <strong>Points</strong>.</p>
<p>The <strong style="color: green;">green line</strong> shows the team’s <strong>ideal velocity</strong> based upon the total number of points—termed the <strong>Remaining Initial Value</strong>—scheduled for completion in the graphed iteration.</p>
<p>The <strong style="color: blue;">blue line</strong> shows the team’s <strong>actual velocity</strong> (or “completed work”), which is entered by the team leader (<acronym title="Also Known As">aka</acronym>. Scrum Master) after each day in the <strong>Done</strong> column.</p>
<p><strong>To use this chart:</strong> duplicate this sheet, enter your iteration’s total points in the <strong>Initial Value</strong> row of the <strong>Remaining</strong> column, and delete the values in the Done column except its initial value of 0. To add more days, copy and paste more rows into the table. Optionally, give the sheet and its contents new titles. ;)
</p></blockquote>
<p>Feel free to <a href='http://maymay.net/blog/wp-content/uploads/2008/09/example-burn-down-chartnumbers.zip'>download the <cite>Example Burn Down Chart.numbers</cite> file</a> and use it yourself. If you do use it, please leave a comment and let me know how you&#8217;re going. Thanks, and enjoy!</p>
<p><ins datetime="2008-09-08T08:25:58+00:00">(<a href="http://www.mountaingoatsoftware.com/alt_releaseburndown">Mike Cohn of Mountain Goat Software has got a similar spreadsheet for Excel</a> you can download.)</ins></p>
]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2008/09/06/scrum-style-burn-down-chart-in-iwork-08-numbersapp/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Productivity: It&#8217;s not what you do, it&#8217;s how you do it, and twentysomethings do it better</title>
		<link>http://maymay.net/blog/2008/08/04/productivity-its-not-what-you-do-its-how-you-do-it-and-twentysomethings-do-it-better/</link>
		<comments>http://maymay.net/blog/2008/08/04/productivity-its-not-what-you-do-its-how-you-do-it-and-twentysomethings-do-it-better/#comments</comments>
		<pubDate>Mon, 04 Aug 2008 15:20:57 +0000</pubDate>
		<dc:creator>Meitar</dc:creator>
				<category><![CDATA[Business & E-Commerce]]></category>
		<category><![CDATA[Crosspost]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Tech/Computing]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/?p=550</guid>
		<description><![CDATA[I don&#8217;t believe I have ever before posted an entry that, for all intents and purposes, is just a link to another blog post. However, this blog post is simply so brilliant and yet so short and easily-digestable, that I have nothing more to say. Thus: Twentysomething: 7 Reasons Why My Generation Is More Productive [...]]]></description>
			<content:encoded><![CDATA[<p>I don&#8217;t believe I have ever before posted an entry that, for all intents and purposes, is just a link to another blog post. However, this blog post is simply so brilliant and yet so short and easily-digestable, that I have nothing more to say. Thus: <a href="http://blog.penelopetrunk.com/2008/07/31/twentysomething-7-reasons-why-my-generation-is-more-productive-than-yours/">Twentysomething: 7 Reasons Why My Generation Is More Productive Than Yours</a>.</p>
<p>By those definitions, I&#8217;ve been a productive twentysomething-year-old since I was a pre-teen, which just goes to show you that age has nothing to do with it. <em>Damn</em> straight.</p>
]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2008/08/04/productivity-its-not-what-you-do-its-how-you-do-it-and-twentysomethings-do-it-better/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>One Minute Mac Tip: Remove .DS_Store files from ZIP Archives</title>
		<link>http://maymay.net/blog/2008/08/04/one-minute-mac-tip-remove-ds_store-files-from-zip-archives/</link>
		<comments>http://maymay.net/blog/2008/08/04/one-minute-mac-tip-remove-ds_store-files-from-zip-archives/#comments</comments>
		<pubDate>Mon, 04 Aug 2008 06:07:51 +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[Productivity]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tech/Computing]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/?p=544</guid>
		<description><![CDATA[The Mac OS X Finder has some nifty features, one of which is an exceptionally useful contextual menu item to create ZIP archives of folders. Unfortunately, the Finder also has some really, really annoying habits, one of which is to create a file named .DS_Store in each folder a user opens (when not in Column [...]]]></description>
			<content:encoded><![CDATA[<p>The Mac <acronym title="Operating System">OS</acronym> X Finder has some nifty features, one of which is an exceptionally useful contextual menu item to create ZIP archives of folders. Unfortunately, the Finder also has some really, really annoying habits, one of which is to create a file named <code>.DS_Store</code> in each folder a user opens (when not in Column view). What this means is that if you create a ZIP archive on your Mac and then send it to someone who unzips it without the Finder (such as a Windows user using the Windows Explorer), the recipient will see a lot of litter in the form of useless and meaningless <code>.DS_Store</code> files.</p>
<p>If you&#8217;re not afraid of the Terminal, this can be avoided. Put the following lines in your <code>~/.profile</code> (or similar):</p>
<pre class="shell">
alias rmds='find . -name ".DS_Store" -type f -print0 | xargs -0 rm'
</pre>
<p>What this does is creates a new command that you can use (<code>rmds</code>) which recursively finds and deletes any regular file named &#8220;.DS_Store&#8221; starting from the current directory. Thus, running this command in the folder you are about to create an archive out of will clean it first, and will prevent unnecessary confusion on the part of your archive file recipient.</p>
<p>Alternatively, another way to do this is to use the command-line <code>zip</code> program and an (admittedly more complicated) pipeline to remove the <code>.DS_Store</code> files <em>after</em> they have been added to the archive. To do that, use this series of commands:</p>
<pre class="shell">
zip -d <var>ZIPfile.zip</var> `unzip -l <var>ZIPfile.zip</var> | grep .DS_Store | awk '{print $4}'`
</pre>
<p>where, naturally, <var>ZIPfile.zip</var> is the ZIP archive you want to remove the <code>.DS_Store</code> files from. Creating an alias out of that command (and making it work for paths that contain spaces) is left as an exercise for the reader. ;)</p>
<p>As an aside, the <code>alias</code>, <code>find</code> and <code>xargs</code> commands are incredibly useful in their own right and can be used to do a lot of pretty amazing things. As always, <code>man <var>command</var></code> will give you the nitty gritty.</p>
<p>Also as an aside, you can stop the Finder from creating <code>.DS_Store</code> files entirely when browsing network volumes (like Windows shares) with another command, <a href="//support.apple.com/kb/HT1629">documented in Apple&#8217;s Knowledge Base</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2008/08/04/one-minute-mac-tip-remove-ds_store-files-from-zip-archives/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>One minute Mac tip: Schedule off-hours downloads by enabling `at`, `batch` UNIX job scheduling commands</title>
		<link>http://maymay.net/blog/2008/07/14/one-minute-mac-tip-schedule-off-hours-downloads-by-enabling-at-batch-unix-job-scheduling-commands/</link>
		<comments>http://maymay.net/blog/2008/07/14/one-minute-mac-tip-schedule-off-hours-downloads-by-enabling-at-batch-unix-job-scheduling-commands/#comments</comments>
		<pubDate>Mon, 14 Jul 2008 08:48:56 +0000</pubDate>
		<dc:creator>Meitar</dc:creator>
				<category><![CDATA[Crosspost]]></category>
		<category><![CDATA[HOWTO]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Tech/Computing]]></category>
		<category><![CDATA[Unix/Linux]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/?p=508</guid>
		<description><![CDATA[In a lot of places in the world, many people still have to pay for bandwidth costs. I&#8217;m one of those people who just can&#8217;t afford to download lots of stuff during peak hours when my bandwidth might quickly get shaped or, worse, I&#8217;ll get charged. Nevertheless, there are often plenty of legit reasons to [...]]]></description>
			<content:encoded><![CDATA[<p>In a lot of places in the world, many people still have to pay for bandwidth costs. I&#8217;m one of those people who just can&#8217;t afford to download lots of stuff during peak hours when my bandwidth might quickly get shaped or, worse, I&#8217;ll get charged. Nevertheless, there are often plenty of legit reasons to initiate huge downloads.</p>
<p>In these cases, it makes sense to be smart about <em>when</em> I initiate these downloads. Being something of a UNIX-head myself, I wanted to use the age-old <code>at</code> command to download a Linux ISO during off-peak hours, which my <acronym title="Internet Service Provider">ISP</acronym> says starts at 2 AM. Much to my chagrin, I found that <code>at</code> doesn&#8217;t work by default on Mac <acronym title="Operating System">OS</acronym> X and, worse, the Leopard man page leads to a dead end (though it didn&#8217;t back in Tiger…).</p>
<p>Turns out that the system daemon that is responsible for checking up on <code>at</code> jobs has been wrapped with a <code>launchd</code> job. This makes enabling <code>at</code> on your system really easy:</p>
<pre>sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist</pre>
<p>Once you&#8217;ve done this, you can now use <code>at</code> as you normally have done. For instance, I could now schedule my downloads to happen during the off-peak hours:</p>
<pre><samp>Perseus:Fedora maymay$ </samp>at 2:15am tomorrow # now press <kbd>return</kbd>
curl -LO http://download.fedoraproject.org/pub/fedora/linux/releases/9/Fedora/x86_64/iso/Fedora-9-x86_64-<acronym title="Digital Video Disc">DVD</acronym>.iso
# now press <kbd>CTRL-D</kbd>.
<samp>job 1 at Tue Jul 15 02:15:00 2008
Perseus:Fedora maymay$ </samp>atq
<samp>1	Tue Jul 15 02:15:00 2008</samp>
</pre>
<p>This is also incredibly handy for scheduling just about any resource-intensive task that you don&#8217;t have to do <em>right now</em>. To take it one step further, you can even let the computer itself choose when to run these resource-heavy tasks by using the <code>batch</code> command, which will execute commands much like <code>at</code> but will check the system load average instead of the system clock to determine if it should start the job.</p>
<p>Note that with the <code>com.apple.atrun</code> job loaded <code>/usr/libexec/atrun</code> is started every 30 seconds (unless you change the <code>StartInterval</code> key in the <code>plist</code> file). Since the <code>atrun</code> command checks a file on disk (that it places in the <code>/usr/lib/cron/jobs</code> directory) to see if there is any work to do, this will probably prevent your disks from ever sleeping, which could be a major concern for battery life on portables. Also, obviously, your computer needs to be turned on and awake for the job to actually launch.</p>
<p>For more information, check out the result of typing <code>man at</code> and <code>man launchctl</code> at a Terminal prompt. There&#8217;s also a really good <a href="http://video.google.com/videoplay?docid=1781045834610400422">Google Tech Talk about Launchd</a> that will teach you a lot more about job scheduling on Mac <acronym title="Operating System">OS</acronym> X.</p>
]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2008/07/14/one-minute-mac-tip-schedule-off-hours-downloads-by-enabling-at-batch-unix-job-scheduling-commands/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Quick &#8216;N&#8217; Dirty Drupal Module SVN Tagging Script</title>
		<link>http://maymay.net/blog/2008/05/14/quick-n-dirty-drupal-module-svn-tagging-script/</link>
		<comments>http://maymay.net/blog/2008/05/14/quick-n-dirty-drupal-module-svn-tagging-script/#comments</comments>
		<pubDate>Wed, 14 May 2008 09:46:14 +0000</pubDate>
		<dc:creator>Meitar</dc:creator>
				<category><![CDATA[Bash/Shell Scripting]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Tech/Computing]]></category>
		<category><![CDATA[Unix/Linux]]></category>
		<category><![CDATA[Drupal]]></category>
		<category><![CDATA[Subversion]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/?p=435</guid>
		<description><![CDATA[In a (rather beastly) project at work today, I found myself needing to import a significant number of contributed Drupal modules into Subversion vendor branches to prepare for custom development. To do so manually would have been quite the hassle, so after downloading the appropriate tarballs and creating a module_name/current directory under my vendor/drupal/modules vendor [...]]]></description>
			<content:encoded><![CDATA[<p>In a (rather beastly) project at work today, I found myself needing to import a significant number of contributed Drupal modules into Subversion vendor branches to prepare for custom development. To do so manually would have been quite the hassle, so after downloading the appropriate tarballs and creating a <code><var>module_name</var>/current</code> directory under my <code>vendor/drupal/modules</code> vendor branch directory, I concocted this little (relatively untested) script to handle the mass tagging operations I needed to perform.</p>
<pre>for i in *; do
    v=`grep 'version = "' "$i/current/$i/"*.info |
      cut -d ':' -f 2 |
        sed -e 's/^version = "/v/' -e 's/"$//'`
    svn cp "$i/current" "$i/$v"
done;</pre>
<p>It&#8217;s a bit buggy for some modules that have multiple <code>.info</code> files, but I&#8217;m sure a few more pipeline stages can fix that. (Which, because I&#8217;m done with this at the moment, I will leave as an exercise to the reader.)</p>
<p>Chalk this one up as another testament to the power of shell scripting and how it can help every developer get their job done faster.</p>
]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2008/05/14/quick-n-dirty-drupal-module-svn-tagging-script/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>One Minute Mac Tip: Use the command line to edit the content of your clipboard</title>
		<link>http://maymay.net/blog/2008/05/09/one-minute-mac-tip-use-the-command-line-to-edit-the-content-of-your-clipboard/</link>
		<comments>http://maymay.net/blog/2008/05/09/one-minute-mac-tip-use-the-command-line-to-edit-the-content-of-your-clipboard/#comments</comments>
		<pubDate>Fri, 09 May 2008 05:08:21 +0000</pubDate>
		<dc:creator>Meitar</dc:creator>
				<category><![CDATA[HOWTO]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Tech/Computing]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/?p=433</guid>
		<description><![CDATA[Using the pbpaste and pbcopy commands, you can manipulate the contents of the Mac OS X clipboard (or more formally known as the pasteboard) right from the command line. As a brief example, just select the text of this first paragraph, copy it to your clipboard (with -c), and then type pbpaste in a Terminal [...]]]></description>
			<content:encoded><![CDATA[<p>Using the <code>pbpaste</code> and <code>pbcopy</code> commands, you can manipulate the contents of the Mac <acronym title="Operating System">OS</acronym> X clipboard (or more formally known as the <em>pasteboard</em>) right from the command line. As a brief example, just select the text of this first paragraph, copy it to your clipboard (with <kbd>-c</kbd>), and then type <code>pbpaste</code> in a Terminal prompt. You should see output similar to the following:</p>
<pre><samp>Perseus:~ meitar$ </samp><kbd>pbpaste</kbd>
<samp>Using the pbpaste and pbcopy commands, you can manipulate the contents of the Mac <acronym title="Operating System">OS</acronym> X clipboard (or more formally known as the pasteboard) right from the command line. As a brief example, just select the text of this first paragraph, copy it to your clipboard (with ?-c), and then type pbpaste in a Terminal prompt. You should see output similar to the following:Perseus:~ meitar$ </samp></pre>
<p>Pretty straightforward, right? The only thing to be aware of is that the  symbol showed up in the output as a ? symbol. This is because the Terminal doesn&#8217;t support Unicode, but that&#8217;s a topic for another time.</p>
<p>Anyway, what&#8217;s happening here is nothing more magical than simply reading the clipboard and pasting it into a command&#8217;s standard output stream. As a result, you can construct pipelines that read  from or add content to the clipboard. Here&#8217;s an example in reverse, which takes a command&#8217;s standard output and replaces the contents of the clipboard with it:</p>
<pre><kbd>echo "Hello world! I came from the command line, but now I'm in the clipboard." | pbcopy</kbd></pre>
<p>This command produces no output, but if we examine the contents of the clipboard (by selecting <strong>Edit &rarr; Show Clipboard</strong> from the Finder&#8217;s menu bar) we can see that the text we echoed has indeed been copied there.</p>
<p><a href='/blog/wp-content/uploads/2008/05/finder-clipboard-contents.png'><img src="http://maymay.net/blog/wp-content/uploads/2008/05/finder-clipboard-contents.png" alt="The clipboard now contains the text we echoed from the command line." title="finder-clipboard-contents" width="386" height="186" class="aligncenter size-full wp-image-434" /></a></p>
<p>Another way we can verify that this worked as expected is to simply <code>pbpaste</code> again:</p>
<pre><samp>Perseus:~ meitar$ </samp><kbd>pbpaste</kbd>
<samp>Hello world! I came from the command line, but now I'm in the clipboard.
Perseus:~ meitar$ </samp></pre>
<p>Anyway, this is cool, but it isn&#8217;t very useful yet. For that, we need to add some more stages to our pipeline. Let&#8217;s take the simple case of trying to count how many words the selected text contains. We&#8217;ll use the clipboard contents shown above to do this:</p>
<pre><samp>Perseus:~ meitar$ </samp><kbd>pbpaste | wc -w</kbd>
<samp>      14</samp></pre>
<p>Using the word count (<code>wc</code>) utility, we can count words (<code>-w</code>) very easily. Indeed, our previous example does have exactly 14 words in it. We can also count characters (<code>-c</code>) or lines (<code>-l</code>) of text in the clipboard this way. This is like adding Microsoft Word&#8217;s &#8220;Word Count&#8221; feature to every single piece of text you can copy!</p>
<p>As another example take, for instance, the simple case of copying and pasting a snippet of email from Mail. Instead of pasting it back into a text file verbatim, let&#8217;s prepend &#8216;&gt; &#8216; to the beginning of each line. This way, when we paste our email&#8217;s snippet, we&#8217;ll know where the snippet begins and where it ends. This is a simple three-stage pipeline that uses <code>pbpaste</code> to take our clipboard and put it into the pipeline and then reads back the result from the pipeline back to the clipboard using <code>pbcopy</code>. In the middle, we use sed to insert the desired text at the start of each line:</p>
<pre><kbd>pbpaste | sed -e 's/^/&gt; /' | pbcopy</kbd></pre>
<p>Now, when you paste your clipboard, you&#8217;ll have a greater-than symbol at the start of each line. Naturally, check out the manual pages for all of these commands for more detailed information. For instance, type <code>man pbpaste</code> for more information about the <code>pbpaste</code> command.</p>
]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2008/05/09/one-minute-mac-tip-use-the-command-line-to-edit-the-content-of-your-clipboard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XML.com Managing Editor Kurt Cagle sees the future, one that I&#8217;ve experienced a decade ago</title>
		<link>http://maymay.net/blog/2008/05/03/xmlcom-managing-editor-kurt-cagle-sees-the-future-one-that-ive-experienced-a-decade-ago/</link>
		<comments>http://maymay.net/blog/2008/05/03/xmlcom-managing-editor-kurt-cagle-sees-the-future-one-that-ive-experienced-a-decade-ago/#comments</comments>
		<pubDate>Sat, 03 May 2008 18:24:49 +0000</pubDate>
		<dc:creator>Meitar</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Information & Communication]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Tech News]]></category>
		<category><![CDATA[Tech/Computing]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/?p=428</guid>
		<description><![CDATA[I subscribe to a number of really great technology newsletters because they interest me. One of these is the XML.com weekly newsletter. XML is a technology that has exploded in the last several years, and its specifically an area that I, as a front-end and semantic web specialist, find exceptionally intriguing. Most intriguing today, however, [...]]]></description>
			<content:encoded><![CDATA[<p>I subscribe to a number of really great technology newsletters because they interest me. One of these is the <a href="//xml.com/"><acronym title="eXtensible Markup Language">XML</acronym>.com</a> weekly newsletter. <acronym title="eXtensible Markup Language">XML</acronym> is a technology that has exploded in the last several years, and its specifically an area that I, as a front-end and semantic web specialist, find exceptionally intriguing. Most intriguing today, however, was Managing Editor of <acronym title="eXtensible Markup Language">XML</acronym>.com Kurt Cagle&#8217;s article titled <cite>Is Telecommuting the Next Wave for Education?</cite> in the <acronym title="eXtensible Markup Language">XML</acronym>.com newsletter.</p>
<p>Not only was it a great article that highlights a particular <acronym title="eXtensible Markup Language">XML</acronym> schema for education-related material produced by the <a href="//sifinfo.org/">Schools Interoperability Framework Association</a>, it paints the picture of a future I&#8217;ve already lived ten years ago. I am heartened to see that, at long last, other people are beginning to see the benefits of technology used for &#8220;distance learning.&#8221; Frankly, I can&#8217;t imagine learning any other way.</p>
<p>I tried to find this article online so I could link to it, but I could not. Instead, I&#8217;m reposting the article in full here. If this is available somewhere on the &#8216;net that I just haven&#8217;t found yet, please let me know.</p>
<blockquote><p><cite>Is Telecommuting the Next Wave for Education?</cite> by Kurt Cagle, Managing Editor,xml.com.</p>
<p>In the great analysis game, I have two particularly adept spies &#8211; my daughters. Over the years I&#8217;ve noticed that both of my daughters tend to be remarkably good barometers about the way that the wind is blowing with regard to youth trends, which in turn tend to be significant because teenagers in particular often tend to be the earliest adopters of new technologies. If something doesn&#8217;t resonate with them, no matter how big a marketing budget, it usually doesn&#8217;t fly.</p>
<p>One of the things I&#8217;ve noticed with my eldest daughter in particular is how many of her friends either are or have been recently &#8220;home-schooled&#8221;. Now, for many, home-schooling has long been associated with religious organizations, particularly evangelical Christians, who feel that the school system is too secular for raising their kids. However, given that the kids I know (and their parents) are generally not in that community, I was a little puzzled with what was going on.</p>
<p>Instead, what seems to be happening is a phenomenon that I think will have major ramifications for society, and certainly for the tech community. As the Internet was taking off around 2000, a lot of school districts began implementing a program to help those people who were often at significant distances from a school by offering certain classes online &#8211; with exercises online, video conferencing and periodic tests. At first, these classes were ones that you would expect to make the migration &#8211; science and math courses &#8211; but over time, they have extended to cover everything except those classes that require group participation &#8211; band, or choir, for example &#8211; or need physical facilities, such as wood-working. Physical education requirements could generally be met by agreeing to some form of monitored activity &#8211; swimming classes at a recreational center, for instance.</p>
<p>Yet a funny thing happened while setting up these distance learning programs. While remote users became enthusiastic participants in this new wave, the largest group of users have been urban or suburban kids who, for one reason or another, didn&#8217;t fit well within the school paradigm. In some cases, the people who took advantage of these courses were students who were involved in focused activities that involved travel &#8211; talented musicians who were often on the road, dancers, athletes who were often involved in activities at different schools or other events, or those whose family travelled frequently, who took to the distance courses because they were able to learn better around their other activities. In some cases, the students were people who were going through emotional issues at home &#8211; a death or divorce, for instance, though increasingly that has made its way up into those students who just couldn&#8217;t face the high-pressure world of middle-school or high-school dynamics.</p>
<p>In other words, the kids and teenagers who were taking advantage of these courses just recognized that it gave them an opportunity to learn in the same way that they are increasingly interacting with the rest of the world &#8211; through the computer. Teenagers are hard wired to be more alert in the evening, and typically to be sluggish in the morning, yet school as it is set up right now forces them to be capable of handling complex math and science first thing in the day, when they are generally least reponsive to learning much of anything. Then they are forced to take home dozens of pages of homework that will force them to stay up until late in the evening anyway, meaning that by the time they reach the end of the week, they are physically and mentally exhausted.</p>
<p>Distance Learning lets them combine the homework with the schoolwork, so they can practice new concepts when they&#8217;re presented, not after the concepts have become hazy after a full day. It moves them away from the tyranny of the timetable so that if they are having trouble learning a concept, they can spend the time they need to master it, rather than stopping abruptly halfway through because they have to move onto their next class. It also means that if they have mastered a concept, they do not have to sit around bored while others are still trying to figure out something.</p>
<p>It also lets them have access to the rest of the Internet to use as a research tool. While traditional academics may shudder at this notion, as a recent controversy at one university showcased when a student was expelled for setting up a study group on Facebook, the reality is that we&#8217;re moving past the point at which we need to keep a vast storehouse of information locked up in within our brains. In an era of information ubiquity, many of the skills that are taught in schools are beginning to seem increasingly quaint, and the teachers that are effective are typically the ones that have managed to incorporate this info-sphere in their own teachings. One social studies teacher of my acquaintance in particular has become quite effective at teaching using PowerPoint, Wikipedia, and other multimedia resources, and he goes out of his way to teach children not the history itself (which they can generally look up) but how to research and analyze that history and take from it any lessons that a given period may have to offer.</p>
<p>Distance Learning programs are also becoming more popular for the same reason that telecommuting is becoming popular &#8211; school districts are facing increasing prices for gas and food as a typical family is, but multiplied by several thousand. Many school districts are responding to this by cutting down on the routes that their school buses follow (or in some cases eliminating bus systems entirely) forcing parents to take their kids themselves, often, ironically, increasing the total gas use dramatically and certainly causing headaches for parents who have to integrate their kids into their own commuting schedules. Similarly, school cafeteria programs are being scaled back or eliminated entirely because the cost of the food is becoming painfully high. Add into that aging infrastructures for schools, in a time when the population itself is aging (and hence less likely to fund school initiatives if it affects property taxes), and what you have is a recipe for disintegrating school systems.</p>
<p>Given that, the idea of distance learning as an alternative is one that may be popular at the school board level, as in general, you can generally buy a whole lot of educational training and assistance for what it normally costs to move and feed kids. While it does require some retraining on the part of the teachers, they&#8217;re also attracted to it because their job frequently involves trying to keep order over thirty to as many as forty kids, many of whom simply do not want to be there &#8211; and the same time-shifting that occurs for the students typically occurs for them as well. Indeed, in many cases what ends up happening is that the teachers pre-record certain segments of their lectures (and are increasingly posting them up on YouTube), then set up one-on-one or group chat sessions with the students.</p>
<p>As for the parents in this equation, I&#8217;ve often suspected that one of the reasons for the decline in the quality of contemporary education has been the fact that school has become the place where parents warehouse their kids for the day. Home-schooling does require more parental involvement, but in general it is also far easier for those parents to keep a fairly close eye on what their kids are up to in this day and age when the parents are not at home, at least for kids of a certain age. What&#8217;s more, schools are in many ways like hospitals &#8211; while their ostensible purpose is education, the chance of their kids learning bad habits is far higher in school settings than they generally are at home &#8211; and the kids that are trying to be good aren&#8217;t distracted by the ones determined to make trouble.</p>
<p>That&#8217;s not to say that there aren&#8217;t distractions. My eldest daughter has been known to keep a chat window up talking to friends when she should be concentrating on homework, though in fairness to her, what she&#8217;s chatting about often involves that same homework, albeit in a rather disconnected fashion:</p>
<blockquote><pre>Kat: I'm :-( ):-\. Zuko shippeded Kataara. Urgh ..
Neechan: Urrgghhhhh.
Hey, what's I if volts is 10 and ohms = 3 % (can't write the squiggle for
ohms)?
Kat: Um V =IR so, uhm, I is RV ...
Neechan: No, R over V.
Kat: Oh. Right. :-) .... so 3 divided by 10 - .3. Bad Zuko! ...</blockquote>
</pre>
<p>Is this bad? No &#8211; it&#8217;s only different from the way that those of us who grew up pre-Internet see the world. Distance Learning does not change the amount of homework (though I suspect that it cuts down pretty dramatically on the makework that tends to deaden interest in a subject rather than reinforcing the concepts), nor does it change the need for accountability.  The kids still need to test, and still need to show that they have learned, but I suspect that their retention rates will likely be considerably higher if they can learn in a way that works well for them.</p>
<p>Long term, I think that this will likely end up deconstructing the traditional school system, though this is a process that will take decades to happen completely. It means, for the aggressive learners, that they could in fact complete a formal curriculum in a fraction of the time necessary, though a good teacher can work with those particular students to provide additional areas of study for them to engage with. It means that slower students can learn at their own pace, and can generally be flagged for additional help if they fall sufficiently behind. Money that school districts save in terms of providing physical infrastructure in transportation can be spent on those activities that do promote socialization &#8211; music, art, theatre, sports, civic days, and so forth &#8211; and monthly activities that bring students together can keep the bond in place of school as community.</p>
<p>Distributed education is part of the larger process of social redistribution that is occurring because of the Internet. Modern education emerged about the same time that the modern corporation emerged &#8211; in the 1930s &#8211; during an era when the dominant forces at play involved hierarchies, centralization, consolidation and economies of scale. In this decade, the dominant forces are network related &#8211; decentralization, the economies of global localities, the disintermediation of authority and the a shift away from the geographical. Just as these forces are resisted at the corporate level despite the obvious benefits (and just as workers in places that can telecommute are increasingly doing so) , these same forces are resisted at the educational level with much the same results &#8211; students (and their parents) are taking advantage of any loophole they can to make it available to their kids because it results in a better education for them).</p>
<p>So far, most educational software is boutiqueware, typically Flash-like applications. This won&#8217;t necessarily change moving forward (it is hard in general to make educational software that doesn&#8217;t have a strong &#8220;games-like&#8221; component, and for the most part that game approach makes the educational software far more engaging than it would be otherwise), but one thing that will need to happen as the distributed systems move forward is for the emergence of some kind of general framework for the exchange of educational related information. One particularly promising start in this direction is the development of the Schools Interoperability Framework (SIF) (http://www.sifinfo.org/sif-specification.asp), which is an <acronym title="eXtensible Markup Language">XML</acronym> standard most recently updated in March 2008. Its mandate is fairly broad &#8211; providing <acronym title="eXtensible Markup Language">XML</acronym> schemas for describing grade-books, library services, student information, instructional services and so forth &#8211; (see Figure 1.  SIF Zone Services).Figure 1. SIF Zone Services.</p>
<p>One of the jobs that the <acronym title="eXtensible Markup Language">XML</acronym> community needs to do is to reach out to the developers of educational software and insure that they are aware of the SIF standards, in order to provide better interoperability between their core applications and the growing educational educational noosphere, and to reach out to educators and education IT departments (which are all too typically the math teacher in his spare time) to make them cognizant of these same standards and to help implement solutions around these standards. As more students opt to go &#8220;virtual&#8221; the ability to maintain consistent, and more important interoperable, records becomes ever more paramount.</p>
<p>Long term, the move towards distributed education will shape society in some very profound ways. The kids going to school in such an environment today are more adept at the art of self-education, are usually more capable at analysis and research, and because they managed to avoid the often harsh emotional trauma of dealing with several hundred other kids of the same age daily, usually have more self-confidence than their school-based peers. They&#8217;ll likely have little patience for the Tayloresque approach to college education and will continue their lives in a similar manner by educating themselves within the college&#8217;s online environment (and will tend to shun those colleges that don&#8217;t offer such services) and when they start coming into the workforce in sufficient numbers, they will reshape the way that organizations are set up. On the flip side, I think this is likely to cause a huge amount of cultural friction between this generation and those educated more traditionally in previous generations, because their respective realities will be very different.</p>
<p>So far, the movement is still just a trickle, but watch this space closely &#8211; it will become a flood soon enough &#8211; and the bricks in the wall will come tumbling down (to paraphrase Pink Floyd).</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2008/05/03/xmlcom-managing-editor-kurt-cagle-sees-the-future-one-that-ive-experienced-a-decade-ago/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wikipedia showcases the value of simple</title>
		<link>http://maymay.net/blog/2007/11/16/wikipedia-showcases-the-value-of-simple/</link>
		<comments>http://maymay.net/blog/2007/11/16/wikipedia-showcases-the-value-of-simple/#comments</comments>
		<pubDate>Fri, 16 Nov 2007 19:33:34 +0000</pubDate>
		<dc:creator>Meitar</dc:creator>
				<category><![CDATA[Business & E-Commerce]]></category>
		<category><![CDATA[Information & Communication]]></category>
		<category><![CDATA[Productivity]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/archives/2007/11/16/wikipedia-showcases-the-value-of-simple/</guid>
		<description><![CDATA[Simplicity is a challenging goal for virtually every task you (or I) may have. Why is it a goal at all? Successfully reducing the presentation of complicated tasks into simple components is a goal because it is typically a required part for the success of the task. Possibly the best example of this phenomenon in [...]]]></description>
			<content:encoded><![CDATA[<p>Simplicity is a challenging goal for virtually every task you (or I) may have. Why is it a goal at all? Successfully reducing the presentation of complicated tasks into simple components is a goal because it is typically a required part for the success of the task.</p>
<p>Possibly the best example of this phenomenon in action is <a href="//wikipedia.org/">Wikipedia</a>, which hosts several different versions of its pages. The version everyone knows about is the supremely academic one, the one Wikipedia presents by default. Here&#8217;s an excerpt of one such page&#8217;s introduction, the Wikipedia entry for the <a href="//en.wikipedia.org/wiki/Standard_Model">Standard Model of particle physics</a>.</p>
<blockquote cite="//en.wikipedia.org/wiki/Standard_Model"><p>The Standard Model of particle physics is a theory that describes three of the four known fundamental interactions between the elementary particles that make up all matter. It is a quantum field theory developed between 1970 and 1973 which is consistent with both quantum mechanics and special relativity. To date, almost all experimental tests of the three forces described by the Standard Model have agreed with its predictions. However, the Standard Model falls short of being a complete theory of fundamental interactions, primarily because of its lack of inclusion of gravity, the fourth known fundamental interaction, but also because of the large number of numerical parameters (such as masses and coupling constants) that must be put &#8220;by hand&#8221; into the theory (rather than being derived from first principles).</p></blockquote>
<p>Contrast the above with this excerpt for the same page, the Standard Model of particle physics, taken from <a href="//simple.wikipedia.org/Standard_Model">the <em>simple English</em> version</a> of Wikipedia:</p>
<blockquote cite="//simple.wikipedia.org/wiki/Standard_Model"><p>The Standard Model of physics is the best idea to say how fundamental forces and elementary particles work. It uses quantum mechanics and special relativity. In physics there are many different particles and forces, the Standard Model says that all particles and forces are only two different types: fermions and bosons.</p></blockquote>
<p>Okay, now that&#8217;s a lot easier to understand. In this example, the simple English version is a lot shorter, and at first glance that might strike you as its major distinguishing factor. However, if you read closer, you&#8217;ll notice many things specific to the language that was used that serve to give the simple English version much more accessibility than the academic one. Some of these things include:</p>
<ul>
<li>Simpler, more familiar vocabulary. Instead of using surgically-precise words that may not be familiar to an uninformed reader, plainer words (and no less accuracy) are used to describe concepts.</li>
<li>Dense sentences are broken up into smaller chunks. When accessibility or successful communication is the primary concern, longer sentences that deliver more information in one punch may be counter-productive. Instead, it&#8217;s often better to chop up larger concepts and deliver them in smaller-sized chunks that are easier to digest.</li>
<li>Specifics are introduced one at a time, and defined at each instance. Possibly the most common error writers (especially technical writers) make is introducing lots of interdependent ideas at once or without proper prior context. Rather than work your way from a complicated idea to a simple conclusion, work instead from a simple foundation to a complicated idea, building vocabulary as you go (see point the first about vocabulary).</li>
</ul>
<p>Of course, this is always easier said than done, and it is also why simplicity is intuitively understood by lots of people to be a hard thing to create. Presenting things simply is a challenge because it requires more knowledge than simply understanding the thing; it requires understanding the thing <em>and</em> understanding what pieces of the thing your audience does <em>not</em> (yet) understand. The value of simple lies in being able to fill those gaps.</p>
]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2007/11/16/wikipedia-showcases-the-value-of-simple/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The 10 Geekiest Leopard Features I Will Probably Love</title>
		<link>http://maymay.net/blog/2007/10/18/the-10-geekiest-leopard-features-i-will-probably-love/</link>
		<comments>http://maymay.net/blog/2007/10/18/the-10-geekiest-leopard-features-i-will-probably-love/#comments</comments>
		<pubDate>Thu, 18 Oct 2007 15:45:59 +0000</pubDate>
		<dc:creator>Meitar</dc:creator>
				<category><![CDATA[AppleScript]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Security & Privacy]]></category>
		<category><![CDATA[Tech News]]></category>
		<category><![CDATA[Tech/Computing]]></category>
		<category><![CDATA[Unix/Linux]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/archives/2007/10/18/the-10-geekiest-leopard-features-i-will-probably-love/</guid>
		<description><![CDATA[This is already horribly old news, and by old I mean several days ago since that&#8217;s about as fast as it takes technology news to grow old, but Apple is releasing Mac OS X 10.5 &#8220;Leopard&#8221; at the end of this month. Apple is calling this release a &#8220;major upgrade,&#8221; and indeed Apple has rarely [...]]]></description>
			<content:encoded><![CDATA[<p>This is already horribly old news, and by old I mean several days ago since that&#8217;s about as fast as it takes technology news to grow old, but Apple is releasing Mac <acronym title="Operating System">OS</acronym> X 10.5 &#8220;Leopard&#8221; at the end of this month. Apple is calling this release a &#8220;major upgrade,&#8221; and indeed Apple has rarely made its users wait so long between operating system releases as they have done between Tiger (Mac <acronym title="Operating System">OS</acronym> X 10.4) and Leopard. So, I&#8217;m already excited.</p>
<p>But then today I was glossing over <a href="//apple.com/macosx/features/300.html">Apple&#8217;s featured features list</a> and I got even more excited. There are the usual, largely meaningless, fluff updates that are nice for Joe Schmo or his mother, but that power users simply don&#8217;t care about, like the new iChat support for animated buddy icons, but the list is also chock-full of really cool, really <em>useful</em> features.</p>
<p>What&#8217;s interesting is that a good deal of these features aren&#8217;t really new features at all. For instance, if you knew how to manipulate the NetInfo database on your Mac, you could already share any folder via Apple&#8217;s &#8220;Personal File Sharing&#8221; feature. (Here&#8217;s a <a href="http://www.macosxhints.com/article.php?story=20011108161839416">Mac <acronym title="Operating System">OS</acronym> X Hints hint explaining how to do it</a>.) In Leopard, however, Apple claims that this functionality is now integrated straight into a folder&#8217;s Get Info… window. If it works as smoothly as Apple claims, this is finally going to bring Mac <acronym title="Operating System">OS</acronym> X (client) into decent competition with Windows XP Professional in terms of <acronym title="Graphical User Interface">GUI</acronym>-level power-user features.</p>
<p>However, while all of these features are really cool, here&#8217;s a list of the ten geekiest features I will probably absolutely love, for one reason or another.</p>
<ul>
<li id="li-1"><strong>Ruby on Rails, out of the box</strong> — <em>The</em> hot thing in web development right now is Ruby on Rails. Macs have already been the best personal desktop and web development platform because they have built-in support for the Apache web server and a host of other features, but now they will come with a ready-to-roll installation of Ruby on Rails, sporting Mongrel and (better yet) Capistrano! Specifically with the addition of Capistrano, which is terribly undersold as simply a Ruby on Rails deployment platform, these UNIX-y &#8220;toolbox&#8221; items are bound to make Macs that much more useful right out of the box.</li>
<li id="li-2"><strong>Safari&#8217;s full history search</strong> — As their recent public partnerships with Google have shown, Apple is very clearly invested in search technologies. Spotlight gets a huge number of improvements in Leopard, but none which I think are going to be more useful to more people than this one: spotlight searches on the full text of each web page in your visited history list. That&#8217;s just awesome. Also awesome: using spotlight as a calculator and as a dictionary, which also shows just how Google-like Apple is trying to be. (<a href="http://www.google.com/help/cheatsheet.html">Google also lets you ask it arithmetic questions and a dictionary</a>.)</li>
<li id="li-3"><strong>Wikipedia articles in Dictionary.app</strong> — I <em>love</em> Wikipedia because it&#8217;s one of the fastest ways to get (relatively) reliable information quickly. Now that Dictionary.app has built-in integration with Wikipedia, imagine the possibilities for getting that knowledge instant-gratification craving fixed. Apple has not yet announced this capability, but I can easily envision a scenario where all Cocoa text fields are instantly &#8220;wikified&#8221; (with text that matches Wikipedia articles highlighted) much in the same way that current Cocoa text fields allow you to right-click on a misspelled word and have it corrected by Dictionary.app.</li>
<li id="li-4"><strong><a href="http://www.apple.com/macosx/features/300.html#security">Application-based firewall</a></strong> — In classic Apple fashion, functionality that was previously available via third-party additions is now available from Apple itself. In this case, I have to wonder how well Apple&#8217;s updates to its firewall will obviate the need for <a href="http://www.obdev.at/products/littlesnitch/index.html">Little Snitch</a>, which is basically an application-based firewall, too, and a good one at that.</li>
<li id="li-5"><strong>Built-in <em>guest</em> log-in account</strong> — If you&#8217;re as paranoid about security as I am, you&#8217;ve already created a special, limited-access user on your system (called Guest or Visitor or whatever) and whenever friends are over, you tell them to use that account instead of your own. Now in Leopard, Apple has gone through the trouble of setting this up for us already. A small change that is going to have a big impact.</li>
<li id="li-6"><strong>Scriptable System Preferences &amp; applications</strong> — With AppleScript, you can automate the things your computer does with scripts, as long as those things are &#8220;scriptable.&#8221; In previous versions of Mac <acronym title="Operating System">OS</acronym> X, huge gaping holes of what things shipped by Apple were scriptable existed, causing me (personally) some really annoying headaches. AppleScript <acronym title="Graphical User Interface">GUI</acronym> scripting helped me get around many of those roadblocks, but now it seems Apple is finally filling in some of the most notorious gaps in this functionality with scriptable System Preferences. Yay!</li>
<li id="li-7"><strong>Automator workflow variables</strong> — Automator brings the power of AppleScript I just mentioned to more people with a completely graphic programming environment. There is no need to open up a text document and write AppleScript code because Automator lets you create a script (called a Workflow in Automator jargon) using your mouse by dragging and dropping <dfn>actions</dfn> into the order you want them to be performed. It&#8217;s very slick, but until now it&#8217;s been very limited. With Leopard, Apple is beefing up Automator so that it includes things like variables, basic programmatic capability that was sorely lacking before. (Also majorly cool: a command-line utility to access Automator!)</li>
<li id="li-8"><strong><a href="http://www.apple.com/macosx/features/300.html#finder">Finder.app&#8217;s path bar</a></strong> — Every serious Mac user knows that the Finder needs a lot of help. Now, it&#8217;s getting some. Something the Windows Explorer has had forever (as had every desktop environment for Linux, of course) is a visual cue to show you where in your filesystem tree a given folder is located when you are viewing said folder. Now the Finder gains this capability (though Apple&#8217;s description implies that it&#8217;s going to be off by default) with what Apple is calling a &#8220;Path Bar&#8221;. Finally!</li>
<li id="li-9"><strong>Cocoa and scripting bridges</strong> — Even though no one really seems to know about it, it has long been possible for languages other than AppleScript to do things like send Apple Events to Mac <acronym title="Operating System">OS</acronym> X applications. Specifically, Ruby and JavaScript, two of the most well-known web development languages in existence, can already do this with a single ScriptingAddition (OSAX). But now Apple is making this functionality a central feature <em>and</em> fully extending it to their Objective-C (and Cocoa) language and applications such as Xcode and Interface Builder. This means people like me will have a shallower learning curve before we&#8217;re able to create full-fledged, native Mac <acronym title="Operating System">OS</acronym> X applications. Now <em>that&#8217;s</em> exciting!</li>
<li id="li-10"><strong>Xcode 3 refactoring</strong> — This is something you kind of have to see to believe. I got the opportunity to see it demoed at Apple&#8217;s Leopard Tech Talks last year and I was really excited by it. With the new Xcode, Apple&#8217;s development <acronym title="Integrated Drive Electronics">IDE</acronym>, you can do away with find-and-replace searches for things like renaming functions because Xcode understands what parts of your code are what structures and, when you tell it to &#8220;change the function named myFunction to myNewFunction,&#8221; it&#8217;ll only find-and-replace <em>function names</em> instead of every instance of the string &#8220;myFunction.&#8221; That&#8217;s pretty big, and if it were available for more languages, it&#8217;s <em>almost</em> enough to make me ditch <code>vim</code>.</li>
</ul>
<p>So there you have it. Ten features you might not have already known about that are some of the most promising features I can see in Leopard. And I didn&#8217;t even get into Wide-Area Bonjour, which could make services like DynDNS or No-<acronym title="Internet Protocol">IP</acronym> a thing of the past (and which I still want to learn more about), or the new Terminal application (finally with tabs!), or even the multiple user certificates for S/MIME encrypted email.</p>
<p><ins datetime="2007-10-24T15:04-0500"><strong>Note:</strong> One of the least known security features available on Mac <acronym title="Operating System">OS</acronym> X is also possibly one of the best, and the simplest. Evidently, <a href="http://developer.apple.com/documentation/MacOSX/Conceptual/universal_binary/universal_binary_diffs/chapter_3_section_6.html">all Intel-based Macs are shipped with the <acronym title="eXecute Disable; a feature of modern Intel chipsets that prevent execution of memory from the stack">XD</acronym> (<acronym title="Also Known As">aka</acronym>. <acronym title="No eXecute; a feature of AMD's modern chipsets that prevent execution of memory from the stack">NX</acronym>, <acronym title="Also Known As">aka</acronym>. <acronym title="Data Execution Prevention; Micosoft Windows's supporting implementation of Intel's Execute Disable bit">DEP</acronym>) bit turned on</a>—and thankfully there doesn&#8217;t seem to be any way for users to turn it off. However, this isn&#8217;t a silver bullet and if you want to learn why you should check out this excellent <a href="//anandtech.com/cpuchipsets/showdoc.aspx?i=2239">Anandtech article: <cite>A Bit About the <acronym title="No eXecute; a feature of AMD's modern chipsets that prevent execution of memory from the stack">NX</acronym> Bit</cite></a>.</ins></p>
]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2007/10/18/the-10-geekiest-leopard-features-i-will-probably-love/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Use Google Docs to compose and publish blog posts</title>
		<link>http://maymay.net/blog/2007/07/27/use-google-docs-to-compose-and-publish-blog-posts/</link>
		<comments>http://maymay.net/blog/2007/07/27/use-google-docs-to-compose-and-publish-blog-posts/#comments</comments>
		<pubDate>Fri, 27 Jul 2007 18:09:23 +0000</pubDate>
		<dc:creator>Meitar</dc:creator>
				<category><![CDATA[Crosspost]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Tech/Computing]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/archives/2007/07/27/use-google-docs-to-compose-and-publish-blog-posts/</guid>
		<description><![CDATA[While this feature has been around for a long time, not many people are aware that you can publish blog posts straight from Google Docs to just about any blog of your choice, including Blogger, WordPress, and others.]]></description>
			<content:encoded><![CDATA[<p>While this feature has been around for a long time, not many people are aware that you can publish blog posts straight from Google Docs to just about any blog of your choice, including Blogger, WordPress, and others. This is pretty awesome for many reasons, but most important for many people is the incredible rich text, <acronym title="what you see is what you get">WYSIWYG</acronym> editor that Google Docs offers.</p>
<p>I&#8217;m tempted to give it a shot myself, for many reasons. I think using Google Docs to compose and edit my blog posts may make it easier to:</p>
<ul>
<li>keep copies of my blog posts somewhere other than my blog (just in case),</li>
<li>work on my blog posts from anywhere with an Internet connection (and under the security of an <acronym title="HyperText Transfer Protocol Secured; HTTP over SSL">HTTPS</acronym> connection!),</li>
<li>version-control all of my writing without changing my workflow the least bit,</li>
<li>invite specific users to preview my drafts before they go live and even help me edit my posts so I can catch typos and grammatical errors,</li>
<li>easily export my writings to a variety of formats, such as <acronym title="Portable Document Format">PDF</acronym> or a ZIP file with the ease of a single menu,</li>
<li>and of course, instantly take advantage of whatever wonderful things Google has in their pipeline.</li>
</ul>
<p>Another blogger wrote an entire <a href="http://www.michaelmartine.com/2007/07/02/how-to-use-google-docs-spreadsheets-to-manage-your-blog/">how to article showing tips for using Google Docs to blog</a> that is quite a good read, as well.</p>
]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2007/07/27/use-google-docs-to-compose-and-publish-blog-posts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Simplest Personal Email Spam Solution EVER!</title>
		<link>http://maymay.net/blog/2007/06/25/the-simplest-personal-email-spam-solution-ever/</link>
		<comments>http://maymay.net/blog/2007/06/25/the-simplest-personal-email-spam-solution-ever/#comments</comments>
		<pubDate>Mon, 25 Jun 2007 22:08:59 +0000</pubDate>
		<dc:creator>Meitar</dc:creator>
				<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Security & Privacy]]></category>
		<category><![CDATA[Tech/Computing]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/archives/2007/06/25/the-simplest-personal-email-spam-solution-ever/</guid>
		<description><![CDATA[I have the simplest personal email spam solution in the world. I use Apple&#8217;s Address Book and, in it, I keep all the email addresses I ever want to get mail from. In Apple&#8217;s Mail program, I simply tell it that email from an address in my address book is exempt from being treated as [...]]]></description>
			<content:encoded><![CDATA[<p>I have the simplest personal email spam solution in the world. I use Apple&#8217;s Address Book and, in it, I keep all the email addresses I ever want to get mail from. In Apple&#8217;s Mail program, I simply tell it that email from an address in my address book is exempt from being treated as junk mail. Then I set up a Mail rule that says if the sender is not in my address book, the message should be moved to the Junk Mail folder.</p>
<p>Voila. This system is <em>flawless</em>. You will never be able to send me loads of spam that go anywhere but my spam box, and I hardly ever look in there.</p>
<p>Naturally, there is a caveat to using this technique, but I actually consider it to be an advantage. By necessity, this technique, keeps me pro-active about getting people&#8217;s contact information when I meet them (and want to talk again). If I don&#8217;t get that person&#8217;s email address, I&#8217;ll probably never see that person&#8217;s email unless I&#8217;m looking out for it. Nine times out of ten, however, that&#8217;s what I want to have happen anyway.</p>
<p>So this solves the problem of unwanted mail. However, what if I want to let people contact me that I don&#8217;t know ahead of time or have previous whitelisted? Well, in that case I rely on an out-of-band communication, such as an introduction from a friend, leaving a comment on my blog(s), or some other method such as an instant message to let me know that there is someone who wants to talk to me.</p>
<p>My contact information is <a href="//maymay.net/">so available (in so many places)</a>, and many <acronym title="Instant Message">IM</acronym> services are now equipped with store-and-forward messaging that there really is no reason for email to be the first time I hear from someone. Even better, if I&#8217;m contacted over Google Talk (as an example), I automatically have an email address for that person.</p>
<p>Voila. Simplest. Spam. Filter. Ever.</p>
]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2007/06/25/the-simplest-personal-email-spam-solution-ever/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Better Expect Subversion Post-Commit Hook</title>
		<link>http://maymay.net/blog/2007/06/21/a-better-expect-subversion-post-commit-hook/</link>
		<comments>http://maymay.net/blog/2007/06/21/a-better-expect-subversion-post-commit-hook/#comments</comments>
		<pubDate>Fri, 22 Jun 2007 04:41:19 +0000</pubDate>
		<dc:creator>Meitar</dc:creator>
				<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tech/Computing]]></category>
		<category><![CDATA[Unix/Linux]]></category>
		<category><![CDATA[expect]]></category>
		<category><![CDATA[Subversion]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/archives/2007/06/21/a-better-expect-subversion-post-commit-hook/</guid>
		<description><![CDATA[In a previous post I wrote a small expect script to update a remote web server&#8217;s deployed code on a new commit to a Subversion repository using Expect and Subversion&#8217;s post-commit hooks. That first script was extraordinarily basic, so I&#8217;ve been wanting to add some sanity and error checking to it for a while. I [...]]]></description>
			<content:encoded><![CDATA[<p>In a <a href="/blog/archives/2007/05/18/use-expect-with-subversions-post-commit-hook-to-automatically-update-remote-servers/">previous post</a> I wrote a small expect script to update a remote web server&#8217;s deployed code on a new commit to a Subversion repository using Expect and Subversion&#8217;s post-commit hooks. That first script was extraordinarily basic, so I&#8217;ve been wanting to add some sanity and error checking to it for a while. I finally got around to it today.</p>
<p>This improved version of the post-commit hook does the same thing as the last one (that is, it logs into your web server over <acronym title="Secure SHell">SSH</acronym> with the given user and password, and yes, I&#8217;m aware of the scariness of embedding a password in such a way, so you should really set up <acronym title="Secure SHell">SSH</acronym> to use public keys for authentication for this), except now it also produces useful output.</p>
<p>Here&#8217;s the same script as before, but improved:</p>
<pre>#!/usr/bin/expect -f

#
# AUTHOR: Meitar Moscovitz <meitar@digitalpulp.com>
# DATE  : Thu Jun 21 16:32:42 EDT 2007
#

set HOST my.web.server
set USER someuser
set PASS xxx

# the working copy we're going to update
set WC /path/to/working/copy

# the path to the svn executable on the remote web server
set SVNBIN /usr/local/bin/svn

# our network is slow, set a long timeout
set timeout 30

##### DO NOT EDIT PAST THIS LINE! #####

# POST-COMMIT HOOK
#
# The post-commit hook is invoked after a commit.  Subversion runs
# this hook by invoking a program (script, executable, binary, etc.)
# named 'post-commit' (this file) with the
# following ordered arguments:
#
#   [1] REPOS-PATH   (the path to this repository)
#   [2] REV          (the number of the revision just committed)
#
# Note that Subversion does not provide this program with an environment
# of any kind. That means this program lacks a current working directory,
# a home directory, a $PATH, and so on.

set REPOS [lindex $argv 0]
set REV [lindex $argv 1]

# Define error codes
set E_NO_SSH     1 ;# can't find a usable <acronym title="Secure SHell">SSH</acronym> on our system
set E_NO_CONNECT 2 ;# failure to connect to remote server (timed out)
set E_WRONG_PASS 3 ;# password provided does not work
set E_UNKNOWN   25 ;# unexpected failure

# find the <acronym title="Secure SHell">SSH</acronym> binary on our system
if {[file executable /usr/bin/ssh]} {
	set SSHBIN /usr/bin/ssh
} elseif {[file executable /usr/local/bin/ssh]} {
	set SSHBIN /usr/local/bin/ssh
} else {
	send_error "Can't find a usable <acronym title="Secure SHell">SSH</acronym> on this system.&#92;n"
	exit $E_NO_SSH
}

spawn $SSHBIN $USER@$HOST $SVNBIN update $WC

expect {
    "continue connecting (yes/no)? " { send "yes&#92;r"; exp_continue; }
    -nocase "password:" { send "$PASS&#92;r"; }
    timeout {
        send_error "&#92;nWe have timed out after $timeout seconds while trying to connect to $HOST!&#92;n";
        exit $E_NO_CONNECT;
    }
}

expect {
	-nocase "password:" { ;# if we are asked for the password again, then we have provided the wrong password
		send_error "&#92;nCan not log in to $HOST because the password provided for user $USER has been rejected.&#92;n";
		exit $E_WRONG_PASS;
	}
	-re "revision (&#92;[0-9]+)." {
		if {$REV == $expect_out(1,string)} {
			send_user "&#92;nSuccessfully updated $WC on $HOST to revision $REV.&#92;n"
		} else {
			send_user "&#92;nUpdated repository to revision $expect_out(1,string), but svn reports that we are at revision number $REV.&#92;n"
			send_error "CAUTION: Repository updated to revision $expect_out(1,string), but committed revision $REV.&#92;n"
		}
	}
	default {
		send_error "An unexpected error has occured. The process at spawn ID $spawn_id has produced the following output:&#92;n"
		send_error $expect_out(buffer)
		exit $E_UNKNOWN
	}
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2007/06/21/a-better-expect-subversion-post-commit-hook/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Use expect with Subversion&#8217;s post-commit hook to automatically update remote servers</title>
		<link>http://maymay.net/blog/2007/05/18/use-expect-with-subversions-post-commit-hook-to-automatically-update-remote-servers/</link>
		<comments>http://maymay.net/blog/2007/05/18/use-expect-with-subversions-post-commit-hook-to-automatically-update-remote-servers/#comments</comments>
		<pubDate>Fri, 18 May 2007 22:25:30 +0000</pubDate>
		<dc:creator>Meitar</dc:creator>
				<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tech/Computing]]></category>
		<category><![CDATA[Unix/Linux]]></category>
		<category><![CDATA[expect]]></category>
		<category><![CDATA[Subversion]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/archives/2007/05/18/use-expect-with-subversions-post-commit-hook-to-automatically-update-remote-servers/</guid>
		<description><![CDATA[In one of my web development projects, it became important to keep the staging web server in sync with the latest code that myself and several other developers were working on. There are a number of ways to mirror files and directories across machines, rsync being one of the most widely known. However, in addition [...]]]></description>
			<content:encoded><![CDATA[<p>In one of my web development projects, it became important to keep the staging web server in sync with the latest code that myself and several other developers were working on. There are a number of ways to mirror files and directories across machines, <code>rsync</code> being one of the most widely known. However, in addition to simply mirroring the files across the two servers, we also needed a way to kick off the mirroring process that cleanly integrated with our development workflow. Subversion&#8217;s <code>post-commit</code> hook allowed us to do just that.</p>
<p>Still, however, the problem was not exactly straightforward. We needed to execute a <code>svn update</code> command on a server other than the server on which the Subversion repository was being hosted. Shell scripts are the obvious choice for command-line automation in UNIX, but they don&#8217;t deal with interactive commands very well. So instead of writing a shell script, I wrote an <code>expect</code> script.</p>
<p><ins datetime="2007-06-21T22:00-0500"><strong>This expect script is really basic. There&#8217;s <a href="/blog/archives/2007/06/21/a-better-expect-subversion-post-commit-hook/">a better one</a> in a future post on this topic.</strong></ins></p>
<pre>#!/usr/bin/expect -f

#
# This expect post-commit hook connects to <var>staging-webserver</var>
# and updates the working copy hosted there to the latest checked-in code.
# This means that whenever code is committed to the repository, the web site hosted
# will always be running the latest version of the code.
#
# AUTHOR: Meitar Moscovitz
#

# POST-COMMIT HOOK
#
# [...]
#

set REPOS [lindex $argv 0]
set REV [lindex $argv 1]
set HOST <var>staging-webserver</var>
# Use <var>update-user</var> to log in to <var>staging-webserver</var>
# to update the working copy, but this can probably be improved so as not
# to expose this user's password.
set USER <var>update-user</var>
set PASS <var>update-user's-password</var>

spawn /usr/bin/ssh $USER@$HOST svn update <var>/path/to/web/site/directory</var>
expect "continue connecting (yes/no)? "
send "yes&#92;r"
expect "password: "
send "$PASS&#92;r"
expect eof</pre>
<p>There&#8217;s one really tricky bit to this script, which is the understanding that when Subversion runs the post-commit hook, no environment information is passed to this script. As a result, there is no home directory or path information set for this executable. This is why everything is defined using absolute paths. Also, because there is no home directory for <var>update-user</var>, the expect script will always be prompted by <acronym title="Secure SHell">SSH</acronym> to re-verify the server&#8217;s identity. So rather than just expecting &#8220;password: &#8220;, we always expect &#8220;continue connecting (yes/no)? &#8221; and say yes, and <em>then</em> send our password.</p>
<p>Note, of course, that <var>update-user</var> should be a user with limited access to the system, yet enough so that he may update the working copy on the web server. I&#8217;m sure there is probably a more secure way of doing this as well, so any sort of feedback on securing this or scaling it would be welcome.</p>
]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2007/05/18/use-expect-with-subversions-post-commit-hook-to-automatically-update-remote-servers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Importance of Naming Conventions in Collaborative Web Production</title>
		<link>http://maymay.net/blog/2007/05/03/the-importance-of-naming-conventions-in-collaborative-web-production/</link>
		<comments>http://maymay.net/blog/2007/05/03/the-importance-of-naming-conventions-in-collaborative-web-production/#comments</comments>
		<pubDate>Fri, 04 May 2007 03:02:13 +0000</pubDate>
		<dc:creator>Meitar</dc:creator>
				<category><![CDATA[Information & Communication]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Web Site Optimization]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/archives/2007/05/03/the-importance-of-naming-conventions-in-collaborative-web-production/</guid>
		<description><![CDATA[It strikes me as very, very interesting how, especially in the world of technology where everything is thought to be so regimented and precise, where a single typo can be the difference between compilation and error, that there is so much versatility in every step of the creative process. This is, of course, a result [...]]]></description>
			<content:encoded><![CDATA[<p>It strikes me as very, very interesting how, especially in the world of technology where everything is thought to be so regimented and precise, where a single typo can be the difference between compilation and error, that there is so much versatility in every step of the creative process. This is, of course, a result of the nature of the industry, that being a knowlege-based economy, but the observation still holds strength.</p>
<p>I&#8217;m beginning a new project at work where, for the first time, I&#8217;m working with a large team of developers, and not just integration developers but front-end developers like myself. Since I&#8217;m the new guy, I&#8217;m finding myself required to learn the teams established vocabulary and this is making me realize just how much of my own vocabulary I have developed myself without even realizing how large it&#8217;s grown.</p>
<p>It all comes down to how we organize our code and that, of course, depends very much on how we are used to thinking about things. On a team of people working together for a common goal, such implementation-specific details are much more central to the success of the project than when working alone, such as in a freelance situation.</p>
<p>It&#8217;s interesting to me to see how many of the the established coding standards and naming conventions are obviously built off of the same kinds of ideas that I&#8217;ve already had and have been using for quite some time, and yet how different they are in implementation. This extends beyond the obvious case of using dash-separated class and ID names instead of camel case lettering or vice versa. It goes so far as to project management and workflow considerations, file name conventions, and semantics.</p>
<p>In some cases, optimizations are actually sacrificed on a team in favor of clarity, but this is actually a good thing. In my freelance work, I typically squeeze every last ounce of optimization into a project by using shorter names, more optimized files, and extremely dense code to ensure the best possible result. In a project with other developers however, the success of the project is far more dependant on everyone&#8217;s collective understanding of the code, so clarity is and should be prioritized above optimizations.</p>
]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2007/05/03/the-importance-of-naming-conventions-in-collaborative-web-production/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The ROI of Knowledge Sharing (Part 1)</title>
		<link>http://maymay.net/blog/2006/12/21/the-roi-of-knowledge-sharing-part-1/</link>
		<comments>http://maymay.net/blog/2006/12/21/the-roi-of-knowledge-sharing-part-1/#comments</comments>
		<pubDate>Thu, 21 Dec 2006 19:17:54 +0000</pubDate>
		<dc:creator>Meitar</dc:creator>
				<category><![CDATA[Business & E-Commerce]]></category>
		<category><![CDATA[Information & Communication]]></category>
		<category><![CDATA[Information Architecture]]></category>
		<category><![CDATA[Productivity]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/archives/2006/12/21/the-roi-of-knowledge-sharing-part-1/</guid>
		<description><![CDATA[Successful knowledge sharing increases the productivity, effectiveness, and efficiency of your organization by enabling your staff to accomplish orders-of-magnitude more than they would otherwise have been able to. This <del>article</del> rant presents my ideas on this subject from the ground up.]]></description>
			<content:encoded><![CDATA[<p>Define success. Success means growing, making things easier, doing more in less time, etc. There are entire industry movements dedicated to figuring out how to be the best at being successful. Heck, there are even acronyms (imagine that!) for it in all sorts of speech domains, such as in business, where <acronym title="Return On Investment">ROI</acronym> (Return on Investment) is huge, and in productivity, GTD (Getting Things Done) is a huge fad right now. What I think people often misunderstand or fail to realize is the very simple fact that success is much harder on a large scale than on a small one. Why is this the case?</p>
<p>Well, obviously, success on a large scale means accomplish &#8220;much more&#8221; than success on a small scale. Also, success on a large scale often means working with more than one person where collaboration is a must. So what are the tools people use to accomplish this success?</p>
<p>The most well-known tool is management. Implement a structure in an organization that is overseen by people whose job it is to make sure success happens on varying levels of scale. The larger an organization gets the more managers it needs, not because of personnel (technology advancements and process improvements in Human Resources have significantly the amount of employees a company can keep track of) but rather to ensure that this army of personnel is not going to lose sight of whatever is deemed the successful goal in their appropriate &#8220;big picture.&#8221; For CEOs, this means the company&#8217;s bottom line. For regional managers, this means their region&#8217;s bottom line. For individual supervisors, this means success completion of the task their division was handed, and so on and so forth.</p>
<p>Clearly, this is an important and necessary part of doing business. But I theorize that businesses and large organizations tend to see the act of adding more management to their organization as an act of ensuring a return on their investments which is probably overestimated. A manager is someone you have to pay (often a lot more than other forms of employees), and whose job actually adds to the complexity and opaqueness and beurocracy of an organization. At some point, this must be more harmful than helpful.</p>
<p>So what else can be done? I would suggest that an often very underestimated and underutilized area of increasing <acronym title="Return On Investment">ROI</acronym> is by improving knowledge transfer and knowledge sharing between employees. Why? Because it builds on the concepts and proven methodologies of small-scale success wherein many small successes brings larger success naturally, rather than forcefully. I see the largest contributor to small-scale success (most explicitly evident in personal successes, probably the smallest scale you can get) as the increase of knowledge. My own experience has taught me that I am more productive now than I was one year ago because I can do more than I could do one year ago, and I can do more now than I could then because I know more about the world and the objects within it.</p>
<p>Applying this to a larger scale is simple in theory but difficult in practice. In theory, the more smart people an organization has working for it, the more collective knowledge is stored within that organization. In practice, this is actually a huge problem that the solution called management is attempting to alleviate because smart people tend to be very insular and self-driven. This leads to a phenomenon I have begun calling knowledge fracturing which ultimately results in siloed and specialized skill sets with little ability to expand beyond that specialization. This is so significant a problem in large organizations that entire industries and bodies of knowledge have been created to help alleviate workflow problems and help facilitate communication.</p>
<p>Now, this is good, because a prerequisite to knowledge sharing is communication. You can&#8217;t share what you know if you can&#8217;t communicate with someone who can listen. But this is only the first step. Certainly, an organization can ensure better <acronym title="Return On Investment">ROI</acronym> with communication tools, but the next level&#8211;which I have yet to see anyone focus on too obviously&#8211;is knowledge sharing; communication with the intent of making available the information one has accumulated to the point that enables one to share the information about one&#8217;s job function or skill set.</p>
<p>This is a concept that is actually extremely scary to most people. There are two oft-cited rebuttals to this. The first involves a concern for job security. If everything that I know about how to do my job and why is written down for fellow employees to see, what need is there for me? I maintain that this actually makes you as an employee more valuable, rather than less, because suddenly you are a teacher, a reference guide, an invaluable &#8220;go-to guy.&#8221; The more you share, the more clearly people understand what you know and what you&#8217;re good at. Sharing, at its roots, is all just about showcasing what you&#8217;re good at. How can that be bad?</p>
<p>The second involves a concern for an organizations information security, wherein too much knowledge sharing can actually be security breaches and information leaks that are unacceptable to the organization&#8217;s policies. Obviously, while this is an important issue, it is not a direct argument against the validity of knowledge sharing but rather an objection to a side-effect of it if it is done carelessly. As with all things, I think most people will agree that care should always be taken in everything you do. This is just one more example.</p>
<p>So why does knowledge sharing actually increase the overall <acronym title="Return On Investment">ROI</acronym> of an organization? I theorize, based solely on my own experiences, that the majority of time and expense that is not directly spent on progressing an organization&#8217;s goals are spent trying to navigate a system or accomplish a task that is only difficult because it is not understood. If it were understood, the procedure would take less time, or the company would not need to hire a consultant, or whatever the situation may be. The point is that if you know what you&#8217;re doing, you&#8217;ll do it more effectively and more efficiently.</p>
<p><strong>Successful knowledge sharing increases the productivity, effectiveness, and efficiency of your organization by enabling your staff to accomplish orders-of-magnitude more than they would otherwise have been able to.</strong></p>
<p>With that as a foundation, let&#8217;s next explore how an organization might go about successfully sharing knowledge. And as you may have guessed, I have one word that: wiki.</p>
<p>(I have not yet written the next part.)</p>
]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2006/12/21/the-roi-of-knowledge-sharing-part-1/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Corporate Culture Shock</title>
		<link>http://maymay.net/blog/2006/12/06/corporate-culture-shock/</link>
		<comments>http://maymay.net/blog/2006/12/06/corporate-culture-shock/#comments</comments>
		<pubDate>Wed, 06 Dec 2006 20:52:24 +0000</pubDate>
		<dc:creator>Meitar</dc:creator>
				<category><![CDATA[Business & E-Commerce]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Information & Communication]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Productivity]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/archives/2006/12/06/corporate-culture-shock/</guid>
		<description><![CDATA[Reflections on my first experiences in "real corporate America." Obviously, I dislike it.]]></description>
			<content:encoded><![CDATA[<p>Since I began my new job, work has been an interesting rollercoaster of extremes. I keep wavering between feeling anxious and feeling bored, the two opposing sides on either side of the <a href="//c2.com/cgi/wiki?MentalStateCalledFlow">flow channel</a>. This is rather frustrating. Half the time I&#8217;m not being productive because I am trying to make sense of something I very obviously don&#8217;t understand and don&#8217;t have any reliable resources from which to learn about the thing, and the other half of the time I&#8217;m not entirely sure if I what I&#8217;m doing is correct because it seems like such a little amount of work (because it&#8217;s easy to do).</p>
<p>That said, I have been learning a lot lately. I&#8217;ve gotten to put my hands on software I&#8217;d never have otherwise gotten to touch (like Solaris 9 and Red Hat Enterprise Linux), I&#8217;ve learned more about Subversion and how to use it than I thought I would have in the little time I&#8217;ve used it, and my practical networking knowledge with regards to things like VPN routing have been substantially increased. Even more interesting than all of this new technical skill, however, is all that I&#8217;ve experienced on a cultural level.</p>
<p>I am now certain that what I am experiencing is intense culture shock. Let me explain.</p>
<p>The first thing people notice when you move to another country is probably the way people speak. Specifically, the two things people most often comment on is the language being spoken, and how it sounds (accent, common sounds, etc.). Similarly, the first thing I noticed when I got hired was the way people spoke, and what they were saying. The heavy use of acronyms are not new to me, but at the amount of company-specific <em>technical</em> jargon is hard to decipher when there is no Wikipedia to search. And farbeit for there to be a single, updated glossary that is easy to reference, either, or have someone offer to expand an acronym without you asking for them to do so.</p>
<p>Even more bewildering than the array of new acronyms, however, was the use of what I have come to call businessese. This is a language whose apparent sole purpose is to make whatever you are saying sound very important and hard to accomplish. An example would help clarify this.</p>
<p>The other day I was asked to review a written document. It was written by a colleague of mine. Our mutual boss, probably wanting me to get familiar with the look and feel of the documentation, sent it to me and said something like this in an email:</p>
<blockquote><p>
Meitar, here is [document X]. Please ensure it is ready for delivery to the client.
</p></blockquote>
<p>What he actually meant was something like this:</p>
<blockquote><p>
Meitar, here is [document X]. Please proofread this for any errors and then let us know so we can pass it along to the client.
</p></blockquote>
<p>My lesson from this experience, and from numerous similar experiences lately, is that people in the corporate business world don&#8217;t tend to actually say in plain English what they want you to do.</p>
<p>Another interesting point of fact I&#8217;ve encountered lately is the incredible difference it makes in the technical arena when you communicate with precision. This is difficult to do, because there is often an unacceptable latency if you speak with <em>too much</em> precision. This is why acronyms are so useful, if you know what they mean. In other words, if you already know what a web browser is, there&#8217;s no need for me to specifically name your web browser when I tell you to go to a particular web page. But if you didn&#8217;t know what a web browser was, then I would more likely get my message successfully delivered to you if I told you to type a certain string into the address bar of a particular program, say Firefox, instead of saying &#8220;go to this web address in your browser.&#8221;</p>
<p>This is also nothing new to me, but this week I am working with two colleagues who are utter opposites of each other in this respect. One colleague, whom I&#8217;ll call Descriptive, speaks slowly and clearly when he talks and assumes just enough technical familiarity with the subject to speak somewhat concisely, without sounding condescending. He is also quick to offer expansions for acronyms or further explanations of specific sequences of actions when he senses they are needed, as well as omitting them when he notices the listener is loosing focus. It&#8217;s very obviously a skill.</p>
<p>The other colleague, whom I&#8217;ll call Snappy, speaks so quickly I can&#8217;t tell when he&#8217;s taking a breath (if at all). He absolutely never expands acronyms, nor does he provide any sort of context for what he&#8217;s saying, such as a window&#8217;s title or an a filesystem location. He reminds me more of the character Nick Burns from the SNL skits of &#8220;Your Company&#8217;s Computer Guy&#8221; than anything else. I don&#8217;t doubt his technical ability at all (he&#8217;s very obviously quite skilled), but after mere days, I find myself dreading the prospect of working with him in the future.</p>
<p>There are thus two ultimate conclusions I can draw from these obervations (at least right now). Since I know that I am far too much in love with precision and clarity (and usability) to tolerate any confusing imperfections in what I create, I have the potential to become very well-liked for my helpful nature <em>if</em> I learn enough that I can actually answer questions when they arise. This bodes well for me.</p>
<p>Concerning, however, is the possibility that all this businessese nonsense will ultimately get to me. I truly, truly despise it and try hard not to cringe whenever it rears its head. I can&#8217;t understand for the life of me why my bosses don&#8217;t talk like humans nor can I understand why the majority of amazingly bright people (many of whom are more technically adept than myself) can&#8217;t be bothered to make the slightest effort to think more than one or two steps ahead of themselves. There are, of course, exceptions, but the fact remains that these are exceptions and not the rule.</p>
<p>I am notorious for conjuring up utopian visions in my head and then not settling for anything less. Here we go again.</p>
]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2006/12/06/corporate-culture-shock/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Balancing Patience with Results (an update post)</title>
		<link>http://maymay.net/blog/2006/10/15/balancing-patience-with-results-an-update-post/</link>
		<comments>http://maymay.net/blog/2006/10/15/balancing-patience-with-results-an-update-post/#comments</comments>
		<pubDate>Mon, 16 Oct 2006 03:26:35 +0000</pubDate>
		<dc:creator>Meitar</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Productivity]]></category>

		<guid isPermaLink="false">http://maymay.net/blog/archives/2006/10/15/balancing-patience-with-results-an-update-post/</guid>
		<description><![CDATA[Tomorrow, I begin my first day of official employment with Opsware, Inc., a relatively small company whose focus is various solutions to the challenges of data center automation. This is a very exciting new challenge for me, personally and professionally, and I&#8217;m thrilled for the opportunity. Naturally, however, this means my focus will (probably) shift [...]]]></description>
			<content:encoded><![CDATA[<p>Tomorrow, I begin my first day of official employment with <a href="//opsware.com/">Opsware, Inc.</a>, a relatively small company whose focus is various solutions to the challenges of data center automation. This is a very exciting new challenge for me, personally and professionally, and I&#8217;m thrilled for the opportunity. Naturally, however, this means my focus will (probably) shift away from projects such as those that I was doing under the <a href="//maymaymedia.com/">Maymay Media</a> umbrella in order to devote more time to Opsware. Of course, it also means that I have officially resigned from my position at Apple Computer, Inc.</p>
<p>The whirlwind of events that lead to this new job have been the most compelling evidence I have ever encountered strengthening my arguments for the importance of relevancy. Throughout all my experiences, I have consistently been given sage-sounding advice: &ldquo;Be patient. Put your time in now, and that will happen.&rdquo; I&#8217;m sure you&#8217;ve been told the same thing countless times, in different contexts applicable to whatever situation you were in.</p>
<p>This statement, when taken literally, is in fact rather wise. Essentially, the advice is reminding you to choose your battles, and that&#8217;s a very smart (and mature) thing to do. However, most people hear two very distinct things when given this advice which can be paraphrased thusly:</p>
<ol>
<li>Wait.</li>
<li>Compromise your goals.</li>
</ol>
<p>Worse, some people actually mean these things. I will agree that the first point is indeed sage advice because it is unavoidable. I will forever continue to disagree with the second because doing so is nothing but a waste of time.</p>
<p>I first remember being given this advice in second grade, when I remarked that I disliked my teachers. Be patient, I was told, it would surely get better. And if it didn&#8217;t, well, next year will be different. Next year <em>was</em> different, but I was equally displeased with the school. Don&#8217;t worry, I was told, just put in your time at school and eventually it&#8217;ll pay off.</p>
<p>But that&#8217;s a lie. Putting your time into something never pays off, ever. <em>Doing things</em> pays off. So if you&#8217;re putting your time into something doing something you can&#8217;t see paying off, why continue to do it? That was the crux of my argument against my traditional schooling (which I eventually broke free of at 16) and was also the motivation for taking this new job opportunity.</p>
<p>I am notorious for being impatient. I rarely argue this fact with anyone because, by all measure, I truthfully am impatient by the standards of those who declare me to be impatient. However, all I see is a difference in priority. I am far more interested in the timeframe necessary to achieve my desired results and I am also aware of many possible paths to take to obtain said results. Many of these paths take a lot longer than others. When confronted with a choice of which path to take, I weigh my options and ask myself why I would take a longer path?</p>
<p>Is there some benefit to the longer path than the shorter one? Would the longer one yield a higher quality result? Is there some cost to the shorter path? Would the shorter one require too many resources, more than I can afford? Most people never get to see other people making these choices. They only see the actions one takes, and that can be misleading.</p>
<p>Yes, learning to take the good with the bad is an important and valuable skill. Yet I insist on reminding people that it is a fine line between that and taking the bad for the good. I would never allow myself to do that, to compromise my goals, their quality, or their timeframe, for something that just isn&#8217;t worth it. For me, one of those things that just wasn&#8217;t worth it was schooling. A more recent example of something that just wasn&#8217;t worth it was the slowness with which advancement from within Apple Computer could move my career forward and become more in line with my passions.</p>
<p>I&#8217;m excited, if slightly nervous, about starting with Opsware. I think (and hope) that one of the reasons I was hired was because of the very attitude I expressed during this post. If so, then I&#8217;m sure I&#8217;ll have a fantastic time and be a great asset at the same time.</p>
<p>Don&#8217;t expect to see too much about Opsware here. <a href="/blog/legal/#disclaimer">I don&#8217;t write about work-related things</a> very often, if at all, but I sure hope that my experiences there will provide much fodder for more material in the future. And in other news, I took and passed the <a href="//certification.comptia.org/security/">CompTIA Security+</a> certification test (the day after my Security+ prep guide came in the mail, go figure).</p>
]]></content:encoded>
			<wfw:commentRss>http://maymay.net/blog/2006/10/15/balancing-patience-with-results-an-update-post/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

