% @file
% @brief   Vortrag: Mein Umzug in die Shell
% @author  markus schnalke <meillo@marmaro.de>
% @since   2007-09-25


\documentclass{beamer}

  \usepackage[utf8]{inputenc}
  \usepackage{ngerman}
  \usepackage{graphicx}
  \usepackage[automark]{scrpage2}

  \title{Gimme Shell(ter)}
  \author{markus schnalke}
  \date{2007-12-11}

\begin{document}


\frame{
	\vspace{8em}
	\begin{center}
		{\huge Gimme Shell}{\tiny (ter)}

		{Mein Umzug in die Shell}

		\vspace{6em}

		{ \tiny
		markus schnalke \textless{}meillo@marmaro.de\textgreater{}
		}


	\end{center}
}





\section{Vorwort}
\frame{ \frametitle{Vorwort}

  \begin{block}{}
		Dass meine Zukunft in der Shell stattfinden soll, war mir schon lange klar.
  \end{block}

  \begin{block}{}
		Bis ich jedoch soweit war, war es ein langer Weg.
  \end{block}

  \begin{block}{}
		Und keinesfalls möchte ich behaupten, dass ich am Ziel wäre, denn es gibt kein Ziel. Es gibt nur vorwärts.
  \end{block}

}



\section{Ziele}
\frame{ \frametitle{Ziele}
	Dieser Vortrag soll zeigen, dass man auch ohne X komfortabel arbeiten kann.

  \vspace{1em}
	\pause

	Ich möchte die ``Angst'' vor der textbasierten Benutzerschnittstelle nehmen. Auch will ich hierzu Einstiegshilfen geben.
			
  \vspace{1em}
	\pause
		
	Ich möchte motivieren, mal Urlaub in der Shell zu machen.
			
  \vspace{1em}
	\pause
		
	Es soll klar werden, dass und warum Kommandozeilenprogramme oft besser als ihre grafischen Pendants sind.
			
  \vspace{1em}
	\pause
		
	Und als zentrales Ziel soll dieser Vortrag Gründe darstellen, weshalb es sich lohnt, in die Shell umzuziehen.
}




\section{Motivation}
\frame{ \frametitle{Motivation}
    \begin{itemize}
      \item Weil es cool ist {\scriptsize \textit{*hehe*}}
    \end{itemize}
  \pause
    \begin{itemize}
      \item effektiveres Arbeiten möglich
      \item konfigurierbarer
      \item ressourcenschonender
    \end{itemize}
  \pause
    \begin{itemize}
      \item Vorteile von \texttt{screen}
      \item \texttt{ssh} von überall
      \item auch ohne \texttt{X} daheim
    \end{itemize}

	\pause
	\begin{block}{}
		\textbf{Konzentration auf das Wesentliche!}

		Näher an der UNIX-Philosophie
	\end{block}
}



\part{UNIX}
\frame{
	\vspace{20ex}
	\centerline{ \huge UNIX }
	\vspace{16ex}
	{ \tiny UNIX is a registered trademark of The Open Group. }

}


\section{Die UNIX-Philosophie}
\frame{ \frametitle{Die UNIX-Philosophie}
  \begin{block}{}
		DER Grund UNIX zu verwenden

		``Pro UNIX'' statt ``Anti Windows''
  \end{block}
	
	\pause

  \begin{block}{}
		Welche wirklichen Vorteile bietet Gnome gegenüber der Windows-Oberfläche?

		\vspace{0.3em}

		Richtig, keine!

		\vspace{0.3em}

		An der Basis seid ihr zu UNIX gewechselt, weshalb denn nicht auch an der Oberfläche? \\
		\pause
		Oder: \textit{An der Oberfläche seid ihr zu UNIX gewechselt, weshalb denn nicht auch an der Basis?}
  \end{block}
	
	\pause

  \begin{block}{}
		UNIX ist mehr als Ubuntu!

		\textbf{Um UNIX zu verstehen, muss man seine Philosophie kennen!}
  \end{block}
}



