-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
1095 lines (695 loc) · 89.3 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
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
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta name="baidu-site-verification" content="code-Wt4YFcCcEL" />
<meta name="360-site-verification" content="b0ecc75b7fae292b9280ce86b23e2ede" />
<title>
我是 Leo Zhao
</title>
<link rel="shortcut icon" href="/favicon.ico">
<link rel="stylesheet" href="/css/style.css">
<link rel="stylesheet" href="/fancybox/jquery.fancybox.min.css">
<script src="/js/pace.min.js"></script>
<meta name="generator" content="Hexo 5.4.0"><link rel="alternate" href="/atom.xml" title="我是 Leo Zhao" type="application/atom+xml">
</head>
<body>
<main class="content">
<section class="jumbotron">
<div class="video">
<div class="video-frame">
<img src="/images/ocean/overlay-hero.png" alt="Decorative image frame">
</div>
<div class="video-media">
<video playsinline="" autoplay="" loop="" muted="" data-autoplay="" poster="/images/ocean/ocean.png"
x5-video-player-type="h5">
<source src="/images/ocean/ocean.mp4" type="video/mp4">
<source src="/images/ocean/ocean.ogv" type="video/ogg">
<source src="/images/ocean/ocean.webm" type="video/webm">
<p>Your user agent does not support the HTML5 Video element.</p>
</video>
<div class="video-overlay"></div>
</div>
<div class="video-inner text-center text-white">
<h1><a href="/">我是 Leo Zhao</a></h1>
<p>编程 | 摄影 | 排球</p>
<div><img src="/images/Tomortec.svg" class="brand" alt="我是 Leo Zhao"></div>
</div>
<div class="video-learn-more">
<a class="anchor" href="#landingpage"><i class="fe fe-mouse"></i></a>
</div>
</div>
</section>
<div id="landingpage">
<section class="outer">
<article class="articles">
<h1 class="page-type-title"></h1>
<article id="post-prompt-engineering" class="article article-type-post" itemscope
itemprop="blogPost" data-scroll-reveal>
<div class="article-inner">
<header class="article-header">
<h2 itemprop="name">
<a class="article-title" href="/zh-cn/AI/prompt-engineering.html">提示词工程</a>
</h2>
</header>
<div class="article-meta">
<a href="/zh-cn/AI/prompt-engineering.html" class="article-date">
<time datetime="2022-10-22T07:04:52.000Z" itemprop="datePublished">2022-10-22</time>
</a>
<div class="article-category">
<a class="article-category-link" href="/categories/AI/">AI</a>
</div>
</div>
<div class="article-entry" itemprop="articleBody">
<h1 id="提示词工程"><a href="#提示词工程" class="headerlink" title="提示词工程"></a>提示词工程</h1><p><strong>提示词工程</strong>是AI领域的一个概念,尤其常用于 <em>NLP领域</em>。</p>
</div>
<footer class="article-footer">
<a data-url="https://leolovedairy.life/zh-cn/AI/prompt-engineering.html" data-id="clf6sj9ze0000iofy5a8j8um8" class="article-share-link">
Share
</a>
<ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/AI/" rel="tag">AI</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/NLP/" rel="tag">NLP</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/Prompt-Engineering/" rel="tag">Prompt Engineering</a></li></ul>
</footer>
</div>
</article>
<article id="post-the-launch-of-ZhuJian" class="article article-type-post" itemscope
itemprop="blogPost" data-scroll-reveal>
<div class="article-inner">
<header class="article-header">
<h2 itemprop="name">
<a class="article-title" href="/zh-cn/App/ZhuJian/the-launch-of-ZhuJian.html">“拾句” 来了😉</a>
</h2>
</header>
<div class="article-meta">
<a href="/zh-cn/App/ZhuJian/the-launch-of-ZhuJian.html" class="article-date">
<time datetime="2022-06-29T04:09:49.000Z" itemprop="datePublished">2022-06-29</time>
</a>
<div class="article-category">
<a class="article-category-link" href="/categories/App/">App</a> / <a class="article-category-link" href="/categories/App/ZhuJian/">ZhuJian</a>
</div>
</div>
<div class="article-entry" itemprop="articleBody">
<h3 id="posted-by-LeoZhao"><a href="#posted-by-LeoZhao" class="headerlink" title="posted by LeoZhao"></a>posted by LeoZhao</h3><br>
<p>我发现我已经好久没有发过博客了😂,上一次发还是在之前发的 </p>
<p>差不多半年前写的 <a target="_blank" rel="noopener" href="https://github.com/Tomortec/HexoPostEditor">HexoPostEditor</a> (拿来写博客的)甚至都没用过🥲,正好,这次趁着“拾句”正式发布赶紧用一用,不然要被嘎子偷走了 </p>
<p>好吧好吧,这篇其实主要是随便谈谈“拾句”开发时的一些经过的,就当是记录一下啦 </p>
<p><img src="/zh-cn/App/ZhuJian/the-launch-of-ZhuJian/zhujian-0.jpeg" alt="开篇"></p>
<p><strong>为什么要做“拾句”?</strong> </p>
<p>就像我在很多地方说的那样,就是有一天我“难得”看一看书,想到要写一些东西下来,但是因为是在床上,而且舍友们都已经睡了,我不太好拿笔记。 <del>万一被发现偷偷卷了怎么办(bushi)😆</del> 其实我没有小桌子确实不好记,而且又(濑)啊。正好那段时间 Eutropension 已经大致完成了,比较闲,所以想着要不自己做一个算了,反正也不算很难。 </p>
<p><img src="/zh-cn/App/ZhuJian/the-launch-of-ZhuJian/zhujian-1.jpg" alt="灵感"></p>
<p>最后一边划水 <del>(传统艺能)</del> 一边做,一个星期不到就大概全部做完了,自己想要的功能都有了,包括记录、扫描、大纲、小组件这些。可是啊,人总是一个得寸进尺的生物。我想着都做到这里了,要不顺手发布一下吧👍,不然888都浪费了,哼。 </p>
<p>然后我发现卡住我的不是什么技术难题,而是 <em>设计</em> 🤣 (啊,是设计,那个我又爱又烦的东西)。我年纪轻轻就在取名字、选择图标和背景图片上花了32个小时, <del>你敢想吗</del> 。我总觉得我对这些东西有种执念,他们必须要有一些故事在里面,再不济也应该有呼应、有深意,而不是拍拍脑瓜子就闭眼上网找现成的东西。 </p>
<p>先是取名字,其实仔细看的话会发现“拾句”的英文是 ZhuJian (竹简),我一开始创建项目的时候想的就是这个名字,因为当时我就想着要融入一些国风元素。古人在竹简上记录嘛,而且竹简上记录的东西有限,也更加契合“记录句子”的初衷。不久之后我猛然醒悟,我走的可是简约风啊( <del>就是懒得画,懒得弄花里胡哨的东西</del> ),文不对题了属于是,所以必须要改名。那,起啥?「句子记录器?」「呸,恶心🤢,听起来就像流氓软件一样,太没有B格了吧」「淘句(我写这篇时乱起的,我怎么可能那么没品位,bushi)?」「🤮」「我去汉典找找吧」「🧻👄,行」OKOK,结果,我上汉典找到的都B过头了🤣,不接地气,听起来就很拗口。“星辰俯手拾”。哦?“拾”这字就OK啊,难不成就叫“拾句”,拾取世间最美的句子,拾取长河漫漫星辰。hng hňg,这不就来了么。 </p>
<p>接下来就是图标了。那肯定不能就“拾句”两个字 pia 在上面啊,又不是 Eutropension(勿cue)。「句」不正好可以用「。」表示吗,这样就很容易做出单字的主体突出的设计了。 于是,我做出了下面三种 Icon(有一说一,MasterGo 真的好用还良心),但是,选择困难症犯了啊,该选哪一种呢。</p>
<p><img src="/zh-cn/App/ZhuJian/the-launch-of-ZhuJian/zhujian-icons-script.jpeg" alt="图标设计稿"></p>
<p>而至于背景图片,我通常的做法是上 Pexels 或者 Pixabay 找一些好看的图片放上去,就比如 MyWebnets,可是,这样做似乎不太好,毕竟我走的是简约风啊,在后面放一个花里胡哨的背景不就像是一张手纸扔进了水沟里面吗,不行不行。「嗯,要不用纯色背景?」「诶,好像还可以,但是特色呢?」我突然想到可以用传统的中国画作啊,前段时间听关大洲老师的作品觉得自己的血脉得到了共鸣。作为炎黄子孙,我有义务将中华传统文化融入现代生活中,向世人展示中国文化的魅力!👍我在古代文人画中挑选,选出了《江山秋色图》《清明上河图》《渔村小雪图》《写生蛱蝶图》,分别对应记录句子时淡雅、入世、恬静、活泼的心境。我希望用户能为这些背景所吸引,更加深入地了解其背后的故事,了解博大精深的中华文化。(为了这些作品能够更好地符合 App 的风格,我还对其进行了一些加工,若有不当,请指正,必将感激不尽) </p>
<p><img src="/zh-cn/App/ZhuJian/the-launch-of-ZhuJian/zhujian-2.jpg" alt="剪影"> </p>
<p>至此,“拾句”的初代版本已经完成,前前后后经过了一个星期不到。我兴致勃勃地跑去提交, <strong>啪</strong> ,审核团队反手给了我一个 <del>大逼斗</del> ,噢,原来是我忘在 5.5 上测试了 😇,最下面的那个记录栏已经超出了边界。但是一开始退回的时候我不到啊,哒哒哒嘀哒哒,他就给我扔个网址,我还以为是啥王者修炼秘籍,结果一看新手训练营🤪。我还以为是当前卡片位移强调有点反人类了,就马上找他们交 (dui) 谈 (xian) 。🐒,好家伙,他们发过来了一个截图,直接给我整无语了——小丑🤡竟是我自己~。Nice,改完就成功上架了。 </p>
<p>故事,应该就要结束了。<br>如果我没有做 ASO 或者广告的话,“拾句”就只有我一个人用,我想要的功能已经完备,在我的设备上也十分流畅,我不需要再做任何更新了。 </p>
<p><img src="/zh-cn/App/ZhuJian/the-launch-of-ZhuJian/zhujian-3.jpg" alt="杂谈"></p>
<p>可是,这是我么。这不是 LeoZhao </p>
</div>
<footer class="article-footer">
<a data-url="https://leolovedairy.life/zh-cn/App/ZhuJian/the-launch-of-ZhuJian.html" data-id="cl7d0353e0019adg34uf0axbu" class="article-share-link">
Share
</a>
<ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/App/" rel="tag">App</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/Impression/" rel="tag">Impression</a></li></ul>
</footer>
</div>
</article>
<article id="post-innovation-insights-2" class="article article-type-post" itemscope
itemprop="blogPost" data-scroll-reveal>
<div class="article-inner">
<header class="article-header">
<h2 itemprop="name">
<a class="article-title" href="/zh-cn/Insights/2/innovation-insights-2.html">灵感——发展事业首先要选对方向</a>
</h2>
</header>
<div class="article-meta">
<a href="/zh-cn/Insights/2/innovation-insights-2.html" class="article-date">
<time datetime="2021-12-02T08:05:02.000Z" itemprop="datePublished">2021-12-02</time>
</a>
<div class="article-category">
<a class="article-category-link" href="/categories/Insights/">Insights</a> / <a class="article-category-link" href="/categories/Insights/2/">2</a>
</div>
</div>
<div class="article-entry" itemprop="articleBody">
<h3 id="posted-by-LeoZhao"><a href="#posted-by-LeoZhao" class="headerlink" title="posted by LeoZhao"></a>posted by LeoZhao</h3><br>
<h2 id="——听雷鸣老师讲座有感"><a href="#——听雷鸣老师讲座有感" class="headerlink" title="——听雷鸣老师讲座有感"></a>——听雷鸣老师讲座有感</h2><p>今天听了雷鸣老师带给我们的精彩讲座,我明白了选对方向的重要性。</p>
<p>对于创业者来说,方向有两个方面。</p>
<p>第一,选对创新领域 </p>
<p> 雷鸣老师提出,选择比努力更重要,他在2000年即进入了互联网市场,而后进军人工智能领域,这些市场在后来以及可预⻅的未来的表现都是良好的,有前景的。“磨刀不误砍柴工”,我们创新创业者应该大胆构想新的市场,然后小心求证和分析该市场的前景,认真评估该市场的表现、当前的痛点、未来发展的奇点,选对创新领域再进入,这样,更有利于成⻓发展。“欲速不达”,匆匆进入一个领域,急着开工、赚钱,诚然,抢先进入市场有利于壮大在该领域中的势力,使得自己在面对后来进入市场的其他人时更具有优势。但是,无疑,这种做法是冒险的,当你匆匆进入市场时,你有认真考虑过可能的替代品产业侵占你的市场吗?考虑过有更大势力的寡头进入市场,替代你的地位或者兼并你吗?考虑过市场发展的前景和萎缩的可能性吗?等你进入一个领域,却发现其市场有限,不利于继续发展时,是放弃之前高昂的沉没成本,吸取教训,重新开始,还是固守自己的观点,不思变通,加大投入?无论是前者还是后者,都会投入大量资金和机会成本,却收效甚微,不及其他可能的领域有效率。所以,选好正确的创新领域是前提。</p>
<p> 当然,我们也可以采取一个折中的措施,那就是加快效率分析市场,在有极大的把握确认其市场的规模、发展潜力、消费能力、竞争者情况等各个条件都良好时,不要拖泥带水、犹豫不定,这说起来简单,但是有许多创业者难以做到。</p>
<p>第二,选对知识领域 </p>
<p> 雷鸣老师在北大获得计算机本硕学位,随后进入斯坦福商学院获得MBA学位,这让我想到了最近看的《乔布斯传》里面说到的乔布斯的目标:“然后我看到了我的偶像一,宝丽来的创始人埃 德温•兰德(Edwin Land)说的一些话,是关于既擅⻓人文叉能驾驭科学的人的重要性的,于是我决定,我要成为这样的人。〞兼容自然科学和社会科学,我对此产生了极大的共鸣。对于创业者而言,自然科学是基础,是“原始积累”可能的来源,而对社会科学的理解之深浅和新旧则影响着事业 能走的远近。这一点在盖茨、乔布斯、⻢斯克等人的身上体现得淋漓尽致。</p>
</div>
<footer class="article-footer">
<a data-url="https://leolovedairy.life/zh-cn/Insights/2/innovation-insights-2.html" data-id="cl7d0353d0016adg36v73efrz" class="article-share-link">
Share
</a>
<ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/Innovation/" rel="tag">Innovation</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/Insights/" rel="tag">Insights</a></li></ul>
</footer>
</div>
</article>
<article id="post-innovation-insights-1" class="article article-type-post" itemscope
itemprop="blogPost" data-scroll-reveal>
<div class="article-inner">
<header class="article-header">
<h2 itemprop="name">
<a class="article-title" href="/zh-cn/Insights/1/innovation-insights-1.html">灵感——伟大事业应从现在开始</a>
</h2>
</header>
<div class="article-meta">
<a href="/zh-cn/Insights/1/innovation-insights-1.html" class="article-date">
<time datetime="2021-12-02T07:30:33.000Z" itemprop="datePublished">2021-12-02</time>
</a>
<div class="article-category">
<a class="article-category-link" href="/categories/Insights/">Insights</a> / <a class="article-category-link" href="/categories/Insights/1/">1</a>
</div>
</div>
<div class="article-entry" itemprop="articleBody">
<h3 id="posted-by-LeoZhao"><a href="#posted-by-LeoZhao" class="headerlink" title="posted by LeoZhao"></a>posted by LeoZhao</h3><br>
<h2 id="——听陈善广老师讲座有感"><a href="#——听陈善广老师讲座有感" class="headerlink" title="——听陈善广老师讲座有感"></a>——听陈善广老师讲座有感</h2><p>古人云:“千里之行,始于足下。”可我感觉我总是做不到这一点。我有一个梦,有一个宏大 的理想,有描摹了千百遍的蓝图,但是,为什么,我总是败在了那第一步——“何时开始?”。</p>
<p>陈善广老师的讲座带给我的东⻄,对我而言,不仅仅是载人航天工程的科普和对我国载人航天工程事业的展望,更是一种激励和指引。</p>
<p>陈老师给我们讲述了他从平凡走向中国载人航天办公室副总设计师的经历,我不禁为他做出 的伟大事业而感到热血沸腾,期望着有朝一日我也能像他一样,为社会做出自己的贡献,就像陈老 师说的一样——“与社会同频,与祖国同心,与时代同行”。我开始意识到,伟大事业不是一蹴而就 的,需要从平凡开始,从一点一滴开始,从当下开始。于是,我想到,要创新创业的我们当立足实 际,从现在开始着手准备,要在日常学习中锻炼自己的创新能力,要在生活和社会中寻找灵感,要 勇于启动自己想了很久的项目,迈出第一步。</p>
<p>陈老师引用了习总书记的一句话——“伟大的事业都始于梦想,伟大的事业都基于创新,伟 大的事业都成于实干”,听到这句话时,我深有感触,这不就是我们要创新创业的人应该具有的品质 和行动吗?我们都要有创新创业的梦想,怀着一分⻜向星辰大海的理想;我们都要有创新的意识, 不断自我革新,寻找新思路、新方法,开拓新领域;我们更要脚踏实地,立足于实践之中,“用汗水 浇灌收获,以实干笃定前行”。对我而言,更应该从现在开始,从今打牢伟大事业的地基。</p>
<p>最后,我谨以陈老师送给我们的一句话结尾,“登上高处,不是为了被整个世界看到;而是 为了看到整个世界。”</p>
</div>
<footer class="article-footer">
<a data-url="https://leolovedairy.life/zh-cn/Insights/1/innovation-insights-1.html" data-id="cl7d035390009adg3f1m059t3" class="article-share-link">
Share
</a>
<ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/Innovation/" rel="tag">Innovation</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/Insights/" rel="tag">Insights</a></li></ul>
</footer>
</div>
</article>
<article id="post-innovation-insights-0" class="article article-type-post" itemscope
itemprop="blogPost" data-scroll-reveal>
<div class="article-inner">
<header class="article-header">
<h2 itemprop="name">
<a class="article-title" href="/zh-cn/Insights/0/innovation-insights-0.html">灵感——创新需要有工匠精神</a>
</h2>
</header>
<div class="article-meta">
<a href="/zh-cn/Insights/0/innovation-insights-0.html" class="article-date">
<time datetime="2021-11-17T15:32:21.000Z" itemprop="datePublished">2021-11-17</time>
</a>
<div class="article-category">
<a class="article-category-link" href="/categories/Insights/">Insights</a> / <a class="article-category-link" href="/categories/Insights/0/">0</a>
</div>
</div>
<div class="article-entry" itemprop="articleBody">
<h3 id="posted-by-LeoZhao"><a href="#posted-by-LeoZhao" class="headerlink" title="posted by LeoZhao"></a>posted by LeoZhao</h3><br>
<h2 id="——听《柔性电子产业和技术》的感想"><a href="#——听《柔性电子产业和技术》的感想" class="headerlink" title="——听《柔性电子产业和技术》的感想"></a>——听《柔性电子产业和技术》的感想</h2><p>这是一个浮躁的时代,人们追求名与利的步伐在不知不觉中加快。在此心理的驱使下,计算机、金融等能有更大概率赚到“热钱”的行业涌入了大量形形色色的人,他们有的并不掌握知识,却希望能在一朝一夕开发新的次世代技术;他们有的借来大额资金,希望能豪赌一把,鲤跃龙门。</p>
<p>我曾是这样的人,在自己没有实力的情况下,幻想能进入一些热门领域,通过极短的时间,便能创造一番事业。现在回想起来,紧跟潮流、风口固然没错,因为一件脱离时代的产品或技术是注定失败的。但利用当下的新事物、寻找新方向,并不意味着一味模仿别人的成功,不意味着将当下的新事物做“一加一小于二”的算法。</p>
<p>创新,是不需要要在一挥一蹴间完成的,而是应秉持工匠精神。创新,需要沉住气,认真分析未来、总结过去;需要关注基础、掌握原理知识;需要不断打磨、优化进取。</p>
<p>雷霆老师的课,让我明白,我原来那种梦想快速创新的想法是如何的不现实,创新是积淀出来的,不是做一两个实验、看一两本书就能实现的。同时,我的视野也豁然开朗,创新,并不意味着事事都得与计算机挂钩,一些基础领域、为人所不熟知的领域的创新或许会更加有力。</p>
</div>
<footer class="article-footer">
<a data-url="https://leolovedairy.life/zh-cn/Insights/0/innovation-insights-0.html" data-id="cl7d035390008adg3hh7o68u9" class="article-share-link">
Share
</a>
<ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/Innovation/" rel="tag">Innovation</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/Insights/" rel="tag">Insights</a></li></ul>
</footer>
</div>
</article>
<article id="post-company-law" class="article article-type-post" itemscope
itemprop="blogPost" data-scroll-reveal>
<div class="article-inner">
<header class="article-header">
<h2 itemprop="name">
<a class="article-title" href="/zh-cn/Enterprise/Laws/company-law.html">公司法解读</a>
</h2>
</header>
<div class="article-meta">
<a href="/zh-cn/Enterprise/Laws/company-law.html" class="article-date">
<time datetime="2021-11-17T08:49:37.000Z" itemprop="datePublished">2021-11-17</time>
</a>
<div class="article-category">
<a class="article-category-link" href="/categories/Enterprise/">Enterprise</a> / <a class="article-category-link" href="/categories/Enterprise/Laws/">Laws</a>
</div>
</div>
<div class="article-entry" itemprop="articleBody">
<h3 id="posted-by-LeoZhao"><a href="#posted-by-LeoZhao" class="headerlink" title="posted by LeoZhao"></a>posted by LeoZhao</h3><br>
<blockquote>
<p>在市场经济条件下,公司只是企业的一种。企业会有多种形态,诸如私人独资企业、合伙企业、合作社企业、公司企业和国有企业、集体企业。</p>
</blockquote>
<blockquote>
<p>公司法将对公司的管理权赋予公司的董事会。</p>
</blockquote>
<blockquote>
<p>有限责任则体现了公司最重要的特征,即股东作为投资者只在其投资限度内对公司承担出资责任,公司以其全部资产对公司债权人承担责任。</p>
</blockquote>
<blockquote>
<p>公司以其全部财产对公司的债务承担责任。有限责任公司的股东以其认缴的出资额为限对公司承担责任;股份有限公司的股东以其认购的股份为限对公司承担责任。</p>
</blockquote>
<blockquote>
<p>有的创业者则希望直接说了算,避免他人干扰,可能不会选择普通的有限责任公司这种形式,而会选择其他形式,比如独资企业或者一人公司(属于有限责任公司的特殊形式)。这种形式的弊端就是,无法直接借助外来的资本力量或者其他股东的人脉,只能独自发展。</p>
</blockquote>
<blockquote>
<p>一个自然人只能投资设立一个一人有限责任公司。</p>
</blockquote>
<blockquote>
<p>独资企业与一人公司都是营利性的经济组织,共同点在于这两种类型的企业的投资者均为一个主体,但他们也有所不同,一是从法律主体上看,独资企业没有法人资格,一人公司则相反,一经设立便具有法人资格;并且,独资企业的投资者只能是一名自然人,而一人公司的股东既可以是一名自然人,也可以是一家公司。二是从财产关系上看,独资企业没有注册资本,没有属于法律意义上的企业的财产,一人公司按公司法要求得有注册资本,公司独立拥有财产。三是从责任形式上看,独资企业的业主对企业债务承担无限责任,一人公司的股东对公司债务只负有限责任。当然,要想仅承担有限责任,根据法律规定,一人公司的股东要证明公司财产独立于股东自己的财产,否则应当对公司债务承担连带责任。实务中,股东完成这个证明责任其实非常难,有的时候提交账册也不一定能免除连带责任。</p>
</blockquote>
<blockquote>
<p>合伙企业,分为普通合伙企业与有限合伙企业。普通合伙企业由普通合伙人组成,合伙人对合伙企业债务承担无限连带责任。无限连带责任这一点是普通合伙企业与公司最大的区别。<br>合伙比公司的好处之一在于税收优惠。公司制无法避免双重征收所得税。而合伙企业中仅对合伙人个人征收所得税,大大提高了投资收益。<br>有限合伙人以其认缴的出资额为限对合伙企业债务承担责任,普通合伙人对合伙企业债务承担无限连带责任。在有限合伙的架构中,责任的不同带来了管理权的不同。有限合伙人(LP)承担有限责任,与有限参与权相契合,普通合伙人(GP)承担无限责任,与全部管理权相匹配。<br>同时,通过这种架构,可以形成比较独特的内部治理机制,有利于降低运营成本并提高决策效率。比如由 GP 负责日常经营和投资决策,无须考虑公司制基金对外投资往往涉及的董事会决议、股东会决议等,会降低经营管理的金钱和时间成本。</p>
</blockquote>
<blockquote>
<p>企业应当自下列信息形成之日起 20 个工作日内通过企业信用信息公示系统向社会公示:(一)有限责任公司股东或者股份有限公司发起人认缴和实缴的出资额、出资时间、出资方式等信息;(二)有限责任公司股东股权转让等股权变更信息;(三)行政许可取得、变更、延续信息;(四)知识产权出质登记信息;(五)受到行政处罚的信息;(六)其他依法应当公示的信息。工商行政管理部门发现企业未依照前款规定履行公示义务的,应当责令其限期履行。</p>
</blockquote>
<blockquote>
<p>法律要求股东须按公司章程规定的期限足额缴纳各自所认缴的出资额。股东以货币出资的,应当将出资资金足额存入公司在银行开设的账户;以非货币财产出资的,应当依法办理其财产权的转移手续。</p>
</blockquote>
<blockquote>
<p>人民法院受理破产申请后,债务人的出资人尚未完全履行出资义务的,管理人应当要求该出资人缴纳所认缴的出资,而不受出资期限的限制。</p>
</blockquote>
<blockquote>
<p>股东未履行或者未全面履行出资义务或者抽逃出资,公司根据公司章程或者股东会决议对其利润分配请求权、新股优先认购权、剩余财产分配请求权等股东权利做出相应的合理限制,该股东请求认定该限制无效的,人民法院不予支持。</p>
</blockquote>
<blockquote>
<p>有限责任公司的股东未履行出资义务或者抽逃全部出资,经公司催告缴纳或者返还,其在合理期间内仍未缴纳或者返还出资,公司以股东会决议解除该股东的股东资格,该股东请求确认该解除行为无效的,人民法院不予支持。</p>
</blockquote>
<blockquote>
<p>《公司法》第二十五条规定,有限责任公司章程应当载明下列事项:(一)公司名称和住所;(二)公司经营范围;(三)公司注册资本;(四)股东的姓名或者名称;(五)股东的出资方式、出资额和出资时间;(六)公司的机构及其产生办法、职权、议事规则;(七)公司法定代表人;(八)股东会会议认为需要规定的其他事项。</p>
</blockquote>
<blockquote>
<p>章程中许多事项,法律允许自由约定。比如股东持股比例、分红比例、认缴公司新增资本比例可与出资比例不一致、表决权可与出资比例不一致,可通过公司章程限制股权转让时的剩余股东同意权、优先购买权,公司章程对公司董、监、高转让本公司股份的限制可高于公司法。有的事项,法律不允许自由约定,比如不能约定公司亏本时某股东可以原价退股。<br>股东会定期会议的召开时间、股东会的议事方式和表决程序等等。《公司法》第四十二条规定:股东会会议由股东按照出资比例行使表决权;但是,公司章程另有规定的除外。股东会是公司的最高权力机构,极为重要。公司法允许章程对这些事项作出特殊规定,比如有的事项,某些股东想要一票否决权,就可以专门在章程中约定。<br>董事长、副董事长的产生办法、董事任期、董事会的职责、议事方式和表决程序,执行董事的职权等等。<br>有限责任公司关于股权转让的规定。根据公司法的规定,股东向股东以外的人转让股权,应当经其他股东过半数同意。经股东同意转让的股权,在同等条件下,其他股东有优先购买权。但公司章程对股权转让另有规定的,从其规定。<br>自然人股东死亡后,其合法继承人可以继承股东资格;但是,公司章程另有规定的除外。<br>公司向其他企业投资或者为他人提供担保,依照公司章程的规定,由董事会或者股东会、股东大会决议;公司章程对投资或者担保的总额及单项投资或者担保的数额有限额规定的,不得超过规定的限额。</p>
</blockquote>
<blockquote>
<p>许多创业者,不注意股权比例,只讲究情怀,没有想清楚股权架构和比例,结果在经营过程中,一旦发生分歧,就容易产生问题,问题有可能是「群龙无首」,在均等比例下,谁也控制不了公司,也有可能是「一股独大」,其他股东意见不受重视,而这些股东可能同时还是公司重要部门负责人。这样大家心怀不满,四分五裂。<br>一是避免把股权在一开始全部分完,应预留部分股权作为激励,吸引新的创业伙伴进来,或者随着公司发展、个人贡献度大小有所调整,否则后期没有东西可分。<br>二是每个创业伙伴的优势是不一样的,比如在资金、创意、技术、运营、个人品牌等方面各有优势,可以考虑不完全按照出资比例来分。<br>三是要考虑创业的不同阶段——初创,发展,成熟,会带来股权架构的变化,比如投资人进来之后,可能会引起原有股权的稀释,这些都应该在预料之中,做好心理准备。<br>四是核心成员要有相当的控制权,如果完全按人数均分,可能会陷入公司僵局,无法有效决策。<br>五是应对创业伙伴脱离队伍的股权处理有所考虑。比如有的公司在章程中专门约定公司回购股权的情形。当股东同时是公司高管或者重要员工,在上述人员离职等情形下,公司可以回购股东股权。</p>
</blockquote>
<blockquote>
<p>股权代持是一种直接持有股权的变通方式,具有隐密性和灵活性,可以在一定程度上使投资人更便捷地做出适当的出资安排。<br>有限责任公司的实际出资人与名义出资人订立合同,约定由实际出资人出资并享有投资权益,以名义出资人为名义股东,实际出资人与名义股东对该合同效力发生争议的,如无合同法第五十二条规定的情形,人民法院应当认定该合同有效。</p>
</blockquote>
<blockquote>
<p>法定代表人。在我国,公司是营利法人,会依法产生法定代表人。法人是与自然人区分的,我们每个有自然生命的人都是自然人;而法人是具有民事权利能力和民事行为能力,依法独立享有民事权利和承担民事义务的组织,是社会组织在法律上的人格化。代表法人从事民事活动的负责人,为法人的法定代表人。公司法定代表人依照公司章程的规定,由董事长、执行董事或者经理担任,并依法登记。公司法定代表人变更,应当办理变更登记。</p>
</blockquote>
<ol>
<li>刑事方面。有些犯罪构成单位犯罪,则法定代表人风险很大,很可能就被判刑了。</li>
<li>民事方面。如果公司欠款,执行的时候有可能对法定代表人实行限制出境等措施。</li>
<li>任职限制。</li>
</ol>
<blockquote>
<p>对于个人而言,虽然担任法定代表人有风险,但对于公司而言,选好一个法定代表人更重要,否则公司承担的风险更大。在我国,法定代表人对外代表公司(有的国家不采取法定代表人制度)。<br>法定代表人以法人名义从事的民事活动,其法律后果由法人承受。</p>
</blockquote>
<blockquote>
<p>公章代表一切。实务中,公章与签字最大的问题在于,有时候发生纠纷后,不知道公章是谁盖的,或者是谁伪造的,真相难以查清。而签字,一做笔迹鉴定就能落实责任人。</p>
</blockquote>
</div>
<footer class="article-footer">
<a data-url="https://leolovedairy.life/zh-cn/Enterprise/Laws/company-law.html" data-id="cl7d035350001adg3gdho1zc1" class="article-share-link">
Share
</a>
<ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/Company-Law/" rel="tag">Company Law</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/Enterprise/" rel="tag">Enterprise</a></li></ul>
</footer>
</div>
</article>
<article id="post-connect-mutiple-github-accounts-with-ssh" class="article article-type-post" itemscope
itemprop="blogPost" data-scroll-reveal>
<div class="article-inner">
<header class="article-header">
<h2 itemprop="name">
<a class="article-title" href="/zh-cn/Basic-Operation/connect-mutiple-github-accounts-with-ssh.html">为多个GitHub账户配置SSH</a>
</h2>
</header>
<div class="article-meta">
<a href="/zh-cn/Basic-Operation/connect-mutiple-github-accounts-with-ssh.html" class="article-date">
<time datetime="2021-11-04T12:13:09.000Z" itemprop="datePublished">2021-11-04</time>
</a>
<div class="article-category">
<a class="article-category-link" href="/categories/Basic-Operation/">Basic Operation</a>
</div>
</div>
<div class="article-entry" itemprop="articleBody">
<h3 id="posted-by-LeoZhao"><a href="#posted-by-LeoZhao" class="headerlink" title="posted by LeoZhao"></a>posted by LeoZhao</h3><br>
<p>通常我们经常会遇到这样的情况,需要为公司和个人的 <code>GitHub</code> 账户配置 <code>SSH Key</code>。但是,仅仅将自己电脑上已经生成的 <code>SSH Public Key</code> 粘贴到不同的 <code>GitHub</code> 账户是不行的,因为我们在生成 <code>SSH Key</code> 的时候,输入了邮箱,而 <code>SSH</code> 便是根据这一邮箱生成的,所以,想要连接多个账户,却想使用一个 <code>Key</code> 是很难实现的。</p>
<br>
<h2 id="第一步:生成多个-SSH-Key"><a href="#第一步:生成多个-SSH-Key" class="headerlink" title="第一步:生成多个 SSH Key"></a>第一步:生成多个 SSH Key</h2><p>我们想,既然 <code>SSH Key</code> 是根据邮箱生成的,那么,我们用多个邮箱生成多个 <code>SSH Key</code> 不就好了嘛。于是,用 <code>ssh-keygen</code> 生成两对 <code>SSH Key</code>,并且将他们区别命名。</p>
<p><img src="/zh-cn/Basic-Operation/connect-mutiple-github-accounts-with-ssh/ssh-key-directory.png" alt="就像我这样,两对SSHKey"></p>
<h2 id="第二步:添加好-SSH-Key"><a href="#第二步:添加好-SSH-Key" class="headerlink" title="第二步:添加好 SSH Key"></a>第二步:添加好 SSH Key</h2><blockquote>
<p><em>请在不同的 GitHub 账户上的 “Settings”>”SSH and GPG Keys” 中配置好相对应的公钥( *.pub 文件里的 ),这里不再赘述</em>😅</p>
</blockquote>
<p>当你的 <code>SSH Key</code> 的文件名被命名为 <code>id_rsa</code> 时,系统会将其当作默认的 <code>SSH Key</code>,所以它是不用配置了的。<br><br></p>
<p>要将非 <code>id_rsa</code> 命名的 <code>SSH Key</code> 配置好的话,应执行命令 </p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh-add <YourKeyPath></span><br></pre></td></tr></table></figure>
<p>完成后,我们试试。输入命令</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh -T [email protected]</span><br></pre></td></tr></table></figure>
<p>如果出现 <code>You've successfully authenticated, but GitHub does not provide shell access.</code>,那么恭喜,现在你的 <code>SSH Key</code> 配置历程已经过去了一半!🥳<br><br></p>
<p>等等。。一半?</p>
<p>对啊,我们好好想想,前面,我们通过 <code>ssh-add</code> 配置了 Key,但是,这种配置并不是持久性的,也就是说,当你关机再回来的时候。🤯 你可能又要重新 <code>ssh-add</code> 一次了。</p>
<p>所以,我们还要:</p>
<h2 id="第三步:写-Config"><a href="#第三步:写-Config" class="headerlink" title="第三步:写 Config"></a>第三步:写 Config</h2><p>再你的 <code>.ssh</code> 文件夹下创建一个 <code>config</code> 文件</p>
<blockquote>
<p>请注意:<code>.ssh</code> 文件夹默认是隐藏的,Linux 和 Mac 用户可以 cd 到 <code>~/.ssh</code>目录,再 <code>touch config</code></p>
</blockquote>
<p>顾名思义,这个 <code>config</code> 文件是用来配置系统 SSH 连接的</p>
<p>我们在 <code>config</code> 文件里面这样写:</p>
<blockquote>
<p><code>Host</code> 后面的名称可以按自己的要求写,仅作为标识符<br><code>IdentityFile</code> 一定要对应好</p>
</blockquote>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">Host github-personal</span><br><span class="line"> HostName github.com</span><br><span class="line"> User git</span><br><span class="line"> IdentityFile ~/.ssh/id_rsa</span><br><span class="line"> IdentitiesOnly yes</span><br><span class="line"></span><br><span class="line">Host github-tomortec</span><br><span class="line"> HostName github.com</span><br><span class="line"> User git</span><br><span class="line"> IdentityFile ~/.ssh/id_rsa_tomortec</span><br><span class="line"> IdentitiesOnly yes</span><br></pre></td></tr></table></figure>
<p>这样,我们就真正配置好多个 <code>SSH Key</code> 了。🥳🥳🥳<br><br>测试一下吧,<br><code>ssh -T <YourHostName></code><br><img src="/zh-cn/Basic-Operation/connect-mutiple-github-accounts-with-ssh/success.png" alt="OK!大功告成"></p>
<p>🎉🎉🎉🎉🎉🎉🎉🎉🎉?</p>
<h2 id="等等,这提醒很重要"><a href="#等等,这提醒很重要" class="headerlink" title="等等,这提醒很重要"></a>等等,这提醒很重要</h2><p>在配置了 <code>config</code> 文件后,对 <code>SSH</code> 链接的操作<strong>不再</strong>是<br>“<a href="mailto:git@github.com">git@github.com</a>:YourName/YourRepo.git”(默认的) 了<br>而是应该变为 </p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git@<YourHostName>:YourName/YourRepo.git</span><br></pre></td></tr></table></figure>
<p>记住!记住!记住!</p>
</div>
<footer class="article-footer">
<a data-url="https://leolovedairy.life/zh-cn/Basic-Operation/connect-mutiple-github-accounts-with-ssh.html" data-id="cl7d035370003adg3fjczcktz" class="article-share-link">
Share
</a>
<ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/GitHub/" rel="tag">GitHub</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/SSH/" rel="tag">SSH</a></li></ul>
</footer>
</div>
</article>
<article id="post-interpretation-of-Commodity-Fetishism" class="article article-type-post" itemscope
itemprop="blogPost" data-scroll-reveal>
<div class="article-inner">
<header class="article-header">
<h2 itemprop="name">
<a class="article-title" href="/zh-cn/Economy/Political-Economy/interpretation-of-Commodity-Fetishism.html">商品拜物教各文献的解读</a>
</h2>
</header>
<div class="article-meta">
<a href="/zh-cn/Economy/Political-Economy/interpretation-of-Commodity-Fetishism.html" class="article-date">
<time datetime="2021-10-31T03:13:54.000Z" itemprop="datePublished">2021-10-31</time>
</a>
<div class="article-category">
<a class="article-category-link" href="/categories/Economy/">Economy</a> / <a class="article-category-link" href="/categories/Economy/Political-Economy/">Political Economy</a>
</div>
</div>
<div class="article-entry" itemprop="articleBody">
<h3 id="主题:商品拜物教在社会主义市场经济中的影响及应对措施"><a href="#主题:商品拜物教在社会主义市场经济中的影响及应对措施" class="headerlink" title="主题:商品拜物教在社会主义市场经济中的影响及应对措施"></a>主题:商品拜物教在社会主义市场经济中的影响及应对措施</h3><h2 id="一、《马克思商品拜物教理论的解读及当代价值》第四部分"><a href="#一、《马克思商品拜物教理论的解读及当代价值》第四部分" class="headerlink" title="一、《马克思商品拜物教理论的解读及当代价值》第四部分"></a>一、《马克思商品拜物教理论的解读及当代价值》第四部分</h2><p>主要提出三个问题:为什么,怎么样,怎么做</p>
<ol>
<li><p>社会主义市场经济存在商品拜物教(为什么):<br> 从两个方面讨论:<strong>我国的所有制形式</strong>和<strong>市场经济</strong></p>
<blockquote>
<p>  文章提出,“我国社会主义市场经济不仅包括公有制经济,也包括个体经济、私营经济和外资经济,大部分劳动产品采取商品 形式,通过市场进行等价交换,因而社会主义市场经济存在商品拜物教”,“从市场角度看,发展社会主义市场经济,必然要促进商品经济 快速发展,必然要使劳动产品转化为商品形式,商品交换这种物与物的关系必然会出 现并掩盖人与人的关系。因此,社会主义市场经济存在商品拜物教是毋庸置疑的。 当前,摆在我们面前的,不是争论商品、货币和资本拜物教的问题,而是如何认识和解 决由此产生的一系列社会经济问题”。</p>
</blockquote>
</li>
<li><p>商品拜物教对社会主义市场经济的影响(怎么样):<br> 需要<strong>辩证</strong>看待</p>
<blockquote>
<p>积极方面:<br><br>   社会主义市场经济要求发展商品经济,而发展商品经济培育出来的商品拜物有利于人们克服更低级别的、限制人们自由发展的封建束缚,形成<strong>商品意识和竞争意识</strong>,从而提高生产效率,推动社会主义市场经济发展。</p>
<br>
消极方面:<br>
  (1)消费主义盛行,动摇理想信念,与社会主义核心价值观不符,破坏社会和谐氛围
