月度归档:2019年02月

一些能够帮助你更好工作的工具

今天是 2019 年 2 月 11 日,农历己亥年正月初七。
今天是新年的工作第一天,不知道你是否恢复了工作的状态呢?
我如今还在家中,并没有即时赶到深圳,不过,我今天的工作状态,还可以。今天有 6 个小时在 Coding 。
接下来,我来为你分享一下我用来让自己更加高效工作的工具。

记录你工作的时间 —— Toggl


关于记录工作时间,我曾经在少数派上写过一篇文章《实践时间记录法,我都得到了什么》
在那篇文章中,我介绍了我是如何使用 Toggl 的。后续,我又切换到了 atimelogger ,来完成全天候的时间记录,不过随着使用的深入,atimeloger 的记录方法还是略有不变,我便成了如今的双轨制进行。
在 atimelogger 中我记录的是一天中的各种活动,在工作这一项目就粗略记录,以 Toggl 为准,在 toggl 仅记录工作相关的内容。
如果你真正开始记录自己的工作时间,你会发现自己虽然在 996 ,但是你的有效工作时间根本达不到这个长度。
从这个角度来说,记录时间对你有很大的帮助,可以让你发现,你的时间到底是怎么样的。

如果你也在用 Toggl ,欢迎你与我一同讨论

控制你的欲望 —— Focus

在使用计算机的过程中,我们经常会遇见一个问题,如何控制自己的手。
毕竟工作一会划划水是再正常不过的事情了。但是一划水,时间就不知不觉过去了。如何才能避开这个问题呢?

Focus 这个应用就是来处理这个问题的。Focus 可以将你的浏览器中的请求进行拦截,如果你访问了在 Block List 中的网站,就会显示一个包含了名言警句的页面,提醒你不要这么做。
你可以像我一样,把你自己经常用来划水的网站加入到 block list

Focus 默认的是自己设定 Focus 时间来进行 Focus 的,你也可以使用 Schedule 模式,设定每天默认的 Focus Time。
我目前的设定是工作日几乎全天 Focus

周末就随意划水。
如果你曾受困于社交软件、网站的吸引,不妨试试 Focus

生产力分析 —— timing

Timing 的这个软件是用来记录你的电脑上的软件打开的时长的,并可以根据你自己的设定,来计算生产力。比如我设置一些开发工具为高生产力,QQ 什么的就设置为低生产力。然后每天可以有一个生产力得分。

借助于 Timing ,你可以知道你电脑的时间都花费在哪里了

读历史,可知兴衰

读历史,我们知道过去的人们都犯过什么错。同样的,对于我们自己的时间进行记录,可以让我们知道自己都犯过什么错。

Reference

反贪风暴2观后感

在看了反贪风暴3 后,我觉得反贪风暴系列可能都不错,趁着今晚写代码没有状态,就看了一下反贪风暴2。

反贪风暴2的格局不如 3 更大,不过也好,如果各个都那么大,国家就惨了。

说会到剧情里,2 整体来说,看起来还是很爽的。不过在电影里,当背后的 Boss 出场以后,节奏明显快了很多,Boss 出场当天就被干掉,可以说是非常惨了。

而且那么大的 Boss 来了,竟然只带几个人。香港果然很牛逼。

在这一部里,陆威廉和刘保强开始合作,一直延续到了第三部,也还OK,算是交代了第三部里为啥俩人能合作了。毕竟生死之交。

这一部里的亮点是红星集团与李丽,对标的是深圳红十字会和郭美美。

反贪风暴3观后感

电影海边

反贪风暴3 最早是坐在回老家的长途车上看的,在长途车上无所事事,就看一看车载电视播放的电影,播放的便是《反贪风暴3》。

反贪风暴3中正面角色有三人

  • 陆威廉:廉政公署
  • 刘保强:警察
  • 程德明:廉政公署内部侦查

反面角色出彩的便是

  • 游子新

这部剧主打的是洗钱,令我印象最深刻的是洗钱方式手段的花样繁多。

