Category Archives: democamp

Democamp a blast! Blew their brains to bits

I set out to geek the heck out of Toronto’s hippest geeks, and I did.
I showed them Emacs as they’d never seen it before—and even that was
a tiny fraction of my config. Lots of cool stuff behind the scenes,
too. When I showed them M-x doctor (the Emacs psychotherapist),
someone shouted out, “Is Emacs talking to you?” I laughed and
continued. What I *really* should’ve done was break the sequence of my
presentation, hook up the speakers, and tell them about Emacspeak –
presentation sequence be darned. ;) Oh, if they only knew how easy it
was to make jokes reality under Emacs! I remember writing my ‘bot
implants’ – the hippie-expand code I used to answer questions really
really quickly on IRC…

Anyway. That was FUN. And it was relatively easy to get through,
especially with the cue system I made (Emacspeak rocks!). I’ll talk
about that some other time. It’s a really cool hack and well worth exploring.

SO. The democamp.ca folks will eventually get
around to posting a vidcast. In the meantime, I have a 431MB MPEG
movie that I need to either downsample or cut up in order to put
online, maybe on YouTube. I don’t have
enough memory or hard disk space to play around with this (have you
seen my computer?!), but I’ll happily put the video up if we can
figure out how to go about doing that.

If you enjoyed the talk, missed it, or just want to hear/see me bounce
up and down about Emacs some more, come to the Linux Caffe
on Saturday (Oct 28, 2006) from 1:00 PM to 3:00 PM. I’ll be there,
and we might even see about having some kind of mini-show / vidcast. I wonder if
David has a projector. =)

That was fun! Can’t wait to do it again!

On Technorati: , , , ,