<br>
  (2)拜金主义泛滥,使人们为获取财富不惜违背道德甚至违法乱纪
<br>
  (3)诱导贪污腐败</blockquote>
</li>
<li><p>新时代对商品拜物教的批判研究(怎么做,措施):</p>
<blockquote>
<p>  (1)正确态度:<strong>辩证</strong>看待</p>
<br>
  (2)制度保障:强化市场经济中的社会主义因素,完善社会主义市场经济运行机制。
<br>
      a. 壮大公有制经济,巩固公 有制经济的主体地位,充分发挥国有经济在国民经济中经济的主导作用;
<br>
      b. 不断完善社会主义市场经济体制,提高市场经济运行效率和水平;
<br>
      c. 完善法律法规,加大反腐力度。
<br>
  (3)社会氛围:加强社会主义意识形态建设,巩固社会主义核心价值观。
<br>
  (4)学科发展:树立以人民为中心的发展理念,发展中国特色社会主义政治经济学。</blockquote>
</li>
</ol>
<h2 id="二、《马克思主义哲学视角下中国经济社会问题探析》"><a href="#二、《马克思主义哲学视角下中国经济社会问题探析》" class="headerlink" title="二、《马克思主义哲学视角下中国经济社会问题探析》"></a>二、《马克思主义哲学视角下中国经济社会问题探析》</h2><p>主要提出两个问题:商品拜物教的<strong>影响</strong>(意义和问题),解决消费问题的措施</p>
<ol>
<li><p>商品拜物教的意义:</p>
<blockquote>
<p>  作为历史发展的产物, 商品拜物教的存在既有它的必然性, 也有它的历史阶段性。 商品拜物教作为商品经济的伴生物, 在一定程度上确实促进了商品经济的进一步发展,并且增加了物质产品的丰富程度,改善了人们的生活水平。</p>
</blockquote>
</li>
<li><p>商品拜物教带来的问题:</p>
<blockquote>
<p>  (1)名牌效应:然而随着商品品牌效应的形成,人们在购买商品时,往往被商品的品牌牵着鼻子走,失去购买的主动权。 不利于中国经济的稳定发展。</p>
<br>
  (2)使人道德沦丧:必然导致人们精神麻木,不利于社会主义精神文明建设,更不利 于社会主义现代化建设。
