冒泡

新的一年就这样开始了。今早突然又想起了这个久未更新的博客。个人博客时代转瞬即逝——大家都这样说。至少在中国大陆是如此。可不是?数字生活的急速变化裹挟着每日日常一路向前。转眼十几年就过去了。而我,还时不时怀念起过去。
 
只有在这个时间尺度上,事物与事物,时代与时代,乃至个体生命的轨迹才变得更清晰可辨。又或许,这只是我的后知后觉。从这个意义上,一方面一年年过的飞快,因为生活的琐碎,因为新鲜事物的眼花缭乱。而与此同时,时间相对于一个人的生命长度而言,又是过的很慢的。一去多年,大时代,才在我们内心和周遭的环境,显露勾勒出的痕迹。
 
那些有意思的博客固然早就停止更新、停止访问了。可那些有趣的灵魂都在哪儿呢?新年第一愿——愿我能把它们重新找回来。
 

Thoughts on “The Absence of Field”

The Absence of Field” is the name of Episode 3 of West World Season 3. It allegedly comes from Mark Strand’s poem “Keeping Things Whole“. After watching, my thoughts has been lingering around the name for quite some time, for its intriguing nature of imagery.

A field is intangible, yet observable, quite a resemblance to a soul. In the poem, a field is missing because of “I” stand in the way. While in the show, Charlotte is no longer herself anymore because of someone else inside her body. Either case, the absence is a mirrored way of saying existence.

Who am I then, if not part of a field? What does soul really mean, for Charlotte not being Charlotte?

“I” move, to keep things whole. Hmm… Isn’t that an echo of the idea that soul is just a pattern, an “emergence” from perpetual motion in one’s lifetime?

梦中有你

记忆里的故乡
有你温暖的笑容
 
一次漫不经意的邀请
一回心照不宣的应允
 
我们穿越大半个城市
树木、阳光,如此陌生
 
远古的神迹
依稀可辨
 
空无一人
旁若无人
 

Thoughts on Personal Time Tracking Solution

Time Tracking and Productivity

Image credit: https://wellcomecollection.org/works/nugmen9p

For a long time, I’ve been searching for an ideal solution for tracking my own time usage at work.

The idea of this practice, is to promote time awareness. Time is money, people say. That is true, but meanwhile, time is also life itself. Just like how budgeting is helpful for personal financial planning, understanding how time being used could be the very first step towards making better use of life.

How I spent time at work is the part I eagerly wanted to improve on. Not just because working hours is (one of?) the biggest chunk of waking hours. But also because working as an employer, in a sense, is trading labor,  experience, and knowledge for income, through time as a medium. Making efficient use of time, hence helps a worker in many different ways:

  • Increased productivity that translates into either less time for the same workload, or same time with more output
  • Avoid work spilled over into personal life, aka better Work-Life balance
  • Grow the value in a career which is also relevant to the productivity or competitive edge

How exactly does time tracking help to improve work productivity? In my personal experience, it helps to keep focusing on the task at hand. More importantly, the data collected during the time tracking practice helps to spot the distractions. Either work-related distractions, caused by meetings, discussions, sync ups, etc. or personal activity-related distractions, such as phone notifications, IM, etc. All of these leads to context switches and that hurts productivity badly.

By practicing daily time tracking at work, I can clearly tell whether it’s a good day or bad day in terms of making good use of my time doing what I planned for. If not, what is the bottleneck? That power of retrospection and being able to audit time usage not just helps to improve productivity in the sense of efficiency, but also allows me to plan my time well.

Time Tracking Solution

The “ideal” time tracking solution I’ve always had in my mind, is something similar to a chess clock. Pressing a button is all I need to do to start time tracking. Before moving on to the next activity, simply have to press the button again. Or stop the clock by pressing the button. At the same time, all the activities and time records should be logged automatically in the background.
 
