Flickr tag 'emacs': フルスクリーンじゃねぇ。

noblejasper posted a photo:

フルスクリーンじゃねぇ。

-1:-- フルスクリーンじゃねぇ。 (Post nobody@flickr.com (noblejasper))--L0--C0--May 17, 2008 08:00 AM

Flickr tag 'emacs': ちゃんとフルスクリーン

noblejasper posted a photo:

ちゃんとフルスクリーン

-1:-- ちゃんとフルスクリーン (Post nobody@flickr.com (noblejasper))--L0--C0--May 17, 2008 08:00 AM

Johan Lindström: 10% at The Beeb

Interesting to read about Jonas's Google Day.

At the BBC we have what's called 10% time, which in our team translates to a Gold Card Day every sprint (i.e. one day in ten, which is... um... 10%).

"Gold Card", because we do Scrum and we put a card on the board for each developer. With the card we can do whatever we want for a day, but it's supposed to be somewhat related to the product, the project, or the team.

It's really good if it's also Innovative(tm).

Innovation is what the BBC is after. Apparently this is even in the BBC charter, and it's something that all of BBC is supposed to be doing. Currently I know of our team and another department doing it, but it's something they are semi-actively trying to get going all over the place at the moment.

When we started doing this Gold Card thing, it turned out that almost no-one actually took his Gold Card during scrum in the morning. So after a couple of weeks our Scrum Master instated the one "mandatory" day of do-whatever-you-want, which worked out very well. It's at the beginning of the sprint, so we don't risk putting it off at the end of the sprint because things may not be done (if that happens, we need to plan and estimate the sprints better).

So what kind of things are we talking about?
  • I spent last Gold Card creating a visualization of our code base as a clickable Treemap (I may turn that into a CPAN module in my own time. And replace that somewhat ugly JavaScript treemap with a prettier one). The Perl code stats collected so far are very naive, but here are some sample treemaps of our CPAN deps directory:
  • Way way back I wrote a tool to document and visualize database schemas. As a Gold Card task a month ago I adjusted the tool to MySQL and configured it for our code base so we get an automated SQL Map generated whenever the schema changes.

  • And the sprint before that, I spent Gold Card day investigating how Devel::Cover worked (yes, that took a day, more than that actually), making it possible to write Devel::CoverX::Covered and integrate it into Emacs with PerlySense (Ovid wrote Vim bindings).

While I tend to focus on tools and the dev environment and stuff like that, my team mates have investigated interesting and potentially useful technologies and done cool things to and with the product.

Edit: Added links to treemaps
-1:-- 10% at The Beeb (Post)--L0--C0--May 16, 2008 04:56 PM

Yoni Rabkin Katzenell: Less annoying --getfile display for gnokii

I wrote this to make gnokii update the progress bar in-place with the --getfile option, and is not in gnokii CVS (yet).


Index: nk6510.c
===================================================================
RCS file: /sources/gnokii/gnokii/common/phones/nk6510.c,v
retrieving revision 1.258
diff -u -r1.258 nk6510.c
--- nk6510.c	3 Feb 2008 15:24:37 -0000	1.258
+++ nk6510.c	21 Mar 2008 12:33:46 -0000
@@ -1706,7 +1706,7 @@
 
 	/* Get the data */
 	while (data->file->togo > 0) {
-		int progress;
+	        int progress, prev_progress = 0;
 
 		memcpy(req3+4, data->file->id, NK6510_FILE_ID_LENGTH);
 		i = data->file->file_length - data->file->togo;
@@ -1726,8 +1726,12 @@
 		if (err != GN_ERR_NONE)
 			return err;
 		progress = 100 * (data->file->file_length - data->file->togo) / data->file->file_length;
-		fprintf(stderr, _("Progress: %d%% completed\n"), progress);
+		if (progress != prev_progress) {
+			fprintf(stderr, _("\rProgress: %d%% completed"), progress);
+		}
+		prev_progress = progress;
 	}
+	fprintf(stderr, _("\n"));
 	
 	/* Finish the transfer */
 	memcpy(req4+4, data->file->id, NK6510_FILE_ID_LENGTH);

-1:-- Less annoying --getfile display for gnokii (Post)--L0--C0--May 16, 2008 02:48 PM

Yoni Rabkin Katzenell: Gnokii as a poor man's GPS?

