月度归档:2021年02月

为什么是天津

为什么是天津

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

熟悉的人都知道,我过去两年都一直在深圳,但最终却选择了一个我并不是那么熟悉的城市 —— 天津,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所

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

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

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

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

为什么是天津?

参看:《为什么是天津

怎么落户天津

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

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

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

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

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

1. 准备资料

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

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

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

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

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

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

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

2. 转移档案

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

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

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

3. 办理户口迁出

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

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

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

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

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

4. 办理户口迁入

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

具体所需资料如下

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

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

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

5. 其他户口工作

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

一些注意的事项

是否需要代办?

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

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

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

如何选择迁入的区?

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

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

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

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

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

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

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

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

派出所办理的最佳时间?

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

关于更新自己的户口本

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

婚姻状态

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

学历信息

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

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

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

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

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

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

是否需要换身份证?

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

如何获取户口页?

参考下图

总结

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

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

参考文献

宇宙条面试体验总结

宇宙条面试体验总结

为什么要面试宇宙条?

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

一面:技术面

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

其中我有印象的:

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

面试结果

最终 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

白宦成简史

白宦成简史

如何想要了解白宦成,你就需要了解他的成长历史。表面给你提供的内容寥寥,可能不足以你很好的对白宦成产生更加立体的形象。

2003 年

白宦成的父亲白玉信先生是一位公务员,得益于公务员的身份,可以接触到电脑。小时候的白宦成比较顽劣,但很喜欢电脑。借父亲工作之便利,可以接触到电脑,打游戏。

当年比较喜欢的游戏包括:红色警戒2 、暴力摩托

2005 年

2005年,白宦成一生中的一个很重要的伙伴 —— 赵晓冬带着白宦成去了一个很重要的地方,小学门口的电脑装机店。因为赵晓东的父亲与店主关系较好,赵晓冬和白宦成可以放学后在装机店呆着。

