-
Notifications
You must be signed in to change notification settings - Fork 0
/
atom.xml
557 lines (300 loc) · 150 KB
/
atom.xml
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
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Ran Xuebin's Blog</title>
<subtitle>永远相信美好的事情即将发生</subtitle>
<link href="/atom.xml" rel="self"/>
<link href="https://ranxb.cn/"/>
<updated>2019-12-26T09:28:12.739Z</updated>
<id>https://ranxb.cn/</id>
<author>
<name>冉学斌</name>
</author>
<generator uri="http://hexo.io/">Hexo</generator>
<entry>
<title>indigo_problems</title>
<link href="https://ranxb.cn/2019/12/26/indigo-problems/"/>
<id>https://ranxb.cn/2019/12/26/indigo-problems/</id>
<published>2019-12-26T09:15:18.000Z</published>
<updated>2019-12-26T09:28:12.739Z</updated>
<content type="html"><![CDATA[<h1 id="indigo主题的小问题"><a href="#indigo主题的小问题" class="headerlink" title="indigo主题的小问题"></a>indigo主题的小问题</h1><blockquote><p>前两天发现博客的样式表失效了,恰好遇到自己把服务器跑崩了,以为是自己的锅,后来发现github的托管也有问题,最后定位到是远程样式表的锅,这回把它改了,改成本地的。</p></blockquote><p><code>themes/indigo/scripts/plugins.js</code>中有一段是这样的</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> source = <span class="function">(<span class="params">path, cache, ext</span>) =></span> {</span><br><span class="line"> <span class="keyword">if</span> (cache) {</span><br><span class="line"> <span class="keyword">const</span> minFile = <span class="string">`<span class="subst">${path}</span><span class="subst">${ext === <span class="string">'.js'</span> ? <span class="string">'.min'</span> : <span class="string">''</span>}</span><span class="subst">${ext}</span>`</span></span><br><span class="line"> <span class="keyword">return</span> hexo.theme.config.cdn ? <span class="string">`//unpkg.com/<span class="subst">${name}</span>@latest<span class="subst">${minFile}</span>`</span> : <span class="string">`<span class="subst">${minFile}</span>?v=<span class="subst">${version}</span>`</span></span><br><span class="line"> } <span class="keyword">else</span> {</span><br><span class="line"> <span class="keyword">return</span> path + ext</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure><p>我感觉有病,本地的就用本地样式表,发布的时候就用远程样式表,太🐶了。</p><p>索性改为</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> source = <span class="function">(<span class="params">path, cache, ext</span>) =></span> {</span><br><span class="line"> <span class="keyword">return</span> path + ext</span><br><span class="line">}</span><br></pre></td></tr></table></figure><p>然后还有一个小问题,不知道图片可不可以自动打包到发布文档里。如果可以的话,这个文件夹得保存好了啊。</p><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="/Users/mac/Library/Application" alt="image-20191226172150585" title="Support/typora-user-images/image-20191226172150585.png"> </div> <div class="image-caption">Support/typora-user-images/image-20191226172150585.png</div> </figure><ul><li>看来不行,我需要让他可以自动获取图片的地址然后自己挪过去。这个坑慢慢填吧。</li></ul>]]></content>
<summary type="html">
<h1 id="indigo主题的小问题"><a href="#indigo主题的小问题" class="headerlink" title="indigo主题的小问题"></a>indigo主题的小问题</h1><blockquote>
<p>前两天发现博客的样式表失效了,恰好
</summary>
<category term="-hexo" scheme="https://ranxb.cn/categories/hexo/"/>
<category term="随笔" scheme="https://ranxb.cn/tags/%E9%9A%8F%E7%AC%94/"/>
</entry>
<entry>
<title>amazing_sorting</title>
<link href="https://ranxb.cn/2019/12/16/amazing-sorting/"/>
<id>https://ranxb.cn/2019/12/16/amazing-sorting/</id>
<published>2019-12-16T12:54:40.000Z</published>
<updated>2019-12-16T15:50:56.244Z</updated>
<content type="html"><![CDATA[<h1 id="排序算法合集"><a href="#排序算法合集" class="headerlink" title="排序算法合集"></a>排序算法合集</h1><blockquote><p>想整理一下数据结构和算法的合集,先搞个排序算法,所有都用python3实现。</p></blockquote><p>排序算法共有八大类,即冒泡排序、选择排序、快速排序、插入排序、希尔排序、归并排序、基数排序以及堆排序。</p><h3 id="冒泡排序"><a href="#冒泡排序" class="headerlink" title="冒泡排序"></a>冒泡排序</h3><p>依次比较相邻的两个元素,满足条件及交换,一轮之后,极端数据(最大或最小)就会被挪到最后一名。重复操作。因为元素被咕噜咕噜一个一个往前挪,所以像冒泡。</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">bulubulu</span><span class="params">(ori_list: list)</span> -> list:</span></span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> range(<span class="number">1</span>, len(ori_list) + <span class="number">1</span>):</span><br><span class="line"> <span class="keyword">for</span> j <span class="keyword">in</span> range(len(ori_list) - i):</span><br><span class="line"> <span class="keyword">if</span> ori_list[j] < ori_list[j + <span class="number">1</span>]:</span><br><span class="line"> ori_list[j], ori_list[j + <span class="number">1</span>] = ori_list[j + <span class="number">1</span>], ori_list[j]</span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> ori_list</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> __name__ == <span class="string">'__main__'</span>:</span><br><span class="line"> data = [<span class="number">64</span>, <span class="number">63</span>, <span class="number">58</span>, <span class="number">38</span>, <span class="number">36</span>, <span class="number">90</span>, <span class="number">7</span>, <span class="number">16</span>, <span class="number">47</span>, <span class="number">1</span>]</span><br><span class="line"> print(<span class="string">"before: "</span>, data)</span><br><span class="line"> print(<span class="string">"after:"</span>, bulubulu(data))</span><br></pre></td></tr></table></figure><h3 id="选择排序"><a href="#选择排序" class="headerlink" title="选择排序"></a>选择排序</h3><p>遍历选择极端数据,遍历完成之后选择后与首元素交换,重复操作。</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">selection_sort</span><span class="params">(ori_list: list)</span> -> list:</span></span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> range(len(ori_list)):</span><br><span class="line"> maxIndex = i</span><br><span class="line"> <span class="keyword">for</span> j <span class="keyword">in</span> range(i, len(ori_list)):</span><br><span class="line"> <span class="keyword">if</span> ori_list[maxIndex] < ori_list[j]:</span><br><span class="line"> maxIndex = j</span><br><span class="line"> ori_list[i], ori_list[maxIndex] = ori_list[maxIndex], ori_list[i]</span><br><span class="line"> <span class="keyword">return</span> ori_list</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> __name__ == <span class="string">'__main__'</span>:</span><br><span class="line"> data = [<span class="number">64</span>, <span class="number">63</span>, <span class="number">58</span>, <span class="number">38</span>, <span class="number">36</span>, <span class="number">90</span>, <span class="number">7</span>, <span class="number">16</span>, <span class="number">47</span>, <span class="number">1</span>]</span><br><span class="line"> print(<span class="string">"选择"</span>)</span><br><span class="line"> print(<span class="string">"before: "</span>, data)</span><br><span class="line"> print(<span class="string">"after:"</span>, selection_sort(data))</span><br></pre></td></tr></table></figure><h3 id="快速排序"><a href="#快速排序" class="headerlink" title="快速排序"></a>快速排序</h3><p>递🐢思想,选取以基准元素,大的放一边,小的放一边,分别对两边再进行快排。</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">quick_sort</span><span class="params">(ori_list: list, begin: int, end: int)</span>:</span></span><br><span class="line"> <span class="keyword">if</span> begin >= end - <span class="number">1</span>:</span><br><span class="line"> <span class="keyword">return</span></span><br><span class="line"> base = ori_list[begin]</span><br><span class="line"> lindex = begin</span><br><span class="line"> rindex = end</span><br><span class="line"> <span class="keyword">while</span> lindex < rindex:</span><br><span class="line"> <span class="keyword">while</span> lindex < rindex:</span><br><span class="line"> <span class="keyword">if</span> ori_list[rindex] < base:</span><br><span class="line"> ori_list[lindex] = ori_list[rindex]</span><br><span class="line"> lindex += <span class="number">1</span></span><br><span class="line"> <span class="keyword">break</span></span><br><span class="line"> rindex -= <span class="number">1</span></span><br><span class="line"></span><br><span class="line"> <span class="keyword">while</span> lindex < rindex:</span><br><span class="line"> <span class="keyword">if</span> ori_list[lindex] >= base:</span><br><span class="line"> ori_list[rindex] = ori_list[lindex]</span><br><span class="line"> rindex -= <span class="number">1</span></span><br><span class="line"> <span class="keyword">break</span></span><br><span class="line"> lindex += <span class="number">1</span></span><br><span class="line"> ori_list[lindex] = base</span><br><span class="line"> quick_sort(ori_list, begin, lindex)</span><br><span class="line"> quick_sort(ori_list, rindex+<span class="number">1</span>, end)</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> __name__ == <span class="string">'__main__'</span>:</span><br><span class="line"> data = [<span class="number">64</span>, <span class="number">63</span>, <span class="number">58</span>, <span class="number">38</span>, <span class="number">36</span>, <span class="number">90</span>, <span class="number">7</span>, <span class="number">16</span>, <span class="number">47</span>, <span class="number">1</span>]</span><br><span class="line"> print(<span class="string">"快排"</span>)</span><br><span class="line"> print(<span class="string">"before: "</span>, data)</span><br><span class="line"> quick_sort(data, <span class="number">0</span>, len(data)<span class="number">-1</span>)</span><br><span class="line"> print(data)</span><br></pre></td></tr></table></figure><h3 id="插入排序"><a href="#插入排序" class="headerlink" title="插入排序"></a>插入排序</h3><p>插入排序的思想是将一个无序序列插入到一个有序序列中,初始序列仅为第一个元素。</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">insert_sort</span><span class="params">(ori_list: list)</span> -> list:</span></span><br><span class="line"> <span class="keyword">if</span> <span class="keyword">not</span> ori_list:</span><br><span class="line"> <span class="keyword">return</span> []</span><br><span class="line"> <span class="comment"># 为什么要在建一个列表,当然可以写成一个,那样的话整个列表就会很乱,这样可以体现插入排序的精髓。</span></span><br><span class="line"> newList = [ori_list[<span class="number">0</span>]]</span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> ori_list[<span class="number">1</span>:]:</span><br><span class="line"> <span class="comment"># 讲道理既然在写算法,这里的数组插入操作就不用py自带的了</span></span><br><span class="line"> index = <span class="number">0</span></span><br><span class="line"> <span class="keyword">while</span> index < len(newList):</span><br><span class="line"> <span class="keyword">if</span> newList[index] > i:</span><br><span class="line"> <span class="keyword">break</span></span><br><span class="line"> index += <span class="number">1</span></span><br><span class="line"> newList.append(<span class="number">0</span>)</span><br><span class="line"> <span class="keyword">for</span> j <span class="keyword">in</span> range(len(newList) - <span class="number">1</span>, index, <span class="number">-1</span>):</span><br><span class="line"> newList[j] = newList[j - <span class="number">1</span>]</span><br><span class="line"> newList[index] = i</span><br><span class="line"> ori_list[:] = newList</span><br><span class="line"> <span class="keyword">return</span> ori_list</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> __name__ == <span class="string">'__main__'</span>:</span><br><span class="line"> data = [<span class="number">64</span>, <span class="number">63</span>, <span class="number">58</span>, <span class="number">38</span>, <span class="number">36</span>, <span class="number">90</span>, <span class="number">7</span>, <span class="number">16</span>, <span class="number">47</span>, <span class="number">1</span>]</span><br><span class="line"> print(<span class="string">"插入"</span>)</span><br><span class="line"> print(<span class="string">"before: "</span>, data)</span><br><span class="line"> print(<span class="string">"after:"</span>, insert_sort(data))</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<h1 id="排序算法合集"><a href="#排序算法合集" class="headerlink" title="排序算法合集"></a>排序算法合集</h1><blockquote>
<p>想整理一下数据结构和算法的合集,先搞个排序算法,所有都用python3实现。</p
</summary>
<category term="sort" scheme="https://ranxb.cn/categories/sort/"/>
<category term="python" scheme="https://ranxb.cn/tags/python/"/>
<category term="sort" scheme="https://ranxb.cn/tags/sort/"/>
</entry>
<entry>
<title>ELK-Install</title>
<link href="https://ranxb.cn/2019/12/15/ELK-Install/"/>
<id>https://ranxb.cn/2019/12/15/ELK-Install/</id>
<published>2019-12-15T08:01:27.000Z</published>
<updated>2019-12-16T15:12:23.963Z</updated>
<content type="html"><![CDATA[<h1 id="ELK-环境部署"><a href="#ELK-环境部署" class="headerlink" title="ELK 环境部署"></a>ELK 环境部署</h1><h2 id="what-is-ELK"><a href="#what-is-ELK" class="headerlink" title="what is ELK"></a>what is ELK</h2><p><strong>ELK(Elasticsearch+LogStash+Kibana)</strong></p><ul><li>Elasticsearch(全文检索引擎)</li><li>LogStash(日志处理框架)</li><li>Kibana(一个可视化监控面板)</li></ul><p>接下来挨个安装</p><h2 id="Elasticsearch"><a href="#Elasticsearch" class="headerlink" title="Elasticsearch"></a>Elasticsearch</h2><h3 id="JDK"><a href="#JDK" class="headerlink" title="JDK"></a>JDK</h3><p><code>sudo apt install default-jdk</code></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">➜ ~ java --version </span><br><span class="line">openjdk 11.0.4 2019-07-16</span><br><span class="line">OpenJDK Runtime Environment (build 11.0.4+11-post-Ubuntu-1ubuntu218.04.3)</span><br><span class="line">OpenJDK 64-Bit Server VM (build 11.0.4+11-post-Ubuntu-1ubuntu218.04.3, mixed mode, sharing)</span><br></pre></td></tr></table></figure><h3 id="install"><a href="#install" class="headerlink" title="install"></a>install</h3><p><a href="https://www.elastic.co" target="_blank" rel="noopener">官网</a>。自行下载</p><ul><li>解压:<code>tar -xzvf elasticsearch-7.5.0-linux-x86_64.tar.gz</code></li><li>挪到自己放软件的地方我挪到了<code>/etc/elasticsearch-7.5.0</code></li><li>环境变量:<code>export PATH=$PATH:/etc/elasticsearch-7.5.0/bin</code></li></ul><p><strong>这玩意不能用root用户登录,再此给出简易添加用户的办法</strong></p><ul><li><p><code>sudo adduser rankin</code></p></li><li><p><code>sudo vim /etc/sudoers</code></p> <figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">rankin ALL=(ALL:ALL) ALL</span><br></pre></td></tr></table></figure></li><li><p>改zsh:<code>sudo usermod -s /bin/zsh rankin</code></p></li></ul><h3 id="config"><a href="#config" class="headerlink" title="config"></a>config</h3><ul><li><p><code>vim config/elasticsearch.yml</code></p> <figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">path.data:</span> <span class="string">/etc/elkdata/data</span></span><br><span class="line"></span><br><span class="line"><span class="string">path.logs:</span> <span class="string">/etc/elkdata/logs</span></span><br><span class="line"></span><br><span class="line"><span class="string">bootstrap.memory_lock:</span> <span class="literal">true</span></span><br></pre></td></tr></table></figure></li><li><p><code>mkdir /etc/elkdata/{data,logs}</code></p></li><li><p><code>sudo chown -R rankin /etc/elkdata/</code></p></li><li><p><code>sudo chown -R rankin /etc/elasticsearch-7.5.0</code></p></li></ul><h3 id="test"><a href="#test" class="headerlink" title="test"></a>test</h3><ul><li><p><code>./bin/elasticsearch</code></p></li><li><p>运行起来之后<code>curl localhost:9200</code></p> <figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">➜ ~ curl localhost:9200</span><br><span class="line">{</span><br><span class="line"> <span class="attr">"name"</span> : <span class="string">"iZ2zeg6zzsafuis05urijiZ"</span>,</span><br><span class="line"> <span class="attr">"cluster_name"</span> : <span class="string">"elasticsearch"</span>,</span><br><span class="line"> <span class="attr">"cluster_uuid"</span> : <span class="string">"2kwhhDisSQ2rbcpQFyq5nQ"</span>,</span><br><span class="line"> <span class="attr">"version"</span> : {</span><br><span class="line"> <span class="attr">"number"</span> : <span class="string">"7.5.0"</span>,</span><br><span class="line"> <span class="attr">"build_flavor"</span> : <span class="string">"default"</span>,</span><br><span class="line"> <span class="attr">"build_type"</span> : <span class="string">"tar"</span>,</span><br><span class="line"> <span class="attr">"build_hash"</span> : <span class="string">"e9ccaed468e2fac2275a3761849cbee64b39519f"</span>,</span><br><span class="line"> <span class="attr">"build_date"</span> : <span class="string">"2019-11-26T01:06:52.518245Z"</span>,</span><br><span class="line"> <span class="attr">"build_snapshot"</span> : <span class="literal">false</span>,</span><br><span class="line"> <span class="attr">"lucene_version"</span> : <span class="string">"8.3.0"</span>,</span><br><span class="line"> <span class="attr">"minimum_wire_compatibility_version"</span> : <span class="string">"6.8.0"</span>,</span><br><span class="line"> <span class="attr">"minimum_index_compatibility_version"</span> : <span class="string">"6.0.0-beta1"</span></span><br><span class="line"> },</span><br><span class="line"> <span class="attr">"tagline"</span> : <span class="string">"You Know, for Search"</span></span><br><span class="line">}</span><br></pre></td></tr></table></figure></li></ul><h2 id="logstash"><a href="#logstash" class="headerlink" title="logstash"></a>logstash</h2><h3 id="install-1"><a href="#install-1" class="headerlink" title="install"></a>install</h3><ul><li><code>wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -</code></li><li><code>sudo apt-get install apt-transport-https</code></li><li><code>echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list</code></li><li><code>sudo apt-get update && sudo apt-get install logstash</code></li></ul><h3 id="config-1"><a href="#config-1" class="headerlink" title="config"></a>config</h3><h2 id="Grafana"><a href="#Grafana" class="headerlink" title="Grafana"></a>Grafana</h2><h3 id="install-2"><a href="#install-2" class="headerlink" title="install"></a>install</h3><ul><li><code>wget https://dl.grafana.com/oss/release/grafana_6.5.2_amd64.deb</code></li><li><p><code>sudo dpkg -i grafana_6.5.2_amd64.deb</code></p></li><li><p>装上饼图然后重启:<code>grafana-cli plugins install grafana-piechart-panel</code></p></li><li><code>service grafana-server restart</code></li></ul><h3 id="nginx-Config"><a href="#nginx-Config" class="headerlink" title="nginx Config"></a>nginx Config</h3><p>因为grafana默认是3000端口,需要做个nginx反代,给个模版</p><figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line">server {</span><br><span class="line">listen 80;</span><br><span class="line">listen [::]:80;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> root /usr/share/grafana/public;</span><br><span class="line"># Add index.php to the list if you are using PHP</span><br><span class="line">index index.html index.htm index.nginx-debian.html;</span><br><span class="line"></span><br><span class="line">server_name log.ranxb.com;</span><br><span class="line"></span><br><span class="line">location / {</span><br><span class="line"># First attempt to serve request as file, then</span><br><span class="line"># as directory, then fall back to displaying a 404.</span><br><span class="line">proxy_pass http://127.0.0.1:3000;</span><br><span class="line"> </span><br><span class="line"> #Proxy Settings</span><br><span class="line"> proxy_redirect off;</span><br><span class="line"> proxy_set_header Host $host;</span><br><span class="line"> proxy_set_header X-Real-IP $remote_addr;</span><br><span class="line"> proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;</span><br><span class="line"> proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;</span><br><span class="line"> proxy_max_temp_file_size 0;</span><br><span class="line"> proxy_connect_timeout 90;</span><br><span class="line"> proxy_send_timeout 90;</span><br><span class="line"> proxy_read_timeout 90;</span><br><span class="line"> proxy_buffer_size 4k;</span><br><span class="line"> proxy_buffers 4 32k;</span><br><span class="line"> proxy_busy_buffers_size 64k;</span><br><span class="line"> proxy_temp_file_write_size 64k;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<h1 id="ELK-环境部署"><a href="#ELK-环境部署" class="headerlink" title="ELK 环境部署"></a>ELK 环境部署</h1><h2 id="what-is-ELK"><a href="#what-is-ELK" class
</summary>
<category term="Linux" scheme="https://ranxb.cn/categories/Linux/"/>
<category term="Linux" scheme="https://ranxb.cn/tags/Linux/"/>
<category term="ELK" scheme="https://ranxb.cn/tags/ELK/"/>
</entry>
<entry>
<title>smokeping_install</title>
<link href="https://ranxb.cn/2019/12/09/smokeping-install/"/>
<id>https://ranxb.cn/2019/12/09/smokeping-install/</id>
<published>2019-12-09T10:34:54.000Z</published>
<updated>2019-12-10T07:35:55.332Z</updated>
<content type="html"><![CDATA[<h1 id="SmokePing的安装与配置"><a href="#SmokePing的安装与配置" class="headerlink" title="SmokePing的安装与配置"></a>SmokePing的安装与配置</h1><blockquote><p>sd学校辣鸡网速,实在是不敢恭维,发邮件投诉之后,网信办找到我说:“网速还可以啊!”,这一句话给我怼回来很难受,发现有些东西不去量化实在是不行的。<br>之前想过办法说收集问卷,让集体的声音告诉学校网速真的不行,但是奈何影响力是在不够。感觉不靠谱。<br>然后再网信办发现了官方检测网速的工具,并同时给出了相应的标准。(<a href="http://its.lzu.edu.cn/lzupage/2018/10/11/N20181011121011.html" target="_blank" rel="noopener">网页再此</a>)于是就有了搭建Smokeping这个东西的想法,拿你们的评判标准去评判学生真实使用环境的网速。<br>拿核心节点的服务器去做网速检测就是耍流氓!</p></blockquote><h2 id="What-is-SmokePing"><a href="#What-is-SmokePing" class="headerlink" title="What is SmokePing"></a>What is SmokePing</h2><p>首先回答这是个什么东西,这是个网络连接的嗅探工具。也是从学校网站上发现的,东西很小,还比较好用(<a href="https://oss.oetiker.ch/smokeping/index.en.html" target="_blank" rel="noopener">官网在此</a>),具体的介绍可以看一下,大概就是检测网络状态的,还有一个功能就是发现网络中断可以邮件发你,不过这个我没用,因为学校的网速能连上都算是谢天谢地了,这里只做个网络监测。</p><p>然后这里做一下安装的过程,和踩过的坑,做个笔记</p><h2 id="Prepare-the-environment"><a href="#Prepare-the-environment" class="headerlink" title="Prepare the environment"></a>Prepare the environment</h2><blockquote><p>这玩意没装过,目前也是临时用,所以直接扔到Ubuntu16.04的虚拟机了,apt该更新更新,这里就不再多说了</p></blockquote><p>进官方文档,看环境</p><ul><li>rrdtool: <code>sudo apt install rrdtool librrds-perl libssl-dev</code></li><li>fping(试一下你的fping要求最新的4.2,ATTENTION:不要用旧版本!!!这个自己装)</li><li>curl(这个一般都有,没有的自己装)</li><li>WebServer(我用的nginx,用Apache的也可以,但是太古老,这里不管,nginx安装可以看我的其他post,这里自己装)</li><li>perl >5.10.1: <code>sudo apt install perl</code></li></ul><h2 id="compile-and-Install"><a href="#compile-and-Install" class="headerlink" title="compile and Install"></a>compile and Install</h2><ul><li><code>sudo ./configure --prefix=/opt/smokeping</code></li><li><code>sudo make install</code></li></ul><p>这里装好之后会安装到<code>/opt/smokeping</code>目录下面,自己过去,以下说的所有目录都是基于该目录,例如我说etc目录的时候是<code>/opt/smokeping/etc</code>的目录,不是根目录!</p><p>到此为止smokeping就安装好了</p><p>另外,该项目是基于fcgi的,这也是我用nginx的原因,这里要装个something,让他可以用nginx做反代。</p><ul><li><code>sudo apt install spawn-fcgi</code><br>如何配置我们后面再说。到此为止所有的环境就装好了。</li></ul><h2 id="config"><a href="#config" class="headerlink" title="config"></a>config</h2><p>此处简单介绍如何配置,配置文件的模板是<code>etc/config.dist</code>,copy一份到这里</p><ul><li><code>sudo cp etc/config.dist etc/config</code><br><code>htdocs/smokeping.fcgi.dist</code>的fcgi文件也复制一份:</li><li><code>cp htdocs/smokeping.fcgi.dist htdocs/smokeping.fcgi</code></li></ul><p>在<code>htdocs/</code>下创建文件夹</p><ul><li><code>mkdir {cache,data,var}</code>(htdocs目录下面!)</li></ul><p>修改<code>smokeping_secrets.dist</code>权限</p><ul><li><code>sudo chmod 600 etc/smokeping_secrets.dist</code></li></ul><p>给nginx权限访问<code>htdocs/</code></p><ul><li><code>sudo chown -R nginx.nginx /usr/local/smokeping/htdocs/</code></li></ul><p>这里给一份conf的模板,自己看着改一下,路径啥的<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br></pre></td><td class="code"><pre><span class="line">*** General ***</span><br><span class="line"></span><br><span class="line">owner = Peter Random</span><br><span class="line">contact = some@address.nowhere</span><br><span class="line">mailhost = my.mail.host</span><br><span class="line">sendmail = /opt/smokeping/htdocs/mail</span><br><span class="line"># NOTE: do not put the Image Cache below cgi-bin</span><br><span class="line"># since all files under cgi-bin will be executed ... this is not</span><br><span class="line"># good for images.</span><br><span class="line">imgcache = /opt/smokeping/htdocs/cache</span><br><span class="line">imgurl = cache</span><br><span class="line">datadir = /opt/smokeping/htdocs/data</span><br><span class="line">piddir = /opt/smokeping/htdocs/var</span><br><span class="line">cgiurl = http://some.url/smokeping.cgi</span><br><span class="line">smokemail = /opt/smokeping/etc/smokemail.dist</span><br><span class="line">tmail = /opt/smokeping/etc/tmail.dist</span><br><span class="line"># specify this to get syslog logging</span><br><span class="line">syslogfacility = local0</span><br><span class="line"># each probe is now run in its own process</span><br><span class="line"># disable this to revert to the old behaviour</span><br><span class="line"># concurrentprobes = no</span><br><span class="line"></span><br><span class="line">*** Alerts ***</span><br><span class="line">to = alertee@address.somewhere</span><br><span class="line">from = smokealert@company.xy</span><br><span class="line"></span><br><span class="line">+someloss</span><br><span class="line">type = loss</span><br><span class="line"># in percent</span><br><span class="line">pattern = >0%,*12*,>0%,*12*,>0%</span><br><span class="line">comment = loss 3 times in a row</span><br><span class="line"></span><br><span class="line">*** Database ***</span><br><span class="line"></span><br><span class="line">step = 120</span><br><span class="line">pings = 10</span><br><span class="line"></span><br><span class="line"># consfn mrhb steps total</span><br><span class="line"></span><br><span class="line">AVERAGE 0.5 1 1008</span><br><span class="line">AVERAGE 0.5 12 4320</span><br><span class="line"> MIN 0.5 12 4320</span><br><span class="line"> MAX 0.5 12 4320</span><br><span class="line">AVERAGE 0.5 144 720</span><br><span class="line"> MAX 0.5 144 720</span><br><span class="line"> MIN 0.5 144 720</span><br><span class="line"></span><br><span class="line">*** Presentation ***</span><br><span class="line"></span><br><span class="line">template = /opt/smokeping/etc/basepage.html.dist</span><br><span class="line">htmltitle = yes</span><br><span class="line">graphborders = no</span><br><span class="line"></span><br><span class="line">+ charts</span><br><span class="line"></span><br><span class="line">menu = Charts</span><br><span class="line">title = The most interesting destinations</span><br><span class="line"></span><br><span class="line">++ stddev</span><br><span class="line">sorter = StdDev(entries=>4)</span><br><span class="line">title = Top Standard Deviation</span><br><span class="line">menu = Std Deviation</span><br><span class="line">format = Standard Deviation %f</span><br><span class="line"></span><br><span class="line">++ max</span><br><span class="line">sorter = Max(entries=>5)</span><br><span class="line">title = Top Max Roundtrip Time</span><br><span class="line">menu = by Max</span><br><span class="line">format = Max Roundtrip Time %f seconds</span><br><span class="line"></span><br><span class="line">++ loss</span><br><span class="line">sorter = Loss(entries=>5)</span><br><span class="line">title = Top Packet Loss</span><br><span class="line">menu = Loss</span><br><span class="line">format = Packets Lost %f</span><br><span class="line"></span><br><span class="line">++ median</span><br><span class="line">sorter = Median(entries=>5)</span><br><span class="line">title = Top Median Roundtrip Time</span><br><span class="line">menu = by Median</span><br><span class="line">format = Median RTT %f seconds</span><br><span class="line"></span><br><span class="line">+ overview </span><br><span class="line"></span><br><span class="line">width = 600</span><br><span class="line">height = 50</span><br><span class="line">range = 10h</span><br><span class="line"></span><br><span class="line">+ detail</span><br><span class="line"></span><br><span class="line">width = 600</span><br><span class="line">height = 200</span><br><span class="line">unison_tolerance = 2</span><br><span class="line"></span><br><span class="line">#"Last 3 Hours" 3h</span><br><span class="line">#"Last 30 Hours" 30h</span><br><span class="line">#"Last 10 Days" 10d</span><br><span class="line">#"Last 400 Days" 400d</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">"Last 10 Minutes" 10m</span><br><span class="line"></span><br><span class="line">"Last 30 Minutes" 30m</span><br><span class="line"></span><br><span class="line">"Last 4 Hours" 4h</span><br><span class="line"></span><br><span class="line">"Last 12 Hours" 12h</span><br><span class="line"></span><br><span class="line">"Last 1 Days" 24h</span><br><span class="line"></span><br><span class="line">"Last 3 Days" 3d</span><br><span class="line"></span><br><span class="line">"Last 1 Weeks" 7d</span><br><span class="line"></span><br><span class="line">"Last 1 Mouths" 30d</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">#+ hierarchies</span><br><span class="line">#++ owner</span><br><span class="line">#title = Host Owner</span><br><span class="line">#++ location</span><br><span class="line">#title = Location</span><br><span class="line"></span><br><span class="line">*** Probes ***</span><br><span class="line"></span><br><span class="line">+ FPing</span><br><span class="line"></span><br><span class="line">binary = /usr/bin/fping</span><br><span class="line"></span><br><span class="line">+Curl</span><br><span class="line"></span><br><span class="line">binary = /usr/bin/curl</span><br><span class="line">#forks = 5</span><br><span class="line">#offset = 50%</span><br><span class="line">#step = 300</span><br><span class="line">urlformat = http://%host%/ # mandatory</span><br><span class="line"></span><br><span class="line">*** Slaves ***</span><br><span class="line"></span><br><span class="line">secrets=/opt/smokeping/etc/smokeping_secrets.dist</span><br><span class="line">+boomer</span><br><span class="line">display_name=boomer</span><br><span class="line">color=0000ff</span><br><span class="line"></span><br><span class="line">+slave2</span><br><span class="line">display_name=another</span><br><span class="line">color=00ff00</span><br><span class="line"></span><br><span class="line">*** Targets ***</span><br><span class="line"></span><br><span class="line">probe = Curl</span><br><span class="line"></span><br><span class="line">menu = Top</span><br><span class="line">title = Network Latency Grapher</span><br><span class="line">remark = Welcome to the SmokePing website of xxx Company. \</span><br><span class="line"> Here you will learn all about the latency of our network.</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">+ CurlTest</span><br><span class="line">menu= Curl</span><br><span class="line">title = Curl统计</span><br><span class="line"></span><br><span class="line">++ website</span><br><span class="line">menu = webSite</span><br><span class="line">title = webSite List</span><br><span class="line">host = /CurlTest/website/ranxb /CurlTest/website/baidu /CurlTest/website/taobao /CurlTest/website/qq /CurlTest/website/wx /CurlTest/website/sina</span><br><span class="line"></span><br><span class="line">+++ ranxb</span><br><span class="line">menu = Ranxb</span><br><span class="line">title = Ranxb</span><br><span class="line">host = ranxb.com</span><br><span class="line"></span><br><span class="line">+++ baidu</span><br><span class="line">menu = Baibu</span><br><span class="line">title = Baidu</span><br><span class="line">host = baidu.com</span><br><span class="line"></span><br><span class="line">+++ taobao</span><br><span class="line">menu = Taobao</span><br><span class="line">title = Taobao</span><br><span class="line">host = taobao.com</span><br><span class="line"></span><br><span class="line">+++ qq</span><br><span class="line">menu = QQ</span><br><span class="line">title = QQ</span><br><span class="line">host = qq.com</span><br><span class="line"></span><br><span class="line">+++ wx</span><br><span class="line">menu = WX</span><br><span class="line">title = WX</span><br><span class="line">host = wx.qq.com</span><br><span class="line"></span><br><span class="line">+++ sina</span><br><span class="line">menu = sina</span><br><span class="line">title = sina</span><br><span class="line">host = sina.com.cn</span><br><span class="line"></span><br><span class="line">+ FPing</span><br><span class="line">menu= FPing</span><br><span class="line">title = FPing统计</span><br><span class="line">probe = FPing</span><br><span class="line"></span><br><span class="line">++ website</span><br><span class="line">menu = webSite</span><br><span class="line">title = webSite List</span><br><span class="line">host = /FPing/website/ranxb /FPing/website/baidu /FPing/website/taobao /FPing/website/qq /FPing/website/wx /FPing/website/sina /FPing/website/localhost</span><br><span class="line"></span><br><span class="line">+++ ranxb</span><br><span class="line">menu = Ranxb</span><br><span class="line">title = Ranxb</span><br><span class="line">host = ranxb.com</span><br><span class="line"></span><br><span class="line">+++ baidu</span><br><span class="line">menu = Baibu</span><br><span class="line">title = Baidu</span><br><span class="line">host = baidu.com</span><br><span class="line"></span><br><span class="line">+++ taobao</span><br><span class="line">menu = Taobao</span><br><span class="line">title = Taobao</span><br><span class="line">host = taobao.com</span><br><span class="line"></span><br><span class="line">+++ qq</span><br><span class="line">menu = QQ</span><br><span class="line">title = QQ</span><br><span class="line">host = qq.com</span><br><span class="line"></span><br><span class="line">+++ wx</span><br><span class="line">menu = WX</span><br><span class="line">title = WX</span><br><span class="line">host = wx.qq.com</span><br><span class="line"></span><br><span class="line">+++ sina</span><br><span class="line">menu = sina</span><br><span class="line">title = sina</span><br><span class="line">host = sina.com.cn</span><br><span class="line"></span><br><span class="line">+++ localhost</span><br><span class="line">menu = localhost</span><br><span class="line">title = localhost</span><br><span class="line">host = localhost</span><br></pre></td></tr></table></figure></p><p>写好之后用debug模式测试一下</p><ul><li><code>sudo /opt/smokeping/bin/smokeping --config=/opt/smokeping/etc/config --logfile=/var/log/smokeping.log --debug</code></li></ul><p>如果没问题的话</p><ul><li><code>sudo /opt/smokeping/bin/smokeping --config=/opt/smokeping/etc/config --logfile=/var/log/smokeping.log</code></li><li><code>sudo spawn-fcgi -a 127.0.0.1 -p 9007 -P /var/run/smokeping-fastcgi.pid -u nginx -f /opt/smokeping/htdocs/smokeping.fcgi</code></li></ul><p>搞定之后配置一下nginx</p><p>这里再给一份nginx的server的conf<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">server {</span><br><span class="line">listen 81;</span><br><span class="line">server_name localhost;</span><br><span class="line">location / {</span><br><span class="line">root /opt/smokeping/htdocs/;</span><br><span class="line">index index.html index.htm smokeping.fcgi;</span><br><span class="line">}</span><br><span class="line">location ~ .*\.fcgi$ {</span><br><span class="line">root /opt/smokeping/htdocs/;</span><br><span class="line">fastcgi_pass 127.0.0.1:9007;</span><br><span class="line">include /etc/nginx/fastcgi_params;</span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure></p><p>重启nginx </p><ul><li><code>sudo nginx -s reload</code></li></ul><h2 id="妥"><a href="#妥" class="headerlink" title="妥"></a>妥</h2><h2 id="一些坑"><a href="#一些坑" class="headerlink" title="一些坑"></a>一些坑</h2><h3 id="fping版本问题"><a href="#fping版本问题" class="headerlink" title="fping版本问题"></a>fping版本问题</h3><p>一定要用最新的4.2,apt直接下载是3.*不是最新的,不支持protocol参数,如何确认可以看下help里面有没有<code>-4/-6</code>这个参数,我就是因为这个参数导致的用不了的。</p><h3 id="EchoPing用不了"><a href="#EchoPing用不了" class="headerlink" title="EchoPing用不了"></a>EchoPing用不了</h3><p>装了echoping之后用不了,刚开始不知道原因,现实响应被拒绝,然后100%loss Pkg,后来查询到要开启echo服务才可以使用,就是开启本地7号端口,但是开了之后还是没用,索性放弃,只用fping了</p><h3 id="perl-warning"><a href="#perl-warning" class="headerlink" title="perl: warning:"></a>perl: warning:</h3><p>提示<code>perl: warning: Please check that your locale settings</code></p><p>在<code>~/.bashrc</code>最后加上<code>export LC_ALL=C</code></p><p>然后<code>source ~/.bashrc</code></p><h3 id="一些资源访问不了的问题"><a href="#一些资源访问不了的问题" class="headerlink" title="一些资源访问不了的问题"></a>一些资源访问不了的问题</h3><p>检查权限设置,一定要给nginx权限,不要在新建目录。</p>]]></content>
<summary type="html">
<h1 id="SmokePing的安装与配置"><a href="#SmokePing的安装与配置" class="headerlink" title="SmokePing的安装与配置"></a>SmokePing的安装与配置</h1><blockquote>
<p>sd学校辣
</summary>
<category term="linux" scheme="https://ranxb.cn/categories/linux/"/>
<category term="linux" scheme="https://ranxb.cn/tags/linux/"/>
<category term="smokeping" scheme="https://ranxb.cn/tags/smokeping/"/>
</entry>
<entry>
<title>zsh&oh-my-zsh</title>
<link href="https://ranxb.cn/2019/12/08/zsh-oh-my-zsh/"/>
<id>https://ranxb.cn/2019/12/08/zsh-oh-my-zsh/</id>
<published>2019-12-08T12:41:16.000Z</published>
<updated>2019-12-08T13:38:29.427Z</updated>
<content type="html"><![CDATA[<h1 id="Install-zsh-and-oh-my-zsh-on-Ubuntu"><a href="#Install-zsh-and-oh-my-zsh-on-Ubuntu" class="headerlink" title="Install zsh and oh-my-zsh on Ubuntu"></a>Install zsh and oh-my-zsh on Ubuntu</h1><h2 id="Install-zsh"><a href="#Install-zsh" class="headerlink" title="Install zsh"></a>Install zsh</h2><ul><li><code>sudo apt install zsh</code> install</li><li><code>chsh -s /bin/zsh</code> change default shell to zsh</li></ul><blockquote><p>if chsh: PAM is failure<br><code>sudo vim /etc/passwd</code><br>change bash to zsh if root’s(or your account) default shell is bash</p></blockquote><h2 id="Install-oh-my-zsh-git-firstly"><a href="#Install-oh-my-zsh-git-firstly" class="headerlink" title="Install oh-my-zsh(git firstly)"></a>Install oh-my-zsh(git firstly)</h2><p>two ways:</p><ul><li>curl: <code>sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"</code></li><li>wget: <code>sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"</code></li></ul><p>install plugin(eg. zsh-autosuggestions)</p><ul><li><p><code>git clone git://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions</code></p></li><li><p>edit <code>~/.zshrc</code></p> <figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">plugins=(zsh-autosuggestions)</span><br></pre></td></tr></table></figure></li></ul><h2 id="autojump-an-usefull-tool"><a href="#autojump-an-usefull-tool" class="headerlink" title="autojump(an usefull tool)"></a>autojump(an usefull tool)</h2><ul><li>ubuntu: <code>sudo apt-get install autojump</code></li><li>MacOS:<code>brew install autojump</code></li></ul><p>config:(ubuntu,add line in <code>~/.zshrc</code> )</p><p><code>. /usr/share/autojump/autojump.sh</code></p><p>ps.Mac’s config is already on the your terminal.</p>]]></content>
<summary type="html">
<h1 id="Install-zsh-and-oh-my-zsh-on-Ubuntu"><a href="#Install-zsh-and-oh-my-zsh-on-Ubuntu" class="headerlink" title="Install zsh and oh-my-
</summary>
<category term="zsh" scheme="https://ranxb.cn/categories/zsh/"/>
<category term="linux" scheme="https://ranxb.cn/tags/linux/"/>
<category term="zsh" scheme="https://ranxb.cn/tags/zsh/"/>
<category term="install" scheme="https://ranxb.cn/tags/install/"/>
</entry>
<entry>
<title>Numpy</title>
<link href="https://ranxb.cn/2019/12/08/Numpy/"/>
<id>https://ranxb.cn/2019/12/08/Numpy/</id>
<published>2019-12-08T12:32:53.000Z</published>
<updated>2019-12-08T12:36:31.298Z</updated>
<content type="html"><![CDATA[<h1 id="NumPy’s-Simple-Guide"><a href="#NumPy’s-Simple-Guide" class="headerlink" title="NumPy’s Simple Guide"></a>NumPy’s Simple Guide</h1><h2 id="import"><a href="#import" class="headerlink" title="import"></a>import</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> numpy <span class="keyword">as</span> np</span><br></pre></td></tr></table></figure><h2 id="Init"><a href="#Init" class="headerlink" title="Init"></a>Init</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># new an array</span></span><br><span class="line">array = np.array([[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>],</span><br><span class="line"> [<span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>]])</span><br><span class="line">print(array)</span><br></pre></td></tr></table></figure><p>output:</p><pre><code>[[1 2 3] [2 3 4]]</code></pre><h3 id="attribute"><a href="#attribute" class="headerlink" title="attribute"></a>attribute</h3><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># print array's shape\size\dimension</span></span><br><span class="line">print(<span class="string">"array's shape:\t\t{}"</span>.format(array.shape))</span><br><span class="line">print(<span class="string">"array's size:\t\t{}"</span>.format(array.size))</span><br><span class="line">print(<span class="string">"array's dimension:\t{}"</span>.format(array.ndim))</span><br></pre></td></tr></table></figure><p>Output:</p><pre><code>array's shape: (2, 3)array's size: 6array's dimension: 2</code></pre><h3 id="data’s-type"><a href="#data’s-type" class="headerlink" title="data’s type"></a>data’s type</h3><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># data's type</span></span><br><span class="line">print(array.dtype)</span><br><span class="line">array_int64 = np.array([<span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>], dtype = np.float32)</span><br><span class="line">print(array_int64.dtype)</span><br></pre></td></tr></table></figure><p>output:</p><pre><code>int64float32</code></pre><h3 id="init-zeros-random-array"><a href="#init-zeros-random-array" class="headerlink" title="init zeros/random array"></a>init zeros/random array</h3><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># new a zeros array</span></span><br><span class="line">array_zeros = np.zeros((<span class="number">3</span>,<span class="number">3</span>))</span><br><span class="line">print(array_zeros)</span><br></pre></td></tr></table></figure><p>output:</p><pre><code>[[0. 0. 0.] [0. 0. 0.] [0. 0. 0.]]</code></pre><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># new a random array</span></span><br><span class="line">array_random_1 = np.random.rand(<span class="number">3</span>,<span class="number">3</span>)</span><br><span class="line">print(array_random_1)</span><br><span class="line">array_random_2 = np.random.randint(<span class="number">1</span>,<span class="number">10</span>,(<span class="number">3</span>,<span class="number">3</span>))</span><br><span class="line">print(array_random_2)</span><br></pre></td></tr></table></figure><p>output:</p><pre><code>[[0.92729723 0.09598583 0.66051484] [0.39062266 0.02234608 0.45097481] [0.51593931 0.56147379 0.9935763 ]][[3 8 3] [7 6 5] [8 8 3]]</code></pre><h3 id="new-a-range-data"><a href="#new-a-range-data" class="headerlink" title="new a range data"></a>new a range data</h3><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># new a range data</span></span><br><span class="line">arange_data = np.arange(<span class="number">10</span>,<span class="number">20</span>,<span class="number">5</span>)</span><br><span class="line">print(arange_data)</span><br></pre></td></tr></table></figure><p>output:</p><pre><code>[10 15]</code></pre><h3 id="change-array’s-shape"><a href="#change-array’s-shape" class="headerlink" title="change array’s shape"></a>change array’s shape</h3><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># change arrar's shape</span></span><br><span class="line">print(array)</span><br><span class="line">print(<span class="string">"-----changed------"</span>)</span><br><span class="line">array = array.reshape((<span class="number">3</span>,<span class="number">2</span>))</span><br><span class="line">print(array)</span><br></pre></td></tr></table></figure><pre><code>[[1 2 3] [2 3 4]]-----changed------[[1 2] [3 2] [3 4]]</code></pre>]]></content>
<summary type="html">
<h1 id="NumPy’s-Simple-Guide"><a href="#NumPy’s-Simple-Guide" class="headerlink" title="NumPy’s Simple Guide"></a>NumPy’s Simple Guide</h1><
</summary>
<category term="numpy" scheme="https://ranxb.cn/categories/numpy/"/>
<category term="numpy" scheme="https://ranxb.cn/tags/numpy/"/>
<category term="python" scheme="https://ranxb.cn/tags/python/"/>
</entry>
<entry>
<title>swfit_Simple_Guide</title>
<link href="https://ranxb.cn/2019/10/02/swfit-Simple-Guide/"/>
<id>https://ranxb.cn/2019/10/02/swfit-Simple-Guide/</id>
<published>2019-10-02T07:53:51.000Z</published>
<updated>2019-10-02T09:09:53.930Z</updated>
<content type="html"><![CDATA[<blockquote><p>新建一个PlayGround,直接看实例代码</p></blockquote><figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> AppKit<span class="comment">//暂时没啥用的东西</span></span><br><span class="line"><span class="keyword">var</span> strTest = <span class="string">"Hello, playground"</span></span><br><span class="line"><span class="keyword">var</span> maybeNilTest:<span class="type">Int?</span> = <span class="literal">nil</span></span><br><span class="line"><span class="keyword">var</span> intTest:<span class="type">Int</span> = <span class="number">10</span></span><br><span class="line"><span class="keyword">var</span> setTypeTest:(<span class="type">Int?</span>, <span class="type">String</span>) = (<span class="number">1</span>,<span class="string">"hahaa"</span>)</span><br><span class="line"><span class="keyword">var</span> setValue = (<span class="number">1</span>,<span class="number">3</span>)</span><br><span class="line"><span class="keyword">var</span> deepCopySetTest = setValue</span><br><span class="line"></span><br><span class="line"><span class="comment">//??表达式判断可为nil的值</span></span><br><span class="line"><span class="built_in">print</span>(maybeNilTest ?? <span class="number">10</span>)</span><br><span class="line"><span class="built_in">print</span>(strTest)</span><br><span class="line"><span class="comment">//字符串拼接</span></span><br><span class="line"><span class="built_in">print</span>(<span class="string">"intTest: \(intTest)"</span>)</span><br><span class="line"><span class="comment">//元组索引</span></span><br><span class="line"><span class="built_in">print</span>(setTypeTest.<span class="number">0</span>!)</span><br><span class="line"><span class="comment">//type函数</span></span><br><span class="line"><span class="built_in">print</span>(type(of: setTypeTest))</span><br><span class="line"></span><br><span class="line"><span class="comment">//元组赋值,非引用,deepCopy</span></span><br><span class="line">deepCopySetTest.<span class="number">0</span> = <span class="number">10</span></span><br><span class="line"><span class="built_in">print</span>(setValue)</span><br><span class="line"><span class="built_in">print</span>(deepCopySetTest)</span><br><span class="line"></span><br><span class="line"><span class="comment">//元组key</span></span><br><span class="line"><span class="keyword">var</span> setc:(name1:<span class="type">Int</span>, name2:<span class="type">String</span>) = (<span class="number">1</span>,<span class="string">"haha"</span>)</span><br><span class="line"><span class="comment">// terminator 参数separator 参数</span></span><br><span class="line"><span class="built_in">print</span>(setc, setc.name1, separator:<span class="string">" separator "</span>, terminator:<span class="string">" terminator \n"</span>)</span><br><span class="line"><span class="comment">//三元运算符</span></span><br><span class="line"><span class="keyword">var</span> d = (maybeNilTest == <span class="literal">nil</span>) ? <span class="number">1</span> :maybeNilTest!</span><br><span class="line"><span class="built_in">print</span>(d)</span><br><span class="line"></span><br><span class="line"><span class="comment">//if sentence</span></span><br><span class="line"><span class="keyword">var</span> ifTestValue = <span class="number">10</span></span><br><span class="line"><span class="keyword">if</span> ifTestValue > <span class="number">10</span>{</span><br><span class="line"> <span class="built_in">print</span>(<span class="string">"ifTestValue is bigger than 10"</span>)</span><br><span class="line">}<span class="keyword">else</span> <span class="keyword">if</span> ifTestValue == <span class="number">10</span> {</span><br><span class="line"> <span class="built_in">print</span>(<span class="string">"this is else if branch"</span>)</span><br><span class="line">}<span class="keyword">else</span> {</span><br><span class="line"> <span class="built_in">print</span>(<span class="string">"this is else branch"</span>)</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="comment">//可选项绑定</span></span><br><span class="line"><span class="comment">//maybeNilTest = 1</span></span><br><span class="line"><span class="keyword">if</span> <span class="keyword">let</span> optionBindTest = maybeNilTest{</span><br><span class="line"> <span class="built_in">print</span>(<span class="string">"optionBindTest value is :"</span>,optionBindTest)</span><br><span class="line">}<span class="keyword">else</span>{</span><br><span class="line"> <span class="built_in">print</span>(<span class="string">"maybeNilTest is nil"</span>)</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="comment">//隐式展开</span></span><br><span class="line"><span class="comment">//允许让变量在某些情况下可以赋值为空,但是保证输入输出和调用时w有值</span></span><br><span class="line"><span class="keyword">var</span> yinshizhankai:<span class="type">Int!</span> = <span class="number">10</span></span><br><span class="line"><span class="keyword">var</span> yinshizhankaiB : <span class="type">Int</span> = yinshizhankai</span><br><span class="line"><span class="built_in">print</span>(<span class="string">"yinshizhankai is 10: "</span>, yinshizhankai!)</span><br><span class="line">yinshizhankai = <span class="literal">nil</span></span><br><span class="line"><span class="built_in">print</span>(<span class="string">"yinshizhankai is nil: "</span>, yinshizhankai ?? <span class="number">1</span>)</span><br><span class="line"><span class="built_in">print</span>(<span class="string">"yinshizhankaiB: "</span>, yinshizhankaiB)</span><br><span class="line"></span><br><span class="line"><span class="comment">//swich</span></span><br><span class="line"><span class="keyword">var</span> swichTest = <span class="number">10</span></span><br><span class="line"><span class="keyword">switch</span> swichTest {</span><br><span class="line"><span class="keyword">case</span> <span class="number">1</span>...<span class="number">10</span>:<span class="comment">//区间,后面继续h说,这个是闭区间,开区间可以是..<</span></span><br><span class="line"> <span class="built_in">print</span>(<span class="string">"swichTest == 10"</span>)</span><br><span class="line"> <span class="keyword">fallthrough</span></span><br><span class="line"><span class="keyword">case</span> <span class="number">20</span>:</span><br><span class="line"> <span class="built_in">print</span>(<span class="string">"switchTest == 20 with fallthrough"</span>)</span><br><span class="line"><span class="keyword">default</span>:</span><br><span class="line"> <span class="built_in">print</span>(<span class="string">"default"</span>)</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="comment">//switch 元组匹配</span></span><br><span class="line"><span class="keyword">var</span> switchTestB = (<span class="number">1</span>, <span class="number">2</span>)</span><br><span class="line"><span class="keyword">switch</span> switchTestB {</span><br><span class="line"><span class="keyword">case</span> <span class="keyword">var</span>(<span class="number">1</span>, num) <span class="keyword">where</span> num > <span class="number">1</span>:</span><br><span class="line"> <span class="built_in">print</span>(<span class="string">"this is (1, 2) num is \(num) and num > 1"</span>)</span><br><span class="line"> num = <span class="number">3</span></span><br><span class="line"><span class="keyword">default</span>:</span><br><span class="line"> <span class="built_in">print</span>(<span class="string">"this is default"</span>)</span><br><span class="line">}</span><br><span class="line"><span class="built_in">print</span>(<span class="string">"this is (1, 2) num is \(switchTestB)"</span>)</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">// 区间</span></span><br><span class="line"><span class="keyword">var</span> rangeA = <span class="number">1.5</span>...<span class="number">5</span></span><br><span class="line"><span class="keyword">var</span> rangeB = <span class="number">1</span>..<<span class="number">5</span></span><br><span class="line"></span><br><span class="line"><span class="comment">//for</span></span><br><span class="line"><span class="keyword">for</span> item <span class="keyword">in</span> rangeA{</span><br><span class="line"> <span class="keyword">if</span> item == <span class="number">2</span>{<span class="keyword">continue</span>} <span class="comment">// break一样</span></span><br><span class="line"> <span class="built_in">print</span>(item, terminator:<span class="string">" "</span>)</span><br><span class="line">}</span><br><span class="line"><span class="built_in">print</span>()</span><br><span class="line"><span class="keyword">for</span> item <span class="keyword">in</span> <span class="built_in">stride</span>(from: <span class="number">1</span>, to: <span class="number">6</span>, by: <span class="number">2</span>).reversed(){</span><br><span class="line"> <span class="built_in">print</span>(item, terminator:<span class="string">" "</span>)</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<blockquote>
<p>新建一个PlayGround,直接看实例代码</p>
</blockquote>
<figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="lin
</summary>
<category term="swift" scheme="https://ranxb.cn/tags/swift/"/>
<category term="Guide" scheme="https://ranxb.cn/tags/Guide/"/>
</entry>
<entry>
<title>zsh_is_too_slow</title>
<link href="https://ranxb.cn/2019/09/30/zsh-is-too-slow/"/>
<id>https://ranxb.cn/2019/09/30/zsh-is-too-slow/</id>
<published>2019-09-30T11:54:28.000Z</published>
<updated>2019-09-30T12:06:42.824Z</updated>
<content type="html"><![CDATA[<h1 id="zsh慢成💩"><a href="#zsh慢成💩" class="headerlink" title="zsh慢成💩"></a>zsh慢成💩</h1><blockquote><p>简单介绍一下,Catalina升级成zsh之后,便安装了传说中最简单配置zsh的“插件”——oh-my-zsh</p><p>但是安装好之后,速度慢的像坨翔</p><p>启动五秒</p><p>随便cd一下要三秒</p><p>随便ls一下等两秒</p><p>啊</p><p>要死了</p></blockquote><h2 id="Why"><a href="#Why" class="headerlink" title="Why"></a>Why</h2><p>百度谷歌一番发现普遍都有这个问题,可能原因有很多,简单的原因这里不多说,建议先谷歌一下</p><p>问题集中在zsh的插件众多,每次执行时都会执行各种插件的东西,尤其是以git为最大的罪魁祸首。</p><p>所以,解决问题的第一步是先跟踪,定位问题。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">zsh -xv</span><br></pre></td></tr></table></figure><p>一般情况下可以发现慢的主要原因是卡在了git有关的命令上,关闭git插件后,没有任何影响,你会发现,git相关的命令是集成在主题上的,你可能可以通过使用下面的命令解决一定的问题,但是对于我来说可能不太有用</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git config --global oh-my-zsh.hide-status 1</span><br></pre></td></tr></table></figure><p>索性查看相关主题的配置源码,我用的主题是<code>fishy</code></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line"> 1 <span class="comment"># ZSH Theme emulating the Fish shell's default prompt.</span></span><br><span class="line"> 2 </span><br><span class="line"> 3 <span class="function"><span class="title">_fishy_collapsed_wd</span></span>() {</span><br><span class="line"> 4 <span class="built_in">echo</span> $(<span class="built_in">pwd</span> | perl -pe <span class="string">'</span></span><br><span class="line"><span class="string"> 5 BEGIN {</span></span><br><span class="line"><span class="string"> 6 binmode STDIN, ":encoding(UTF-8)";</span></span><br><span class="line"><span class="string"> 7 binmode STDOUT, ":encoding(UTF-8)";</span></span><br><span class="line"><span class="string"> 8 }; s|^$ENV{HOME}|~|g; s|/([^/.])[^/]*(?=/)|/$1|g; s|/\.([^/])[^/]*(?=/)|/.$1|g</span></span><br><span class="line"><span class="string"> 9 '</span>)</span><br><span class="line">10 }</span><br><span class="line">11 </span><br><span class="line">12 <span class="built_in">local</span> user_color=<span class="string">'green'</span>; [ <span class="variable">$UID</span> -eq 0 ] && user_color=<span class="string">'red'</span></span><br><span class="line">13 PROMPT=<span class="string">'%n@%m %{$fg[$user_color]%}$(_fishy_collapsed_wd)%{$reset_color%}%(!.#.>) '</span></span><br><span class="line">14 PROMPT2=<span class="string">'%{$fg[red]%}\ %{$reset_color%}'</span></span><br><span class="line">15 </span><br><span class="line">16 <span class="built_in">local</span> return_status=<span class="string">"%{<span class="variable">$fg_bold</span>[red]%}%(?..%?)%{<span class="variable">$reset_color</span>%}"</span></span><br><span class="line">17 <span class="comment">#RPROMPT="${RPROMPT}"'${return_status}$(git_prompt_info)$(git_prompt_status)%{$reset_color%}'</span></span><br><span class="line">18 </span><br><span class="line">19 ZSH_THEME_GIT_PROMPT_PREFIX=<span class="string">" "</span></span><br><span class="line">20 ZSH_THEME_GIT_PROMPT_SUFFIX=<span class="string">""</span></span><br><span class="line">21 ZSH_THEME_GIT_PROMPT_DIRTY=<span class="string">""</span></span><br><span class="line">22 ZSH_THEME_GIT_PROMPT_CLEAN=<span class="string">""</span></span><br><span class="line">23 </span><br><span class="line">24 ZSH_THEME_GIT_PROMPT_ADDED=<span class="string">"%{<span class="variable">$fg_bold</span>[green]%}+"</span></span><br><span class="line">25 ZSH_THEME_GIT_PROMPT_MODIFIED=<span class="string">"%{<span class="variable">$fg_bold</span>[blue]%}!"</span></span><br><span class="line">26 ZSH_THEME_GIT_PROMPT_DELETED=<span class="string">"%{<span class="variable">$fg_bold</span>[red]%}-"</span></span><br><span class="line">27 ZSH_THEME_GIT_PROMPT_RENAMED=<span class="string">"%{<span class="variable">$fg_bold</span>[magenta]%}>"</span></span><br><span class="line">28 ZSH_THEME_GIT_PROMPT_UNMERGED=<span class="string">"%{<span class="variable">$fg_bold</span>[yellow]%}#"</span></span><br><span class="line">29 ZSH_THEME_GIT_PROMPT_UNTRACKED=<span class="string">"%{<span class="variable">$fg_bold</span>[cyan]%}?"</span></span><br></pre></td></tr></table></figure><p>发现git相关的命令集成在<code>RPROMPT="${RPROMPT}"'${return_status}$(git_prompt_info)$(git_prompt_status)%{$reset_color%}'</code>索性全部注释掉</p><h2 id="爽"><a href="#爽" class="headerlink" title="爽"></a>爽</h2>]]></content>
<summary type="html">
<h1 id="zsh慢成💩"><a href="#zsh慢成💩" class="headerlink" title="zsh慢成💩"></a>zsh慢成💩</h1><blockquote>
<p>简单介绍一下,Catalina升级成zsh之后,便安装了传说中最简单配置z
</summary>
<category term="zsh" scheme="https://ranxb.cn/categories/zsh/"/>
<category term="linux" scheme="https://ranxb.cn/tags/linux/"/>
<category term="zsh" scheme="https://ranxb.cn/tags/zsh/"/>
</entry>
<entry>
<title>vim笔记</title>
<link href="https://ranxb.cn/2019/09/30/vim/"/>
<id>https://ranxb.cn/2019/09/30/vim/</id>
<published>2019-09-30T11:00:51.000Z</published>
<updated>2019-10-01T14:04:04.423Z</updated>
<content type="html"><![CDATA[<h1 id="Vim-笔记"><a href="#Vim-笔记" class="headerlink" title="Vim 笔记"></a>Vim 笔记</h1><h2 id="编辑"><a href="#编辑" class="headerlink" title="编辑"></a>编辑</h2><ul><li>i——insert(字母前)</li><li>a——append(字母后)</li><li>o——below(下一行)</li><li>A——append after line(行后)</li><li>I——insert before line(行前)</li><li>O——above line(上一行)</li></ul><ul><li>ctrl+u——删除行</li><li>ctrl+w——删除字</li><li>ctrl+a——移动到最前</li><li>ctrl+e——移动到最后</li><li>gi——移动到上一次编辑的地方 </li></ul><ul><li>dw——删除一个字符</li><li>dd——删除一行</li><li>dt{char}——删除到某个字符</li><li>d0/$——删除到行首行尾</li><li>x——删除字符</li></ul><p>快速修改</p><ul><li>r(replace)——替换</li><li>c(change)——ct“——删除到”之前的内容并进入编辑模式</li><li>s(substitute)——删除并进入编辑模式</li></ul><p>替换</p><ul><li><code>:% s/self/this/g</code>——%全部,s替换,self替换为this,g全局</li><li><code>:1,6 s/self/this/c</code>——1,6行,s替换,sels替换为this,c需要确认</li></ul><p>查询</p><ul><li>/?——前向或反向</li><li>nN——下一个或者上一个</li></ul><h2 id="视图"><a href="#视图" class="headerlink" title="视图"></a>视图</h2><ul><li><code>:vs</code>——左右分屏</li><li><code>:sp</code>——上下分屏</li><li><code>:q</code>——退出屏幕</li></ul><ul><li>v——选中模式</li><li>V——行选中</li><li>ctrl+v——块选中</li><li>y——复制</li><li>p——粘贴</li><li>u——撤销</li><li>d——删除</li></ul><h2 id="移动"><a href="#移动" class="headerlink" title="移动"></a>移动</h2><ul><li>hjkl——上下左右</li><li>w/W 移到下一个单词开头,大写以空格为分割</li><li>e/E移到下一个单词的结尾</li><li>b/B上一个开头</li></ul><p>行间移动</p><ul><li>f{char}——行内搜索并跳转到下一个字母上,F表示向前搜索</li></ul><ul><li>行首行尾——0,$</li></ul><ul><li>gg/G——文件开头/结尾</li><li>H/M/L——屏幕开头/中间/结尾</li><li>ctrl+u/f——向上/下翻页</li><li>z z——放在中间</li></ul><h2 id="配置"><a href="#配置" class="headerlink" title="配置"></a>配置</h2>]]></content>
<summary type="html">
<h1 id="Vim-笔记"><a href="#Vim-笔记" class="headerlink" title="Vim 笔记"></a>Vim 笔记</h1><h2 id="编辑"><a href="#编辑" class="headerlink" title="编辑"><
</summary>
<category term="vim" scheme="https://ranxb.cn/categories/vim/"/>
<category term="vim" scheme="https://ranxb.cn/tags/vim/"/>
<category term="linux" scheme="https://ranxb.cn/tags/linux/"/>
</entry>
<entry>
<title>linux后台运行脚本的指令</title>
<link href="https://ranxb.cn/2019/07/19/howtorunscriptonlinux/"/>
<id>https://ranxb.cn/2019/07/19/howtorunscriptonlinux/</id>
<published>2019-07-19T13:27:14.000Z</published>
<updated>2019-07-19T13:34:05.884Z</updated>
<content type="html"><![CDATA[<blockquote><p>写给RoseauHan的</p></blockquote><h2 id="How"><a href="#How" class="headerlink" title="How"></a>How</h2><p>举个栗子</p><p><code>sudo nohup python3 -u AppleDeliverMail.py > log & echo $! > pid</code></p><h2 id="Why"><a href="#Why" class="headerlink" title="Why"></a>Why</h2><p>nohup一般是需要挂后台长时间执行的脚本用的。<br>bg和fg指令只用于切换终端的前后台进程,如果终端断开连接,脚本也会被退出,所以长时间的脚本一般情况用nohup指令</p><h2 id="Stop"><a href="#Stop" class="headerlink" title="Stop"></a>Stop</h2><p>命令后面会保存pid到文件中,所以不用担心pid找不到(找不到就ps呗,但是我还是喜欢记下来),终止的时候kill掉就好了</p>]]></content>
<summary type="html">
<blockquote>
<p>写给RoseauHan的</p>
</blockquote>
<h2 id="How"><a href="#How" class="headerlink" title="How"></a>How</h2><p>举个栗子</p>
<p><code>s
</summary>
<category term="脚本" scheme="https://ranxb.cn/categories/%E8%84%9A%E6%9C%AC/"/>
</entry>
<entry>
<title>毛概下重点整理</title>
<link href="https://ranxb.cn/2019/06/22/%E6%AF%9B%E6%A6%82%E4%B8%8B%E9%87%8D%E7%82%B9%E6%95%B4%E7%90%86/"/>
<id>https://ranxb.cn/2019/06/22/毛概下重点整理/</id>
<published>2019-06-21T16:16:11.000Z</published>
<updated>2019-06-21T17:00:31.489Z</updated>
<content type="html"><![CDATA[<h1 id="毛概下重点整理"><a href="#毛概下重点整理" class="headerlink" title="毛概下重点整理"></a>毛概下重点整理</h1><blockquote><p>从台湾回来要补修政治课。。。。。。。大部分都是女朋友教我的,我做一下整理。</p></blockquote><h2 id="如何理解我国社会主义矛盾发生的变化"><a href="#如何理解我国社会主义矛盾发生的变化" class="headerlink" title="如何理解我国社会主义矛盾发生的变化"></a>如何理解我国社会主义矛盾发生的变化</h2><blockquote><p>3次矛盾的变化</p></blockquote><ul><li><p>三次矛盾分别是</p><ul><li><p>是⼈⺠民对于建⽴先进的⼯业国的要求同落后的农业国的现实之间的⽭盾,是⼈⺠民对于经济⽂化迅速发展的需要同当前经济⽂化不能满⾜⼈⺠民需要的状况之间 的⽭盾。 </p></li><li><p>⼈⺠民⽇益增⻓长的物质⽂化需要同落后的社会⽣产之间的⽭盾。 </p></li><li><p>⼈⺠民⽇益增⻓长的美好⽣活需要和不平衡不充分的发展之间的⽭盾。</p></li></ul></li><li><p>我国的社会主要矛盾的变化,没有改变我们对我国社会主义所处历史阶段的判断,我国仍处理并将长期处于社会主义初级阶段的基本国情没有变,我国是世界上最大的发展中国家的国际地位也没有变。</p></li><li><p>领导和团结全国各族人民,以经济建设为中心。坚持四项基本原则,坚持改革开放,自力更生,艰苦创业,为把我国建设成为富强民主文明和谐美丽的社会主义现代化强国而奋斗。</p></li></ul><h3 id="如何正确理解坚持党的领导、人民当家作主和依法治国的有机统一"><a href="#如何正确理解坚持党的领导、人民当家作主和依法治国的有机统一" class="headerlink" title="如何正确理解坚持党的领导、人民当家作主和依法治国的有机统一"></a>如何正确理解坚持党的领导、人民当家作主和依法治国的有机统一</h3><p>走中国特色社会主义政治发展道路,必须坚持党的领导、人民当家作主、依法治国的有机统一。</p><p>党的领导是人民当家作主和依法治国的根本保证,人民当家作主是社会主义民主政治的本质特征,依法治国是党领导人民治理国家的基本方式,三者统一于我国社会主义民主政治的伟大实践。</p><ul><li>坚持党的领导,就要发挥党总揽全局、协调各方的领导核心作用。改进党的领导方式和执政方式,保证党领导人民有效治理国家</li><li>实现人民当家作主,就要扩大人民有序政治参与,保证人民依法实行民主选举、民主协商、民主决策、民主管理、民主监督。巩固基层政权,完善基层民主制度,保障人民知情权、参与权、表达权、监督权</li><li>坚持依法治国,就要维护国家法制统一、尊严、权威,加强人权法治保障,保证人民依法享有广泛权利和自由。健全依法决策机制,构建决策科学、执行坚决、监督有力的权利运行机制</li></ul><h2 id="如何建设美丽中国"><a href="#如何建设美丽中国" class="headerlink" title="如何建设美丽中国"></a>如何建设美丽中国</h2><blockquote><p>生态文明建设</p></blockquote><ul><li>建设⽣态⽂明是关系⼈⺠民福祉、关乎⺠民族未来的千年⼤计,是实现中华⺠民族伟 ⼤复兴的重要战略任务。 </li><li>坚持⼈与⾃然和谐共⽣,树⽴和践⾏绿⽔⻘青⼭就是⾦⼭银⼭理念,推动形成绿 ⾊发展⽅式和⽣活⽅式,统筹⼭⽔林⽥湖草系统治理,实⾏最严格⽣态环境保护 制度,开创⽣态⽂明建设和环境保护新局⾯。</li></ul><h2 id="决胜全面建成小康社会提出了哪些新的要求"><a href="#决胜全面建成小康社会提出了哪些新的要求" class="headerlink" title="决胜全面建成小康社会提出了哪些新的要求"></a>决胜全面建成小康社会提出了哪些新的要求</h2><p>全⾯建成⼩康社会,覆盖领域要全⾯,是“五位⼀体”的全⾯ 要实事求是、因地制宜、全⾯建成⼩康社会是针对全国讲的不是每个地区、每个 ⺠民族、每个⼈达到同⼀⽔平。</p><blockquote><p>五位一体:</p><ul><li>经济建设</li><li>政治建设</li><li>文化建设</li><li>社会建设</li><li>生态文明建设</li></ul><p>四个全面</p><ul><li>全面建成小康社会</li><li>全面深化改革</li><li>全面依法治国</li><li>全面从严治党</li></ul></blockquote><h2 id="如何理解构建人类命运共同体思想的科学内涵"><a href="#如何理解构建人类命运共同体思想的科学内涵" class="headerlink" title="如何理解构建人类命运共同体思想的科学内涵"></a>如何理解构建人类命运共同体思想的科学内涵</h2><p>内涵(核⼼):“建设持久和平、普遍安全、共同繁荣、开放包容、清洁美丽的世界” </p><ul><li>政治上,要互相尊重、平等协商 。</li><li>安全上,要就坚持以对话解决争端、以协商化解分歧,统筹应对传统和⾮传安 全安全威胁,反对⼀切形式的恐怖主义。 </li><li>经济上,要同⾈共济,促进贸易和投资⾃由化便利化,推动经济全球化朝着更 加开放、包容、普惠、平衡、共赢的⽅向发展。</li><li>⽂化上,要尊重世界⽂明多样性 E ⽣态上,要坚持环境友好,合作应对⽓候变化,保护好⼈类赖以⽣存的地球家园。</li></ul><h2 id="如何理解当时最高政治领导力量"><a href="#如何理解当时最高政治领导力量" class="headerlink" title="如何理解当时最高政治领导力量"></a>如何理解当时最高政治领导力量</h2><blockquote><p>如何理解当时历史和人民的选择</p></blockquote><ol><li>中国共产党是中国⼯⼈阶级的先锋队,同时也是中国⼈⺠民和中华⺠民族 的先锋队。是中国特⾊社会主义事业的领导核⼼。<strong>(党的地位重要性)</strong></li><li>中国共产党成⽴以后,团结带领中国⼈⺠民,建⽴中华⼈⺠民共和国,完 成社会主义⾰命,确⽴社会主义基本制度,消灭剥削,进⾏改⾰开放新的违⼤⾰ 命,极⼤激发⼴⼤⼈⺠民群众的创造性。近代以来,争取⺠民族独⽴、⼈⺠民解放,实 现国家富强、⼈⺠民幸福,是中国⼈⺠民必须完成的两⼤历史任务。<strong>(党的伟绩)</strong></li><li>历史表明,历史和⼈⺠民选择中国共产党领导中华⺠民族伟⼤复兴的事业 是正确的,中国共产党领导中国⼈⺠民开辟的中国特⾊社会主义道路是正确的,中 国共产党和中国⼈⺠民扎根中国⼤地、、吸纳⼈类⽂明的优秀成果、独⽴⾃主实现 国家发展的战略是正确的,必须⻓长期坚持、绝不动摇;<strong>(历史⻆角度)</strong></li></ol><h2 id="其他"><a href="#其他" class="headerlink" title="其他"></a>其他</h2><h3 id="改革开放"><a href="#改革开放" class="headerlink" title="改革开放"></a>改革开放</h3><p><strong>四个基于:</strong></p><ul><li>是基于对党和国家前途命运的深刻把握是 </li><li>是基于对社会主义⾰命和建设实践的深刻总结 </li><li>是基于对时代潮流的深刻洞察 </li><li>是基于对⼈⺠民群众期盼和需要的深刻体悟</li></ul><p>评价:是我们党的⼀次伟⼤觉醒。是中国⼈⺠和中华⺠民族发展史上⼀次伟⼤⾰命。</p><h3 id="供给侧改革"><a href="#供给侧改革" class="headerlink" title="供给侧改革"></a>供给侧改革</h3><ol><li>推动产业优化升级,加快发展先进制造业为重点全⾯提升实体经济。 </li><li>深化要素市场化配置改⾰,实现由以价取胜向以质取胜的转变。 </li><li>注重调动和保护⼈的积极性 </li><li>优化市场供求结构,坚持去产能、去杠杆</li></ol><h3 id="新时代如何坚持⾛中国特⾊社会主义道路"><a href="#新时代如何坚持⾛中国特⾊社会主义道路" class="headerlink" title="新时代如何坚持⾛中国特⾊社会主义道路"></a>新时代如何坚持⾛中国特⾊社会主义道路</h3><blockquote><p><strong>十四个坚持:</strong></p><p>坚持党对⼀切⼯作的领导;坚持以⼈⺠民为中⼼;</p><p>坚持全⺠民深化改⾰;坚持新发展 理念;</p><p>坚持⼈⺠民当家作主;坚持全⾯依法治国;</p><p>坚持社会主义核⼼价值体系;坚持在发展中保障和改善⺠民⽣;</p><p>坚持⼈与⾃然和谐共⽣;坚持总体国家安全观;</p><p>坚持党对⼈⺠民军队的绝对领导;坚持⼀国两制和推荐祖国统⼀;</p><p>坚持推动构建⼈类命运共同体;坚持全⾯从严治党;</p></blockquote><h3 id="新时代如何推进现代化经济体系建设"><a href="#新时代如何推进现代化经济体系建设" class="headerlink" title="新时代如何推进现代化经济体系建设"></a>新时代如何推进现代化经济体系建设</h3><ul><li>坚持以新发展理念为指导,以供给侧结构改革为主线<ul><li>贯彻新发展理念,坚持质量第一、效益优先</li><li>坚持以供给侧结构性改革为主线推动和各项经济工作</li><li>推动经济发展质量变革,效率变革,动力变革</li></ul></li><li>加快建设适应现代化经济体系要求的产业体系和经济体制<ul><li>着力加快建设实体经济、科技创新、现代金融、人力资源协同发展的产业体系</li><li>着力构建市场机制有效、微观主体有活力、宏观调控有度的经济体制</li></ul></li></ul>]]></content>
<summary type="html">
<h1 id="毛概下重点整理"><a href="#毛概下重点整理" class="headerlink" title="毛概下重点整理"></a>毛概下重点整理</h1><blockquote>
<p>从台湾回来要补修政治课。。。。。。。大部分都是女朋友教我的,我做一下整理。
</summary>
<category term="笔记" scheme="https://ranxb.cn/categories/%E7%AC%94%E8%AE%B0/"/>
</entry>
<entry>
<title>记一次微信小程序开发的经历</title>
<link href="https://ranxb.cn/2019/06/05/%E8%AE%B0%E4%B8%80%E6%AC%A1%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F%E5%BC%80%E5%8F%91%E7%9A%84%E7%BB%8F%E5%8E%86/"/>
<id>https://ranxb.cn/2019/06/05/记一次微信小程序开发的经历/</id>
<published>2019-06-05T02:38:21.000Z</published>
<updated>2019-06-05T02:38:21.734Z</updated>
<content type="html"><![CDATA[<p>小程序</p>]]></content>
<summary type="html">
<p>小程序</p>
</summary>
<category term="随笔" scheme="https://ranxb.cn/categories/%E9%9A%8F%E7%AC%94/"/>
</entry>
<entry>
<title>MySQL中文的坑</title>
<link href="https://ranxb.cn/2019/06/04/MySQL%E4%B8%AD%E6%96%87%E7%9A%84%E5%9D%91/"/>
<id>https://ranxb.cn/2019/06/04/MySQL中文的坑/</id>
<published>2019-06-04T07:28:46.000Z</published>
<updated>2019-06-04T07:28:46.605Z</updated>
<content type="html"><![CDATA[<blockquote><p>小程序准备上线了,为了保证稳定性和数据库的安全准备从sqlite迁移到mysql,结果我就日了狗了。。。。。</p></blockquote><p>现象:mysql中文字段报错:比如:<code>Incorrect string value: ‘\xF0\x9F\x98\x83 <…’ for column ‘summary’ at row 1</code><br>问题:明显是编码错误,环境是Macos+python3+Django。和明显不是我的编码问题。于是直接进行数据库操作<code>insert into app_lzuuserinfo (anameu) values ("冉");</code>还是报错,说明是数据库的编码问题<br>解决:</p><p>这tm我就要好好说道说道了。第一步百度,答案清一色的是该数据库编码格式为utf8,但是我的数据库就是utf8的。无语,陷入死胡同,于是总觉得是没有生效的问题反复使用和修改<code>set character_set_character=utf8;</code><br>和mysqld.cnf。最后毫无用处。</p><p>第二步,roseahan去Google了一下。。。。于是看到了这篇文章:</p><blockquote><p><a href="https://medium.com/@adamhooper/in-mysql-never-use-utf8-use-utf8mb4-11761243e434" target="_blank" rel="noopener">https://medium.com/@adamhooper/in-mysql-never-use-utf8-use-utf8mb4-11761243e434</a></p></blockquote><p>mdzz….<br>大概意思如下:mysql的utf8不是我们的UTF-8,他的utf8是3个byte的编码格式,我们的UTF-8是四个字节的编码格式,所以改了utf8也不可能生效,所以我不知道为什么大家清一色的去改utf8…而且文章提出是mysql一直以来的bug没有解决,官方给出的解决方案是使用<code>utf8mb4</code>编码,这里的才是我们使用的UTF-8编码格式,同时emoji也是使用的这种格式。同时这个bug解决不了,官方也一直没有“声张”,所以。。。。。nb。下面给出解决方案,可以的话还是去我刚才的网站看吧。</p><p>method: </p><blockquote><p><a href="https://mathiasbynens.be/notes/mysql-utf8mb4#utf8-to-utf8mb4" target="_blank" rel="noopener">https://mathiasbynens.be/notes/mysql-utf8mb4#utf8-to-utf8mb4</a><br>require:mysql > 5.5.3</p><ol><li>对于已存在的表: <figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"># For each database:</span><br><span class="line">ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;</span><br><span class="line"># For each table:</span><br><span class="line">ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;</span><br><span class="line"># For each column:</span><br><span class="line">ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;</span><br><span class="line"># (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)</span><br></pre></td></tr></table></figure></li></ol></blockquote><ol start="2"><li>Check the maximum length of columns and index keys自行检查最大长度</li><li>Modify connection, client, and server character sets<br>老规矩修改cnf<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">[client]</span><br><span class="line">default-character-set = utf8mb4</span><br><span class="line"></span><br><span class="line">[mysql]</span><br><span class="line">default-character-set = utf8mb4</span><br><span class="line"></span><br><span class="line">[mysqld]</span><br><span class="line">character-set-client-handshake = FALSE</span><br><span class="line">character-set-server = utf8mb4</span><br><span class="line">collation-server = utf8mb4_unicode_ci</span><br></pre></td></tr></table></figure></li></ol><p>都是utf8mb4,</p><ol start="4"><li>重启。</li><li>再去检查一下数据库的编码,就没问题了。</li></ol><blockquote><p>吐槽:baidu is a shit!the same as 闭眼睛转发的人</p></blockquote>]]></content>
<summary type="html">
<blockquote>
<p>小程序准备上线了,为了保证稳定性和数据库的安全准备从sqlite迁移到mysql,结果我就日了狗了。。。。。</p>
</blockquote>
<p>现象:mysql中文字段报错:比如:<code>Incorrect string value:
</summary>
</entry>
<entry>
<title>hexo自动发布部署同步脚本</title>
<link href="https://ranxb.cn/2019/04/20/hexoautodeploy/"/>
<id>https://ranxb.cn/2019/04/20/hexoautodeploy/</id>
<published>2019-04-19T18:21:01.000Z</published>
<updated>2019-04-19T18:21:01.972Z</updated>
<content type="html"><![CDATA[<h1 id="hexo自动发布脚本"><a href="#hexo自动发布脚本" class="headerlink" title="hexo自动发布脚本"></a>hexo自动发布脚本</h1><blockquote><p>自动编译上传GitHub服务器,同时让自己的服务其同步的python脚本</p></blockquote><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> os</span><br><span class="line"><span class="keyword">import</span> threading</span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> paramiko</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">execute_cmds</span><span class="params">(ip, name, pwd, cmd)</span>:</span></span><br><span class="line"> <span class="keyword">try</span>:</span><br><span class="line"> ssh = paramiko.SSHClient()</span><br><span class="line"> ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())</span><br><span class="line"> ssh.connect(ip, <span class="number">22</span>, name, pwd, timeout=<span class="number">5</span>)</span><br><span class="line"> print(<span class="string">'连接成功'</span>)</span><br><span class="line"></span><br><span class="line"> <span class="keyword">for</span> m <span class="keyword">in</span> cmd:</span><br><span class="line"> print(m)</span><br><span class="line"> stdin, stdout, stderr = ssh.exec_command(m)</span><br><span class="line"> out = stdout.readlines()</span><br><span class="line"> <span class="keyword">for</span> o <span class="keyword">in</span> out:</span><br><span class="line"> print(o)</span><br><span class="line"> print(<span class="string">'运行成功'</span>)</span><br><span class="line"> ssh.close()</span><br><span class="line"> print(<span class="string">'关闭连接'</span>)</span><br><span class="line"> <span class="keyword">except</span> Exception <span class="keyword">as</span> error:</span><br><span class="line"> print(error)</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> __name__ == <span class="string">'__main__'</span>:</span><br><span class="line"> ip = <span class="string">"ip"</span> <span class="comment"># <span class="doctag">TODO:</span></span></span><br><span class="line"> name = <span class="string">"name"</span> <span class="comment"># <span class="doctag">TODO:</span></span></span><br><span class="line"> pwd = <span class="string">"pwd"</span> <span class="comment"># <span class="doctag">TODO:</span></span></span><br><span class="line"> cmd_local = <span class="string">"cd ~/Documents/blog;hexo g -d"</span></span><br><span class="line"> cmd_host = [<span class="string">"cd /data/ranxuebin/;git pull;"</span>]</span><br><span class="line"> os.system(cmd_local)</span><br><span class="line"> a = threading.Thread(target=execute_cmds, args=(ip, name, pwd, cmd_host))</span><br><span class="line"> a.start()</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<h1 id="hexo自动发布脚本"><a href="#hexo自动发布脚本" class="headerlink" title="hexo自动发布脚本"></a>hexo自动发布脚本</h1><blockquote>
<p>自动编译上传GitHub服务器,同时让自己的服务其
</summary>
<category term="hexo" scheme="https://ranxb.cn/categories/hexo/"/>
</entry>
<entry>
<title>HexoClient可视化</title>
<link href="https://ranxb.cn/2019/04/19/hexoclienttest/"/>
<id>https://ranxb.cn/2019/04/19/hexoclienttest/</id>
<published>2019-04-19T07:20:41.000Z</published>
<updated>2019-04-19T07:20:48.430Z</updated>
<content type="html"><![CDATA[<h1 id="这是一个测试图形化文章的管理工具"><a href="#这是一个测试图形化文章的管理工具" class="headerlink" title="这是一个测试图形化文章的管理工具"></a>这是一个测试图形化文章的管理工具</h1><blockquote><p>本来是想自己写一个hexo可视化后台管理的,结果发现了这个本地管理的一个小工具还不错。<br>发现了一个比较好用的hexo的可视化管理工具——hexoClient现在把它记下来。<br>但是是一个比较不太成熟的项目,比如不支持带密码的ssh-keygen的发布,因此我把密码取消了,可是目前还遇到的问题是不知道为什么提示发布成功但是没有鸡毛反应,<br>不过这样以来的话估计就可以经常更新bolg了</p></blockquote>]]></content>
<summary type="html">
<h1 id="这是一个测试图形化文章的管理工具"><a href="#这是一个测试图形化文章的管理工具" class="headerlink" title="这是一个测试图形化文章的管理工具"></a>这是一个测试图形化文章的管理工具</h1><blockquote>
<p>本
</summary>
<category term="hexo" scheme="https://ranxb.cn/categories/hexo/"/>
</entry>
<entry>
<title>甘肃政务服务网证件办理自动查询</title>
<link href="https://ranxb.cn/2018/07/06/%E7%94%98%E8%82%83%E6%94%BF%E5%8A%A1%E6%9C%8D%E5%8A%A1%E7%BD%91%E8%AF%81%E4%BB%B6%E5%8A%9E%E7%90%86%E8%87%AA%E5%8A%A8%E6%9F%A5%E8%AF%A2/"/>
<id>https://ranxb.cn/2018/07/06/甘肃政务服务网证件办理自动查询/</id>
<published>2018-07-06T11:07:45.000Z</published>
<updated>2018-07-06T11:23:41.506Z</updated>
<content type="html"><![CDATA[<h1 id="甘肃政务服务网证件办理自动查询"><a href="#甘肃政务服务网证件办理自动查询" class="headerlink" title="甘肃政务服务网证件办理自动查询"></a>甘肃政务服务网证件办理自动查询</h1><blockquote><p>办理护照和大通证的时候发现有个甘肃政务服务网可以查到办证的进度信息,因为着急要就随时盯着,所以写了个自动查询脚本,进度变化的时候会发邮件给我。</p></blockquote><p><a href="http://crj.gsgaw.gov.cn:7770/crj/crjmsjw/wsyy/ajax/bzjdquery.html" target="_blank" rel="noopener">甘肃政务信息网</a></p><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="a.png" alt title> </div> <div class="image-caption"></div> </figure> <p>效果如下:<br><img src="b.png" alt> </p><h2 id="源码"><a href="#源码" class="headerlink" title="源码"></a>源码</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># -*- coding: UTF-8 -*-</span></span><br><span class="line"><span class="keyword">import</span> json</span><br><span class="line"><span class="keyword">import</span> time</span><br><span class="line"><span class="keyword">import</span> requests</span><br><span class="line"><span class="keyword">import</span> smtplib</span><br><span class="line"><span class="keyword">from</span> email.mime.text <span class="keyword">import</span> MIMEText</span><br><span class="line"><span class="keyword">from</span> email.header <span class="keyword">import</span> Header</span><br><span class="line"></span><br><span class="line"><span class="keyword">from</span> bs4 <span class="keyword">import</span> BeautifulSoup</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">send_mail</span><span class="params">(sub, text)</span>:</span></span><br><span class="line"> <span class="comment"># 第三方 SMTP 服务</span></span><br><span class="line"> mail_host = <span class="string">"smtp.lzu.edu.cn"</span> <span class="comment"># 设置服务器</span></span><br><span class="line"> mail_user = <span class="string">"***"</span> <span class="comment"># 用户名</span></span><br><span class="line"> mail_pass = <span class="string">"***"</span> <span class="comment"># 口令</span></span><br><span class="line"></span><br><span class="line"> sender = <span class="string">'ranxb16@lzu.cn'</span></span><br><span class="line"> <span class="comment"># receivers = ['ranxuebin@ranxb.cn'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱</span></span><br><span class="line"> receivers = <span class="string">','</span>.join([<span class="string">'ranxuebin@ranxb.cn'</span>])</span><br><span class="line"> message = MIMEText(text, <span class="string">'plain'</span>, <span class="string">'utf-8'</span>)</span><br><span class="line"> message[<span class="string">'From'</span>] = Header(<span class="string">"自动发送"</span>, <span class="string">'utf-8'</span>)</span><br><span class="line"> message[<span class="string">'To'</span>] = Header(<span class="string">"Rankin"</span>, <span class="string">'utf-8'</span>)</span><br><span class="line"></span><br><span class="line"> subject = sub</span><br><span class="line"> message[<span class="string">'Subject'</span>] = Header(subject, <span class="string">'utf-8'</span>)</span><br><span class="line"> <span class="keyword">try</span>:</span><br><span class="line"> smtpObj = smtplib.SMTP()</span><br><span class="line"> smtpObj.connect(mail_host, <span class="number">25</span>) <span class="comment"># 25 为 SMTP 端口号</span></span><br><span class="line"> smtpObj.login(mail_user, mail_pass)</span><br><span class="line"> smtpObj.sendmail(sender, receivers, message.as_string())</span><br><span class="line"> print(<span class="string">"邮件发送成功"</span>)</span><br><span class="line"> <span class="keyword">except</span> smtplib.SMTPException:</span><br><span class="line"> print(<span class="string">"send mail error!"</span>)</span><br><span class="line"></span><br><span class="line">message = <span class="string">'Pass the first stage'</span></span><br><span class="line">loginurl = <span class="string">'http://crj.gsgaw.gov.cn:7770/crj/crjmsjw/wssb/ajax/bzjdcx'</span></span><br><span class="line"></span><br><span class="line">headers = {</span><br><span class="line"> <span class="string">"User-Agent"</span>: <span class="string">"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1 Safari/605.1.15"</span>,</span><br><span class="line"> <span class="string">"Accept"</span>: <span class="string">"application/json, text/javascript, */*; q=0.01"</span>,</span><br><span class="line"> <span class="string">"Accept-Encoding"</span>: <span class="string">"gzip, deflate"</span>,</span><br><span class="line"> <span class="string">"Host"</span>: <span class="string">'nj.gsaic.gov.cn'</span>,</span><br><span class="line"> <span class="string">"Accept-Language"</span>: <span class="string">'zh-cn'</span>,</span><br><span class="line"> <span class="string">"Content-Type"</span>: <span class="string">'application/x-www-form-urlencoded; charset=UTF-8'</span>,</span><br><span class="line"> <span class="string">'Referer'</span>: <span class="string">'http://crj.gsgaw.gov.cn:7770/crj/crjmsjw/wsyy/ajax/bzjdquery.html'</span>,</span><br><span class="line"> <span class="string">"Upgrade-Insecure-Requests"</span>: <span class="string">"1"</span>,</span><br><span class="line"> <span class="string">"Origin"</span>: <span class="string">'http://crj.gsgaw.gov.cn:7770'</span>,</span><br><span class="line"> <span class="string">"DNT"</span>: <span class="string">'1'</span>,</span><br><span class="line"> <span class="string">"Connection"</span>: <span class="string">'keep-alive'</span></span><br><span class="line"></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">payload = {</span><br><span class="line"> <span class="string">'sfzh'</span>: <span class="string">'632824199809070519'</span>,</span><br><span class="line"> <span class="string">'rylb'</span>: <span class="string">'R'</span></span><br><span class="line">}</span><br><span class="line">session = requests.Session()</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">message = <span class="string">""</span></span><br><span class="line"><span class="keyword">while</span> <span class="number">1</span>:</span><br><span class="line"> <span class="keyword">try</span>:</span><br><span class="line"> content = session.post(loginurl, headers=headers, data=payload)</span><br><span class="line"> <span class="keyword">except</span>:</span><br><span class="line"> print(<span class="string">"login error!"</span>)</span><br><span class="line"></span><br><span class="line"> tagert = json.loads(content.text)</span><br><span class="line"></span><br><span class="line"> res = tagert[<span class="string">'data'</span>][<span class="number">0</span>][<span class="string">'fullbzjd'</span>]</span><br><span class="line"> print(time.strftime(<span class="string">"%a %b %d %H:%M:%S %Y"</span>, time.localtime()) + <span class="string">" "</span> + res)</span><br><span class="line"> <span class="keyword">if</span> message != res:</span><br><span class="line"> send_mail(<span class="string">"赴台证"</span>, res)</span><br><span class="line"> message = res</span><br><span class="line"> time.sleep(<span class="number">120</span>)</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<h1 id="甘肃政务服务网证件办理自动查询"><a href="#甘肃政务服务网证件办理自动查询" class="headerlink" title="甘肃政务服务网证件办理自动查询"></a>甘肃政务服务网证件办理自动查询</h1><blockquote>
<p>办理护照和
</summary>
<category term="脚本" scheme="https://ranxb.cn/categories/%E8%84%9A%E6%9C%AC/"/>
<category term="脚本" scheme="https://ranxb.cn/tags/%E8%84%9A%E6%9C%AC/"/>
<category term="办证进度" scheme="https://ranxb.cn/tags/%E5%8A%9E%E8%AF%81%E8%BF%9B%E5%BA%A6/"/>
<category term="甘肃政务服务网" scheme="https://ranxb.cn/tags/%E7%94%98%E8%82%83%E6%94%BF%E5%8A%A1%E6%9C%8D%E5%8A%A1%E7%BD%91/"/>
</entry>
<entry>
<title>Mac OS下SD卡烧录镜像</title>
<link href="https://ranxb.cn/2018/06/05/Mac-OS%E4%B8%8BSD%E5%8D%A1%E7%83%A7%E5%BD%95%E9%95%9C%E5%83%8F/"/>
<id>https://ranxb.cn/2018/06/05/Mac-OS下SD卡烧录镜像/</id>
<published>2018-06-05T03:21:57.000Z</published>
<updated>2018-06-05T03:32:46.207Z</updated>
<content type="html"><![CDATA[<h1 id="Mac-OS下SD卡烧录镜像"><a href="#Mac-OS下SD卡烧录镜像" class="headerlink" title="Mac OS下SD卡烧录镜像"></a>Mac OS下SD卡烧录镜像</h1><blockquote><p>经常换镜像,做个笔记。</p></blockquote><h2 id="格式化"><a href="#格式化" class="headerlink" title="格式化"></a>格式化</h2><p>打开磁盘管理,选择SD卡,全部抹除,格式为FAT,不在多说。</p><h2 id="卸载分区"><a href="#卸载分区" class="headerlink" title="卸载分区"></a>卸载分区</h2><ul><li>打开命令行<br><code>diskutil list</code> 查看设备列表</li></ul><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line">Rankin-Mac:~ Rankin$ diskutil list</span><br><span class="line">/dev/disk0 (internal):</span><br><span class="line"><span class="meta"> #</span>: TYPE NAME SIZE IDENTIFIER</span><br><span class="line"> 0: GUID_partition_scheme 500.3 GB disk0</span><br><span class="line"> 1: EFI EFI 314.6 MB disk0s1</span><br><span class="line"> 2: Apple_APFS Container disk1 500.0 GB disk0s2</span><br><span class="line"></span><br><span class="line">/dev/disk1 (synthesized):</span><br><span class="line"><span class="meta"> #</span>: TYPE NAME SIZE IDENTIFIER</span><br><span class="line"> 0: APFS Container Scheme - +500.0 GB disk1</span><br><span class="line"> Physical Store disk0s2</span><br><span class="line"> 1: APFS Volume Macintosh HD 215.0 GB disk1s1</span><br><span class="line"> 2: APFS Volume Preboot 24.2 MB disk1s2</span><br><span class="line"> 3: APFS Volume Recovery 517.8 MB disk1s3</span><br><span class="line"> 4: APFS Volume VM 3.2 GB disk1s4</span><br><span class="line"></span><br><span class="line">/dev/disk2 (external, physical):</span><br><span class="line"><span class="meta"> #</span>: TYPE NAME SIZE IDENTIFIER</span><br><span class="line"> 0: FDisk_partition_scheme *7.9 GB disk2</span><br><span class="line"> 1: DOS_FAT_32 UNTITLED 7.9 GB disk2s1</span><br><span class="line"></span><br><span class="line">/dev/disk3 (disk image):</span><br><span class="line"><span class="meta"> #</span>: TYPE NAME SIZE IDENTIFIER</span><br><span class="line"> 0: GUID_partition_scheme +314.8 GB disk3</span><br><span class="line"> 1: EFI EFI 209.7 MB disk3s1</span><br><span class="line"> 2: Apple_HFS 时间机器备份 314.5 GB disk3s2</span><br></pre></td></tr></table></figure><p>这样的就卸载disk2的所有分区,例如disk2s1,有多的都要卸载。</p><ul><li>命令:<code>diskutil unmount /dev/disk2s1</code></li></ul><h2 id="烧录"><a href="#烧录" class="headerlink" title="烧录"></a>烧录</h2><p>前提是准备好你的镜像iso文件。</p><ul><li>命令:<code>sudo dd bs=4m if=ubuntu-16.04.4-lxqt-aarch64-raspberrypi3b-raspberrypi3b-plus-20180428-chainsx.img of=/dev/rdisk2</code></li><li>注意,目标磁盘为原始磁盘rdisk*,绝对不要把数字写错。</li></ul><p>完成后会提示</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">750+0 records in </span><br><span class="line">750+0 records out</span><br><span class="line">3145728000 bytes transferred in 279.701624 secs (11246728 bytes/sec)</span><br></pre></td></tr></table></figure><h2 id="卸载磁盘"><a href="#卸载磁盘" class="headerlink" title="卸载磁盘"></a>卸载磁盘</h2><ul><li>命令:<code>diskutil unmountDisk /dev/disk2</code></li><li>完成</li></ul>]]></content>
<summary type="html">
<h1 id="Mac-OS下SD卡烧录镜像"><a href="#Mac-OS下SD卡烧录镜像" class="headerlink" title="Mac OS下SD卡烧录镜像"></a>Mac OS下SD卡烧录镜像</h1><blockquote>
<p>经常换镜像,做个笔
</summary>
<category term="烧录" scheme="https://ranxb.cn/categories/%E7%83%A7%E5%BD%95/"/>
<category term="烧录" scheme="https://ranxb.cn/tags/%E7%83%A7%E5%BD%95/"/>
<category term="SD卡" scheme="https://ranxb.cn/tags/SD%E5%8D%A1/"/>
<category term="Mac" scheme="https://ranxb.cn/tags/Mac/"/>
</entry>
<entry>
<title>台湾科技大学自动查询审核结果的脚本</title>
<link href="https://ranxb.cn/2018/05/07/%E5%8F%B0%E6%B9%BE%E7%A7%91%E6%8A%80%E5%A4%A7%E5%AD%A6%E8%87%AA%E5%8A%A8%E6%9F%A5%E8%AF%A2%E5%AE%A1%E6%A0%B8%E7%BB%93%E6%9E%9C%E7%9A%84%E8%84%9A%E6%9C%AC/"/>
<id>https://ranxb.cn/2018/05/07/台湾科技大学自动查询审核结果的脚本/</id>
<published>2018-05-07T07:49:45.000Z</published>
<updated>2018-05-07T07:55:00.771Z</updated>
<content type="html"><![CDATA[<h1 id="台湾科技大学自动查询审核结果的脚本"><a href="#台湾科技大学自动查询审核结果的脚本" class="headerlink" title="台湾科技大学自动查询审核结果的脚本"></a>台湾科技大学自动查询审核结果的脚本</h1><blockquote><pre><code>要去交流了,天天随时随地看结果太累了,写了个简单的脚本,如果发生变动的话会发邮件给我,代码如下。 </code></pre></blockquote><p>Github地址: <a href="https://github.com/ranxuebin/NTUST_Exchange-Program-Auto-Chack-Result" target="_blank" rel="noopener">https://github.com/ranxuebin/NTUST_Exchange-Program-Auto-Chack-Result</a></p><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="a.png" alt title> </div> <div class="image-caption"></div> </figure><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> time</span><br><span class="line"><span class="keyword">import</span> requests</span><br><span class="line"><span class="keyword">import</span> smtplib</span><br><span class="line"><span class="keyword">from</span> email.mime.text <span class="keyword">import</span> MIMEText</span><br><span class="line"><span class="keyword">from</span> email.header <span class="keyword">import</span> Header</span><br><span class="line"></span><br><span class="line"><span class="keyword">from</span> bs4 <span class="keyword">import</span> BeautifulSoup</span><br><span class="line"></span><br><span class="line"><span class="keyword">while</span> <span class="number">1</span>:</span><br><span class="line"> loginurl = <span class="string">'http://stu88.ntust.edu.tw/inboundchina/stu/login.do'</span></span><br><span class="line"> homeurl = <span class="string">"http://stu88.ntust.edu.tw/inboundchina/stu/review.result"</span></span><br><span class="line"></span><br><span class="line"> headers = {</span><br><span class="line"> <span class="string">"User-Agent"</span>: <span class="string">"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1 Safari/605.1.15"</span>,</span><br><span class="line"> <span class="string">"Accept"</span>: <span class="string">"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"</span>,</span><br><span class="line"> <span class="string">"Accept-Encoding"</span>: <span class="string">"gzip, deflate"</span>,</span><br><span class="line"> <span class="string">"Host"</span>: <span class="string">'stu88.ntust.edu.tw'</span>,</span><br><span class="line"> <span class="string">"Accept-Language"</span>: <span class="string">'zh-cn'</span>,</span><br><span class="line"> <span class="string">"Content-Type"</span>: <span class="string">'application/x-www-form-urlencoded'</span>,</span><br><span class="line"> <span class="string">'Referer'</span>: <span class="string">'http://stu88.ntust.edu.tw/inboundchina/stu'</span>,</span><br><span class="line"> <span class="string">"Upgrade-Insecure-Requests"</span>: <span class="string">"1"</span>,</span><br><span class="line"> <span class="string">"Origin"</span>: <span class="string">'http://jwk.lzu.edu.cn'</span>,</span><br><span class="line"> <span class="string">"DNT"</span>: <span class="string">'1'</span>,</span><br><span class="line"> <span class="string">"Connection"</span>: <span class="string">'keep-alive'</span></span><br><span class="line"></span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> session = requests.Session()</span><br><span class="line"></span><br><span class="line"> payload = {</span><br><span class="line"> <span class="string">'email'</span>: <span class="string">'ranxuebin@ranxb.cn'</span>,</span><br><span class="line"> <span class="string">'password'</span>: <span class="string">'*******'</span>,</span><br><span class="line"> <span class="string">'captcha'</span>: <span class="string">''</span></span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">send_mail</span><span class="params">(sub, text)</span>:</span></span><br><span class="line"> <span class="comment"># 第三方 SMTP 服务</span></span><br><span class="line"> mail_host = <span class="string">"smtp.lzu.edu.cn"</span> <span class="comment"># 设置服务器</span></span><br><span class="line"> mail_user = <span class="string">"*****"</span> <span class="comment"># 用户名</span></span><br><span class="line"> mail_pass = <span class="string">"*****"</span> <span class="comment"># 口令</span></span><br><span class="line"></span><br><span class="line"> sender = <span class="string">'ranxb16@lzu.cn'</span></span><br><span class="line"> <span class="comment"># receivers = ['ranxuebin@ranxb.cn'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱</span></span><br><span class="line"> receivers = <span class="string">','</span>.join([<span class="string">'ranxuebin@ranxb.cn'</span>])</span><br><span class="line"> message = MIMEText(text, <span class="string">'plain'</span>, <span class="string">'utf-8'</span>)</span><br><span class="line"> message[<span class="string">'From'</span>] = Header(<span class="string">"自动发送"</span>, <span class="string">'utf-8'</span>)</span><br><span class="line"> message[<span class="string">'To'</span>] = Header(<span class="string">"Rankin"</span>, <span class="string">'utf-8'</span>)</span><br><span class="line"></span><br><span class="line"> subject = sub</span><br><span class="line"> message[<span class="string">'Subject'</span>] = Header(subject, <span class="string">'utf-8'</span>)</span><br><span class="line"> <span class="keyword">try</span>:</span><br><span class="line"> smtpObj = smtplib.SMTP()</span><br><span class="line"> smtpObj.connect(mail_host, <span class="number">25</span>) <span class="comment"># 25 为 SMTP 端口号</span></span><br><span class="line"> smtpObj.login(mail_user, mail_pass)</span><br><span class="line"> smtpObj.sendmail(sender, receivers, message.as_string())</span><br><span class="line"> print(<span class="string">"邮件发送成功"</span>)</span><br><span class="line"> <span class="keyword">except</span> smtplib.SMTPException:</span><br><span class="line"> print(<span class="string">"send mail error!"</span>)</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> <span class="keyword">try</span>:</span><br><span class="line"> response_login = session.post(loginurl, headers=headers, data=payload)</span><br><span class="line"> response_home = session.get(homeurl, headers=headers)</span><br><span class="line"></span><br><span class="line"> <span class="keyword">except</span>:</span><br><span class="line"> print(<span class="string">"login error!"</span>)</span><br><span class="line"> result = BeautifulSoup(response_home.text, <span class="string">"html.parser"</span>)</span><br><span class="line"> result = result.find(class_=<span class="string">"alert alert-info"</span>)</span><br><span class="line"> print(time.strftime(<span class="string">"%a %b %d %H:%M:%S %Y"</span>, time.localtime()) + <span class="string">" "</span> + result.span.string)</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> result.span.string != <span class="string">'Pass the first stage'</span>:</span><br><span class="line"> send_mail(<span class="string">"台科大信息"</span>, result.span.string)</span><br><span class="line"></span><br><span class="line"> time.sleep(<span class="number">600</span>)</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<h1 id="台湾科技大学自动查询审核结果的脚本"><a href="#台湾科技大学自动查询审核结果的脚本" class="headerlink" title="台湾科技大学自动查询审核结果的脚本"></a>台湾科技大学自动查询审核结果的脚本</h1><blockquote>
</summary>
<category term="脚本" scheme="https://ranxb.cn/categories/%E8%84%9A%E6%9C%AC/"/>
<category term="脚本" scheme="https://ranxb.cn/tags/%E8%84%9A%E6%9C%AC/"/>
<category term="台科" scheme="https://ranxb.cn/tags/%E5%8F%B0%E7%A7%91/"/>
</entry>
<entry>
<title>无显示器条件下查询树莓派IP的方法</title>
<link href="https://ranxb.cn/2018/02/14/%E6%97%A0%E6%98%BE%E7%A4%BA%E5%99%A8%E6%9D%A1%E4%BB%B6%E4%B8%8B%E6%9F%A5%E8%AF%A2%E6%A0%91%E8%8E%93%E6%B4%BEIP%E7%9A%84%E6%96%B9%E6%B3%95/"/>
<id>https://ranxb.cn/2018/02/14/无显示器条件下查询树莓派IP的方法/</id>
<published>2018-02-14T04:18:09.000Z</published>
<updated>2018-02-14T04:19:48.296Z</updated>
<content type="html"><![CDATA[<h1 id="无显示器条件下查询树莓派IP的方法"><a href="#无显示器条件下查询树莓派IP的方法" class="headerlink" title="无显示器条件下查询树莓派IP的方法"></a>无显示器条件下查询树莓派IP的方法</h1><blockquote><p>方法都根据树莓派的网卡物理地址为<code>b8:27:eb:</code>开头 。因此有以下自动化方法</p></blockquote><h2 id="Mac下打开网络实用工具"><a href="#Mac下打开网络实用工具" class="headerlink" title="Mac下打开网络实用工具"></a>Mac下打开网络实用工具</h2><p>直接查询Netstat下的路由表找到树莓派的物理地址对应的就是树莓派的IP地址。</p><h2 id="Shell脚本"><a href="#Shell脚本" class="headerlink" title="Shell脚本"></a>Shell脚本</h2><blockquote><p>整个代码逻辑为依次pingIP地址,之后通过arp映射找到对应的物理地址,取到对应的IP。</p></blockquote><p>代码如下</p><pre><code>clearecho "程序运行中..."ipLine="`ifconfig | grep "inet 192.168" `"preIp=${ipLine:5:11}echo "程序默认将在$preIp 2 - $preIp 255范围内进行扫描"echo "但这将花费较多时间,请问是否进行手动设置?(y/n)"read choiceif test $choice = "y" then echo -n "请输入起始位置(2-255):" read i echo -n "请输入结束位置($i-255):" read j echo "下面将对 $i 到 $j 范围进行扫描" else i=2 j=255 echo "下面将直接对2-255整个范围进行扫描"fiwhile test $i -ne $jdo echo "正在检测ip的连接情况,请耐心等待" ip=$preIp$i echo "正在ping端口$ip ..." "`ping -t 1 -q $ip `" let i=i+1 cleardoneclearecho "所有ip检测完毕,正在计算结果..."result="`arp -a | grep "b8:27:eb:" ` "resultIp=${result:3:14}resultMac=${result:19:17}clearecho "已经得到结果:"echo "您的树莓派Mac地址为:$resultMac"echo " 当前连接的IP为:$resultIp"echoecho "程序结束"</code></pre>]]></content>
<summary type="html">
<h1 id="无显示器条件下查询树莓派IP的方法"><a href="#无显示器条件下查询树莓派IP的方法" class="headerlink" title="无显示器条件下查询树莓派IP的方法"></a>无显示器条件下查询树莓派IP的方法</h1><blockquote>
</summary>
<category term="树莓派" scheme="https://ranxb.cn/categories/%E6%A0%91%E8%8E%93%E6%B4%BE/"/>
<category term="树莓派" scheme="https://ranxb.cn/tags/%E6%A0%91%E8%8E%93%E6%B4%BE/"/>
<category term="Unix" scheme="https://ranxb.cn/tags/Unix/"/>
</entry>
<entry>
<title>Ubuntu上启动ftp服务</title>
<link href="https://ranxb.cn/2018/02/07/Ubuntu%E4%B8%8A%E5%90%AF%E5%8A%A8ftp%E6%9C%8D%E5%8A%A1/"/>
<id>https://ranxb.cn/2018/02/07/Ubuntu上启动ftp服务/</id>
<published>2018-02-07T13:13:49.000Z</published>
<updated>2018-02-07T13:16:20.832Z</updated>
<content type="html"><![CDATA[<h1 id="Ubuntu上启动ftp服务"><a href="#Ubuntu上启动ftp服务" class="headerlink" title="Ubuntu上启动ftp服务"></a>Ubuntu上启动ftp服务</h1><h2 id="安装并启动VSFTPD"><a href="#安装并启动VSFTPD" class="headerlink" title="安装并启动VSFTPD"></a>安装并启动VSFTPD</h2><ul><li>安装VSFTPD<br><code>sudo apt-get install vsftpd -y</code></li><li>启动VSFTPD(会自动启动若未启动)<br><code>sudo systemctl start vsftpd.service</code></li><li>检测端口,判断是否启动。<br><code>sudo netstat -nltp | grep</code> </li></ul><h2 id="配置用户访问目录"><a href="#配置用户访问目录" class="headerlink" title="配置用户访问目录"></a>配置用户访问目录</h2><ul><li>新建主目录</li><li>新建用户并设置密码<br><code>sudo useradd -d /home/uftp -s /bin/bash uftp</code><br><code>sudo passwd uftp</code><br><code>sudo rm /etc/pam.d/vsftpd</code>(这里删除该配置文件,因为会导致使用用户名登录FTP失败)</li><li>限制用户只能通过FTP访问<br><code>sudo usermod -s /sbin/nologin uftp</code></li><li><p>修改VSFTPD配置<br><code>sudo chmod a+w /etc/vsftpd.conf</code><br>下面修改<code>/etc/vsftpd.conf</code>文件中的配置(添加到最下面)</p><pre><code># 限制用户对主目录以外目录访问chroot_local_user=YES# 指定一个 userlist 存放允许访问 ftp 的用户列表userlist_deny=NOuserlist_enable=YES# 记录允许访问 ftp 用户列表userlist_file=/etc/vsftpd.user_list# 不配置可能导致莫名的530问题seccomp_sandbox=NO# 允许文件上传write_enable=YES# 使用utf8编码utf8_filesystem=YES</code></pre><p>新建文件<code>/etc/vsftpd.user_list</code>用于存放允许访问FTP的用户<br><code>sudo touch /etc/vsftpd.user_list</code><br><code>sudo chmod a+w /etc/vsftpd.user_list</code><br>并修改,加入刚刚创建的用户</p></li><li><p>设置访问限权<br>设置主目录访问权限(只读):<code>sudo chmod a-w /home/uftp</code><br>设置公共目录,设置可读写:<code>sudo mkdir /home/uftp/public && sudo chmod 777 -R /home/uftp/public</code><br>重启VSFTPD服务:<code>sudo systemctl restart vsftpd.service</code></p></li></ul><h2 id="完"><a href="#完" class="headerlink" title="完"></a>完</h2>]]></content>
<summary type="html">
<h1 id="Ubuntu上启动ftp服务"><a href="#Ubuntu上启动ftp服务" class="headerlink" title="Ubuntu上启动ftp服务"></a>Ubuntu上启动ftp服务</h1><h2 id="安装并启动VSFTPD"><a h
</summary>
<category term="Linux" scheme="https://ranxb.cn/categories/Linux/"/>
<category term="Linux" scheme="https://ranxb.cn/tags/Linux/"/>
<category term="FTP" scheme="https://ranxb.cn/tags/FTP/"/>
</entry>
</feed>