2 % © 2009 Michael Stapelberg
6 \documentclass[mode=print,paper=screen,style=jefka]{powerdot}
7 \usepackage[utf8]{inputenc}
12 \newcommand{\bs}{\textbackslash}
13 \pdsetup{palette=white}
14 \definecolor{darkblue}{rgb}{0,0,.6}
15 \definecolor{darkred}{rgb}{.6,0,0}
16 \definecolor{darkgreen}{rgb}{0,.6,0}
17 \definecolor{darkgray}{gray}{.3}
18 \definecolor{lightblue}{rgb}{0.97,0.99,1}
21 \lstdefinestyle{colors}{keywordstyle={\bf\color{darkblue}}, commentstyle={\em\color{magenta}}, stringstyle={\color{darkred}},%
22 emphstyle={\color{darkgray}}}
23 \lstnewenvironment{code}{%
24 \lstset{frame=single, basicstyle=\footnotesize\ttfamily, language=C, showstringspaces=false,%
25 style=colors, numbers=left, morekeywords={xcb_get_window_attributes_cookie_t, xcb_map_request_event_t,%
26 xcb_connection_t, xcb_get_window_attributes_reply_t, window_attributes_t},%
27 moreemph={xcb_get_window_attributes_reply, xcb_get_window_attributes_unchecked, manage_window,%
30 \title{i3 - an improved dynamic tiling window manager}
31 \author{sECuRE beim NoName e.V.\\
33 powered by \LaTeX, of course}
37 \begin{slide}{Geschichte}
38 \begin{list}{$\bullet$}{\itemsep=1em}
39 \item<1-> „All window managers suck, this one just sucks less”?
40 \item<2-> Desktop environment vs. window manager (GNOME, KDE, Xfce, …)
41 \item<3-> Stacking (e17, fluxbox, IceWM, fvwm, …) vs Tiling (dwm, wmii, xmonad, …)
42 \item<4-> dwm, awesome, xmonad, …: statisches Layout
43 \item<5-> wmii, ion: dynamisches layout
44 \item<6-> Problem an ion: tuomov (Lizenz, Kommunikation), Config, Look and feel
45 \item<7-> Probleme an wmii: Xinerama-support, Xlib, undokumentierter code, nur Spalten, keine Reihen, Kleinigkeiten (titellose Fenster)
49 \begin{slide}{Screenshots!}
51 Drücken Sie Mod1+2 um diese Demo zu starten.
54 \begin{slide}{Merkmale}
55 \begin{list}{$\bullet$}{\itemsep=1em}
56 \item<1-> gut lesbarer, dokumentierter Code. Dokumentation.
57 \item<2-> XCB anstelle von Xlib
58 \item<3-> Xinerama done right™
59 \item<4-> Spalten und Zeilen
60 \item<5-> command-mode, wie in vim
62 \item<7-> kein Antialiasing, schlank und schnell bleiben
66 \begin{slide}{Typische Kommunikation mit X}
67 \begin{list}{$\bullet$}{\itemsep=1em}
68 \item<1-> Verbindung aufbauen
69 \item<2-> Requests über die Leitung schicken (Fenster erzeugen)
70 \item<3-> Eventloop starten, reagieren (Fenster zeichnen, Eingaben, …)
74 \begin{slide}{Was genau macht ein WM?}
75 \begin{list}{$\bullet$}{\itemsep=1em}
76 \item<1-> Events umlenken
77 \item<2-> Neue Fenster anzeigen/positionieren (MapRequest)
78 \item<3-> Titelleisten malen (reparenting)
79 \item<4-> Den Fokus verwalten
80 \item<5-> Mit Hints umgehen (Fenstertitel, Fullscreen, Dock, …)
81 \item<6-> Auf Benutzereingaben reagieren
85 \begin{slide}{Was an X toll ist}
86 \begin{list}{$\bullet$}{\itemsep=1em}
87 \item<1-> Man hat an Window Manager gedacht (Mac OS X *hust*)
88 \item<2-> Netzwerk-transparent (debugging, xtrace)
89 \item<3-> Das Protokoll ist gut designed (Extensions möglich, simpel)
93 \begin{slide}[method=direct]{Protokoll, Beispielcode}
95 int handle_map_request(void *prophs, xcb_connection_t *conn,
96 xcb_map_request_event_t *event) {
97 xcb_get_window_attributes_cookie_t cookie;
98 xcb_get_window_attributes_reply_t *reply;
100 cookie = xcb_get_window_attributes_unchecked(conn, event->window);
102 if ((reply = xcb_get_window_attributes_reply(conn, cookie, NULL))
104 LOG("Could not get window attributes\n");
108 window_attributes_t wa = { TAG_VALUE };
109 wa.u.override_redirect = reply->override_redirect;
111 add_ignore_event(event->sequence);
113 manage_window(prophs, conn, event->window, wa);
120 \begin{slide}{Was an X nicht so toll ist}
121 \begin{list}{$\bullet$}{\itemsep=1em}
122 \item<1-> Einige race conditions vorhanden
123 \item<2-> Man kann nicht fein genug angeben, welche Events man gerne hätte
124 \item<3-> Xlib ist ziemlich eklig, aber es gibt ja xcb
125 \item<4-> Bugs: Keyboard state wird nicht richtig übermittelt
126 \item<5-> Ich empfehle auch: „Why X is not our ideal window system” \url{http://www.std.org/~msm/common/WhyX.pdf}
131 \begin{list}{$\bullet$}{\itemsep=1em}
132 \item \url{http://xcb.freedesktop.org/}
133 \item<1-> „X-protocol C-language Binding”
134 \item<2-> Klein, wartbar (aus einer Protokollbeschreibung auto-generiert)
135 \item<3-> Sinnvoll benannte Funktionsnamen und Datentypen
136 \item<4-> Threadsafe (nicht dass wir das bräuchten, aber…)
137 \item<5-> Nutzt die Asynchronität von X aus
138 \item<6-> Dokumentation? Ne, das ist was für Anfänger.
139 \item<7-> xcb-util: XCB noch mal ein bisschen gekapselt, nützliche Funktionen abstrahiert
144 \begin{list}{$\bullet$}{\itemsep=1em}
145 \item<1-> „X FreeType”, library um antialiased fonts zu benutzen
146 \item<2-> Benutzt man am besten mit Pango (rendert fonts) und Cairo
147 \item<3-> Keine Möglichkeit, pixel fonts zu benutzen („x core fonts”)
148 \item<4-> Was macht man (urxvt) also? Beide APIs benutzen, fallback fonts
149 \item<5-> Was machen wir (i3)? misc-fixed-*-iso10646!\\
150 ISO 10646 = Universal Character Set, selbe Zeichen wie Unicode
151 \item<6-> Fontconfig/xft soll wohl x core fonts ablösen :-(
155 \begin{slide}{Ein paar Zahlen}
156 \begin{list}{$\bullet$}{\itemsep=1em}
157 \item<1-> 6118 Zeilen Code, Dokumentation, Website, READMEs
158 \item<2-> \~{} 2800 Zeilen Sourcecode
159 \item<3-> 73 KB groß (ohne debug symbols)
163 \begin{slide}{Benutzen}
164 \begin{list}{$\bullet$}{\itemsep=1em}
165 \item git clone \url{git://code.stapelberg.de/i3}
166 \item Debian: cd i3; dpkg-buildpackage; sudo dpkg -i ../i3-wm*deb
167 \item non-Debian: cd i3; cat DEPENDS; make; sudo make install
168 \item in \~{}/.xsession: exec /usr/bin/i3
169 \item Siehe manpage i3(1)
173 \begin{slide}{Mehr infos}
174 \begin{list}{$\bullet$}{\itemsep=1em}
175 \item git-webinterface: \url{http://code.stapelberg.de/git/i3}
176 \item Website: \url{http://i3.zekjur.net}
177 \item IRC: \#i3 auf irc.twice-irc.de