When I run gnokii --monitor I get back Network: ..., LAC: 8bd8, CellID: 166e. This should be enough information to place me on the globe with the precision of between 3-30km. What's stopping me from compiling a table of lat-long values vs. LAC+CI in Israel (like the gsmloc.org guy, who's site I find creepy)? I'm guessing that the cell tower companies keep those tables secret and license the data at exorbitant prices. To protect that interest, they might play games with the CI values. I have no idea if this is done in Israel, but I'll check periodically.
-1:-- Gnokii as a poor man's GPS? (Post)--L0--C0--May 16, 2008 02:32 PM

emacspeak: Emacspeak On Thinkpad X-61 Running Gutsy (Ubuntu 7.0)

I recently upgraded to a Thinkpad X-61 running Gutsy --- here are some brief notes on the move. In summary, all is well, and I like Gutsy running on the X-61.

Here are things to be aware of both from a hardware and software perspective. All of this is with X and GNOME turned off; note that some of the tips e.g. turning off the display as described here, will cause havoc with X.

  • The X-61 display can be turned off using vbetool
    vbetool dpms off

    for turning off the display, and
    vbetool dpms on

    for turning it back on again.
  • If you suspend to memory etc., make sure to add the appropriate vbetool command to the relevant script in /etc/acpi/resume.d.
  • Gutsy is running ALSA 1.0.15, and to date, I've not had any trouble with the ViaVoice Outloud TTS engine in this environment. Make sure to play with amixer --specifically run command
    amixer controls

    to understand all the various switches and controls exposed by the audio hardware on the X61. Here are some of the things that were noticeably different that are worth mentioning:
    1. The PC speaker can now be manipulated via ALSA.
    2. The X-61 has two input sources. If you plug in an external mike, make sure to set both input sources to the microphone --- as opposed to leaving one or both of them to be either internal mic or mix. Specifically, plugging in an external mike does not disable the internal microphone.
    3. For some bizarre reason, it's possible to turn off the headphone output--- but you cannot control its gain.
  • Kernels later than 2.6.21 do much better with respect to power management, and this really shows on the X-61. With the LCD off, my X61 claims it'll run for 7.5 hours; if you turn off the wireless and USB1.1 as well, it claims it can go for over 8.5 hours.
  • Emacs versions: I'm running out of CVS AKA Emacs 23--- but the emacs-snapshot or emacs22 Ubuntu packages appear to mostly work as well. One irritation with some of the prepackaged bundles of Emacs under Ubuntu is that they dont install the Emacs Lisp sources, and this will bite if you try compiling packages like Emacs/W3.

All in all, the upgrade to Gutsy was mostly painless --- other than having to figure out the usual nits about the new hardware. The /proc/acpi/ibm support is further along but not yet complete--- as an example /proc/acpi/ibm/video does not yet control the state of the LCD --- and you cannot query the state of the display reliably through that interface.

-1:-- Emacspeak On Thinkpad X-61 Running Gutsy (Ubuntu 7.0) (Post T. V. Raman (noreply@blogger.com))--L0--C0--May 16, 2008 02:40 PM

Luis Fernandes: Automatic Tags

