= Overview =

  Event+Venue, Talk, Title, Class, Intro, TALK, Summary,
  Comments, Thanks, Feedback, TODO, Links, Notes, Quotes.

= Event+Venue =

  Event: uxcamp 2009 - Sun 2009-05-24 10-16h
  http://uxcamp.de/ -> http://uxcamp.mixxt.de/
  http://twitter.com/uxcampberlin09  #uxcb09

  Venue: Erwin Schrödinger-Zentrum
  Rudower Chaussee 26, 12489 Berlin (Adlershof)
  http://tinyurl.com/uxcamp09-location
  S-Bhf Adlershof, Bus 162+164 "Magnusstr"

= Talk =

  13:00--13:42 "GUI 1.0 + WEB 3.0"
  Sven Guckes uxcb09(@)guckes.net

= Class =

Classification of this talk:
 * Art          - the art is in the code!
 * Business     - money?  some day.  lots of it.  uh-huh.
 * Code         - none yet.  gimme, gimme, gimme!
 * Development  - let's start today!
 * Extension    - extend your mind!
 * Fun          - always! :)

here we go..

= Intro =

Web browsers show web pages with lots of graphical content -
and naturally so, their interface is a graphical one.

You click on menus, select a submenu, issue a command -
and it will open a dialog, allowing you to select an
items from a popup menu, click on some radio buttons,
entering text in text fields, and tabbing between them.

However, a mouse only has three to five keys (and those
wheels for scrolling) - yet the keyboard has over 100 keys.
and if you know how to use those keys to type words
then you could simply make changes by entering commands.

Still, the concept of a command line (as in shells
and other programs) have proven as a powerful tool.

This talk shows some of the concepts of a command line, gives
some examples of its use as seen with irssi+mutt+vim and shells,
and advocates the addition of such a command line to other tools.

This allows for setup files to be mere copies of some
command line commands - just text which can easily
be stored online for reuse in a web cafe.

 Do not just drop the interfaces we already had and learned.
 Re-use the knowledge we already had for gui 1.0 and web 1.0.
 Allow the use of the tools we already have for interaction.

= Talk =

== Access ==
How to access this feature?
Simply type a colon (:)
to open the command line.
(bottom line or top line?
 well - *you* decide!)

== Features ==
Allow entering commands as words.
Add commands to move the cursor,
delete and insert text easily.
Allow abbreviations.

 * Jumps/Movements
 * Delete+Insert
 * Buffer/Clipboard/Register
 * Abbreviations
 * Key Binding
 * Mappings/Macros
 * Tab Expansion (Command Names and Parameters)

Possible Libraries:
 * GNU Readline
 * Language (branches, loops, variables -> scripting)

== Config/Setup ==
"config file" == "setup file"

Read in current setup file:
  :source file

Distribute setup files:
  $ cat config
  source ~/.foo/config.aliases
  source ~/.foo/config.macros
  source ~/.foo/config.colors
  source ~/.foo/config.crypto
  source ~/.foo/config.themes

== Conclusion ==
add GUI 1.0 again!

== Pipe ==

stdin+stdout:
Allow to send the contents of the
current page to some command or script.
This opens a lot of possibilities,
eg filtering, printing, saving.
(mutt offers such a command.)

Also, allow a non-interactive use
of gui tools, ie as a filter:
  $ foo | firefox | bar > file

expand this to command on websites:
  $ (cat) $URL | $URL/prog > $URL.out

now think of websites as *commands*!

example:
  $ cat blog.foo.org |
    www.translate.com/en2de |
    www.text2wav.org |
    www.mixer.net/background_music >
    www.mydomain.org/audiostream

"listen to blog.foo.org
 by translating its contents from english to german
 converting the output to WAV format,
 adding some background music - and then
 'storing' the result in an audio stream"

== Prefs ==

enable your work everywhere by
making your setup ubiquitous!

store the setup *anywhere*.
make client download the setup.
simply ":source newsetup" to run.

here come the features now.....

== Interface ==

Add option name prefixes: file_ dir_ prog_

Interface with external tools.
    :set prog_editor=vim
    :set prog_crypto=gpg
    :set prog_print=script|lpr

== Options ==

vim:
:set opt[TAB]       expand options name
:set opt[C-D]       show all options with prefix "opt"
:set option?        show current value
:set option!        toogle boolean value
:set option=[TAB]   expand the value
:set option-=bar    remove "bar"
:set option+=foo    add    "foo"
:set option^=42     multiply by 42
:set option&        reset option to default!!
:set all            show  all values
:set all&           reset all values

:opt
create overview to all options and their current values.

:mkvimrc
create a setup file from the current state of the program

irssi: /load + /save
just type "/save" the current state to its config file
(~/.irssi/config) - and "/load" to reloead a changed config file.

idea: add save points for config (c) Lem

 * easier documentation!
 * easier startup!

== Display ==

(1) windows.
(2) tabs.
(3) split views:  horizontal+vertical!

a browser opens windows for each page,
but there are also "tabs" in windows.
but why can't you split windows -
neither horizontally nor vertically?

you can split windows within gnu screen and vim.

you could use a split window like this eg:
the left side of a split window shows a list of links -
and the right side show one of these pages.
so - get someone's bookmark page -
and surf through all linked pages!

Firefox already does this when you use
CTRL-B to show the bookmark page.

== Jumps ==

 * jump to next/prev match.

