你好,耳先生

先生贵姓?耳东陈。好的,这边请,耳先生。

May 05, 2022

东澳岛之旅:理想与现实

4月29号,朋友问我五一去哪里玩,我想都没想就说了哪都不去。事实上也是这样,并没有任何出游的计划,但是回头仔细想想五一假期那么长,没理由那么多天都在家里吧。于是就挑了一个短程旅行,目标地点就是东澳岛。

December 31, 2021

2021: 一地鸡毛

每一年的自我审视,不仅仅是写给别人看,更是对这一年的自我评价。活得糟糕与否并不是总结的意义,而是来年避免重蹈覆辙,越过越好才是本意。我也无意跟其他人对比,每个人都有自己的生活轨迹,强行匹配他人的轨迹不见得活得更加美好。

June 10, 2021

奇怪的内卷:感谢联通

从很早开始只有联通在B站上面发舞蹈区视频,但是只能说是平平无奇并没有引起太大的波浪,基本只有10多20几万的播放量,基本上很少能登上分区的排行版,直到中信银行在2020年6月发出了书记舞一下子就打开了这个潘多拉魔盒,成功出圈,也能在他的视频上面看到无数的「感谢联通」弹幕。

April 19, 2021

年轻人的第一次删库跑路

恭喜自己,这是第一次生产事故,也是第一个 T0 事故

规范化自己服务器的事故级别:

  • T0: 极其严重事故。用户数据造成不可逆的损失
  • T1: 严重事故。用户数据造成可逆损失,需要 ops 的接入恢复数据。或者服务功能出现不可用情况
  • T2: 一般事故。用户数据未损失,只存在显示异常等展示型内容异常
  • T3: UI 异常。因为UI布局等问题,导致使用出现了麻烦

March 05, 2021

狗子的一天

有一种思念叫你家的狗子在想你

February 03, 2021

你可能真的不那么需要复式记账

我翻了翻 GitHub 上面的项目记录,从2019年的2月开始初始化了记账项目的代码库,到现在2021年的近2月,也该是时候说一说我这两年来设计到的记账心路历程。

关于记账这件事早就已经是一篇红海,做的人很多,死的更多。无数项目突然涌现出来而后又死得消无声息。这篇文章会从几个方面来细数为什么我们那么喜欢记账而又坚持不下来:流水账与复式记账、趣味性与专业性、自动入账与手动入账。

January 10, 2021

2020:他说有点累了

“你说,你觉得我是一个很菜的人吗?”我没有回答,只是静静地拿起了桌上的酒杯,事实上我也不知道怎么回答?

坐在我对面的是耳先生,我和他已经一年没有见面了。今天是圣诞节的晚上,很难得我可以把他约出来,但是坐下来已经快半个小时了,他才缓缓说出这句话。

June 11, 2020

Rust 过程宏 101

在 Rust 1.45 中,Rust 的卫生宏(Hygienic macro)迎来了 stable 版本,这意味着过程宏(Procedural macro)声明宏(Declare macro)板块全面稳定。那么是时候该认真学习一边过程宏的内容了。

过程宏相比于声明宏的灵活度更加高,其本质是输入一段 Rust 的 AST 产生一段 AST 的函数,同时 Rust 提供了三种不一样的语法糖来满足不同的使用场景。

  • 函数式(Function-like)的宏 - 这跟声明宏很类似
  • Derive 宏 - #[derive(CustomDerive)] - 一个用于结构体和枚举类型的宏
  • 参数宏(Attribute macros) - #[CustomAttribute]

December 31, 2019

2019 个人总结

无意中翻博客草稿的时候,发现了 2018 的总结还在停留在草稿阶段,现在就已经要写 2019 年度总结了,不禁感叹时间流逝之快。

November 08, 2019

我的技术断离舍

在工作了一年多后,脑子里面满是想离职的事情。在此之前,我还在持续构思这一年多学习到内容的总结,然后品了品,这一年内,为了柴米油盐持续奔波,并没有留下过多的时间来学习新的技术,反而相比于刚刚毕业的那个时候,这时的我忘记的知识远远多于我学习到的。

然而又尽力过一段时间的沉思,我才意识到这可能并不是一件坏事,反而让我可以更好地学习下去。

June 13, 2019

简单几步打造个人集群和自动化流水线

在认识的小伙伴发了他做的项目部署文档出来之后,我便决定开始写这篇文章,原因是他使用的部署方式太麻烦,而且太不自动化,同时有时候也会因为开发任务繁忙导致没能部署好等等。

这篇文章是介绍了一个极度适合用于个人或者几个人的小团队使用的集群搭建方式,在保证了安全性的同时,提供了几乎全自动的部署方式,在手动配置一次之后,每次服务更新都是自动触发的,极大地减少了部署的时间。

