sp-tutorial 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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"