游子新组织的100亿洗钱中的种种手段,让我看到了金融背后的花样。

我曾经以为招美欣的原型是郭美美,不过后来看了反贪风暴2,才发现,反贪风暴2中的李丽才是郭美美。

这部电影由于是在长途车上看的,并不是完整版本的,中间跳过了一些,还是挺遗憾的。不过看过了的电影,除非过去很长时间,我忘记了,不然我不太可能立马去再看一遍,因为会记得后面的剧情,有意无意的给自己剧透。

让自我占据你人生的上风

今天,在回家的路上时,在听播客,在听到播客的过程中,主播(见引用1)的一句话点醒了我,让我对人生有了新的认识。

自我、本我、超我

在文章的一开始,我们先要来了解一下自我、本我、超我的意义,我在后面的讨论也将基于自我、本我和超我进行分享。
自我、本我、超我的三个概念是精神分析学家弗洛伊德(见引用2)

自我

自我是人格的心理组成部分,指个人有意识的部分。

本我

本我是人格的本能组成部分,指人最为原始的、属满足本能冲动的欲望,如饥饿、生气、性欲等。

超我

超我是人格结构中的管制者,由道德原则支配,属于人格结构中的道德部分。

自我、本我、超我之间的关系

本我跟随欲望行动,超五克制本我的发挥,确保人还是人。而自我则在二者之间求的生存。

自我、本我、超我的体现

作为一个程序员,我是有很强的欲望来去让自己的生活被一些特定的规则所规划的。我希望将我自己的生活都放在一个可以被量化的场景下。
在这个过程中,占据上风的是超我,超我象征着规则,你的一切行为都在规则之下。


作为一个普通人,我也有着喜怒哀乐,我也会歇斯底里的疯狂。我会很享受生命中的一些过程,比如性。
在这个过程中,占据上风的是本我,本我象征着原始的欲望,你的一切行为都在原始的欲望支配。


作为一个创造者,每当我开始创作(比如写作、比如编写程序)时,我的大脑会极度亢奋,以非常高的效率去做我自己所想做的事情。
在这个过程中,占据上风的是自我,自我在规则之外寻求突破(创造本身就是在规则之外做事),自我是在原始之中规整(做事来促使熵减)

倘若我们人生全部都是….

如果我们的精神让超我占据了上风,甚至是所有,我们的生活将不存在一丝波澜,你所做的任何事情都是合乎规则的,你所做的任何事情都是可以预期的,那么,这个时刻你还有什么可以做的呢?唯死而已
倘若我们的精神让本我占据了上风,甚至是所有,我们的生活将始终处于混乱之中,你所做的一切都是随机的,不可控的,你的欲望可以得到即时的满足,但你的生命也可能稍纵即逝,那么,这个时刻,你又有什么可以掌控的呢?你无法掌控任何事情,一切都由命运与随机决定。
倘若我们的精神让自我占据了上风,甚至是所有,你将真正明白,何为「自律使我自由」,你将明白,在混乱时,去追求规则;在规则中,去寻求创造。
自我,让我们能够在规则之下寻求到变通;在变通之中找到规律。拥有自我,人生一大乐事。


前一篇文章:Pay For Your Filter


One More Things
今天在听播客时,除了我所引用的一篇播客以外,还听了 Byte.Coffee 的另外一期播客,讲的是「无产阶级的财务问题」,当然,这个只是个玩笑,不做任何投资建议。
Byte.Coffee Episode 26: Financial Minimalism 财务极简
引用1:https://zh.wikipedia.org/wiki/%E6%9C%AC%E6%88%91%E3%80%81%E8%87%AA%E6%88%91%E4%B8%8E%E8%B6%85%E6%88%91
引用2: http://byte.coffee/episode-25/

创作好文章的写作方法

怎么写出好的内容,是撰写原创文章的关键所在。之前介绍的那些经验和技巧大多都是技术性的,比较易于操作,但是,创作一篇好文章,就应该考虑一下写作的高级技巧,讲求更高层次的写作经验。高级的文章写作技巧到底是什么呢?我不想照搬西方的那些理论,我想有一点自己的思考,就是按照东方的哲学思想来指导写作。