Random Emacs symbol: comint-input-sender-no-newline – Variable: Non-nil directs the `comint-input-sender’ function not to send a newline.

Not among strangers

It’s amazing, looking out over a crowd of some 70 people and realizing
that very few of them are strangers. It was my first
DemoCamp presentation. I
jumped at the opportunity to wear my beautiful white suit (I *love*
that outfit!), but neither the suit nor the stage (MaRS is big!)
imposed any distance whatsoever. It felt as if I was sitting around a
table with good friends who indulged me by listening to an
enthusiastic demonstration of my latest cool hacks.

It helped that there was a low table that I could put my computer on
so that I could do my demo without hiding behind the podium. (I hate
podiums and other things that stand between me and the rest of the
people!) The microphones were good, too. I left the podium microphones
in place, and my natural presenting voice was strong enough to get
picked up without effort. And of course, a warmed-up sympathetic crowd
was just *wonderful* to work with… =)

I can’t wait to work on a few more things. A lower voice might be
easier to listen to, as long as I can still keep my warmth and humour.
A slightly higher table would’ve been nice. More structure for the
hacks, maybe a clearer message? But it was a fun presentation, and I’m
glad I got the chance to show people something crazy and fun.

I’d like to refine this presentation even further. I have an important
message I want to share with as many geeks as possible. I want people
to push the boundaries, to imagine what’s possible when software can
be customized to that extent. Maybe the benefits will trickle down to
everyone else, the way wild ideas in research prototypes can be taken
into the mainstream…

On Technorati: , ,

Random Emacs symbol: emerge-revisions-with-ancestor – Command: Emerge two RCS revisions of a file, with another revision as ancestor.

mencoder rocks for editing movies

I used my Sony Cybershot digital camera to take a video of my
presentation at Democamp
last night. The file weighed in at 400+ MB! After a bit of trial and
error, I figured out how to use mencoder to crop to just me bouncing
up and down and talking excitedly about Emacs. =) Here’s the
incantation I’m currently using:

mencoder -ss 111 -vf crop=275:300 mov07578.mpg \
         -of mpeg -oac mp3lame -ovc lavc -o emacs.mpg

I might need to tweak it a bit more. Still, mencoder is fun!

On Technorati: , ,

Random Emacs symbol: w3m-w3m-retrieve – Function: Retrieve web contents pointed to by URL using the external w3m command.

Democamp was lots of fun

After I unpacked and put away all my stuff, I headed to No Regrets to
catch Democamp, Toronto’s awesome techscene get-together. I missed the
Democamp scene while I was away!

Project Who’s Who is underway. We’ll figure out what to do with all
these photos soon.

I think the coolest thing to come out of this is that we’ll adopt Will
Pate into our group. He’ll like hanging out with them, and we’ll like
him too. He’s a geek with a great sense of humor, and he’s around our
ages. Yes, we’ll assimilate him if he lets us. =)

Random Emacs symbol: menu-bar-emerge-menu – Function: Prefix command (definition is a keymap associating keystrokes with commands).

Visual notes – Gary Vaynerchuk and Democamp Toronto 24

Funny aside: When Jay Goldman handed Gary Vaynerchuk a bottle of water, Gary offered it for sale. Little things like that reinforce story.

Key take-aways: Passion and patience are everything. Hustle. Out-care others. Offer good stuff. Pay attention to everything. How do you scale? By trying.

image

Notes from the demos and the pub, before I broke my fountain pen:

image

Explanations for scribbles upon request, or when I can make time for it! =)

Behind the scenes: Livin’ la Vida Emacs

In October 2006, I gave a short presentation on Livin’ la Vida Emacs (or the Emacs editor as a way of life). It was well-received—in fact, so well-received that folks in the audience anticipated my punchlines and I ended up shifting parts of my talk around. ;)

People said:

Last, and certainly not least was Sacha Chua. If we could harness it I’m pretty sure we could power a few small cities of the energy that’s contained in this one, tiny person – especially when you get her talking about Emacs. Sacha’s demo, entitled, “Livin’ la vida Emacs” was hands down the most entertaining of the evening. Sacha has basically taken this simple, extendable text editor and pushed it about as far as it can go – at DemoCamp10 she pulled back the curtain and showed us all her little systems and apps she’s created in it. I like my GUI/Windows so the whole text-based thing isn’t for me but it certainly was interesting to see just how strung out she’s got that machine.

Ryan Coleman

Sacha Chua showed off what can be done in the scriptable environment, in this case emacs, as she went from Text editor, to a.i. doctor, to game engine to task / email organizer and beyond. Sacha was six feet tall on that stage, even though she did not actual levitate at anytime (although she came close, as always). A Tour de force of the Emacs, a text editing tool built in a interpreted lisp language environment, bascially a personalized productivity platform which allows for massive customization. Sacha had the crowd entertained and enthralled. (Sacha blogged her own impressions and mentions that Emacs was speaking to her!)

Ian Irving

Within Toronto’s Web community, Sacha Chua has become one of the leading “personalities”. Armed with infectious enthusiasm, charm and smarts, she would be an excellent person to hire once she graduates from UoT. The key question is how best to use her talents. It would probably be as a customer service rep, who can come into a bad situation and get everyone happy by the time she leaves. If I was an HR person from Microsoft, IBM, etc. I’d be knocking on Sacha’s door ASAP.

Mark Evans, consultant

Why? Probably because in addition to my natural sugar high, I was also presenting something that was awesomely, arcanely geeky. =)

I hadn’t figured out how to make a screencast on Linux, so the actual display on my screen is lost to time. I do, however, have the source code that I used to step through my speech–including speaking cues, as I didn’t want to mess up the presentation in front of Toronto’s technorati! So here’s the source code, for your amusement. I set up two of my function keys to go forward and backward, executing the parenthesized expressions. I also set up a hidden window that could handle my speaking cues so that Emacs could remind me what the next “slide” was before I transitioned to it, for smoother flow. emacspeak-speak-buffer is a function that reads the current window’s text using the Emacspeak speech interface with the Festival synthesizer I’d configured. At some point, I switched to a more interactive demo, but I still had the speaking cues remind me of the sequence. So yes, Emacs really was telling me what to say. ;)

;; Emacs as a text editor

(progn ;; Setup
  (defvar democamp/presentation-file "~/democamp.el")
  (defvar democamp/cue-buffer "*DemoCamp*")
  (defun democamp/next ()
    (interactive)
    (let (start sexp)
      (with-current-buffer (find-file-noselect democamp/presentation-file)
        (setq start (point))
        (forward-sexp)
        (setq sexp (buffer-substring-no-properties start (point))))
      (eval (read sexp))))
  
  (defun democamp/previous ()
    (interactive)
    (let (start sexp)
      (with-current-buffer (find-file-noselect democamp/presentation-file)
        (setq start (point))
        (backward-sexp)
        (setq sexp (buffer-substring-no-properties (point) start)))
      (eval (read sexp))))

  (defun democamp/repeat ()
    (interactive)
    (let (start sexp)
      (with-current-buffer (find-file-noselect democamp/presentation-file)
        (setq start (point))
        (backward-sexp)
        (setq sexp (buffer-substring (point) start))
        (forward-sexp))
      (eval (read sexp))))
  
  (defun democamp/say (text)
    (with-current-buffer (get-buffer-create democamp/cue-buffer)
      (erase-buffer)
      (insert text)
      (goto-char (point-min))
      (call-interactively 'emacspeak-speak-buffer)))
  (global-set-key (kbd "<f12>") 'democamp/next)
  (global-set-key (kbd "S-<f12>") 'democamp/previous)
  (global-set-key (kbd "C-<f12>") 'democamp/repeat)  
)

;; Window register a
(progn
  (menu-bar-mode 1)
  (tool-bar-mode 1)
  (set-face-attribute 'default nil :height 200)
  (find-file "~/hello.txt")
  (democamp/say "I don't know why people are so intimidated by Emacs. It's a text editor. It has menus and toolbars and everything.")
  (frame-configuration-to-register ?a)) 

(progn
  (democamp/say "Spell-check, too.")
  (load-library "flyspell")
  (load-library "emacspeak-flyspell")
  (setq emacspeak-flyspell-highlight-personality nil)
  (flyspell-mode 1))


;; Emacs learning curve
;; Frame configuration b
(progn
  (find-file "~/tmp/learningcurves.jpg")
  (democamp/say "So why are people terrified of Emacs?"))

(progn
  (set-face-attribute 'default nil :height 700)
  (delete-other-windows)
  (sit-for 1)
  (animate-sequence (list "Livin' la Vida Emacs" "DemoCamp10" "Sacha Chua" "Oct 23, 2006") 1))

(progn
  (set-face-attribute 'default nil :height 200)
  (democamp/say "Emacs comes with a psychotherapist.")
  (doctor))
(progn
  (democamp/say "an adventure game")
  (dunnet))
(progn
  (democamp/say "random geek stuff")
  (hanoi 3))
(progn
  (democamp/say "even Snake")
  (delete-other-windows)
  (snake))
(progn
  (democamp/say "And of course, my favorite game, Nethack.")
  (load-library "nethack-config")
  (nethack))
(democamp/say "Some of it is useful")
;; Flashcard
(progn
  (democamp/say "Flashcards")
  (load-library "flashcard-config")
  (find-file "~/notebook/japan/japanese.deck")
  (goto-char (point-max)))
;; With fortunes
(progn
  (democamp/say "And you can mash things together")
  (load-library "fortune")
  (setq fortune-file "/usr/share/games/fortunes/computers")
  (fortune)
  (delete-other-windows))
(progn
  (find-file-other-window "~/notebook/japan/japanese.deck")
  (goto-char (point-max)))

;; Planner
(democamp/say "Now the wild stuff starts.")
(progn
  (planner-goto-today)
  (delete-other-windows)
  (democamp/say "Emacs: more than just an editor. It's a way of life."))

;; - Show tasks
(democamp/say "I use Emacs to manage my tasks with Planner.")
(democamp/say "I can even keep detailed time logs!")
(progn
  (load-library "/usr/src/planner-el/planner-timeclock-summary.el")
  (planner-timeclock-summary-show (planner-today)))

;; - Show notes
(democamp/say "... blog...")
;; - Jump to URL in w3m
(democamp/say "... surf the Web (with tabbed browsing and a custom keymap!)")
33;; - Jump to URL in Firefox
(democamp/say "Although sometimes you really want Firefox.")
;; - Jump to task from mail message
(democamp/say "I can hyperlink to pretty much anything.")
(democamp/say "People's contact information")
(democamp/say "E-mail, etc.")
(democamp/say "Which comes in handy when I need to create tasks from mail messages.")
;; Add note to BBDB from mail message
(progn
  (democamp/say "Keeping track of the number of recipients")
  (planner-visit-link "pos://~/.gnus#19820"))
(democamp/say "BBDB indicators")

;; Reply to message with nickname,
(progn
  (democamp/say "CRM in e-mail: Nicknames...")
  (planner-visit-link "pos://~/.gnus#16025"))

;; and show how it shows up in BBDB record and ping code
(progn
  (democamp/say "... notes...")
  (planner-visit-link "pos://~/.gnus#18804"))

(progn
  (democamp/say "... pings...")
  (planner-visit-link "pos://~/.gnus#16932"))

(democamp/say "... filters...")
(democamp/say "So those are just a few examples of the crazy stuff you can do if you have an infinitely tweakable environment.")
(democamp/say "Sacha, remember to plug in the speakers.")
(democamp/say "Demo Campers, welcome to Emacs. What else do you want it to do?")

I love pushing the envelope. I love getting to know my tools inside and out (I enjoy reading source code!) and then making them do things other people can’t imagine. I love tweaking processes in real life, too, making them better and better every time. That’s just part of the way I work have fun. =)

How can you rock your next technical demo?