<br>
  (3)盲目消费造成资源浪费:过度式消费终将会造成社会资源的严重浪费, 短时间内看似促进了社会经济发展,但长此以往却不利于经 济的可持续发展。
<br>
  (4)拉大贫富差距:人们对物质的极度追求导致的过度消费,还会拉大贫富差距,破坏社会和谐,甚至引发社会矛盾,造成仇富现象的出现,不利于社会的和谐发展。</blockquote>
</li>
<li><p>解决社会中消费问题的<strong>措施</strong>:(从个人、消费环境、社会、哲学方法论出发)</p>
<blockquote>
<p>  (1)个人:倡导形成正确价值观</p>
<br>
  (2)消费环境:监管。严禁商家通过哄抬商品物价从中牟取暴利。政府部门要对商家在广告媒体上的宣传工作进行严格把关······并做好宣传工作,提醒广大消 费者理性消费。 大力支持企业研发和生产绿色环保产品,要 注重提升商品的实用性,倡导社会实现绿色消费。 此外,还要 “适时调整消费税,建立科学合理的高消费税制。
<br>
  (3)社会:树立正确的消费观,注重精神文明建设。
<br>
  (4)方法论:抓住事物发展的本质,深入解读当前 中国经济社会问题,由理论再到实际,找到一条解决问题的 正确途径。</blockquote>