\frame{ \frametitle{Die UNIX-Philosophie}
  \begin{itemize}
		\item klein ist schön
		\item genau eine Sache gut machen
		\item früher Prototyp
		\item Portabilität vor Effizienz
		\item Daten in ASCII-Files speichern
		\item Code borgen
		\item alles automatisieren
		\item CLI statt GUI
		\item Programme als Filter
  \end{itemize}

	\pause

	\begin{block}{siehe auch}
		\begin{itemize}
			\item Mike Gancarz
			\item Rob Pike
			\item http://harmful.cat-v.org/cat-v/
			\item Plan9
		\end{itemize}
	\end{block}
}




\section{GUI vs. CLI}
\frame{ \frametitle{GUI vs. CLI}
	\begin{block}{GUI-Programme \dots}
		\begin{itemize}
			\item haben hässlichen Code
			\item sind aufgebläht
			\item schränken ein
			\item laufen nur mit X
		\end{itemize}
	\end{block}

	\pause

	\begin{block}{CLI-Programme \dots}
		\begin{itemize}
			\item sind kleiner
			\item sind besser konfigurierbar
			\item sind älter und ausgereifter
			\item sind portabler (und damit auch öfter portiert)
		\end{itemize}
	\end{block}

	\pause

	{ \scriptsize (Natürlich gilt das nicht zwangsläufig, die Wahrscheinlichkeit ist aber groß.) }
}


\subsection{CURSES}
\frame{ \frametitle{CURSES}
	\begin{block}{CLI, TUI, GUI}
		\begin{itemize}
			\item CLI: \texttt{cat cli.txt | mail -s CLI lugu}
			\item TUI: \texttt{mutt}
			\item GUI: \texttt{Menu \textgreater{} Applications \textgreater{} Evolution}
		\end{itemize}
	\end{block}

	\pause

	\begin{block}{CURSES}
		\begin{itemize}
			\item CURSES ist \emph{nicht} CLI
			\item sondern Text User Interface
			\item Ich bin hier nicht immer ganz korrekt
			\item CURSES gehört aber auch zur Shell
		\end{itemize}
	\end{block}
}



\subsection{GUIs als Frontend}
\frame{ \frametitle{GUIs als Frontend}

	\begin{block}{}
		GUIs sollen laut UNIX-Philosophie nur Frontends sein.
	\end{block}

	\pause

	\begin{block}{Beispiele}
		\begin{itemize}
			\item Programm: \texttt{nmap}
			\item Frontends: \texttt{nmapfe} (GTK), \texttt{knmap} (Qt)
		\end{itemize}

		\begin{itemize}
			\item Programm: \texttt{libparted}
			\item Frontends: \texttt{parted} (curses), \texttt{gparted} (GTK), \texttt{qtparted} (Qt)
		\end{itemize}
	\end{block}
}



\subsection{Größe von User-Interfaces}
\frame{ \frametitle{Größe von User-Interfaces}


	{ \scriptsize
		\begin{itemize}
			\item Package: \textbf{libparted1.7-1}
			\item Size: 198,554
			\item Depends: libc6 ($>$= 2.3.6-6), libuuid1
		\end{itemize}
	}

		\pause


	{ \scriptsize
		\begin{itemize}
			\item Package: \textbf{parted}
			\item Size: 56,268
			\item Depends: libc6 ($>$= 2.3.6-6), libncurses5 ($>$= 5.4-5), libparted1.7-1 ($>$= 1.7.1-1), libreadline5 ($>$= 5.2)
		\end{itemize}
	}

		\pause

	{ \scriptsize
		\begin{itemize}
			\item Package: \textbf{gparted}
			\item Size: 452,616
			\item Depends: libatk1.0-0 ($>$= 1.12.2), libc6 ($>$= 2.3.6-6), libcairo2 ($>$= 1.2.4), libfontconfig1 ($>$= 2.3.0), libfreetype6 ($>$= 2.2), libgcc1 ($>$= 1:4.1.1-12), libglib2.0-0 ($>$= 2.10.0), libglibmm-2.4-1c2a, libgtk2.0-0 ($>$= 2.8.0), libgtkmm-2.4-1c2a, libice6 ($>$= 1:1.0.0), libpango1.0-0 ($>$= 1.12.3), libparted1.7-1 ($>$= 1.7.1-1), libpng12-0 ($>$= 1.2.8rel), libsigc++-2.0-0c2a ($>$= 2.0.2), libsm6, libstdc++6 ($>$= 4.1.1-12), libuuid1, libx11-6, libxcursor1 ($>$$>$ 1.1.2), libxext6, libxfixes3, libxi6, libxinerama1, libxrandr2, libxrender1, zlib1g ($>$= 1:1.2.1), gksu, menu
		\end{itemize}
	}
}




