Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Added current collection to recover from SVN-repo break.

  • Loading branch information...
commit f15c976700a14d3687cc33cdc0f5b36b8ee22e81 0 parents
@whiteinge authored
Showing with 14,059 additions and 0 deletions.
  1. +282 −0 oalug_2007-08-25_zsh/presentation.txt
  2. BIN  oalug_2007-08-25_zsh/ui/default/blank.gif
  3. BIN  oalug_2007-08-25_zsh/ui/default/bodybg.gif
  4. +23 −0 oalug_2007-08-25_zsh/ui/default/framing.css
  5. +42 −0 oalug_2007-08-25_zsh/ui/default/iepngfix.htc
  6. +7 −0 oalug_2007-08-25_zsh/ui/default/opera.css
  7. +15 −0 oalug_2007-08-25_zsh/ui/default/outline.css
  8. +86 −0 oalug_2007-08-25_zsh/ui/default/pretty.css
  9. +1 −0  oalug_2007-08-25_zsh/ui/default/print.css
  10. +9 −0 oalug_2007-08-25_zsh/ui/default/s5-core.css
  11. +3 −0  oalug_2007-08-25_zsh/ui/default/slides.css
  12. +552 −0 oalug_2007-08-25_zsh/ui/default/slides.js
  13. +859 −0 oalug_2008-03-29_x-power-tools/presentation.html
  14. +491 −0 oalug_2008-03-29_x-power-tools/presentation.txt
  15. BIN  oalug_2008-03-29_x-power-tools/ui/small-black/blank.gif
  16. +24 −0 oalug_2008-03-29_x-power-tools/ui/small-black/framing.css
  17. +42 −0 oalug_2008-03-29_x-power-tools/ui/small-black/iepngfix.htc
  18. +8 −0 oalug_2008-03-29_x-power-tools/ui/small-black/opera.css
  19. +16 −0 oalug_2008-03-29_x-power-tools/ui/small-black/outline.css
  20. +116 −0 oalug_2008-03-29_x-power-tools/ui/small-black/pretty.css
  21. +24 −0 oalug_2008-03-29_x-power-tools/ui/small-black/print.css
  22. +11 −0 oalug_2008-03-29_x-power-tools/ui/small-black/s5-core.css
  23. +10 −0 oalug_2008-03-29_x-power-tools/ui/small-black/slides.css
  24. +558 −0 oalug_2008-03-29_x-power-tools/ui/small-black/slides.js
  25. +662 −0 oalug_2008-06-28_wine/presentation.html
  26. +388 −0 oalug_2008-06-28_wine/presentation.txt
  27. BIN  oalug_2008-06-28_wine/ui/small-black/blank.gif
  28. +24 −0 oalug_2008-06-28_wine/ui/small-black/framing.css
  29. +42 −0 oalug_2008-06-28_wine/ui/small-black/iepngfix.htc
  30. +8 −0 oalug_2008-06-28_wine/ui/small-black/opera.css
  31. +16 −0 oalug_2008-06-28_wine/ui/small-black/outline.css
  32. +116 −0 oalug_2008-06-28_wine/ui/small-black/pretty.css
  33. +24 −0 oalug_2008-06-28_wine/ui/small-black/print.css
  34. +11 −0 oalug_2008-06-28_wine/ui/small-black/s5-core.css
  35. +10 −0 oalug_2008-06-28_wine/ui/small-black/slides.css
  36. +558 −0 oalug_2008-06-28_wine/ui/small-black/slides.js
  37. +148 −0 oalug_2008-08-26_windowmanagers/presentation.txt
  38. BIN  oalug_2008-08-26_windowmanagers/ui/small-black/blank.gif
  39. +24 −0 oalug_2008-08-26_windowmanagers/ui/small-black/framing.css
  40. +42 −0 oalug_2008-08-26_windowmanagers/ui/small-black/iepngfix.htc
  41. +8 −0 oalug_2008-08-26_windowmanagers/ui/small-black/opera.css
  42. +16 −0 oalug_2008-08-26_windowmanagers/ui/small-black/outline.css
  43. +116 −0 oalug_2008-08-26_windowmanagers/ui/small-black/pretty.css
  44. +24 −0 oalug_2008-08-26_windowmanagers/ui/small-black/print.css
  45. +11 −0 oalug_2008-08-26_windowmanagers/ui/small-black/s5-core.css
  46. +10 −0 oalug_2008-08-26_windowmanagers/ui/small-black/slides.css
  47. +558 −0 oalug_2008-08-26_windowmanagers/ui/small-black/slides.js
  48. +12 −0 oalug_2008-09-30_command-line/presentation.txt
  49. BIN  oalug_2008-09-30_command-line/ui/small-black/blank.gif
  50. +24 −0 oalug_2008-09-30_command-line/ui/small-black/framing.css
  51. +42 −0 oalug_2008-09-30_command-line/ui/small-black/iepngfix.htc
  52. +8 −0 oalug_2008-09-30_command-line/ui/small-black/opera.css
  53. +16 −0 oalug_2008-09-30_command-line/ui/small-black/outline.css
  54. +116 −0 oalug_2008-09-30_command-line/ui/small-black/pretty.css
  55. +24 −0 oalug_2008-09-30_command-line/ui/small-black/print.css
  56. +11 −0 oalug_2008-09-30_command-line/ui/small-black/s5-core.css
  57. +10 −0 oalug_2008-09-30_command-line/ui/small-black/slides.css
  58. +558 −0 oalug_2008-09-30_command-line/ui/small-black/slides.js
  59. +512 −0 oalug_2009-03-31_kernel-compiling/presentation.html
  60. +220 −0 oalug_2009-03-31_kernel-compiling/presentation.txt
  61. BIN  oalug_2009-03-31_kernel-compiling/ui/small-black/blank.gif
  62. +24 −0 oalug_2009-03-31_kernel-compiling/ui/small-black/framing.css
  63. +42 −0 oalug_2009-03-31_kernel-compiling/ui/small-black/iepngfix.htc
  64. +8 −0 oalug_2009-03-31_kernel-compiling/ui/small-black/opera.css
  65. +16 −0 oalug_2009-03-31_kernel-compiling/ui/small-black/outline.css
  66. +116 −0 oalug_2009-03-31_kernel-compiling/ui/small-black/pretty.css
  67. +24 −0 oalug_2009-03-31_kernel-compiling/ui/small-black/print.css
  68. +11 −0 oalug_2009-03-31_kernel-compiling/ui/small-black/s5-core.css
  69. +10 −0 oalug_2009-03-31_kernel-compiling/ui/small-black/slides.css
  70. +558 −0 oalug_2009-03-31_kernel-compiling/ui/small-black/slides.js
  71. +4 −0 oalug_2009-04-28_linux-basics/cutsample
  72. +3 −0  oalug_2009-04-28_linux-basics/fileone
  73. +3 −0  oalug_2009-04-28_linux-basics/filetwo
  74. +970 −0 oalug_2009-04-28_linux-basics/presentation.html
  75. +759 −0 oalug_2009-04-28_linux-basics/presentation.txt
  76. BIN  oalug_2009-04-28_linux-basics/ui/small-black/blank.gif
  77. +24 −0 oalug_2009-04-28_linux-basics/ui/small-black/framing.css
  78. +42 −0 oalug_2009-04-28_linux-basics/ui/small-black/iepngfix.htc
  79. +8 −0 oalug_2009-04-28_linux-basics/ui/small-black/opera.css
  80. +16 −0 oalug_2009-04-28_linux-basics/ui/small-black/outline.css
  81. +116 −0 oalug_2009-04-28_linux-basics/ui/small-black/pretty.css
  82. +24 −0 oalug_2009-04-28_linux-basics/ui/small-black/print.css
  83. +11 −0 oalug_2009-04-28_linux-basics/ui/small-black/s5-core.css
  84. +10 −0 oalug_2009-04-28_linux-basics/ui/small-black/slides.css
  85. +558 −0 oalug_2009-04-28_linux-basics/ui/small-black/slides.js
  86. +30 −0 ssh-tips-tricks/presentation.txt
  87. +601 −0 upyug_2008-04-10_google-app-engine/index.html
  88. +11 −0 upyug_2008-04-10_google-app-engine/my-first-world-domination/app.yaml
  89. +54 −0 upyug_2008-04-10_google-app-engine/my-first-world-domination/helloworld.py
  90. +23 −0 upyug_2008-04-10_google-app-engine/my-first-world-domination/index.html
  91. +17 −0 upyug_2008-04-10_google-app-engine/my-first-world-domination/index.yaml
  92. +4 −0 upyug_2008-04-10_google-app-engine/my-first-world-domination/stylesheets/main.css
  93. +303 −0 upyug_2008-04-10_google-app-engine/presentation.txt
  94. BIN  upyug_2008-04-10_google-app-engine/ui/small-black/blank.gif
  95. +24 −0 upyug_2008-04-10_google-app-engine/ui/small-black/framing.css
  96. +42 −0 upyug_2008-04-10_google-app-engine/ui/small-black/iepngfix.htc
  97. +8 −0 upyug_2008-04-10_google-app-engine/ui/small-black/opera.css
  98. +16 −0 upyug_2008-04-10_google-app-engine/ui/small-black/outline.css
  99. +118 −0 upyug_2008-04-10_google-app-engine/ui/small-black/pretty.css
  100. +24 −0 upyug_2008-04-10_google-app-engine/ui/small-black/print.css
  101. +11 −0 upyug_2008-04-10_google-app-engine/ui/small-black/s5-core.css
  102. +10 −0 upyug_2008-04-10_google-app-engine/ui/small-black/slides.css
  103. +558 −0 upyug_2008-04-10_google-app-engine/ui/small-black/slides.js
  104. +389 −0 utosc_2008-08-30_stupid-django-tricks/presentation.txt
  105. +77 −0 utosc_2008-08-30_stupid-django-tricks/settings_utosdemo.py
  106. BIN  utosc_2008-08-30_stupid-django-tricks/ui/small-black/blank.gif
  107. +24 −0 utosc_2008-08-30_stupid-django-tricks/ui/small-black/framing.css
  108. +42 −0 utosc_2008-08-30_stupid-django-tricks/ui/small-black/iepngfix.htc
  109. +8 −0 utosc_2008-08-30_stupid-django-tricks/ui/small-black/opera.css
  110. +16 −0 utosc_2008-08-30_stupid-django-tricks/ui/small-black/outline.css
  111. +123 −0 utosc_2008-08-30_stupid-django-tricks/ui/small-black/pretty.css
  112. +24 −0 utosc_2008-08-30_stupid-django-tricks/ui/small-black/print.css
  113. +11 −0 utosc_2008-08-30_stupid-django-tricks/ui/small-black/s5-core.css
  114. +10 −0 utosc_2008-08-30_stupid-django-tricks/ui/small-black/slides.css
  115. +558 −0 utosc_2008-08-30_stupid-django-tricks/ui/small-black/slides.js
  116. +9 −0 utosc_2008-08-30_stupid-django-tricks/urls_utosdemo.py
  117. +1 −0  utosc_2008-08-30_stupid-django-tricks/utosapp/__init__.py
  118. +8 −0 utosc_2008-08-30_stupid-django-tricks/utosapp/models.py