在装机店里,白宦成学习了如何组装家用电脑。后来,白宦成甚至一个暑假都呆在这个装机店里,学习如何维修电脑。(是的,白宦成真的会修电脑

2006 年

2006 年,梦幻西游进入白宦成的世界,白宦成开始玩游戏,疯狂的玩游戏。甚至半夜不睡觉,偷偷从家里跑出来,去家附近的网吧打游戏,再被父亲抓回去(屡次)。

2007 年

在家附近的旧书店购买到了 《电脑爱好者》、《黑客 X 档案》、《大众硬件》、《大众软件》、《电脑迷》,并对其中的《黑客X档案》特别感兴趣,开始研究成为炫酷的「黑客」。

并试着用《黑客X档案》学到的技术,在网吧成功的逃避了网费的支付(这可能白宦成离黑客最近的一次)

2008 年

白宦成在阅读《黑客X档案》的时候,开始对更加广袤的编程世界感兴趣,迫于英语不好,无法理解更复杂的编程逻辑,只能从「易语言」开始学起。

2009 年

白宦成进入初中开始学习,由于被选中作为纪律委员,开始试着与过去的自己告别,不再做那个屡次被叫家长的坏孩子。试着开始变成一个好孩子。

也受到地理老师的赏识,地理老师授予了办公室的钥匙,允许白宦成在放学后,留在办公室里浏览互联网。

感谢白宦成的地理老师 —— 董向才老师。

在这个阶段,白宦成开始试着用易语言编写一些简单的程序。

2010 年

白宦成开始和自己的同学慕沁阳一起订阅《电脑报》,购买《电脑迷》,两个人轮流购买,一周白宦成买,另一周慕沁阳买。

2011 年

准备开始中考,暂时将精力放在学习上。

2012 年

考上高中,并加入高中的《话剧社》,成为一名后期。经由学姐培训,掌握了基本的 Adobe Audition 的使用技巧。并在 2012 年,加入学校的《文学社》,使用易语言为文学社制作电子社刊。

2013 年

开始正式进入互联网的范畴,买了虚拟主机和域名,搭建自己的第一个博客(xqgz.info,域名早已不续费了)

并在同年折腾了很久的虚拟主机优化以后,决定购买了一个 VPS。第一个 VPS 是在淘宝买的, 28 一个月。

买了 VPS 以后,了解 lnmp.org 军哥的一键包,同年还研究了其他 VPS 上个人博客的各种优化。

后使用 AMH 面板(当年的帖子 http://amh.sh/bbs/post-803-1-1.htm)

同年开始使用阿里云,并和好友妙正灰(mf8.biz) 一同成为阿里云论坛的版主。

2014 年

经由 AMH 面板,开始初步涉猎 PHP 开发,并延展到更有价值的 WordPress 主题开发和插件开发领域。

同年,考上大学。

白宦成在大学加入了「新媒体研究会」,学习了解新媒体的事情,并在当时打下了写公众号的基础。

得益于大学的班助制度(程翔先生,很有才华的一个学长,他获得了我们学校的魅力学子,白宦成也在他离开大学那年,获得了魅力学子的荣誉称号),班助发现白宦成有搞新媒体的能力,便带着白宦成一起搞事情。

同年,得益于学长介绍,在 2014 年和另外一个学长合作,开始做外包项目。早期使用 DeDeCms 开发企业网站。

2014 年,加入 Linux.cn ,担任译者

2015 年

2015年,响应大学生创业的号召,白宦成前往红安县注册了企业「红安县稳云网络科技有限公司」,同年暑假,在红安县做外包项目赚钱。

同年,成为腾讯云论坛版主,并开始为腾讯云论坛制作视频教程。

同年,加入腾讯云校园布道师计划。

同年,在 Linux.cn 贡献项目和代码,逐渐深入组织。

2016 年

2016 年,小程序横空出世,白宦成使用昵称「西秦公子」为极客学院制作视频课程《微信小程序进阶实战之分答应用开发》、《微信小程序入门实战(仿V2EX)》

同年,得网易的领导尧漂海先生赏识,白宦成得以在 2016 年在网易实习。

2017 年

这一年,白宦成基本上都在上课 + 做外包项目赚钱,同时,还在学习小程序技术,并不断的产出视频教程。

同年,开发小程序「运维密码」

2018 年

这一年,白宦成开始进入知识付费领域,并在 GitChat 的支持下,写了自己的第一个专栏《人人都能学会的 WordPress 实战课》,该专栏现已全面开放 https://www.easywpbook.com/

同年 开发小程序「Linux」

2019 年

前往深圳,加入青寕信安科技,担任嵌入式工程师

同年在深圳 GDG、台湾 COSCUP 等多处活动分享

同年开发出自己的第一个爆款开源项目 —— logoly.pro

2020 年

加入腾讯云,担任云开发团队的产品运营。

2021 年至今

开发出自己的第二个爆款项目 —— NESHouse

自由职业者

工程师和码农

工程师和码农

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

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

白宦成

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

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

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

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

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

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

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

我看的动画

我看的动画

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

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

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

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

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 循环、抓取数据等。

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

3. 在线练习 Alpine.js

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

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

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

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

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

通过了解这些项目和工具,你可以看到别人是怎么使用 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 也是一个不错的选择。

开了一个 HOW-TO 目录

开了一个 HOW-TO 目录

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

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

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

屏蔽爬虫请求的四种方式

屏蔽爬虫请求的四种方式

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

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

1. 屏蔽 UA

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

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

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

if ($http_user_agent ~* "Baiduspider|Googlebot")
{
    return 403;
}

上述这段代码可以实现在 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

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

3. 在安全组层面屏蔽 IP

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

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

4. 在 CDN 层面屏蔽 IP

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

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

总结

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

两代人的交锋

两代人的交锋

我和我妈的关系一直都不太好。

她年少时便好强,一直到现在,始终好强,万事喜欢比一比。

我也好强,18岁前唯唯诺诺,18岁后独立便喜欢万事靠自己。

我们两个人一样好强,父亲去世后, 没有了中间的缓冲,我们争论的的时候,也会更加的激烈。由于身份的限制,我并不能说出一些很过分的话,我们的地位天然不对等,所以,基本上每次争论,我都会无奈的放弃。但放弃,并不意味着我会顺从她的选择。

在上一次争论中,她提出:既然你认为自己很能, 那你以后每个月给我打 5000 块钱。

今天,她很轻描淡写的说,你以后每个月给我打 4000 块钱,就当你交房贷了。我说,

我可以理解,钱是她仅有的控制我的方法。当年,她也试图用这样的方式来控制父亲。但,我和父亲不同的地方是我更加的自由,也比父亲更加的冷血。

我已经做好了每个月给她打 5000 的准备,她希望用这 5000 来控制我,我同样希望使用这 5000 来堵她的嘴。

对抗,自此正式开始。

一个小技巧,提升你用 TailwindCss 写代码的效率

一个小技巧,提升你用 TailwindCss 写代码的效率

TailwindCSS 是我目前比较喜欢使用的 CSS 框架,组件优先的设计思路可以让我更好的完成产品原型的建设。

而 TailWindCSS 的一个问题就是对于文档十分的依赖,你需要对比着文档来写样式,才能够写出自己想要的样式,比较麻烦。不过,最近写代码的时候,我发现了一个好办法,可以很好的写出我们想要的样式。

这个办法就是,使用浏览器自带的 DevTools 中的「元素类」这个功能,来调试样式。

操作的路径也非常简单,打开浏览器的开发者工具,选择元素一栏,在其中找到你要调试的元素,并在右侧的属性列表中勾选开启元素类(.cls),你就可以在下方的样式元素类输入框中,输入关键词,来获取到当前页面支持的样式,从而可以查看不同的类会对组件产生的效果。

通过这样的技巧,你可以很轻松的完成样式的选择。在完成调试后,只要把你需要的样式写入到组件内,就可以将你调试好的样式固化到你的代码中,从而完成你的工作。

总结

借助浏览器自带的元素类功能,你可以很轻松的完成基于 TaildwindCss 的样式编写。