summary

2021 年 2 月月度总结

TL;DR

2 月是一个高效与低效并存的月份,在这个月,我收获了自己又一个爆款项目 —— NESHouse。但同样也是这个月,因为人在焦作,没有办法很好的完成自己的工作,效率非常的低。家里的琐事,让我无法专心 Coding。此外,本月一个很重大的事情,是我把自己的户口迁移到了天津

定性分析

学习成长

本月是很懒的一个月,毫无进展。

恋爱家庭

这个月和我妈又就结婚的问题吵了一架。 她依然不同意我的观点。并以购房首付要挟我。所以我打算自己赚首付钱了。

职业发展

本月收到了字节跳动的人的面试邀请,完成了一面和二面,就看后续的面试情况了。

理财投资

本月没有怎么投资,倒是帮朋友卖 BTC, 感受了一把 BTC 交易。

休闲放松

本月一直在焦作,没啥放松休闲的点。

社交人际

本月因为办理户口的原因,在天津住了两个晚上,睡在了朱峰家里,还和 Panda 一起录了播客。

此外,还和小昱、hey 一起聊了一下大家接下来的发展。

自我实现

本月在 NESHouse 上收获了不少的关注度,算是自我实现方面有所突破。

定量分析

本月内容输出总结

本月一直在忙 NESHouse 的事情,所以没有写什么文章内容。不过,本月开始试着写一些能够带来流量的优质内容

本月收支总结

wko9w

本月因为一直在焦作,根本没有出去吃的机会,所以就难得的又一次收支平衡,月底的收入盈余了8000+。但 3 月份就不好说了,可能再次财政赤字。

本月读书总结

本月读书 0 本,无书评

本月学习总结

本月学习了 0 门课程

本月娱乐总结

本月看电影 0 部,无影评

年度回顾

  • Linux 中国的改造计划:0/2
  • 海外收入计划进度:0/$1000
  • 减肥计划:210/170
  • 优质文章产出:2/50
  • 1W stars 项目:1200/10000
  • 年入 5000 的项目:0/5000
  • 收入结余:0/25K

pink ferris wheel

为什么是天津

本文原为《海河人才计划落户天津记录》的开篇部分,后完善整理如下

熟悉的人都知道,我过去两年都一直在深圳,但最终却选择了一个我并不是那么熟悉的城市 —— 天津,Why?

出于上一代人赡养和下一代人的培养的角度,最终我选择了将自己的户口从老家焦作迁移到了天津,具体的理由如下:

在我看来,上一代赡养的问题,天津比河南的好处在于,天津以1500万人享受河南 9600 万人的资源,在这种情况下,同等资源下,一个天津的老人可以享受更多的医疗资源。另外一个问题是,河南的人太多,且太老派,所以可能当我真正需要医疗资源的时候,我需要通过「关系」来找,这对于不善于去找关系的我来说,是一个很麻烦的事情。所以,相对更加先进、开放的天津会更适合我。相比于河南的关系 + 金钱,可能天津的金钱会更让我觉得简单一些。

省份三甲医院数量
天津市55 家
河南省60家
焦作市4家
河南省与天津市三甲医院对比,数据来源:http://www.a-hospital.com/w/三级甲等医院列表#.E5.A4.A9.E6.B4.A5.E5.B8.82.E4.B8.89.E7.94.B2.E5.8C.BB.E9.99.A2.E5.90.8D.E5.8D.95

而下一代培养的角度来看,天津和河南的高考体验差距是悬殊的。和上一代赡养一样,人数是天津的利器。由于天津的人口总数,决定了它不会有那么多的适龄学生考试,所以对于每一个考生而言,你考到了多少分,你就上多少分的学校。而河南则不同,河南你考到了某一个特定的分数,但你上的学校,可能是另外一个层次的,我们称之为「掉档」。举个例子来说,就是你在河南考到了一本分数线,超出一本线50分,最终可能上的学校也只是一个普通的二本学校。这是因为河南人太多,所以无法很好的分配,不得不通过让一部分人强制掉档来让大家都有学校上。

