-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.09.html
1855 lines (1792 loc) · 83.4 KB
/
index.09.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>
<head>
<title>est の 输入输出</title>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge">
<link href="https://feeds.feedburner.com/initiative" type="application/rss+xml" rel="alternate" title="est の 输入输出 RSS Feed" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="This blog is rated 🔞, viewer discretion is advised" />
<meta property="og:url" content="https://blog.est.im">
<meta property="og:type" content="website">
<meta property="og:title" content="est の 输入输出">
<meta property="og:description" content="This blog is rated 🔞, viewer discretion is advised">
<link rel="stylesheet" href="/theme/css/normalize.min.css" />
<link rel="stylesheet" href="/theme/css/style.css" />
<style>
body {
background: #ecedef url("/theme/img/ignasi_pattern_s.png") repeat;
}
</style>
</head>
<body class="list-body">
<nav class="nav-bar side-padding">
<h1 class="nav-header"><a href="/" class="nav-text">
est の 输入输出
</a></h1>
<div class="hamburger-menu">
<button>
<span></span>
<span></span>
</button>
<ul id="menu" class="hamburger-menu-overlay">
<li><a href="/" class="hamburger-menu-overlay-link">Home</a></li>
<li><a href="https://feeds.feedburner.com/initiative" class="hamburger-menu-overlay-link">RSS</a></li>
<li><a href="/about" class="hamburger-menu-overlay-link">About</a></li>
<li><a href="/category/archive" class="hamburger-menu-overlay-link">archive</a></li>
<li><a href="/category/stderr" class="hamburger-menu-overlay-link">stderr</a></li>
<li><a href="/category/stdin" class="hamburger-menu-overlay-link">stdin</a></li>
<li><a href="/category/stdout" class="hamburger-menu-overlay-link">stdout</a></li>
</ul>
</div>
</nav> <main class="card-container side-gutter">
<header class="list-header">
<p class="list-header-subtext">This blog is rated 🔞, viewer discretion is advised</p>
<!-- <h1 class="list-header-title">est の 输入输出</h1> -->
</header>
<!-- new article -->
<div class="card blog-card">
<article class="card-body">
<a href="/202104/stdout-005" rel="bookmark" >
<h2 class="card-title">Win10 自动设置开机锁屏壁纸</h2>
</a>
<p class="card-text"><p>Win10启动后,锁屏界面有一些每天更新的漂亮的墙纸,但是每个用户进去却只能看到默认的墙纸,不能自动切换。很是遗憾,于是搞了一段小脚本弥补。</p>
<p>找个地方比如桌面,右键新建一个 <code>est_win10_auto_wallpaper.bat</code></p>
<pre><code> @if (@X)==(@Y) @end /* JScript comment
@echo off
cscript //E:JScript %~n0.bat
exit /b %errorlevel%
*/
var oShell = new ActiveXObject("WScript.Shell") ;
var oFSO = new ActiveXObject("Scripting.FileSystemObject");
var sWinDir = oFSO.GetSpecialFolder(0);
var sPath = oShell.ExpandEnvironmentStrings('%LOCALAPPDATA%\\Packages\\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\\LocalState\\Assets\\')
var oFolderEnum = new Enumerator(oFSO.GetFolder(sPath).Files);
var aFiles = []
for (;!oFolderEnum.atEnd();oFolderEnum.moveNext()) {
// var item = oFolderEnum.item()
aFiles.push(oFolderEnum.item())
}
var aFiles2 = aFiles.sort(function(x,y){return new Date(y.DateLastAccessed).getTime() - new Date(x.DateLastAccessed).getTime()}).slice(3)
var sWallpaper;
// for (var i=0;i<aFiles2.length;i++){
for (var i in aFiles2){
// WScript.Echo('check ' + aFiles2[i].name + ' size: ' + aFiles2[i].size);
if(aFiles2[i].size > 500000){ // guess > 500KB is good wallpaper
sWallpaper = aFiles2[i].path
break;
}
}
if(sWallpaper){
// or fso.GetStandardStream(1) for stdout, 2 for stderr
// WScript.Echo('set to ' + sWallpaper);
oShell.RegWrite("HKCU\\Control Panel\\Desktop\\Wallpaper", sWallpaper);
oShell.Run("%windir%\\System32\\RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters 1, True");
}
</code></pre>
<p>Win+R输入 <code>shell:startup</code> 回车,把刚才的 <code>est_win10_auto_wallpaper.bat</code> 在这里创建一个快捷方式</p>
<p>解释下为啥要在 <code>shell:startup</code> 里创建快捷方式而不是直接放 .bat 。因为快捷方式可以设置当前运行目录,这样代码里的 <code>%~n0</code> 才能生效。懒得查询完整路径如何写了。。</p>
<p>然后这段代码其实用了一个比较高级的 <a href="https://stackoverflow.com/a/28250760/41948">.js .bat 混合格式</a>。因为 Windows Smart Screen 会拦截 WScript 的直接执行,认为特别危险。但是如果你在 cmd 里执行系统就觉得很安全。。。。嗯。。</p>
<p>吐槽1: 开始 → 启动 菜单都不见了。。。</p>
<p>吐槽2:好久没写 WScript 了感觉都忘完了。vbs 是肯定不会的了。<a href="https://docs.microsoft.com/en-us/previous-versions//hbxc2t98(v=vs.85)?redirectedfrom=MSDN">JScript 居然是 ESMAScript3</a>。好多现代写法都不支持。</p></p>
<div class="card-subtext muted-text">
<p>Posted <time datetime="2021-04-11T22:35:12+08:00">2021-04-11</time></p>
<p>stdout</p> </div>
</article>
</div>
<!-- new article -->
<div class="card blog-card">
<article class="card-body">
<a href="/202104/stdout-004" rel="bookmark" >
<h2 class="card-title">Mac 命令行终端里获得视频文件的长度</h2>
</a>
<p class="card-text"><p>记录一下,Mac OS X 10.6.8 或更高版本:</p>
<pre><code> mdls -name kMDItemDurationSeconds -name kMDItemFSName 1.mp4
</code></pre>
<p>这命令有一个很神经病的一点,同一个 .mp4 文件,获取只读的 TF 卡上的就没法获得视频长度,复制到可以读写的本地硬盘上就可以读出来。</p>
<p>或者在 Finder 里新建一个叫 <code>Movies</code> 的文件夹,把视频文件放进去,然后列表展示,表头右键,就可以选择显示长度。。</p>
<p>同理,建立一个叫 <code>Pictures</code> 的文件夹,可以列表展示图片尺寸。。</p>
<p>来自 <a href="https://superuser.com/questions/1024894/">superuser</a> 。真是神一般的设定。</p></p>
<div class="card-subtext muted-text">
<p>Posted <time datetime="2021-04-04T12:01:30+08:00">2021-04-04</time></p>
<p>stdout</p> </div>
</article>
</div>
<!-- new article -->
<div class="card blog-card">
<article class="card-body">
<a href="/202103/stdout-003" rel="bookmark" >
<h2 class="card-title">FastAPI/Starlette+Requests实现反向代理</h2>
</a>
<p class="card-text"><p>因为某些拉垮的业务需要,不得不在代码里去反向代理别的 HTTP API</p>
<p>一般格式如下:</p>
<pre><code> @app.get('/other/{other_path:path}')
@app.post('/other/{other_path:path}')
async def other_api(other_path: str, req: Request):
"""透传 API"""
host = 'http://example.intranet'
url = '{}/other/{}'.format(host, other_path)
body = bytes(await req.body()) or None
r = requests.request(
req.method, url,
headers={
'Cookie': req.headers.get('cookie') or '',
'Content-Type': req.headers.get('Content-Type')},
params=req.query_params, data=body, stream=True,
allow_redirects=False)
h = dict(r.headers)
h.pop('Content-Length', None)
return StreamingResponse(r.raw, headers=h, status_code=r.status_code)
</code></pre>
<p>解释一下为啥要这么写:</p>
<ol>
<li>采用 <code>stream=True</code> + <code>StreamingResponse</code>,防止上游给你返回一个GB体量的文件把 FastAPI 进程内存撑爆</li>
<li>只摘取浏览器的 <code>Cookie</code> + <code>Content-Type</code> 两个头。别的不给上游。</li>
<li>要去掉返回的 Content-Length 头。因为 StreamingResponse 会自己定义返回长度。</li>
</ol>
<p>这样写基本能跑起来了,但是有2个问题:</p>
<ol>
<li>如果上游返回一个 302/303/307 的跳转,那么很有可能把内网的跳转网址直接返回给浏览器了。因为 <a href="https://tools.ietf.org/html/rfc2616#section-14.30">HTTP/1.1 的标准 RFC2616</a> 强制规定,<code>Location</code> 的值必须是一个绝对网址。所以这个时候就冒犯一下这个规定,强行截断:<pre><code> loc = h.pop('Location', '')
if loc.startswith(host):
h['Location'] = loc[len(host):]
</code></pre>
</li>
</ol>
<p>注意这里不要用 <code>.lstrip()</code> 。这方法和你想象的完全不是一回事。它是基于单个字符的挨个替换而不是整个字符串。<br />
2. 实测这种在业务代码实现的「软」反向代理性能堪忧。上游4s左右的整个页面加载时间,反向代理之后就变成了 120s 左右。盲猜是 <code>StreamingResponse</code> 是一个字节一个字节去遍历迭代器?实测并不是。主要的锅还是 <code>Requests</code> 的 <code>.raw</code> 是按照 <code>chunked</code> 一段一段返回的。最好还是准备个 4KB 的 buffer,提高性能。解决方案是把 <code>r.raw</code> 改成 <code>r.raw.stream(4096000)</code> 性能一下就高了。注意这里不要用官方文档提供的 <code>.iter_contents()</code> 或者 <code>.iter_lines()</code> 这两者又会自作聪明的去解析文本编码或者换行符,降低了性能。</p></p>
<div class="card-subtext muted-text">
<p>Posted <time datetime="2021-03-30T15:07:01+08:00">2021-03-30</time></p>
<p>stdout</p> </div>
</article>
</div>
<!-- new article -->
<div class="card blog-card">
<article class="card-body">
<a href="/202103/stderr-003" rel="bookmark" >
<h2 class="card-title">纪念 Sewall Wright</h2>
</a>
<p class="card-text"><p>在这个3月即将结束的特殊日子里,纪念 Sewall Wright。尤其是那石破天惊的从相关性反推因果性的豚鼠花色实验。</p>
<p>豚鼠的花色,按照我们一般的理解是遗传的。但是两只豚鼠很多代近亲繁殖也不可能生产出纯色的豚鼠。那花色和遗传的因果性能通过相关性推出吗?</p>
<p>这位大神还真推断出来了</p>
<p><img alt="Sewall Wright first path diagram guinea pigs" src="/images/2021/stderr-003-1.jpg" /></p>
<p>插图来自最近听的一本书 <em>The Book of Why: The New Science of Cause and Effect</em> 第二章 From Buccaneers to Guinea Pigs: The Genesis of Causal Inference 。网上有 pdf 直接看:</p>
<p><a href="http://bayes.cs.ucla.edu/WHY/why-ch2.pdf">http://bayes.cs.ucla.edu/WHY/why-ch2.pdf</a></p>
<p>要知道他做出这个研究的时候,遗传学也就孟德尔水平,DNA 尚未发现!他假设豚鼠双亲各自有遗传因素 <code>H''</code> 和 <code>H'''</code> ,然后精子卵子 混合,一共有四种可能,<code>G</code>, <code>G'</code>, <code>G''</code>, <code>G'''</code>,如果他们生下2胎,那么他们各自的遗传因素为 <code>H</code> 和 <code>H'</code> 。他假设花色还收到相同的怀孕因素 <code>D</code> 影响,以及出生后生长的共同的环境因素 <code>E</code> 影响。那么要根据因果性预测花色,就像解方程一样计算每根路径的权重。</p>
<p>这位 Sewall Wright,人称 现代演化三杰(R.A.Fisher, J.B.S Haldane),逝世于 1988-03-03,真是君生我未生,我生君已去。</p></p>
<div class="card-subtext muted-text">
<p>Posted <time datetime="2021-03-25T23:56:41+08:00">2021-03-25</time></p>
<p>stderr</p> </div>
</article>
</div>
<!-- new article -->
<div class="card blog-card">
<article class="card-body">
<a href="/202102/stderr-002" rel="bookmark" >
<h2 class="card-title">Clubhouse 一些感受</h2>
</a>
<p class="card-text"><p>clubhouse 总体感觉,自从被那啥之后,群体就基本一岸两地的人,和大陆留学生为主了。而且真的以学生为主。如果有家业压力人,要么就是创投圈要么就是币圈大佬。</p>
<p>第一次发言是在一个 English Lounge 里面有几个英语老师在聊 dyslexia 。这单词我都不认识但是还是强行尬聊了。</p>
<p>我当时就胡扯说中文这种文字为载体的语言,符号和读音分离,可能压根就不存在拼音字母类语言的发音乱序导致的理解能力的问题。</p>
<p>房主后来因为要去讨论女权,就早早的关闭了房间。不知道是被我的暴论或无知吓到了。我也因为时间太晚就睡了。第二天醒来,觉得不过瘾,就去搜了一下 dyslexia 这个概念。发现果然汉语里也是存在的。而且 HK 有个调查发现有这个问题的学生比例(10%)比 UK (5%-7%) 还高。</p>
<p>我又自己回味了一下,可能真的有这么回事。于是去 V 站发了个贴《<a href="https://www.v2ex.com/t/752905">有哪些你一直认错、读反的词语你过了很久才发现?</a>》。第一个回帖就给我当头一棒,天赋异禀这个词,我是的确很长时间读成 天赋bing yi 的。</p>
<p>但是这个问题也有有趣,这个词在口语中很少用到,也不至于成为我对这个词语的理解障碍,所以假设人群中发生 dyslexia 比例是差不多的,但是不同的语言结构造成的后果和代价还是有不同的?</p>
<p>接下来的日子使用 Clubhouse 的感受是,大多数房间都是拉家常。挺无聊的。偶然能遇到一些非常有意思的非人文的,然后我又能听得懂的话题。</p>
<p>但是用起来这个 clubhouse 的严重短板就出现了:房间秩序很难维护。某人说了一个炸鱼的观点,大家争相反驳,但是并没有一个谁先举手谁先说的机制,然后加上网络延迟,你停了等别人,别人也出于礼貌停了等你,这样race condition死锁了。并且往往第一个反驳的人,还夹杂了自己的另外一个有问题的观点,然后大家就跑题到更远的地方去了。</p>
<p>总的感受,一个好的发言秩序是很难自发形成的。比如得靠信号好不掉线而且强有力的主持人。app 本身非常缺乏 civil conversation 的机制。这个和现实中的泡吧聊天还是有区别的。因为大家可能会看别人的嘴和动作判断自己是否需要去插嘴。也没办法从别人的表情和情绪判断环境和气氛是否融洽。</p>
<p>比如今天有个房间讨论生命的意义,大家吵得很厉害,就有人提议说怎么有个 Moderator 不说话,看简介是 UCLA 心理学从业人士。让他说说。结果好家伙,他一上来就说人死后其实意识还是存在的,有转世,有 afterlife。呃。无言以对。继续听下去的意义真的不大了。</p>
<p>而且真的有那么一两个志同道合,你也没法像现实中那样,拉他们单独对线。</p>
<p>但是这些其实都是可以通过 app 的交互解决的问题。比如</p>
<ul>
<li>允许大家做 emoji response 。表情回复。</li>
<li>比如给主持人一个 mute 按钮</li>
<li>搞个发言倒计时</li>
<li>跑题投票?</li>
<li>发言队列。排队说话。</li>
<li>搜索房间标题!</li>
<li>cue 别的房间。合并房间。</li>
</ul></p>
<div class="card-subtext muted-text">
<p>Posted <time datetime="2021-02-12T23:18:45+08:00">2021-02-12</time></p>
<p>stderr</p> </div>
</article>
</div>
<!-- new article -->
<div class="card blog-card">
<article class="card-body">
<a href="/202101/stderr-001" rel="bookmark" >
<h2 class="card-title">双亲+子女组成核心家庭(Nuclear Family)</h2>
</a>
<p class="card-text"><p>最近几个月最大的认知冲击是,我们这一代人可能是人类作为灵长类动物历史上非常罕见的核心家庭时期。</p>
<p>所谓「核心家庭」是 <a href="https://en.wikipedia.org/wiki/Nuclear_family">nuclear family</a> 这一概念的直译,表示一个最小、最基本的家庭单元。与该概念相对的是单亲家庭(single-parent family),或者家族(extended family,四代同堂、三代同堂那种大家庭)</p>
<p><img alt="guan video" src="/images/2021/stderr-001-1.png" /></p>
<p><a href="https://youtu.be/ashExaHC9cg?t=909">马前卒说</a>,「三五个人组成的小家庭,彻底成为独立的基层单位,在中国是80年代以后的事情」,所以差不多就是我们这代才人发生的。而且更为奇葩的是我们这一带是前无古人后无来者的独生子女一代。</p>
<p>无独有偶,在<a href="https://news.ycombinator.com/item?id=25723851">Hacker News上</a>也看到一篇趣文 「<a href="https://boyle.substack.com/p/can-zoom-save-the-american-family">视频聊天软件 ZOOM 能拯救美式家庭吗 Can Zoom Save the American Family?</a>」</p>
<blockquote>
<p>Corporate families, as defined by Steven Ruggles, a professor of history at the University of Minnesota, were the dominant family structure throughout the 1800s, named “corporate” because the family revolved around the family business. In the case of most American families in the pre-Industrial era, the family business was farming and many children were needed to sustain the land. Until 1850, three quarters of older Americans lived with their children and grandchildren in large family units. Industrialization changed this model. According to Brooks, the nuclear family had replaced the corporate family by 1920. By the 1960s, more than three quarters of all children were living with two parents, away from their extended families.</p>
</blockquote>
<p>简单的说,在19世纪(18xx年),美国的「产业式家族」是绝对主流,一个大家族围绕着某个生意。在工业化之前普遍的情况是北美农业,需要很多子女和孙子辈才能维持土地经营。1960年,也就是核子时代到来之后,全美有多达3/4比例的子女跟父母组成的「核心家庭」,才变成主流。</p>
<p>但是核心家庭是否稳定呢?美国的情况是1920年以后离婚率飙升,生育率下降。只有有钱人才有能力撑起一个 extended family。这段时期是个体的解放,家庭的衰败。「The Michelle Obama podcast」更是说,70年代那种街坊邻居帮照看小孩是旧时代残留的一种投射,但是也造就了她的成功。她说</p>
<blockquote>
<p>“It felt easier in those times to have a family unit because … success wasn’t defined by your ability to leave your nuclear unit and make it on your own…Every elder lived with someone. They shared expenses. They shared households. They shared duties in raising kids. There wasn’t this feeling that you were supposed to… raise a family on your own. That seems to be a new thing. The neighborhood I grew up in operated on this notion. It wasn’t just up to a parent to provide stability and love.”</p>
</blockquote>
<p>这让我突然有个启发,工业化不是生育率下降的根本原因,工业化造就的核心家庭才是。因为双亲既要双份收入,又要独立承担繁杂的扶养责任,这样的压力太大了。更严重的问题是孩子从小缺乏能走心的玩伴,以及亲身接触大人的生产劳动场面。成人的生产技能是很难直接传授给子女的,所以子女的成长压力又转嫁到学业。人类学家发现,在<a href="https://news.ycombinator.com/item?id=25386501">捕猎采集社会里一个幼儿是被30+个熟人带大的</a>。突然我对我自己童年的孤独感到释然了,也对我的娃产生了一种担忧。他们的玩伴呢?在大城市的小区里,他们也很少能接触到能教授他们技能和经验长辈熟人。</p>
<p>诺姆·乔姆斯基(就是 MIT 搞生成语法的那位<a href="https://zh.wikipedia.org/zh-cn/%E4%B9%94%E5%A7%86%E6%96%AF%E5%9F%BA%E8%B0%B1%E7%B3%BB">大佬</a>,Type-1图灵机,Type-2上下文相关,Type-3 Context-free,Type-4有限状态自动机的那个Chomsky)<a href="https://news.ycombinator.com/item?id=15847273">说</a>:</p>
<blockquote>
<p>“Neoliberal democracy. Instead of citizens, it produces consumers. Instead of communities, it produces shopping malls. The net result is an atomized society of disengaged individuals who feel demoralized and socially powerless.<br />
In sum, neoliberalism is the immediate and foremost enemy of genuine participatory democracy, not just in the United States but across the planet, and will be for the foreseeable future.”</p>
</blockquote>
<p>核心家庭也在瓦解民主社会。不过我倒是觉得也在反面催生另一种政治生态,比如美国黑人对 gang 的认同就超过了对单亲家庭的认同。</p>
<p>最后推荐一篇关于这个话题的长篇著作:《<a href="https://www.theatlantic.com/magazine/archive/2020/03/the-nuclear-family-was-a-mistake/605536/">The Nuclear Family Was a Mistake</a>》。<a href="https://www.thepaper.cn/newsDetail_forward_7260341">thepaper 有中文翻译</a>。作者是 NYT 的专栏 David Brooks。HN 的评论区<a href="https://news.ycombinator.com/item?id=22292660">1</a>, <a href="https://news.ycombinator.com/item?id=22288351">2</a> 也非常精彩。</p></p>
<div class="card-subtext muted-text">
<p>Posted <time datetime="2021-01-26T05:49:36+08:00">2021-01-26</time></p>
<p>stderr</p> </div>
</article>
</div>
<!-- new article -->
<div class="card blog-card">
<article class="card-body">
<a href="/202101/stdin-002" rel="bookmark" >
<h2 class="card-title">阶级滑落已经在发生</h2>
</a>
<p class="card-text"><p>刷到个视频</p>
<div class="div-iframe"><iframe src="https://www.youtube.com/embed/XXWYPeEfOb8?start=12:10" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen loading="lazy"></iframe></div>
<p>12:10 开始那个哥说的话,很有感触</p>
<blockquote>
<p>I think a lot of the anger stems from people who grew up believing their life was going to be a certain way and then it's not. right? And they don't have the opportunities their parents did.<br />
I think my generation is the first one that is going to do <em>less</em> well than their parents, that's kind of at root of a lot of this anger. A lot of the frustration people feel, is is expecting life to be a certain way, and then being like NOPE you can't afford a house, you have to pay back all this college debt, you can't afford health care, because that's gone up crazily.<br />
You know all this stuff makes people feel just frustrated and angry, they want a place to to to lash out and maybe it comes in the in in the ruse of of far-right politics or or whatever else, but um i think that problem has to be addressed.</p>
</blockquote>
<p>简单翻译一下:</p>
<blockquote>
<p>我们这代人,是第一波干得不如父母好的一代。可能接下来几代也是。或许这就是很多困惑和怒火的根源。人们总是期望生活会某种程度变好,但现实却是:不行。你买不起房,你给不起大学学费,你养老没依靠了。所以我们这代人希望有个发泄的渠道。比如通过极有翼政治体现,但无论如何这些问题都需要得到正视</p>
</blockquote>
<p>类似的论调,在 Occupy Wallstreet 的时候就看到过。说二战后美国经济极大发展,很多老一辈的人年轻的时候找工作,高中文凭随便去街上一转,就能找到类似 IBM 这种大公司的优良职位。所以老一辈压根没法理解为啥<a href="https://www.urban.org/sites/default/files/publication/99707/young_adults_living_in_parents_basements_0.pdf">有20%的美国年轻人都住在父母甚至祖父母的地下室</a>。</p>
<p>国内也有这种问题,其实也有很多啃老的住父母家的。但国内的说法不是阶级滑落,而是阶级「分化」。</p>
<p>然后恰好今天又看到这篇报道<a href="https://mp.weixin.qq.com/s/9N_F6k2a2Tu-o76F3-Q0IQ">《一群穷孩子的人生实验》</a></p>
<blockquote>
<p>实际上,他们早已在漫长过程里修正了对自我的认识。他们确实度过过一个「被选中」的阶段,觉得可以通过努力,成为伟大的、和别人都不一样的人。但后来慢慢发现,大家本来都是不一样的,伟大和成功也没有确切标准,而且——外部环境对一个人的影响太大了。<br />
在澳洲,孩子们还是「一如既往地穷,还是舍不得花钱」,几乎所有人都是一边上学一边打工,或者送外卖,或者在餐厅。他们不再志存高远、想着成为科学大牛,但都是踏实努力的人。<br />
在与徐博的越洋电话里,我们聊到青云计划远大的目标,和后来逐渐残酷的现实,以及目前生活里的一些困境,谈话渐渐黯淡下来。准备挂电话的时候,他突然叫住我,「其实我还有一句话想说,」他有些哽咽:「从外界看,这可能是一个非常失败的投资,是一个不太成功的教育案例。但我觉得它是成功的,它教会了我们,如何做一个向上的人、一个正直的人。」Image</p>
</blockquote>
<p>我感觉国内机会多,还有空间让普通人成为一个向上的人,正直的人,但是假想未来10年、20年后,年轻人恐怕连大城市的一个房租都给不起,各行业都残暴竞争,这样的未来恐怕跟视频里那个老美描述的现状也差不多吧。阶级滑落是一个无可奈何的事。</p></p>
<div class="card-subtext muted-text">
<p>Posted <time datetime="2021-01-19T20:53:44+08:00">2021-01-19</time></p>
<p>stdin</p> </div>
</article>
</div>
<!-- new article -->
<div class="card blog-card">
<article class="card-body">
<a href="/202101/stdin-001" rel="bookmark" >
<h2 class="card-title">古之学者为己</h2>
</a>
<p class="card-text"><blockquote>
<p>科文的所有道理,都是以“我”为主,这可是个特别难得的品格。很多人接触文化艺术,是为了别人。英文中有个专门的名词 —— “art snob”,也就是“艺术势利小人”。</p>
<p>他们并不真的欣赏文化,他们喜欢的是谈论文化。他们看电影是为了批评导演,他们读书是为了获得谈资,他们参加音乐会是为了自拍。他们特别关注别人给文化艺术划分的高中低档,以高档为荣,以低档为耻 —— 他们自己从来不知道怎么分档。他们能滔滔不绝地背诵艺术家的生平八卦,但是从未被艺术打动过。</p>
<p>他们关心的不是自己,而是“别人眼中的自己”。买幅油画挂在家里,是因为自己喜欢这幅画呢,还是为了向客人彰显自己的品位呢?有句话叫“古之学者为己,今之学者为人” —— 何止学习是为了别人,欣赏艺术也是为了别人。</p>
</blockquote>
<p>来自 万维钢·精英日课第一季 《谁想成为(文化)亿万富翁(下) 》</p></p>
<div class="card-subtext muted-text">
<p>Posted <time datetime="2021-01-07T20:50:42+08:00">2021-01-07</time></p>
<p>stdin</p> </div>
</article>
</div>
<!-- new article -->
<div class="card blog-card">
<article class="card-body">
<a href="/202101/stdout-002" rel="bookmark" >
<h2 class="card-title">OpenWRT 实现 Cloudflare 动态域名 dynamic DNS</h2>
</a>
<p class="card-text"><p>首先得有公网 IP (废话),然后你得 OpenWRT 路由器桥接直拨。</p>
<p>这个方法的核心是通过 <code>ifstatus wan | jsonfilter -e '@["ipv4-address"][0].address'</code> 命令得到本机 WAN 的公网 IP。</p>
<p>根据官方的<a href="https://support.cloudflare.com/hc/en-us/articles/360020524512-Manage-dynamic-IPs-in-Cloudflare-DNS-programmatically">说明</a>走</p>
<ol>
<li>创建 <a href="https://dash.cloudflare.com/profile/api-tokens">API Token</a> 。权限选 <code>All Zones</code>,得到 <code>TOKEN</code></li>
<li>验证 API 是否 ok<br />
curl - X GET "https://api.cloudflare.com/client/v4/user/tokens/verify" \<br />
-H "Authorization: Bearer TOKEN" \<br />
-H "Content-Type:application/json"</li>
<li>获取 <code>:zone_identifier</code>。找那个长得像 ID 的<br />
curl - X GET "https://api.cloudflare.com/client/v4/zones"\ <br />
-H "Authorization: Bearer TOKEN" \<br />
-H "Content-Type:application/json"</li>
<li>因为脑残的 RESTful 风格 API 无法实现 upsert,先创建个DNS。得到 <code>:identifier</code><br />
curl -svk -X POST "https://api.cloudflare.com/client/v4/zones/:zone_identifier/dns_records"\<br />
-H "Authorization: Bearer TOKEN" \<br />
-H "Content-Type: application/json" \<br />
-d '{"type":"A","name":"my_ddns.est.im","content":"'$(ifstatus wan | jsonfilter -e '@["ipv4-address"][0].address')'","ttl":600,"proxied":false}'</li>
<li>日常更新 DNS<br />
curl -svk -X PUT "https://api.cloudflare.com/client/v4/zones/:zone_identifier/dns_records/:identifier" \<br />
-H "Authorization: Bearer TOKEN" \<br />
-H "Content-Type: application/json" \<br />
-d '{"type":"A","name":"my_ddns.est.im","content":"'$(ifstatus wan | jsonfilter -e '@["ipv4-address"][0].address')'","ttl":600,"proxied":false}'</li>
</ol>
<p>感觉挺麻烦。而且没法 API 网关自动把调用者的 IP 设为 A 记录。但是聊胜于无吧。高版本的 OpenWRT <a href="https://openwrt.org/docs/guide-user/base-system/ddns">/usr/lib/ddns/services<br />
</a> 直接支持 Cloudflare 了不用这么麻烦了。</p></p>
<div class="card-subtext muted-text">
<p>Posted <time datetime="2021-01-05T23:36:09+08:00">2021-01-05</time></p>
<p>stdout</p> </div>
</article>
</div>
<!-- new article -->
<div class="card blog-card">
<article class="card-body">
<a href="/202101/stdout-001" rel="bookmark" >
<h2 class="card-title">OpenWRT 随机设置 PPPoE 拨号的 MAC 地址 Randomize WAN MAC address in OpenWRT PPPoE</h2>
</a>
<p class="card-text"><p>新年第一贴!</p>
<p>Run the command before connect to PPPoE or as cronjob</p>
<p>添加一个重启的定时任务,在重启之间执行一个命令:</p>
<pre><code> uci set network.wan.mac_addr=$(hexdump -n3 -e'1/3 "8c:8d:8e" 3/1 ":%02X" "\n"' /dev/random) && uci commit network
</code></pre>
<p>为什么要在拨号前随机生成WAN口的 MAC 地址呢?嘿嘿。</p></p>
<div class="card-subtext muted-text">
<p>Posted <time datetime="2021-01-01T00:27:52+08:00">2021-01-01</time></p>
<p>stdout</p> </div>
</article>
</div>
<!-- new article -->
<div class="card blog-card">
<article class="card-body">
<a href="/202012/stderr-012" rel="bookmark" >
<h2 class="card-title">北美 VPS 推荐:Racknerd</h2>
</a>
<p class="card-text"><p>以前买的 hostmem 总感觉高峰期速度不行。Racknerd 这家看上去英语比较地道,感觉还行?于是跑了个脚本把它家的套餐遍历了一下:</p>
<pre><code> mkdir -p ~/Downloads/racknerd; cd $_
for i in $(seq 1 423); do wget -t 0 -T 5 -U 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1' -O ~/Downloads/racknerd/$i.html; done
for f in $(ls -rt .); do python -c 'm=__import__("re").search(r"product-title\">(.+)</p>.*(\d).+?CPU.+?([\d\.]+).+SSD.*\n([\d\.]+\s?.B)\sRAM.*\n(\d+.B).+Band.+?(\$[\d+\.]+)(/(\w+)|.+?\s(\w+ly))", open("'$f'").read(), 16);print("'$f' {},{}C,{}G,{},{},{} {}".format(*m.groups()[:7])) if m else "'$f'" '; sleep 0.1; done
</code></pre>
<p>得到下面的表格:</p>
<style type="text/css" id="pre-table">
style#pre-table + table{
font-size: 80%;
line-height: 1;
}
style#pre-table + table td,th {
padding: 0.1em 0.3em;
}
style#pre-table + table thead tr th:last-child{
width: 40%;
}
</style>
<table>
<thead>
<tr>
<th>ID</th>
<th>CPU</th>
<th>SSD</th>
<th>RAM</th>
<th>Traffic</th>
<th>Price</th>
<th>Name</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>1C</td>
<td>30G</td>
<td>512MB</td>
<td>500GB</td>
<td>$22.99 Annually</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=1">KVM-512MB</a></td>
</tr>
<tr>
<td>20</td>
<td>2C</td>
<td>50G</td>
<td>1024MB</td>
<td>1000GB</td>
<td>$17.99 Monthly</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=20">KVM-1GB</a></td>
</tr>
<tr>
<td>21</td>
<td>3C</td>
<td>75G</td>
<td>2048MB</td>
<td>2000GB</td>
<td>$20.59 Monthly</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=21">KVM-2GB</a></td>
</tr>
<tr>
<td>22</td>
<td>4C</td>
<td>130G</td>
<td>4096MB</td>
<td>3000GB</td>
<td>$24.59 Monthly</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=22">KVM-4GB</a></td>
</tr>
<tr>
<td>23</td>
<td>5C</td>
<td>170G</td>
<td>6144MB</td>
<td>4000GB</td>
<td>$27.59 Monthly</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=23">KVM-6GB</a></td>
</tr>
<tr>
<td>24</td>
<td>6C</td>
<td>220G</td>
<td>8192MB</td>
<td>5000GB</td>
<td>$36.59 Monthly</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=24">KVM-8GB</a></td>
</tr>
<tr>
<td>25</td>
<td>7C</td>
<td>300G</td>
<td>12288MB</td>
<td>6000GB</td>
<td>$55.99 Monthly</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=25">KVM-12GB</a></td>
</tr>
<tr>
<td>26</td>
<td>3C</td>
<td>55G</td>
<td>2048MB</td>
<td>2000GB</td>
<td>$88.00 Annually</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=26">BLACK FRIDAY - 2GB KVM</a></td>
</tr>
<tr>
<td>27</td>
<td>1C</td>
<td>40G</td>
<td>512MB</td>
<td>1000GB</td>
<td>$22.99 Annually</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=27">OVZ-768MB</a></td>
</tr>
<tr>
<td>28</td>
<td>1C</td>
<td>40G</td>
<td>512MB</td>
<td>1000GB</td>
<td>$5.59 Monthly</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=28">OVZ-1536MB</a></td>
</tr>
<tr>
<td>33</td>
<td>8C</td>
<td>300G</td>
<td>12288MB</td>
<td>10000GB</td>
<td>$55.99 Monthly</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=33">OVZ-12GB</a></td>
</tr>
<tr>
<td>40</td>
<td>3C</td>
<td>33G</td>
<td>3GB</td>
<td>3000GB</td>
<td>$83.33 Annually</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=40">RackNerd - BLOOMING 3 SPECIAL - 3GB KVM</a></td>
</tr>
<tr>
<td>46</td>
<td>6C</td>
<td>80G</td>
<td>8192MB</td>
<td>5000GB</td>
<td>$99.00 Annually</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=46">Custom Package - 8GB KVM</a></td>
</tr>
<tr>
<td>51</td>
<td>1C</td>
<td>11G</td>
<td>512MB</td>
<td>2500GB</td>
<td>$12.71 Annually</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=51">XMas Sale - 512MB KVM</a></td>
</tr>
<tr>
<td>52</td>
<td>1C</td>
<td>20G</td>
<td>1.5GB</td>
<td>4500GB</td>
<td>$15.71 Annually</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=52">XMas Sale - 1.5GB KVM</a></td>
</tr>
<tr>
<td>53</td>
<td>2C</td>
<td>38G</td>
<td>2.5GB</td>
<td>6500GB</td>
<td>$28.71 Annually</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=53">XMas Sale - 2.5GB KVM</a></td>
</tr>
<tr>
<td>56</td>
<td>3C</td>
<td>25G</td>
<td>2GB</td>
<td>4000GB</td>
<td>$21.80 Annually</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=56">2020 New Year - 2GB KVM Flash Sale</a></td>
</tr>
<tr>
<td>57</td>
<td>3C</td>
<td>40G</td>
<td>2.5GB</td>
<td>6000GB</td>
<td>$27.80 Annually</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=57">2020 New Year - 2.5GB KVM Flash Sale</a></td>
</tr>
<tr>
<td>58</td>
<td>3C</td>
<td>25G</td>
<td>2GB</td>
<td>3000GB</td>
<td>$21.80 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=58">LEB NEW YEAR - 2GB KVM Flash Sale</a></td>
</tr>
<tr>
<td>59</td>
<td>3C</td>
<td>40G</td>
<td>2.5GB</td>
<td>5000GB</td>
<td>$27.80 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=59">LEB NEW YEAR - 2.5GB KVM Flash Sale</a></td>
</tr>
<tr>
<td>60</td>
<td>1C</td>
<td>60G</td>
<td>2048MB</td>
<td>2500GB</td>
<td>$17.65 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=60">LEB NEW YEAR - 2GB OpenVZ 7 VPS</a></td>
</tr>
<tr>
<td>61</td>
<td>2C</td>
<td>50G</td>
<td>2GB</td>
<td>4000GB</td>
<td>$36 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=61">LARGE STORAGE - 2GB KVM</a></td>
</tr>
<tr>
<td>62</td>
<td>3C</td>
<td>80G</td>
<td>4GB</td>
<td>5000GB</td>
<td>$59 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=62">LARGE STORAGE - 4GB KVM</a></td>
</tr>
<tr>
<td>63</td>
<td>4C</td>
<td>140G</td>
<td>6GB</td>
<td>6000GB</td>
<td>$95 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=63">LARGE STORAGE - 6GB KVM</a></td>
</tr>
<tr>
<td>64</td>
<td>4C</td>
<td>200G</td>
<td>8GB</td>
<td>8000GB</td>
<td>$135 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=64">LARGE STORAGE - 8GB KVM</a></td>
</tr>
<tr>
<td>66</td>
<td>2C</td>
<td>35G</td>
<td>2GB</td>
<td>4000GB</td>
<td>$22.80 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=66">Latest 2020 New Year - 2GB KVM Flash Sale</a></td>
</tr>
<tr>
<td>73</td>
<td>1C</td>
<td>18G</td>
<td>1GB</td>
<td>2500GB</td>
<td>$16.68 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=73">RackNerd Lunar RED ENVELOPE Promo - 1GB KVM</a></td>
</tr>
<tr>
<td>75</td>
<td>2C</td>
<td>32G</td>
<td>3GB</td>
<td>4000GB</td>
<td>$24.68 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=75">RackNerd Lunar RED ENVELOPE Promo - 3GB KVM</a></td>
</tr>
<tr>
<td>76</td>
<td>3C</td>
<td>45G</td>
<td>4GB</td>
<td>6000GB</td>
<td>$35.68 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=76">RackNerd Lunar RED ENVELOPE Promo - 4GB KVM</a></td>
</tr>
<tr>
<td>87</td>
<td>3C</td>
<td>32G</td>
<td>2GB</td>
<td>5500GB</td>
<td>$22.55 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=87">Flash Sale Promo - 2GB RAM</a></td>
</tr>
<tr>
<td>88</td>
<td>2C</td>
<td>15G</td>
<td>1GB</td>
<td>4500GB</td>
<td>$15.38 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=88">Flash Sale Promo - 1GB RAM</a></td>
</tr>
<tr>
<td>98</td>
<td>3C</td>
<td>35G</td>
<td>2.5GB</td>
<td>6000GB</td>
<td>$23.50 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=98">February Flash Sale 2.5GB KVM</a></td>
</tr>
<tr>
<td>103</td>
<td>3C</td>
<td>40G</td>
<td>2.5GB</td>
<td>6500GB</td>
<td>$25.50 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=103">LEB KVM VPS Flash Sale 2.5GB KVM</a></td>
</tr>
<tr>
<td>113</td>
<td>1C</td>
<td>12G</td>
<td>768 MB</td>
<td>2000GB</td>
<td>$13.93 Annually</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=113">Valentine's Day Special - 768MB KVM</td>
</tr>
<tr>
<td>114</td>
<td>2C</td>
<td>23G</td>
<td>1.5GB</td>
<td>4000GB</td>
<td>$19.95 Annually</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=114">Valentine's Day Special - 1.5GB KVM</td>
</tr>
<tr>
<td>120</td>
<td>1C</td>
<td>15G</td>
<td>1GB</td>
<td>2500GB</td>
<td>$14.89 Annually</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=120">2K20 - 1GB KVM Flash Sale</a></td>
</tr>
<tr>
<td>121</td>
<td>2C</td>
<td>25G</td>
<td>2GB</td>
<td>4500GB</td>
<td>$21.89 Annually</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=121">2K20 - 2GB KVM Flash Sale</a></td>
</tr>
<tr>
<td>122</td>
<td>3C</td>
<td>33G</td>
<td>3GB</td>
<td>6000GB</td>
<td>$29.89 Annually</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=122">2K20 - 3GB KVM Flash Sale</a></td>
</tr>
<tr>
<td>124</td>
<td>2C</td>
<td>28G</td>
<td>2.5GB</td>
<td>4000GB</td>
<td>$22.19 Annually</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=124">RackNerd KVM VPS Sale - 2.5GB</a></td>
</tr>
<tr>
<td>128</td>
<td>2C</td>
<td>20G</td>
<td>1.5GB</td>
<td>4000GB</td>
<td>$16.55 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=128">NEW WEBSITE SPECIAL! 1.5GB KVM</a></td>
</tr>
<tr>
<td>129</td>
<td>3C</td>
<td>40G</td>
<td>2.5GB</td>
<td>6500GB</td>
<td>$23.49 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=129">NEW WEBSITE SPECIAL! 2.5GB KVM</a></td>
</tr>
<tr>
<td>130</td>
<td>3C</td>
<td>45G</td>
<td>3.5GB</td>
<td>7000GB</td>
<td>$28.99 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=130">NEW WEBSITE SPECIAL! 3.5GB KVM</a></td>
</tr>
<tr>
<td>135</td>
<td>2C</td>
<td>20G</td>
<td>1.5GB</td>
<td>4000GB</td>
<td>$16.55 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=135">LEB New Website Special - 1.5GB KVM</a></td>
</tr>
<tr>
<td>136</td>
<td>3C</td>
<td>45G</td>
<td>3.5GB</td>
<td>7000GB</td>
<td>$28.99 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=136">LEB New Website Special - 3.5GB KVM</a></td>
</tr>
<tr>
<td>137</td>
<td>3C</td>
<td>40G</td>
<td>2.5GB</td>
<td>6500GB</td>
<td>$23.49 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=137">LEB New Website Special - 2.5GB KVM</a></td>
</tr>
<tr>
<td>141</td>
<td>2C</td>
<td>20G</td>
<td>2GB</td>
<td>4000GB</td>
<td>$18.88 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=141">White Day Flash Sale - 2GB KVM</a></td>
</tr>
<tr>
<td>147</td>
<td>3C</td>
<td>40G</td>
<td>3GB</td>
<td>4000GB</td>
<td>$27.88 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=147">EOM - March 3GB KVM</a></td>
</tr>
<tr>
<td>151</td>
<td>1C</td>
<td>18G</td>
<td>1GB</td>
<td>2500GB</td>
<td>$16.68 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=151">LEB SPECIAL- KVM VPS 1GB</a></td>
</tr>
<tr>
<td>153</td>
<td>3C</td>
<td>45G</td>
<td>4GB</td>
<td>6000GB</td>
<td>$35.68 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=153">LEB SPECIAL- KVM VPS 4GB</a></td>
</tr>
<tr>
<td>154</td>
<td>3C</td>
<td>55G</td>
<td>4GB</td>
<td>8000GB</td>
<td>$33.25 Annually</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=154">(Custom) 4GB KVM Special</a></td>
</tr>
<tr>
<td>155</td>
<td>1C</td>
<td>20G</td>
<td>768 MB</td>
<td>3000GB</td>
<td>$15.68 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=155">3 Day FLASH SALE - 768MB KVM</a></td>
</tr>
<tr>
<td>156</td>
<td>2C</td>
<td>35G</td>
<td>2GB</td>
<td>5000GB</td>
<td>$22.68 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=156">3 Day FLASH SALE - 2GB KVM</a></td>
</tr>
<tr>
<td>157</td>
<td>3C</td>
<td>50G</td>
<td>2.5GB</td>
<td>6500GB</td>
<td>$26.25 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=157">(Custom) 2.5GB KVM VPS - Ticket #855790</a></td>
</tr>
<tr>
<td>162</td>
<td>2C</td>
<td>22G</td>
<td>1.5GB</td>
<td>4500GB</td>
<td>$20 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=162">LIMITED STOCK for CN 1.5GB KVM</a></td>
</tr>
<tr>
<td>164</td>
<td>1C</td>
<td>15G</td>
<td>1GB</td>
<td>3000GB</td>
<td>$15 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=164">Easter Sale - KVM 1GB Special</a></td>
</tr>
<tr>
<td>165</td>
<td>2C</td>
<td>27G</td>
<td>2GB</td>
<td>5000GB</td>
<td>$24 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=165">Easter Sale - KVM 2GB Special</a></td>
</tr>
<tr>
<td>167</td>
<td>1C</td>
<td>22G</td>
<td>1GB</td>
<td>3000GB</td>
<td>$17.80 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=167">1G RAM KVM VPS Special</a></td>
</tr>
<tr>
<td>168</td>
<td>2C</td>
<td>27G</td>
<td>2GB</td>
<td>5000GB</td>
<td>$24 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=168">2G RAM KVM VPS Special</a></td>
</tr>
<tr>
<td>169</td>
<td>3C</td>
<td>40G</td>
<td>3.5GB</td>
<td>6500GB</td>
<td>$34 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=169">3.5G RAM KVM VPS Special</a></td>
</tr>
<tr>
<td>171</td>
<td>3C</td>
<td>25G</td>
<td>2.5GB</td>
<td>5000GB</td>
<td>$22 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=171">2.5GB KVM VPS - FLASH SALE 2020</a></td>
</tr>
<tr>
<td>178</td>
<td>1C</td>
<td>15G</td>
<td>1GB</td>
<td>3000GB</td>
<td>$13.50 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=178">1GB KVM Flash Sale</a></td>
</tr>
<tr>
<td>179</td>
<td>1C</td>
<td>20G</td>
<td>1.5GB</td>
<td>2500GB</td>
<td>$15.99 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=179">1.5GB KVM Flash Sale</a></td>
</tr>
<tr>
<td>180</td>
<td>2C</td>
<td>30G</td>
<td>2.5GB</td>
<td>4000GB</td>
<td>$22.19 /YEAR</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=180">2.5GB KVM Flash Sale</a></td>
</tr>
<tr>
<td>181</td>
<td>1C</td>
<td>20G</td>
<td>1.5GB</td>
<td>3000GB</td>
<td>$15.88 Annually</td>
<td><a href="https://my.racknerd.com/aff.php?aff=1865&pid=181">Birthday KVM VPS Sale - 1.5GB KVM</a></td>
</tr>