写文章和做人是一个道理,讲究德才兼备,不仅仅要有“才”,更重要的是“德”,以德为先。一个人可能很有才华,但如果缺少德行,依旧难以成为一个好作者。怎么样才能成为一个有德行的作者呢,下面是我悟出来的一些道理。

1. 利他

东方哲学“仁道”的本质是关爱他人,推崇亲和力,反对利己主义。对写作而言,多为自己的读者着想,帮助读者解决问题,传输给读者有用的资讯和技巧,个性化地写作,必要的时候要放弃一些个人利益,这就是写作的利他主义。举个例子,例如网站全文RSS Feed输出问题。虽然全文RSS输出有可能会被一些第三方聚合网站利用,损害网站自身的流量,但为了自己的读者能更加方便地阅读文章,网站就必须坚持全文RSS输出,哪怕有各种牺牲和损失也在所不惜。你对读者好,关心读者,读者自然会关心你,这就是所谓的“爱人者人必从而爱之,利人者人必从而利之,恶人者人必从而恶之,害人者人必从而害之”。

2.寡欲

每个人都有自己的欲望,有的人想出名,有的人想发财,但人的精力是有限的,不可能什么欲望都去追求。有些时候欲望还很可怕,一些人经不起诱惑,往往在冲动之下做一些不理智的事情,因此,应该有意识地不让自己产生欲望。西方有一些博客(例如John Chow)专门介绍怎么通过博客赚钱,这在西方是一个好主意,但在东方却未必。因为宣传写文章发财出名这种思想,会引发他人的一些不可能实现的欲望,如果过分痴迷和执着,往往还会害了别人。如果写作少些功利性,那作者就可以更多地考虑长远目标,进而获取一些更好的甚至是意想不到的利益。

3. 无为

无为的意思是说,做人要“有所为,有所不为”,在无为的地方应该无为,有所不为才能有所为。以道家的话来说,一个人有为还是无为的标准是“自然”。就文章写作来说,写什么样的内容就是一个选择。网站作者应该写自己擅长或喜欢的内容,不应该为了追求网站流量而写一些偏离自己网站主题的内容。对于各类“话题广告”或者各类“软文”,尽量不要写,虽然会损失一些金钱或流量,但这是值得的,只有做到有所不为,才能有所为。

4.人和

注重“以和为贵”是儒家崇尚的一种德行,对人际关系乃至团队自身的生存和发展都是至关重要的。人与人之间完全沟通和理解是不太可能的。“和”作为处理人际关系的一种原则,遵循了“和而不同”和“和而不流”这两个原理,包容不同的声音,和谐相处又不盲从。对网站而言,如果和其他网站发生矛盾和冲突,既要坚持自己的原则,也要包容对方的意见,做到“以和为贵”,努力平息相互之间的争论,而不应该写文章对他人进行人身攻击。攻击他人固然爽快,但却为此丧失了德行,可谓因小失大。

5. 中庸

中庸以“过犹不及”为核心,做人处事追求适量、守度、得当,既不过头,也无不及,不偏不倚,恰到好处。写文章也是一样,不要写一些哗众取宠、耸人听闻的文章来吸引别人的眼球,更不要四处炫耀自己的成果,例如流量有多大、收入有多高等。正确的做法是,要坚持中庸之道,追求从容不迫、进退自如的人生境界。

6. 不争

所谓“不争”,不是放弃一切,而是要以不争反立于不败之地。正因为你不争,所以天下才没有人能和你争,这才是竞争的最高境界,是“不战而屈人之兵”的竞争大智慧。在写作过程中,难免会和他人发生矛盾甚至冲突,有时还可能会遇到他人的诽谤污蔑和人身攻击。遇到这种冲突,不必回应、也不必解释,“宠辱不惊,褒贬由人”,那些因得宠而惊喜、失宠而惊恐的,全是名利之心在作怪。只有做到了宠辱不惊、去留无意,方能心态平和、恬然自得,方能达观进取、笑看人生。

