<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.hyperstruct.net/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.hyperstruct.net/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0" xml:base="http://hyperstruct.net">
<channel>
 <title>hyperstruct - do flatlanders dream of n-dimensional shapes?</title>
 <link>http://hyperstruct.net</link>
 <description />
 <language>en</language>
<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.hyperstruct.net/hyperstruct" type="application/rss+xml" /><feedburner:emailServiceId>341729</feedburner:emailServiceId><feedburner:feedburnerHostname>http://www.feedburner.com</feedburner:feedburnerHostname><item>
 <title>License change ("MozLab meets Mozilla") </title>
 <link>http://feeds.hyperstruct.net/~r/hyperstruct/~3/291004463/license-change-mozlab-meets-mozilla</link>
 <description>&lt;p&gt;A few days ago I relicensed MozLab (i.e. &lt;a href="http://hyperstruct.net/projects/mozrepl"&gt;MozRepl&lt;/a&gt; and &lt;a href="http://hyperstruct.net/projects/mozunit"&gt;MozUnit&lt;/a&gt;) from GPL to MPL/GPL/LGPL, to make them compatible with Mozilla codebase.  The reason is that Mozilla is including MozRepl in a tool which will make many of us XUL developers very, very happy.&lt;/p&gt;
&lt;p&gt;The project isn't secret but it's still in the early stages, so I won't be chatty about it for now.  Watch this space. :-)&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=n3SuaH"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=n3SuaH" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=1TXPqh"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=1TXPqh" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=hcdxcH"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=hcdxcH" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=ermvuh"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=ermvuh" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=0kGlBh"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=0kGlBh" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.hyperstruct.net/~r/hyperstruct/~4/291004463" height="1" width="1"/&gt;</description>
 <comments>http://hyperstruct.net/2008/5/15/license-change-mozlab-meets-mozilla#comments</comments>
 <category domain="http://hyperstruct.net/category/tags/mozilla">mozilla</category>
 <pubDate>Thu, 15 May 2008 15:24:38 +0000</pubDate>
 <dc:creator>bard</dc:creator>
 <guid isPermaLink="false">147 at http://hyperstruct.net</guid>
<feedburner:origLink>http://hyperstruct.net/2008/5/15/license-change-mozlab-meets-mozilla</feedburner:origLink></item>
<item>
 <title>SamePlace, the contest, and Italy</title>
 <link>http://feeds.hyperstruct.net/~r/hyperstruct/~3/234647270/sameplace-the-contest-and-italy</link>
 <description>&lt;p&gt;This blog used to be mostly about &lt;a href="http://sameplace.cc"&gt;SamePlace&lt;/a&gt;. If you've been reading it long enough to remember that, you're probably one of the early adopters, so please virtually celebrate with me this &lt;a href="http://labs.mozilla.com/2008/02/announcing-the-extend-firefox-2-winners"&gt;little bit of news&lt;/a&gt;. :-)&lt;/p&gt;
