<?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>Etherplex &#187; Emacs</title>
	<atom:link href="http://etherplex.org/archives/category/emacs/feed" rel="self" type="application/rss+xml" />
	<link>http://etherplex.org</link>
	<description>Rick Dillon&#039;s home on the net...</description>
	<lastBuildDate>Tue, 04 Oct 2011 02:37:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Low Learning Curve</title>
		<link>http://etherplex.org/archives/153</link>
		<comments>http://etherplex.org/archives/153#comments</comments>
		<pubDate>Sun, 25 Apr 2010 13:23:18 +0000</pubDate>
		<dc:creator>Rick</dc:creator>
				<category><![CDATA[Emacs]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://etherplex.org/archives/153</guid>
		<description><![CDATA[In computers, why is &#34;easy to use&#34; the metric everyone cares about?  I was listening to some Linux-inspired electro-industrial today at 5:50 AM on Jamendo (long story), and the vocal track started off with &#34;I&#39;ve found it a very very easy to use system.&#34; Forget easy to use.  No one gets into a Corvette or a [...]]]></description>
			<content:encoded><![CDATA[<div class='posterous_autopost'>In computers, why is &quot;easy to use&quot; the metric everyone cares about?  I was listening to some <a href="http://www.jamendo.com/get2/stream/track/m3u/?track_id=503683&amp;order=trackno_asc">Linux-inspired electro-industrial</a> today at 5:50 AM on Jamendo (long story), and the vocal track started off with &quot;I&#39;ve found it a very very easy to use system.&quot;
<p />
<div>Forget easy to use.  No one gets into a Corvette or a Porsche and says &quot;Oh yeah, this is so so easy to drive.&quot;  Heck no.  Those are cars that would shred a beginning driver.  Good, because those cars are optimized to be awesome, not to conform to some idealized notion of &quot;easy&quot;.  But enough about cars.</div>
<p />
<div>Linux is optimized for power.  As the man page for eshell says:</div>
<p />
<blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">
<div>
<div>The role of a command shell is to give you more control over what</div>
</p></div>
<div>
<div>your computer does for you.  Not everyone needs this amount of control,</div>
</div>
<div>
<div>and it does come at a cost: Learning the necessary script commands to</div>
</div>
<div>
<div>express what you want done&#8230; But if you find yourself using your</div>
</p></div>
<div>
<div>computer frequently enough, it is more than worthwhile in the long run.</div>
</div>
<div>
<div><b>Any tool you use often deserves the time spent learning to master it.</b></div>
</div>
<p /></blockquote>
<p> Emphasis mine.  Optimizing for a beginner is a huge mistake, in my opinion.  Sure, if you want to make a lot of money in this early stage of computer development, when adoption isn&#39;t very high yet, then it makes sense to optimize the entire experience for beginners.  But in the long haul, we will develop a population of experienced users, not beginners.  And once the average users has not years, but decades of experience with computers, shouldn&#39;t we admit that any tool you use that much deserves the time spent learning to master it?  And, given that you are going to master a tool, it makes sense to choose a tool worthy of your time.  That should be the analysis new users should be making, rather than seeing how much they can get done in the first 15 seconds using the system.
<p />
<div>As the <a href="http://en.wikipedia.org/wiki/Ion_(window_manager)#Controversy">ironically defunct</a> Ion Window Manager&#39;s author, <span style="font-family: sans-serif; font-size: 13px; line-height: 19px;">Tuomo Valkonen,<span style="font-family: arial; line-height: normal; font-size: small;"> said (before leaving Linux and developing solely for Windows):</span></span></div>
<p />
<blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">
<div><span style="font-family: Times New Roman;">So-called “modern desktop environments” converge on total unusability, and present-day mainstream graphical user interfaces in general are far less usable than they are praised to be.</span><span style="font-family: Times New Roman;"> <i>Usability</i></span><span style="font-family: Times New Roman;"><em> simply does not equal low learning curve</em></span><span style="font-family: Times New Roman;">, and hiding system details from the user, as the Official Truth seems to be these days.</span></div>
<p /></blockquote>
<p>He was right.  It&#39;s too bad he left Linux to develop closed software for Windows.
<p style="font-size: 10px;">  <a href="http://rpdillon.posterous.com/low-learning-curve">via Rick&#8217;s Posterous</a>   </p>
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://etherplex.org/archives/153/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.jamendo.com/get2/stream/track/m3u/?track_id=503683&amp;amp" length="0" type="audio/x-mpegurl;" />
		</item>
		<item>
		<title>Re-thinking the Tabs Model in Modern Browsers</title>
		<link>http://etherplex.org/archives/124</link>
		<comments>http://etherplex.org/archives/124#comments</comments>
		<pubDate>Mon, 20 Jul 2009 07:10:15 +0000</pubDate>
		<dc:creator>Rick</dc:creator>
				<category><![CDATA[Emacs]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://etherplex.org/archives/124</guid>
		<description><![CDATA[TL;DR version: Modern browsers need to learn a lesson from Emacs and keyboard launchers and provide an interface for tab-switching that is keyboard search-as-you-type based.  Firefox is the best browser to implement this on, since it is very extensible. The Extensibility of Firefox Mozilla recently hosted a Summer Design Challenge for 2009 that focused on [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.wiktionary.org/wiki/TLDR">TL;DR</a> version: Modern browsers need to learn a lesson from Emacs and keyboard launchers and provide an interface for tab-switching that is keyboard search-as-you-type based.  Firefox is the best browser to implement this on, since it is very extensible.</p>
<h4>The Extensibility of Firefox</h4>
<p>Mozilla recently hosted a <a href="http://design-challenge.mozilla.com/summer09/">Summer Design Challenge</a> for 2009 that focused on &#8220;Reinventing Tabs in the Browser&#8221;.  Firefox is a fabulous platform to host such a challenge on, as it is the most extensible of all the browsers currently available.  Let me digress into why I say this quickly before I get into my main point (which is about tabs!)</p>
<p>Mozilla itself has gone to great length to expose the browser internals by making the browser open source, which allowed for <em>modification.</em> Next, they provided a framework for developers to write add-ons for Firefox, which provided a robust architecture for <em>extension. </em>The primary distinction between modification and extension is that two modifications to a piece of software may well be mutually exclusive, while two extensions are designed to work side-by-side.  These two aspects of Firefox&#8217;s feature set have been well known since its release, and the add-on (extension) community has been <a href="http://addons.mozilla.com">very active</a> since Firefox&#8217;s release.</p>
<p>But, in recent months, Mozilla has released two extensions that make the process of extension itself even easier.  One is called <a href="http://labs.mozilla.com/projects/ubiquity/">Ubiquity</a>, which provides a command-based interface to the browser and web, and allows for it to be extended by writing Javascript in its configuration interface (in a browser window with the address &#8220;about:ubiquity&#8221;).  This type of extension caught on quickly with fans of command-based systems like <a href="http://www.launchy.net/">Launchy</a> and <a href="http://docs.blacktree.com/quicksilver/what_is_quicksilver">QuickSilver</a>, (and later, Google&#8217;s <a href="http://code.google.com/p/qsb-mac/">Quick Search Box</a>, authored by the developer responsible for Quicksilver, also only available for Mac) but was otherwise relegated to a niche of the Firefox user base.  One of its primary features was the novel mechanism by which Ubiquity could be modified: simply visiting its configuration interface (inside the browser itself), and typing into a text box.  That was it.  No saving, reloading or compiling.  As soon as the code was typed, it was &#8220;live&#8221;, and immediately available within the Ubiquity launcher.  The distinction between &#8220;development&#8221; and &#8220;use&#8221; was almost non-existent.</p>
<p>This feature was so compelling that it deserved its own extension, independent of the concept of a command-based launcher embedded inside Firefox.  Whereas Ubiquity provided an API centered around the user interface of Ubiquity, it offered little to modify aspects of Firefox outside of the Ubiquity interface.  To fill this more general need, <a href="https://jetpack.mozillalabs.com/">JetPack</a> was born, also from <a href="http://labs.mozilla.com/">Mozilla Labs</a>.  JetPack had all the quick-development goodness of Ubiquity, but without the extra baggage of a command-based interface.  JetPack was designed to allow extensions for Firefox to be written quickly and simply, and distributed on the web with equal ease.  Though still young (JetPack has only been released for a couple of months), it provides a polished interface for development.  Its internal browser-based editor for coding is based on Mozilla&#8217;s own <a href="https://bespin.mozilla.com/">Bespin</a>, and provides all the immediacy of Ubiquity development with extra goodies like line numbering and syntax highlighting thrown in.</p>
<p>So, hopefully at this point you understand why I assert that Firefox is the world&#8217;s most customizable browser.  My concluding thought on this topic is that this is all part of Mozilla&#8217;s effort to work towards a browser that is designed to be restarted only rarely, is extensible while it runs using a built-in interface, and allows users to change their working environment as easily as developers, because no special tools are required.  This vision is not entirely new; if you are familiar with Lisp-based environments, the <a href="http://en.wikipedia.org/wiki/REPL">REPL</a>, or <a href="http://en.wikipedia.org/wiki/Gnu_emacs">GNU Emacs</a>, all this will sound very familiar.  So, it would seem Mozilla is learning well from successful projects in the past.</p>
<h4>Why Tabs?  Why Not &#8220;Buffers&#8221;?</h4>
<p>Which brings me to my main point (sorry it took so long!)  As Mozilla hosted the design challenge to reinvent tabs in the browser, many teams with a wide variety of approaches sought to provide <a href="http://arstechnica.com/open-source/news/2009/07/mozilla-design-challenge-showcases-new-browser-tab-concepts.ars">meaningful improvements</a> to the existing interface.  Every team did research with users by watching users use Firefox, and/or interviewing users about their browsing techniques.  Every team noticed one glaring deficiency in the existing tab interface: it doesn&#8217;t scale.  Any user of Firefox that has tried to manage 50 tabs has had trouble.  Even the interface has trouble: it tries to show many of them, and finally gives up, reverting to a scrolling tab bar.  So, when asked to improve the existing interface, every team tried to improve the tab interface&#8217;s scalability.</p>
<p>What I found so surprising as I reviewed the entries was that, in a community that has learned so much from Lisp and Emacs, most entries completely ignored the notion that a keyboard-based navigation system scales much better than a mouse-based system.  The trade-off, of course, is learning curve and prior knowledge.  We can attribute the meteoric rise in keyboard launchers across all operating systems to &#8220;<a href="http://www.pickbrains.com/articles/solutions-to-window-start-menu-clutter">Start Menu Clutter</a>&#8221; &#8211; the simple problem that, when you install a few hundred programs, each wanting its own start menu item, quick launcher, and desktop shortcut, you rapidly drown in a mosaic of brightly colored icons, all alike.  But, if you know what you want (&#8220;Firefox&#8221;, &#8220;Word&#8221;, &#8220;Emacs&#8221;, or &#8220;iTunes&#8221;), you can use a keyboard launcher, type a few letters, and avoid the clutter entirely.  Such systems prohibit &#8220;browsing&#8221; of available programs, but for most users most of the time, the desired program is known in advance, rather than discovered by searching the start menu.</p>
<p>One entry provided effective keyboard navigation (it was called &#8220;<a href="http://www.youtube.com/watch?v=XxTZedCjnoE&amp;feature=player_embedded">Collapsible Tab Groups</a>&#8220;) and it provided good scalability.  In particular, it provided two pieces of functionality that should be present in more software today, one of which comes straight from Emacs.</p>
<p>First, (this is the non-Emacs feature), it puts the UI elements on the side of the screen, rather that the top or bottom.  Why is this so good?  Most screens are widescreen.  Heck, even the 1600&#215;1200 screens are wider than they are tall, but even those are going out of style to favor wider aspects (I&#8217;m typing this on a 1680&#215;1050 display).  So, given the fact that displays are wide, but most material we read is tall (think word documents, most PDFs, and almost every web site), do developers insist on sticking every interface bar on the top or bottom of the screen, further constraining the already-limited vertical dimension?  Well, collapsible tabs groups gets it right, and puts the tabs on the side.</p>
<p>Second (this is the Emacs feature), it provides &#8220;search as you type&#8221; for navigation.  What does this mean?  It&#8217;s the kind of behavior you get in desktop keyboard launchers.  If you type &#8220;irefox&#8221; or even &#8220;ire&#8221; into Launchy or QuickSilver, you will get &#8220;Firefox&#8221; as the launch option because that substring matches the &#8220;ire&#8221; in &#8220;firefox&#8221;.  This is the feature Emacs uses to manage buffers with <a href="http://www.emacswiki.org/emacs/InteractivelyDoThings">ido-mode</a>.  You open the interface to change buffers (files, roughly) in Emacs and it presents you with a small interface that lists just a couple of the (possibly tens or hundreds of) buffers you can switch to.  As you start typing, each character is added to the search criteria as you type, and the list is refined to reflect the relevant buffers.</p>
<p>This approach works perfectly in a browser.  The problem with Mozilla&#8217;s challenge is that they asked people to reinvent tabs; the realization is that we don&#8217;t need tabs.  &#8220;Tabs&#8221; implies a user interface, which should be customizable.  What we really want is a model for navigation, and a set of pluggable user interface elements that attach to that model.  One user interface might be tabs (for users that keep 4 or 5 websites open at a time), but another could be a search-as-you-type mode that doesn&#8217;t use any screen real-estate when it is not in use.  There has been a widespread conflation of view (the tab interface) and model (the idea that we have multiple web sites open) in every browser.</p>
<p>The obvious answer is that I should get in gear and write a keyboard-based tab switching interface using JetPack (Ubiquity has one, but it is painfully slow to use for a variety of reasons).  I don&#8217;t know&#8230;maybe I just convinced myself that I should.</p>
]]></content:encoded>
			<wfw:commentRss>http://etherplex.org/archives/124/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Elisp Bytecode Compilation for Speed</title>
		<link>http://etherplex.org/archives/68</link>
		<comments>http://etherplex.org/archives/68#comments</comments>
		<pubDate>Fri, 24 Oct 2008 06:38:27 +0000</pubDate>
		<dc:creator>Rick</dc:creator>
				<category><![CDATA[Emacs]]></category>
		<category><![CDATA[MicroBlog]]></category>

		<guid isPermaLink="false">http://etherplex.org/?p=68</guid>
		<description><![CDATA[My Emacs startup time was stretching beyond 10 seconds, which seemed a bit offputting even for a text editor cum operating system. I do have a fair amount of elisp loading at startup, however, and though I have played with byte-code-cache, I determined there must be an easier way to compile all my elisp files [...]]]></description>
			<content:encoded><![CDATA[<p>My Emacs startup time was stretching beyond 10 seconds, which seemed a bit offputting even for a text editor cum operating system.  I do have a fair amount of elisp loading at startup, however, and though I have played with <a href="http://www.emacswiki.org/emacs/byte-code-cache.el">byte-code-cache</a>, I determined there must be an easier way to compile all my elisp files in one go, rather than calling byte-compile-file for each file in my elisp directory.  It turns out there is:</p>
<pre>C-0 M-x byte-recompile-directory</pre>
<p>will recursively traverse a directory stucture and compile all .el files encountered.  My startup time is back to 4 seconds.</p>
]]></content:encoded>
			<wfw:commentRss>http://etherplex.org/archives/68/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Steve Yegge Has a Point</title>
		<link>http://etherplex.org/archives/24</link>
		<comments>http://etherplex.org/archives/24#comments</comments>
		<pubDate>Sun, 04 May 2008 23:34:45 +0000</pubDate>
		<dc:creator>Rick</dc:creator>
				<category><![CDATA[Emacs]]></category>

		<guid isPermaLink="false">http://etherplex.org/blog/?p=24</guid>
		<description><![CDATA[In his latest post, Steve Yegge pointed out that Emacs&#8217; biggest competitor wasn&#8217;t really IDEs, because Emacs isn&#8217;t really great because it edits text. Emacs&#8217; biggest competitor is really Firefox, because what makes Emacs great is that it is so extensible, and so it is with Firefox as well (although I prefer ELisp to XML [...]]]></description>
			<content:encoded><![CDATA[<p>In his <a href="http://steve-yegge.blogspot.com/2008/04/xemacs-is-dead-long-live-xemacs.html">latest post</a>, Steve Yegge pointed out that Emacs&#8217; biggest competitor wasn&#8217;t really IDEs, because Emacs isn&#8217;t really great because it edits text.  Emacs&#8217; biggest competitor is really Firefox, because what makes Emacs great is that it is so extensible, and so it is with Firefox as well (although I prefer ELisp to XML and Javascript anyday).</p>
<p>This didn&#8217;t really hit me clearly until I noticed that for many web-related activities like checking mail, updating twitter and posting to my blog, Emacs has solutions (<a href="http://www.wonderworks.com/vm/">VM</a> for mail, <a href="http://www.emacswiki.org/cgi-bin/emacs/twit.el">twit.el</a> for Twitter and <a href="http://www.emacswiki.org/cgi-bin/wiki/WebloggerMode">weblogger.el</a> for blogging), but so does Firefox (Gmail for mail, <a href="http://www.twitbin.com">TwitBin</a> for Twitter, and <a href="http://www.scribefire.com">ScribeFire</a> for blogging).</p>
<p>So, everytime I want to blog or update Twitter, or even check mail, I have to consider what I want to use, which is really dependent on what program I happen to be in at the moment.  So, in a way, the race is on: will Firefox get a better extension language and text editor, or will Emacs embed a good browsing capability.  Personally, I&#8217;d like Emacs to embed Gecko with the upcoming libxul, but we&#8217;ll see how hard that turns out to be.</p>
]]></content:encoded>
			<wfw:commentRss>http://etherplex.org/archives/24/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Emacs Uptime</title>
		<link>http://etherplex.org/archives/22</link>
		<comments>http://etherplex.org/archives/22#comments</comments>
		<pubDate>Sat, 26 Apr 2008 21:22:22 +0000</pubDate>
		<dc:creator>Rick</dc:creator>
				<category><![CDATA[Emacs]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://etherplex.org/blog/?p=22</guid>
		<description><![CDATA[Since I tend to work in Emacs no matter what computer I&#8217;m using, I got curious after reading Steve Yegge&#8217;s latest post about XEmacs instability what exactly my uptimes are on all my Emacs sessions (I use GNU Emacs, but I was still curious). This is some elisp I threw together to answer that question. [...]]]></description>
			<content:encoded><![CDATA[<p>Since I tend to work in Emacs no matter what computer I&#8217;m using, I got curious after reading Steve Yegge&#8217;s <a target="_blank" href="http://steve-yegge.blogspot.com/2008/04/xemacs-is-dead-long-live-xemacs.html">latest post</a> about XEmacs instability what exactly my uptimes are on all my Emacs sessions (I use GNU Emacs, but I was still curious).  This is some elisp I threw together to answer that question.</p>
<pre>
(require 'cl)

(defun duration (time)
  "Takes in a time-value and returns the number of seconds since
   the epoch that value represents."
  (+ (* 65536 (car time)) (cadr time)))

(defun uptime ()
  "Prints the current uptime of Emacs as recorded on startup in
   the value 'start-time'"
  (interactive)
  (let* ((total (duration (time-subtract (current-time) start-time)))
         (days  (floor (/ total 86400)))
         (hours (progn (decf total (* days  86400)) (floor (/ total 3600))))
         (mins  (progn (decf total (* hours 3600))  (floor (/ total 60))))
         (secs  (progn (decf total (* mins  60))    (floor total))))
    (message "%d days, %d hours, %d minutes, %d seconds" days hours mins secs)))

; Put this in your .emacs
(setq start-time (current-time))
</pre>
]]></content:encoded>
			<wfw:commentRss>http://etherplex.org/archives/22/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Syntax Tables in Emacs</title>
		<link>http://etherplex.org/archives/15</link>
		<comments>http://etherplex.org/archives/15#comments</comments>
		<pubDate>Tue, 19 Feb 2008 07:41:44 +0000</pubDate>
		<dc:creator>Rick</dc:creator>
				<category><![CDATA[Emacs]]></category>

		<guid isPermaLink="false">http://etherplex.org/blog/?p=15</guid>
		<description><![CDATA[I wanted to write a simple function in elisp that would find the comment characters used in the current major mode. It is part of an effort to create a simple literate programming tool for Emacs (aka Slipcore &#8211; initial version to be posted soon).  The obvious way to do this is to leverage the [...]]]></description>
			<content:encoded><![CDATA[<p>I wanted to write a simple function in elisp that would find the comment characters used in the current major mode.  It is part of an effort to create a simple literate programming tool for Emacs (aka Slipcore &#8211; initial version to be posted soon).  The obvious way to do this is to leverage the current major mode&#8217;s syntax table and troll through it for comment-significant characters.</p>
<p>Emacs keeps track not only of the character class, but also several character flags (this stuff is described in the elisp manual&#8217;s section on syntax descriptors).  There are no lisp functions to directly access this information, but in section 35.8 on syntax table internals, it mentions that the higher order bits (16+) encode these 6 flags.  It turns out that the syntax table is in fact a vector, so using (elt (syntax-table) 53) where 53 is the ASCII code for the character number I care about, I can access the integer representation of the character class and associated flags.</p>
<p>As it turns out, using this method to determine  comment characters doesn&#8217;t really work all that well. There are a handful of languages that will simply break because they don&#8217;t use the model of commenting I&#8217;m assuming when I look at the syntax flags.  After I <a href="http://groups.google.com/group/comp.emacs/msg/dbb843f835e3d187" title="usenet post" target="_blank">posted</a> about this in comp.emacs, I received a nice reply explaining why, despite my notion that this would be a nice general approach to accessing comment syntax, it was in fact kind of misguided.</p>
<p>I am now using a simple alist matching major mode  string to a single-line comment character.  I don&#8217;t know if it will stay that way, but it works for basic testing.</p>
]]></content:encoded>
			<wfw:commentRss>http://etherplex.org/archives/15/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

