@thphd
@thphd
2047前站长
关注的小组(6)
动态 帖子 639 评论 2476 短评 3 收到的赞 6973 送出的赞 5210
  1. thphd   在小组 2047 回复文章

    老生常谈,为啥港台人可以把zhina脱口而出?(原贴2分钟内居然新增了20个回复)

    请不要把没有门槛的讨论区的泼妇骂街拿到2047上来问为什么

  2. thphd   在小组 2047 回复文章

    Johnson这个词,中港台翻译差异很大啊。

    首先

    其实

    • 人名翻译最关键是和非人名的词汇区分,例如把Johnson翻译成养生会造成混乱。由于各地用语习惯不同,人名翻译当然也不同。

    • 各地方言口音不同。庄逊在广东话中读作 zhong-shon,与Johnson非常接近。

    • Johnson在大陆翻译成约翰逊是受北欧Johanssen/Johansson的影响。

  3. thphd   在小组 2047 回复文章

    为什么中国人现在老喜欢动不动扯三观正不正?

    因为人类社会的很多矛盾本质上是观念问题,只要转换了观念,矛盾就迎刃而解。

    比如说老公打我怎么办,那就离婚啊,为什么不离呢,因为你对婚姻的观念过时了。

    爱情,婚姻,吃中药,虎妈……一切现代生活中的矛盾,只要不触及刑法的,基本上可以归为当事人观念不合。

    久而久之,大家发现因为观念问题,自讨苦吃的人数量还挺多的,就逐渐形成了凡事先从【观念】入手的的习惯。

  4. thphd   在小组 2047 回复文章

    一点关于渐进改革的个人想法,和对2047的期待

    请问楼主在哪里看到本社区是自由派社区的

  5. thphd   在小组 2047 回复文章

    在一个民主的国家里,网民应不应该有胡说八道和阴阳怪气的自由?

    你不认识我,又要跟我说话,那就必须我朋友引荐,或者我朋友的朋友引荐。

    至于言论自由,此处正确的问法是,用噪音影响他人工作是否违法。

  6. thphd   在小组 2047 回复文章

    浅谈海外民运的历史

    文昭和法轮功什么关系?我印象中文昭没传过此教啊。

  7. thphd   在小组 江湖 回复文章

    【站內調查】你為何離開新品蔥?

    品葱相关请发到【江湖】。已转。

  8. thphd   在小组 2047 回复文章

    【肥宅繪圖】2047看板娘

    相信你已经做好准备了

    • breasts too pronounced. in a weird way.

    • bang kinda messy.

    • never use the liren logo. the liren logo is mostly for paying tribute to liren college, not aesthetics. 2047 doesn't have an official logo yet.

  9. thphd   在小组 江湖 回复文章

    上面下达指示,说要做豆瓣海外版

  10. thphd   在小组 江湖 发表文章

    既然品葱注定药丸,为什么还要

    因为胜者名留青史。

  11. thphd   在小组 站务 回复文章

    关于本站帖子的浏览数的备忘

  12. thphd   在小组 站务 发表文章

    关于本站帖子的浏览数的备忘

    作者本人登录状态是刷不出来的

    其他无脑刷,比如疯狂F5也是无效的

    爬虫刷、脚本刷也是无效的

    总之,本站帖子的浏览数约等于被人实际点开的次数

  13. thphd   在小组 江湖 发表文章

    code syntax highlight

    直接拿highlight.js来用

    # python
    def add(a,b):
        return a+b
    
    // javascript
    function add(a,b){
        return a+b
    }
    
    // c
    int add(int a, int b){
        return a+b;
    }
    
  14. thphd   在小组 站务 回复文章

    题库里的题也太难了吧?

  15. thphd   在小组 站务 回复文章

    题库里的题也太难了吧?

    题库是只有管理员可见,楼主(管理员之一)的做法属于透题,从此这道题的效果就要打折扣了。

    下不为例。

    此外,下次娜姐如果再看到有人抱怨“题目太简单了”,提醒他们来看此帖。

  16. thphd   在小组 江湖 回复文章

    葱葱日報:葱葱用戶天龍男無奈屈服管理員稱:【緊跟品蔥主流】友站變化令人唏噓。

    这事情,如果站长支持闫丽梦,就非常好处理,毫无压力

    如果站长反对闫丽梦,也非常好处理,毫无压力

    如果站长不表态,让各位用户打一架,谁赢了听谁的,就会变成这个样子

    剧本我都能背出来。鹿说来呀,出招吧

    对方出招,鹿说,你居然对管理员出招,看我怎么让其他人围殴你!!

    对方马上拿出诊断报告开始现学现卖,鹿儿陷入被紧箍咒状态,围观群众慕臭而来


    所以我觉得,品葱站长在这种事情上,应该表态。如果我是品葱站长,这事情就非常简单,挺闫丽梦的、喊中共病毒的,一律封禁就完了。

    蒹葭苍苍封得,郭虫上脑封不得?那就是站长自己科学素养的问题了。

  17. thphd   在小组 江湖 回复文章

    上面下达指示,说要做豆瓣海外版

    @libgen #103775 刚刚才考察完mastodon(web真是日新月异),考察长毛象ing

  18. thphd   在小组 站务 发表文章

    (已废除)《管理细则》已通过并纳入《服务条款》

    《管理细则》正文见 t8055。将作为今后日常违规处理依据。

    《服务条款》已相应更新。

    感谢所有参与《细则》制定及修订工作的网友。

  19. thphd   在小组 2047 回复文章

    【端传媒】水炮车、防暴警与伞阵:军政府驱散示威者的曼谷夜晚

    这就是不禁社交媒体+不禁美剧的下场,皇帝都给你掀翻下去。

  20. thphd   在小组 2047 回复文章

    拜登儿子邮件门是真是假?经过严谨分析,真相只有一个!

    2047作为一个不知名的小众网站,估计是没什么人看的

  21. thphd   在小组 站务 回复文章

    我建议开设一个匿名功能

    品葱和膜乎,都有“匿名用户”。

    匿名用户,可以说是臭名昭著了,因为用匿名账户的人,通常都是为了搞破坏又不用负责,而不是真有话想说。

    一个匿名用户,背后可能有几十个操作者,只要其中有一个操作者捣乱,就会让人很头痛。

    所以我是反对“匿名用户”的(之前处理过一次),但我们也不是说绝对禁止,也是看具体情况。

    总之,可以开小号,公共账户也可以搞,但是违规也是要封号的,前面讲过了。


    但是品葱站长觉得,这样不行,还是要允许大家前台匿名发言。所以他就连夜上线了一个新功能,允许大家前台匿名、后台实名。

    problem is, 品葱是匿名论坛,后台本来就匿名的,前台为什么要再匿名一次?

    真正的原因是,品葱有些高声望的用户,比如某些管理员,做过很多很恶心的事情,比如把其他用户砍死了,不但不承认自己的问题,还要污蔑人家是网军。

    这样搞久了之后,品葱的高声望用户,大部分就退葱了,而愿意留下来当管理员的那些,风评就特别差,每天走在路上,都被路人投以鄙夷的眼神,不管走到哪个帖子里,帖子的讨论气氛就会瞬间消失。

    这样下去对论坛的人气肯定是不利的。

    为了让这些管理员能够正常地工作和生活,避免他们被舆论压力伤害,同时也为了避免这些管理员风评太差影响人气,站长就特别给他们定做了这个前台匿名功能,这样以后他们想揍人的时候就可以先匿名,然后随便揍,揍完了别人还抓不到把柄。相当于把警察变成了黑社会,让新品葱从 以警治国 转向 以黑治国。

    这就是为什么只有一定声望以上才能匿名,而不是所有人都能匿名。

    而且有了这个功能之后,站长在后台其实是可以看到匿名者是谁,因此他可以亲自导演各种各样的好戏,由于只有他能看到后台的记录,在站务斗争中他就掌握了绝对优势,不管他想整死谁,只要出示一份伪造的发帖记录,说某个匿名的评论其实是谁谁谁发的就行了。反正现在他身边的管理员没有一个懂技术的,必然无条件支持站长。

    我建议呢,如果还有谁每天在品葱上玩耍的,在自己签名档写个声明,“本人绝对不会使用匿名功能,所有匿名发言均不是本人”,将来被砍死的时候,或许还能保留一点尊严。


    当然,品葱站长也可以说,凡是匿名发言一律不追究。但是那样的话,如果开放给所有人使用,品葱会瞬间爆炸的。最后也只能给少数人作为专政工具来用。

    从我个人角度,我觉得如果我们的管理员经常用匿名身份发言,对网站形象上是扣分的。

  22. thphd   在小组 江湖 回复文章

    上面下达指示,说要做豆瓣海外版

  23. thphd   在小组 江湖 发表文章

    上面下达指示,说要做豆瓣海外版

    理论依据:https://tech.qq.com/a/20161229/007995.htm 《人民日报海外版:自信国度应该容下无数个豆瓣》

    书记跟我说,新华社的意思是现在中国要N个自信,而自信的中国必须有超过一个豆瓣,上面希望你们单位来抓这个工作

    我跟书记说,搞一个豆瓣2,技术上是没有问题的,钱怎么办

    书记看了我一眼,说,钱你们自己想办法,你们五道口不是办网络社区很有一套嘛,这个工作你们如果不做,就真是辜负了党和国家对你们的栽培。

    昨晚刚做了一个todolist

    1. 复制豆瓣,尤其是豆瓣最近被砍了很多功能
    2. 拿下豆瓣域名
    3. 批量引入豆瓣被封号的高质量用户
    4. 拿下豆瓣备案号

    现在只做了一项,难受

  24. thphd   在小组 2047 回复文章

    MV | LeLe Farley - Donald the Pooh (OFFICIAL MUSIC VIDEO)

    旋律和歌词不错,还有优化提升空间。【尊李反习倒川】的套路我还是第一次在YouTube上看到,新唐人赶快抄作业。

    @Ambulance 是的,辱葱了。

  25. thphd   在小组 2047 发表文章

    我亲自教大家做网站(3)

    第一节课讲了HTML和CSS,第二节课讲了TCP/IP,本节我们继续讲TCP,以及HTTP。

    上课之前先给大家打预防针,这个做网站系列教程注重的是原理,将来不管是做一个网络留言板,还是做一个google/facebook,都能派上用场。

    现在网上很多所谓教程,敲几下键盘就搭好一个wordpress/nodebb,虽然快速地实现了目标,但是遇到问题的时候没办法灵活变通。授人以鱼,不如授人以渔;授人以渔,不如授人与海洋生物学。

    除此之外你可能会觉得,讲这么多原理性的东西不如直接看教材。其实这点我是同意的,我也希望人手一本《计算机网络》《操作系统原理》,从此人间不再有饥饿和痛苦。

    言归正传。如第二课所说,要通过TCP协议通信,一个应用程序首先要“占用”本地操作系统的一个“端口”,然后:

    • 如果你要连接别人,就向别人的IP地址和端口,发起一个TCP连接请求
    • 如果你要等别人来连接你,就“监听”(等待)其他人向你发起的TCP连接请求

    这些功能(发起TCP请求、监听TCP请求)都是由操作系统提供,我们只需要在编写程序的时候,“调用”操作系统的这些功能。至于具体怎么与网卡沟通、怎么按照端口号分发数据包,都是操作系统的工作,不需要我们插手。

    Socket(套接字)

    我们的应用程序需要与操作系统沟通,告诉操作系统我们需要占用端口、监听TCP连接。那具体怎么沟通呢(有哪些系统功能可以调用、调用参数分别是什么、代码怎么写)?

    伯克利在他们自研的BSD操作系统中,提出了一套“沟通方式”,或者叫“API(应用程序编程操作界面,‘如何用C语言告诉操作系统你想干嘛’)”,用来做“TCP/UDP通信”这件事,他们把这种沟通方式称为socket(s),后世一般称为Berkeley Sockets https://en.wikipedia.org/wiki/Berkeley_sockets 或者BSD Sockets。

    由于Berkeley Sockets实在太好用(相比其他API而言),它最终成为了行业标准,包括在Windows上也可以用sockets进行TCP/UDP通信。

    大实验(期末成绩40%)

    下面我就通过一个简单的python程序,演示如何通过编程调用系统的socket API,实现占用、监听TCP端口,并向所有连接者返回HTML网页。

    import socket
    # socket一般译为“套接字”,意思是“通过编程调用操作系统网络通信功能的界面”
    

    HOST = '0.0.0.0'
    # 全零地址表示“所有IP地址”,意思是我们要监听所有人向我们发来的连接(不论在他看来,我的IP地址是什么) PORT = 80
    # 我们要占用本机的80端口

    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: # 创建一个socket,类型为IP/TCP

    s.bind((HOST, PORT))
    <span class="hljs-comment"># 向系统申请占用本机的80端口,占用IP地址范围为“所有IP地址”</span>
    
    s.listen()
    <span class="hljs-comment"># 向系统申请开始监听到达本机80端口的连接</span>
    
    print(<span class="hljs-string">'listening on'</span>, HOST, PORT)
    
    <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
        <span class="hljs-comment"># 循环接收到达的每一个连接</span>
    
        conn, addr = s.accept()
        <span class="hljs-comment"># 从系统收到一个连接。系统向我们提供:连接对象(socket)本身,</span>
        <span class="hljs-comment"># 以及对方的IP地址和端口号</span>
    
        print(<span class="hljs-string">'connected from'</span>, addr)
        <span class="hljs-comment"># 在命令行终端输出“connected from &lt;连接者的IP地址和端口号&gt;”</span>
    
        received = <span class="hljs-string">b''</span> <span class="hljs-comment"># 收到的所有字节</span>
        <span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
            <span class="hljs-comment"># 循环读取对方发来的数据</span>
    
            data = conn.recv(<span class="hljs-number">1</span>)
            <span class="hljs-comment"># 每次读取一个字节</span>
    
            <span class="hljs-keyword">if</span> data:
                <span class="hljs-comment"># 如果读取到字节,就把字节合并到收到的所有字节中</span>
                received = received + data
    
            <span class="hljs-keyword">if</span> received[<span class="hljs-number">-4</span>:]==<span class="hljs-string">b'\r\n\r\n'</span>:
                <span class="hljs-keyword">break</span>
                <span class="hljs-comment"># 如果收到的最后四个字节是“回车换行回车换行(表示HTTP请求结束)”,就停止读取</span>
    
        print(<span class="hljs-string">'received:'</span>, received.decode(<span class="hljs-string">'utf-8'</span>))
        <span class="hljs-comment"># 在终端输出对方发来的数据(以UTF-8解码)</span>
    
        response = (
            <span class="hljs-string">'HTTP/1.0 200 OK\r\n'</span>
            <span class="hljs-string">'Content-Type: text/html; charset=utf-8\r\n\r\n'</span>
            <span class="hljs-string">'&lt;h1&gt;习近平必须下台&lt;/h1&gt;'</span>)
            <span class="hljs-comment"># 我们准备发回给对方的回复</span>
    
        print(<span class="hljs-string">'send response:'</span>, response)
        <span class="hljs-comment"># 终端输出我们的回复</span>
    
        conn.sendall(response.encode(<span class="hljs-string">'utf-8'</span>))
        <span class="hljs-comment"># 把回复内容以UTF-8编码,发回给请求方</span>
    
        conn.close()
        <span class="hljs-comment"># 关闭连接(让对方知道我们已经发完回复了)</span>
    

    FAQ:为什么要用python编程语言

    因为python在语法上非常简洁。

    补充一些题外话。这几年python热度逐渐增加,有很多人说python适合初学者。我认为初学者可以通过python了解编程的一些基本概念,但是如果真的打算做大事,还是应该老老实实学计算机专业的基础课,尤其是操作系统(C语言),然后再回来使用python,才能真正得心应手。

    为了运行上面这个python程序,首先我们把代码保存到一个叫做 a.py 的文本文件里面,然后让python读取并运行这个文件。如果你的电脑上没有python,可以去python官网下载安装python3.7版本。

    安装python之后,请在windows命令行或者mac终端, 以管理员权限 (通常出于安全考虑,1024以下的端口都需要系统权限才可以占用)运行 python a.py 。运行命令后,你应该会看到:

    listening on 0.0.0.0 80
    

    表示我们已经占用了本机的80端口(HTTP协议默认端口),监听来自所有IP地址的连接(上节课讲过,一台机器可以拥有超过一个IP地址,比如公网IP和内网IP)。

    然后我们打开浏览器,访问 http://127.0.0.1/ (这个地址指向本机),会看到一个网页,上面写着:

    习近平必须下台

    这个时候命令行会显示:

    connected from ('127.0.0.1', 64663) # 意思就是收到本机64663端口发起的TCP连接
    # 收到对方发来的内容如下
    received: GET / HTTP/1.1 
    Host: 127.0.0.1
    Connection: keep-alive
    Cache-Control: max-age=0
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
    Accept-Encoding: gzip, deflate
    

    # 我们给对方的回复如下 send response: HTTP/1.0 200 OK Content-Type: text/html; charset=utf-8

    <h1>习近平必须下台</h1>

    通过这个实验,我们就知道,浏览器访问一个网站的步骤是:

    1. 随机挑选一个端口(在这个例子中是64663端口),占用这个端口,然后向对应网站的IP地址(这个例子中是本机127.0.0.1)的80端口,发起一个TCP连接
    2. TCP连接建立后,向对方发送 GET / HTTP/1.1... 这样一条信息,意思是 我要获取路径 / 的内容,我的协议版本是HTTP1.1版,其他附加信息如下……
    3. 等待对方回复。我们的回复是 HTTP/1.0 200 OK... 意思是 我的协议版本是HTTP1.0版,状态码200(返回数据),其他附加信息如下,网页内容如下……
    4. 浏览器收到我们的回复,把HTML内容显示在屏幕上。

    要停止这个(无限循环运行的)python程序,需要在命令行/终端,按下键盘的 ctrl+c

    在上面的实验过程中,我们占用了80端口,而占用80端口需要系统管理员权限,如果我们占用一个数字比较大的端口(比如56789),就不需要管理员权限。

    小实验1

    将上面代码中的80修改为56789,然后再运行一次 python a.py

    这个时候我们用浏览器就无法访问 http://127.0.0.1/ 了,但我们可以访问 http://127.0.0.1:56789/

    这个实验说明,建网站不一定要占用80端口,只不过因为80端口是HTTP默认端口,浏览器在输入网址的时候,可以省略这个端口号不写。如果用其他端口就必须写明端口号。

    小实验2

    你家不止一台电脑吧?

    如果你的电脑的内网IP地址是192.168.1.35,而你妈妈的电脑(或者手机)跟你连接的是同一个WiFi/路由器,那么她就可以通过你的内网IP地址,来访问你的网站。

    假设你已经做完了上面的小实验1,现在用你妈妈的电脑(或者手机)的浏览器访问 http://192.168.1.35:56789/ ,就能看到主席同志的问候了。

    如果提示不能访问,请把你电脑上的Windows防火墙完全关掉。

    至此,我们就成功地在内网架设了一个可以让内网的其他用户访问的、涉嫌煽动颠覆国家政权的网站啦。

    HTTP协议

    刚才我提了很多次HTTP,但是没有解释HTTP是什么。

    浏览器和服务器之间,可以通过TCP连接通信,这个我们刚才实验已经做过了。但是通信总得有个协议,或者叫规范、标准,比如说你发过来的信息必须是什么格式,我发回去的东西是什么格式,大家都按照格式来,不能随便乱发。细心的同学肯定注意到了,我在刚才的python程序里面,就用到了一些这样的格式,比如 HTTP/1.0 200 OK 这行字,就是按照HTTP协议规定的格式。如果不按这个格式,浏览器就没办法接收的,不信你可以改几个字再试一下。

    HTTP协议是一个既简单又复杂的协议,它的简单体现在它是通过英语表达意思,人类可以很容易看懂。它的复杂体现在它规定的功能和实现细节非常丰富(各位可以去翻一下HTTP协议的文档)。

    如果一个TCP连接,双方都遵守HTTP协议,我们就称这个连接为HTTP连接。一个网页浏览器,访问一个网站,从旁观者的角度来看,就是浏览器通过无数个HTTP连接,从网站获得了许多资源(比如HTML/CSS/JS/图片/视频),最后把这些资源组合成一个网页,显示到计算机屏幕上。

    小实验3

    在电脑浏览器(比如Chrome Firefox TorBrowser)里打开2047主页,然后在页面上空白地方,点右键,在菜单中点“检查(Inspect)”,打开开发者面板。

    在开发者面板中选择“网络(Network)”选项卡,然后刷新页面,可以看到下面这样的提示:

    左下角显示,总共发起了53个request(HTTP请求),其中绝大多数是各位的头像图片,总共通过网络传输了22.9kB的内容。右下角可以看到HTTP的请求和响应的具体内容,跟我们刚才python程序收到的非常相似。

    通过这个实验我们知道,办网站的本质,就是通过一个计算机程序,以响应外部HTTP连接的方式,向位于其他IP地址上的计算机返回各种资源。

    作为2047站长,我的工作的本质,也就是写一个python程序,接收各位浏览器发过来的HTTP连接,并返回相应的资源。

    前三节课小结

    IP协议解决的是,一个网络里面,计算机之间怎样才能互相发数据且互不干扰。

    TCP协议是建立在IP协议之上的,它解决的是,如果一台计算机有很多应用程序、需要发出很多网络连接,怎样让这些连接之间互不干扰。

    HTTP协议是建立在TCP协议之上的,它解决的是,如果计算机上的程序,想要通过TCP连接获取另一台计算机上的资源(比如网页和图片之类的),应该遵守怎样的一个通信格式,以确保全世界的浏览器、服务器都能互相兼容。同一个网站之所以能用不同的浏览器打开,正是因为所有浏览器都(某种程度上)遵守HTTP协议。

    HTML是一种用来描述网页的语言,CSS是用来辅助排版上色的语言,它们解决的是,一个网页在用户屏幕上究竟要显示成什么样子的问题。它们也有相应的标准,这就是为什么不同的浏览器,显示同一个网页,会有相同(或者近似相同)的效果。

    python是一种编程语言,它跟C语言(以及绝大多数编程语言)一样,可以通过代码调用操作系统的功能(API);这些API里面就包括了socket,我们用socket可以告诉操作系统我们想要占用端口、发起或监听TCP连接。

    下一节课我会介绍建设HTTP服务器最常见的方案(不是python也不是C,而是Apache/Nginx),以及如何解决内网地址无法从公网访问的问题。

  26. thphd   在小组 2047 回复文章

    【每日翻车新闻搬运】600:居然600期了.......

    内容已删除
    内容已被作者本人或管理员删除。 如有疑问,请点击菜单按钮,查看管理日志以了解原因。
  27. thphd   在小组 站务 回复文章

    建议搞个获赞百分比榜

    for u in users
    let n = u.nthreads+u.nposts
    filter n>5
    
    let ratio = u.nlikes / n
    sort ratio desc
    
    limit 100
    
    return {name:u.name,n, ratio:concat('(', left(to_string(ratio),4),")") }
    
    abckkk	7	(5)
    penumbra	7	(4.42)
    沉默的广场	67	(3.55)
    冲杯三鹿给党喝	37	(3.45)
    火光编辑部	13	(3.38)
    admin	10	(3.3)
    阿里萨斯	6	(2.83)
    小黎	9	(2.77)
    习近平总书记	9	(2.66)
    中国人民大学	30	(2.63)
    InspectorBen	38	(2.55)
    沉默的火安静地烧	7	(2.42)
    Ambulance	45	(2.4)
    萧炎	6	(2.33)
    中野梓	158	(2.24)
    时空复杂度	50	(2.14)
    清华博士豆沙馅	224	(2.10)
    习羊羊与灰战狼	27	(2.07)
    knifee	7	(2)
    PC8964	23	(2)
    Neko	60	(1.95)
    xjpwdnmd	14	(1.85)
    jargon	76	(1.80)
    白脸角鸮	49	(1.75)
    太陽三觀測站	20	(1.75)
    iceyjuice	58	(1.60)
    arthur	14	(1.57)
    天下无贼	130	(1.56)
    20202047	49	(1.51)
    NodeBE4	189	(1.50)
    雷公太极	22	(1.5)
    一直都是正义的	6	(1.5)
    首都卫队	12	(1.5)
    越南牛肉河粉	25	(1.48)
    李舜生	50	(1.48)
    goodidea	74	(1.43)
    thphd	538	(1.39)
    吳敦義	37	(1.37)
    东北派克笔	8	(1.37)
    青年	121	(1.37)
    习猪习	87	(1.35)
    prototype野獸先輩	35	(1.34)
    foolish	149	(1.30)
    mountainsea	10	(1.3)
    潮朔	30	(1.3)
    kaokaokao	25	(1.28)
    burleigh	37	(1.27)
    愛牛奶盒的人	523	(1.24)
    李元量	13	(1.23)
    kill_ccp	102	(1.20)
    Wolfychan	113	(1.19)
    恒原平三郎	59	(1.18)
    Resistance	36	(1.16)
    守法刁民	121	(1.15)
    迫真共和国	7	(1.14)
    Hker	54	(1.12)
    FreedomEagle	15	(1.06)
    穿鞋的企鹅	147	(1.05)
    贝臭大宝贝	50	(1.04)
    一只雞兒	95	(1.02)
    洛天依言和江泽民	61	(1)
    wyf1230180	26	(1)
    食人大佐韦国清	18	(0.94)
    匿名用戶	39	(0.92)
    observerIE	39	(0.92)
    消极	316	(0.83)
    libgen	678	(0.81)
    刘慈欣	376	(0.81)
    三点五英寸软盘	8	(0.75)
    MikamiMika	8	(0.75)
    Tushkent	8	(0.75)
    Wizard	16	(0.75)
    理性谈谈事	10	(0.7)
    赵冬天下的阿尔乔姆	62	(0.69)
    Accelerondo	14	(0.64)
    通音宽依	318	(0.61)
    陈士杰	794	(0.59)
    史蒂芬	28	(0.57)
    Antarc_re	11	(0.54)
    rebecca	543	(0.50)
    掀翻小池塘	193	(0.48)
    政治素人	36	(0.47)
    natasha	1211	(0.45)
    迷楼上的卢卡斯	21	(0.42)
    didididi	48	(0.41)
    品葱	29	(0.41)
    爱狗却养猫	2100	(0.37)
    solids	66	(0.37)
    dididi	9	(0.33)
    姨神姨鬼	9	(0.33)
    testing	48	(0.22)
    九頭鳥復活	33	(0.21)
    九頭鳥	39	(0.20)
    Ali	10	(0.2)
    爱猫却养狗	15	(0.2)
    sorrysorrysorry	1872	(0.16)
    v3ex	10	(0.1)
    electron8964	2042	(0.09)
    霏艺Faye	846	(0.08)
    西京自干五	13	(0.07)
    

    PS: 老用户因为老帖多,所以平均赞数比较低,仅供参考。

  28. thphd   在小组 2047 回复文章

    你们是否支持禁止酒后驾驶?

    你是认真的吗

  29. thphd   在小组 江湖 回复文章

    如何评价品葱用户“阿斯妙特灵”(前“苏维埃督战队”?)

    新品葱目前段位最高的段子手,与鹿基站的区别是他的底线比鹿基站高不少。多次以督战为名参与跨站执法。

  30. thphd   在小组 2047 回复文章

    我亲自教大家做网站(2)

    @消极 #103173 you can of course do that, but that only gives you the illusion of freedom.

  31. thphd   在小组 2047 发表文章

    我亲自教大家做网站(2)

    在第一课中,我向大家介绍了HTML和CSS两种语言,教大家做自己的第一个网页。

    今天我要介绍的是,怎样让别人通过网络,查看/浏览你做好的网页。

    假设我现在有一个网页 a.html,内容如下:

    <h1>习近平必须下台</h1>
    

    这个网页我自己可以用浏览器打开,但是我最终的目的是让全世界网民都能看到这个网页。要实现这个目标,有几个概念是必须要了解的。下面我就跟大家讲讲这几个一般人容易搞混的概念。

    IP地址

    网络上的每个设备,都必须有一个地址,包括你的电脑和手机也是这样,如果没有地址的话,就没有办法互相发送数据,就好比如果你家没有地址,别人就没办法把快递寄到你家。在计算机世界,这个地址叫IP地址,它是一个32位的二进制整数。

    32位的二进制整数看上去像这样:01010101110100010110... 这个地址难读难记,所以一般我们把这个地址拆分成4个8位的二进制整数,然后把这4个数都换成10进制来表示,中间用点连接,例如 202.112.233.75

    至于这个地址为什么要叫IP地址,诸位自己谷歌一下。

    你的电脑如果可以上网,它肯定也有一个IP地址(通常是由路由器或者运营商分配的),这个地址在任何操作系统里都是可以看到的,具体怎么看,诸位自己谷歌一下。

    你的电脑的IP地址,可能是192.168.1.35或者10.0.0.4这样的形式。注意,这个地址绝大多数情况下不是国际互联网地址,而是位于某个局域网中的地址。

    国际互联网地址(俗称“公网IP”),就好比你居住的小区的地址(比如中国北京朝阳区XX路XX号);而局域网地址(俗称“内网IP”),就好比你家在小区里面的楼号和房号。

    为什么IP地址要分成“公网”和“内网”两种地址呢?

    理论上讲,32位二进制整数,能够表示的整数有42亿个(2^32 = 4294967296),但是这42亿个地址,不可能100%高效利用,这就好比你家的地址有20个汉字,而常用汉字有5000个,理论上20个汉字可以组成5000^20个不同的地址(天文数字),但是实际上是做不到的,因为快递员必须靠前缀(也就是你家地址最开头那几个字,比如“北京市朝阳区”)来决定一封信要送到哪里,而前缀不可能是汉字的随意组合,只能在有限的组合里面选择(全国的省市区是有限的),所以实际上可以使用的前缀数量是非常有限的。同理,你家地址能选择的后缀(也就是地址结尾的那几个字,比如“三巷6号2楼”)也是非常有限的。总之,邮政地址对汉字编码的利用率是低于1%的。

    国际互联网,也是靠IP地址的前缀,来决定数据包(packets)的去向的,所以也存在同样的问题。理论上有42亿个地址,实际上能够有效分配到设备的地址,不到1亿。

    而地球上联网的计算机数量,早就超过了一亿台。运营商想到的解决办法,就是不给消费者(互联网最底层的用户)的每一台计算机分配公网IP,而是每几百台、几千台、甚至几十万台计算机,分配一个公网IP,这些计算机组成一个内网,它们在内网可以通过内网IP互相连接访问,而当他们需要连接公网(比如使用google、facebook)的时候,再通过某种方式,共用一个公网IP地址。这就是为什么会有公网和内网两种地址。

    正因如此,今天我们使用的互联网,是非对称的:你从内网可以访问公网的Google.com(因为Google买下了很多公网IP,没错,作为一种稀缺资源,IP地址是可以花钱买的),但是公网上的其他人,无法访问内网中的你(所以也就无法访问你电脑上的网页)。

    但互联网并非一直都是这样。互联网刚刚步入平常百姓家的时候(1995年),不管是中国还是美国,宽带用户联网之后,都可以分配到公网IP,因为那个时候IP并不是稀缺资源。

    光阴似箭,如今全世界互联网用户数量增长了几万倍,一个中国人如果想要在家庭宽带获得公网IP(用来开设网站),唯一的选择是中国电信宽带,报装之后打电话去客服申请,理由合理才能分配到公网IP。分配到的IP地址虽然是公网IP,却不是固定的,往往是一天一换或者三天一换。

    正因如此,在自己家电脑上建网站,同时又要让世界各地的人能看到,并不是一件简单的事情,且有越来越困难的趋势。

    小实验

    怎么证明在国际互联网上,通过IP地址可以与另一台计算机通信呢?

    其实有一些网站是支持通过IP地址直接访问的,以google为例,你可以先去https://mxtoolbox.com/DnsLookup.aspx,查询google.com的IP地址,得到结果:

    • 172.217.15.110

    然后在浏览器里面访问http://172.217.15.110/,确实可以打开google。

    小实验

    国际互联网按照IP地址前缀,决定如何转发一个IP数据包,那么怎样才能知道我的数据包是如何被转发到目的地的(中间经过了几手、分别都是谁)?

    • Windows用户请在开始菜单输入cmd回车,打开命令提示符窗口,输入tracert baidu.com,然后回车。
    • OSX用户请打开“终端(Terminal)”应用,输入traceroute baidu.com,然后回车。

    TCP协议

    在一个IP网络(使用IP地址,实现数据定向发送和接收的网络)里,一台计算机可以向另一台计算机发送IP数据包。

    假如你的电脑同时干两件需要联网的事情,比如说你一边用浏览器下载文件,同时又在用微信聊天,那么你就需要同时跟两台计算机进行IP通信,他们会同时向你发来很多很多的IP数据包。这些数据包被计算机操作系统收到以后,要分发给不同的应用程序,有的数据包要发给浏览器,有的数据包要发给微信客户端。

    问题是,怎么确定哪个数据包要发给哪个应用程序?你可能会说,用发送方的IP地址来区分。那万一两个发送方使用的是同一个IP地址(你下载的微信安装包,跟你微信聊天的数据,都来自腾讯的同一个服务器),怎么办?

    这个例子就说明,光有IP协议、IP地址是无法满足人们日常的网络使用需求的。于是工程师们决定,在IP协议的基础上,扩展一个新的协议,以使得一台计算机上的多个应用程序,能够同时和多台计算机上的多个应用程序进行连接,不同连接之间互不干扰。

    工程师们最终决定,把IP地址延长一点点,在地址的后面,加一个叫“端口号(port number)”的东西,来区分不同的连接。端口号是一个16位的二进制整数,对应十进制的 0..65535。有了端口号以后,每台计算机不再是一个公用的大邮箱、大电报局,而被分成了六万个互相隔离的小邮箱、小电报局,使得同一台计算机上,不同的应用程序能够互不干扰地与远端的计算机通信。

    换句话来讲,自从有了端口号,从一台计算机向另一台计算机,可以发起很多很多的网络连接,每一个连接都必须指定起点和终点的端口号,应用程序通过“占用”端口的形式,与远端计算机上的应用程序通信。

    这种依赖于端口号的通信方式,或者叫通信协议,应用最广泛的,一个叫TCP,一个叫UDP。你的浏览器、微信客户端、网络游戏……可以说绝大多数联网的计算机程序,用的都是TCP或者UDP协议。TCP/UDP is everywhere.

    TCP到底是怎么工作的呢?对于一个应用程序来说,可以像下面这样理解:

    • 两台计算机的IP地址分别是192.168.1.3192.168.1.4

    • 192.168.1.3上,有一个应用程序server.exe,它跟操作系统说:我想占用12345号端口,等待其他计算机向我发起连接。

    • 操作系统说:12345端口没有其他人占用,你可以占用了。

    • 192.168.1.4上,有一个应用程序client.exe,它跟操作系统说:我想占用34567端口,同时向192.168.1.3:12345发起连接。

    • 操作系统说:34567端口没有其他人占用,你可以占用了。你想发些什么?

    • client.exe说:我要发i hate xijinping

    • 操作系统说:好的,我现在就把i hate xijinping这句话,贴上IP地址和端口号192.168.1.3:12345,发给192.168.1.3

    • 192.168.1.3上,操作系统跟server.exe说:嘿,收到一个数据包,目标端口号是12345,也就是发给你的,内容是i hate xijinping

    小实验

    当网页浏览器访问一个网站的时候,会向这个网站服务器的80端口(HTTP协议默认端口),发起一个TCP连接,告诉对方自己需要什么。我们可以手动模拟这个TCP通信的过程,来获取网页的内容。

    • Windows(7/10): 管理员权限运行CMD,输入dism /online /Enable-Feature /FeatureName:TelnetClient以启用Telnet功能。Telnet允许我们用键盘输入字符,来和远端计算机进行TCP通信。

      启用Telnet之后,输入telnet baidu.com 80,回车。这里我用了baidu.com,你也可以替换成百度的ip地址,效果是一样的。

      连接baidu.com的80端口成功后,CMD窗口会变成一片黑,此时以最快速度(慢了会因超时而断开),输入:GET / HTTP/1.0[回车][回车]

      如果一切顺利,你会收到百度给你的回复,内容如下:

    HTTP/1.1 200 OK
    Server: Apache
    Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT
    ETag: "51-47cf7e6ee8400"
    Accept-Ranges: bytes
    Content-Length: 81
    Cache-Control: max-age=86400
    Connection: Close
    Content-Type: text/html
    

    <html> <meta http-equiv="refresh" content="0;url=http://www.baidu.com/"> </html>

    在百度返回的内容里面,包含一个HTML文档,文档内容的大意是:所有访问baidu.com的朋友,请跳转到www.baidu.com。

    如果你在发起TCP连接的时候,把端口从80改成其他数字,比如85,连接将会失败,说明TCP协议确实是通过端口号来区分同一台计算机上的不同目标的。

    如果我们能设计一个程序,像百度那样,“占用”计算机的80端口,“监听”或者叫“等待”来自其他计算机的TCP连接,每收到一个连接,我们就发一次HTML的网页过去,那么在其他计算机看来,我们就在这台计算机上,架设了一个可以用浏览器访问的网站。

    具体的架设过程,以及HTTP协议,我下节课再讲。

  32. thphd   在小组 2047 回复文章

    你們認爲中華大地光復之後,需要訂立【禁共法】嗎?

    请问楼主,光复是什么意思,民国占领大陆?极权又是什么意思?是指独裁吗?独裁的前提是没有民主制度,有民主制度的话,也就不用多此一举禁独裁了

  33. thphd   在小组 2047 回复文章

    当代互联网让人闭嘴行为实录

    想起前两天封了一个杠精,结果把周边所有杠精都炸出来了,大家纷纷表示杠精也是人、也有言论自由、务必立法保护云云

    最后杠精终于意识到这里不欢迎杠精,自己默默离开了

  34. thphd   在小组 2047 发表文章

    央视教你抓间谍

  35. thphd   在小组 江湖 回复文章

    如何评价品葱管理员懦夫斯基最新言论,称本站是“哭耗子的猫”?

    原文:

    =====搏击俱乐部=====(情绪发泄专楼) - 评论 by 懦夫斯基 
    https://pincong.rocks/article/item_id-514195
    
    既然无法从内部控制社区,大约只好从外部入手,尽量减少真人网友流入品葱。
    
    几个月前,Google搜索结果已难见品葱和其他政治网站踪影。此为信息封锁。
    
    如今,对方的生态圈已初具规模,下一步自然要发起舆论攻势,将品葱打成钓鱼网站,劝阻网友不要访问。此为狸猫换太子,假信息置换。
    
    小二父亲已经提过2047,显然不知对方是哭耗子的猫。无论如何,蜜罐洗白的第一份背书已然到手,rebecca要记大功。此事如何影响小二,尚不可知。对于品葱来说,这意味着对方发动舆论攻势的时机已经快要成熟了。
    

    懦夫斯基的话,翻译成现代汉语,意思就是:

    1. 国安特务rebecca无法从内部渗透品葱,只好转向蓝金黄Google,通过人为降低搜索排名,将品葱的人气压下去
    2. 抓捕小二,将2049改造为2047,作为蜜罐套取用户信息,蓝金黄品葱管理员,引诱品葱用户注册,用小二父亲为其声誉背书,从钓鱼网站逐渐爬到与品葱同生态位
    3. 下一步2047即将发起舆论攻势,将品葱污蔑成钓鱼网站,劝网友不要访问。

    我的点评:

    1. 学理科还是挺重要的
    2. 钉子眼里一切都是锤子,橄榄眼里一切都是铁拳
    3. 谁说精神病不能鹿传人
  36. thphd   在小组 2047 回复文章

    最近怎么这么多“如何评价”类帖子?

    以后预设立场一看标题就倾向严重的,转水。我刚才转了几个。

  37. thphd   在小组 站务 回复文章

    让你的标题栏配色更有韵味(附配色方案)

    谁觉得自己的配色方案最好?我可以把他的方案作为2047默认方案。

  38. thphd   在小组 2047 回复文章

    最近怎么这么多“如何评价”类帖子?

    习共病毒,好么,比中共病毒还精准打击。这种用词用在问题上,那就是在吸引同样偏激的人回答,能有什么高质量回帖?这种帖子的泛滥,是品葱沦陷的原因之一。

    @natasha #102604 这就是为什么要给管理员先斩后奏的特权。不过既然各位没有立即行动,看样子还是得开个会。

    kill_ccp你们觉得是批评教育,还是直接封禁呢

  39. thphd   在小组 2047 回复文章

    最近怎么这么多“如何评价”类帖子?

    垃圾问题会因为赞少而被自动刷下去

    (各位赶快给楼主点个赞

  40. thphd   在小组 站务 回复文章

    (已废除)2047论坛管理细则(二读)

  41. thphd   在小组 站务 回复文章

    要想提高本站人气,千万别复制膜乎品韭的模式

  42. thphd   在小组 站务 回复文章

    要想提高本站人气,千万别复制膜乎品韭的模式

    @NodeBE4 #102522 保证高素质用户的体验的做法,其实就是对用户素质做预筛,然后永远不要取消这个预筛。