Previous 5

Feb. 18th, 2010

consultant

Oops, I did it again!

Working on free software projects isn't easy. Just because you're giving away your work for anyone to use doesn't mean that anyone is going to take it, no questions asked.

Take my MediaWiki work as an example. I am being paid for the work, but it is freely licensed and I'm learning about the standards of quality that the community has formed around the code.

Frankly, before becoming involved in such a serious PHP-based project, I didn't have a very high opinion of PHP. Even Rasmus (creator of PHP) doesn't seem to live in a pure php world and, as a result, thinks of systems where PHP is merely the web frontend instead of almost the entire system.

So working with others who have been neck-deep in PHP for years, building one of the top-10 sites on the net entirely in PHP, and gaining intimate familiarity with the quirks of PHP, has been a wonderful experience.

But MediaWiki isn't the only free software project I'm involved in. I also contribute to Emacs occasionally. (For those not so familar with Emacs vs Vi, let's just say this is like the social situation between Republicans and the Democrats or the Roman Catholics and Southern Baptists: You live next door to them, but you know they're going to hell.)

And it is my most recent commits to Emacs that have gained me noteriety. Yesterday, I was catching up on some blog reading (Planet Emacs, thankyouverymuch) and came across a nifty use of loccur.el. But it used defadvice instead of a hook (and hooks are better — no this is different than emacs vs vi, I swear).

I looked at the code and thought, “Hey, I can make a tiny little contribution to Emacs here!” So I made a couple of small changes.

Little did I know what a problem that was going to be.

Óscar Fuentes used my commit message as an example of how not to write a commit message. This was not the first time I've been so honored.

Three weeks ago, I made a mistake committing to the bzr repository for emacs and was again used as an example for the Emacs-devel community of how not to make a commit.

There are two reasons I'm such a stellar example for the other Emacs developers.

First, I've been using bzr for a couple of years while working on the iHRIS Suite. This experience (2 years more than most Emacs developers) naturally made me think I had things under control. So I didn't bother reading over Bzr for Emacs Devs.

Second, Emacs recently switched its source-control system (after much debate and some effort on speed the bzr side) from the ancient, worn, CVS to bzr. So people are still adapting their work flow. I just happened to make some commits that were particularly egregious and ended up being great examples of what people should avoid.

So, yes, Free Software is a great thing, but that doesn't mean the developers don't take it seriously. And being reprimanded in public isn't the most pleasent experience. But at least I can blog about it!

Aug. 12th, 2009

geek-boy

Quick Emacs Tip: Scale fonts in a buffer

Emacs23 includes default keybindings for scaling fonts up or down:
C-x C-+ — scale the current buffer's face/font up

C-x C-+ — scale the current buffer's face/font down

This is good as far as it goes, but I'd really like something a little easier. So I've added the following to my .emacs file:
(global-set-key [(control mouse-4)] (lambda () (interactive)
                                      (text-scale-increase 1)))
(global-set-key [(control mouse-5)] (lambda () (interactive)
                                      (text-scale-decrease 1)))

Now, if I hold down the control key and scroll the mouse wheel, the font will get larger or smaller. Some other applications (e.g. Firefox) use "Control +" and "Control -" to do something similar along with "Control 0" to return to the default size. You could set these keybindings in Emacs without losing too much (unless you're used to C-- and C-0 as prefixes, in which case, you still have C-M-- and C-M-0):
(global-set-key [(control ?+)] (lambda () (interactive)
                                      (text-scale-increase 1)))
(global-set-key [(control ?-)] (lambda () (interactive)
                                      (text-scale-decrease 1)))
(global-set-key [(control ?0)] (lambda () (interactive)
                                      (text-scale-increase 0)))


None of this will permanently affect the size of the font, so for the next buffer you open or the next time you start Emacs, you'll have the same size font you started with. If you want to change the default font size, use M-x customize-face RET default RET instead.
Tags:

Jul. 20th, 2009

consultant

Emacs Hack: mediawiki.el

I've gotten some feedback on the mediawiki mode I've been working on.  So I'm releasing a new version.  Some highlights:
  • Now works with HTTP Auth (I'll write a seperate post on how Emacs handles credentials for HTTP Authentication).
  • Introduced tab-completion of sites.  If you have multiple MW sites set up that you work on, this makes switching between sites super-easy.
  • Started working on making it more XEmacs compatible.  As far as I can tell, XEmacs lacks the Unicode support that GNU Emacs has.  The released version of XEmacs also lacks the POSIX character classes for regular expressions and ships with a very out-dated version of url.el.  All these combine to make it very difficult.  But do-able.  I'm surprised there are still XEmacs users, but if it doesn't cause me too much pain, I'll help them out.
  • Misc other clean up (including making the url.el wrappers much better).
Tags:

Jan. 5th, 2009

accomplished

notify.el -- pop-up notifications from emacs using dbus

Since emacs on Linux can use DBus calls now, I wrote a short notify.el as a demonstration to myself and to save myself from forking notify-send (because, uh, forking is bad) whenever someone mentions my nick in IRC.

There is a delay built into it so that your "friends" on IRC can't DDOS you with notifications.

Oh, the really nifty thing about this is the function keywords-to-properties. elisp keywords (:example) allow you to fake named parameters in function calls. This is done a couple of different places in Emacs, the most visible being defcustom. But there isn't any universal way that I could find to parse the keyword-value pairs into something usable. So I cribbed from defcustom and wrote something that I hope will be useful to others.
Tags:
geek-boy

mediawiki.el - Emacs mode for editting MediaWiki pages

I seem to be spending an inordinate amount of time editting MediaWiki wikis, so I've had some time to put together a better MediaWiki mode for emacs. In the process, I wrote some code that many people (myself included) seem to think Emacs needs.

HTTP POSTing in native elisp is too hard right now, so a http-post-simple.el was written. The original mediawiki.el required this library, but it wasn't included. I refactored the dependency away and now I have some form parsing functions in elisp that I can contribute back to the Emacs core.

Anyway, if you use Emacs and edit MediaWiki pages, check out mediawiki.el and let me know what you think. I'm especially interested in bug reports from anyone.
Tags:

Previous 5