(this is already possible with CTRL-F to enter a string,
and alt-n/alt-p to jump to the next/previous match; and
alt-a toggles the display of all matches on the current page.
but was this the result of some extension?)

anyway - searches for pattern (regex) would be great!

== Number Prefix ==

allow a number prefix for all commands:
 * N G -> jump to line N
 * N n -> find Nth next match
 * N % -> jump to N percent of text
 * N PgDn -> go down N pages

== Summary ==

Summary of goals:
 * allow non-interactive use of the tools (filter, script).
 * add a command line to your tools! (gui 1.0!)
 * make code as small and tight as possible.
 * add the command line optionally on compile time.
 * allow to call sub-shells (eg :!date)

== Comments ==

"Do not remind novice users of the hell that was DOS."
yep, DOS was hell.  But this here is way more advanced!

Even though not many people will ask for a command line
in all programs now, there might be quite some people
who will stumble upon this feature when it exists.
And quite a few people have told me that they are
much more comfortable with a keyboard interface.

Emacs:      Editor -- Mail -- Web
Firefox:    Editor -- Mail -- Web

"Firefox is my Operating System."
-> work with tools independent
of underlying operating system
ie use tools on local machine.

my world: install all tools on
a server and simply connect to it.

= Thanks =
Feedback from:
 * Your name here!

= Feedback =

Please me some your comments, corrections,
enhancements, flames, typos and more to
    maowberlin09(@)guckes.net
thanks! :-)

= TODO =
 * ...

= Links =

== Event ==
 * HomePage: http://uxcamp.de/ -> http://uxcamp.mixxt.de/
 * Contact   orga(at)uxcamp.de
 * IRC       none :-/
 * stream    none :-/
 * Programme http://uxcamp.mixxt.de/networks/wiki/index.Sessionplan_Sonntag

== Social ==
 * Flickr    http://www.flickr.com/search/?q=%23uxcb09
 * Facebook  ...
 * LinkedIn  ...
 * Twitter   http://www.twitter.com/uxcampberlin09 tag:#uxcb09
 * Upcoming  ...

== Docs ==
Slides:
 * http://www.slideshare.net/stn1978/interface-design-best-practices

== Misc ==
 * icke      http://uxcamp.mixxt.de/networks/members/profiles/index.guckes
 * This Page: http://www.guckes.net/talks/uxcamp.txt

= Notes =
 * Chat:       none.  everyone's twittering.
 * Docs:       is there a central repository of all papers+slides?
 * Food:       lots - and for free!  (coffee+tea, juices, water; cake+cookies, sandwiches)
 * Location:   On the rim of Berlin. Five rooms for 50 and one room for 100 people.
 * Party:      yes. interesting location.  free drinks :)
 * Orga:       A dozen (more?) people in blue tshirts. info table, cloakroom.. well done!
 * Weather:    sunny - just great!
 * WiFi:       working :)

 * 2009-05-22: Welcome Party @ Sankt Oberholz
 * 2009-05-23: Day 1/2 @ Erwin Schrödinger Zentrum
 * 2009-05-23: Party @ Kohlenquelle
 * 2009-05-24: Day 2/2 @ Erwin Schrödinger Zentrum

= Quotes =
 * "Das Interface sollte führen dürfen, aber nicht kontrollieren."

= Links =
 * Jef Raskin: The Humane Interface
 * Jeff Patton: 12 Best Practices for UX in an Agile Environment - Part 2
   http://www.uie.com/articles/best_practices_part2 [2008-08-05]

= Backlinks =
Comments within blogs by people from the audience:

 * http://www.hannestrapp.de/wordpress/2009/05/26/das-ux-camp-2009-in-berlin/

   "Die Session “GUI 1.0, WEB 3.0″ von Sven Guckes drehte sich nach
   Computerproblemen zuerst ausgiebig um Linux-Shells (ja wirklich),
   so dass die Idee, die hinter der Session stand (wenn ich es richtig
   verstanden habe), leider erst später klar wurde, als sowohl die Konzentration
   als auch der Zeitrahmen der Session bereits am Ende waren. Schade."

   Vielleicht haette die beiden Teile von der Reihenfolge wechseln sollen.

 * http://www.lonely-people-talk-a-lot.com/?p=670

   "Der obligatorischen Twittersession folgte dann wieder mal eine Session
   aus dem Dunstkreis Usability: GUI 1.0, WEB 3.0. Der Leiter der Session,
   Sven Guckes war eine Show. Er hackte die ganze Zeit auf seiner Terminal
   Software rum und huldigte der Vergangenheit als neue Zukunft. Hierzu
   möchte ich eigentlich nicht viel mehr sagen, als ich in der Abhandlung
   über die Warm-up Party gesagt habe. Wir brauchen Technologie für Alle
   und Jeden. Die Kommandozeile hat ausgedient. Der einzige Punkt in dem
   ich zustimmen kann ist: Ja, wir brauchen die Kommandos der Shell zur
   Realisierung von API Anwendungen.  Ich selbst will aber nicht mehr
   kryptisch auf der Shell rum hacken um von A nach B zu kommen."

   Warum wird also bei ebay, google und twitter
   immer noch eine Eingabefeld benutzt?
   Weil wir immer noch Woerter benutzen
   und diese ueber die Tastatur eingeben.
   Eine Kommandozeile benutzt lediglich
   das erste Wort der Eingabe als Kommando.
   Das ist der Unterschied. Think about it.