]> git.sur5r.net Git - i3/i3/blob - docs/NoName-2009-03-12/i3.tex
Add some code to the presentation
[i3/i3] / docs / NoName-2009-03-12 / i3.tex
1 %
2 % © 2009 Michael Stapelberg
3 %
4 % 2009-03-12
5 %
6 \documentclass[mode=print,paper=screen,style=jefka]{powerdot}
7 \usepackage[utf8]{inputenc}
8 \usepackage{graphicx}
9 \usepackage{ngerman}
10 \usepackage{url}
11 \usepackage{listings}
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}
19
20 \lstloadlanguages{C}
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,%
28                 add_ignore_event}}
29 }{}
30 \title{i3 - an improved dynamic tiling window manager}
31 \author{sECuRE beim NoName e.V.\\
32 ~\\
33 powered by \LaTeX, of course}
34 \begin{document}
35 \maketitle
36
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)
46 \end{list}
47 \end{slide}
48
49 \begin{slide}{Screenshots!}
50 \centering
51 Drücken Sie Mod1+2 um diese Demo zu starten.
52 \end{slide}
53
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
61         \item<6-> UTF-8 clean
62         \item<7-> kein Antialiasing, schlank und schnell bleiben
63 \end{list}
64 \end{slide}
65
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, …)
71 \end{list}
72 \end{slide}
73
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
82 \end{list}
83 \end{slide}
84
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)
90 \end{list}
91 \end{slide}
92
93 \begin{slide}[method=direct]{Protokoll, Beispielcode}
94 \begin{code}
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;
99
100   cookie = xcb_get_window_attributes_unchecked(conn, event->window);
101
102   if ((reply = xcb_get_window_attributes_reply(conn, cookie, NULL))
103       == NULL) {
104           LOG("Could not get window attributes\n");
105           return -1;
106   }
107
108   window_attributes_t wa = { TAG_VALUE };
109   wa.u.override_redirect = reply->override_redirect;
110
111   add_ignore_event(event->sequence);
112
113   manage_window(prophs, conn, event->window, wa);
114
115   return 1;
116 }
117 \end{code}
118 \end{slide}
119
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}
127 \end{list}
128 \end{slide}
129
130 \begin{slide}{XCB}
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
140 \end{list}
141 \end{slide}
142
143 \begin{slide}{Xft}
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 :-(
152 \end{list}
153 \end{slide}
154
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)
160 \end{list}
161 \end{slide}
162
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)
170 \end{list}
171 \end{slide}
172
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
178 \end{list}
179 \end{slide}
180
181 \end{document}