&lt;p&gt;SamePlace won a grand prize together with &lt;a href="http://shareaholic.com/"&gt;Shareaholic&lt;/a&gt; and &lt;a href="http://firefox.spatialviews.com/"&gt;Minimap&lt;/a&gt; (the announcement lists them in alphabetic order with a numeric bullet and they look like first/second/third prize&amp;mdash;they're actually co-winners, just like the twelve runners up.)&lt;/p&gt;
&lt;p&gt;And it seems it's been a productive time for Italy: my friend &lt;a href="http://dafizilla.wordpress.com/"&gt;Davide&lt;/a&gt; is there too with &lt;a href="http://dafizilla.sourceforge.net/table2clip/"&gt;Table2Clipboard&lt;/a&gt;.  Not bad for this old little country. :-)&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=SUmtxmE"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=SUmtxmE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=HdZS6We"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=HdZS6We" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=OGisCmE"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=OGisCmE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=kAjjBSe"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=kAjjBSe" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=nrWJa1e"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=nrWJa1e" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.hyperstruct.net/~r/hyperstruct/~4/234647270" height="1" width="1"/&gt;</description>
 <comments>http://hyperstruct.net/2008/2/13/sameplace-the-contest-and-italy#comments</comments>
 <category domain="http://hyperstruct.net/category/tags/mozilla">mozilla</category>
 <category domain="http://hyperstruct.net/category/tags/sameplace">sameplace</category>
 <pubDate>Wed, 13 Feb 2008 23:52:37 +0000</pubDate>
 <dc:creator>bard</dc:creator>
 <guid isPermaLink="false">145 at http://hyperstruct.net</guid>
<feedburner:origLink>http://hyperstruct.net/2008/2/13/sameplace-the-contest-and-italy</feedburner:origLink></item>
<item>
 <title>Dynamic variables hack in Erlang</title>
 <link>http://feeds.hyperstruct.net/~r/hyperstruct/~3/226953150/dynamic-variables-hack-in-erlang</link>
 <description>&lt;p&gt;One thing that jumps to the eye in functional code sources
is longer-than-usual argument lists.&lt;/p&gt;

&lt;pre&gt;
&lt;code&gt;
process(Tree, Env, Plugins, Config, ...).
&lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt;It's easy to see that as a consequence of functions using arguments as sole
input channel.  (Global &lt;code&gt;-define()&lt;/code&gt;'s
don't qualify as input channels&amp;mdash;they can't vary at runtime, arguments can.)&lt;/p&gt;

&lt;p&gt;Usually it's no big hassle.&lt;/p&gt;

&lt;!--break--&gt;

&lt;p&gt;Sometimes though you have a front-end
function to a complex computation which is arranged in many layers of
function calls, and you need to pass something to the front-end that
only the lowest layer needs. You'd rather to not care about it in intermediate
layers, but you still have to because intermediate layers forward it to the lowest one.&lt;/p&gt;

&lt;p&gt;Obligatory contrived example (if you can read Ruby, Dave Thomas has a
&lt;a
href="http://pragdave.blogs.pragprog.com/pragdave/2003/06/dynamically_sco.html"&gt;better
one&lt;/a&gt;):&lt;/p&gt;

&lt;pre&gt;
&lt;code&gt;
%% User invocation
library:do_it(A, B, C, D).

%% Library
do_it(A, B, C, D) -&gt;
    part1(A) ++ part2(B, C, D).

part2(B, C, D) -&gt;
    extra_computation(B) ++ part3(C, D).

part3(C, D) -&gt;
    another_extra_computation(C) ++ part4(D).

%% ...
&lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt;Above, &lt;code&gt;D&lt;/code&gt; isn't really needed until &lt;code&gt;part4&lt;/code&gt;,
but &lt;code&gt;part1&lt;/code&gt;, &lt;code&gt;part2&lt;/code&gt; and &lt;code&gt;part3&lt;/code&gt; have to accept it as argument.&lt;/p&gt;

&lt;p&gt;Functions being unable to see beyond their argument list spares me many a headache
compared to when I dwell in OO-land, so I tend to deem it a &lt;em&gt;feature, not a
bug&lt;/em&gt;.  In cases like the above however I'd like to relax boundaries.
Especially when doing exploratory programming and &lt;code&gt;part1&lt;/code&gt;, &lt;code&gt;part2&lt;/code&gt;,
&lt;code&gt;partN&lt;/code&gt; have several clauses and invocation points,
maintaining &amp;ldquo;forwarding&amp;rdquo; argument lists can impair your flow.&lt;/p&gt;


&lt;p&gt;Common Lisp has &lt;a href="http://www.gigamonkeys.com/book/variables.html#dynamic-aka-special-variables"&gt;dynamic variables&lt;/a&gt;.  They're best described through
an example (leaving out the parentheses, since they scare away large
chunks of the population):&lt;/p&gt;

&lt;pre&gt;
&lt;code&gt;
&gt; defvar *player* "Dr. Falken"
*PLAYER*

&gt; defun player-greeting
&gt;   concatenate 'string "Hello, " *player*
PLAYER-GREETING

&gt; player-greeting
"hello, Dr. Flaken"

&gt; let ((*player* "Matt")) player-greeting
"hello, Matt"

&gt; player-greeting
"hello, Dr. Flaken"
&lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt;&lt;code&gt;let&lt;/code&gt; temporarily changes the binding of
&lt;code&gt;*player*&lt;/code&gt; for the scope &lt;code&gt;player-greeting&lt;/code&gt; is evaluated in.&lt;/p&gt;

&lt;p&gt;Here's a way to do it in Erlang.  (Read it up to the end, there are caveats.)&lt;/p&gt;

&lt;p&gt;First, user's point of view:&lt;/p&gt;

&lt;pre&gt;
&lt;code&gt;
player_greeting() -&gt;
    "Hello, " ++ dynvar:fetch(player).

test() -&gt;
    Greeting = dynvar:with([{player, "Dr. Falken"}],
                           fun player_greeting/0),
    Greeting.
&lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt;Invoking test/0 will produce &lt;code&gt;"Hello, Dr. Falken"&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The code:&lt;/p&gt;

&lt;pre&gt;
&lt;code&gt;
-module(dynvar).
-export([with/2, fetch/1, test/0]).

with(Bindings, Action) -&gt;
    lists:foreach(fun({Name, Value}) -&gt; put(Name, Value) end, Bindings),
    try apply(Action, []) of
        X -&gt; X
    after
        lists:foreach(fun({Name, _Value}) -&gt; erase(Name) end, Bindings)
    end.

fetch(VarName) -&gt;
    get(VarName).
&lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt;Yes, the process dictionary seems to be at the epicenter of 
dirty Erlang hacks. :-)&lt;/p&gt;