I believe in order to benefit from time tracking, the effort required to manage the tracking (cost) should be as minimal as possible. That’s the only way to sustain in the long run, and possibly to grow as a habit. The engineering way of achieving it as a goal is to remove friction out of the flow, gradually and continuously.
 
My actual solution consists of several parts. It gradually grew into how it is and makes a lot of sense now when I look back and re-think about it.
 

Part A – Time Tracking Service – Toggl

After a few trials, I finally settled down with Toggl. It is a time tracking as a service platform, which comes with a web UI, desktop and mobile application, API interface, as well as rich 3rd party integrations. For somehow reason, I’m under the impression that the main customers of Toggl are contractors, professionals or whoever bill time by hours. Nevertheless, Toggl also serves my time tracking needs really well.
 
The UI is very intuitive to use. To log a time entry, simply need to click the start button. Details of the time entry, such as category, tag or description can always be added later. Previously logged time entry can be re-started with a click, which I found very handy to use for logging intermittent work of the same job.
 
The desktop version is equipped with an idle detection feature, which means if no input activity (keyboard typing, mouse moving, etc.) detected in the extended period while the clock is on, it will pop up a window asking how to deal with the time window. Choices include discarding the idled time period, keeping it as part of the on-going entry, or create a new time entry for that idle period. This is also very useful, as from time to time, work at hand might be interrupted, e.g. by an incoming conversation. There’s probably no time to log a time entry. In such a case, idle time detection can be used for backfill.
 
With data logged, Toggl also provides various visualization to read the data. Several key things I typically use with the graph are:
 
  • Ratio of meaningful time or signal-noise-ratio throughout the day (categories in a pie chart)
  • Daily or weekly trend of signal-noise-ratio  (weekly bar chart) 
  • Number of context switches for a given day (timeline, num of items)

Part B – Event trigger – iOS widget, and Flic smart button

Toggl solution by itself probably is good in many cases. However, the more I use it, the more I feel a button is really one step missing for a smoother experience. Since time tracking can happen anywhere, anytime. Not always I have my laptop lid open. A button really is here to save.

I end up using a Flic button and place it to the corner of my laptop front lid, where I can easily reach with one hand and press, regardless of laptop lid open or closed.

Flic is a smart button that has bluetooth connection either pair with a smartphone or Flic hub. Once pressed, the real action is up to you to choose from a rich ecosystem. In my case, I hooked it up with IFTTT and from there to Integromat (will talk about that later).

Believe it or not, having an easy-to-access physical button for time tracking, not just making the task much easier, but also gives you a lot of time-in-control confidence psychologically. (•̀ᴗ•́)و ̑̑

It’s worth to mention that, virtual buttons are also helpful on occasions. The virtual buttons I use are from the Integromat app and can be added as iOS widget. With widget, I’m only one swipe away from those virtual buttons even when the phone is locked. That is way much better than opening up an app. I mainly use the virtual buttons when the physical button not around or for the initial troubleshooting setup.

Part C – Workflow engine – Integromat

Integromat in my opinion, is where the magic happens. From there, I can design the whole workflow after button pressed.
 
Similar to IFTTT, it allows all kinds of Internet services to be added either as triggers or action targets. On top of that, filters, routers, API payload processing using functions, and orchestration logic can be easily added with a graphical scenario designer.
 
For instance, I use the following scenario to stop a time entry when Flic button long pressed. When that happens, Flic triggers a webhook through IFTTT. The webhook then fetches current time entry id from Toggl, and reaches out to Toggl again to stop the time entry using that id as input. There’s a lot of room for this designed flow to improve, but hopefully that demonstrates the potential of Integromat, powering customized workflow with automation. 
 
 
Well, that summarizes my time tracking solution. Enjoy the fun!

失去了锁的钥匙

失去了锁的钥匙
静静躺在我的抽屉里

逝去的记忆、时光
钥匙依旧是钥匙

究竟哪一个
才是真正的错觉?

