annotate src/learn.html.luan @ 92:7a56c17befab default tip

translation
author Franklin Schmidt <fschmidt@gmail.com>
date Fri, 02 May 2025 20:20:12 -0600
parents 76baf48ea36b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
40
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
1 local Luan = require "luan:Luan.luan"
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
2 local error = Luan.error
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3 local pairs = Luan.pairs or error()
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
4 local Io = require "luan:Io.luan"
91
76baf48ea36b add translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 90
diff changeset
5 local Site_translator = require "luan:gpt/Site_translator.luan"
76baf48ea36b add translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 90
diff changeset
6 local get_lang = Site_translator.get_lang or error()
76baf48ea36b add translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 90
diff changeset
7 local text_writer = Site_translator.text_writer or error()
40
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
8 local Shared = require "site:/lib/Shared.luan"
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
9 local head = Shared.head or error()
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
10 local header = Shared.header or error()
91
76baf48ea36b add translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 90
diff changeset
11 local luan_url = Shared.luan_url or error()
40
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
12
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
13
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
14 local content = {
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
15 intro = {
52
Franklin Schmidt <fschmidt@gmail.com>
parents: 49
diff changeset
16 title = [[Introduction]]
40
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
17 content = function()
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
18 %>
72
8bd99d5f468e remove scum
Franklin Schmidt <fschmidt@gmail.com>
parents: 70
diff changeset
19 <p>Learning reactionary programming will give you a deep understanding of programming and will enable to you to write your own programs and websites. However this is not enough to get a job in depraved modern culture. Modern culture will expect you to use tools popular with them, so you would have to learn one of those. Probably the least horrible programming tool used by modern culture is <a href="python.html">Python</a>, so I would recommend learning that if you want a job.</p>
40
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
20
64
Franklin Schmidt <fschmidt@gmail.com>
parents: 63
diff changeset
21 <p>The next 4 lessons are basic computer literacy. Even if you are not interested in programming, these would be useful skills.</p>
41
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
22
40
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
23 <p>I will develop this course incrementally based on demand. Whenever anyone completes the content here, I will add another lesson/section. This way I won't waste my time writing content that no one will use.</p>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
24
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
25 <p>This course will be designed for you to learn reactionary programming in a logical sequence. I will focus on finding relevant resources, and I will only write explanations when nothing else is available on the subject. I will focus on web development since that is what I know best.</p>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
26
41
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
27 <p>I will often say "Do X" without saying how to do X. A big part of programming is figuring out how to do things. Your two main resources are Google and ChatGPT. If you get stuck, you can ask me.</p>
40
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
28
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
29 <p>ChatGPT has become an essential programming tool. So the only task for this lesson is to play with ChatGPT. Later you can ask it technical questions.</p>
41
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
30
70
c934772a6c2e remove discord and disearch
Franklin Schmidt <fschmidt@gmail.com>
parents: 67
diff changeset
31 <p>If you have any questions, you can ask me on <a href="https://mikraite.arkian.net/Reactionary-Software-f1999.html">my forum</a>.</p>
40
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
32 <%
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
33 end
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
34 }
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
35 editor = {
52
Franklin Schmidt <fschmidt@gmail.com>
parents: 49
diff changeset
36 title = [[Text Editor and JSON]]
40
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
37 content = function()
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
38 %>
72
8bd99d5f468e remove scum
Franklin Schmidt <fschmidt@gmail.com>
parents: 70
diff changeset
39 <p>A text editor is a basic tool for reactionary programmers. We use simple flexible tools. Modern culture uses an <a href="https://en.wikipedia.org/wiki/Integrated_development_environment">IDE</a> which is big, <a href="https://mikraite.arkian.net/Changed-my-mind-about-IDE-s-tp2769.html">complicated</a>, and inflexible. We don't use such tools.</p>
42
84b97e86f4db learn - editor
Franklin Schmidt <fschmidt@gmail.com>
parents: 41
diff changeset
40
84b97e86f4db learn - editor
Franklin Schmidt <fschmidt@gmail.com>
parents: 41
diff changeset
41 <p>I reviewed the available text editors and I think <a href="https://www.sublimetext.com/">Sublime Text</a> is the best one available. So please download it and learn how it works.</p>
84b97e86f4db learn - editor
Franklin Schmidt <fschmidt@gmail.com>
parents: 41
diff changeset
42
43
Franklin Schmidt <fschmidt@gmail.com>
parents: 42
diff changeset
43 <p><a href="https://en.wikipedia.org/wiki/JSON">JSON</a> is the most popular text data format. I think JSON was the last good programming idea from modern culture, developed around 2001, before modern culture became fully depraved. Do your own research on JSON to understand it. It is fairly simple.</p>
42
84b97e86f4db learn - editor
Franklin Schmidt <fschmidt@gmail.com>
parents: 41
diff changeset
44
44
5b4d5cf453a8 start bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 43
diff changeset
45 <p>I paired Sublime Text with JSON because Sublime Text uses JSON files for its <a href="https://www.sublimetext.com/docs/settings.html">settings</a>. (Actually not quite pure JSON because it includes comments which are lines starting with <code>//</code>.) Experiment with Sublime Text settings to learn more about both Sublime Text and JSON.</p>
40
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
46 <%
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
47 end
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
48 }
41
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
49 bash = {
52
Franklin Schmidt <fschmidt@gmail.com>
parents: 49
diff changeset
50 title = [[Bash - Command Line Shell]]
41
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
51 content = function()
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
52 %>
49
3057adc065f3 finish learn_bash
Franklin Schmidt <fschmidt@gmail.com>
parents: 45
diff changeset
53 <p><a href="bash.html">Bash</a> is the other basic tool for reactionary programmers. I was hoping to just reference existing Bash tutorials in this lesson, but they are all horrible, so I am writing my own. So for this lesson, please read <a href="learn_bash.html">my tutorial</a>.</p>
41
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
54 <%
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
55 end
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
56 }
62
7fe3cfba9c85 learn regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 61
diff changeset
57 regex = {
7fe3cfba9c85 learn regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 61
diff changeset
58 title = [[Regular Expressions]]
7fe3cfba9c85 learn regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 61
diff changeset
59 content = function()
7fe3cfba9c85 learn regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 61
diff changeset
60 %>
7fe3cfba9c85 learn regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 61
diff changeset
61 <p><a href="https://en.wikipedia.org/wiki/Regular_expression">Regular expressions</a>, or regex for short, are used for searching or matching text. Since this is such a common need, regex are found everywhere in programming. Since you just learned Bash, you can learn regex with the <a href="https://en.wikipedia.org/wiki/Grep">grep</a> command that uses regex.</p>
7fe3cfba9c85 learn regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 61
diff changeset
62
7fe3cfba9c85 learn regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 61
diff changeset
63 <p>Unlike with Bash, there are a few decent grep tutorials, so I don't have to write my own. Here they are:</p>
7fe3cfba9c85 learn regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 61
diff changeset
64
7fe3cfba9c85 learn regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 61
diff changeset
65 <ul>
7fe3cfba9c85 learn regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 61
diff changeset
66 <li><a href="https://vegastack.com/tutorials/regular-expressions-in-grep/">Regular Expressions in Grep</a></li>
7fe3cfba9c85 learn regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 61
diff changeset
67 <li><a href="https://cs.nyu.edu/~mohri/unix08/lect4">Regular Expressions</a></li>
7fe3cfba9c85 learn regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 61
diff changeset
68 <li><a href="https://www.gnu.org/software/grep/manual/grep.html">GNU Grep</a></li>
7fe3cfba9c85 learn regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 61
diff changeset
69 </ul>
7fe3cfba9c85 learn regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 61
diff changeset
70
7fe3cfba9c85 learn regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 61
diff changeset
71 <p>I suggest that you just read through these tutorials so that you get a sense for how regex and grep work. You don't need to practice anything here. You can come back to these tutorials later when you have a real need for regex or grep.</p>
7fe3cfba9c85 learn regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 61
diff changeset
72
84
Franklin Schmidt <fschmidt@gmail.com>
parents: 83
diff changeset
73 <p>The details of regex vary by implementation. Luan uses <a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/package-summary.html">Java regex</a>.
83
Franklin Schmidt <fschmidt@gmail.com>
parents: 72
diff changeset
74
62
7fe3cfba9c85 learn regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 61
diff changeset
75 <p>If you become a serious programmer, then you should have a deeper understanding of regex. In that case I recommend the book <a href="https://www.amazon.com/Mastering-Regular-Expressions-Jeffrey-Friedl/dp/0596528124/">Mastering Regular Expressions</a>.</p>
7fe3cfba9c85 learn regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 61
diff changeset
76 <%
7fe3cfba9c85 learn regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 61
diff changeset
77 end
7fe3cfba9c85 learn regex
Franklin Schmidt <fschmidt@gmail.com>
parents: 61
diff changeset
78 }
41
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
79 hg = {
52
Franklin Schmidt <fschmidt@gmail.com>
parents: 49
diff changeset
80 title = [[Mercurial - Source Control]]
41
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
81 content = function()
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
82 %>
67
b1982e401900 security
Franklin Schmidt <fschmidt@gmail.com>
parents: 65
diff changeset
83 <p>Thankfully <a href="mercurial.html">Mercurial</a> is well documented. Read <a href="https://hgbook.red-bean.com/">Mercurial: The Definitive Guide</a> up to (and including) chapter 9.</p>
54
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
84
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
85 <p>To get started with Mercurial, download Mercurial from <a href="https://www.mercurial-scm.org/">their website</a> and install it. Then do:</p>
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
86
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
87 <code block>
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
88 ~/learn $ hg version
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
89 Mercurial Distributed SCM (version 5.2.2)
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
90 (see https://mercurial-scm.org for more information)
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
91
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
92 Copyright (C) 2005-2019 Matt Mackall and others
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
93 This is free software; see the source for copying conditions. There is NO
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
94 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
95 ~/learn $
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
96 </code>
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
97
67
b1982e401900 security
Franklin Schmidt <fschmidt@gmail.com>
parents: 65
diff changeset
98 <p>If this works, it is installed properly. Next <a href="https://hgbook.red-bean.com/read/a-tour-of-mercurial-the-basics.html#sec:tour-basic:username">set up your Mercurial configuration file</a> which is <code>~/.hgrc</code> on a Mac or <code>/c/Users/$(whoami)/mercurial.ini</code> on Windows <a href="https://www.msys2.org/">MSYS2</a>. My <a href="https://www.mercurial-scm.org/doc/hgrc.5.html">hgrc</a> file looks like this:
54
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
99
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
100 <code block>
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
101 [ui]
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
102 username = Franklin Schmidt <fschmidt@gmail.com>
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
103
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
104 [auth]
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
105 hghosting.prefix = https://hg.reactionary.software/repo/
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
106 hghosting.username = fschmidt@gmail.com
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
107 hghosting.password = xxxxxxxxxx
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
108
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
109 [extensions]
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
110 hgext.extdiff =
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
111
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
112 [extdiff]
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
113 cmd.dm = diffmerge
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
114 </code>
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
115
56
Franklin Schmidt <fschmidt@gmail.com>
parents: 54
diff changeset
116 <p>You should register on <a href="https://hg.reactionary.software/">our Mercurial hosting service</a> and use your email as the username and the assigned password in <code>.hgrc</code>. The last two blocks set up <code>hg dm</code> to call <a href="https://sourcegear.com/diffmerge/">DiffMerge</a> by using the <a href="https://wiki.mercurial-scm.org/ExtdiffExtension">Extdiff extension</a>.</p>
54
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
117
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
118 <p>Now you can play with <a href="https://hg.reactionary.software/repo/test/">https://hg.reactionary.software/repo/test/</a> like this:</p>
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
119
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
120 <code block>
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
121 ~/learn $ hg clone https://hg.reactionary.software/repo/test/ hgtest1
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
122 no changes found
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
123 updating to branch default
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
124 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
125 ~/learn $ hg clone https://hg.reactionary.software/repo/test/ hgtest2
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
126 no changes found
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
127 updating to branch default
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
128 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
129 ~/learn $ ls -Fd h*
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
130 hgtest1/ hgtest2/
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
131 ~/learn $ cd hgtest1
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
132 ~/learn/hgtest1 $ touch file.txt
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
133 ~/learn/hgtest1 $ e file.txt
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
134 ~/learn/hgtest1 $ cat file.txt
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
135 some text
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
136 ~/learn/hgtest1 $ hg status
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
137 ? file.txt
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
138 ~/learn/hgtest1 $ hg add file.txt
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
139 ~/learn/hgtest1 $ hg status
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
140 A file.txt
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
141 ~/learn/hgtest1 $ hg pull
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
142 pulling from https://hg.reactionary.software/repo/test/
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
143 no changes found
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
144 ~/learn/hgtest1 $ hg commit -m 'add file.txt'
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
145 ~/learn/hgtest1 $ hg push
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
146 pushing to https://hg.reactionary.software/repo/test/
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
147 searching for changes
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
148 remote: adding changesets
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
149 remote: adding manifests
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
150 remote: adding file changes
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
151 remote: added 1 changesets with 1 changes to 1 files
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
152 ~/learn/hgtest1 $ cd ../hgtest2
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
153 ~/learn/hgtest2 $ hg pull
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
154 pulling from https://hg.reactionary.software/repo/test/
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
155 requesting all changes
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
156 adding changesets
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
157 adding manifests
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
158 adding file changes
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
159 added 1 changesets with 1 changes to 1 files
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
160 new changesets aab34516d8dc
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
161 (run 'hg update' to get a working copy)
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
162 ~/learn/hgtest2 $ hg update
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
163 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
164 ~/learn/hgtest2 $ hg status
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
165 ~/learn/hgtest2 $ cat file.txt
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
166 some text
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
167 ~/learn/hgtest2 $ e file.txt
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
168 ~/learn/hgtest2 $ cat file.txt
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
169 some text
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
170 and more
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
171 ~/learn/hgtest2 $ hg status
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
172 M file.txt
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
173 ~/learn/hgtest2 $ hg pull
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
174 pulling from https://hg.reactionary.software/repo/test/
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
175 searching for changes
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
176 no changes found
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
177 ~/learn/hgtest2 $ hg dm
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
178 ~/learn/hgtest2 $ hg commit -m 'and more'
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
179 ~/learn/hgtest2 $ hg push
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
180 pushing to https://hg.reactionary.software/repo/test/
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
181 searching for changes
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
182 remote: adding changesets
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
183 remote: adding manifests
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
184 remote: adding file changes
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
185 remote: added 1 changesets with 1 changes to 1 files
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
186 </code>
50db01566278 learn mercurial
Franklin Schmidt <fschmidt@gmail.com>
parents: 52
diff changeset
187
41
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
188 <%
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
189 end
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
190 }
86
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
191 java = {
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
192 title = [[Java 8]]
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
193 content = function()
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
194 %>
91
76baf48ea36b add translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 90
diff changeset
195 <p><a href="java.html">Java</a> is not an easy language to learn and if you later use Python or Luan then you won't use Java much. So why learn it first? Because it will give you a core understanding of programming. Also, ChatGPT understands Java very well, so this can help you learn it. And lastly because Java will help you understand Luan.</p>
86
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
196
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
197 <p>To learn Java, you will need the following resources:</p>
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
198 <ul>
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
199 <li><a href="https://docs.oracle.com/javase/8/docs/api/overview-summary.html">Java 8 API Specification</a> - This is the reference for the different types of Java objects and what they do. I will refer to this a lot.</li>
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
200 <li><a href="https://www.amazon.com/Java-Programming-Language-4th/dp/0321349806/">The Java Programming Language</a> - This is the core reference text for Java.</li>
89
Franklin Schmidt <fschmidt@gmail.com>
parents: 86
diff changeset
201 <li>You should get a Java book for beginners. Unfortunately they are all quite bad. The least bad ones I could find are <a href="https://www.amazon.com/dp/1265054630/">Java: A Beginner's Guide</a> and <a href="https://www.amazon.com/dp/1119986648/">Java All-in-One For Dummies</a>. You will have to pick a book and read it to learn Java.</li>
86
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
202 <li>For desktop GUI programming, you will need <a href="https://docs.oracle.com/javase/tutorial/uiswing/">Creating a GUI With Swing</a>, <a href="http://www.miglayout.com/">MigLayout</a>, <a href="https://www.formdev.com/flatlaf/">FlatLaf</a>, and <a href="https://docs.oracle.com/javase/tutorial/2d/">2D Graphics</a>.</li>
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
203 </ul>
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
204
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
205 <p>I am not so sadistic as to have you start with straight Java. That would be too painful. Instead I will have you start with a gentler interface to Java called BeanShell. Here are the steps to learning Java:</p>
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
206
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
207 <h3>Install Java 8</h3>
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
208
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
209 <p>Download <a href="https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html">Java (JDK) 8</a> and install it. Your Java book for beginners may have more detailed instructions. Of just ask ChatGPT if you have trouble. After installing the JDK, you can check it like this:
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
210
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
211 <code block>
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
212 ~ $ java -version
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
213 java version "1.8.0_241"
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
214 Java(TM) SE Runtime Environment (build 1.8.0_241-b07)
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
215 Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07, mixed mode)
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
216 ~ $
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
217 </code>
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
218
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
219 <h3>Learn BeanShell</h3>
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
220
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
221 <p>As with Bash, I will write my own <a href="beanshell.html">BeanShell tutorial</a>. Read it.</p>
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
222
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
223 <h3>Learn Java</h3>
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
224
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
225 <p>Now it's time to read your Java book for beginners and try writing some Java programs. Refer to <a href="https://www.amazon.com/Java-Programming-Language-4th/dp/0321349806/">The Java Programming Language</a> for details and ask ChatGPT for explanations. You do not need to become a Java expert, so don't spend too much time on this. You just need to get the basic idea of Java.</p>
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
226
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
227 <%
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
228 end
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
229 }
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
230 luan = {
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
231 title = [[Luan]]
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
232 content = function()
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
233 %>
91
76baf48ea36b add translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 90
diff changeset
234 <p>See <a href="<%=luan_url()%>/learn.html">Learning Luan</a>.</p>
86
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
235 <%
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
236 end
9b700f8d9610 learn java
Franklin Schmidt <fschmidt@gmail.com>
parents: 84
diff changeset
237 }
41
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
238 html = {
52
Franklin Schmidt <fschmidt@gmail.com>
parents: 49
diff changeset
239 title = [[HTML and CSS]]
41
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
240 content = function()
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
241 %>
59
91b5033f53b1 learn html
Franklin Schmidt <fschmidt@gmail.com>
parents: 58
diff changeset
242 <p>Google Chrome is the standard client-side web development tool. So the first step is to make sure that you have Chrome installed and running.</p>
91b5033f53b1 learn html
Franklin Schmidt <fschmidt@gmail.com>
parents: 58
diff changeset
243
72
8bd99d5f468e remove scum
Franklin Schmidt <fschmidt@gmail.com>
parents: 70
diff changeset
244 <p>Using Chrome, on any page you can right-click in an empty area and from the menu select "View Page Source". This will show you the HTML for the webpage. If you try this on different websites, you will probably notice that my webpages are fairly short and well organized while the webpages of modern culture are unreadable. Another thing to try is to right-click anywhere in a page and select "Inspect". This should open the developer tools with the tab "Elements" selected. In this tab, you get the HTML organized as a tree that can be expanded to collapsed. The "Elements" tab of Chrome developer tools will be your core tool when you work with HTML and CSS. You should play with it and do your own research on it to learn how it works.</p>
59
91b5033f53b1 learn html
Franklin Schmidt <fschmidt@gmail.com>
parents: 58
diff changeset
245
91b5033f53b1 learn html
Franklin Schmidt <fschmidt@gmail.com>
parents: 58
diff changeset
246 <p>The next step is to download this website like this:</p>
91b5033f53b1 learn html
Franklin Schmidt <fschmidt@gmail.com>
parents: 58
diff changeset
247
91b5033f53b1 learn html
Franklin Schmidt <fschmidt@gmail.com>
parents: 58
diff changeset
248 <code block>
67
b1982e401900 security
Franklin Schmidt <fschmidt@gmail.com>
parents: 65
diff changeset
249 ~/learn $ wget -r -k https://www.reactionary.software/
b1982e401900 security
Franklin Schmidt <fschmidt@gmail.com>
parents: 65
diff changeset
250 --2024-01-15 01:31:20-- https://www.reactionary.software/
59
91b5033f53b1 learn html
Franklin Schmidt <fschmidt@gmail.com>
parents: 58
diff changeset
251 ...
91b5033f53b1 learn html
Franklin Schmidt <fschmidt@gmail.com>
parents: 58
diff changeset
252 ~/learn $ cd www.reactionary.software/
91b5033f53b1 learn html
Franklin Schmidt <fschmidt@gmail.com>
parents: 58
diff changeset
253 ~/learn/www.reactionary.software $ ls -F
91b5033f53b1 learn html
Franklin Schmidt <fschmidt@gmail.com>
parents: 58
diff changeset
254 about.html hg_dev.html mercurial.html
91b5033f53b1 learn html
Franklin Schmidt <fschmidt@gmail.com>
parents: 58
diff changeset
255 bash.html index.html needed.html
91b5033f53b1 learn html
Franklin Schmidt <fschmidt@gmail.com>
parents: 58
diff changeset
256 books.html java.html nginx.html
91b5033f53b1 learn html
Franklin Schmidt <fschmidt@gmail.com>
parents: 58
diff changeset
257 discussion.html java_fork.html python.html
91b5033f53b1 learn html
Franklin Schmidt <fschmidt@gmail.com>
parents: 58
diff changeset
258 existing.html learn.html site.css
91b5033f53b1 learn html
Franklin Schmidt <fschmidt@gmail.com>
parents: 58
diff changeset
259 external_link.svg learn_bash.html this.html
91b5033f53b1 learn html
Franklin Schmidt <fschmidt@gmail.com>
parents: 58
diff changeset
260 freedit.html lucene.html wysiwyg.html
91b5033f53b1 learn html
Franklin Schmidt <fschmidt@gmail.com>
parents: 58
diff changeset
261 </code>
91b5033f53b1 learn html
Franklin Schmidt <fschmidt@gmail.com>
parents: 58
diff changeset
262
91b5033f53b1 learn html
Franklin Schmidt <fschmidt@gmail.com>
parents: 58
diff changeset
263 <p><code>index.html</code> is the home page. Find it in Mac Finder or Windows File Explorer, and then drag-and-drop it into Chrome. You should see this website. You can open the files in a text editor to see the HTML. And you can edit these files to see how the web page changes.</p>
91b5033f53b1 learn html
Franklin Schmidt <fschmidt@gmail.com>
parents: 58
diff changeset
264
91b5033f53b1 learn html
Franklin Schmidt <fschmidt@gmail.com>
parents: 58
diff changeset
265 <p>There is good documentation on HTML and CSS. Start with <a href="https://www.amazon.com/Cascading-Style-Sheets-Designing-Web/dp/0321193121/">Cascading Style Sheets: Designing for the Web</a>. This was written by the people who invented CSS and explains the core idea. Read the whole book. This book covers almost everything in this website. The only missing piece is <a href="https://css-tricks.com/snippets/css/a-guide-to-flexbox/">flexbox</a>. Next get <a href="https://www.amazon.com/CSS-Definitive-Guide-Layout-Presentation/dp/1098117611/">CSS: The Definitive Guide</a>. You should also read this whole book, but you can do it slowly as you work with CSS. You don't need to read this book right now, you can wait until you have finished the next two lessons.</p>
91b5033f53b1 learn html
Franklin Schmidt <fschmidt@gmail.com>
parents: 58
diff changeset
266
91b5033f53b1 learn html
Franklin Schmidt <fschmidt@gmail.com>
parents: 58
diff changeset
267 <p>Just play with HTML and CSS until you get a basic understanding of how they work. You should be able to understand the HTML and CSS of this website.</p>
91b5033f53b1 learn html
Franklin Schmidt <fschmidt@gmail.com>
parents: 58
diff changeset
268
91b5033f53b1 learn html
Franklin Schmidt <fschmidt@gmail.com>
parents: 58
diff changeset
269 <p>I left out resources for HTML itself. You should just look up HTML tags with Google or ChatGPT as you encounter them. That is good enough to learn HTML.</p>
91b5033f53b1 learn html
Franklin Schmidt <fschmidt@gmail.com>
parents: 58
diff changeset
270
72
8bd99d5f468e remove scum
Franklin Schmidt <fschmidt@gmail.com>
parents: 70
diff changeset
271 <p>Ideally one should be able to look at web pages around the internet to learn. But unfortunately they are mostly overcomplicated crap that is very difficult to understand. You can try. My personal websites are like this one - very simple, so they don't look professional to modern culture. I can't link to my best commercial website because that would ruin its reputation (because I am infamous). But I can link to some of my old commercial websites <a href="http://test.tleggings.com/">here</a> and <a href="http://test.super-resume.com/">here</a>. These have reasonable HTML and CSS.</p>
59
91b5033f53b1 learn html
Franklin Schmidt <fschmidt@gmail.com>
parents: 58
diff changeset
272
72
8bd99d5f468e remove scum
Franklin Schmidt <fschmidt@gmail.com>
parents: 70
diff changeset
273 <p>I have a few general principles for working with HTML and CSS. First, modern culture claims that HTML is for content and CSS is for styling. This is nonsense. Both HTML and CSS are for layout, don't think of them as being conceptually different. Just use both in the simplest possible way to get the results you want. Don't bother with the useless new HTML5 content tags like <code>header</code>. Just use <code>div</code> and <code>span</code> for most things. Also I use HTML attributes as selectors, not HTML classes. This is just simpler. HTML classes are useless, leave them for modern culture.</p>
59
91b5033f53b1 learn html
Franklin Schmidt <fschmidt@gmail.com>
parents: 58
diff changeset
274
91b5033f53b1 learn html
Franklin Schmidt <fschmidt@gmail.com>
parents: 58
diff changeset
275 <p>You will need HTML, CSS, Javascript, and Luan to make a website. So I suggest that you get a basic understanding of each of these and then go back later to study them in greater depth.</p>
41
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
276 <%
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
277 end
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
278 }
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
279 js = {
52
Franklin Schmidt <fschmidt@gmail.com>
parents: 49
diff changeset
280 title = [[JavaScript]]
41
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
281 content = function()
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
282 %>
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
283 <p>later</p>
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
284 <%
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
285 end
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
286 }
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
287 http = {
52
Franklin Schmidt <fschmidt@gmail.com>
parents: 49
diff changeset
288 title = [[HTTP]]
Franklin Schmidt <fschmidt@gmail.com>
parents: 49
diff changeset
289 content = function()
Franklin Schmidt <fschmidt@gmail.com>
parents: 49
diff changeset
290 %>
Franklin Schmidt <fschmidt@gmail.com>
parents: 49
diff changeset
291 <p>later</p>
Franklin Schmidt <fschmidt@gmail.com>
parents: 49
diff changeset
292 <%
Franklin Schmidt <fschmidt@gmail.com>
parents: 49
diff changeset
293 end
Franklin Schmidt <fschmidt@gmail.com>
parents: 49
diff changeset
294 }
Franklin Schmidt <fschmidt@gmail.com>
parents: 49
diff changeset
295 lucene = {
Franklin Schmidt <fschmidt@gmail.com>
parents: 49
diff changeset
296 title = [[Lucene]]
41
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
297 content = function()
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
298 %>
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
299 <p>later</p>
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
300 <%
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
301 end
fbf2a8deee98 learn minor
Franklin Schmidt <fschmidt@gmail.com>
parents: 40
diff changeset
302 }
40
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
303 }
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
304
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
305
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
306 local function show_toc(content)
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
307 %>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
308 <ul>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
309 <%
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
310 for id, info in pairs(content) do
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
311 %>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
312 <li><a id="c_<%=id%>" href="#<%=id%>"><%=info.title%></a></li>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
313 <%
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
314 end
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
315 %>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
316 </ul>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
317 <%
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
318 end
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
319
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
320 local function show_content(content,h)
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
321 for id, info in pairs(content) do
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
322 %>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
323 <div heading>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
324 <h<%=h%>><a id="<%=id%>" href="#<%=id%>"><%=info.title%></a></h<%=h%>>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
325 <a href="#c_<%=id%>">contents</a>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
326 </div>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
327 <%
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
328 info.content()
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
329 end
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
330 end
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
331
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
332 return function()
91
76baf48ea36b add translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 90
diff changeset
333 Io.stdout = text_writer()
40
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
334 %>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
335 <!doctype html>
91
76baf48ea36b add translation
Franklin Schmidt <fschmidt@gmail.com>
parents: 90
diff changeset
336 <html lang="<%=get_lang()%>">
40
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
337 <head>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
338 <% head() %>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
339 <title>Learn Reactionary Programming</title>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
340 </head>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
341 <body>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
342 <% header() %>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
343 <div content>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
344 <h1><a href="learn.html">Learn Reactionary Programming</a></h1>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
345 <hr>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
346 <h2>Contents</h2>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
347 <div toc>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
348 <% show_toc(content) %>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
349 </div>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
350 <hr>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
351 <% show_content(content,2) %>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
352 </div>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
353 </body>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
354 </html>
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
355 <%
ebab99118e19 add learn.html
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
356 end