sp-tutorial 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. data/README.markdown +42 -0
  2. data/Rakefile +36 -0
  3. data/TODO +6 -0
  4. data/VERSION.yml +4 -0
  5. data/config.ru +15 -0
  6. data/lib/config.ru +15 -0
  7. data/lib/public/doc/Cyklop-otf-0_91.zip +0 -0
  8. data/lib/public/doc/ex/sp_lab01_zad.odt +0 -0
  9. data/lib/public/doc/ex/sp_lab02_zad.odt +0 -0
  10. data/lib/public/doc/ex/sp_lab03_zad.odt +0 -0
  11. data/lib/public/doc/ex/sp_lab04_zad.odt +0 -0
  12. data/lib/public/doc/latexsheet.pdf +0 -0
  13. data/lib/public/doc/survival.pdf +0 -0
  14. data/lib/public/images/Thatll_Flat_Git_It_Vol_20.jpg +0 -0
  15. data/lib/public/images/alan_kay.jpg +0 -0
  16. data/lib/public/images/alan_perlis.jpg +0 -0
  17. data/lib/public/images/albert_einstein.jpg +0 -0
  18. data/lib/public/images/algorithm.png +0 -0
  19. data/lib/public/images/biuletyn-snall.jpg +0 -0
  20. data/lib/public/images/bop.jpg +0 -0
  21. data/lib/public/images/borenstein.jpg +0 -0
  22. data/lib/public/images/commits.png +0 -0
  23. data/lib/public/images/gitk-branches.png +0 -0
  24. data/lib/public/images/jkew.jpg +0 -0
  25. data/lib/public/images/jwz.gif +0 -0
  26. data/lib/public/images/knuth.jpg +0 -0
  27. data/lib/public/images/marcin_wolinski.jpg +0 -0
  28. data/lib/public/images/objects-example.png +0 -0
  29. data/lib/public/images/perlis.gif +0 -0
  30. data/lib/public/images/real_programmers.png +0 -0
  31. data/lib/public/images/richard_stallman.jpg +0 -0
  32. data/lib/public/images/sp.png +0 -0
  33. data/lib/public/images/sp.svg +117 -0
  34. data/lib/public/images/spowrotem.jpg +0 -0
  35. data/lib/public/images/staging_area.png +0 -0
  36. data/lib/public/images/the_thinker.jpg +0 -0
  37. data/lib/public/images/tparr.jpg +0 -0
  38. data/lib/public/images/wide-gitk.gif +0 -0
  39. data/lib/public/javascripts/sp.js +1 -0
  40. data/lib/public/stylesheets/fonts/Cyklop-Italic.otf +0 -0
  41. data/lib/public/stylesheets/icons/doc.png +0 -0
  42. data/lib/public/stylesheets/icons/email.png +0 -0
  43. data/lib/public/stylesheets/icons/external.png +0 -0
  44. data/lib/public/stylesheets/icons/feed.png +0 -0
  45. data/lib/public/stylesheets/icons/im.png +0 -0
  46. data/lib/public/stylesheets/icons/pdf.png +0 -0
  47. data/lib/public/stylesheets/icons/visited.png +0 -0
  48. data/lib/public/stylesheets/icons/xls.png +0 -0
  49. data/lib/public/stylesheets/ie.css +27 -0
  50. data/lib/public/stylesheets/print.css +30 -0
  51. data/lib/public/stylesheets/screen.css +249 -0
  52. data/lib/public/stylesheets/sp.css +194 -0
  53. data/lib/public/stylesheets/src/grid.png +0 -0
  54. data/lib/public/stylesheets/uv.css +121 -0
  55. data/lib/sp-tutorial.rb +78 -0
  56. data/lib/views/answers.rdiscount +7 -0
  57. data/lib/views/exercises.rdiscount +154 -0
  58. data/lib/views/favicon.ico.rdiscount +0 -0
  59. data/lib/views/git.rdiscount +558 -0
  60. data/lib/views/labs01.rdiscount +54 -0
  61. data/lib/views/labs02.rdiscount +32 -0
  62. data/lib/views/labs03.rdiscount +28 -0
  63. data/lib/views/labs04.rdiscount +41 -0
  64. data/lib/views/latex.rdiscount +498 -0
  65. data/lib/views/layout.rdiscount +41 -0
  66. data/lib/views/ll.rdiscount +78 -0
  67. data/lib/views/main.rdiscount +67 -0
  68. data/lib/views/scripts.rdiscount +618 -0
  69. data/lib/views/unix-commands.rdiscount +604 -0
  70. data/lib/views/unix-guru.rdiscount +696 -0
  71. data/sp-tutorial.gemspec +125 -0
  72. metadata +186 -0