7. 虚心

“虚其心”指的是善于放下心事。整天心事重重不可能心想事成。虚心还是一种德行,体现为一种容人的度量。包容那些对你有成见的人,包容那些诽谤攻击你的人。尽管某些网站的作者曾经攻击或污蔑过你,你却可以宽容和原谅对方。你的心量越大,你容人的空间越大,你的号召力和影响力也就越大。

总之,中国文化是博大精深的,文章写作的智慧也是如此,我们不可能把这里面的所有智慧一一穷尽。比起当今互联网那种急功近利的浮躁心态而言,这种东方的哲学智慧更能让网站作者达到一个新的境界。如果一个作者真能达到德才兼备这种水准,那么成功之路就不远了。

摘自:月光博客. 网站创富 从搭建 管理到营利 (图灵原创) . 人民邮电出版社. Kindle 版本.

如果,我们能控制自己

今天早上并没有能够成功在五点半起床去坐车,所以,我现在依然在老家。

之所以没能成功,有一些客观因素,不过,不在本文讨论,我们来讨论讨论主观因素。

我的闹钟其实是有两个的:

  1. 5:00
  2. 5:10

两个闹钟就是担心我自己不能够起床,不过目前来看,显然两个闹钟是无法拯救我的。

回顾我与两个闹钟战斗的场景,我突然意识到。我之所以起不来,很可能是与下意识关掉闹钟这个行为有关。

下意识关掉闹钟,让我从“你该起床”的场景中剥离出来,可以起床。如果能够控制自己,不要去关掉闹钟,让自己始终处于这样的一个场景中,想来能够更好的刺激自己起床。

在一个老旧的项目里引入 Mocha 测试

由于要做每日极漫小程序,也就需要其背后的漫画翻译组活跃起来,随之,就需要翻译组背后的工具正常使用,不过 LCTC-CLI 已经很久没有更新了,便趁这个机会,恢复这个工具的更新。

对工具的更新, 首先应当做的,自然是补全测试,这样才好确保自己的改动不至于让老项目无法正常运转。

安装 Mocha

首先,执行命令,将 Mocha 安装在开发依赖中。

npm install --save-dev mocha

随后,再修改 package.json 文件中的 scripts 部分的内容,将 test 对应的命令改为 mocha,效果如下

{
   ...
   "scripts": {
       "test": "mocha"
   }
   ...
}

这样,你就可以运行 npm test 来执行测试了。

编写测试

安装完成后,你可以运行npm test 命令,来执行测试,这时,你会发现报错如下:

Warning: Could not find any test files matching pattern: test
No test files found

这是因为你并没有创建测试文件夹和测试文件,所以自然会报错。

执行如下命令,来创建一个测试目录和对应的测试文件

mkdir test
touch test/test.js

再次执行,你就可以看到,测试成功通过。

0 passing (3ms)

虽然是告诉你,你并没有通过任何的测试代码(所以是 0 passing)

接下来,编写第一个测试,打开 test/test.js,然后填入下述代码

var assert = require('assert');
describe('Array', function() {
  describe('#indexOf()', function() {
    it('should return -1 when the value is not present', function() {
      assert.equal([1,2,3].indexOf(4), -1);
    });
  });
});

然后,再次执行 npm test ,这样,就完成了第一个测试,你会看到这样的输出

Array
#indexOf()
✓ should return -1 when the value is not present
1 passing (7ms)

这样,就完成了初步的 Mocha 的引入和测试。接下来,开始继续编写实际的测试即可。

不过,我在编写测试时发现,原先的代码结构极为不合理,因此,决定直接重写了。使用 TDD 的思想,完成重写这个工具。

科学需要证伪

再上一篇文章中,我提到了,想要去做一个前端的队列。

和几个朋友聊了聊,他们认为这个东西不值得做,因为没有价值。

在我看来不这样认为。