前尘往事、我、钥匙?
钥匙又真的是钥匙吗?

海边的梦

睡在海边
梦像潮水般阵阵袭来

从清晨时的晶莹剔透
到日落后的深不可测

温柔,坚定
永不停歇

徘徊,在两个世界的边缘
逡巡,往复

这游移而又动荡的边界
隐灭着,复现……

说说ErgoDox人体工学键盘

一周前键盘鸟枪换炮,升级成了分体式、可编程的人体工学键盘Ergodox EZ。这篇就来谈谈一周来的使用体会和心得。

键盘缘起

其实我一直不太理解机械键盘有什么好。这次升级,诉求主要还是来自人体工学的方面。总结起来一共两点:一是想要换一个分体式设计的键盘。这样双手和胳膊可以调整开幅,与肩同宽。工作起来姿势会自然和舒服很多。二是想要把控制键(Ctrl,Command之类)挪个位置,由拇指进行控制键的操作。因为标准键盘的控制键键位集中在了左下和右下方,快捷键按多了以后手腕会不舒服。

经过一番研究和筛选,把目标集中在了Kinesis Advantage2ErgoDox EZ这两个键盘选择上。价位上两者差不多。功能和设计上,看了一些评测:前者的弧度设计算是加分,而后者由于是左右手两块键盘,便携性胜出。再加上软硬件开源,有一定的可玩度。朋友也在两者之间推荐后者,于是就毫不犹豫的选了。由于Ergodox EZ购买时允许定制,在配置上选择了带LED背光的Glow版本,外加Kailh Copper键轴和与LED背光兼容的PBT键帽。

一周总结

购买之前看评测,普遍都说由于键位的大幅改变,会有一定的适应门槛,大约一周左右输入速度可以恢复换键盘之前的水平。这和我一周下来的实际使用结果很一致。一周的时间,不仅仅是键位的简单适应,同时也是键位布局和输入习惯相互磨合和调整的过程。准确的说,应该是一个迭代的流程。迭代的产物就是键盘布局和键盘固件版本的持续更新。

上面这个图来自ErgoDox EZ提供的图形化键位编辑工具,里面的键位布局是目前为止我的最新版本。从版本号可以看到,大大小小版本一路变过来,也算是迭代了很多轮。从第一天使用时n次固件版本刷新,到现在一两天一次的版本更新。键位布局和使用习惯上趋于稳定。

不得不说,ErgoDox的使用需要学习曲线和时间成本。但在这一周的使用过程中,也让我对这个熟悉得不能在熟悉的设备有了新的认识和体会。不过在说务虚的认识和体会之前,让我先来说说关于键位布局的一些想法。

键位布局

ErgoDox EZ的新键盘里刷的是官方的键位布局

看一下链接里的这个布局就不难体会陡峭的适应曲线。例如:Delete键从右手位换到了左手,虽然同为小指操作但在肌肉记忆上相去甚远;由于右手外侧键盘列数的减少,大量符号按键被安插到了不同的位置。比如,方向按键拆散为左右和上下,分列左右手。再比如=按键从右手最右方换到左手最左方。这两个例子里面默认的布局或许追求的是一种对称性,但它同时也打破了一种固有逻辑认知——方向按键不再是聚集在一个区域,加减号也不再彼此相邻。

不可避免的,用ErgoDox就要调整默认的官方键位布局。把键位布局尽可能改回传统键盘固然是一个思路,但同时又并不希望因此而失了人体工学布局的好处。正所谓不破不立,有时间折腾的话,趁此机会把QWERTY键盘布局改为DvorakColemak抑或也是个不错的选择?我的选择是折中的——既希望能用比较平滑的方式过渡到新键盘,也想要有足够的试错可能学习新布局。改变QWERTY不在当前的考虑之列,因为那意味着适应控制和符号按键布局调整之外,还要去额外适应基本字母按键的布局改变。