\section{Programme vergleichen}
\frame{ \frametitle{Programme vergleichen}
	\begin{block}{Weshalb die Programmgröße beachten?}
		\begin{itemize}
			\item Kleine Programme sind: flexibler, portabler, einfacher zu verstehen, bugfreier (vgl. UNIX-Philosophie)
			\item Die Paketgröße gibt indirekt Aufschluss auf den Codeumfang
			\item Der Codeumfang im Verhältnis zu den Features wirft Überlegungen zur Qualität des Codes auf
		\end{itemize}
	\end{block}

	\begin{block}{}
		Dies ist nur als Anhaltspunkt zu sehen!
	\end{block}
}



\subsection{Messmethoden}
\frame{ \frametitle{Messmethoden}
	\begin{block}{Paketgröße}
		\begin{itemize}
			\item \texttt{apt-cache show \textless{}paket\textgreater{} | grep \^{}Size}
			\item einfach auszulesen
			\item Problem: Dokumentation ist oft auch im Paket enthalten
		\end{itemize}
	\end{block}

	\pause

	\begin{block}{Source-Filesizes}
		\begin{itemize}
			\item \texttt{du -c *.[ch]} (je nach Sprache)
			\item Quellcode muss vorliegen (\texttt{apt-get source})
			\item Problem: \texttt{\{} vs. \texttt{begin}
		\end{itemize}
	\end{block}

	\pause

	\begin{block}{Source Lines Of Code}
		\begin{itemize}
			\item \texttt{sloccount} von David A. Wheeler
			\item Sprachen werden ``gleicher bewertet''
		\end{itemize}
	\end{block}
}



\part{Die Shell und ich}
\frame{
	\vspace{8ex}
	\centerline{ \huge Die Shell und ich }
}




\section{Mein Weg}
\frame{ \frametitle{Mein Weg}
  \begin{block}{2005}
		Fluxbox, Firefox, Kate, Sylpheed Claws, gFTP, Gaim, vlc, k3b, gThumb, OOo, Grip, XMMS, \dots
  \end{block}

	\pause

  \begin{block}{2006}
		Auslöser:\\
		Artikel ``Mein Umzug in die Shell'' von Gregor Oelze auf linuxlog
  \end{block}

	\pause

  \begin{block}{2007}
		dwm + \textit{screen}, Iceweasel + \textit{w3m},  \textit{vim}, \textit{mutt}, \textit{ncftp}, \textit{weechat + bitlbee}, mplayer, \textit{wodim + growisofs},  gqview + qiv, OOo, \textit{jack}, \textit{cplay}, \dots
  \end{block}

	\pause

	\begin{block}{}
		{\scriptsize Nachzulesen auf http://marmaro.de/lue }
	\end{block}
}


\section{Programme}

\subsection{Editor}
\frame{ \frametitle{Editor}
	\begin{block}{vi(m)}
		\begin{itemize}
			\item Der Editor schlechthin
			\item Auf jedem UNIX-System vorhanden
			\item meist in Form eines Klons
			\item darf ruhig angepasst werden: \texttt{.vimrc}
			\item Die meisten User verwenden viel zu wenige seiner Möglichkeiten!
		\end{itemize}
	\end{block}

	\pause

	\begin{block}{Alternativen}
		\begin{itemize}
			\item \texttt{vim} (7350k) Der bekannteste (und beste?) vi-Klon.
			\item \texttt{nvi} (290k) Reimplementierung des orginal vi. Weniger Features; u.a. kein Syntax-Highlighting.
			\item \texttt{emacs} (5.89e37) \dots 
		\end{itemize}
	\end{block}
}



\subsection{Mailclient}
\frame{ \frametitle{Mailclient}
	\begin{block}{mutt}
		\begin{itemize}
			\item ``The mail client, that sucks less''
			\item sehr konfigurierbar
			\item Kombination mit \texttt{fetchmail}, \texttt{procmail}, \texttt{masqmail}
			\item Debian-Paket: 1810k
		\end{itemize}
	\end{block}

	\pause

	\begin{block}{Alternativen}
		\begin{itemize}
			\item \texttt{mailx} (155k) einfaches Mailprogramm
			\item \texttt{pine} (4M) (nur als Source-Paket verfügbar)
			\item \texttt{mutt-ng} (1790k) Neue Features für mutt (tot?)
		\end{itemize}
	\end{block}
}



\subsection{Browser}
\frame{ \frametitle{Browser}
	\begin{block}{w3m}
		\begin{itemize}
			\item Textbrowser
			\item hat Caret-Navigation
			\item kein JavaScript
			\item Inline-Bilder mit \texttt{w3m-img}
			\item Debian-Paket: 1100k
		\end{itemize}
	\end{block}

	\pause

	\begin{block}{Alternativen}
		\begin{itemize}
			\item \texttt{lynx} (1860k) der Dinosaurier
			\item \texttt{links} (380k) lynx-Klon
			\item \texttt{elinks} (1190k) hat auch JavaScript-Unterstützung
			\item \texttt{links2} (2080k) bietet textuellen und grafischen Modus
			\item \texttt{dillo} (360k) rein grafisch, layoutet aber wie Textbrowser
		\end{itemize}
	\end{block}
}



\subsection{Musikplayer}
\frame{ \frametitle{Musikplayer}
	\begin{block}{cplay}
		\begin{itemize}
			\item Frontend für mpg123, ogg123, \dots
			\item sehr simpel, aber meist ausreichend
			\item vi-like Bedienung
			\item Remote-Control via FIFO
			\item Debian-Paket: 41k
		\end{itemize}
	\end{block}

	\pause

	\begin{block}{Alternativen}
		\begin{itemize}
			\item \texttt{moc} (190k) sehr einfach, etwas instabil
			\item \texttt{cmus} (124k) sehr featurereich
			\item \texttt{mpd+ncmpc} (127k+85k) Client-Server-Architektur
		\end{itemize}
	\end{block}
}



\subsection{Filemanager}
\frame{ \frametitle{Filemanager}
	\begin{block}{coreutils}
		\begin{itemize}
			\item cd, mv, cp, rm, mkdir, rmdir, \dots
			\item man braucht eine gewisse Übersicht im Filesystem
			\item letztendlich aber einfach am schnellsten
			\item überall vorhanden
		\end{itemize}
	\end{block}

	\pause

	\begin{block}{Alternativen}
		\begin{itemize}
			\item \texttt{mc} (2140k) Alleskönner mit schrecklicher Bedienung
			\item \texttt{vifm} (63k) \texttt{mc} mit vi-Bedienung; noch zu wenige Features
		\end{itemize}
	\end{block}
}



\subsection{FTP-Client}
\frame{ \frametitle{FTP-Client}
	\begin{block}{ncftp}
		\begin{itemize}
			\item toller FTP-Client
			\item hatte nur früher ein curses-Interface (\texttt{ncftp2})
			\item ncftpget, ncftpput, \dots
			\item Debian-Paket: 500k
		\end{itemize}
	\end{block}

	\pause

	\begin{block}{Alternativen}
		\begin{itemize}
			\item \texttt{ftp} (50k) wenig Komfort
			\item \texttt{lftp} (540k) (kenne ich leider nicht)
			\item \texttt{mc} (2140k) er kann auch ftp
		\end{itemize}
	\end{block}
}



\subsection{Chatten}
\frame{ \frametitle{Chatten}
	\begin{block}{weechat-curses}
		\begin{itemize}
			\item ein IRC-Client
			\item ``\texttt{irssi} von Grund auf neu''
			\item Debian-Paket: 580k
		\end{itemize}
	\end{block}

	\pause

	\begin{block}{Alternativen}
		\begin{itemize}
			\item \texttt{irssi} (1060k) populärer IRC-Client
			\item \texttt{sic} (6k) liest stdin, schreibt stdout
			\item \texttt{centericq} (1260k) sehr bekannter ICQ-Client
		\end{itemize}
	\end{block}

	\pause

	\begin{block}{bitlbee}
		\begin{itemize}
			\item bitlbee ist ein IM-to-IRC-Gateway
			\item IRC-Client für ICQ und Jabber verwenden
			\item Debian-Paket: 315k
		\end{itemize}
	\end{block}
}



\subsection{Framebuffer}
\frame{ \frametitle{Framebuffer}
	\begin{block}{fbi}
		\begin{itemize}
			\item \texttt{fbi} zeigt Bilder im Framebuffer
			\item \texttt{fbgs} zeigt PDF- und PS-Dokumente im Framebuffer
			\item Debian-Paket: 54k (enthält \texttt{fbgs})
		\end{itemize}
	\end{block}

	\pause

	\begin{block}{mplayer}
		\begin{itemize}
			\item \texttt{mplayer -vo fbdev} zeigt Filme im Framebuffer
			\item kann auch über libaa, libcaca und Ähnliches ausgeben
			\item Debian-Paket: 4400k
		\end{itemize}
	\end{block}

}



\subsection{screen}
\frame{ \frametitle{screen}
	\begin{block}{screen}
		\begin{itemize}
			\item Terminal-Multiplexer
			\item ein \texttt{must-have} für Shelluser
			\item Nur noch ein Terminal nötig (ssh)
			\item Arbeit an beliebiger Stelle unterbrechen und später genau dort fortsetzen
			\item Wer einmal damit gearbeitet hat kommt nicht mehr davon los!
			\item Debian-Paket: 590k
		\end{itemize}
	\end{block}

	\pause

	\begin{block}{Alternativen}
		\begin{itemize}
			\item \texttt{dtach} bietet detach-Feature von \texttt{screen}
		\end{itemize}
	\end{block}
}



\section{Remote arbeiten}
\frame{ \frametitle{Remote arbeiten}
	\begin{block}{Server}
		\begin{itemize}
			\item Ein Server ist etwas sehr Tolles!
			\item per dyndns.org aus dem Internet erreichbar
			\item Upload-Bandbreite sollte nicht zu dünn sein
			\item (64k sind etwas wenig *heul*)
			\item Zugang per ssh
		\end{itemize}
	\end{block}

	\pause

	\begin{block}{Client}
		\begin{itemize}
			\item nur Internet und offener Port nötig
			\item für Windows: PuTTY (gibt's auch für den USB-Stick)
		\end{itemize}
	\end{block}
}


\frame{ \frametitle{Remote arbeiten}
	\begin{block}{Vorteile}
		\begin{itemize}
			\item weniger Wartungs- und Konfigurationsaufwand
			\item einfache Datensicherung
			\item von überall im eigenen System arbeiten
		\end{itemize}
	\end{block}

	\pause

	\begin{block}{Nachteile}
		\begin{itemize}
			\item Dateitransfers zum Client nötig
			\item u.U. etwas lahm
			\item nicht überall ist ssh erlaubt
		\end{itemize}
	\end{block}
}




\part{dwm}
\frame{
	\vspace{8ex}
	\centerline{ \huge dwm }
}


\section{Window-Manager}
\frame{ \frametitle{Window-Manager}
	\begin{block}{dwm}
		\begin{itemize}
			\item dynamic window manager
			\item seit Juli 2006
			\item von Anselm R. Garbe (wmii)
			\item http://dwm.suckless.org
			\item Debian-Paket: 20k
		\end{itemize}
	\end{block}

	\pause

	\begin{block}{Alternativen}
		\begin{itemize}
			\item \texttt{larswm} (110k) hatte Einfluss auf dwm
			\item \texttt{ratpoison} (170k) soll zu \texttt{screen} passen
			\item \texttt{ion2} (330k) bekannt für seine Tastatursteuerung
			\item \texttt{icewm} (700k) wird oft als sehr kleiner ``herkömmlicher'' WM aufgeführt
		\end{itemize}
	\end{block}
}




\frame{ \frametitle{dwm}
	\begin{block}{Features}
		\begin{itemize}
			\item minimalistisch, nur das Nötig(st)e
			\item Tagging statt Workspaces
			\item Konfiguration durch Quellcode editieren und neu kompilieren
			\item Quellcode kann an einem Abend verstanden werden
			\item aktive Entwicklung
		\end{itemize}
	\end{block}

	\pause

	\begin{block}{Ziele}
		\begin{itemize}
			\item 2kLOC
			\item portables C
			\item guter Code (Refactoring)
			\item sehr standardkonform (aber: broken apps)
			\item Erweiterung mit Patches
		\end{itemize}
	\end{block}
}




\section{suckless-Projekt}
\frame{ \frametitle{suckless-Projekt}
	\begin{block}{Community}
		\begin{itemize}
			\item http://suckless.org
			\item kleine aktive Community
			\item Patches als fester Bestandteil
			\item Mailingliste ist Pflicht
			\item einfach mitmachen!
		\end{itemize}
	\end{block}

	\pause

	\begin{block}{Mein dwm}
		\begin{itemize}
			\item ein Patchset
			\item http://prog.marmaro.de/dwm-meillo
		\end{itemize}
	\end{block}
}



\part{Abschluss}
\frame{
	\vspace{8ex}
	\centerline{ \huge Abschluss }
}



\section{Soll erfüllt?}
\frame{ \frametitle{Soll erfüllt?}
	Es sollte klar geworden sein, dass man auch ohne X komfortabel arbeiten kann.

	\pause
  \vspace{1em}

	Ich habe Einstiegshilfen gegeben und hoffentlich die ``Angst'' vor der textbasierten Benutzerschnittstelle genommen.
			
	\pause
  \vspace{1em}
		
	Jetzt sollte eigentlich jeder von euch dabei sein, einen Ausflug in die Shell zu planen.
			
	\pause
  \vspace{1em}
		
	Weshalb die Shell wirklich besser ist, als die grafische Oberfläche, das kann man nur für sich selbst herausfinden \dots
}





\section{Zusammenfassung}
\frame{ \frametitle{Zusammenfassung}

	Die Shell ist die grundlegende Kommunikationsschnittstelle zum Rechner.
	Keine GUI ist so mächtig wie die Shell.

	\pause
	\vspace{1em}

	UNIX und die Shell sind wie Yin und Yang.

	\pause
	\vspace{1em}

	Man versteht die Shell erst, wenn man UNIX versteht --- UNIX zu verstehen, heißt seine Philosophie zu verstehen.

	\pause
	\vspace{1em}

	Der entscheidende Teil meines Vortrags ist die UNIX-Philosophie. Versteht man diese, so versteht man was ich meine.
	Findet man aber nicht seinen Weg zu ihr, so wird man kaum verstehen, um was es hier geht.

	\pause
	\vspace{1em}

	Die Konzepte hinter UNIX haben mich vollkommen überzeugt.

	\dots und es war eine der besten Entscheidungen meines Lebens, nach ihnen zu leben!

}




\section{Links}
\frame{ \frametitle{Links auf einen Blick}
	\begin{itemize}
		\item http://dwm.suckless.org (Website des dwm)
		\item http://harmful.cat-v.org/cat-v/ (Website von Uriel)
		\item http://marmaro.de/lue (Mein Computer-Tagebuch)
		\item http://pimpmyshell.de (Projekt von Gregor Oelze)
		\item http://prog.marmaro.de/dwm-meillo (Mein dwm-Patchset)
		\item http://suckless.org (Software which sucks less)
		\item http://www.cs.bell-labs.com/plan9/ (Das bessere UNIX!?)
	\end{itemize}
	
	\pause

	\begin{block}{unbedingt lesen!}
		\textbf{The Command Line --- The Best Newbie Interface}

		{\scriptsize http://osnews.com/story.php/6282/The-Command-Line--The-Best-Newbie-Interface }
	\end{block}
}




\section{Danke}
\frame{% \frametitle{Abschließend}
  \begin{block}{Verwendete Software}
  \begin{itemize}
    \item Debian GNU/Linux
    \item \LaTeX-Beamer und \texttt{pdflatex}
    \item Vim
    \item qiv und ImageMagick
    \item Mercurial
  \end{itemize}
  \end{block}

	\pause

  \begin{block}{}
    \vspace{3ex}
    \centerline{\textbf{Danke für eure Aufmerksamkeit}}
		\vspace{7ex}
  \end{block}

	\pause

	{\scriptsize Den Vortrag gibt's online auf http://marmaro.de/docs \hfill 2007-12-11 }
}


\end{document}