就这样的话题而言,证实很容易。只要实现,并证明可用,就可以完成证实的内容。

但是,更重要的是证伪,需要证明这个东西,虽然可以做出来,但是并不好用。具体的不好用是多么不好用,具体的量化。这样才能算完成了证伪

灵感:P2P 消息队列

灵感来源

今天在 V2ex 和别人讨论我写的《离用户近一点,再近一点》时,提到了队列、3rd API

关于 3rd API 的问题,我可以理解,因为涉及到安全问题,我们需要将 token 放在后端。如果安全问题可以解决,放在前端也不无可能。

关于队列的问题,我就有了想法?为什么不可行?

队列主要问题有三处

  1. 消息通讯
  2. 选举问题
  3. 调度问题

关于消息通讯,可以考虑实现 P2P 网络来链接不同的前端设备;而选举问题,可能需要我去看看拜占庭将军问题,以及了解一些数学相关的东西。其中,老王给我了一个思路,可以看看分布式队列的实现逻辑。

调度问题也可以参考分布式队列。

在搜索的过程中,找到了香港城市大学的教授的研究页面。

https://staff.ie.cuhk.edu.hk/~mhchen/projects/p2p.queuing.html

搜索关键词

peer to peer queue

peer to peer message queue

补充信息

搜索过程中,发现问题被简化了,可能有一些可能可以在前端实现队列的工具,比如 ZeroMQ。

警惕那些让你省力的工具

作为一个 Engineer ,前「后端工程师」,我用过不少后端框架,比如 PHP 里的 ThinkPHP(3.x)时代,Laravel(5.x)时代,Python 的 Flask、Django ,Ruby 里的 Rails。

其中,近两年我用的最多的是 Laravel 和 Django ,原因是他们提供了一个很重要的 Feature ,就是 Admin Panel。只不过 Django 是官方自带的(Django Admin),而 Laravel 使用的是第三方 Pacakge (Laravel-Admin)。

借助这两个工具,可以快速的生成一个好用且效果非常不错的管理后台,让并不是很喜欢做界面的我大呼爽快(实际上我并不是不喜欢写 JS,我仅仅是不喜欢写 CSS,现在的组件化开发大大的让我解脱出来)。只需要很少的一些代码,就能够完成自己想要的效果。

不过,这样让我产生了一定的依赖,现在要做一些和 Web 相关的事情时,我都会优先考虑 Laravel 和 Django ,因为他们提供了 Admin 后台,可以让我在很长的一段时间内不去关注后台的逻辑,更加专注于前台的开发。

这很好,很敏捷。但是也让我失去了自己开发业务后台的耐性,毕竟,已经有更加简单的实现方式了,为什么还要为难自己呢?

但是,如果你想要认认真真去做一个项目的时候,会发现这种高度简化的代码,让你的拓展性非常的差,你无法更好的去做好自己应该做的事情。

所以,为什么不从一开始就自己写后台呢?虽然慢了点,但是对于你自己来说,也是足够的。随着你自己的开发项目的变多,完全可以做一套你自己的通用后台,完全符合你自己的要求、想法。那才是你真正需要的。

离用户近一点,再近一点

在现代的工业体系下,任何工作都被拆分为流水线上的一环,如今的互联网行业更是从用户那里知道他们想要什么再到实际做出来,有足足六七个环节。

作为一个有写代码爱好的人来说,能选择的余地不多,唯有「后端工程师」和「前端工程师」,在过去的很长时间,我基本上呆在后端的领域,去做了很多后端相关的开发,自己也在后端方面有了更多的认识。

在新的 2019 年,我将会尝试让自己转向,成为一个前端工程师。接下来,我来说一说我这个选择的背后逻辑。

员工的价值到底由什么决定?

白子:离客户越近,其价值就越大。

提到择业,就避不开两个话题,企业的需求和员工的价值。一般来说,我们认为,员工的价值由他为企业带来的价值所决定

这句话没错,那么,员工如何为企业带来价值?

员工可以帮助企业创造更好的产品,但是,这是价值么?