@@ -0,0 +1,194 @@
1
+ /* font-face fonts works with Firefox and Opera */
2
+
3
+ @font-face {
4
+ font-family: "Cyklop";
5
+ src: url(fonts/Cyklop-Regular.otf) format("opentype");
6
+ }
7
+
8
+ @font-face {
9
+ font-family: "Cyklop";
10
+ src: url(fonts/Cyklop-Italic.otf) format("opentype");
11
+ font-style: italic;
12
+ }
13
+
14
+ #logo {
15
+ font: normal 256%/1 "Cyklop", "DejaVu Sans", sans-serif;
16
+ margin-bottom: 24px;
17
+ }
18
+
19
+ #logo a {
20
+ text-decoration: none;
21
+ color: #5A0405;
22
+ }
23
+
24
+ #logo a:focus, #logo a:hover {
25
+ color: #321494;
26
+ }
27
+
28
+ #logo span {
29
+ margin-left: 1em;
30
+ color: #B019BD;
31
+ }
32
+
33
+ /* hack for RDiscount comments */
34
+
35
+ h4 {
36
+ display: none;
37
+ }
38
+
39
+ html {
40
+ /* http://www.hicksdesign.co.uk/journal/forcing-scrollbars-now-even-better */
41
+ height: 100%;
42
+ margin-bottom: 1px;
43
+
44
+ background-color: #E3E6F7;
45
+ margin: 24px auto 24px 44px;
46
+ }
47
+
48
+ body {
49
+ font-family: "DejaVu Sans", "Trebuchet MS", sans-serif ;
50
+ line-height: 28px;
51
+ }
52
+
53
+ #header {
54
+ padding-top: 24px;
55
+ padding-bottom: 0px;
56
+ background-color: #F07818;
57
+ /* border: solid #888; */
58
+ /* border-width: 1px 1px 0px 1px; */
59
+ }
60
+
61
+ #links {
62
+ float: right;
63
+ }
64
+
65
+ #links a {
66
+ text-decoration: none;
67
+ color: #A00;
68
+ }
69
+
70
+ .container {
71
+ /* border: 1px solid #888; */
72
+ background-color: #FEF9F0;
73
+ }
74
+
75
+ a[href^="http:"], a[href^="mailto:"], a[href^="http:"]:visited,
76
+ a[href$=".pdf"], a[href$=".doc"], a[href$=".xls"], a[href$=".rss"],
77
+ a[href$=".rdf"], a[href^="aim:"] {
78
+ padding:2px 16px 2px 0;
79
+ }
80
+
81
+ h1 {
82
+ font-weight: normal;
83
+ font-size: 160%;
84
+ font-family: "Cyklop", "DejaVu Sans", serif;
85
+ font-style: italic;
86
+ color: #D80000;
87
+ padding-top: 16px;
88
+ padding-bottom: 16px;
89
+ background-color: #F0D800;
90
+ width: 869px;
91
+ margin-left: -44px;
92
+ padding-left: 44px;
93
+ }
94
+
95
+ blockquote {
96
+ font: normal 14/1.5 "DejaVu Sans", sans-serif;
97
+ width: 297px;
98
+ margin-top: 6px;
99
+ margin-left: 528px;
100
+ padding: 18px 22px 18px 22px;
101
+ position: absolute;
102
+ background: #99ff99;
103
+ -moz-border-radius: 4px;
104
+ color: #800;
105
+ }
106
+
107
+ blockquote img {
108
+ margin: 0 auto 12px auto;
109
+ display: block;
110
+ }
111
+
112
+ blockquote p.author {
113
+ margin-top: -1em;
114
+ padding-right: 44px;
115
+ color: #800;
116
+ font-style: italic;
117
+ text-align: right;
118
+ }
119
+
120
+ h2 {
121
+ font-size: 140%;
122
+ padding-bottom: 6px;
123
+ border-bottom: 2px dotted #D80000;
124
+ color: #D80000;
125
+ }
126
+
127
+ h3 {
128
+ font-size: 120%;
129
+ color: #D80000;
130
+ }
131
+
132
+ pre.dawn {
133
+ margin-left: -50px;
134
+ padding: 8px 0 8px 39px;
135
+ border-left: 11px solid rgb(237,0,86);
136
+ }
137
+
138
+ pre code, li pre {
139
+ margin: 0;
140
+ padding: 0;
141
+ border: none;
142
+ }
143
+
144
+ code {
145
+ margin: 0 2px;
146
+ padding: 0.06em 0.125em;
147
+ border: 1px solid #403B33;
148
+ }
149
+
150
+ caption {
151
+ text-align: right;
152
+ }
153
+
154
+ pre, code {
155
+ font-family: "DejaVu Sans Mono", PakTypeNaqsh, monospace;
156
+ }
157
+
158
+ /* tabele */
159
+
160
+ thead th {
161
+ background-color: #ADD8C7;
162
+ }
163
+ li ul {
164
+ margin-bottom: 1.5em;
165
+ }
166
+
167
+ .table1 {
168
+ background-color: #EB7C7C;
169
+ }
170
+
171
+ .table2 {
172
+ background-color: #ECB39F;
173
+ }
174
+
175
+ /* różne */
176
+
177
+ .center {
178
+ text-align: center;
179
+ }
180
+
181
+ blockquote h1 {
182
+ font-weight: bold;
183
+ font-size: 100%;
184
+ font-family: "DejaVu Sans", "PakTypeNaqsh", serif;
185
+ color: #D80000;
186
+ padding-top: 16px;
187
+ padding-bottom: 16px;
188
+ background-color: #00A800;
189
+ color: white;
190
+ width: 100%;
191
+ margin-left: -22px;
192
+ margin-top: -18px;
193
+ -moz-border-radius: 4px;
194
+ }
@@ -0,0 +1,121 @@
1
+ pre.dawn .MetaSeparator {
2
+ font-weight: bold;
3
+ background-color: #DCDCDC;
4
+ color: #19356D;
5
+ }
6
+ pre.dawn .SupportVariable {
7
+ color: #234A97;
8
+ }
9
+ pre.dawn .Constant {
10
+ font-weight: bold;
11
+ color: #811F24;
12
+ }
13
+ pre.dawn .EmbeddedSource {
14
+ background-color: #829AC2;
15
+ }
16
+ pre.dawn .StringRegexpConstantCharacterEscape {
17
+ font-weight: bold;
18
+ color: #811F24;
19
+ }
20
+ pre.dawn .Support {
21
+ color: #691C97;
22
+ }
23
+ pre.dawn .MarkupList {
24
+ color: #693A17;
25
+ }
26
+ pre.dawn .Storage {
27
+ color: #A71D5D;
28
+ font-style: italic;
29
+ }
30
+ pre.dawn .line-numbers {
31
+ background-color: #7496CF;
32
+ color: #000000;
33
+ }
34
+ pre.dawn .StringConstant {
35
+ font-weight: bold;
36
+ color: #696969;
37
+ }
38
+ pre.dawn .MarkupUnderline {
39
+ text-decoration: underline;
40
+ color: #080808;
41
+ }
42
+ pre.dawn .MarkupHeading {
43
+ font-weight: bold;
44
+ color: #19356D;
45
+ }
46
+ pre.dawn .SupportConstant {
47
+ color: #B4371F;
48
+ }
49
+ pre.dawn .MarkupQuote {
50
+ background-color: #C5C5C5;
51
+ color: #0B6125;
52
+ font-style: italic;
53
+ }
54
+ pre.dawn .StringRegexpSpecial {
55
+ font-weight: bold;
56
+ color: #CF5628;
57
+ }
58
+ pre.dawn .InvalidIllegal {
59
+ background-color: #B52A1D;
60
+ color: #F8F8F8;
61
+ font-style: italic;
62
+ }
63
+ pre.dawn .MarkupDeleted {
64
+ color: #B52A1D;
65
+ }
66
+ pre.dawn .MarkupRaw {
67
+ background-color: #C5C5C5;
68
+ color: #234A97;
69
+ }
70
+ pre.dawn .SupportFunction {
71
+ color: #693A17;
72
+ }
73
+ pre.dawn .PunctuationSeparator {
74
+ color: #794938;
75
+ }
76
+ pre.dawn .StringRegexp {
77
+ color: #CF5628;
78
+ }
79
+ pre.dawn .StringEmbeddedSource {
80
+ background-color: #829AC2;
81
+ color: #080808;
82
+ }
83
+ pre.dawn .MarkupLink {
84
+ color: #234A97;
85
+ font-style: italic;
86
+ }
87
+ pre.dawn .MarkupBold {
88
+ font-weight: bold;
89
+ color: #080808;
90
+ }
91
+ pre.dawn .StringVariable {
92
+ color: #234A97;
93
+ }
94
+ pre.dawn .String {
95
+ color: #0B6125;
96
+ }
97
+ pre.dawn .Keyword {
98
+ color: #794938;
99
+ }
100
+ pre.dawn {
101
+ /* background-color: #F5F5F5; */
102
+ color: #080808;
103
+ }
104
+ pre.dawn .MarkupItalic {
105
+ color: #080808;
106
+ font-style: italic;
107
+ }
108
+ pre.dawn .InvalidDeprecated {
109
+ font-weight: bold;
110
+ color: #B52A1D;
111
+ }
112
+ pre.dawn .Variable {
113
+ color: #234A97;
114
+ }
115
+ pre.dawn .Entity {
116
+ color: #BF4F24;
117
+ }
118
+ pre.dawn .Comment {
119
+ color: #5A525F;
120
+ font-style: italic;
121
+ }
@@ -0,0 +1,78 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ # Zobacz przykład: http://gist.github.com/38605
4
+
5
+ gem 'rdiscount'
6
+ gem 'sinatra'
7
+ gem 'wbzyl-sinatra-rdiscount'
8
+
9
+ gem 'emk-sinatra-url-for'
10
+ gem 'wbzyl-sinatra-static-assets'
11
+
12
+ require 'rdiscount'
13
+ require 'sinatra/base'
14
+ require 'sinatra/rdiscount'
15
+
16
+ require 'sinatra/url_for'
17
+ require 'sinatra/static_assets'
18
+
19
+ module WB
20
+ class SPTutorial < Sinatra::Base
21
+ helpers Sinatra::UrlForHelper
22
+ helpers Sinatra::StaticAssets
23
+
24
+ # disable overriding public and views dirs
25
+ set :app_file, __FILE__
26
+ set :static, true
27
+
28
+ # the middleware stack can be used internally as well. I'm using it for
29
+ # sessions, logging, and methodoverride. This lets us move stuff out of
30
+ # Sinatra if it's better handled by a middleware component.
31
+ set :logging, true # use Rack::CommonLogger
32
+
33
+ helpers Sinatra::RDiscount
34
+
35
+ # configure blocks:
36
+ # configure :production do
37
+ # end
38
+
39
+ #before do
40
+ # mime :sql, 'text/plain; charset="UTF-8"' # when served by Sinatra itself
41
+ #end
42
+
43
+ # helper methods
44
+ #attr_reader :title
45
+
46
+ def page_title
47
+ @title || ""
48
+ end
49
+
50
+ # def title=(name)... does not work, bug?
51
+ def title(name)
52
+ @title = " | #{name}"
53
+ end
54
+
55
+ get '/' do
56
+ rdiscount :main
57
+ end
58
+
59
+ get '/:section' do
60
+ rdiscount :"#{params[:section]}"
61
+ end
62
+
63
+ # does not work with sub-uri; bug?
64
+ # get '/labs/:section' do
65
+ # rdiscount "labs/#{params[:section]}".to_sym
66
+ # end
67
+
68
+ error do
69
+ e = request.env['sinatra.error']
70
+ Kernel.puts e.backtrace.join("\n")
71
+ 'Application error'
72
+ end
73
+
74
+ # each Sinatra::Base subclass has its own private middleware stack:
75
+ # use Rack::Lint
76
+ end
77
+ end
78
+
@@ -0,0 +1,7 @@
1
+ #### {% title "Odpowiedzi do ćwiczeń" %}
2
+
3
+ # Odpowiedzi do ćwiczeń
4
+
5
+ <blockquote>
6
+ {%= image_tag "/images/algorithm.png", :alt => "[Rozwiązanie…]" %}
7
+ </blockquote>
@@ -0,0 +1,154 @@
1
+ #### {% title "Ćwiczenia" %}
2
+
3
+ # Ćwiczenia
4
+
5
+ <blockquote>
6
+ {%= image_tag "/images/albert_einstein.jpg", :alt => "[Albert Einstein]" %}
7
+ <p>
8
+ In the interests of clarity, it seemed necessary to constantly
9
+ remind myself to pay not the slightest attention to the elegance of
10
+ the presentation; I adhered conscientiously to the rule of the
11
+ brilliant theoretician, Ludwig Boltzmann, to leave elegance to
12
+ tailors and shoemakers.
13
+ </p>
14
+ <p class="author">— Albert Einstein</p>
15
+ </blockquote>
16
+
17
+ Rozwiązania ćwiczeń należy umieścić na swoim blogu.
18
+ Na przykład, rozwiązania ćwiczeń LaTeX-owych, powinny
19
+ być dostępne pod jakimś takim URL:
20
+
21
+ http://sigma.ug.edu.pl/~wbzyl/2009-11-22-latex.html
22
+
23
+ (Oczywiście, zamiast *wbzyl* trzeba wstawić swój login,
24
+ no i data będzie inna.)
25
+
26
+ Kod należy umieścić w repozytorium git. Na przykład
27
+
28
+ cd ~/tmp
29
+ mkdir latex
30
+ cd latex
31
+ touch README.md
32
+ git init
33
+ ... dodajemy pliki z kodem/rozwiązaniem ...
34
+ git add .
35
+ git commit -m "gotowe"
36
+ cd ..
37
+ git clone --bare latex ~/public_git/latex.git
38
+ rm -rf ~/tmp/latex
39
+
40
+ ## Bash
41
+
42
+ Zadania do wykonania w laboratoriach:
43
+
44
+ * {%= link_to "Laboratorium 1", "/labs01" %} (polecenia powłoki)
45
+ * {%= link_to "Laboratorium 2", "/labs02" %} (kontynuacja)
46
+ * {%= link_to "Laboratorium 3", "/labs03" %} (— " —)
47
+ * {%= link_to "Laboratorium 4", "/labs04" %} (— " —)
48
+ * {%= link_to "Laboratorium 5, 6", "/doc/ex/sp_lab03_zad.odt" %} (polecenia *find*, *grep*)
49
+ * {%= link_to "Laboratorium 7, 8, 9, 10", "/doc/ex/sp_lab04_zad.odt" %} (skrypty)
50
+ * LaTeX, Git: Laboratoria 11, 12, 13
51
+ * Zaliczenia: Laboratoria 14, 15
52
+
53
+
54
+ ## Edytory
55
+
56
+ 2\. W *jBlogu* jest kilka napisów, które należy wymienić,
57
+ na przykład, w pliku *index.html*:
58
+
59
+ title: WB_Blog
60
+
61
+ w pliku *_layouts/default.html*:
62
+
63
+ <meta name="author" content="Włodek Bzyl" />
64
+
65
+ Znaleźć wszystkie takie napisy.
66
+ Napisać prosty skrypt korzystający z programu *sed*
67
+ wymieniający te napisy.
68
+
69
+ Logo przygotowałem w programie *inkscape*.
70
+ Plik *images/logo.svg* w formacie *SVG* zawiera tekst *WB@jBlog*,
71
+ który należy wymienić.
72
+
73
+ <blockquote>
74
+ {%= image_tag "/images/biuletyn-snall.jpg", :alt => "[]" %}
75
+ <p>
76
+ W okresie międzywojennym font Cyklop był używany
77
+ w tytulariach gazetowych i drukach akcydensowych.
78
+ </p>
79
+ </blockquote>
80
+
81
+ W pliku *images/logo.svg* literki składane są fontem *OTF*
82
+ {%= link_to "Cyklop", "/doc/Cyklop-otf-0_91.zip" %}.
83
+ Zainstalować ten font lokalnie i korzystając z programu
84
+ *inkscape* zmienić tekst.
85
+ Zapisać zmiany i wyeksportować obrazek
86
+ *images/logo.png* w formacie *PNG*.
87
+
88
+ 2\. Przygotować prostą stronę www ze ściągą do wyrażeń regularnych
89
+ rozpoznawanych przez program *egrep*.
90
+ Ściąga powinna być dostępna pod takim URL:
91
+
92
+ <pre>http://sigma.inf.ug.edu.pl/~TWÓJ_LOGIN/egrep.html
93
+ </pre>
94
+
95
+
96
+ ## Git
97
+
98
+ 1\. W zespołach 3–4 osobowych przygotować prosty projekt.
99
+ Popracować wspólnie nad projektem. Na koniec
100
+ zajęć przeanalizować kto co zrobił.
101
+
102
+ 2\. Napisać historyjkę pokazującą jak można
103
+ wyszukać *commit* w którym po raz pierwszy
104
+ pojawiła się określona funkcja.
105
+ Umieścić historyjkę na jBlogu pod *git-grep*.
106
+
107
+ 3\. Napisać historyjkę ilustrującą użycie polecenia
108
+ `git cherry-pick`.
109
+ Umieścić historyjkę na jBlogu pod *git-cherry-pick*.
110
+
111
+
112
+
113
+ ## XeLaTeX
114
+
115
+ 1\. Zapoznajemy się z programem *TeXworks*:
116
+
117
+ * wczytujemy gotowy szablon: File → New from Template
118
+ * włączamy outlines: Window → Show → Tags
119
+ * opanowujemy klika skrótów klawiszowych:
120
+ * kompilacja: ctrl+t
121
+ * …
122
+
123
+ 2\. Przygotować po jednym dokumencie (1–2 strony wydruku)
124
+ pokazującym podstawowe możliwości pakietu:
125
+
126
+ * *graphicx* (dokumentacja *epslatex.pdf*)
127
+ * *floatlft* albo *photo* (pływające wstawki)
128
+ * *geometry*
129
+
130
+ 3\. Tekst zadań do wykonania w laboratorium, na przykład
131
+ {%= link_to "Laboratorium 2", "/doc/ex/sp_lab02_zad.odt" %},
132
+ to lista wypunktowana (otoczenia *enumerate*, *itemize*)
133
+ oraz tytularia (polecenia *section*, *paragraph*).
134
+ Przygotować szablon oraz skróty klawiszowe ułatwiające
135
+ wpisywanie takich tekstów. Przepisać jeden ze zestawów
136
+ zadań korzystając z przygotowanego szablonu oraz ze
137
+ skrótów klawiszowych. Opisać to co zostało zrobione
138
+ na swoim jBlogu.
139
+
140
+ Wskazówka do 3. Zajrzyj na strony Wiki:
141
+ [Documentation of the code completion feature] [texworks code completion],
142
+ [Some tips for using TeXworks] [texworks tips].
143
+
144
+
145
+ ## Skrypty powłoki
146
+
147
+ 1\. Poprawić skrypt *makedict.sh* tak, aby rozpoznawał
148
+ polskie litery.
149
+
150
+
151
+ #### Linki
152
+
153
+ [texworks tips]: http://code.google.com/p/texworks/wiki/TipsAndTricks "Tips and Tricks"
154
+ [texworks code completion]: http://code.google.com/p/texworks/wiki/CodeCompletion "Code completion"