省份本专科高校数量
河南省119所
天津市45所

此外,除了这两个最重要的条件以外,还有一个需要考虑的是,我是回族人,我需要考虑生活成本问题。在南方,回族不那么兴盛的地方,我们需要花费更高的生活成本来获得相同的生活。而天津,回族有聚居,有散居,有较多的回族人,生活成本可以被摊平,因此,南方被我放弃。

tianjin 4680484 640

海河人才计划落户天津记录

是的,现在正在写这篇文章的我,已经成为一个「新天津人」。这篇文章是写给我自己的总结,也是给每一个希望通过海河人才计划获得天津户口的人的指南。

为什么是天津?

参看:《为什么是天津

怎么落户天津

我走的是海河英才计划落户的天津,相对较为简单。

学历型人才。包括:普通高校毕业,全日制本科生一般不超过40周岁;具有硕士学位的研究生,一般不超过45周岁;具有博士学位的研究生,年龄不受限制。

天津市人力资源和社会保障局

我是本科学历,且没有超过 40 周岁,可以直接落户,且刚好自己这段时间 Freelancer,就自己来办理了。

需要注意,海河英才行动计划在实际执行时是有一个隐含条件(如有不对, 欢迎指正):你需要在其他地方没有社保。这是希望你能够真心实意的来天津发展,而不是只是为了落个户口。

1. 准备资料

办理学历型人才迁移,你需要提供一些基本资料,具体包括:

  • 身份证
  • 学历证/学位证:我当时是两个都上传了,所以这里不确定具体是哪一个。但两个都上传确实是可以通过审核。
  • 教育部学历证书电子注册备案表:需要注意,是学历证书电子注册备案表,而不是学籍在线验证报告2pmbq

准备好这些资料以后,在手机上下载「天津公安」app,在 App 首页找到「引进人才落户」,根据你的实际情况,选择是否在天津有工作等信息,选择完成后,会让你下载一个 Word 文档,打印出来,并手写签字。签字后,后续流程需要拍照上传。

jdvto

需要注意,这里的所有的上传都必须是原件,天津公安的 App 是不能选择图片上传的,必须现场拍。

kym10

提交完资料以后,就等待公安、人社和教委部门的审核即可,审核周期大概是一到两周。如果审核没通过,会给你发短信,告知你原因,你只需要修改,重新上传即可。

当你所有审核通过以后,会要求你进行档案的转移。这时会给你发送短信,你需要在天津公安这个 App 中打开「个人中心」,找到「业务网办进度」中的「已办结」,找到你的办理事项,点击进去最下方会让你选择邮寄调档函

这里你只要填写地址,并支付调档函到了以后的快递费用即可(一般是20)

2. 转移档案

当你收到了调档函以后,拿着调档函前往你档案所在地的人才市场办理调档即可。比较简单。档案会通过人才市场的机要通道运送,你自己也不需要去自己人工转运,等待自动运送即可。

完成了人工转运的手续后,你需要在微信公众号「北方人才网」中的菜单栏「海河英才」中选择「网报存档信息」,登记你的档案状态。

当即后, 就只需要耐心等待人才中心收到档案,并办理存档。存档结束后会给你发送短信,让你去申请《准予迁入证明》。这部分就还是填写地址,等收货,并支付费用即可。

7qkjy

3. 办理户口迁出

当你拿到了你的《准予迁入证明》后,你需要携带个人身份证你的户口本准予迁入证明,前往对应的派出所,办理户口的迁出。

需要注意,《准予迁入证明》有有效期,从寄出之日起 40 天内有效,因此,你拿到证明后尽快办理比较好。

迁出办理很快,把资料交给户籍警,十分钟左右你就会获得一张户口迁移证。同时,你之前带来的《准予迁入证明》也会被撕去一联,被放在迁出派出所留存。