</li>
</ol>
<h2 id="三、《现代视阈下的商品拜物教反思》"><a href="#三、《现代视阈下的商品拜物教反思》" class="headerlink" title="三、《现代视阈下的商品拜物教反思》"></a>三、《现代视阈下的商品拜物教反思》</h2><p>主要提出两个问题:商品拜物教的怪象(影响),挣脱羁绊(解决措施)</p>
<ol>
<li><p>商品拜物教的怪象(<strong>影响</strong>):</p>
<blockquote>
<p>  (1)对于商品的迷信、货币的迷信、资本的迷信使现代人几乎不去关 注商品、货币、资本背后的内容,形式作为对内容的表 达的重要性已经远远超过内容的重要性。</p>
<br>
  (2)人们过度地对物和形式化的 追求,严重地影响人们真正需要面对和处理的人与人关系关注,甚至开始丧失对人性意义以及健康生活方 式的正确思考。</blockquote>
</li>
<li><p>挣脱羁绊(解决<strong>措施</strong>):(从制度、政府、个人出发)</p>
<blockquote>
<p>  (1)制度:发挥社会主义制度优越性与进一步完善社会主义现代市场经济</p>
<br>
  (2)政府:弘扬正能量与政府作用。
<br>
      a. 在社会范围内弘扬正能量;