&lt;p&gt;A few considerations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Common Lisp's &lt;code&gt;player-greeting&lt;/code&gt; can work without a &amp;ldquo;let&amp;rdquo; explicitly binding a value to &lt;code&gt;*player*&lt;/code&gt;.  The Erlang example can't.  This isn't necessarily a drawback (see next point).&lt;/li&gt;

&lt;li&gt;Syntax of the Erlang example is more verbose.  A few bytes could be shaved off using macros and ditching dynvar:fetch/1, but that would only be a win in the eyes of the &amp;ldquo;beauty above all&amp;rdquo; crowd (&lt;em&gt;surface&lt;/em&gt; beauty, let me add).  First, indirecting via a macro would make life harder for whomever maintains the code six months down the road.  Second, when you're going against the grain of the language, you may want the comments to mention it, and you really want the code to &lt;em&gt;scream&lt;/em&gt; it.  (Do as I say, don't do &lt;a href="/2007/6/26/literal-xml-in-erlang-with-parse-transform-2"&gt;as I do&lt;/a&gt;.)&lt;/li&gt;

&lt;li&gt;This may collide with other uses of the process dictionary.  Consider adding a unique prefix to keys (e.g. &lt;code&gt;dynvar-&lt;/code&gt;) before put()'ting them into the dictionary if that is an issue.&lt;/li&gt;

&lt;li&gt;Where will you want to use this?  Well, I'm using it in the internals of the &lt;a href="/projects/seethrough"&gt;seethrough template engine&lt;/a&gt; to avoid passing arguments through intermediate layers.  Using it in library internals, preferably within a single module, not leaking signs of &lt;code&gt;dynvar&lt;/code&gt; to the library user, is where I can advise to use this and still retain a clear conscience.&lt;/li&gt;
&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=kLPkJWD"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=kLPkJWD" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=PEmPZdd"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=PEmPZdd" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=D6MIeOD"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=D6MIeOD" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=2piqjXd"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=2piqjXd" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=4MHjeHd"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=4MHjeHd" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.hyperstruct.net/~r/hyperstruct/~4/226953150" height="1" width="1"/&gt;</description>
 <comments>http://hyperstruct.net/2008/1/31/dynamic-variables-hack-in-erlang#comments</comments>
 <category domain="http://hyperstruct.net/category/tags/erlang">erlang</category>
 <category domain="http://hyperstruct.net/category/tags/planeterlang">planet-erlang</category>
 <category domain="http://hyperstruct.net/category/tags/programming">programming</category>
 <pubDate>Thu, 31 Jan 2008 11:23:53 +0000</pubDate>
 <dc:creator>bard</dc:creator>
 <guid isPermaLink="false">143 at http://hyperstruct.net</guid>