在我的具体的键位选择上,大致经过了这样的迭代循环:

  • 大致列了一下平时会用到的快捷键组合,然后在新键盘上体会按这些快捷键的手感,然后进行调整。这其中主要包括Linux命令行、MacOS、iTerm终端、Chrome浏览器、tmux和vim等

具体的调整原则有这么一些:

  • 在可能的情况下确保第一直觉,这算是一种使用习惯上的向后兼容
  • 对于那些不得不改变的键位:优先分配黄金键位给高频需求,同时也保证布局逻辑上的一致性。因为肌肉记忆固然重要,能借助一些原则推断出键位个人认为也是同样重要的
  • 借助ErgoDox允许定义多个Layer的特点,把回车、删除、方向键等大量使用且位置改变较大的键,临时性的在独立的Layer中映射回原有的位置。这样在前期的键盘适应阶段,应急情况可以通过切换Layer,较快找到关键按键。(例如下图中的橙色标注部分)

实际使用效果上,第三条的panic free zone只在第一天起到了一点帮助。因为可编程键盘的带来的便利性,绝不是传统方式上的人来适应键盘,而像一种双向的迭代和适应。直觉操作上觉得键应该在什么地方,就可以刷新固件把键放在那个地方。或者经常敲错的键,有可能反而揭示了这个键最应该摆放的位置。正因为可编程键盘这样的特性,操作习惯上很快就迁移过来。那些为了应急而备下的键几乎都没有用上。

在我常用的快捷键中,共性的需求是各种浏览和切换。比如iTerm终端tab的切换,一个终端窗口内tmux window、session、pane的切换,Vim Windowd切换,Chrome窗口和tab的切换,浏览器页面或者编辑器内的浏览等等。这些操作都离不开方向键。而借助ErgoDox,意外的实现了全局的Vim方向键。只需要把方向键映射到Vim HJKL的位置,而再也不用逐个应用程序的去解决Vim方向键的映射。过去使用的tmux key binding,Chrome的vim插件,似乎都可以被淘汰了。

上面是我今天(工作日)全天的键盘热图(Heatmap),可以看到VIM方向键JK占据了绝对的高频位置。其实,由于生成Heatmap的软件并不识别ErgoDox键盘布局,要是能把VIM方向键映射产生的上下左右键计算进来,HJKL键位显示的频度会更高。这个截图也算是从一个侧面说明了可编程键盘对于核心工作流的贡献。

一些想法

最后再来说说这个键盘一周使用过程中,陆陆续续产生的一些认识和想法。

标准键盘布局的改变,无论是对于前期的键盘选购还是使用中的适应,都可以说是或多或少的阻碍因素。但实际上即便在PC和Mac之间切换时,外设键盘和笔记本自带键盘之间切换时,布局也是有所改变的。在笔记本代际更迭时,厂商也有可能作出布局的调整。例如苹果2016年发布的Macbook Pro就取消了Esc按键,并将其虚拟化为TouchBar的一部分。完全不变的键盘布局或许是种幻觉。对于长尾用户而言,出于人体工学、工作流效率提升等考量,自己掌握键盘布局或许是更好的选择。

对于普通键盘,通过操作系统或者Karabiner这样的第三方软件可以调整键位布局。但因为物理键位空间已经排满,没有冗余位置。也不像ErgoDox这样允许逻辑层面切换Layer来改变按键。总体来说自己调整键位的自由度有限。而我在调整选定ErgoDox EZ键盘键位布局过程中发现:为了有效、合理地确定键位的方式,需要一定的预先设计和思考,另一方面也需要提供一定的冗余。也就是将同一个键映射在多个位置,或者在多个Layer中。推迟键位的选择,在实际的操作中来演化出最佳的位置。这么做一开始的时候,敲击按键会有些许停顿。因为有了多个选择,自然就会去想是应该这样输入还是那样输入。可最后因为各种原因,或许是因为些许的顺手,或许是因为前后操作连贯起来手指懒得挪动位置等等,一种选择就会胜出成为最佳的键位。这个时候不妨保留替代选择,直到下一次布局更新淘汰删除。相对于传统的手指适应键盘,我更愿意称其为键盘适应手指的有机过程。一轮的键盘布局迭代调整,实际是一轮键盘固件、手指肌肉记忆,乃至输入习惯的三者有机融合。

