% @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{}

\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.
}





%  \centerline{ \includegraphics[width=20em]{pics/observer_big.png} }



\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}
}





\section{Die UNIX-Philosophie}
\frame{ \frametitle{Die UNIX-Philosophie}
  \begin{block}{}
		DER Grund UNIX$^{\dagger}$ 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 
			\item http://cat-v.org
			\item Rob Pike
		\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}

	\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 Aber CURSES gehört 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}
}






\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 (nicht in Debian)
		\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 Reimplementierung von irssi
			\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 den 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 Unersetzbares Tool für Shelluser
			\item \dots
			\item Debian-Paket: 590k
		\end{itemize}
	\end{block}
%
%	\pause
%
%	\begin{block}{Alternativen}
%		\begin{itemize}
%			\item keine bekannt
%		\end{itemize}
%	\end{block}
}



\subsection{Window-Manager}
\frame{ \frametitle{Window-Manager}
	\begin{block}{dwm}
		\begin{itemize}
			\item dynamic window manager
			\item seit September 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 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}
}




\section{Soll erfüllt?}
\frame{ \frametitle{Soll erfüllt?}
	Ich habe gezeigt, 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 eigentlich nur jeder für sich selbst herausfinden \dots indem man in ihr lebt.
}





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

	\pause
	\vspace{1em}

}




\section{Links}
\frame{ \frametitle{Links auf einen Blick}
	\begin{itemize}
		\item http://suckless.org
		\item http://pimpmyshell.de (Projekt von Gregor Oelze)
		\item http://cat-v.org (Website von Uriel)
		\item http://marmaro.de/lue
		\item http://prog.marmaro.de/dwm-meillo
		\item 
		\item 
	\end{itemize}
}




\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}

	{ \tiny $\dagger$ UNIX is a registered trademark of The Open Group. }

	\pause

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


\end{document}