<feedburner:origLink>http://hyperstruct.net/2008/1/31/dynamic-variables-hack-in-erlang</feedburner:origLink></item>
<item>
 <title>...drupalized.</title>
 <link>http://feeds.hyperstruct.net/~r/hyperstruct/~3/174290101/drupalized</link>
 <description>&lt;p&gt;Well, I flipped the switch.  This site now runs on Drupal.  &lt;/p&gt;
&lt;p&gt;Also, MozLab documentation has moved from trac to &lt;a href="/projects/mozlab"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=EqEObiA"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=EqEObiA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=w2Ftbka"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=w2Ftbka" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=qZ7SjkA"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=qZ7SjkA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=F9UkhVa"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=F9UkhVa" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=1xDAIEa"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=1xDAIEa" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.hyperstruct.net/~r/hyperstruct/~4/174290101" height="1" width="1"/&gt;</description>
 <comments>http://hyperstruct.net/2007/10/24/drupalized#comments</comments>
 <pubDate>Wed, 24 Oct 2007 11:39:44 +0000</pubDate>
 <dc:creator>bard</dc:creator>
 <guid isPermaLink="false">140 at http://hyperstruct.net</guid>
<feedburner:origLink>http://hyperstruct.net/2007/10/24/drupalized</feedburner:origLink></item>
<item>
 <title>Almost drupalized</title>
 <link>http://feeds.hyperstruct.net/~r/hyperstruct/~3/173787731/almost-drupalized</link>
 <description>&lt;p&gt;Just a quick notice to let you know that this site is moving from &lt;a href="http://mephistoblog.com"&gt;Mephisto&lt;/a&gt; to &lt;a href="http://drupal.org"&gt;Drupal&lt;/a&gt; very soon.  If you are reading it via the Feedburner alias (&lt;a href="http://feeds.hyperstruct.net/hyperstruct"&gt;http://feeds.hyperstruct.net/hyperstruct&lt;/a&gt;), everything should fall neatly into place… except the usual, annoying rehash of the latest posts, unfortunately.&lt;/p&gt;


	&lt;p&gt;If you’re curious, the new site is currently &lt;a href="http://beta.hyperstruct.net"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=oiTuRFA"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=oiTuRFA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=SXULtha"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=SXULtha" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=fN34IdA"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=fN34IdA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=KWDPJ8a"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=KWDPJ8a" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=Nj05tWa"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=Nj05tWa" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.hyperstruct.net/~r/hyperstruct/~4/173787731" height="1" width="1"/&gt;</description>
 <comments>http://hyperstruct.net/2007/10/23/almost-drupalized#comments</comments>
 <pubDate>Tue, 23 Oct 2007 07:00:00 +0000</pubDate>
 <dc:creator>bard</dc:creator>
 <guid isPermaLink="false">139 at http://hyperstruct.net</guid>
<feedburner:origLink>http://hyperstruct.net/2007/10/23/almost-drupalized</feedburner:origLink></item>
<item>
 <title>Tetramine Day</title>
 <link>http://feeds.hyperstruct.net/~r/hyperstruct/~3/161430154/tetramine-day</link>
 <description>&lt;p&gt;I am amiss in not mentioning sooner a great initiative by &lt;a href="http://qpublic.ptumpa.com/"&gt;Andrea&lt;/a&gt;: the &lt;a href="http://tday.ptumpa.com/"&gt;Tetramine Day&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;What is it?  You build a human-sized Tetris block, you &lt;em&gt;wear&lt;/em&gt; it, and then meet hundreds of other “human tetramines” for a giant Tetris game.&lt;/p&gt;
&lt;p&gt;If the description alone didn’t send you rolling on the floor laughing, check out the video below.  Tetramine Day will be held in just a few days in Bologna, Piazza Maggiore, on Saturday 30th at 15:00.  The &lt;a href="http://tday.ptumpa.com/"&gt;web site&lt;/a&gt; contains instructions on building your own Tetramine.&lt;/p&gt;
&lt;div style="text-align: center;"&gt;
&lt;object width="425" height="350"&gt;&lt;br /&gt;
&lt;param name="movie" value="http://www.youtube.com/v/jxUL-NARLX8"&gt;&lt;/param&gt;
&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/jxUL-NARLX8" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=FE1vJwE4"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=FE1vJwE4" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=miA2QVSK"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=miA2QVSK" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=uKTsET2p"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=uKTsET2p" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=YF4CIOiw"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=YF4CIOiw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=Kp7vDibz"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=Kp7vDibz" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.hyperstruct.net/~r/hyperstruct/~4/161430154" height="1" width="1"/&gt;</description>
 <comments>http://hyperstruct.net/2007/9/26/tetramine-day#comments</comments>
 <pubDate>Wed, 26 Sep 2007 07:00:00 +0000</pubDate>
 <dc:creator>bard</dc:creator>
 <guid isPermaLink="false">2 at http://hyperstruct.net</guid>
<feedburner:origLink>http://hyperstruct.net/2007/9/26/tetramine-day</feedburner:origLink></item>
<item>
 <title>[SamePlace] Importing contacts: transports, anyone?</title>
 <link>http://feeds.hyperstruct.net/~r/hyperstruct/~3/148383165/sameplace-importing-contacts-transports-anyone</link>
 <description>&lt;p&gt;Cross-posting from the &lt;a href="http://sameplace.cc/blog"&gt;SamePlace blog&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
		It would be &lt;strong&gt;great&lt;/strong&gt; to import contacts from Yahoo, &lt;span class="caps"&gt;AIM&lt;/span&gt;, MSN etc with just a couple of clicks.  The client-side code is here—we just need server-side transports.&lt;/p&gt;
&lt;p&gt;		The server at sameplace.cc hosts an &lt;span class="caps"&gt;MSN&lt;/span&gt; transports but it’s unlikely that it will be able to handle more.  Any Jabber administrator out there would like to have his or her transports as defaults in SamePlace, or anyone with machines and spare &lt;span class="caps"&gt;CPU&lt;/span&gt;/RAM would like to host them?  Please get in touch if interested.
	&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;!--break--&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=u9GgggsU"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=u9GgggsU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=XnRswI7L"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=XnRswI7L" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=PaQlTvIR"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=PaQlTvIR" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=Y6HJKM8A"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=Y6HJKM8A" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=dvwceuae"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=dvwceuae" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.hyperstruct.net/~r/hyperstruct/~4/148383165" height="1" width="1"/&gt;</description>
 <comments>http://hyperstruct.net/2007/8/26/sameplace-importing-contacts-transports-anyone#comments</comments>
 <category domain="http://hyperstruct.net/category/tags/sameplace">sameplace</category>
 <pubDate>Sun, 26 Aug 2007 07:00:00 +0000</pubDate>
 <dc:creator>bard</dc:creator>
 <guid isPermaLink="false">3 at http://hyperstruct.net</guid>
<feedburner:origLink>http://hyperstruct.net/2007/8/26/sameplace-importing-contacts-transports-anyone</feedburner:origLink></item>
<item>
 <title>SamePlace: sneak peek 2007/7/30</title>
 <link>http://feeds.hyperstruct.net/~r/hyperstruct/~3/140296105/sameplace-sneak-peek-2007-7-30</link>
 <description>&lt;p&gt;To help interested users and developers be a little more aware of what is going on development-wise with SamePlace, &lt;a href="http://sameplace.cc/2007/7/30/sneak-peek-2007-7-30"&gt;I posted a first update&lt;/a&gt; (of hopefully many) on the SamePlace blog.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=q6vsAwUM"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=q6vsAwUM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=gDEYxh9A"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=gDEYxh9A" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=HZFawHTV"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=HZFawHTV" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=qCRzDjN3"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=qCRzDjN3" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=dYtNixCV"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=dYtNixCV" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.hyperstruct.net/~r/hyperstruct/~4/140296105" height="1" width="1"/&gt;</description>
 <comments>http://hyperstruct.net/2007/7/30/sameplace-sneak-peek-2007-7-30#comments</comments>
 <category domain="http://hyperstruct.net/category/tags/firefox">firefox</category>
 <category domain="http://hyperstruct.net/category/tags/im">im</category>
 <category domain="http://hyperstruct.net/category/tags/jabber">jabber</category>
 <category domain="http://hyperstruct.net/category/tags/sameplace">sameplace</category>
 <pubDate>Mon, 30 Jul 2007 07:00:00 +0000</pubDate>
 <dc:creator>bard</dc:creator>
 <guid isPermaLink="false">4 at http://hyperstruct.net</guid>
<feedburner:origLink>http://hyperstruct.net/2007/7/30/sameplace-sneak-peek-2007-7-30</feedburner:origLink></item>
<item>
 <title>Put the Fox in the Box</title>
 <link>http://feeds.hyperstruct.net/~r/hyperstruct/~3/136985459/put-the-fox-in-the-box</link>
 <description>&lt;p&gt;More goodies for MozRepl-equipped Firefoxes: &lt;a href="http://emacspeak.blogspot.com"&gt;T. V. Raman&lt;/a&gt; points me to &lt;a href="http://emacspeak.blogspot.com/2007/06/firebox-put-fox-in-box.html"&gt;a simple shell script to start and drive the browser on headless machines&lt;/a&gt; and to &lt;a href="http://emacspeak.googlecode.com/svn/trunk/lisp/emacspeak-moz.el"&gt;a module to drive Firefox from Emacspeak&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Quote of the day from the above post:&lt;/p&gt;
&lt;p&gt;But in the fine UNIX tradition of Get out of my way or I’ll turn you into a shell script XVFB also turns out to be just what I needed in order to run Firefox as a headless application.&lt;/p&gt;
&lt;p&gt;(chuckle)&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=ymKpuDTB"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=ymKpuDTB" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=8AgG294y"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=8AgG294y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=Zv3xikwH"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=Zv3xikwH" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=mQOJO5PR"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=mQOJO5PR" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=PTPv5Vcx"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=PTPv5Vcx" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.hyperstruct.net/~r/hyperstruct/~4/136985459" height="1" width="1"/&gt;</description>
 <comments>http://hyperstruct.net/2007/7/24/put-the-fox-in-the-box#comments</comments>
 <category domain="http://hyperstruct.net/category/tags/emacs">emacs</category>
 <category domain="http://hyperstruct.net/category/tags/emacspeak">emacspeak</category>
 <category domain="http://hyperstruct.net/category/tags/firefox">firefox</category>
 <pubDate>Tue, 24 Jul 2007 07:00:00 +0000</pubDate>
 <dc:creator>bard</dc:creator>
 <guid isPermaLink="false">5 at http://hyperstruct.net</guid>
<feedburner:origLink>http://hyperstruct.net/2007/7/24/put-the-fox-in-the-box</feedburner:origLink></item>
<item>
 <title>Why talking about "alternative" is shooting yourself (and others) in the foot</title>
 <link>http://feeds.hyperstruct.net/~r/hyperstruct/~3/174290102/why-talking-about-quot-alternative-quot-is-shooting-yourself-and-others-in-the-foot</link>
 <description>&lt;p&gt;I’ve seen it happen time and again.  Companies and individuals go out of their way to write great open source software, then, when the moment comes to let the world know about it, they (and/or their early adopters and proponents) present it as “an alternative to [proprietary solution] Foo”.&lt;/p&gt;
&lt;p&gt;That’s bad when Foo is an established player:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.google.com/search?hl=en&amp;amp;q=firefox+alternative+explorer"&gt;Firefox, the alternative to Internet Explorer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.google.com/search?q=ubuntu%20alternative%20windows"&gt;Ubuntu, the alternative to Windows&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.google.com/search?q=openoffice%20alternative%20microsoft%20office"&gt;OpenOffice, the alternative to Microsoft Office&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.google.com/search?q=neo1973%20alternative%20iphone"&gt;Neo1973, the alternative to iPhone&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But it borders on self-flogging nonsense when Foo is not even in the stores: &lt;a href="http://gizmodo.com/gadgets/touch-me/linux-mpx-multi+touch-table-may-become-free-diy-microsoft-surface-one-day-278613.php"&gt;Linux &lt;span class="caps"&gt;MPX&lt;/span&gt; Multi-touch Table May Become Alternative Microsoft Surface&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;When you frame things like that, you’re giving positive (and free) advertising to the opposing party.  At least for me and for those I asked, the following accurately portrays what the phrase “alternative to Foo” brings to mind:&lt;/p&gt;
&lt;p&gt;&lt;span class="inline center" style="width: 300px;"&gt;&lt;img src="/files/images/why-talking-about-alternative-is-shooting-yourself-and-others-in-the-foot.png" alt="A big Foo globe, surrounded by smaller Bar satellites" title="A big Foo globe, surrounded by smaller Bar satellites" class="image _original" height="300" width="300"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Whether you’re the author of “Bar” or a passionate user advocating it, is that really the picture you want to suggest? (This, by the way, is why there’s no place for things like &lt;em&gt;alternative to &lt;span class="caps"&gt;MSN&lt;/span&gt;/AIM/YahooIM/whatever&lt;/em&gt; on &lt;a href="http://sameplace.cc"&gt;sameplace.cc&lt;/a&gt;, despite much well-meant advice to the contrary.)&lt;/p&gt;
&lt;p&gt;“Oh, that’s all good and well, but how am I supposed to advocate Firefox to someone who doesn’t even know what a browser is?  How, if not contrasting it to something they know, such as Internet Explorer?”&lt;/p&gt;
&lt;p&gt;If you’re advocating a product, and genuinely believe that it’s better (if not, why are you advocating it in the first place?), &lt;em&gt;that&lt;/em&gt; is the idea you want to get across.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
“Oh, you’re still using this to browse the ‘net?  Haven’t you &lt;strong&gt;upgraded&lt;/strong&gt; to Firefox yet?”
&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=ghS0vIA"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=ghS0vIA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=Gc3ywha"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=Gc3ywha" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=0l2EVcA"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=0l2EVcA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=IAxDeka"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=IAxDeka" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.hyperstruct.net/~f/hyperstruct?a=i6heK1a"&gt;&lt;img src="http://feeds.hyperstruct.net/~f/hyperstruct?i=i6heK1a" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.hyperstruct.net/~r/hyperstruct/~4/174290102" height="1" width="1"/&gt;</description>
 <comments>http://hyperstruct.net/2007/7/20/why-talking-about-quot-alternative-quot-is-shooting-yourself-and-others-in-the-foot#comments</comments>
 <category domain="http://hyperstruct.net/category/tags/advocacy">advocacy</category>
 <category domain="http://hyperstruct.net/category/tags/musings">musings</category>
 <category domain="http://hyperstruct.net/category/tags/open-source">open source</category>
 <pubDate>Fri, 20 Jul 2007 07:00:00 +0000</pubDate>
 <dc:creator>bard</dc:creator>
 <guid isPermaLink="false">7 at http://hyperstruct.net</guid>
<feedburner:origLink>http://hyperstruct.net/2007/7/20/why-talking-about-quot-alternative-quot-is-shooting-yourself-and-others-in-the-foot</feedburner:origLink></item>
</channel>
</rss>