户口迁移证的有效期要更短一些,只有 30 天,因此拿到户口迁移证就尽快办理。

将《准予迁入证明》和你刚刚收到的《户口迁移证》收好,这是你后续办理迁入的凭证。

p6qc4

4. 办理户口迁入

当你有了《户口迁移证》和《准予迁入证明》后,就可以拿着这两样东西去办理户口迁移了。

具体所需资料如下

  1. 一张一寸照片:不限底
  2. 身份证原件
  3. 准予迁入证明
  4. 户口迁移证

如果你的户口从出生以后就没有更新过,建议你在迁户口之前,先去做一次户口的更新,具体的内容可以参考注意事项中的「关于更新自己的户口本」部分。

当你资料带齐以后,就可以前往派出所,进行办理了。由于基本上的流程都在网上完成,因此在实际线下办理的时候,仅仅是填一下表,确认一下信息,就可以了,很快,十分钟内就完成办理了。

5. 其他户口工作

在办理完成户口迁移以后,虽然不要求你更新身份证,但理论上,建议你更新身份证。因为后续的一些其他的业务,比如办理房贷之类的,会要求身份证地址和户口地址一致。这个需要注意一下。

一些注意的事项

是否需要代办?

海河英才行动计划是可以全程网上办理的,所以理论上你可以不需要本人来,就可以走完所有的流程。

我实际自己办理的流程也只有从原户口所在地迁出,和迁入到新的户口所在地的时候才自己做的。其他流程都是直接网上办理或者让我妈帮我代办。

所以实际上你也完全可以不找代办。当然,如果你嫌麻烦,也可以找个代办,让人家跑个腿,收个跑腿费。

如何选择迁入的区?

通过海河人才计划办理迁入的时候,你的户口是挂靠在北方人才市场的,而北方人才市场在天津是一个单位,且有很多不同的子单位,因此,你在实际办理时,可以根据自己的喜好选择户口所在的区。迁入的区会影响你后续办事的方便程度(毕竟你选的偏,后续办事就要跑的更远)。

以我为例,我的户口落在天津市河北区,对应的是河北区宁园街派出所。

从地图上来看,是比较方便的。从天津站地铁两站路到天津北站,从地铁口出来走十分钟左右就走到了。

w0tro

如果你不打算落户在河北区,希望落在其他区,那如何预测自己的落户派出所呢?

我通过和派出所的小姐姐聊 & 观察派出所贴的一些文件,得出一个结论:

落户派出所选择的是北方人才市场在各区办事处所属的派出所。

这样你如果想要选择不同的区,只需要搜索北方人才市场在对应区的办事处,就可以查询到对应的派出所位置,判断该路线是否顺路,你是否可以很方便的完成后续的办事。

以下这张图就是我搜索到的北方人才市场的各办事处,供你参考。

pjkpi

派出所办理的最佳时间?

我是一大早去的,事实证明这样太蠢了。派出所大概是 8:30 会点名,你在 9 点以后去就可以了。一般情况下户籍警不会太忙,所以办理速度很快。你可以晚一点去。

关于更新自己的户口本

如果你没有结过婚/或者主动更新过你的户口本页,那很有可能在户籍系统中,你的婚姻状态和学历信息可能是空白的。在你做户口迁入的时候,你需要更新相应的状态,而更新这些状态需要以下资料:

婚姻状态

  • 已婚:提供结婚证,会帮你登记为已婚。
  • 未婚:需要在现场签署一个未婚保证,会帮你登记为未婚。

学历信息

  • 提供毕业证书,会按照毕业证书更新你的学历。
  • 如果没有提供,会帮你更新成文盲或半文盲,你需要后续自己再跑一趟去更新。

综上所述,我更推荐你在迁户口之前,把自己的户口更新一遍,把没有更新过的婚姻状态、学历信息等写清楚。这样你就不需要在迁入户口的时候更新,毕竟要多带文件,搞丢了就不好了。