282 oalug_2007-08-25_zsh/presentation.txt
@@ -0,0 +1,282 @@
+===========
+Why Z shell
+===========
+
+:Author: Seth House
+
+---------------
+A Short History
+---------------
+
+* Written in 1990 by Paul Falstad at Princeton University
+* Named for the login of a teaching assistant, Zhong Shao
+* Implements many of the features of bash, ksh, and csh
+
+------
+Basics
+------
+
+* ``~/.zprofile``
+* ``~/.zshrc``
+* ``~/.zlogin``
+* ``~/.zlogout``
+
+*Everything* is configurable.
+
+``man zsh`` vs. ``man zshall``
+
+-------------------
+The Emacs of Shells
+-------------------
+
+* Tetris
+* IRC client
+* Web server
+* Check multiple mailboxes
+
+-------------------
+Compatibility Modes
+-------------------
+
+Tries to emulate *sh* or *ksh* when invoked as ``sh`` or ``ksh``, respectively.
+
+-----------------
+Themeable Prompts
+-----------------
+
+Some built-in themes, others can be created.
+
+Preview all built-in themes::
+
+ prompt -p
+
+-------------
+Shell Options
+-------------
+
+http://zsh.sunsite.dk/Doc/Release/zsh_15.html
+
+Some of my favorites
+
+* ``auto_cd``
+* ``extendedglob``
+* ``no_clobber``
+* ``rm_star_wait``
+* ``share_history``
+
+--------------
+Spell Checking
+--------------
+
+``zsh: correct 'aptg-et' to 'apt-get' [nyae]?``
+
+---------------
+Zsh Line Editor
+---------------
+
+* **Zsh does not use readline!**
+* Excellent Multiline Editing
+
+----------------
+Pattern Matching
+----------------
+
+Recursive Search
+ ``**/``
+Numeric Ranges
+ ``ls file<1-5>``, ``ls file<50->``
+Negate Matches
+ ``ls ^*.o``
+Grouping
+ ``ls (foo|bar)``
+
+---------------
+Globbing Basics
+---------------
+
+Regular Files
+ ``ls *(.)``
+Irregular Files
+ ``ls *(^.)``
+Directories
+ ``ls *(/)``
+Executable Files (non-directories)
+ ``ls *(*)``
+Symbolic Links
+ ``ls *(@)``
+Follows Symbolic Links
+ ``ls *(-)``
+
+-----------------------
+Globbing by Permissions
+-----------------------
+
+Current user
+ ``(r)``, ``(w)``, ``(x)``
+All users
+ ``(R)``, ``(W)``, ``(X)``
+Owned by you
+ ``(U)``
+Setuid
+ ``(s)``
+
+--------
+
+All setuid files on your system::
+
+ ls /**/*(s)
+
+---------------------
+Globbing Combinations
+---------------------
+
+Readable, not writable for you::
+
+ ls *(r^w)
+
+Executable files (after following symbolic links)::
+
+ ls *(-*)
+
+Broken Symbolic Links::
+
+ rm *(-@)
+
+---------------------
+Globbing by File Size
+---------------------
+
+File Size qualifier: ``(L)`` (length)
+
+Default unit is bytes, modifiers include
+ ``k`` kilobytes, ``m`` megabytes
+
+--------
+
+Files over 100 KB::
+
+ ls *(Lk+100)
+
+----------------------
+Globbing by Timestamps
+----------------------
+
+Time qualifiers: ``(m)`` modified, ``(a)`` last accessed, or ``(c)`` changed
+
+Default unit is days, modifiers include:
+ ``M`` months, ``w`` weeks, ``h`` hours, ``m`` minutes, ``s`` seconds
+
+--------
+
+File modified within the last two hours::
+
+ ls *(mh+2)
+
+File modified between one and four days ago::
+
+ ls *(m-4m+1)
+
+----------------------------------
+Globbing Qualifiers with Arguments
+----------------------------------
+
+File owners
+ ``(u:username:)``
+File permissions (complicated)
+ ``(f:chmod-options:)``
+
+--------
+
+Files not owned by root::
+
+ ls *(^u:root:)
+
+Files that are group readable and writable, but not readable, writeable, or
+executable by others::
+
+ ls *(f:g+rw,o-rwx:)
+
+--------------
+Alias Suffixes
+--------------
+
+Allow for default handlers based on file extensions::
+
+ alias -s php="/opt/local/share/vim/vim71/macros/less.sh"
+
+--------------
+Global Aliases
+--------------
+
+Examples::
+
+ alias -g H='| head'
+ alias -g T='| tail'
+ alias -g NUL="> /dev/null 2>&1"
+
+Global aliases can be anywhere in a command::
+
+ cat somefile T
+
+----------
+Completion
+----------
+
+* compinit
+* compinstall
+* bashcompinit
+
+Completion style syntax::
+
+ :completion:function:completer:command:argument:tag
+
+Known hosts example::
+
+ zstyle -e ':completion:*:(ssh|scp|sshfs|ping|telnet|ftp):*'\
+ hosts 'reply=(${=${${(f)"$(cat\
+ {/etc/ssh_,$HOME/.ssh/known_}hosts(|2)(N)\
+ /dev/null)"}%%[# ]*}//,/ })'
+
+------------------
+Completion Caching
+------------------
+
+Cache expensive completions::
+
+ zstyle ':completion:*' use-cache on
+ zstyle ':completion:*' cache-path ~/.zsh/cache
+
+------------------
+Completion Sorting
+------------------
+
+Sort specific completions::
+
+ zstyle ':completion:*:*:xdvi:*' menu yes select
+ zstyle ':completion:*:*:xdvi:*' file-sort time
+
+---------------------
+Completion Menu Demos
+---------------------
+
+``ls``::
+
+ oalug_demo1()
+ ls -<tab><tab>
+
+``kill``::
+
+ kill <tab>
+
+``chmod``::
+
+ chmod <tab>
+
+---------
+Resources
+---------
+
+* http://zsh.org/
+* http://zshwiki.org/
+
+.. vim:filetype=rst foldmethod=expr foldtext=foldtext()[0\:match(foldtext(),'\:')].'\ '.getline(v\:foldstart+1) foldexpr=getline(v\:lnum)=~'^-\\+$'&&getline(v\:lnum+1)=~'^\\w\\+.*$'&&getline(v\:lnum+2)=~'^-\\+$'?'>1'\:1
BIN  oalug_2007-08-25_zsh/ui/default/blank.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  oalug_2007-08-25_zsh/ui/default/bodybg.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
23 oalug_2007-08-25_zsh/ui/default/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
42 oalug_2007-08-25_zsh/ui/default/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component>
7 oalug_2007-08-25_zsh/ui/default/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
15 oalug_2007-08-25_zsh/ui/default/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
86 oalug_2007-08-25_zsh/ui/default/pretty.css
@@ -0,0 +1,86 @@
+/* Following are the presentation styles -- edit away! */
+
+body {background: #FFF url(bodybg.gif) -16px 0 no-repeat; color: #000; font-size: 2em;}
+:link, :visited {text-decoration: none; color: #00C;}
+#controls :active {color: #88A !important;}
+#controls :focus {outline: 1px dotted #227;}
+h1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;}
+ul, pre {margin: 0; line-height: 1em;}
+html, body {margin: 0; padding: 0;}
+
+blockquote, q {font-style: italic;}
+blockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;}
+blockquote p {margin: 0;}
+blockquote i {font-style: normal;}
+blockquote b {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;}
+blockquote b i {font-style: italic;}
+
+kbd {font-weight: bold; font-size: 1em;}
+sup {font-size: smaller; line-height: 1px;}
+
+.slide code {padding: 2px 0.25em; font-weight: bold; color: #533;}
+.slide code.bad, code del {color: red;}
+.slide code.old {color: silver;}
+.slide pre {padding: 0; margin: 0.25em 0 0.5em 0.5em; color: #533; font-size: 90%;}
+.slide pre code {display: block;}
+.slide ul {margin-left: 5%; margin-right: 7%; list-style: disc;}
+.slide li {margin-top: 0.75em; margin-right: 0;}
+.slide ul ul {line-height: 1;}
+.slide ul ul li {margin: .2em; font-size: 85%; list-style: square;}
+.slide img.leader {display: block; margin: 0 auto;}
+
+div#header, div#footer {background: #005; color: #AAB;
+ font-family: Verdana, Helvetica, sans-serif;}
+div#header {background: #005 url(bodybg.gif) -16px 0 no-repeat;
+ line-height: 1px;}
+div#footer {font-size: 0.5em; font-weight: bold; padding: 1em 0;}
+#footer h1, #footer h2 {display: block; padding: 0 1em;}
+#footer h2 {font-style: italic;}
+
+div.long {font-size: 0.75em;}
+.slide h1 {position: absolute; top: 0.7em; left: 87px; z-index: 1;
+ margin: 0; padding: 0.3em 0 0 50px; white-space: nowrap;
+ font: bold 150%/1em Helvetica, sans-serif; text-transform: capitalize;
+ color: #DDE; background: #005;}
+.slide h3 {font-size: 130%;}
+h1 abbr {font-variant: small-caps;}
+
+div#controls {position: absolute; left: 50%; bottom: 0;
+ width: 50%;
+ text-align: right; font: bold 0.9em Verdana, Helvetica, sans-serif;}
+html>body div#controls {position: fixed; padding: 0 0 1em 0;
+ top: auto;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0; padding: 0;}
+#controls #navLinks a {padding: 0; margin: 0 0.5em;
+ background: #005; border: none; color: #779;
+ cursor: pointer;}
+#controls #navList {height: 1em;}
+#controls #navList #jumplist {position: absolute; bottom: 0; right: 0; background: #DDD; color: #227;}
+
+#currentSlide {text-align: center; font-size: 0.5em; color: #449;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0;
+ font: bold 2em Helvetica, sans-serif; white-space: normal;
+ color: #000; background: transparent;}
+#slide0 h2 {font: bold italic 1em Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.note {display: none;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #77B;}
+
+.incremental, .incremental *, .incremental *:after {color: #DDE; visibility: visible;}
+img.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+
+/* diagnostics
+
+li:after {content: " [" attr(class) "]"; color: #F88;}
+ */
1  oalug_2007-08-25_zsh/ui/default/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */
9 oalug_2007-08-25_zsh/ui/default/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
3  oalug_2007-08-25_zsh/ui/default/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */
552 oalug_2007-08-25_zsh/ui/default/slides.js
@@ -0,0 +1,552 @@
+// S5 v1.1 slides.js -- released into the Public Domain
+//
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var s5mode = true;
+var defaultView = 'slideshow';
+var controlVis = 'visible';
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ if (isOp) continue;
+
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ cs.innerHTML = '<span id="csHere">' + snum + '<\/span> ' +
+ '<span id="csSep">\/<\/span> ' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>';
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ var jl = document.getElementById('jumplist');
+ var cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ } else
+ snum = parseInt(jl.value);
+ var nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ snum = 0;
+ }
+ if (step < 0) {incpos = incrementals[snum].length} else {incpos = 0;}
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current'))
+ incpos = i + 1;
+ else
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0)
+ addClass(incrementals[snum][incpos - 1], 'current');
+ ce.style.visibility = 'hidden';
+ ne.style.visibility = 'visible';
+ jl.selectedIndex = snum;
+ currentSlide();
+ number = 0;
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos],'current');
+ incpos++;
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ }
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ if (!slides.disabled) {
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize('1em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's': obj.style.visibility = 'visible'; break;
+ case 'h': obj.style.visibility = 'hidden'; break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+// 'keys' code adapted from MozPoint (http://mozpoint.mozdev.org/)
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (key.which == 84) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ switch (key.which) {
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 36: // home
+ goTo(0);
+ break;
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else target = e.target;
+ if (target.getAttribute('href') != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ controlsDiv.innerHTML = '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks">' +
+ '<a accesskey="t" id="toggle" href="javascript:toggle();">&#216;<\/a>' +
+ '<a accesskey="z" id="prev" href="javascript:go(-1);">&laquo;<\/a>' +
+ '<a accesskey="x" id="next" href="javascript:go(1);">&raquo;<\/a>' +
+ '<div id="navList"' + hideList + '><select id="jumplist" onchange="go(\'j\');"><\/select><\/div>' +
+ '<\/div><\/form>';
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode) return false;
+ var vScale = 22; // both yield 32 (after rounding) at 1024x768
+ var hScale = 32; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ fontSize(newSize + 'px');
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ }
+}
+
+function fontSize(value) {
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!isIE) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!isIE) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('body {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('body','font-size: ' + value + ' !important;');
+ }
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if (isIE && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url(ui/default/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url(ui/default/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url(ui/default/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ }
+}
+
+// Key trap fix, new function body for trap()
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+function startup() {
+ defaultCheck();
+ if (!isOp) createControls();
+ slideLabel();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ notOperaFix();
+ incrementals = createIncrementals();
+ slideJump();
+ if (defaultView == 'outline') {
+ toggle();
+ }
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+ }
+}
+
+window.onload = startup;
+window.onresize = function(){setTimeout('fontScale()', 50);}
859 oalug_2008-03-29_x-power-tools/presentation.html
@@ -0,0 +1,859 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" />
+<meta name="version" content="S5 1.1" />
+<title>Ogden Area Linux User Group</title>
+<style type="text/css">
+
+/*
+:Author: David Goodger
+:Contact: goodger@users.sourceforge.net
+:Date: $Date: 2005-12-18 01:56:14 +0100 (Sun, 18 Dec 2005) $
+:Revision: $Revision: 4224 $
+:Copyright: This stylesheet has been placed in the public domain.
+
+Default cascading style sheet for the HTML output of Docutils.
+
+See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
+customize this style sheet.
+*/
+
+/* used to remove borders from tables and images */
+.borderless, table.borderless td, table.borderless th {
+ border: 0 }
+
+table.borderless td, table.borderless th {
+ /* Override padding for "table.docutils td" with "! important".
+ The right padding separates the table cells. */
+ padding: 0 0.5em 0 0 ! important }
+
+.first {
+ /* Override more specific margin styles with "! important". */
+ margin-top: 0 ! important }
+
+.last, .with-subtitle {
+ margin-bottom: 0 ! important }
+
+.hidden {
+ display: none }
+
+a.toc-backref {
+ text-decoration: none ;
+ color: black }
+
+blockquote.epigraph {
+ margin: 2em 5em ; }
+
+dl.docutils dd {
+ margin-bottom: 0.5em }
+
+/* Uncomment (and remove this text!) to get bold-faced definition list terms
+dl.docutils dt {
+ font-weight: bold }
+*/
+
+div.abstract {
+ margin: 2em 5em }
+
+div.abstract p.topic-title {
+ font-weight: bold ;
+ text-align: center }
+
+div.admonition, div.attention, div.caution, div.danger, div.error,
+div.hint, div.important, div.note, div.tip, div.warning {
+ margin: 2em ;
+ border: medium outset ;
+ padding: 1em }
+
+div.admonition p.admonition-title, div.hint p.admonition-title,
+div.important p.admonition-title, div.note p.admonition-title,
+div.tip p.admonition-title {
+ font-weight: bold ;
+ font-family: sans-serif }
+
+div.attention p.admonition-title, div.caution p.admonition-title,
+div.danger p.admonition-title, div.error p.admonition-title,
+div.warning p.admonition-title {
+ color: red ;
+ font-weight: bold ;
+ font-family: sans-serif }
+
+/* Uncomment (and remove this text!) to get reduced vertical space in
+ compound paragraphs.
+div.compound .compound-first, div.compound .compound-middle {
+ margin-bottom: 0.5em }
+
+div.compound .compound-last, div.compound .compound-middle {
+ margin-top: 0.5em }
+*/
+
+div.dedication {
+ margin: 2em 5em ;
+ text-align: center ;
+ font-style: italic }
+
+div.dedication p.topic-title {
+ font-weight: bold ;
+ font-style: normal }
+
+div.figure {
+ margin-left: 2em ;
+ margin-right: 2em }
+
+div.footer, div.header {
+ clear: both;
+ font-size: smaller }
+
+div.line-block {
+ display: block ;
+ margin-top: 1em ;
+ margin-bottom: 1em }
+
+div.line-block div.line-block {
+ margin-top: 0 ;
+ margin-bottom: 0 ;
+ margin-left: 1.5em }
+
+div.sidebar {
+ margin-left: 1em ;
+ border: medium outset ;
+ padding: 1em ;
+ background-color: #ffffee ;
+ width: 40% ;
+ float: right ;
+ clear: right }
+
+div.sidebar p.rubric {
+ font-family: sans-serif ;
+ font-size: medium }
+
+div.system-messages {
+ margin: 5em }
+
+div.system-messages h1 {
+ color: red }
+
+div.system-message {
+ border: medium outset ;
+ padding: 1em }
+
+div.system-message p.system-message-title {
+ color: red ;
+ font-weight: bold }
+
+div.topic {
+ margin: 2em }
+
+h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
+h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
+ margin-top: 0.4em }
+
+h1.title {
+ text-align: center }
+
+h2.subtitle {
+ text-align: center }
+
+hr.docutils {
+ width: 75% }
+
+img.align-left {
+ clear: left }
+
+img.align-right {
+ clear: right }
+
+ol.simple, ul.simple {
+ margin-bottom: 1em }
+
+ol.arabic {
+ list-style: decimal }
+
+ol.loweralpha {
+ list-style: lower-alpha }
+
+ol.upperalpha {
+ list-style: upper-alpha }
+
+ol.lowerroman {
+ list-style: lower-roman }
+
+ol.upperroman {
+ list-style: upper-roman }
+
+p.attribution {
+ text-align: right ;
+ margin-left: 50% }
+
+p.caption {
+ font-style: italic }
+
+p.credits {
+ font-style: italic ;
+ font-size: smaller }
+
+p.label {
+ white-space: nowrap }
+
+p.rubric {
+ font-weight: bold ;
+ font-size: larger ;
+ color: maroon ;
+ text-align: center }
+
+p.sidebar-title {
+ font-family: sans-serif ;
+ font-weight: bold ;
+ font-size: larger }
+
+p.sidebar-subtitle {
+ font-family: sans-serif ;
+ font-weight: bold }
+
+p.topic-title {
+ font-weight: bold }
+
+pre.address {
+ margin-bottom: 0 ;
+ margin-top: 0 ;
+ font-family: serif ;
+ font-size: 100% }
+
+pre.literal-block, pre.doctest-block {
+ margin-left: 2em ;
+ margin-right: 2em ;
+ background-color: #eeeeee }
+
+span.classifier {
+ font-family: sans-serif ;
+ font-style: oblique }
+
+span.classifier-delimiter {
+ font-family: sans-serif ;
+ font-weight: bold }
+
+span.interpreted {
+ font-family: sans-serif }
+
+span.option {
+ white-space: nowrap }
+
+span.pre {
+ white-space: pre }
+
+span.problematic {
+ color: red }
+
+span.section-subtitle {
+ /* font-size relative to parent (h1..h6 element) */
+ font-size: 80% }
+
+table.citation {
+ border-left: solid 1px gray;
+ margin-left: 1px }
+
+table.docinfo {
+ margin: 2em 4em }
+
+table.docutils {
+ margin-top: 0.5em ;
+ margin-bottom: 0.5em }
+
+table.footnote {
+ border-left: solid 1px black;
+ margin-left: 1px }
+
+table.docutils td, table.docutils th,
+table.docinfo td, table.docinfo th {
+ padding-left: 0.5em ;
+ padding-right: 0.5em ;
+ vertical-align: top }
+
+table.docutils th.field-name, table.docinfo th.docinfo-name {
+ font-weight: bold ;
+ text-align: left ;
+ white-space: nowrap ;
+ padding-left: 0 }
+
+h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
+h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
+ font-size: 100% }
+
+tt.docutils {
+ background-color: #eeeeee }
+
+ul.auto-toc {
+ list-style-type: none }
+
+</style>
+<!-- configuration parameters -->
+<meta name="defaultView" content="slideshow" />
+<meta name="controlVis" content="hidden" />
+<!-- style sheet links -->
+<script src="ui/small-black/slides.js" type="text/javascript"></script>
+<link rel="stylesheet" href="ui/small-black/slides.css"
+ type="text/css" media="projection" id="slideProj" />
+<link rel="stylesheet" href="ui/small-black/outline.css"
+ type="text/css" media="screen" id="outlineStyle" />
+<link rel="stylesheet" href="ui/small-black/print.css"
+ type="text/css" media="print" id="slidePrint" />
+<link rel="stylesheet" href="ui/small-black/opera.css"
+ type="text/css" media="projection" id="operaFix" />
+
+<style type="text/css">
+#currentSlide {display: none;}
+</style>
+</head>
+<body>
+<div class="layout">
+<div id="controls"></div>
+<div id="currentSlide"></div>
+<div id="header">
+
+</div>
+<div id="footer">
+<h1>Ogden Area Linux User Group</h1>
+<h2>X Power Tools (O'Reilly, 0-596-10195-3)</h2>
+</div>
+</div>
+<div class="presentation">
+<div class="slide" id="slide0">
+<h1 class="title">Ogden Area Linux User Group</h1>
+
+</div>
+<div class="slide" id="book-review-x-power-tools">
+<h1>Book Review: X Power Tools</h1>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field"><th class="field-name">Presenter:</th><td class="field-body">Seth House</td>
+</tr>
+<tr class="field"><th class="field-name">Date:</th><td class="field-body">2008-03-29</td>
+</tr>
+<tr class="field"><th class="field-name">Book:</th><td class="field-body">X Power Tools (O'Reilly)</td>
+</tr>
+<tr class="field"><th class="field-name">ISBN:</th><td class="field-body">0-596-10195-3</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="slide" id="history">
+<h1>History</h1>
+<p class="handout">Version 11 came out in 1987 under the more liberal MIT license, and a
+vendor-neutral group called the X Consortium was formed to oversee
+development. Vendors used X11 sample code a starting point, then tuned
+specific versions for their specific needs and hardware.</p>
+<p class="handout">In 1992 a particular implementation, X386, became popular. When it went
+commercial, a free version was created called XFree86. Most X innovations
+came from the XFree86 project over the next several years.</p>
+<p class="handout">Starting around 1996, development stagnated for nearly four years due to
+internal politics and rigidity in the organization.</p>
+<p class="handout">Control of X passed from group to group. In 1999 it was passed to The Open
+Group who formed X.org.</p>
+<p class="handout">Ultimately a license dispute in 2003 caused many key developers to leave
+the project and move to back to the successor to the X Consortium, forming
+the X.org Foundation. Development has been fast-paced since then.</p>
+<p class="incremental">X was born in 1984 at MIT.</p>
+<ul class="incremental simple">
+<li>1987 — Version 11</li>
+<li>1992 — X386 became popular, gave rise to XFree86</li>
+<li>1996 — <cite>zzz</cite></li>
+<li>1999 — X.org formed</li>
+<li>2003 — Mass exodus to X.org</li>
+</ul>
+</div>
+<div class="slide" id="old-x-vs-new-x">
+<h1>Old X vs. New X</h1>
+</div>
+<div class="slide" id="old-x-1984-1996">
+<h1>Old X (1984-1996)</h1>
+<ul class="simple">
+<li>Core protocol development</li>
+<li>Essential extensions</li>
+<li>Xt-based toolkits</li>
+</ul>
+</div>
+<div class="slide" id="new-x-2000-present">
+<h1>New X (2000-present)</h1>
+<p class="handout">You may have noticed X.org packages in your distro recently got small and
+numerous. This modularizing of X is a good thing that allows you to
+selectivly upgrade or change parts of X without having to recompile the
+whole thing (which is not for the feint of heart).</p>
+<ul class="simple">
+<li>RENDER extension (2000)</li>
+<li>Xft</li>
+<li>OpenGL</li>
+<li>COMPOSE</li>
+<li>non-Xt toolkits (GTK and qt)</li>
+</ul>
+</div>
+<div class="slide" id="the-name-check-the-manpage">
+<h1>The Name (Check the manpage!)</h1>
+<div class="sidebar">
+<p class="first sidebar-title">nübs</p>
+<p class="last">“X Windows” is generally considered used only by beginners, and is frowned
+on due to possible confusion with Microsoft Windows.</p>
+</div>
+<ul class="incremental simple">
+<li>X</li>
+<li>X11</li>
+<li>X Window System</li>
+<li>X Version 11</li>
+<li>X Window System, Version 11</li>
+</ul>
+<p class="incremental">Nowadays “Xorg” or “X dot org” is also acceptable.</p>
+</div>
+<div class="slide" id="terminology">
+<h1>Terminology</h1>
+<div class="sidebar">
+<p class="first sidebar-title">Note</p>
+<p class="last">The terminology gets tricky if a user has multiple video cards or monitors
+using Xinerama</p>
+</div>
+<dl class="docutils">
+<dt>Display</dt>
+<dd>Generally, the user interface for one person. Keyboard, pointer, video
+card, and monitor.</dd>
+<dt>Device</dt>
+<dd>Video card</dd>
+<dt>Screen</dt>
+<dd>Video card and monitor</dd>
+</dl>
+</div>
+<div class="slide" id="display-specification">
+<h1>Display Specification</h1>
+<code>host:display[.screen]</code><p>Set the <tt class="docutils literal"><span class="pre">$DISPLAY</span></tt> environment variable or pass <tt class="docutils literal"><span class="pre">-display</span></tt> to a client.</p>
+</div>
+<div class="slide" id="id1">
+<h1>Display Specification</h1>
+<code><strong>host</strong>:display[.screen]</code><dl class="docutils">
+<dt>Host</dt>
+<dd><ul class="first last simple">
+<li>A DNS hostname or IP address</li>
+<li>Blank, or the word <tt class="docutils literal"><span class="pre">unix</span></tt></li>
+<li>(Rarely) DecNET or IPX/SPX designation</li>
+<li>Open source operating systems use Unix domain sockets for local
+connections</li>
+</ul>
+</dd>
+</dl>
+</div>
+<div class="slide" id="id2">
+<h1>Display Specification</h1>
+<code>host:<strong>display</strong>[.screen]</code><dl class="docutils">
+<dt>Display</dt>
+<dd><ul class="first last simple">
+<li>The display number, starting at 0</li>
+</ul>
+</dd>
+</dl>
+</div>
+<div class="slide" id="id3">
+<h1>Display Specification</h1>
+<code>host:display[.<strong>screen</strong>]</code><dl class="docutils">
+<dt>Screen</dt>
+<dd><ul class="first last simple">
+<li>Optional screen number within the display, starting at 0</li>
+</ul>
+</dd>
+</dl>
+</div>
+<div class="slide" id="server-extensions">
+<h1>Server Extensions</h1>
+<dl class="handout docutils">
+<dt>Composite</dt>
+<dd>Off-screen rendering of windows are combined (composited) into the
+final screen image by hardware under control of a compositing manager.
+During compositing, images can be distorted, blended, and resized which
+makes it easy to add drop shadows, transparency, icons, and thumbnails.</dd>
+<dt>RENDER</dt>
+<dd>Composite images such as Adobe's Flash player or anti-aliased fonts.</dd>
+<dt>DPMS</dt>
+<dd>Displays Power Management Signalling.</dd>
+<dt>GLX</dt>
+<dd>OpenGL extension for X11.</dd>
+<dt>MIT-SCREEN-SAVER</dt>
+<dd>Informs screen savers when to start and stop.</dd>
+<dt>RANDR</dt>
+<dd>Rotate and resize. Notifies clients when the display is changed, and
+allows hot-plugging of monitors.</dd>
+<dt>SHAPE</dt>
+<dd>Enables nonrectangular windows (<tt class="docutils literal"><span class="pre">xeyes</span></tt>).</dd>
+<dt>XKEYBOARD</dt>
+<dd>Enables complex keyboard mapping. The most poorly documented X
+extension.</dd>
+<dt>XINERAMA</dt>
+<dd>Single-screen multimonitor support.</dd>
+<dt>XVideo</dt>
+<dd>Allows video streams to be converted, transformed, and then overlaid on
+the X display. Done with hardware support and can dramatically improve
+video performance.</dd>
+<dt>XVideo-MotionComposition</dt>
+<dd>Utilized hardware support for video decompression—useful for MPEG video
+playback.</dd>
+</dl>
+<table border="1" class="small borderless docutils">
+<colgroup>
+<col width="49%" />
+<col width="51%" />
+</colgroup>
+<tbody valign="top">
+<tr><td><ul class="first last simple">
+<li>Composite</li>
+</ul>
+</td>
+<td><ul class="first last simple">
+<li>RENDER</li>
+</ul>
+</td>
+</tr>
+<tr><td><ul class="first last simple">
+<li>DAMAGE</li>
+</ul>
+</td>
+<td><ul class="first last simple">
+<li>SECURITY</li>
+</ul>
+</td>
+</tr>
+<tr><td><ul class="first last simple">
+<li>DPMS</li>
+</ul>
+</td>
+<td><ul class="first last simple">
+<li>SHAPE</li>
+</ul>
+</td>
+</tr>
+<tr><td><ul class="first last simple">
+<li>GLX</li>
+</ul>
+</td>
+<td><ul class="first last simple">
+<li>SYNC</li>
+</ul>
+</td>
+</tr>
+<tr><td><ul class="first last simple">
+<li>LBX</li>
+</ul>
+</td>
+<td><ul class="first last simple">
+<li>XINERAMA</li>
+</ul>
+</td>
+</tr>
+<tr><td><ul class="first last simple">
+<li>MIT-BIG-REQUESTS</li>
+</ul>
+</td>
+<td><ul class="first last simple">
+<li>XInputExtension</li>
+</ul>
+</td>
+</tr>
+<tr><td><ul class="first last simple">
+<li>MIT-SCREEN-SAVER</li>
+</ul>
+</td>
+<td><ul class="first last simple">
+<li>XKEYBOARD</li>
+</ul>
+</td>
+</tr>
+<tr><td><ul class="first last simple">
+<li>MIT-SHM</li>
+</ul>
+</td>
+<td><ul class="first last simple">
+<li>XTEST</li>
+</ul>
+</td>
+</tr>
+<tr><td><ul class="first last simple">
+<li>RANDR</li>
+</ul>
+</td>
+<td><ul class="first last simple">
+<li>XVideo</li>
+</ul>
+</td>
+</tr>
+<tr><td><ul class="first last simple">
+<li>RECORD</li>
+</ul>
+</td>
+<td><ul class="first last simple">
+<li>XVideo-MotionComposition</li>
+</ul>
+</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="slide" id="starting-a-server-manually">
+<h1>Starting a Server Manually</h1>
+<dl class="incremental docutils">
+<dt><tt class="docutils literal"><span class="pre">X</span> <span class="pre">:1</span> <span class="pre">vt10</span> <span class="pre">-config</span> <span class="pre">CONFIG</span> <span class="pre">-layout</span> <span class="pre">LAYOUT</span></tt></dt>
+<dd><ul class="first last simple">
+<li><tt class="docutils literal"><span class="pre">:1</span></tt></li>
+<li><tt class="docutils literal"><span class="pre">vt10</span></tt></li>
+<li><tt class="docutils literal"><span class="pre">-config</span> <span class="pre">CONFIG</span></tt></li>
+<li><tt class="docutils literal"><span class="pre">-layout</span> <span class="pre">LAYOUT</span></tt></li>
+</ul>
+</dd>
+</dl>
+<p class="incremental"><tt class="docutils literal"><span class="pre">X</span> <span class="pre">:1</span> <span class="pre">-terminate</span> <span class="pre">&amp;</span> <span class="pre">sleep</span> <span class="pre">2;</span> <span class="pre">DISPLAY=:1</span> <span class="pre">xterm</span></tt></p>
+</div>
+<div class="slide" id="using-a-display-manager">
+<h1>Using a Display Manager</h1>
+<p><tt class="docutils literal"><span class="pre">gdm</span></tt>, <tt class="docutils literal"><span class="pre">kdm</span></tt>, or <tt class="docutils literal"><span class="pre">xdm</span></tt></p>
+<ul class="incremental simple">
+<li>Usually runlevel 5</li>
+<li>Starts a local server</li>
+<li>Authenticates</li>
+<li>Starts session manager, window manager, and desktop environment</li>
+<li>Either started by <tt class="docutils literal"><span class="pre">init</span></tt> or an init script.</li>
+<li>Can start multiple servers (automatically or on-demand)</li>
+</ul>
+</div>
+<div class="slide" id="config-files">
+<h1>Config Files</h1>
+<p class="handout"><tt class="docutils literal"><span class="pre">X</span> <span class="pre">-configure</span></tt> writes to <tt class="docutils literal"><span class="pre">xorg.conf.new</span></tt>.</p>
+<p class="handout">The <tt class="docutils literal"><span class="pre">xorg.conf-4</span></tt> file is a holdover from the XFree86 3.x to 4.x
+transition.</p>
+<p class="handout">The files <tt class="docutils literal"><span class="pre">/usr/X11R6/etc/X11/xorg.conf-HOSTNAME</span></tt> are assumed to be on a
+network share, thus the file name is postfixed with a hostname.</p>
+<p>Not needed for general configurations. <tt class="docutils literal"><span class="pre">X</span> <span class="pre">-configure</span></tt></p>
+<ol class="incremental arabic simple">
+<li>File specified on the command line (must exist in the directories below)</li>
+<li>Environment variable <tt class="docutils literal"><span class="pre">$XORGCONFIG</span></tt></li>
+<li><tt class="docutils literal"><span class="pre">/etc/X11/xorg.conf-4</span></tt> then <tt class="docutils literal"><span class="pre">/etc/X11/xorg.conf</span></tt> then
+<tt class="docutils literal"><span class="pre">/etc/xorg.conf</span></tt></li>
+<li><tt class="docutils literal"><span class="pre">/usr/X11R6/etc/X11/xorg.conf-HOSTNAME</span></tt> then
+<tt class="docutils literal"><span class="pre">/usr/X11R6/lib/X11/xorg.conf-HOSTNAME</span></tt></li>
+</ol>
+</div>
+<div class="slide" id="xorg-conf-sections">
+<h1>xorg.conf Sections</h1>
+<dl class="handout docutils">
+<dt>ServerLayout</dt>
+<dd><p class="first">Defines how screens and input devices are combined to form a display
+configuration.</p>
+<p class="last">Technically, this section is optional for simple configurations.</p>
+</dd>
+<dt>Screen</dt>
+<dd>Combines one video card and one monitor to form a screen. Defines color
+depth and resolutions.</dd>
+<dt>Monitor</dt>
+<dd>Characteristics of the monitor (DPMS, power saving timing, scan-rates).</dd>
+<dt>Device</dt>
+<dd>Video card. Driver-specific settings, check your driver’s manpage.</dd>
+<dt>InputDevice</dt>
+<dd>One section per mouse, keyboard, etc.</dd>
+</dl>
+<ul class="incremental simple">
+<li>ServerLayout</li>
+<li>Screen</li>
+<li>Monitor</li>
+<li>Device<ul>
+<li><tt class="docutils literal"><span class="pre">X</span> <span class="pre">:4</span> <span class="pre">-scanpci</span></tt></li>
+</ul>
+</li>
+<li>InputDevice</li>
+</ul>
+</div>
+<div class="slide" id="virtual-screen-size-zooming">
+<h1>Virtual Screen Size (Zooming)</h1>
+<dl class="handout docutils">
+<dt>Screen</dt>
+<dd><p class="first">When changing resolution, only the displayed resolution changes, not
+the size of the screen image, forming a kind of virtual desktop. This
+is called Zooming. The virtual screen size does not need to start with
+the largest resolution.</p>
+<p><tt class="docutils literal"><span class="pre">Option</span> <span class="pre">&quot;DontZoom&quot;</span></tt> will disable Ctrl-alt + / -</p>
+<p class="last">By default the virtual screen size is the largest entry in the
+<tt class="docutils literal"><span class="pre">Modes</span></tt> entry. You can explicitly define the virtual scren size.</p>
+</dd>
+</dl>
+<pre class="literal-block">
+SubSection &quot;Display&quot;
+ Modes &quot;800x600&quot; &quot;1280x1024&quot; &quot;1024x768&quot;
+ Virtual 1280 1024
+ Viewport 0 0
+EndSubSection
+</pre>
+</div>
+<div class="slide" id="xorg-conf-optional-sections">
+<h1>xorg.conf Optional Sections</h1>
+<ul class="simple">
+<li>Extensions (e.g. <tt class="docutils literal"><span class="pre">Option</span> <span class="pre">&quot;Composite&quot;</span> <span class="pre">&quot;On&quot;</span></tt>)</li>
+<li>Files (e.g. <tt class="docutils literal"><span class="pre">FontPath</span></tt>)</li>
+<li>ServerFlags (e.g. zap, zoom, VT switching)</li>
+<li>Module (typically optional extensions)</li>
+<li>Mode or ModeLine (scan rates and signal options)</li>
+<li>DRI (3d-acceleration)<ul>
+<li>Group (which group the device belongs to)</li>
+<li>Mode (specifies file permissions for the device)</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="slide" id="useful-keyboard-shortcuts">
+<h1>Useful Keyboard Shortcuts</h1>
+<ul class="simple">
+<li>Zap — Ctrl-alt Backspace</li>
+<li>Zooming — Ctrl-alt + / -</li>
+<li>Mouse keys — Shift-numlock<ul>
+<li><tt class="docutils literal"><span class="pre">5</span></tt> or <tt class="docutils literal"><span class="pre">/</span></tt> — Left click</li>
+<li><tt class="docutils literal"><span class="pre">*</span></tt> — Middle click</li>
+<li><tt class="docutils literal"><span class="pre">-</span></tt> — Right click</li>
+<li><tt class="docutils literal"><span class="pre">+</span></tt> — Double click</li>
+<li><tt class="docutils literal"><span class="pre">0</span></tt> — Hold button</li>
+<li><tt class="docutils literal"><span class="pre">.</span></tt> — Release button</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="slide" id="changing-resolution">
+<h1>Changing Resolution</h1>
+<p class="handout">It’s often more useful to change both the screen resolution and the virtual
+screen size to eliminate scrolling. The Rotate and Resize (RANDR) extension
+enables this. You can also easily rotate the display with this tool.</p>
+<p class="handout">Gnome and KDE both come with applets to access this functionality.</p>
+<p><tt class="docutils literal"><span class="pre">xrandr</span> <span class="pre">-q</span></tt>:</p>
+<pre class="literal-block">
+Screen 0: minimum 320 x 200, current 1440 x 900, maximum 1440 x 1024
+default connected 1440x900+0+0 0mm x 0mm
+ 1440x900 60.0*
+ 1280x1024 75.0 70.0 60.0
+ 1280x960 60.0
+ …
+</pre>
+</div>
+<div class="slide" id="changing-x-settings-on-the-fly-with-xset">
+<h1>Changing X Settings on the Fly with <tt class="docutils literal"><span class="pre">xset</span></tt></h1>
+<dl class="handout docutils">
+<dt><tt class="docutils literal"><span class="pre">xset</span> <span class="pre">q</span></tt></dt>
+<dd>Displays mostly settings that can be altered while the server is
+running such as screen saver and power management timing, keyboard
+repeat rates (even for individual keys), mouse acceleration, the system
+bell, and keyboard LED lights (recent versions of X.org do not permit
+control of numlock and capslock LEDs).</dd>
+</dl>
+<ul class="incremental simple">
+<li><tt class="docutils literal"><span class="pre">xset</span> <span class="pre">q</span></tt></li>
+<li><tt class="docutils literal"><span class="pre">xset</span> <span class="pre">+dpms</span></tt></li>
+<li><tt class="docutils literal"><span class="pre">xset</span> <span class="pre">-r</span></tt></li>
+<li><tt class="docutils literal"><span class="pre">xset</span> <span class="pre">m</span></tt></li>
+<li><tt class="docutils literal"><span class="pre">xset</span> <span class="pre">b</span></tt> <cite>volume pitch duration</cite></li>
+<li><tt class="docutils literal"><span class="pre">xset</span> <span class="pre">led</span> <span class="pre">3</span></tt><ul>
+<li><tt class="docutils literal"><span class="pre">Options</span> <span class="pre">&quot;Xleds&quot;</span>&nbsp; <span class="pre">&quot;1</span> <span class="pre">2</span> <span class="pre">3&quot;</span></tt></li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="slide" id="useful-tools">
+<h1>Useful Tools</h1>
+<dl class="handout docutils">
+<dt><tt class="docutils literal"><span class="pre">Xorg.0.log</span></tt></dt>
+<dd>Useful tools for diagnosing X start with the basic <tt class="docutils literal"><span class="pre">Xorg.0.log</span></tt> file
+(and sometimes <tt class="docutils literal"><span class="pre">dmesg</span></tt>). The X log file is self-documenting and easy
+to read.</dd>
+<dt><tt class="docutils literal"><span class="pre">xpyinfo</span></tt></dt>
+<dd>To verify that your <tt class="docutils literal"><span class="pre">xorg.conf</span></tt> file is being processed correctly,
+consult the output from <tt class="docutils literal"><span class="pre">xpyinfo</span></tt>.</dd>
+<dt><tt class="docutils literal"><span class="pre">gtf</span></tt></dt>
+<dd>Creates ModeLines.</dd>
+<dt><tt class="docutils literal"><span class="pre">xmag</span></tt></dt>
+<dd>Useful for web developers because you can click on any pixel to get the
+color in 64-bit hexadecimal. (To convert to 24-bit hex just remove the
+first two digits from each group of four.)</dd>
+</dl>
+<ul class="incremental simple">
+<li><tt class="docutils literal"><span class="pre">Xorg.0.log</span></tt> (and <tt class="docutils literal"><span class="pre">dmesg</span></tt>)<ul>
+<li><tt class="docutils literal"><span class="pre">xpyinfo</span></tt></li>
+</ul>
+</li>
+<li><tt class="docutils literal"><span class="pre">xrandr</span> <span class="pre">-q</span></tt></li>
+<li><tt class="docutils literal"><span class="pre">Xnest</span></tt><ul>
+<li><tt class="docutils literal"><span class="pre">startx</span> <span class="pre">/usr/bin/startkde</span> <span class="pre">--</span> <span class="pre">/usr/bin/Xnest</span> <span class="pre">:1</span></tt></li>
+</ul>
+</li>
+<li><tt class="docutils literal"><span class="pre">gtf</span></tt></li>
+<li><tt class="docutils literal"><span class="pre">xmag</span></tt><ul>
+<li>(3e3e, 4444, a9a9) = #3e44a9</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="slide" id="the-clipboard">
+<h1>The Clipboard</h1>
+<p class="handout">Because X is network-based the program placing data on the clipboard and
+the program receiving the data from the clipboard may not be on the same
+computer. Pasting speed is limited by network performance. Clients
+advertise clipboard data to other clients through the server. Data that is
+placed on the clipboard but never pasted is not transfered over the
+network. For example, Firefox may advertise that clipboard data is
+available in both <cite>text/plain</cite> and <cite>text/html</cite> formats. This is why
+clipboard data becomes unavailable once you’ve closed a client program.</p>
+<ul class="simple">
+<li>Clients advertise clipboard data to other clients</li>
+<li>Multiple formats are advertised if available</li>
+<li>Pasting speed is limited by network performance</li>
+</ul>
+</div>
+<div class="slide" id="fonts">
+<h1>Fonts</h1>
+<p class="handout">A big difference between Old X and New X is the way fonts are handled. The
+old font system is often called Core Fonts because fonts were handled in
+the X core protocols—that is, they were managed by the server, new fonts
+are handled by the client.</p>
+<ul class="incremental simple">
+<li>Core Fonts vs. RENDER, Xft, and Fontconfig</li>
+<li>Install fonts to <tt class="docutils literal"><span class="pre">~/.fonts</span></tt> or <tt class="docutils literal"><span class="pre">/usr/share/fonts</span></tt> and run fc-cache.</li>
+<li>Configure font rendering with <tt class="docutils literal"><span class="pre">/etc/fonts/local.conf</span></tt>.</li>
+</ul>
+</div>
+<div class="slide" id="remote-access">
+<h1>Remote Access</h1>
+<p class="handout">X has been a “portable, network-transparent window system” from day-one,
+but unless you have a specific need, just use ssh tunneling. ssh provides
+an enhanced version of it’s regular tunneling ability specifically for X
+traffic. You can set up password-less ssh using public keys and ssh-agent.
+An (very) improperly configured X setup can allow users to view your screen
+over the network.</p>
+<p><tt class="docutils literal"><span class="pre">X</span> <span class="pre">-nolisten</span> <span class="pre">tcp</span></tt> is a PITA.</p>
+<div class="section" id="just-use-x-tunneling-with-ssh">
+<h2>Just use X Tunneling with SSH</h2>
+<p><tt class="docutils literal"><span class="pre">ssh</span> <span class="pre">-X</span> <span class="pre">-C</span> <span class="pre">user&#64;host</span> <span class="pre">xeyes</span></tt></p>
+</div>
+</div>
+<div class="slide" id="conclusion">
+<h1>Conclusion</h1>
+<p class="small">The Good</p>
+<ul class="small simple">
+<li>X Power Tools is a great resource for starting to really grasp X.</li>
+</ul>
+<p class="small">The Bad</p>
+<ul class="small simple">
+<li>The fonts chapter was far too Gnome and KDE focused.</li>
+<li>The Session managers, desktop environments, and window managers was very
+light and didn’t even begin to touch the variety that exists. I still
+don’t know the difference between a desktop environment and a window
+manager.</li>
+</ul>
+<p class="small">Other notes</p>
+<ul class="small simple">
+<li>There’s a section at the end with tips on configuring X for use as a
+kiosk system.</li>
+</ul>
+<!-- vim:filetype=rst -->
+</div>
+</div>
+</body>
+</html>
491 oalug_2008-03-29_x-power-tools/presentation.txt
@@ -0,0 +1,491 @@
+===========================
+Ogden Area Linux User Group
+===========================
+Book Review: X Power Tools
+--------------------------
+
+:Presenter: Seth House
+:Date: 2008-03-29
+:Book: X Power Tools (O'Reilly)
+:ISBN: 0-596-10195-3
+
+.. footer:: X Power Tools (O'Reilly, 0-596-10195-3)
+
+
+History
+-------
+
+.. class:: handout
+
+ Version 11 came out in 1987 under the more liberal MIT license, and a
+ vendor-neutral group called the X Consortium was formed to oversee
+ development. Vendors used X11 sample code a starting point, then tuned
+ specific versions for their specific needs and hardware.
+
+ In 1992 a particular implementation, X386, became popular. When it went
+ commercial, a free version was created called XFree86. Most X innovations
+ came from the XFree86 project over the next several years.
+
+ Starting around 1996, development stagnated for nearly four years due to
+ internal politics and rigidity in the organization.
+
+ Control of X passed from group to group. In 1999 it was passed to The Open
+ Group who formed X.org.
+
+ Ultimately a license dispute in 2003 caused many key developers to leave
+ the project and move to back to the successor to the X Consortium, forming
+ the X.org Foundation. Development has been fast-paced since then.
+
+.. class:: incremental
+
+ X was born in 1984 at MIT.
+
+ * 1987 — Version 11
+ * 1992 — X386 became popular, gave rise to XFree86
+ * 1996 — `zzz`
+ * 1999 — X.org formed
+ * 2003 — Mass exodus to X.org
+
+Old X vs. New X
+---------------
+
+Old X (1984-1996)
+-----------------
+
+* Core protocol development
+* Essential extensions
+* Xt-based toolkits
+
+New X (2000-present)
+--------------------
+
+.. class:: handout
+
+ You may have noticed X.org packages in your distro recently got small and
+ numerous. This modularizing of X is a good thing that allows you to
+ selectivly upgrade or change parts of X without having to recompile the
+ whole thing (which is not for the feint of heart).
+
+* RENDER extension (2000)
+* Xft
+* OpenGL
+* COMPOSE
+* non-Xt toolkits (GTK and qt)
+
+The Name (Check the manpage!)
+-----------------------------
+
+.. sidebar:: nübs
+
+ “X Windows” is generally considered used only by beginners, and is frowned
+ on due to possible confusion with Microsoft Windows.
+
+.. class:: incremental
+
+ * X
+ * X11
+ * X Window System
+ * X Version 11
+ * X Window System, Version 11
+
+ Nowadays “Xorg” or “X dot org” is also acceptable.
+
+Terminology
+-----------
+
+.. sidebar:: Note
+
+ The terminology gets tricky if a user has multiple video cards or monitors
+ using Xinerama
+
+Display
+ Generally, the user interface for one person. Keyboard, pointer, video
+ card, and monitor.
+Device
+ Video card
+Screen
+ Video card and monitor
+
+Display Specification
+---------------------
+
+.. raw:: html
+
+ <code>host:display[.screen]</code>
+
+Set the ``$DISPLAY`` environment variable or pass ``-display`` to a client.
+
+Display Specification
+---------------------
+
+.. raw:: html
+
+ <code><strong>host</strong>:display[.screen]</code>
+
+Host
+ * A DNS hostname or IP address