forked from crifan/crifan_ebook_readme
-
Notifications
You must be signed in to change notification settings - Fork 0
/
README.html
687 lines (609 loc) · 38.3 KB
/
README.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
<!DOCTYPE html>
<html>
<head>
<title>README</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="file:////Users/crifan/.vscode/extensions/shd101wyy.markdown-preview-enhanced-0.3.2/node_modules/@shd101wyy/mume/dependencies/katex/katex.min.css">
<style>
/**
* prism.js Github theme based on GitHub's theme.
* @author Sam Clarke
*/
code[class*="language-"],
pre[class*="language-"] {
color: #333;
background: none;
font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
word-wrap: normal;
line-height: 1.4;
-moz-tab-size: 8;
-o-tab-size: 8;
tab-size: 8;
-webkit-hyphens: none;
-moz-hyphens: none;
-ms-hyphens: none;
hyphens: none;
}
/* Code blocks */
pre[class*="language-"] {
padding: .8em;
overflow: auto;
/* border: 1px solid #ddd; */
border-radius: 3px;
/* background: #fff; */
background: #f5f5f5;
}
/* Inline code */
:not(pre) > code[class*="language-"] {
padding: .1em;
border-radius: .3em;
white-space: normal;
background: #f5f5f5;
}
.token.comment,
.token.blockquote {
color: #969896;
}
.token.cdata {
color: #183691;
}
.token.doctype,
.token.punctuation,
.token.variable,
.token.macro.property {
color: #333;
}
.token.operator,
.token.important,
.token.keyword,
.token.rule,
.token.builtin {
color: #a71d5d;
}
.token.string,
.token.url,
.token.regex,
.token.attr-value {
color: #183691;
}
.token.property,
.token.number,
.token.boolean,
.token.entity,
.token.atrule,
.token.constant,
.token.symbol,
.token.command,
.token.code {
color: #0086b3;
}
.token.tag,
.token.selector,
.token.prolog {
color: #63a35c;
}
.token.function,
.token.namespace,
.token.pseudo-element,
.token.class,
.token.class-name,
.token.pseudo-class,
.token.id,
.token.url-reference .token.variable,
.token.attr-name {
color: #795da3;
}
.token.entity {
cursor: help;
}
.token.title,
.token.title .token.punctuation {
font-weight: bold;
color: #1d3e81;
}
.token.list {
color: #ed6a43;
}
.token.inserted {
background-color: #eaffea;
color: #55a532;
}
.token.deleted {
background-color: #ffecec;
color: #bd2c00;
}
.token.bold {
font-weight: bold;
}
.token.italic {
font-style: italic;
}
/* JSON */
.language-json .token.property {
color: #183691;
}
.language-markup .token.tag .token.punctuation {
color: #333;
}
/* CSS */
code.language-css,
.language-css .token.function {
color: #0086b3;
}
/* YAML */
.language-yaml .token.atrule {
color: #63a35c;
}
code.language-yaml {
color: #183691;
}
/* Ruby */
.language-ruby .token.function {
color: #333;
}
/* Markdown */
.language-markdown .token.url {
color: #795da3;
}
/* Makefile */
.language-makefile .token.symbol {
color: #795da3;
}
.language-makefile .token.variable {
color: #183691;
}
.language-makefile .token.builtin {
color: #0086b3;
}
/* Bash */
.language-bash .token.keyword {
color: #0086b3;
}html body{font-family:"Helvetica Neue",Helvetica,"Segoe UI",Arial,freesans,sans-serif;font-size:16px;line-height:1.6;color:#333;background-color:#fff;overflow:initial;box-sizing:border-box;word-wrap:break-word}html body>:first-child{margin-top:0}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{line-height:1.2;margin-top:1em;margin-bottom:16px;color:#000}html body h1{font-size:2.25em;font-weight:300;padding-bottom:.3em}html body h2{font-size:1.75em;font-weight:400;padding-bottom:.3em}html body h3{font-size:1.5em;font-weight:500}html body h4{font-size:1.25em;font-weight:600}html body h5{font-size:1.1em;font-weight:600}html body h6{font-size:1em;font-weight:600}html body h1,html body h2,html body h3,html body h4,html body h5{font-weight:600}html body h5{font-size:1em}html body h6{color:#5c5c5c}html body strong{color:#000}html body del{color:#5c5c5c}html body a:not([href]){color:inherit;text-decoration:none}html body a{color:#08c;text-decoration:none}html body a:hover{color:#00a3f5;text-decoration:none}html body img{max-width:100%}html body>p{margin-top:0;margin-bottom:16px;word-wrap:break-word}html body>ul,html body>ol{margin-bottom:16px}html body ul,html body ol{padding-left:2em}html body ul.no-list,html body ol.no-list{padding:0;list-style-type:none}html body ul ul,html body ul ol,html body ol ol,html body ol ul{margin-top:0;margin-bottom:0}html body li{margin-bottom:0}html body li.task-list-item{list-style:none}html body li>p{margin-top:0;margin-bottom:0}html body .task-list-item-checkbox{margin:0 .2em .25em -1.8em;vertical-align:middle}html body .task-list-item-checkbox:hover{cursor:pointer}html body blockquote{margin:16px 0;font-size:inherit;padding:0 15px;color:#5c5c5c;border-left:4px solid #d6d6d6}html body blockquote>:first-child{margin-top:0}html body blockquote>:last-child{margin-bottom:0}html body hr{height:4px;margin:32px 0;background-color:#d6d6d6;border:0 none}html body table{margin:10px 0 15px 0;border-collapse:collapse;border-spacing:0;display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}html body table th{font-weight:bold;color:#000}html body table td,html body table th{border:1px solid #d6d6d6;padding:6px 13px}html body dl{padding:0}html body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:bold}html body dl dd{padding:0 16px;margin-bottom:16px}html body code{font-family:Menlo,Monaco,Consolas,'Courier New',monospace;font-size:.85em !important;color:#000;background-color:#f0f0f0;border-radius:3px;padding:.2em 0}html body code::before,html body code::after{letter-spacing:-0.2em;content:"\00a0"}html body pre>code{padding:0;margin:0;font-size:.85em !important;word-break:normal;white-space:pre;background:transparent;border:0}html body .highlight{margin-bottom:16px}html body .highlight pre,html body pre{padding:1em;overflow:auto;font-size:.85em !important;line-height:1.45;border:#d6d6d6;border-radius:3px}html body .highlight pre{margin-bottom:0;word-break:normal}html body pre code,html body pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}html body pre code:before,html body pre tt:before,html body pre code:after,html body pre tt:after{content:normal}html body p,html body blockquote,html body ul,html body ol,html body dl,html body pre{margin-top:0;margin-bottom:16px}html body kbd{color:#000;border:1px solid #d6d6d6;border-bottom:2px solid #c7c7c7;padding:2px 4px;background-color:#f0f0f0;border-radius:3px}@media print{html body{background-color:#fff}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{color:#000;page-break-after:avoid}html body blockquote{color:#5c5c5c}html body pre{page-break-inside:avoid}html body table{display:table}html body img{display:block;max-width:100%;max-height:100%}html body pre,html body code{word-wrap:break-word;white-space:pre}}.markdown-preview{width:100%;height:100%;box-sizing:border-box}.markdown-preview .pagebreak,.markdown-preview .newpage{page-break-before:always}.markdown-preview pre.line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.markdown-preview pre.line-numbers>code{position:relative}.markdown-preview pre.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:1em;font-size:100%;left:0;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-preview pre.line-numbers .line-numbers-rows>span{pointer-events:none;display:block;counter-increment:linenumber}.markdown-preview pre.line-numbers .line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.markdown-preview .mathjax-exps .MathJax_Display{text-align:center !important}.markdown-preview:not([for="preview"]) .code-chunk .btn-group{display:none}.markdown-preview:not([for="preview"]) .code-chunk .status{display:none}.markdown-preview:not([for="preview"]) .code-chunk .output-div{margin-bottom:16px}.scrollbar-style::-webkit-scrollbar{width:8px}.scrollbar-style::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}.scrollbar-style::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for="html-export"]:not([data-presentation-mode]){position:relative;width:100%;height:100%;top:0;left:0;margin:0;padding:0;overflow:auto}html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{position:relative;top:0}@media screen and (min-width:914px){html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{padding:2em calc(50% - 457px)}}@media screen and (max-width:914px){html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{font-size:14px !important;padding:1em}}@media print{html body[for="html-export"]:not([data-presentation-mode]) #sidebar-toc-btn{display:none}}html body[for="html-export"]:not([data-presentation-mode]) #sidebar-toc-btn{position:fixed;bottom:8px;left:8px;font-size:28px;cursor:pointer;color:inherit;z-index:99;width:32px;text-align:center;opacity:.4}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] #sidebar-toc-btn{opacity:1}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc{position:fixed;top:0;left:0;width:300px;height:100%;padding:32px 0 48px 0;font-size:14px;box-shadow:0 0 4px rgba(150,150,150,0.33);box-sizing:border-box;overflow:auto;background-color:inherit}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar{width:8px}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc a{text-decoration:none}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{padding:0 1.6em;margin-top:.8em}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc li{margin-bottom:.8em}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{list-style-type:none}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{left:300px;width:calc(100% - 300px);padding:2em calc(50% - 457px - 150px);margin:0;box-sizing:border-box}@media screen and (max-width:1274px){html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{width:100%}}html body[for="html-export"]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .markdown-preview{left:50%;transform:translateX(-50%)}html body[for="html-export"]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .md-sidebar-toc{display:none}
</style>
</head>
<body for="html-export">
<div class="mume markdown-preview ">
<h1 class="mume-header" id="crifan%E7%9A%84%E7%94%B5%E5%AD%90%E4%B9%A6%E7%9A%84%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E">Crifan的电子书的使用说明</h1>
<h2 class="mume-header" id="%E4%B8%BA%E4%BD%95%E8%A6%81%E6%9C%89crifan%E7%9A%84%E7%94%B5%E5%AD%90%E4%B9%A6">为何要有:Crifan的电子书</h2>
<p>我之前折腾过很多方面的内容,包括技术类的,非技术类的。</p>
<p>关于技术类中又分很多种,其中都放到了我的网站 <a href="http://crifan.com">crifan.com</a> 上,目前已有7000+的技术帖子,但多数都是零散的某个细节的知识点。</p>
<p>当我在某个技术领域有了一定的心得和经验后,就会抽空整理成相对成系统的内容,用(<code>Docbook</code>、<code>Gitbook</code>等)工具去变成电子书,方便别人参考。</p>
<h2 class="mume-header" id="%E4%B8%BA%E4%BD%95%E8%A6%81%E6%9C%89crifan%E7%9A%84%E7%94%B5%E5%AD%90%E4%B9%A6%E7%9A%84%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E">为何要有:Crifan的电子书的使用说明</h2>
<p>对于这些电子书,之前虽然已经分类列出来了,但是缺少了基本的介绍,所以对于很多人来说,不方便快速找到自己所需要看哪些。</p>
<p>现在加上必要的简介,重新整理如下:</p>
<p>目前所写电子书:</p>
<ul>
<li>内容上:主要分两类
<ul>
<li>一方面是计算机方面的相关的,技术相关的</li>
<li>另一方面属于非技术,比如生活类的,学习类的</li>
</ul>
</li>
<li>制作工具上:也分两类
<ul>
<li>一类是用<code>Docbook</code>制作的
<ul>
<li>主入口在:<a href="http://www.crifan.com/files/doc/docbook/">http://www.crifan.com/files/doc/docbook/</a></li>
</ul>
</li>
<li>另一类是用<code>Gitbook</code>制作的
<ul>
<li>弄了2份一样的,分别放在了
<ul>
<li>自己的 <a href="http://crifan.com">crifan.com</a> 的网站上
<ul>
<li>入口都在:<a href="http://book.crifan.com/books/">http://book.crifan.com/books/</a></li>
</ul>
</li>
<li>和 <a href="https://crifan.github.io">https://crifan.github.io</a> 上
<ul>
<li>对应源码是:<a href="https://github.com/crifan/crifan.github.io">https://github.com/crifan/crifan.github.io</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>下面就来详细介绍一下,都有哪些方面的电子书,以及大概的内容分类如何,便于每人找到自己想要的内容:</p>
<h2 class="mume-header" id="%E6%8A%80%E6%9C%AF%E7%B1%BB">技术类</h2>
<p>计算机的技术,从大的概念上,可以大致分为:</p>
<ul>
<li><strong>上层:纯软件</strong>
<ul>
<li>涉及到在PC(Windows/Mac/Linux)上,用各种编辑器/IDE,去编写各种代码,实现各种工具/软件/脚本等内容</li>
<li>包括PC桌面端软件,Web领域网页开发,移动端APP开发等等</li>
</ul>
</li>
<li><strong>中间:</strong>(软硬件结合的)<strong>嵌入式</strong>
<ul>
<li>涉及到在某某开发板上,写嵌入式代码,驱动硬件工作</li>
<li>包括给别人的芯片或开发板,去写某BSP,某个模块(蓝牙,USB,FM,Nand Flash等)的驱动</li>
</ul>
</li>
<li><strong>底层:纯硬件</strong>
<ul>
<li>涉及PCB Layout,设计和生产开发版</li>
<li>涉及到各种芯片的涉及,包括CPU,内存,显示屏等,涉及到流水线,代工厂等等内容</li>
</ul>
</li>
</ul>
<p>此处目前折腾的领域主要是:</p>
<p><strong>中间的嵌入式</strong> 和 <strong>上层的纯软件</strong></p>
<h3 class="mume-header" id="%E6%8A%80%E6%9C%AF%E7%B1%BB%E9%80%9A%E7%94%A8%E7%9F%A5%E8%AF%86">技术类通用知识</h3>
<p>不论哪方面的技术,都有一些通用的学习方面,逻辑概念,总结如下:</p>
<ul>
<li>关于如何利用工具和脚本提供工作效率的:
<ul>
<li><a href="https://crifan.github.io/improve_work_efficiency/website">如何提高工作效率</a></li>
</ul>
</li>
<li>关于要有良好的编程习惯和逻辑,才能写出高质量代码:
<ul>
<li><a href="https://crifan.github.io/program_code_style/website">编程习惯和代码风格</a></li>
<li><a href="http://crifan.com/files/doc/docbook/lan_coding_rule/release/html/lan_coding_rule.html">计算机语言编程规范</a></li>
</ul>
</li>
<li>对于不同领域的技术,都有一些通用的概念需要了解,才能更好的开发:
<ul>
<li><a href="https://crifan.github.io/program_common_logic/website">计算机编程通用逻辑知识概念</a></li>
</ul>
</li>
<li>以及都有一些通知的基础知识:
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/soft_dev_basic/release/html/soft_dev_basic.html">软件开发基础知识</a></li>
<li><a href="http://crifan.com/files/doc/docbook/soft_tech_common/release/html/soft_tech_common.html">软件技术开发通用知识</a></li>
</ul>
</li>
<li>想要能用google搜索技术资料,可以使用shadowsocks:
<ul>
<li><a href="https://crifan.github.io/scientific_network_summary/website">科学上网相关知识总结</a></li>
</ul>
</li>
</ul>
<h3 class="mume-header" id="%E6%8E%A8%E8%8D%90%E7%9A%84%E5%B7%A5%E5%85%B7%E6%88%96%E8%BD%AF%E4%BB%B6">推荐的工具或软件</h3>
<p>折腾技术或非技术期间,会用到很多软件和工具,此处把觉得不错的,整理出来,推荐之:</p>
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/rec_soft_npp/release/html/rec_soft_npp.html">【crifan推荐】轻量级文本编辑器,Notepad最佳替代品:Notepad++</a></li>
<li><a href="http://crifan.com/files/doc/docbook/rec_soft_securecrt/release/html/rec_soft_securecrt.html">【crifan推荐】支持多种协议的串口开发工具:SecureCRT</a></li>
</ul>
<h3 class="mume-header" id="%E7%A1%AC%E4%BB%B6%E7%B1%BB">硬件类</h3>
<p>折腾嵌入式期间,其实也想去了解硬件方面的知识,只不过没有深入。</p>
<p>只整理了点和硬件相关的皮毛:</p>
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/hardware_basic/release/html/hardware_basic.html">硬件电路基础知识</a></li>
</ul>
<h3 class="mume-header" id="%E5%B5%8C%E5%85%A5%E5%BC%8F%E8%BD%AF%E4%BB%B6">嵌入式软件</h3>
<p>下面是之前折腾的嵌入式开发相关的内容:</p>
<h4 class="mume-header" id="%E5%B5%8C%E5%85%A5%E5%BC%8F%E9%80%9A%E7%94%A8%E7%9F%A5%E8%AF%86">嵌入式通用知识</h4>
<p>嵌入式领域内有些通用的,基本知识:</p>
<p>关于CPU方面的:</p>
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/arm_vs_mips/release/html/arm_vs_mips.html">ARM与MIPS的详细对比</a></li>
</ul>
<p>和技术和概念相关的,比如:</p>
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/interrupt_related/release/html/interrupt_related.html">【详解】中断相关的知识</a></li>
</ul>
<h4 class="mume-header" id="%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E4%BA%A4%E5%8F%89%E7%BC%96%E8%AF%91%E5%99%A8">开发环境+交叉编译器</h4>
<p>在折腾嵌入式相关开发前,往往要先去搭建开发环境,其中就要先去搞懂:交叉编译</p>
<p>先去搞清楚什么是交叉编译:</p>
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/cross_compile/release/html/cross_compile.html">交叉编译详解</a></li>
</ul>
<p>然后再去了解相关的GNU方面的工具:</p>
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/binutils_intro/release/html/binutils_intro.html">GNU Binutils详解</a></li>
</ul>
<p>然后再去用具体的某个工具,去搭建交叉编译环境(和相关的工具链、rootfs等内容):</p>
<ul>
<li><a href="http://crifan.com/files/doc/docbook/buildroot_intro/release/html/buildroot_intro.html">Buildroot详解</a></li>
<li><a href="http://www.crifan.com/files/doc/docbook/crosstool_ng/release/html/crosstool_ng.html">crosstool-ng详解</a></li>
</ul>
<p>关于开发环境的:</p>
<p>在Windows上折腾Linux方面的开发,用Cygiwn:</p>
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/cygwin_intro/release/html/cygwin_intro.html">Cygwin详解</a></li>
</ul>
<h4 class="mume-header" id="%E5%B5%8C%E5%85%A5%E5%BC%8Flinux%E5%B5%8C%E5%85%A5%E5%BC%8Flinux%E9%A9%B1%E5%8A%A8">嵌入式Linux+嵌入式Linux驱动</h4>
<p>如果对于嵌入式软件的整体概念不了解,可以去看:</p>
<ul>
<li><a href="https://www.crifan.com/files/doc/docbook/embedded_soft_dev/release/html/embedded_soft_dev.html">嵌入式软件开发</a></li>
</ul>
<p>如果想要了解嵌入式软件中关于驱动开发的事情,可以去看:</p>
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/embedded_drv_dev/release/html/embedded_drv_dev.html">嵌入式驱动开发</a></li>
</ul>
<p>而关于嵌入式Linux方面的软件和软件中的驱动,可以去看:</p>
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/embedded_linux_dev/release/html/embedded_linux_dev.html">嵌入式Linux软件开发</a></li>
<li><a href="http://www.crifan.com/files/doc/docbook/embedded_linux_drv_dev/release/html/embedded_linux_drv_dev.html">嵌入式Linux驱动开发</a></li>
</ul>
<p>关于嵌入式Linux开发期间的,有:</p>
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/firmware_download/release/html/firmware_download.html">【详解】嵌入式开发中固件的烧录方式</a></li>
<li><a href="http://www.crifan.com/files/doc/docbook/runtime_upgrade_linux/release/html/runtime_upgrade_linux.html">在Linux运行期间升级Linux系统(Uboot+kernel+Rootfs)</a></li>
</ul>
<p>而关于典型的Uboot+Kernel+Rootfs的嵌入式Linux中的Uboot:</p>
<p>其中的最开始的启动代码相关的Start.S的汇编代码,实现了启动硬件的功能。</p>
<p>而关于启动的逻辑的具体分析:</p>
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/uboot_starts_analysis/release/html/uboot_starts_analysis.html">Uboot中start.S源码的指令级的详尽解析</a></li>
</ul>
<p>而关于具体的某个模块/功能方面的驱动有:</p>
<p>关于DMA的驱动:</p>
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/dma_pl08x_analysis/release/html/dma_pl08x_analysis.html">详解ARM的AMBA设备中的DMA设备PL08X的Linux驱动</a></li>
</ul>
<p>关于无线网卡的驱动:</p>
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/linux_wireless/release/html/linux_wireless.html">如何在Linux下写无线网卡的驱动</a></li>
</ul>
<p>关于Nand Flash方面的驱动和介绍:</p>
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/linux_nand_driver/release/html/linux_nand_driver.html">【详解】如何编写Linux下Nand Flash驱动</a></li>
</ul>
<p>而其中Linux中关于Nand Flash的是MTD层,MTD中关于如何识别Nand Flash和启动过程的解析是:</p>
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/nand_get_type/release/html/nand_get_type.html">Linux MTD下获取Nand flash各个参数的过程的详细解析</a></li>
</ul>
<p>而关于USB方面的协议介绍和相关驱动开发总结是:</p>
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/usb_basic/release/html/usb_basic.html">USB基础知识概论</a></li>
<li><a href="http://www.crifan.com/files/doc/docbook/usb_disk_driver/release/html/usb_disk_driver.html">如何实现Linux下的U盘(USB Mass Storage)驱动</a></li>
<li><a href="http://www.crifan.com/files/doc/docbook/usb_hid/release/html/usb_hid.html">USB HID Learning Record</a></li>
</ul>
<h4 class="mume-header" id="%E5%85%B7%E4%BD%93%E6%A8%A1%E5%9D%97%E6%88%96%E9%A2%86%E5%9F%9F">具体模块或领域</h4>
<h5 class="mume-header" id="%E5%A4%A7%E7%9A%84%E6%96%B9%E5%90%91%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%9A%84%E4%B8%8D%E5%90%8C%E5%BA%94%E7%94%A8%E9%A2%86%E5%9F%9F">大的方向=嵌入式的不同应用领域</h5>
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/fieldbus_intro/release/html/fieldbus_intro.html">现场总线Fieldbus简析</a></li>
</ul>
<p>条形码Symbology相关的,各种不同类型的条形码的总结:</p>
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/symbology_code128/release/html/symbology_code128.html">Code 128 Symbology Introduction</a></li>
<li><a href="http://www.crifan.com/files/doc/docbook/symbology_gs1128/release/html/symbology_gs1128.html">GS1-128条形码和相关的AI及FNC1的详解</a></li>
<li><a href="http://www.crifan.com/files/doc/docbook/symbology_plessey/release/html/symbology_plessey.html">Plessey & MSI Symbology Introduction</a></li>
<li><a href="http://www.crifan.com/files/doc/docbook/symbology_upc/release/html/symbology_upc.html">UPC/UPC-A/UPC-E & EAN Barcode Symbology</a></li>
</ul>
<h5 class="mume-header" id="%E5%B0%8F%E6%96%B9%E9%9D%A2%E6%9D%A5%E8%AF%B4%E5%85%B3%E4%BA%8E%E5%85%B7%E4%BD%93%E7%9A%84%E6%A8%A1%E5%9D%97%E7%A1%AC%E4%BB%B6%E5%8D%8F%E8%AE%AE%E6%96%B9%E9%9D%A2">小方面来说=关于具体的模块/硬件/协议方面</h5>
<p>关于蓝牙的:</p>
<ul>
<li><a href="http://crifan.com/files/doc/docbook/bluetooth_intro/release/html/bluetooth_intro.html">蓝牙协议详解</a></li>
</ul>
<p>关于串口/RS232的:</p>
<ul>
<li><a href="http://crifan.com/files/doc/docbook/rs232_serial_intro/release/html/rs232_serial_intro.html">RS232串口协议详解</a></li>
</ul>
<p>关于音频领域的:</p>
<p>关于MPEG和MP3的知识:</p>
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/mpeg_vbr/release/html/mpeg_vbr.html">MPEG简介 + 如何计算CBR和VBR的MP3的播放时间</a></li>
</ul>
<h3 class="mume-header" id="%E4%B8%8A%E5%B1%82%E8%BD%AF%E4%BB%B6">上层软件</h3>
<p>对于上层纯软件方面,也有一些总结:</p>
<h4 class="mume-header" id="%E4%B8%8A%E5%B1%82%E8%BD%AF%E4%BB%B6%E7%9A%84%E9%80%9A%E7%94%A8%E7%9F%A5%E8%AF%86">上层软件的通用知识</h4>
<p>关于后台开发和设计接口,移动端调用后台接口,测试人员测试接口和网页等相关的:</p>
<p>和HTTP方面的知识:</p>
<ul>
<li><a href="https://crifan.github.io/http_summary/website">HTTP知识总结</a></li>
</ul>
<p>以及后台人员设计RESTFul的API接口需要了解的:</p>
<ul>
<li><a href="https://crifan.github.io/http_restful_api/website">HTTP后台端:RESTful API接口设计</a></li>
</ul>
<p>以及后台人员开发调试接口时,移动端调用接口时,测试人员测试接口时,可以用到的Postman工具:</p>
<ul>
<li><a href="https://crifan.github.io/api_tool_postman/website">API开发利器:Postman</a></li>
</ul>
<p>各种计算机语言通用的的方面的知识总结:</p>
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/programming_language_basic/release/html/programming_language_basic.html">计算机编程语言基础知识</a></li>
<li><a href="http://www.crifan.com/files/doc/docbook/language_summary/release/html/language_summary.html">各种计算机语言简介和总结</a></li>
</ul>
<p>在涉及到前台和后台数据交互,往往都是用JSON:</p>
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/json_tutorial/release/html/json_tutorial.html">JSON详解</a></li>
</ul>
<p>不同的语言和工具中,都支持用正则表达式去实现复杂的规则去提取想要的数据:</p>
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/regular_expression/release/html/regular_expression.html">正则表达式学习心得</a></li>
</ul>
<p>而用不同的编辑器或IDE,以及处理文件相关的内容时,往往会涉及到文件的字符编码,可参考:</p>
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/char_encoding/release/html/char_encoding.html">字符编码详解</a></li>
</ul>
<p>而上面的教程内容太多太杂,如果只是想要简单的使用编码方面的知识,可以直接去看:</p>
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/char_encoding_usage/release/html/char_encoding_usage.html">字符编码应用</a></li>
</ul>
<h4 class="mume-header" id="pc%E6%A1%8C%E9%9D%A2%E7%AB%AF%E8%BD%AF%E4%BB%B6">PC桌面端软件</h4>
<p>在写Windows平台的桌面端软件时,可以使用C#:</p>
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/csharp_summary/release/html/csharp_summary.html">C#学习心得</a></li>
</ul>
<h4 class="mume-header" id="%E7%BD%91%E9%A1%B5web%E9%A2%86%E5%9F%9F%E5%BC%80%E5%8F%91">网页Web领域开发</h4>
<p>在涉及到Web网页自动化测试,写爬虫等,会涉及到Selenium:</p>
<ul>
<li><a href="https://crifan.github.io/selenium_summary/website">Selenium知识总结</a></li>
</ul>
<p>而在Web和上层领域内,对于html类的内容提取常会涉及到Xpath:</p>
<ul>
<li><a href="https://crifan.github.io/xpath_summary/website">XPath知识总结</a></li>
</ul>
<p>关于如何搭建网站,以及如何给网站搬家的话,可以参考:</p>
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/build_website/release/html/build_website.html">建设网站详细教程</a></li>
<li><a href="http://www.crifan.com/files/doc/docbook/website_transfer/release/html/website_transfer.html">网站搬家详解</a></li>
</ul>
<h4 class="mume-header" id="%E7%A7%BB%E5%8A%A8%E7%AB%AFapp%E5%BC%80%E5%8F%91">移动端APP开发</h4>
<p>在涉及到移动端开发时,可以参考:</p>
<ul>
<li><a href="https://crifan.github.io/mobiel_app_summary/website">移动端APP开发总结</a></li>
</ul>
<h4 class="mume-header" id="%E4%B8%8A%E5%B1%82%E8%BD%AF%E4%BB%B6%E7%9A%84%E5%85%B6%E4%BB%96%E9%A2%86%E5%9F%9F">上层软件的其他领域</h4>
<p>比如想要开发自己特定领域内的语言的解析器,即实现自己的编译器,可以使用ANTLR:</p>
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/antlr_tutorial/release/html/antlr_tutorial.html">ANTLR教程</a></li>
</ul>
<p>想要和我一样,制作出复杂的电子书,可以用相关的工具,比如:</p>
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/docbook_dev_note/release/html/docbook_dev_note.html">Docbook开发手记</a></li>
</ul>
<p>折腾网络爬虫(和模拟登录)领域的话,可以参考:</p>
<ul>
<li>去了解整个的逻辑和相关的技术:
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/web_scrape_emulate_login/release/html/web_scrape_emulate_login.html">详解抓取网站,模拟登陆,抓取动态网页的原理和实现(Python,C#等)</a></li>
</ul>
</li>
<li>用Python去实现爬虫:
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/python_topic_web_scrape/release/html/python_topic_web_scrape.html">Python专题教程:抓取网站,模拟登陆,抓取动态网页</a></li>
</ul>
</li>
</ul>
<h4 class="mume-header" id="python%E8%AF%AD%E8%A8%80">Python语言</h4>
<p>折腾折腾Pyton期间,单独整理了一系列的内容,供参考:</p>
<p>用于入门级的介绍的:</p>
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/python_beginner_tutorial/release/html/python_beginner_tutorial.html">python初级教程:入门详解</a></li>
</ul>
<p>关于整体的Python的心得和总结:</p>
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/python_intermediate_tutorial/release/html/python_intermediate_tutorial.html">python中级教程:开发总结</a></li>
<li><a href="http://www.crifan.com/files/doc/docbook/python_summary/release/html/python_summary.html">Python语言总结</a></li>
</ul>
<p>关于某个特定的模块的总结:</p>
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/python_topic_beautifulsoup/release/html/python_topic_beautifulsoup.html">Python专题教程:BeautifulSoup详解</a></li>
<li><a href="http://www.crifan.com/files/doc/docbook/python_topic_re/release/html/python_topic_re.html">Python专题教程:正则表达式re模块详解</a></li>
<li><a href="http://www.crifan.com/files/doc/docbook/python_topic_str_encoding/release/html/python_topic_str_encoding.html">Python专题教程:字符串和字符编码</a></li>
</ul>
<h4 class="mume-header" id="%E6%88%91%E4%B8%AA%E4%BA%BA%E8%87%AA%E5%B7%B1crifan%E7%9B%B8%E5%85%B3%E7%9A%84%E5%86%85%E5%AE%B9">我个人=自己=Crifan相关的内容</h4>
<p>在折腾技术方面,整理出一些,相对通用的库,整理出来,供参考:</p>
<p>目前最新的代码,都放到 <a href="https://github.com/crifan">crifan的Github</a>上了:</p>
<p>其中关于自己的库函数,各种语言都有:</p>
<p><a href="https://github.com/crifan/crifanLib">https://github.com/crifan/crifanLib</a></p>
<p>其中关于C#和Python,分别写了专门的电子书解释如何使用:</p>
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/crifanlib_csharp/release/html/crifanlib_csharp.html">详解crifan的C#库:crifanLib.cs</a></li>
<li><a href="http://www.crifan.com/files/doc/docbook/crifanlib_python/release/html/crifanlib_python.html">详解crifan的Python库:crifanLib.py</a></li>
</ul>
<h2 class="mume-header" id="%E9%9D%9E%E6%8A%80%E6%9C%AF%E7%B1%BB">非技术类</h2>
<h3 class="mume-header" id="%E7%94%B5%E8%84%91%E8%AE%A1%E7%AE%97%E6%9C%BA%E4%BD%BF%E7%94%A8%E7%B1%BB">电脑计算机使用类</h3>
<p>和电脑/计算机使用方面的知识,比如有哪些常见的操作系统,以及如何安装软件和驱动等知识的:</p>
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/compute_basic/release/html/compute_basic.html">电脑基础知识教程</a></li>
</ul>
<p>以及觉得很多好用的工具和软件,也进行了推荐:</p>
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/crifan_rec_soft/release/html/crifan_rec_soft.html">crifan推荐软件</a></li>
</ul>
<p>和技术开发有点关系,但是更主要是属于电脑使用方面的,虚拟机:</p>
<p>在Windows/Mac中,按照Mac或Windows的系统,而用到的工具,比如VMWare或VirtualBox:</p>
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/virutal_machine_tutorial/release/html/virutal_machine_tutorial.html">虚拟机教程</a></li>
<li><a href="http://www.crifan.com/files/doc/docbook/virtualbox_tutorial/release/html/virtualbox_tutorial.html">VirtualBox教程</a></li>
<li><a href="http://www.crifan.com/files/doc/docbook/vmware_tutorial/release/html/vmware_tutorial.html">VMWare教程</a></li>
</ul>
<h3 class="mume-header" id="%E5%B7%A5%E4%BD%9C%E7%B1%BB">工作类</h3>
<p>而开始了工作后,需要了解的各种基本概念和常识,包括招聘和应聘,薪资待遇,股票和期权,创业和公司等:</p>
<ul>
<li><a href="https://crifan.github.io/work_job_summary/website">工作和职业相关知识</a></li>
</ul>
<p>而和别人合作时,往往涉及到文件共享,资料共享,协同编辑等内容,可以使用有道云协作:</p>
<ul>
<li><a href="https://crifan.github.io/youdao_note_summary/website">有道云笔记和云协作使用总结</a></li>
</ul>
<p>而工作后,会遇到具体的某个商业领域相关的知识,比如:</p>
<p>和汽车销售行业,售前和售后,整车厂和经销商,经销商和客户等相关内容:</p>
<ul>
<li><a href="https://crifan.github.io/automobile_sales_summary/website">汽车销售领域知识总结</a></li>
</ul>
<h2 class="mume-header" id="%E7%94%9F%E6%B4%BB%E7%B1%BB">生活类</h2>
<p>和买房前后需要注意哪些事项,具体买房的过程的内容:</p>
<ul>
<li><a href="http://www.crifan.com/files/doc/docbook/buy_house/release/html/buy_house.html">买房详细教程</a></li>
</ul>
</div>
<div class="md-sidebar-toc"><ul>
<li><a href="#crifan%E7%9A%84%E7%94%B5%E5%AD%90%E4%B9%A6%E7%9A%84%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E">Crifan的电子书的使用说明</a>
<ul>
<li><a href="#%E4%B8%BA%E4%BD%95%E8%A6%81%E6%9C%89crifan%E7%9A%84%E7%94%B5%E5%AD%90%E4%B9%A6">为何要有:Crifan的电子书</a></li>
<li><a href="#%E4%B8%BA%E4%BD%95%E8%A6%81%E6%9C%89crifan%E7%9A%84%E7%94%B5%E5%AD%90%E4%B9%A6%E7%9A%84%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E">为何要有:Crifan的电子书的使用说明</a></li>
<li><a href="#%E6%8A%80%E6%9C%AF%E7%B1%BB">技术类</a>
<ul>
<li><a href="#%E6%8A%80%E6%9C%AF%E7%B1%BB%E9%80%9A%E7%94%A8%E7%9F%A5%E8%AF%86">技术类通用知识</a></li>
<li><a href="#%E6%8E%A8%E8%8D%90%E7%9A%84%E5%B7%A5%E5%85%B7%E6%88%96%E8%BD%AF%E4%BB%B6">推荐的工具或软件</a></li>
<li><a href="#%E7%A1%AC%E4%BB%B6%E7%B1%BB">硬件类</a></li>
<li><a href="#%E5%B5%8C%E5%85%A5%E5%BC%8F%E8%BD%AF%E4%BB%B6">嵌入式软件</a>
<ul>
<li><a href="#%E5%B5%8C%E5%85%A5%E5%BC%8F%E9%80%9A%E7%94%A8%E7%9F%A5%E8%AF%86">嵌入式通用知识</a></li>
<li><a href="#%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E4%BA%A4%E5%8F%89%E7%BC%96%E8%AF%91%E5%99%A8">开发环境+交叉编译器</a></li>
<li><a href="#%E5%B5%8C%E5%85%A5%E5%BC%8Flinux%E5%B5%8C%E5%85%A5%E5%BC%8Flinux%E9%A9%B1%E5%8A%A8">嵌入式Linux+嵌入式Linux驱动</a></li>
<li><a href="#%E5%85%B7%E4%BD%93%E6%A8%A1%E5%9D%97%E6%88%96%E9%A2%86%E5%9F%9F">具体模块或领域</a>
<ul>
<li><a href="#%E5%A4%A7%E7%9A%84%E6%96%B9%E5%90%91%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%9A%84%E4%B8%8D%E5%90%8C%E5%BA%94%E7%94%A8%E9%A2%86%E5%9F%9F">大的方向=嵌入式的不同应用领域</a></li>
<li><a href="#%E5%B0%8F%E6%96%B9%E9%9D%A2%E6%9D%A5%E8%AF%B4%E5%85%B3%E4%BA%8E%E5%85%B7%E4%BD%93%E7%9A%84%E6%A8%A1%E5%9D%97%E7%A1%AC%E4%BB%B6%E5%8D%8F%E8%AE%AE%E6%96%B9%E9%9D%A2">小方面来说=关于具体的模块/硬件/协议方面</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#%E4%B8%8A%E5%B1%82%E8%BD%AF%E4%BB%B6">上层软件</a>
<ul>
<li><a href="#%E4%B8%8A%E5%B1%82%E8%BD%AF%E4%BB%B6%E7%9A%84%E9%80%9A%E7%94%A8%E7%9F%A5%E8%AF%86">上层软件的通用知识</a></li>
<li><a href="#pc%E6%A1%8C%E9%9D%A2%E7%AB%AF%E8%BD%AF%E4%BB%B6">PC桌面端软件</a></li>
<li><a href="#%E7%BD%91%E9%A1%B5web%E9%A2%86%E5%9F%9F%E5%BC%80%E5%8F%91">网页Web领域开发</a></li>
<li><a href="#%E7%A7%BB%E5%8A%A8%E7%AB%AFapp%E5%BC%80%E5%8F%91">移动端APP开发</a></li>
<li><a href="#%E4%B8%8A%E5%B1%82%E8%BD%AF%E4%BB%B6%E7%9A%84%E5%85%B6%E4%BB%96%E9%A2%86%E5%9F%9F">上层软件的其他领域</a></li>
<li><a href="#python%E8%AF%AD%E8%A8%80">Python语言</a></li>
<li><a href="#%E6%88%91%E4%B8%AA%E4%BA%BA%E8%87%AA%E5%B7%B1crifan%E7%9B%B8%E5%85%B3%E7%9A%84%E5%86%85%E5%AE%B9">我个人=自己=Crifan相关的内容</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#%E9%9D%9E%E6%8A%80%E6%9C%AF%E7%B1%BB">非技术类</a>
<ul>
<li><a href="#%E7%94%B5%E8%84%91%E8%AE%A1%E7%AE%97%E6%9C%BA%E4%BD%BF%E7%94%A8%E7%B1%BB">电脑计算机使用类</a></li>
<li><a href="#%E5%B7%A5%E4%BD%9C%E7%B1%BB">工作类</a></li>
</ul>
</li>
<li><a href="#%E7%94%9F%E6%B4%BB%E7%B1%BB">生活类</a></li>
</ul>
</li>
</ul>
</div>
<a id="sidebar-toc-btn">≡</a>
</body>
<script>
(function bindTaskListEvent() {
var taskListItemCheckboxes = document.body.getElementsByClassName('task-list-item-checkbox')
for (var i = 0; i < taskListItemCheckboxes.length; i++) {
var checkbox = taskListItemCheckboxes[i]
var li = checkbox.parentElement
if (li.tagName !== 'LI') li = li.parentElement
if (li.tagName === 'LI') {
li.classList.add('task-list-item')
}
}
}())
</script>
<script>
var sidebarTOCBtn = document.getElementById('sidebar-toc-btn')
sidebarTOCBtn.addEventListener('click', function(event) {
event.stopPropagation()
if (document.body.hasAttribute('html-show-sidebar-toc')) {
document.body.removeAttribute('html-show-sidebar-toc')
} else {
document.body.setAttribute('html-show-sidebar-toc', true)
}
})
</script>
</html>