办理迁入时需要准备的资料

如果你之前已经更新过户口,补全了所有信息,那你只需要带上以下资料前往迁入的派出所。

  1. 一张一寸照片:不限底
  2. 身份证原件
  3. 准予迁入证明
  4. 户口迁移证

其他户口信息如果已经更新过,你就可以只带这四样去办理户口迁入。如果没有办理过,则需要带上相应的证件。

是否需要换身份证?

身份证并非强制替换的,你可以自己决定是否需要更新。不过如果你是落户河北区的话,河北分局的户政大厅离水产前街很近,你可以走路过去。

tph3p

如何获取户口页?

参考下图

tph3p

总结

耗时一个多月,终于在2月底把户口办理完成了。户口迁移完成,下一步就是调整我的工作和生活状态,渐渐的从深圳撤离,前往天津。

深圳之旅,即将进入尾声,天津,我要来了。

参考文献

red and whites logo

宇宙条面试体验总结

为什么要面试宇宙条?

主要是因为轻服务的负责人给我发邮件,说希望我加入,并给出了还不错的工作环境的条件(但没有谈钱),我觉得人家能够给出这样的让步,确实用心,所以就答应来面试。

一面:技术面

一面是技术面,问的是一些常见的技术问题

其中我有印象的:

  1. LocalStorage 和 SessionStroage 的区别?在不同场景下的表现
  2. Cookie 的应用场景?服务端如何设定 Cookie?
  3. 数据库优化的思路
  4. 数据库索引的底层机制

具体的编程题目

  1. 实现 retry(fn, times) {} ,实现这样的函数,重试返回一个 Promise
  2. 设计一个 Person 类设计,支持链式调用,Person 包含 sleep\eat 函数,支持 person()->eat()->sleep() ,或person()->eat()->sleep()

二面:技术面 & 经历介绍

二面问的是过去的经历,面试官问了一下我为什么会从研发刻意的转了一下运营岗位;又讨论了一下,我在运营岗位获得到的经验等信息。

编程题就做了一道

  1. 设计实现一个 EventListener 类,包含 on、off、emit 三个方法

三面:技术面 & 经历介绍

三面是产品。

技术题目做了两道:

  • 设计一个爬虫,爬取某网站的数据
  • 设计一个爬虫,反向组织爬虫爬取数据

四面:HR面

四面就是 HR 面了,聊了一些关于,我为什么要投这个岗位(其实是我被邀请投的,根本不是我自己主动投的)、我怎么看待字节跳动之类的。

kdc5t
面试结果

最终 HR 面试也过了,就是等 HR 和我谈钱。这里就不更新了。

NESHouse

复盘:从 NESHouse 到商业版,我做对了什么和做错了什么?

大家好,我是白宦成,在过去的这个春节里,Clubhouse 相信不少人都进去玩过,也体验过了。我也在这个春节中深入的体验了这个产品。

和大家不同的是,我除了体验,还做了一些事情,今天为大家复盘一下这次事件中我的得与失。

第一重思考:工程师脑中的 Clubhouse

当我知道 ClubHouse 的时候,找朋友要了个邀请码,就进去体验了一下。说实话,并没有什么太让我惊艳的功能,但马斯克的加入,让 Clubhouse 的使用体验极差,于是我便萌生了自己做一个出来的想法。于是,我便立了个 Flag ,要在 72 小时内复刻出来一个 Clubhouse。后面的事情,大家或多或少听到过,我在 55 小时内完成了开发,并被 CSDN 报道。

现在回过头来看这件事,体验到一个东西,觉得不够好,并想着做一个开源的版本出来,这是我的工程师脑给我带来的,他让我下意识选择了自己去实现一套类似工具的选择。

在这一重思考中,我总结出来了以下结论:

得:

  1. 我这次的行为,成功的一点是我不仅仅是憋在房间写代码,而是将写代码这件事直播出来,从一开始就吸引眼球,让别人从开始就在做传播
  2. 我这次的行为,开源和特定的风格帮了不少的忙,给我在后续做宣传的时候,自带了一些值得讨论的话题。
  3. 我这次的行为,联系了 CSDN 宣传,让我在研发完初期,快速获得关注,占领了最快完成的话语权,即使后续有了新的像素级抄袭的版本,媒体在宣传的时候,也会带上我,占了先机。

失:

  1. 我这次的时间搞得不太好,开发的第 30 ~ 48 小时几乎什么都没有做,一直在路上。下次如果能一直在一个地方,可能整个事情的运转效率会更高。
  2. 没有商业部署的意识,我在开源的版本中,选择了一个比较贵,但可以快速开发的技术方案,但是后续当我想直接从开源版进行商业化改造的时候,遇到了费用的问题,朋友提醒我,商业用户可能不太喜欢依赖过多的外部服务,最好换个方案。花费了不少的时间和精力在测试新的技术方案上。

第二重思考:商务脑中的 Clubhouse

当我完成了开源版以后,考虑到这个东西在国内一定会有他的市场,那么一定也会有一些企业想要去做相关的产品,因此,开发一个商业版本是一个不错的选择。因为有了开源版在前面立着,别人相信我可以做出这样的东西,剩下只是把产品打造出来,然后卖给需要的企业即可。但,因为一些原因,实际上错过了最佳的销售期,项目虽然开发出来了,但客户也流失了。

在这一重思考中,我总结出了以下结论:

得:

  1. 在商业行动中,快真的很重要,如果你足够快,那就可以在市场还处在混沌期的时候,快速完成变现。
  2. 在进行整体项目研究的过程中,应当尽量避免切换技术方案,以免造成较高的实现成本。

失:

  1. 家庭稳定很重要,我这次商业版开发速度比较缓慢一方面是商业版确实提供了更多的功能和价值。另外一个方面,我在家的几天,和我妈吵了几架,心神不宁,无法很好的编码。

第三重思考:生态脑中的 Clubhouse

当我完成了商业版的开发后,我又回过头来看 Clubhouse ,发现在 Clubhouse 生态中出现了一些很有意思的周边产品,比如专门为 Clubhouse 房间准备的提问工具:Ch.chat。这些工具不是完全复刻,而是围绕着生态提供价值,反而是一个不错的切入点。如果再有机会,这个方向也会是我尝试的点。

在这一重思考中,我总结出以下结论:

得:

  1. 我们在思考产品的时候,不能只盯着产品本身,还要学着去思考,在这个产品的生态中,他的上游是什么、下游是什么,中间有什么是我可以做的?相比于像素级抄袭一个产品,去围绕着产品周围做生态,也是一个不错的选择。

除了这些以外,这几天国内还出现了一些 Clubhouse 的类型产品,我说一些我自己在开发过程中的一些观点,

  1. Clubhouse 类应用的成本极高,大量依赖服务商虽然可以快速开发,但意味着高成本。
  2. 在国内如果要做 Clubhouse 类应用,可能会面临两大难题,一个是高成本,另一个就是监管。前者 Clubhouse 有投资,后者 Clubhouse 不需要关注。但国内的同款都会需要做这些东西,成本不菲。
  3. 国内只能预期一些大厂的产品能够成功(他们烧得起这个钱),对于中小企业,做公有域的流量转化很难,但作为工具还不错。

一些相关链接

https://mp.weixin.qq.com/s/mUGGkxdTIngLzd9zX96AeA

灵光一闪

工程师和码农

我不止一次的在不同的场合表达我个人对于互联网技术从业者的分类:

互联网的研发岗位上有两种人,一种人是工程师,一种人是码农。前者因为喜爱而从业;后者因为钱而从业。如果你不区分这两种人就以一个简单的维度来归类研发岗位的人,难免有失偏颇。