如果有时间,也许我应该试着在ErgoDox Firmware层面生成键盘的heatmap。因为上面的截图由WhatPulse软件生成,在操作系统层面能看到的键码经过了ErgoDox固件映射,已经不能准确反映实际的物理键位。有了更真实准确的数据,或许能将ErgoDox的使用提升到新的层次也说不准呢?

玄机

这真是一种奇妙的体验
一次又一次,我误打误撞,经过“永恒”的身边
因为一段文字、一首歌曲,或是一场随心所欲的思绪

像是在梦里,一切似乎触手可及,却又无限远离
当我从梦境中疏离,梦却投射进内心,映射出真正的自己
熟稔这一切,却仍旧不是这一切
深沉如此的梦啊,也像清晨的露水,在阳光下消散不见
一阵潮来,一阵潮去,循环往复,永不停歇

心在砰砰的跳着,可心率却恒定如常
我想我定是需要一副,更为坚定的意志和双手
才能捕捉下,所谓的刹那永恒

一次流过心尖的震颤
一种初见时的费洛蒙
一阵没来由的狂喜
一枕黄粱般的如梦方醒

顾城 《在淡淡的秋季》

《在淡淡的秋季》

——顾城

在淡淡的秋季
我多想穿过
枯死的篱墙,走向你
在那迷朦的湖边
悄悄低语
唱起儿歌
小心地把雨丝躲避

——生活中只有感觉
生活中只有教义
当我们得到了生活
生命便悄悄飞离
像一群被打湿的小鸽子
在雾中
失去踪迹

不,不是这支歌曲
在小时候没有泪
只有露滴
每滴露水里
都有浅红色的梦——
当我们把眼睛紧紧闭起

哦,在淡淡的秋季
我没有走向你
没有唱,没有低语
我沿着篱墙
向失色的世界走去
为明天的歌
能飘在晴空里

1975年

蚯蚓和婴儿

闲来无事,在塑料箱里养了几千只红蚯蚓。一盒盒的果皮、菜叶丢进去,不用多久就成了黑油油的泥土。看蚯蚓蠕动是种乐趣。每次收集完蚯蚓粪,分离出的蚯蚓密密麻麻,纠结在一起像座小山丘。可当把这座小山丘挪到新鲜的基料上,它们就润物细无声般地渐渐消失不见了。

当我开盖翻看塑料箱的时候,总会时不时地起疑——这么小小的一方土,真的容纳了数以千计的生命吗?掩藏在毫不起眼的浮土之下,竟然就是生生不息的生命轮回吗?难以相信。同样难于相信的,是整个广阔的北美大陆,竟曾经完全没有蚯蚓的足迹。塑料箱和北美大陆,生命的丰盛与孤寂。

有了孩子之后,又新添了可供观察的对象。除去通常的感受之外,最能触动我的最初印象,是她的柔弱。人,是这个星球上最高等的生物,可相对其他物种,人类的下一代初生下来出奇的弱。眼睛看不清物体。自己无法移动,甚至支撑不起头颅。大脑是个果冻,发不出像样的音节,连困了不知道怎样睡着都能哭闹起来。可偏偏就是这样弱弱的小baby,一代又一代,延续着人类的物种和文明。

仔细想想,大自然不可能错,偏差的当然是我的认知。人生的阶段当以十年计,一个王朝历经百年,而物种演化则以百万年计。普普通通的一具肉体凡躯,淹没于对我们自身而言近乎无限的宽广世界与时间长河之中。也许我们和蚯蚓相比,并无大异。