更好的产品本身并不是价值,其所带来的用户、客户才是真正的价值

员工本身并不让企业盈利,相反,企业需要支付费用给员工。而客户则是支付费用给公司,帮助企业盈利。

从这个角度来看,离客户越近的人,越能产生价值,这也就是为什么我们会经常看到一个企业里,销售是赚钱最多的人,因为他们离客户最近,能够给企业带来实打实的价值。

技术背后的陷阱

白子:技术本身就是螺丝钉,只研技术,不过是一个螺丝钉,变成一个更粗的螺丝钉。

关注技术本身有没有坏处?当然没有,作为一个开发者,追求技术的卓越是应有的义务。但是,从企业的角度来说,只关注技术本身,意味着你的价值会不断降低。

技术再强,也是可以找到替代者的,区别仅仅是愿不愿意花那么多钱罢了。业务理解的深度,却是其他人无法轻易替代的。江山代有才人出,各领风骚数百年,技术迭代速度非常快,总会有新人出来,比你更加擅长技术。

为什么是前端不是后端

白子:如今的前端更加接近业务本身,更具备价值

随着现代软件产品的高度流水线化,我们推崇的前后端分离、RESTFul API、GraphQL 让后端的工作越来越轻松,可以花费更多的精力投放在技术深度的探索,去研究更加深层次的优化问题,而不需要花费更多的心思在业务逻辑上去。

同样的,前端不得不承担起业务流程的开发,工作量大大加大。虽然有各种各样的组件库帮助前端优化了具体布局、界面上面的工作,但业务流程本身的复杂度并不会因为组件库的引入而简化

在这种强前端重后端的模式下,前端承担了原本是后端的工作,让后端不再需要去理解业务逻辑,更加关注技术本身的内容就可以了。离业务越来越远,使得后端的话语权越来越小。

游刃有余的前端

前端工程师本身负责的是客户可以看见的内容,这使得他们相比于后端工程师,有着更多的职业选择

他们了解用户交互体验,可以从开发转换成为用户研究

他们了解用户使用方法,可以从开发转换成为销售

他们了解用户使用路径,可以从开发转换成为产品经理

而后端,由于专精于技术,其职业选择,也不过是从一门技术,转为另外一门技术罢了。

应该选前端还是选后端?

其实,说到开发,就难免会遇到一个问题?

你是想做前端还是想做后端?

在大企业内,前端和后端差距都不大,不过从个人成长角度来看,二者又有所不同。

从技术成长的角度来看,前端和后端的选择并不会影响你最终成为技术大牛。任何一个领域,都有足够多的人不努力,等待着别人去教他们,只要你愿意努力,很容易就超过他们。所以,在这篇文章中,我并不想从技术的角度考虑。

这个想法是这两天在喂羊的间隙想到的。

前端和后端的区别是什么?区别在于前端更接近用户,而后端离用户更远。

在传统的开发模式下,前端切图,生成模板丢给后端,后端加入模板的标签,渲染界面。

在如今的开发模式下,后端提供 API ,前端负责完整的交互、路由等工作,需要花费大量的时间和精力在与用户相关的内容上。这使得前端开发人员,有更多的机会直面用户需求。而后端更多的是面对业务,根据一个个业务封装编写对应的 API,这使得后端无法完整的了解用户的需求到底是什么。

为什么要离用户近?

我见到过很多程序员,他们只关注于技术本身,而不在意产品、业务方面的事情,但是如果你有着自己做点什么东西的想法,那么,就一定要离用户近,接触到用户真实的需求,并去分析,为什么用户的需求产品经理给出的方案却是这个样子的。

离用户更近,离钱更近。

不过,虽然前端可能更适合一个想要自己做事情的人,但是你反而应该先去以后端的身份加入到整个生态中,因为在一开始的时候,你还有足够的精力和热情去研究技术,随着时间的流逝,你对技术的兴趣会越来越小,会花费大量的精力在产品、推广上。所以,前期关注底层的技术,后期关注用户、体验层面的东西。