白宦成

昨天我写了 Alpine.js 的 HOWTO 后,将其发布到了一些技术站点上,今天我收到了这样的回复。

a3aze

我相信,有不少人都会持有类似的观点,甚至读到我博客的人中,也会有不少这样的人。但我还是要说,我不喜欢这样的人

对于我来说,一切以公司目标为指导,一切行动以钱为指导, 那就是码农的范畴

工程师相比于码农,一个很大的区别是他对于技术是有热情的,有热爱的。工程师会去主动学习、研究技术,而不是像码农一样,一切以公司的指标为准。

我之所以不喜欢码农,是因为码农是会让这个行业变得更不好的,因为他们只关注收入,不关注行业本身的变化,不在乎行业的前进方向。而且,如果是为了钱,那有了更好的,更赚钱的工作,他是不是就不干现在的工程师的工作了呢?

我不觉得工程师就比码农高贵多少,但我自己是不喜欢与码农共事的,太累。每个人和每个工种都有自己存在的价值,但码农的价值,我不太想要。

如果你要讨论互联网中的这些做研发的人,二者归为一谈就有失偏颇了,分开来讨论,才是更适合的。因为这两类人,是完全不同的两类人。

3766c90b0ac72837d086fbf3ddf1e3be

我看的动画

我除了一般意义上的动画片以外,也会在 Bilibili 看一些国创动画,列举一些我看过,还比较喜欢的动画:

如果你有别的不错的动画,欢迎你推荐给我。

此外,我近两年看的也不错的海外的动画

  • 怪诞小镇:很喜欢,可惜不更新了。
  • We Bare Bears:也不错,很温馨,好像也不更新了。
  • 飞出个未来:还不错,我还没看完。
  • 工作细胞:第一季看完了,第二季、Black 正准备看。
text

HOWTO: 如何学习 Alpine.js

什么是 Alpine.js

Alpine.js 是由开发者 Caleb Porzio 开发的一款响应式前端框架。和过去人们所熟悉的 Vue.js、React、Angular 不同的是,Alpine.js 不需要你对于现有的应用进行高成本的改造,也没有 VDom 的概念,直接可以在现有的系统中加入并使用

快速学习指南

Alpine.js 在国内的使用并不多,因此,相应的学习内容大多是英文写就的,不过 Alpine.js 涉及到的概念不会像 Vue、React 之类那么多,你可以很轻松学会它。

推荐学习路线

Alpine.js 没有那么多的概念,因此,学习路线也非常简单,你只需要掌握以下一些内容就可以了

  1. Alpine.js 基础语法和使用;
  2. Alpine.js 的magic helper; (非必需)
  3. Alpines.js 的状态管理工具 Spruce(非必需)

基础语法的了解可以让你使用 Alpine.js 开发自己的应用。而后面两者可以简化你的整个开发工作流,提升自己的开发效率。

推荐学习文档

1. 查阅官方文档,学习基础语法

学习 Alpine.js ,首先离不开的是官方文档,Alpine.js 的官方文档在其项目主页

https://github.com/alpinejs/alpine

如果你的英语不够好,可以看中文版本的 Readme

https://github.com/alpinejs/alpine/blob/master/README.zh-TW.md

具体的语法层面,我建议你按照如下的逻辑来学习

第一梯队,学习:

  • x-data:教你如何组织你的 Alpine.js 代码
  • x-on:事件绑定
  • x-if:逻辑处理
  • x-for:列表渲染
  • x-bind:数据绑定
  • x-model:双向数据绑定

这六个语法让你可以基本开始使用 Alpine.js。

第二梯队,学习:

  • x-show:控制是否显示
  • x-spread:将 Alpine.js 对象属性绑定到 Object 上
  • x-text:控制元素内文字
  • x-html:控制元素内 Html
  • x-transition:控制转场渐变动画

这五个语法让你的 Alpine.js 项目拥有更多的功能

