Software Project Management for Emacs: Cask

Johan shared a link for Cask with me. Look like an excellent and well needed tool for serious Emacs development. Serious being open to definition of course.
Dependency and software project management tools seem to slowly drift across language and system stacks, always being re-invented. The study of such systems, and the development of a singular and unified approach in the form of a library looks like a lot of fun and serious hard work, probably only worth pursuing if the result were a PhD.

How to Choose Packages Between Two ELPA Repositories

ELPA makes Emacs v24 even more delightful to use. You may have run into a situation though where you wanted to install different packages from both Marmalade and MELPA. A common problem here is that because the newest version number always gets chosen for installation, MELPA packages always get chosen over Marmalade, and you may not want that. MELPA thankfully has a solution for that in the form of their own package.
The directions to set up MELPA are straightforward, but, one of my super-powers is not make any sense of directions, so I had a heck of a time getting it working. Aaron’s config gave me a clue, but I still didn’t have it working (I liked his namespace prefixing though so). Once I did get it working though it was really clear what I had done wrong, basically the package load and require order was incorrect, so, here is the right way to do it:

  • Install the melpa package manually as directed; this gives you package you need to use the filtering functionality.
  • Require ‘package to get the ELPA functionality and variables.
  • Add the repo(s) to ‘package-archives so that you can pull from them.
  • Call package-initialize to find the recently installed melpa package.
  • Require ‘melpa to import it and be able to use it.
  • Customize the enable and exclude melpa variables to specify what packages to include or exclude from which repositories.
  • Call package-refresh-contents to update Emacs’s database of which packages it should use as available for installation.
  • Your filtered package list is now available for use, call list-packages to verify.

Here is an example of my situation, I wanted to default to installing the newest package from either GNU or Marmalade for all but two cases where I only wanted the version that was available on MELPA: fill-column-indicator and melpa. Here is the configuration and correct order of calls to make:

(defvar gcr/packages
  '(auto-complete
    color-theme
    color-theme-solarized
    diminish
    fill-column-indicator
    fuzzy
    geiser
    graphviz-dot-mode
    lexbind-mode
    melpa
    ob-sml
    paredit
    pretty-mode-plus
    rainbow-mode
    real-auto-save
    sml-mode)
  "Packages required at runtime.")
(require 'package)
(add-to-list 'package-archives
             '("marmalade" . "http://marmalade-repo.org/packages/") t)
(add-to-list 'package-archives
             '("melpa" . "http://melpa.milkbox.net/packages/") t)
(package-initialize)
(require 'melpa)
(setq package-archive-enable-alist '(("gnu")
                                     ("marmalade")
                                     ("melpa"
                                      fill-column-indicator
                                      melpa)))
(setq package-archive-exclude-alist '(("gnu"
                                       fill-column-indicator
                                       melpa)
                                      ("marmalade"
                                       fill-column-indicator
                                       melpa)))
(package-refresh-contents)
(dolist (package gcr/packages)
  (when (not (package-installed-p package))
    (condition-case err
        (package-install package)
      (error
       (message "%s" (error-message-string err))))))

On Computing

Computing is very poorly understood. Case in point here is the litmus test I would argue to you that:
In North America you can pull any 18 year old randomly off the street and ask them to do something and it would go like this:
1. Can you build a basic bridge between a 3ft span given some materials?
2. Can you build a basic drainage system given some materials?
3. Can you organize a group of 5 people to perform a non trivial but paralleled task?
4. Can you prepare a soup like chili given materials?
5. Can you write down the computational logic to show the fibonacci sequence (given an explanation of the sequence itself)?
What percentage would you say that we pull 1000 people and given them this test? What percentage could successfully do each?
You know where I am going with this.
100% can do 1-4 and 0.01% could do 5.
There is a deep, deep lack of awareness about computation.
The problem with computation and titles around it are that very people ever think about what it is that we truly do, and often times the ones that do are relegated to the backroom. Case in point. SICP is no longer part of MIT entry program because it is too far “out there”. Kind of sad, that is part of the mystery, and the fun, what we are doing and what we can do specifically on computers, is, something that no one in history has been able to do before. We can execute things now that people have only dreamed of, computers are truly without limit. I found this special:
https://www.wisdomandwonder.com/link/979/computers-are-a-metamedium

Calling functions with optional arguments from the mini-buffer

Surely one of the first things VIers want to know as do the rest of us is how to move forward N characters (or backward or whatever) from the mini-buffer in EMACS. Here is how it is done, using the universal argument. So to move forward 100 chars:

C:u 100, C:f

ADDENDUM:01/13/13
Thanks FUCO for providing a better solution:

There’s also a faster way. Just hold down control key (or meta key, by default the binding is on both) and type the number, then execute the command or invoke minibuffer with M-x
So, C-2 C-0 C-f will move you 20 characters. It’s neat because you don’t have to release control, you just hit the rest of the keys in sequence.