本篇文章适用于 GIT-FLOW 类似的「master 即 生产代码」的一切工作模式(或者某一个分支为生产代码)。如果您的开发模式不符合这个特征,那么可以关闭网页了。

May 13, 2019

Actix通过什么方法来实现路由注册的.RUST

如果你写过 actix-web 1.0 的代码,会发现在路由注册的函数中,你可以传入各种不同签名的函数题。

App::new()
        .service(
            web::scope("/admin/")
                .service(
                    web::resource("/article").route(
                        web::post().to(post_method),
                        web::delete().to(delete_method)
                    ),
                )

不难发现,根据业务的不同,传入 to 方法中的函数签名必然会不同,那么 Actix 是怎么处理的呢?或者说是怎么实现这个功能的。接下来我们将一步一步实现这一个类似的需求。

April 28, 2019

优化 Rust 的项目 Docker 打包流程.Rust

在把 Project Rubble 从 Rocket 框架迁移到 Actix-web 的过程中,我顺便把困惑已久的 Docker 打包流程优化了不少。

这篇文章适用于那些在项目中带有 Denpendencies.lock 类似的固定依赖版本的 LOCK 文件。

April 18, 2019

自动解引用.RUST

解引用应该说是 Rust 为了解决不采用 Class 来实现对象化编程的一个解决方案。假想一下如果 Python 或者 Java 之流,需要对一个结构体(准确来说应该是类)进行自定义扩展:增加字段,增加方法,重写方法等等,我们可以直接用继承的方式来实现

class Base:
	a: int = 2

class Extend(Base):
	my_self_field: int = 3

当一个函数希望传入实现了 Base 类的所有实例时,可以直接以 Base 为约束,限定其参数范围。在 Java 中就可以使用基类或者 Interface 来约束。

def base_bound(param: Base):
    pass

这一套在 Rust 并不适用,在 Rust 中时采用 Struct + Trait 来抽象对象化。所以若想对结构体进行扩展,那么就只能再用一层结构体去包(wrap)住原来的结构体。

struct MyOwnDerefStruct(String);

February 11, 2019

科技的未来到底在哪里?

最近把电幻国度看完了,同样主题的书籍和电影有黑镜和玩家一号。但是这几个作品表达的未来都不太一样,各自导演和作者表达了对这种技术前景的担忧和喜悦。

December 28, 2018

入门就写一个博客程序吧.RUST

当你不知道要干什么的时候,那就写个博客程序吧。 —— 鲁迅

是的,鲁迅曾经这么说过。当你的编程能力出现停滞的时候就写一个博客吧,尤其是入门阶段。更具体而言是写一个 CMS 系统,这也是我平时学习的习惯,我会一步一步解释清楚为什么我会选择这样的学习路线。

December 24, 2018

人家甩你很正常啊,你丑

如果你能重遇一个很久之前遇见过的人,你会想对她说什么。如果命运决定你只能走那么远,你会不会奋力再拼搏一下,再努力往前走两步?

那么热的夏天,少年的后背被女孩的悲伤烫出一个洞,一直贯穿到心脏,无数个季节的风穿越这条通道,有一只萤火虫在风里飞舞,忽明忽暗。

——《云边有个小卖部》

December 11, 2018

更好的 IDE 配置.RUST

这段时间一直忙于折腾 Rust,自从 Rust 2018 Edition 出来之后,一个很明显的感受就是写起来更加符合一个现代化编程语言的样子,当然也有可能是我的水平太低了,还不足以体验到 Rust 那种非人类的写法和特性。

这一系列文章会是我记录 Rust 学习路程的文章,那么自然而然地就是从环境配置开始了。

PS: 这一系列的文章都是以 MacOS 为基础,不会过多涉及 自编译 Rust、环境折腾等等内容,更加注重在如何高效地进行 Rust 开发和 Rust学习技巧。

July 12, 2018

自制 Web 框架的那些事儿

不想造轮子的程序员不是一个好码农。 —— 鲁迅

February 21, 2018

浅谈 Web 用户验证的几种方式

这片文章试图介绍清楚网站前端与后端之间数据交流时用到的技术,诸如 Session,Cookies,Token,Jwt 等等;同时解释清楚几个初学者容易混淆的地方。

December 29, 2017

2017 个人总结

鲁迅说过:"Sometimes you need to leave things behind to move forward"

这一年下来,整个过程就是这样的情况。放弃了一些东西,努力了一些东西。

November 28, 2017

用 Webpack 和 React 搭建一个适用于 Chrome Extension 的脚手架

做为一个不称职的前端设计师,对于前端的框架,尤其是各式各样的 JavaScript 框架,我都是习惯使用官方自带的 CLI 工具来搭建脚手架的。因为在混乱的前端世界中,BabelWebpack 的配置不是一般的麻烦。而且我对于前端的学习就是冲着写 Side Project 去的,所以效率对我来多很重要。

我选择的前端框架是 React + Redux,同时也有一个很好用的 CLI 工具来初始化 React 项目:create-react-app。对于像我这样的懒人来说,这确实很好用,但同时也有不少缺点。

我是一个勤勤恳恳的 Python 工程师,所以使用装饰器是我的日常,同时 JavaScript 在 ES7 的 Proposal 中也有类似的装饰器提议,那么使用装饰器肯定是必不可少的了。Create-Reat-App 的最大问题就在于不支持装饰器

August 27, 2017

在 HongKong 的那些天那些事

终于忙完了,有了闲空可以写一写那些天在 HongKong 遇到的一些人,一些事。

June 21, 2017

关于 HTTP OPTIONS

本文参考了两篇文章:

首先 OPTIONS 方法不应该像 GET, POST, PUT 等方法一样返回内容,它返回的应该就只有Header。

OPTIONS 的功能基本上只有两个:

  • 在普通访问中,它会返回同 URL 中允许访问的 METHODS
  • 在跨域访问 (CORS) 中,返回对应的原站 (Origin) 能访问的METHODS

May 25, 2017

Nougat(Misuzu) 的进展和改变

Misuzu 这个名字被人吐槽了很久,不知道怎么读,也不知道什么意思。所以就改成了 Nougat 这个名字,意为牛轧糖。

May 19, 2017

一场诡异的梦

终于放了很长的一段假期后,我重新回到了学校。明明来这学校很久了,可是我还是无法记住整个学校的所有路径。甚至我已经忘记了这段假期放假的理由。

我的学校坐落于一个偏僻的地方,旁边一栋其余的建筑物都没有。整个学校在天空看起来就像一个巨大的堡垒,在其周围是一些泥土小路,少有的几条沥青公路,并不能见到任何高架公路。其余地方均是被黄图覆盖的大地。

April 19, 2017

Misuzu 偏执的 WEB 框架

我是一个不折不扣的偏执狂,所以我认为所谓的产品就应该是为了特定的人群而服务的。这同样适用于 WEB 框架。

现在 Python 中的三大 WEB 框架(Flask, Tornado, Django) 都属于通用型框架,并不存在一个为 API ,尤其是 REST API 设计的框架。这也是 Misuzu 被创建的原因之一。

February 08, 2017

Python Web 从入门到放弃:Flask or Tornado

Python Web 这个领域一直都处于不温不火的情况,但是因为 Python 的易上手性,导致了一部分人也在坚持着这一个领域。 Python Web 框架主要有: Django、Flask、Tornado。

这三大党派都有自己坚持的理由:

  • Django Full Stack 式的开发模式,开发者查看官方文档即可实现大部分网站的大部分功能。
  • Flask Minimal 的框架,框架内部只实现了基础功能。Extensionable 的设计,让你的绝大部分功能都可以通过其他开发者完成的 Extension 来实现。
  • Tornado 三者中唯一一个异步框架,Web Framework 和 HTTPClient 的结合,同时也是一个简约的设计。

January 06, 2017

Rust Web初试

Rust 是最近中意的一门语言。相比于 C 和 C++,我更加喜欢 Rust 的语法。

奈何 Rust 的学习曲线太陡了,一直都只能在入门阶段徘徊,没能深入了解 Rust。 个人感觉最大的问题在于没能搞懂 Rust 的所有权、引用借用和生命周期三个方面。

因此,我尝试着用 Rust 来进行 Web 开发,从而加深对 Rust 语法的了解。

December 05, 2016

山寨红色 iPhone 5S

突发奇想,买了一个祖国版 iPhone 5S ,这个红色是不是很好看呢。

November 25, 2016

如何正确的部署 Flask 项目

系统 Python 设置

由于每个 Linux 发行版的内置 Python 都不太一样,而且为了避免你的项目在不同的 Python 版本下出现各种奇怪问题。

比如,requests 库在 python 2.7.5 的环境下访问 HTTPS 网站会出现 SNI 的问题,导致访问失败。

所以我们需要使用 pyenvvirtualenv

注:强烈不建议直接更新系统里面的 Python ,否则你会出现各种各样的奇怪问题

August 21, 2016

一人孤独,两份寂寥

![lonely][1]

大概是因为这篇文章 这几天累得我想自杀 引起了我的思绪,或者早就预谋已久。

孤独就是一份毒品,能让你上瘾,亦能杀死你。

那篇文章是一个996的程序员发出来的。回复的人几乎都是在劝楼主换工作、对自己好一点别那么拼。朝九晚五,看似很合理也很常见的工作时间,在程序员圈子基本不可能见到。996即是指朝九晚九六个工作日,甚者9107。

June 25, 2016

HOOK机制浅谈与实现

HOOK机制最常见的地方就是在 windows 系统里面。你可以通过 HOOKS 来监控键盘输入、鼠标点击等等。那到底什么是 HOOK 机制呢?用人话讲就是“允许在特定的行为前后添加自定义行为”

# before doing
do something...
# after doing

June 25, 2016

Guys, you are not the center of the world.

标题用英语的原因在于,用中文讲相当不雅。

这篇文章可能会引起你的不适,适当时候可以选择略过。

有些时候,你真的很难理解你身边的某些人的所做。所以他们会令你十分难受,以至心情十分不好。我不懂,真的想不明白。

March 15, 2016

我有5毛,你能卖我一碗鸡汤吗?

“你虽平凡,但每个人都有一部属于自己的传记” —— 某个我听说过的人

我?不知道谁来的。一般别人叫我都是那个谁。不突出、没专长、没特色就是我的特点。我只是芸芸众生中的一个普通的存在。

February 22, 2016

This will be the day we've waited for

![RWBY][1]

This will be the day we've waited for This will be the day we open up the door

这两句话是最近比较迷上的动漫 RWBY 里面OP的头两句。感觉蛮不错的,所以就被引用来了。

January 26, 2016

抓不惯的笔,写不出的字

高中那些年,有幸进入了一家不错的高中,地域也很偏僻,能够安静地认真读一读书。也是在那个地方,自己真正地爱上了文字。

那里的宿舍堪称豪华,几乎可以称得上是学生宿舍的最高标准。自己唯独最中意的一点便是上床下铺的设计。还记得我们(那些舍友死党)把差不多干的衣服往床边一挂,人往里面一坐,开盏台灯,就可以奋斗到天亮。当然我很少那么勤奋,像我那么懒的人至多躲在里面玩玩手机,写写情书罢。可惜最后那情书还是只有自己看到。

我喜欢的,是一个人躲在里面自己的空间。也真是这样,我逐渐喜欢上了写日记。

November 26, 2015

要么孤独,要么平庸

秋风起,秋风落,便是一年;睁眼,闭眼,便是一天。时间消逝之快,我们很多时候难以想象,只有事后回想,才知晓。

有人说过,人的一生大概只有1000个月的时间。如果我们试图画一个表去记录这1000个月,每过一个月就画去一个,这样就可以感受到时间的逝去。

July 14, 2015

[译文]如何使用Flask部署大型应用?

原文地址: https://github.com/mitsuhiko/flask/wiki/Large-app-how-to

译者:本译文已经违背了原文的意图,请勿加以转载。此文仅用于个人使用。

这篇文章并不是官方的!它包含了很多非官方资源的建议并且没有通过一系列的测试(审查)。这里描述的写法可能很有用,但是同时它也可能很危险。请记住,不要在本文档添加任何附加信息。或者,引用在你的网站或者博客。这篇文章之所以保存,是因为很多StackOverflow答案指向了这里

June 07, 2015

基于证书权限的电脑应用商场

May 30, 2015

如果,哭可以解决问题

我们的出生就被称为了“呱呱坠地”,说明哭是我们与生俱来的。不需要谁来教,谁也教不了。

然后,这么一个与生俱来的能力,却被冠上了小孩专属的称号。摔倒了,哭一下,等爸妈来安慰自己;刮伤了,哭一下,等爸妈来吹吹伤口。这些温馨而和谐的画面,永远都是以小孩为主角。

长大了,坚强了。坚强,一个自欺欺人的词,没有人愿意选择,或者说喜欢,受伤了不需要人安慰就自己当作什么事都没发生;没有人喜欢眼泪在眼眶里打滚就要留下来了,却只能默默咬紧嘴唇,忍住哭声。

April 20, 2015

20150420 V2EX备案日

关于V2EX,我去那里差不多一年了。V2EX,一个创意工作者的论坛。

我很喜欢那里的氛围,因为它不像大部分国内论坛那样,全都是水贴。在V2EX,我能找到很多很有想法的人,也能看到其他人很奇妙很神奇的想法。这样十分享受的氛围,使我基本每天都在刷V2EX,这也是我手机除了用于通讯以外最大的用处了。

不知道什么时候开始,C大的ShadowSocks在V2EX里面流行了起来,让V2EX涌入了很多销售SS的用户,小白也慢慢增多。

April 18, 2015

新的博客