第三梯队,学习:

  • x-cloak:控制组件初始化完成
  • x-ref:绑定父组件对象
  • $el:获取元素
  • $refs:获取父组件对象中标注的 x-ref
  • $event:事件对象
  • $dispatch:触发事件
  • $nextTick:下次 DOM 更新
  • $watch:监听数据变化

上述这些语法可以让你更加深入的使用 Alpine.js,不过在很多场景下可能你都用不到,所以也无需担心。

2. 查看常用逻辑的实现方式,比对不同

Hugo 是 Alpine.js 的开发团队成员之一,除了开发以外,Hugo 还在自己的网站上给出了一个 Playground ,你可以在这里看到一些 Alpine.js 的常见用例,比如:数据绑定、 for 循环、抓取数据等。

c7gdc

你可以访问 https://alpinejs.codewithhugo.com/ 来查看 Hugo 准备的一些案例,从而快速的了解你熟悉的功能在 Alpine.js 中的应该如何实现。

3. 在线练习 Alpine.js

当你了解了一些基本的使用后,你就可以开始打开一个网页,开始自己练习使用了。

这里有两个可以在线使用的调试环境,你可以基于他们来进行练习,直接看到效果。

Alpine.js 作为一个工具,需要多练才能熟悉它的使用,配合前面看的文档和案例,现在你就可以在这两个练习环境中练习 Alpine.js 的使用。

4. 查看真实项目,了解 Alpine.js

一个工具从测试到落地到真实环境,需要的是来自真实项目的参考。而 Awesome 中就提供了不少这样的案例。

n8o10

通过了解这些项目和工具,你可以看到别人是怎么使用 Alpine.js 的,从而学习 Alpine.js 的开发。

Alpine.js 的学习资源汇总

Alpine.js 的学习资源不多,但有一些比较适合国内开发者看的,我也再列举一下,具体如下:

视频教程

  • Building AlpineJS:由 Alpine.js 开发者 Caleb Porzio 开设在 Laracasts 上的一门课程,介绍如何从 0 打造一个 Alpine.js, 这个课程会让你对于 Alpine.js 更好更快的理解。

个人博客

  • Code With Hugo: Alpine.js 核心开发者的博客,会更新一些关于 Alpine.js 的技术文章
  • Alpine.js之一步一腳印:台湾同胞写的 Alpine.js 入门教程,有一个系列。完整的一共有30篇,可以一点点看看。

邮件列表

  • Alpine.js Weekly:Alpine.js Weekly 由 Alpine.js 的核心开发者 Hugo 维护,每周五发送一封邮件,介绍最新的 Alpine.js 社区的资源,十分值得订阅。

讨论区

一些常见问题

1. Alpine.js 依赖 Webpack / Alpine.js 不支持 Webpack?

答:并不是,Alpine.js 可以在 webpack 中使用,也可以不在 Webpack 中使用。即使通过 webpack 构建,Alpine.js 也会自动绑定对象,方便你使用。

2. Alpine.js 是为前端/后端设计的技术方案

答:Alpine.js 并不是为某一类人设计的技术方案。虽然在我看来,他对于后端十分友好,因为不需要 webpack 之类的前端构建工具就可以使用,但如果你是前端,且不太喜欢 React 的 JSX 或者是 Vue 的template ,那依然可以选择使用 Alpine.js。

3. Alpine.js 学习门槛如何?

Alpine.js 的学习只需要掌握一些核心的语法,就可以正式开始使用了。相比于 Vue、React, 我认为学习成本还是要低一些的。Vue 有完整的工具链,放平缓了学习曲线,但需要学习的概念依然不少,只是上手难度低而已。

我自己的使用感受