This next bit of code from my .emacs is for automatically updating the TAGS file when it cannot locate a particular tag (presumably you've written a new function since last running etags and now you want to jump to it):

 ;;; Järneström Jonas  ki.ericsson.se> A smarter ;;; find-tag that automagically reruns etags when it cant find a ;;; requested item and then makes a new try to locate it. ;;; Fri Mar 15 09:52:14 2002 (defadvice find-tag (around refresh-etags activate) "Rerun etags and reload tags if tag not found and redo find-tag. If buffer is modified, ask about save before running etags." (let ((extension (file-name-extension (buffer-file-name)))) (condition-case err ad-do-it (error (and (buffer-modified-p) (not (ding)) (y-or-n-p "Buffer is modified, save it? ") (save-buffer)) (er-refresh-etags extension) ad-do-it)))) (defun er-refresh-etags (&optional extension) "Run etags on all peer files in current dir and reload them silently." (interactive) (shell-command (format "etags *.%s" (or extension "el"))) (let ((tags-revert-without-query t)) ; don't query, revert silently (visit-tags-table default-directory nil))) 
[Tue May 13 09:13:30 2008]

-- Delivered by Feed43 service

-1:-- Automatic Tags (Post)--L0--C0--May 16, 2008 04:00 AM

Luis Fernandes: XP on XO

In other explosive news...

If XP runs, then OS X can't be far behind.

luis fernandes / elf@ee.ryerson.ca / G4 Powerbook Journal
[Thu May 15 23:02:29 2008]

-- Delivered by Feed43 service

-1:-- XP on XO (Post)--L0--C0--May 16, 2008 04:00 AM

emacspeak: Emacspeak-28.0 (PuppyDog) Unleashed!

Emacspeak-28.0 (PuppyDog) Unleashed!

For Immediate Release

San Jose, CA, (May. 16, 2007)
Emacspeak: --- Bringing Cutting-Edge Access For Keen Users
--Zero cost of upgrade/downgrades makes priceless software affordable!

Emacspeak Inc (NASDOG: ESPK) announces the immediate world-wide availability of Emacspeak-27 --a powerful audio desktop for leveraging today's evolving data and service-oriented semantic Web.

Emacspeak can be downloaded from Google Code Hosting --see GoogleCode You can visit Emacspeak on the WWW at http://emacspeak.sf.net. You can subscribe to the emacspeak mailing list emacspeak@cs.vassar.edu by sending mail to the list request address emacspeak-request@cs.vassar.edu. The PuppyDog release is here. The latest development snapshot of Emacspeak is available via Subversion from Google Code Hosting at http://emacspeak.googlecode.com/svn/trunk/

-1:-- Emacspeak-28.0 (PuppyDog) Unleashed! (Post T. V. Raman (noreply@blogger.com))--L0--C0--May 15, 2008 08:04 PM

John Wiegley: Using Git as a versioned data store in Python

Git has sometimes been described as a versioning file-system which happens to support the underlying notions of version control. And while most people do simply use Git as a version control system, it remains true that it can be used for other tasks as well.

For example, if you ever need to store mutating data in a series of snapshots, Git may be just what you need. It’s fast, efficient, and offers a large array of command-line tools for examining and mutating the resulting data store.

To support this kind of usage – for the upcoming purpose of maintaining issue tracking data in a Git repository – I’ve created a Python class that wraps Git as a basic shelve object. Here is how you normally use the standard shelve module:

import shelve

data = shelve.open('data.db')

# data.db may or may not have existed on disk before now. If not,
# We're Manipulating an Empty Dictionary. If so, we can examine or
# modify the previous run's state data. In both cases, the database
# is manipulated like a standard Python dictionary.

data[key] = "Hello, world!"
data.sync() # Write out changes to the dictionary

del data[key]
data.close() # Close and clean up, sync'ing only if necessary

This provides the simplest kind of database, without any query language or notion of whether previous state did or did not exist. Both of those are services you’d have to layer on top of the shelve object if you wanted them.

Now consider gitshelve. Whereas the Python shelve module stores your data by pickling all of the dictionary values, I pass whatever data you place in the dictionary straight on to Git’s standard input. In the default mode, this means you work strictly with string data:

import gitshelve

data = gitshelve.open(repository = '/tmp/data.git')

data[key] = "Hello, world!"
Data.Sync() # Repository is created if it doesn't exist

del data[key]
data.close()

The interface is identical, but with the Git version you can now examine the resulting repository’s yourself, using regular Git commands:

$ GIT_DIR=/tmp/data.git git log

By default, the commits have no associated comment text, but the sync method doesn’t accept parameters. If you wish to add transaction notes, use the commit method instead:

data.commit("This is a comment")

You can store data this way either in a separate repository, or in named branches within any repository. If the repository argument is not given, the named branch within the current Git repository is used. An exception will be raised, however, if you do this and there is no Git repository related to the current directory.

# I'm expecting to use the 'data' branch of the current repository, but
# I ran the script in a directory unknown to Git!
data = gitshelve.open(branch = 'data')

# It appears to work, because no Git commands are run until the last
# possible moment
data['foo/bar/hello.txt'] = "Hello!"

# This raises an exception, because there is no current repository. To fix
# it, either run "git init", or use a specific 'repository' argument above.
data.commit("I just said hello")

The really nice thing about using Git this way is that you get all of its best features for free.

Added non-text values

If you have a need to store non-textual values, you’ll have to let gitshelve know how to deal with them. I don’t do any such handling by default, because of the big chance of doing the wrong thing, and having you not find out about it until it’s much too late. Just pickling data like shelve does isn’t very smart, for example, because it will wreak havoc on Git’s merge algorithms should you ever need to incorporate new data from another source.

So, let’s see how to add a custom data translator. First, you need to subclass a new type of gitbook, which is the wrapper used to interface with the blobs in the Git repository. There are only two methods you need to override:

class my_gitbook(gitshelve.gitbook):
def serialize_data(self, data):
return object_to_string(data)

def deserialize_data(self, data):
return object_from_string(data)

Now you must define object_to_string and object_from_string, which should examine the types of the objects passed and turn them into merge-friendly string as appropriate. Certain forms of XML work well for this job, as do ini-style configuration files in some cases. It’s up to you and what works best for your usage.

Once you have this new class type, you must pass it to the gitshelve.open function:

data = gitshelve.open(repository = '/tmp/foo', book_type = my_gitbook)

Making things even faster

Every time you open a gitshelve, it must walk through the assoicated branch and determine its contents in order to build the key/value relationships in the dictionary. If you find that this ever gets slow, what you can do is just pickle the gitshelve! The only caveat is that you must take care to delete it if the HEAD you created it from is different from the current HEAD. Here’s an example:

import gitshelve
import cPickle
import os

data = None
if os.path.isfile('data.cache'):
fd = open('data.cache', 'rb')
data = cPickle.load(fd)

# I'm using an arbitrary file name here, __HEAD__
if data['__HEAD__'] != data.current_head():
data = None # Out of date, we can't use it

if not data:
data = gitshelve.open(branch = 'data')
data['__HEAD__'] = data.current_head()

# ... for data sets with enormous quantities of tiny files, this
# could really speed things up ...

Where can you get it?

The gitshelve module is being maintained as part of the git-issue project, which is yet another attempt to bring distributed bug tracking to Git. Actually, I tend to support multiple repositories as data backends, but right now Git is my initial focus. You can clone the project and test it out as such:

git clone git://github.com/jwiegley/git-issues.git
cd git-issues
python t_gitshelve.py

If see “OK” at the end of the unit tests, you’re good to go! There isn’t much documentation on gitshelve.py itself right now, beyond this blog entry, but then again the shelve-like interface is simple enough that you really shouldn’t need much more.

Or if you prefer, you can just browse the project at the GitHub project page.

-1:-- Using Git as a versioned data store in Python (Post johnw@newartisans.com)--L0--C0--May 15, 2008 04:00 AM

Bryan Murdock: Upgrade to Hardy, Many Sound Woes

WARNING I needed a place to take notes while debugging sound issues after upgrading my desktop from Gutsy to Hardy, so here they are. This is probably a pretty boring read, so continue at your own risk.

Upgraded to Hardy today. Got some indistinct error message at the end, so I made sure and ran aptitude update && aptitude -y full-upgrade && dpkg --configure -a a few times before and after rebooting. Then, when I fired up Firefox (fired up... Firefox... get it...?) and went to youtube I realized I didn't have flash anymore. I aptitude installed flashplugin-nonfree, restarted Firefox, and videos worked. Yay!

Then I went away for a while. When I came back youtube videos had no sound. This is actually a problem that I was having before the upgrade. Not even a reboot helped. I fired up Amarok to see if mp3s still played. Nope, it froze. I googled a bit and found some pulse audio help which led me to believe that maybe I needed to add myself to the pulse audio groups. I did so, tried Amarok again, and the whole system froze. No magic keys or anything could save me. I hit the reset button on my case, and when it came back up, still no youtube sound. I started Amarok and it took forever to start, and then I made sure it was configured to use pulseaudio for its output plugin (I'm using the xine engine), and it didn't freeze, but it didn't play music either. Frustrating. First I had sound problems with Gutsy, and now seemingly worse problems with Hardy. Ubuntu, you've been so good to me in the past. What gives?

Pressing on, I tried changing the output plugin for Amarok and the whole app froze again. I tried watching video with totem, no sound. It froze after a bit too and I had to kill it. This is getting quite scary.

Reading some more here and here I discover this thing called libflashsupport. Aptitude tells me it's not installed and the description reads:

Due to various bugs in the Flash 9 plugin sound output of Flash 9 through the pulseaudio soundserver doesn't work properly. This library adds a clutch to make Flash 9 sound output in pulseaudio possible.

After installing this I shut off my computer completely (I'm in full belt-and-suspenders paranoia mode now), waited a few seconds and then turned it back on.

Taking a more conservative route this time, I started Totem first. No KDE or flash weirdness there. It worked, sound and video played without any problems. Next I tried Amarok with the xine engine output plugin set to autodetect. It worked, no hang. Next, youtube. No sound. Totem and Amarok still worked even after trying flash. I don't know if this result is any different from before, unfortunately. Maybe everything works better as long as you don't do flash first. I don't know.

I'm not sure what to try next. Apparently there might be a newer version of libflashsupport that I could try. This advice is not well explained, but it might be worth a try as well. Overall, I'm getting the impression that this is more the fault of flash than anyone else. Cursed closed-source crap!

I decided to try compiling libflashsupport from source as suggested on the pulse audio wiki. I aptitude removed libflashsupport first. After compiling and installing and restarting firefox there was still no youtube sound. Amarok and Totem were still good though. I rebooted. Still no youtube sound.

And then I saw it. There is a volume control on the little video controls under the youtube video. And it was turned all the way down. Oh. my. gosh. Sure enough, when I turned it up, sound played. How long has that been the problem!?!?!?

I decided to undo what I'd done a bit. I uninstalled libflashsupport as compiled from source and re-installed the ubuntu package. After restarting Firefox youtube and totem both worked, at the same time even. I think I'll leave things like that for now. Don't you love Linux? I do. I really do.

-1:-- Upgrade to Hardy, Many Sound Woes (Post Bryan (noreply@blogger.com))--L0--C0--May 14, 2008 11:36 PM

Aaron Hawley: GNU/Solaris

Adapting the GNU userland tools (and Debian package management) to the core system of a free software version of Solaris is called Nexenta. I used Solaris in university and learned a lot of unix and X window things while using it. I don't have any particular use for it, as I've only worked in situations where people could only afford GNU/Linux, and never had an legacy Solaris systems. Clearly, keeping GNU software highly portable has reaped many rewards for the day other kernels besides Linux became free software.
-1:-- GNU/Solaris (Post)--L0--C0--May 14, 2008 04:15 PM

Phil Jackson: Add filenames to log-edit

I bind this to C-c C-f in log-edit-mode. It will insert the list of edited files with a colon after the filename. One of those small, simple macros that I use all of the time, and thought I might share.

(defun insert-edited-files ()
  (interactive)
  (let ((pos (point)))
    (insert (mapconcat
             (lambda (x)
               (concat (file-name-nondirectory x) ": "))
             (log-edit-files) "\n"))
    (align-regexp pos (point) ": " 0 2)))
-1:-- Add filenames to log-edit (Post Phil Jackson)--L0--C0--May 14, 2008 04:00 AM

Phil Hagelberg: in which light is shed upon some previously unexplored frontiers

So I've been working on modularizing a big project at work. The REST API for this one project needs to be used in multiple places, so I've taken it out of the Rails app and spun it off into its own server using Rack. Rack is a library that abstracts away the gory details of HTTP and gives you a nice object-oriented wrapper for it, allowing you to plug it into multiple different backends. It's great for accelerating development on your simple lightweight services that wouldn't otherwise justify a Merb or Rails application. Ezra gives a good explanation of why you might be interested in Rack.

Anyhow, I was able to put this together fairly quickly by hooking up libxml, ActiveRecord, and Rack. (If I were doing it again I'd use faster-builder, which I found out about a few hours after I started the project, but whatever.) But this particular project must be able to support ridiculously large XML responses that could be larger than 4GB. On a 32-bit machine this is... well... problematic. The solution, of course, is to stream the response back to the client as it's generated so it doesn't have to all be in memory at once.

Unfortunately the only Ruby support for HTTP streaming I was able to find by searching the web is about streaming static files. I was getting pretty discouraged until Ezra mentioned that Merb bundles a patched version of Rack that allows streaming of programmatic content.

Sure enough, Merb's changes to Rack do the trick:

require 'rubygems'
require 'rack/response'
require 'rack/handler/mongrel'

# Launches an HTTP server on http://localhost:9999/N that streams its own code N times
Rack::Handler::Mongrel.run(Proc.new do |env|
                             [200, {}, Proc.new do |response|
                                response.send_status_no_connection_close('')
                                response.send_header
                                env['PATH_INFO'][/(\d+)/].to_i.times do
                                  response.write File.read(__FILE__) + '\n'; sleep 1
                                end
                                response.write '\r\n\r\n'
                              end]
                           end, :Port => 9999)

I check the streaming with curl; if it's properly streamed the % Received will climb slowly instead of jumping at once to 100:

$ curl http://localhost:9999/7 > /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  5310    0  5310    0     0    755      0 --:--:--  0:00:07 --:--:--   796

It's not clear to me why this functionality isn't in the standard Rack distribution. Merb seems to be Rack's biggest user, so the fact that they have to bundle their own patched version seemes quite odd. Anyway, if you need HTTP streaming outside Merb, you can use my version of Rack. I haven't been able to get the gem served by Github; unreproducible remote problems in the gem build process are very opaque and give no feedback. Will look into this later.

I'm going to try to get the changes into the mainline rack, but if Merb hasn't been able to get it accepted this may not actually happen. The meat of the patch is three lines, but I've got a bunch of other stuff that allows the project to actually build as a gem; the source as I found it was not in a working state. (Who knew there were people out there who haven't yet discovered hoe?)

Much thanks to Ezra for the fix. I was starting to lose hope that I'd even be able to even pull this off without resorting to low-level Mongrel invocations. Even though the fix is available in Merb, it's not really very clear how to use it, so I thought this post would save other people from going through the same crazy hoops I had to.

-1:-- in which light is shed upon some previously unexplored frontiers (Post Phil Hagelberg)--L0--C0--May 13, 2008 11:31 PM

Aaron Hawley: Undelete in ext4?

In a previous post I discussed the undelete feature of version 2 of extended file system for the Linux kernel (ext2) and how it doesn't exist in version 3 (ext3). Someone asked in a comment about ext4. I found this in the frequently asked questions on the Ext4 project Wiki.:

Can I undelete files in Ext4?

No, in the same way that the ext3 journal requirements to be consistent after a crash prevent undelete of ext3 files, it isn't possible to undelete ext4 files.

However, the page with the list of New ext4 features has:

Undelete Feature for Ext4

  • Primary Developer:
  • status: Idea was proposed on the mailing list, still need more thought on the feature.
  • Change on-disk format:
  • Target Date:
  • e2fsprogs changes:
  • outstanding issues: Should the kernel be involved with undelete

I found this thread on the Ext4 mailing list archives Secure Deletion and Trash-Bin Support for Ext4. Apparently, people wanting secure deletion have something in common with people losing their files. I couldn't find anything further as to the patches status in ext4.

-1:-- Undelete in ext4? (Post)--L0--C0--May 13, 2008 10:18 PM

Flickr tag 'emacs': pink_bliss

nogoth posted a photo:

pink_bliss

Using the new pink bliss color theme and set desktop theme colors to pink... hilarity ensues.

-1:-- pink_bliss (Post nobody@flickr.com (nogoth))--L0--C0--May 13, 2008 07:22 PM

John Sullivan: Checking Emacs buffers for broken links

This was a quick effort to write a command for checking the current buffer for broken links. Thoughts, feelings and improvements welcome.

(defun campaigns/check-buffer-urls () "Checks the current buffer for broken links, skipping those
that match entries in the `no-check' list." (interactive) (let ((matches '()) (no-check '("mailto")) (fails 0)) (save-excursion (goto-char (point-min)) (while (re-search-forward thing-at-point-url-regexp nil t) (add-to-list 'matches (match-string-no-properties 0)) t)) (pop-to-buffer "*Link checking results*") (erase-buffer) (insert "Checking your links...\n\n") (mapc (lambda (url) (let ((parsed (url-generic-parse-url url))) (insert (format "* %s ..." url)) (if (member (elt parsed 0) no-check) (insert "SKIPPING\n") (condition-case err (if (url-http-file-exists-p url) (insert "OK\n") (insert "ERROR!\n") (setq fails (1+ fails))) (error (insert "ERROR!\n") (setq fails (1+ fails))))))) matches) (insert (format "\nFinish checking %d links. There were %d problems.\n" (length matches) fails))))
-1:-- Checking Emacs buffers for broken links (Post)--L0--C0--May 13, 2008 06:23 PM

Luis Fernandes: XO

My XO laptop finally arrived. First impressions and pics are on my OLPC journal.

[Mon May 12 22:34:55 2008]

-- Delivered by Feed43 service

-1:-- XO (Post)--L0--C0--May 13, 2008 04:00 PM

Luis Fernandes: Ikea: Then and Now

[Sun May 11 08:31:04 2008]

-- Delivered by Feed43 service

-1:-- Ikea: Then and Now (Post)--L0--C0--May 13, 2008 04:00 AM

Luis Fernandes: Cinema Verité

What better way to celebrate the centenary of Ian Fleming's birth than getting the Guardian's very own 007 to recreate a great James Bond adventure?

"You can go faster," Duncan says. "The car only comes into its own when you actually accelerate."

"So you're saying that to truly enjoy the car I have to break the law?" I say. But I understand Duncan's frustration. I'm an annoyingly cautious driver. The speedometer of this Aston Martin goes up to 220mph, and I haven't once exceeded 70mph.

"OK, I'll overtake that lorry. But just this once." I gingerly touch the accelerator. "Oh my God!" I yell.

I'm suddenly going 100mph and the car is so smooth it feels like 30. I've never seen a lorry vanish so quickly in my rear-view mirror. I feel like Han Solo in hyperdrive, or Jeremy Clarkson. It feels fantastic. No wonder the rich and boorish love themselves.

The name's Ronson, Jon Ronson

Also of interest will be the new editions of the entire Bond oeuvre.

[Mon May 12 22:26:38 2008]

-- Delivered by Feed43 service

-1:-- Cinema Verité (Post)--L0--C0--May 13, 2008 04:00 AM

Alex Ott: Article about Emacs and Version Control Systems (finish)

Just finished translation and uploaded latest three parts of my article about using Emacs for work with Version Control Systems (VCS). This are parts about work with VC, ClearCase & Perforce.
The content of article match start of 2007, so next big thing, that I'll do is updating content to modern state - add information about emacs-git and aHg packages, update information about other packages.
-1:-- Article about Emacs and Version Control Systems (finish) (Post Alex Ott (noreply@blogger.com))--L0--C0--May 12, 2008 05:56 PM

Trey Jackson: Emacs Tip #21: pabbrev (predictive abbreviation expansion)

pabbrev is a yet another package for abbreviation expansion in Emacs. Unlike dabbrev, this one analyzes the contents of the buffers during idle time, and shows potential expansions based on word frequency. This package also shows potential expansions as you are typing. For example if you were typing 'pred', this is what you would see: p[oint] pr[ogn] pre[-command-hook] pred[ictive]
-1:-- Emacs Tip #21: pabbrev (predictive abbreviation expansion) (Post BFW (noreply@blogger.com))--L0--C0--May 12, 2008 10:57 AM

Luis Fernandes: The Jesus Laptop

It is three thousand light years to the Vatican.
—“The Star”, Arthur C. Clarke

I took Thursday and Friday off, expecting the delivery of my long-awaited XO laptop. Fate (thy name is Brightstar) has conspired against me, yet again, as the laptop has been stuck in customs for the last three days (because the distributors (Brightstar), who have confounded me at every step of the way, did not declare a customs value for the shipment; the OLPC Foundation volunteers have been superb in helping me sort out this mess).

As I was reporting the details of my travails on #olpc, I noticed two nicks with "sj". I cracked a joke about the Jesuits being interested in the XO, only to be told that they (Boston College is in the neighbourhood) had in fact demo'd the laptop at the Vatican (at which point I solemly vowed that was the last Jesuit joke I was going to make.)

Then, to answer someone's question about Jesuits, I posted a link to the eponymous Wikipedia article and as I was browsing it, I noticed that a scifi novel, The Sparrow by Mary Doria Russell, featured a Jesuit priest (Brad Pitt has bought rights to the novel and is planning to play the priest in the movie). Strangely, there is no mention of Dan Simmon's novel, Hyperion, which also features a Jesuit.

Finally, the entry for The Sparrow has a link to the entire text of Arthur C. Clarke's short-story, The Star which features a similar plot.

[Fri May 09 17:45:24 2008]

-- Delivered by Feed43 service

-1:-- The Jesus Laptop (Post)--L0--C0--May 11, 2008 04:00 PM

Flickr tag 'emacs': 발표준비중이신 신성국(cinsk)님

StudioEgo posted a photo:

발표준비중이신 신성국(cinsk)님

발표준비중이신 신성국(cinsk)님 posted by StudioEgo

KLDP의 Cinsk님께서 홍익대학교 컴퓨터공학과 후배들에게
2008년 5월 11일 일요일 오후 1시 30분부터 "programming in the Emacs"란 주제로 세미나를 해주셨습니다.

-1:-- 발표준비중이신 신성국(cinsk)님 (Post nobody@flickr.com (StudioEgo))--L0--C0--May 11, 2008 06:56 AM

Flickr tag 'emacs': 신성국(cinsk)님, 학교에오셔서 세미나를 하심.

StudioEgo posted a photo:

신성국(cinsk)님, 학교에오셔서 세미나를 하심.

신성국(cinsk)님, 학교에오셔서 세미나를 하심. posted by StudioEgo

KLDP의 Cinsk님께서 홍익대학교 컴퓨터공학과 후배들에게
2008년 5월 11일 일요일 오후 1시 30분부터 "programming in the Emacs"란 주제로 세미나를 해주셨습니다.

-1:-- 신성국(cinsk)님, 학교에오셔서 세미나를 하심. (Post nobody@flickr.com (StudioEgo))--L0--C0--May 11, 2008 06:52 AM

Rodrigo Lazo: Gnus tip: how to convert a reply to a wide reply

This tip comes form the gnus mailing list from almost two years ago. I re-discover it today because, after writing a long email for a mailing list, I needed to change my original reply to a wide reply.

This is as easy as this:

Keybinding: `C-c C-f w'

Description: Insert `To' and `Cc' headers as if you were doing a wide reply even if the message was not made for a wide reply first.

The link for the original message is here

-1:-- Gnus tip: how to convert a reply to a wide reply (Post nospam@example.com (Rodrigo Lazo))--L0--C0--May 10, 2008 05:40 AM

Luis Fernandes: Coding C With Emacs

A couple of handy tips for those coding in C with Emacs. The first bit of code automatically saves all open buffers (ideally, it should only save source-code buffers) and starts the compilation process in one shot; the function, save-and-compile-program can be bound to a single key to speed-up the process:

 ;;; save all files then run M-x compile (defun save-and-compile-program() "Save any unsaved buffers and compile" (interactive) (save-some-buffers t) (compile "make -k")) ;;; bind it to a key-sequence (or an F-key) (global-set-key "\C-cc" 'save-and-compile-program) 

The next tip is helpful for those time when you have your source buffers arranged in a certain way and the compilation-buffer decides to whimsically re-arrange them; the library compile-frame comes in handy because it puts the *Compilation* buffer into a separate frame ("separate window" in modern terminology) leaving your buffer arrangement alone.

Both these tips were used for many years to make Emacs a more agreeable development environment.

[Thu May 08 09:49:38 2008]

-- Delivered by Feed43 service

-1:-- Coding C With Emacs (Post)--L0--C0--May 10, 2008 04:00 AM

Aaron Hawley: Everything's a newsgroup

A posting from earlier this year by Karl Fogel called Thread Theory explains how electronic conversation -- email, newsgroups, forums -- are all the same thing, threads.

This reminds me of something an old roommate had discovered 2 or 3 years ago when he was loving electronic fora -- Gmane, mailing lists, Usenet, blogs. He was also developing Web course software as a project for a software assignment for school. I think his quote was, "'You want a mailing list? That's a newsgroup. You want a Web forum? That's a newsgroup. You want a blog. Yeah, that's just a newsgroup.'" Needless to say, his group's Web course software design dropped the usual boring SQL database in favor of interacting with a Usenet server on the backend.
-1:-- Everything's a newsgroup (Post)--L0--C0--May 09, 2008 08:25 PM

John Sullivan: Microsoft tax evasion: Get gNewSense preinstalled

Los Alamos Computers is now selling laptops, desktops and servers preinstalled with gNewSense, the fully free GNU/Linux distribution. This is even better than what larger companies like Dell and Lenovo have been offering -- and they are also donating a portion of their sales to the Free Software Foundation.

I've been working with them to get this set up so I'm happy to see it go live. Especially since I'll probably be needing to make some purchases in the next year or so :).


read more | digg story
-1:-- Microsoft tax evasion: Get gNewSense preinstalled (Post)--L0--C0--May 09, 2008 05:51 PM

Alex Schroeder: 2008-05-09 Ontology of Twitter

I understand people who know each other following each other. That’s like RSS, right?

I don’t quite get how Twitter spam is supposed to work. Assuming some idiot start following me – how does that help them? Perhaps I click on their feed which is essentially full of ads and follow a link elsewhere? Perhaps.

What I also don’t get is apparent interests starting to follow me. What is doing following me? Is it a person? A name stealer? A topic? Something communal? Do we have shared ownership?

Weirdness.

Tags:

-1:-- 2008-05-09 Ontology of Twitter (Post)--L0--C0--May 09, 2008 05:32 PM