<br>
      b. 弘扬和践行社会主义核心价值观,将正确的 商品观、金钱观、资本观注入现代市场经济中;
<br>
      c. 在社会主义的市场经济体制之下,要充分发挥政府的作用。结合我们特殊的国情,充分发挥政府在资源配置中的引导性作用,减弱市场行为的盲目性,缓和市场自发配置资源的无序性。
<br>
  (3)个人:大力倡导正确的生活方式与从我做起。真诚待人、绿色消费、从我开始建立 人与人之间的信任、从我开始影响身边的每一个人。</blockquote>
</li>
</ol>
<h2 id="四、《中国商品拜物教状况的研究》(节选第三章第二节和第四章)"><a href="#四、《中国商品拜物教状况的研究》(节选第三章第二节和第四章)" class="headerlink" title="四、《中国商品拜物教状况的研究》(节选第三章第二节和第四章)"></a>四、《中国商品拜物教状况的研究》(节选第三章第二节和第四章)</h2><p>主要提出两个问题:商品拜物教对我国经济社会造成的影响和抑制现阶段商品拜物教现象发展的对策</p>
<ol>
<li>商品拜物教对我国经济社会造成的<strong>影响</strong>:<blockquote>
<p>  (1)贪官腐败</p>
<br>
  (2)两极分化:贫富差距拉大