Alpine.js 在我看来,是对于后端开发者的利器。他的语法足够简单, 也不需要打包,因此对于后端开发者来说,可以十分方便的在系统中接入。同时,Alpine.js 可以很好的与传统的服务端渲染的逻辑结合,使用服务端渲染内容,使用 Alpine.js 来控制内容,从而可以很好的完成页面的构建,实现在不过多提升项目复杂度的同时,提升了页面的动态效果和逻辑编写难度,对于后端开发者来说,是一个不错的工具。

对于前端开发者来说,如果你厌恶了每次写项目都需要构建、打包,那么 Alpine.js 也是一个不错的选择。

white paper plane on white background

开了一个 HOW-TO 目录

HOW-TO 类目主要会介绍一些我自己熟悉/经常使用的技术栈,并将这些技术栈的学习路径等,整理出来,提供给需要的人。

HOW-TO 子目录放置在“技术“目录目录下,所以内容大体上是和技术有关的。如果有一些别的内容,可能也会分享出来。

比如我自己倒腾的一些硬件产品之类的。

purple and blue light digital wallpaper

屏蔽爬虫请求的四种方式

在进行应用开发的过程中,难免会遇见爬虫爬取数据的。正常情况下,爬虫的数据爬取不应影响业务系统的正常运行。但毕竟都是人写的代码,难免会出现 Bug ,在 Bug 的情况下,爬虫可能会对业务系统发起超出日常水平的请求,从而使业务系统开始出现故障。在这种情况下,就需要对爬虫进行屏蔽。

屏蔽爬虫,由内而外,可以分为四个不同的方式来屏蔽。

1. 屏蔽 UA

爬虫一般而言,都会有特殊的 User Agent ,比如 Baiduspider 就是百度的爬虫;Googlebot 就是 Google 的爬虫。

在第一阶段,你可以针对 User Agent 进行屏蔽,这部分只需要在 HTTP Server 层面加入相应的屏蔽代码即可。

以最常用的反向代理服务器 Nginx 为例,你可以在站点的配置文件中添加如下代码来屏蔽百度和 Google 的爬虫访问。

if ($http_user_agent ~* "Baiduspider|Googlebot")
{
    return 403;
}
Code language: PHP (php)

上述这段代码可以实现在 Nginx 检测到访问者的 User Agent 包含特定的字符的时候,返回 403 报错,拒绝访问服务。

2. 在主机层面屏蔽 IP

除了针对 User Agent ,有些时候是特定的来源的 IP 疯狂的访问,那也可以考虑针对 IP 进行封禁。

考虑到这部分,最常见的是使用主机自带的防火墙机制,来屏蔽来自特定来源的 IP。以 Linux 为例,可以通过 iptables 来完成相应的功能。

在 Linux 下,输入如下命令,来添加 iptables 屏蔽

iptables -I INPUT -s 8.0.0.1 -j DROP
Code language: CSS (css)

上述命令,就可以在 iptables 中添加针对 8.0.0.1 的请求,所有来自 8.0.0.1 的请求都会被抛弃。

3. 在安全组层面屏蔽 IP

在如今的业务模式下,大家大多使用的是云服务器。如果你使用的是云服务器,则可以在用户的请求到达主机之前,直接在云服务商的内部网关层面直接丢弃。

你只需要在现有的安全组规则中新增一条屏蔽特定来源 IP 的规则,就可以实现在安全组层面上屏蔽特定的 IP。

ktz0r

4. 在 CDN 层面屏蔽 IP

现在我们的业务大多会使用 CDN 来完成数据的分发。在这种情况下,服务器获取到请求不是来自我们要屏蔽的 IP,因此,我们可以直接在 CDN 层面屏蔽掉爬虫的 IP。

现在的云服务商的 CDN 大多提供了 IP 白名单/黑名单的功能,你只需要将需要屏蔽的 IP 放在黑名单中,就可以实现在 CDN 层面屏蔽 IP。

qm1qk

总结

屏蔽爬虫的方式有多种多样,不过最为常见的主要就是这四种。当你找到了爬虫的特征,便可以很轻松的屏蔽它。