<br>
  (3)学术商业化
<br>
  (4)环境问题
</blockquote>
</li>
<li>抑制现阶段商品拜物教现象发展的对策(<strong>措施</strong>):(从个人和社会角度出发)<blockquote>
<p>  (1)个人层面:</p>
<br>
      a. 正确认识商品拜物教的内涵:提高明辨是非的能力,不盲目跟风,辩证地看待商品拜物教在我国社会主义市场经济发展中的利弊,让更 多人认识到商品是为我们而服务的;
<br>
      b. 正确认识人们对商品的需要(减少名牌效应带来的影响);
<br>
      c. 正确认识商品拜物教存在的客观性;
<br>
  (2)社会层面:
<br>
      a. 制度:逐步完善我国的经济制度(尤其是引导非公有制经济向正确的道路发展);
<br>
      b. 法制:逐步健全我国的法治体系;
<br>
      c. 道德:逐步加强我国的道德建设;
<br>
      d. 发展:大力发展生产力(根本途径)。</blockquote>
</li>
</ol>
<br>
<h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>对于商品拜物教的<strong>影响</strong>,不少学者支持应对商品拜物教<strong>辩证</strong>看待,一方面,商品拜物教刺激人们生产,促使经济发展、生活改善;另一方面,商品拜物教引发了 消费主义、贪官腐败、名牌效应、道德沦丧、贫富差距拉大 甚至还有 资源浪费、学术商业化 等问题。<br><br><br>对于应对<strong>措施</strong>,各学者主要从个人、社会和政府三方面出发。<strong>个人</strong>要正确认识商品拜物教、提高思想道德水平;<strong>社会</strong>要树立良好风尚,抑制消费主义、拜金主义;<strong>国家</strong>要完善经济制度,加强监管,加强法制建设,大力发展生产力。</p>
</div>
<footer class="article-footer">
<a data-url="https://leolovedairy.life/zh-cn/Economy/Political-Economy/interpretation-of-Commodity-Fetishism.html" data-id="cl7d0353c0012adg3fohnfnb3" class="article-share-link">
Share
</a>
<ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/Commodity-Fetishism/" rel="tag">Commodity Fetishism</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/Marx/" rel="tag">Marx</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/Political-Economy/" rel="tag">Political Economy</a></li></ul>
</footer>
</div>
</article>
<article id="post-swiftui-property-wrappers" class="article article-type-post" itemscope
itemprop="blogPost" data-scroll-reveal>
<div class="article-inner">
<header class="article-header">
<h2 itemprop="name">
<a class="article-title" href="/zh-cn/Swift/swiftui-property-wrappers.html">SwiftUI Property Wrappers</a>
</h2>
</header>
<div class="article-meta">
<a href="/zh-cn/Swift/swiftui-property-wrappers.html" class="article-date">
<time datetime="2021-10-30T13:19:01.000Z" itemprop="datePublished">2021-10-30</time>
</a>
<div class="article-category">
<a class="article-category-link" href="/categories/Swift/">Swift</a>
</div>
</div>
<div class="article-entry" itemprop="articleBody">
<h3 id="posted-by-Majid"><a href="#posted-by-Majid" class="headerlink" title="posted by Majid"></a>posted by Majid</h3><p>这篇文章转载自:<a target="_blank" rel="noopener" href="https://swiftwithmajid.com/2019/06/12/understanding-property-wrappers-in-swiftui/">https://swiftwithmajid.com/2019/06/12/understanding-property-wrappers-in-swiftui/</a><br>中文翻译可以看这篇文章:<a target="_blank" rel="noopener" href="https://www.cnblogs.com/xiaoniuzai/p/11417123.html">https://www.cnblogs.com/xiaoniuzai/p/11417123.html</a></p>
<br>
<p>Today I want to continue this topic by covering <code>Property Wrappers</code> provided by SwiftUI. SwiftUI gives us <code>@State</code>, <code>@Binding</code>, <code>@ObservedObject</code>, <code>@EnvironmentObject</code>, and <code>@Environment</code> Property Wrappers. So let’s try to understand the differences between them and when and why which one we have to use.</p>
<br>
<h2 id="Property-Wrappers"><a href="#Property-Wrappers" class="headerlink" title="Property Wrappers"></a>Property Wrappers</h2><p><code>Property Wrappers</code> feature described in <a target="_blank" rel="noopener" href="https://github.com/DougGregor/swift-evolution/blob/property-wrappers/proposals/0258-property-wrappers.md">SE-0258</a> proposal. The main goal here is wrapping properties with logic which can be extracted into the separated struct to reuse it across the codebase.</p>
<h2 id="State"><a href="#State" class="headerlink" title="@State"></a>@State</h2><p><code>@State</code> is a <code>Property Wrapper</code> which we can use to describe <code>View</code>’s state. SwiftUI will store it in special internal memory outside of <code>View</code> struct. Only the related <code>View</code> can access it. As soon as the value of <code>@State</code> property changes SwiftUI rebuilds <code>View</code> to respect state changes. Here is a simple example.</p>
<figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">ProductsView</span>: <span class="title">View</span> </span>{</span><br><span class="line"> <span class="keyword">let</span> products: [<span class="type">Product</span>]</span><br><span class="line"></span><br><span class="line"> <span class="meta">@State</span> <span class="keyword">private</span> <span class="keyword">var</span> showFavorited: <span class="type">Bool</span> <span class="operator">=</span> <span class="literal">false</span></span><br><span class="line"></span><br><span class="line"> <span class="keyword">var</span> body: <span class="keyword">some</span> <span class="type">View</span> {</span><br><span class="line"> <span class="type">List</span> {</span><br><span class="line"> <span class="type">Button</span>(</span><br><span class="line"> action: { <span class="keyword">self</span>.showFavorited.toggle() },</span><br><span class="line"> label: { <span class="type">Text</span>(<span class="string">"Change filter"</span>) }</span><br><span class="line"> )</span><br><span class="line"></span><br><span class="line"> <span class="type">ForEach</span>(products) { product <span class="keyword">in</span></span><br><span class="line"> <span class="keyword">if</span> <span class="operator">!</span><span class="keyword">self</span>.showFavorited <span class="operator">||</span> product.isFavorited {</span><br><span class="line"> <span class="type">Text</span>(product.title)</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></pre></td></tr></table></figure>
<br>
<p>In the example above we have a straightforward screen with <code>Button</code> and <code>List</code> of products. As soon as we press the button, it changes the value of the state property, and SwiftUI recreates <code>View</code>.</p>
<h2 id="Binding"><a href="#Binding" class="headerlink" title="@Binding"></a>@Binding</h2><p><code>@Binding</code> provides reference like access for a value type. Sometimes we need to make the state of our <code>View</code> accessible for its children. But we can’t simply pass that value because it is a value type and Swift will pass the <code>copy</code> of that value. And this is where we can use <code>@Binding</code> Property Wrapper.</p>
<figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">FilterView</span>: <span class="title">View</span> </span>{</span><br><span class="line"> <span class="meta">@Binding</span> <span class="keyword">var</span> showFavorited: <span class="type">Bool</span></span><br><span class="line"></span><br><span class="line"> <span class="keyword">var</span> body: <span class="keyword">some</span> <span class="type">View</span> {</span><br><span class="line"> <span class="type">Toggle</span>(isOn: <span class="variable">$showFavorited</span>) {</span><br><span class="line"> <span class="type">Text</span>(<span class="string">"Change filter"</span>)</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 class="class"><span class="keyword">struct</span> <span class="title">ProductsView</span>: <span class="title">View</span> </span>{</span><br><span class="line"> <span class="keyword">let</span> products: [<span class="type">Product</span>]</span><br><span class="line"></span><br><span class="line"> <span class="meta">@State</span> <span class="keyword">private</span> <span class="keyword">var</span> showFavorited: <span class="type">Bool</span> <span class="operator">=</span> <span class="literal">false</span></span><br><span class="line"></span><br><span class="line"> <span class="keyword">var</span> body: <span class="keyword">some</span> <span class="type">View</span> {</span><br><span class="line"> <span class="type">List</span> {</span><br><span class="line"> <span class="type">FilterView</span>(showFavorited: <span class="variable">$showFavorited</span>)</span><br><span class="line"></span><br><span class="line"> <span class="type">ForEach</span>(products) { product <span class="keyword">in</span></span><br><span class="line"> <span class="keyword">if</span> <span class="operator">!</span><span class="keyword">self</span>.showFavorited <span class="operator">||</span> product.isFavorited {</span><br><span class="line"> <span class="type">Text</span>(product.title)</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></pre></td></tr></table></figure>
<p>We use <code>@Binding</code> to mark showFavorited property inside the FilterView. We also use <code>$</code> to pass a <code>binding reference</code>, because without <code>$</code> Swift will pass a <code>copy</code> of the value instead of passing bindable reference. FilterView can read and write the value of ProductsView’s showFavorited property. As soon as FilterView changes value of showFavorited property, SwiftUI will recreate the ProductsView and FilterView as its child.</p>
<blockquote>
<p><code>@Binding</code> provides a reference like access for a value type. That’s why it should be used only with value types. If Value of Binding is not value semantic, the updating behavior for any views that make use of the resulting Binding is unspecified.</p>
</blockquote>
<h2 id="ObservedObject"><a href="#ObservedObject" class="headerlink" title="@ObservedObject"></a>@ObservedObject</h2><p>We should use <code>@ObservedObject</code> to handle data that lives outside of SwiftUI, like your business logic. We can share it between multiple independent <code>View</code>s which can subscribe and observe changes on that object, and as soon as changes appear SwiftUI rebuilds all <code>View</code>s bound to this object. Let’s take a look at an example.</p>
<figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> Combine</span><br><span class="line"></span><br><span class="line"><span class="keyword">final</span> <span class="class"><span class="keyword">class</span> <span class="title">PodcastPlayer</span>: <span class="title">ObservableObject</span> </span>{</span><br><span class="line"> <span class="meta">@Published</span> <span class="keyword">private(set)</span> <span class="keyword">var</span> isPlaying: <span class="type">Bool</span> <span class="operator">=</span> <span class="literal">false</span></span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">func</span> <span class="title">play</span>()</span> {</span><br><span class="line"> isPlaying <span class="operator">=</span> <span class="literal">true</span></span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">func</span> <span class="title">pause</span>()</span> {</span><br><span class="line"> isPlaying <span class="operator">=</span> <span class="literal">false</span></span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>Here we have PodcastPlayer <code>class</code> which we share between the screens of our app. Every screen has to show floating pause button in the case when the app is playing a podcast episode. SwiftUI tracks the changes on <code>ObservableObject</code> with the help of <code>@Published</code> property wrapper, and as soon as a property marked as <code>@Published</code> changes SwiftUI rebuild all <code>View</code>s bound to that PodcastPlayer object. Here we use <code>@ObservedObject</code> Property Wrapper to bind our EpisodesView to PodcastPlayer class</p>
<figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">EpisodesView</span>: <span class="title">View</span> </span>{</span><br><span class="line"> <span class="meta">@ObservedObject</span> <span class="keyword">var</span> player: <span class="type">PodcastPlayer</span></span><br><span class="line"> <span class="keyword">let</span> episodes: [<span class="type">Episode</span>]</span><br><span class="line"></span><br><span class="line"> <span class="keyword">var</span> body: <span class="keyword">some</span> <span class="type">View</span> {</span><br><span class="line"> <span class="type">List</span> {</span><br><span class="line"> <span class="type">Button</span>(</span><br><span class="line"> action: {</span><br><span class="line"> <span class="keyword">if</span> <span class="keyword">self</span>.player.isPlaying {</span><br><span class="line"> <span class="keyword">self</span>.player.pause()</span><br><span class="line"> } <span class="keyword">else</span> {</span><br><span class="line"> <span class="keyword">self</span>.player.play()</span><br><span class="line"> }</span><br><span class="line"> }, label: {</span><br><span class="line"> <span class="type">Text</span>(player.isPlaying <span class="operator">?</span> <span class="string">"Pause"</span>: <span class="string">"Play"</span>)</span><br><span class="line"> }</span><br><span class="line"> )</span><br><span class="line"> <span class="type">ForEach</span>(episodes) { episode <span class="keyword">in</span></span><br><span class="line"> <span class="type">Text</span>(episode.title)</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<blockquote>
<p>Remember, we can share <code>ObservableObject</code> between multiple views, that’s why it must be a <code>reference type/class</code>.</p>
</blockquote>
<h2 id="EnvironmentObject"><a href="#EnvironmentObject" class="headerlink" title="@EnvironmentObject"></a>@EnvironmentObject</h2><p>Instead of passing <code>ObservableObject</code> via <code>init</code> method of our <code>View</code> we can implicitly inject it into <code>Environment</code> of our <code>View</code> hierarchy. By doing this, we create the opportunity for all child <code>View</code>s of current <code>Environment</code> access this <code>ObservableObject</code>.</p>
<figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">SceneDelegate</span>: <span class="title">UIResponder</span>, <span class="title">UIWindowSceneDelegate</span> </span>{</span><br><span class="line"></span><br><span class="line"> <span class="keyword">var</span> window: <span class="type">UIWindow</span>?</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">func</span> <span class="title">scene</span>(<span class="keyword">_</span> <span class="params">scene</span>: <span class="type">UIScene</span>, <span class="params">willConnectTo</span> <span class="params">session</span>: <span class="type">UISceneSession</span>, <span class="params">options</span> <span class="params">connectionOptions</span>: <span class="type">UIScene</span>.<span class="type">ConnectionOptions</span>)</span> {</span><br><span class="line"> <span class="keyword">let</span> window <span class="operator">=</span> <span class="type">UIWindow</span>(frame: <span class="type">UIScreen</span>.main.bounds)</span><br><span class="line"> <span class="keyword">let</span> episodes <span class="operator">=</span> [</span><br><span class="line"> <span class="type">Episode</span>(id: <span class="number">1</span>, title: <span class="string">"First episode"</span>),</span><br><span class="line"> <span class="type">Episode</span>(id: <span class="number">2</span>, title: <span class="string">"Second episode"</span>)</span><br><span class="line"> ]</span><br><span class="line"></span><br><span class="line"> <span class="keyword">let</span> player <span class="operator">=</span> <span class="type">PodcastPlayer</span>()</span><br><span class="line"> window.rootViewController <span class="operator">=</span> <span class="type">UIHostingController</span>(</span><br><span class="line"> rootView: <span class="type">EpisodesView</span>(episodes: episodes)</span><br><span class="line"> .environmentObject(player)</span><br><span class="line"> )</span><br><span class="line"> <span class="keyword">self</span>.window <span class="operator">=</span> window</span><br><span class="line"> window.makeKeyAndVisible()</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">EpisodesView</span>: <span class="title">View</span> </span>{</span><br><span class="line"> <span class="meta">@EnvironmentObject</span> <span class="keyword">var</span> player: <span class="type">PodcastPlayer</span></span><br><span class="line"> <span class="keyword">let</span> episodes: [<span class="type">Episode</span>]</span><br><span class="line"></span><br><span class="line"> <span class="keyword">var</span> body: <span class="keyword">some</span> <span class="type">View</span> {</span><br><span class="line"> <span class="type">List</span> {</span><br><span class="line"> <span class="type">Button</span>(</span><br><span class="line"> action: {</span><br><span class="line"> <span class="keyword">if</span> <span class="keyword">self</span>.player.isPlaying {</span><br><span class="line"> <span class="keyword">self</span>.player.pause()</span><br><span class="line"> } <span class="keyword">else</span> {</span><br><span class="line"> <span class="keyword">self</span>.player.play()</span><br><span class="line"> }</span><br><span class="line"> }, label: {</span><br><span class="line"> <span class="type">Text</span>(player.isPlaying <span class="operator">?</span> <span class="string">"Pause"</span>: <span class="string">"Play"</span>)</span><br><span class="line"> }</span><br><span class="line"> )</span><br><span class="line"> <span class="type">ForEach</span>(episodes) { episode <span class="keyword">in</span></span><br><span class="line"> <span class="type">Text</span>(episode.title)</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>As you can see, we can pass PodcastPlayer object via <code>environmentObject</code> modifier of our <code>View</code>. By doing this, we can easily access PodcastPlayer by defining it with <code>@EnvironmentObject</code> Property Wrapper. <code>@EnvironmentObject</code> uses dynamic member lookup feature to find PodcastPlayer class instance in the <code>Environment</code>, that’s why you don’t need to pass it via init method of EpisodesView. It works like magic.</p>
<h2 id="Environment"><a href="#Environment" class="headerlink" title="@Environment"></a>@Environment</h2><p>As we discussed in the previous chapter, we can pass custom objects into the <code>Environment</code> of a <code>View</code> hierarchy inside SwiftUI. But SwiftUI already has an <code>Environment</code> populated with system-wide settings. We can easily access them with <code>@Environment</code> Property Wrapper.</p>
<figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">CalendarView</span>: <span class="title">View</span> </span>{</span><br><span class="line"> <span class="meta">@Environment</span>(\.calendar) <span class="keyword">var</span> calendar: <span class="type">Calendar</span></span><br><span class="line"> <span class="meta">@Environment</span>(\.locale) <span class="keyword">var</span> locale: <span class="type">Locale</span></span><br><span class="line"> <span class="meta">@Environment</span>(\.colorScheme) <span class="keyword">var</span> colorScheme: <span class="type">ColorScheme</span></span><br><span class="line"></span><br><span class="line"> <span class="keyword">var</span> body: <span class="keyword">some</span> <span class="type">View</span> {</span><br><span class="line"> <span class="keyword">return</span> <span class="type">Text</span>(locale.identifier)</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>By marking our properties with <code>@Environment </code>Property Wrapper, we access and subscribe to changes of system-wide settings. As soon as Locale, Calendar or ColorScheme of the system change, SwiftUI recreates our CalendarView.</p>
<blockquote>
<p>To learn about new property wrappers released during WWDC20, take a look at my <a target="_blank" rel="noopener" href="https://swiftwithmajid.com/2020/06/29/new-property-wrappers-in-swiftui/">New property wrappers in SwiftUI</a> post.</p>
</blockquote>
</div>
<footer class="article-footer">
<a data-url="https://leolovedairy.life/zh-cn/Swift/swiftui-property-wrappers.html" data-id="cl7d0353f001dadg3d9opaebh" class="article-share-link">
Share
</a>
<ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/Property-Wrappers/" rel="tag">Property Wrappers</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/SwiftUI/" rel="tag">SwiftUI</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/reprint/" rel="tag">reprint</a></li></ul>
</footer>
</div>
</article>
<article id="post-swiftui-project-icon-and-launch-pic" class="article article-type-post" itemscope
itemprop="blogPost" data-scroll-reveal>
<div class="article-inner">
<header class="article-header">
<h2 itemprop="name">
<a class="article-title" href="/zh-cn/Swift/swiftui-project-icon-and-launch-pic.html">Xcode 中设置APP的图标(Icon)和启动页面(Launch Screen)</a>
</h2>
</header>
<div class="article-meta">
<a href="/zh-cn/Swift/swiftui-project-icon-and-launch-pic.html" class="article-date">
<time datetime="2021-10-29T12:00:58.000Z" itemprop="datePublished">2021-10-29</time>
</a>
<div class="article-category">
<a class="article-category-link" href="/categories/Swift/">Swift</a>
</div>
</div>
<div class="article-entry" itemprop="articleBody">
<h3 id="posted-by-LeoZhao"><a href="#posted-by-LeoZhao" class="headerlink" title="posted by LeoZhao"></a>posted by LeoZhao</h3><br>
<p>图标 <code>Icon</code> 和启动页面 <code>Launch Screen</code> 无疑是一个 App 最重要的东西之一,它能给用户以第一印象,是否能 catch one’s eyes 就看图标和启动页面的表现了(况且,连图标和启动页面都没有的话也太水了吧 😂 )。<br><br></p>
<p>幸好在 Xcode 中设置 <code>Icon</code> 和 <code>Launch Screen</code> 比较简单,不用花多少功夫,现在就让我们 diving in吧。</p>
<h2 id="设置图标(Icon)"><a href="#设置图标(Icon)" class="headerlink" title="设置图标(Icon)"></a>设置图标(Icon)</h2><p>首先,要准备4组图标(如果是发布在 <code>iOS</code> 平台上),这4组分别是 <code>120 x 120 px</code>,<code>152 x 152 px</code>,<code>167 x 167 px</code>,<code>1024 x 1024 px</code> 的尺寸,要 <code>PNG</code> 格式。<br><br>然后,将这4张图片 <code>Add Files to <Your Project></code>。<br><br>接下来,打开 <code>Assets.xcassets</code>,将项目结构中的图片拉入 <code>AppIcon</code> 中的相应位置,就像这样<br><br><br><img src="/zh-cn/Swift/swiftui-project-icon-and-launch-pic/appicon.png" alt="将4个图标放入xcassets"></p>
<br>
<p>最后,在你的 xcodeproj 中将 <code>App Icons Source</code> 设为 <code>AppIcon</code>,接下来重新 <code>Build</code> 即可。</p>
<h2 id="设置启动页面(Launch-Screen)"><a href="#设置启动页面(Launch-Screen)" class="headerlink" title="设置启动页面(Launch Screen)"></a>设置启动页面(Launch Screen)</h2><p>在我当前的 Xcode 版本(13.0)中,要设置启动页面需要有 <code>Launch Screen File</code>,事实上,这个文件可以使用 <code>.storyboard</code>。<br><br>我们在项目中创建 <code>.storyboard</code>文件,我将其命名为 “Launch Screen.storyboard”。<br><br>打开我们的 storyboard,然后在里面设计即可。<br><br>最后,在我们的 xcodeproj 中将 <code>Launch Screen File</code> 设置为 “Launch Screen.storyboard”。<br><br>这样就完成了。<br><br></p>
<h2 id="附:在-storyboard-中全屏图片"><a href="#附:在-storyboard-中全屏图片" class="headerlink" title="附:在 storyboard 中全屏图片"></a>附:在 storyboard 中全屏图片</h2><p><em>因为我的启动界面是用图片做成的静态界面,所以我介绍一下storyboard 中全屏图片(保留 <code>Safe Area</code> )的方法</em></p>
<p>首先,在 <code>Assets.xcassets</code> 中引入图片,<code>直接拖入</code>或<code>点击左下角的+</code>都可。<br><br>然后,在 storyboard 中,点击右上角的加号,添加一个 <code>Image View</code>,并在 <code>Image View</code>的属性面板中设置 <code>Image</code> 为刚添加的 asset。<br><br>接下来,选中新添加的 <code>Image View</code> ,点击底部栏中的 <code>Add New Constraints(意为约束)</code>,并将上下左右四个为虚线的 <code>constraints</code> 点亮、设置为0,设置完成后点击面板下面的 <code>Add Constraints</code>。<br><br><br><img src="/zh-cn/Swift/swiftui-project-icon-and-launch-pic/launch_screen.png" alt="Add New Constraints"><br><br><br><img src="/zh-cn/Swift/swiftui-project-icon-and-launch-pic/constraints.png" alt="set all Constraints"></p>
<br>
<p>最后,就是设置图片居中了,注意选中 <code>Image View</code> ,点击 <code>Add New Constraints</code> 左边的 <code>Align</code>,选中 <code>Horizontally in Container</code> 和 <code>Vertically in Container</code>,设置完成后点击面板下面的 <code>Add Constraints</code>,设置完成 🥳 。<br><br><br><img src="/zh-cn/Swift/swiftui-project-icon-and-launch-pic/align.png" alt="the final results"></p>
</div>
<footer class="article-footer">
<a data-url="https://leolovedairy.life/zh-cn/Swift/swiftui-project-icon-and-launch-pic.html" data-id="cl7d0353d0017adg32f6qcuth" class="article-share-link">
Share
</a>
<ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/SwiftUI/" rel="tag">SwiftUI</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/Xcode/" rel="tag">Xcode</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/iOS/" rel="tag">iOS</a></li></ul>
</footer>
</div>
</article>
</article>
<nav class="page-nav">
<span class="page-number current">1</span><a class="page-number" href="/page/2/">2</a><a class="extend next" rel="next" href="/page/2/">Next</a>
</nav>
</section>
</div>
<footer class="footer">
<div class="outer">
<div class="float-right">
<ul class="list-inline">
<li><i class="fe fe-bar-chart"></i> <span id="busuanzi_value_site_pv"></span></li>
<li><i class="fe fe-smile-alt"></i> <span id="busuanzi_value_site_uv"></span></li>
</ul>
</div>
<ul class="list-inline">
<li>© 2023 Tomortec.LeoZhao 版权所有</li>
<a href="https://beian.miit.gov.cn/" target="_blank">ICP 备案号:京ICP备2021035035-1</a>
<li>
<a href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010802038007" target="_blank"><img src="/images/beian_icon.png">京公网安备 11010802038007号</a>
</li>
<!--div style="width:300px;margin:0 auto; padding:20px 0;">
<a target="_blank" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010802038007" style="display:inline-block;text-decoration:none;height:20px;line-height:20px;"><img src="" style="float:left;"/><p style="float:left;height:20px;line-height:20px;margin: 0px 0px 0px 5px; color:#939393;">京公网安备 11010802038007号</p></a>
</div-->
<li>Powered by <a href="http://hexo.io/" target="_blank">Hexo</a></li>
<li>theme <a target="_blank" rel="noopener" href="https://github.com/zhwangart/hexo-theme-ocean">Ocean</a></li>
</ul>