解决 Baratza Encore 磨豆效率低下的正确方法

现在问题已经解决了,回想起来这个过程是很有趣的。我反复研究了各种帖子,企图找到它低效的问题。但是最终也没有高效的解决这个问题

解决的最好方法是我做了两个事情,当然后来证明并行的使用两种解决方法浪费了钱。不过并行解决没有浪费时间,只是浪费了一些钱。

  • 给 Baratza 的客服写信,描述我遇到的问题,寻求帮助。
  • 购买了更高效的上磨芯(网上推荐的一个升级,相当于升级到 Virtusoso 的磨芯),下磨芯的塑料配件(Ring burr holder)。

客服第二天就回复了,告诉我应该是 Ring Burr 的问题,推荐我买一个 Ring Burr。我之前自己检测的时候看 Ring Burr 很新以为它是最不可能有问题的。结果这就是反直觉的地方。我将信将疑的又定了一个 Ring Burr

第一次定的配件三天后就到了,换上以后果真没有解决问题。 一周以后第二批配件到了(因为碰巧遇到了周末,所以发货晚了一些),换上新的 Ring Burr 问题马上解决了。换到最细的刻度 1,两勺咖啡磨完需要 10 秒。之前一勺咖啡在刻度 12 就会造成堵塞。所以问题得到了完美的解决。

现在是半年以后了,试是证明修完以后 Encore 回到了完美的工作状态。完全没有问题了,也不需要那么频繁的清洗了。

所以解决认知偏见,还有实际行动起来成了解决这个问题的关键。我为啥之前就没有去做呢?

推荐一下李笑来的 重生(七年就是一辈子),还有 YC创业课(CS183B)学习笔记

rMBP kernal_task cpu spikes when connecting more than 1 external monitors

rMBP kernal_task cpu spikes when connecting more than 1 external monitors

This “bug” bother me frequently, and I don’t know why? I didn’t thought that’s related to connecting more than 1 external monitors, so I always search for “kernel_task high cpu”, which leads to similar fix than what I found lately.

TL;DR;

  • If this problem is highly correlated with connecting to more than 1 monitor and you don’t really need that much monitor. Then the easy fix is throw 1 of your monitor for other task, and working with only 1 external monitor.
  • There’s a scientific way to figure out which kernel extension cause the issue. If you like to fix it in this please read following text.

So there’s some falty kernel extension which trick the kernel_task, and kernel_task try to steal CPU time to cool CPU down. Which make the system very un-responsive. This issue normally took couple of hours of my time, I can’t get back to productivity.

I thought those 3 things may fix it:

But those method is like Voodoo 🙂 I even tweeted SMC reset fix my problem, but it turns out not true.

Until I finally found the issue is correlated of connecting to more than 1 monitors. Yes, do not connect to external monitor or connecting to only 1 monitor fix the problem. And my daily setup is connecting the rMBP (MacBookPro11,3, MacBook Pro Retina, 15-inch, Late 2013) to 2 monitors: 24 Inches Dell and 30 Inches Dell. I found unplug the monitor fix the kernal_task CPU usage issue in couple of minutes.

So I change my google keyword, and find the better answer immediately.

Those article actually is mostly overlap with How to fix kernel_task CPU usage on El Capitan. The difference is it tells you that you need to “poke each of the kext to figure out which one is the lemon”. This make it more like a science 🙂

Mac have serious software quality issue. But their intention is good, you can seamlessly upgrade from major OS versions. It doesn’t bother about “Drivers update” like windows (although windows 10 addressed the driver issues pretty much already). But it doesn’t mean you will load wrong thing into your kernel extension which ultimately cause weird issue. Apple also have bad knowledge base, you can’t find anything useful on their “wiki”. But noise in user forum, and Apple so very bad at indexing them.

OK, rant finish. To me this is what I learned:

  • Be careful to listen to the problem. Try to understand the symptom better.
  • Avoid voodoo fix.
  • When you find low quality result, change your search keyword. Even sometime it’s hard to craft better keyword. But the keyword is the key in search engine era.

And how to fix this issue on your macbook?

  • See if it’s related to connecting to more than 1 monitors. Because if unplug solve the problem, then you don’t need to fix it when there’s other high priority tasks.
  • Perform SMC + PRAM reset. This is almost free.
  • Disable SIP, and re-enable it when you fix it.
  • Disable the kext 1 by 1 as [Technology] kernel_task consumes almost 100% of CPU on Mac OS X suggests. Don’t follow other instruction to delete your exact mac’s plist. Just disable that kext as whole, which is easier to recover and save your google time too.
  • Make sure you Time Machine your Mac.

Finally, I need to say OS X breaks so often recently. And maybe I should say it never works correctly, it almost always accidentally barely works. Those components breaks for me frequently:

  • kernel_task, that what I complains above.
  • Keychain is broken frequently. And the keychain first aid is gone.
  • Disk integrity and permission breaks frequently, and you need to restart your computer to recovery mode to check/fix.
  • Spotlight breaks frequently.
  • The network (and VPN) is not as stable as before. But this might be a false feeling due to lack of trust.
  • Updates no longer always make the OS better.

Dan Abramov’s Redux lessons are great

Screen Shot 2015-12-29 at 4.56.29 PM

My awesome colleague Dustan Kasten recommend Dan Abramov‘s Getting Started with Redux on egghead.io.

It includes 30 short video lessons, which are great example of Refactoring to Patterns. Although there’s not a goal to form any patterns. The goal is just making sense in coding. The process of refactoring make me feel exciting. Nowdays the javascript community is full a micro-libraries, like the react-redux. This video actually shows the intention of refactoring and extract reuseful code as tiny library.

Thanks Dan and egghead.io!

大跃啤酒依然是我去过的北京最好的啤酒吧

这是我在知乎更新的一个回答

2015 年 10 月我休假会北京,去了北京的几家精酿,包括大跃在东直门的店。不做太多细节对比,我目前的见识来看大跃现在依然是北京最好的啤酒吧。那么大跃哪里做的很好呢?

  • 大跃做的是一个 Gastropub,而不是一个卖酒的商店或者俱乐部。以前我们三里屯有『天堂』,那里卖酒也可以喝。但是那种模式的发展方式是瓶装酒的天堂,本质上只是一个买东西的地方。旧金山的 City Beer Store 是这样的例子,当然人家也是很牛的。北京的牛啤堂就有点这个意思,主要是瓶装酒,吃的东西比较凑合。大跃的环境和食物明显要好不少,然你感觉在个很好的朋友聚会的场所,有会吃的人选择的食物。好的啤酒吧必须有好吃的东西匹配,老板最好是个吃货(Foodie)。肯能因为成本的问题,北京的精酿酒吧基本没有好吃的…… 所以大跃和树餐吧这样的就鹤立鸡群了。
  • 自酿啤酒的风格丰富。大跃的酒单有超过十五种风格的啤酒。常见的风格如:IPA, Double IPA, Red ale, Stout, Pale ale, Bitter, Wheat ale, Lager, Triple, Sour 都有了。
  • 有 Beer flight,就是小杯啤酒拼一条儿(四杯)。这种方式两个人很容易横扫全部啤酒,增加品酒乐趣。
  • 人气。大跃的聚会气氛热烈,厕所繁忙。而且 Gastropub 的厕所是一个非常非常重要的地方,大跃的厕所很有设计感。这样的细节对喝酒尿尿的体验很重要!
  • 卖 Growler 装的啤酒。虽然他们只有四款啤酒按照这种方式卖,但是还是很过瘾的。好的 Gastropub 一定要做到酒好也可以带回家喝。这样有家庭有孩子的人可以下班经过买一 Growler 的啤酒拿回家喝,或者和朋友聚会的时候带上。这真是我心爱的买酒方式,比买瓶装啤酒有面子多了。看朋友的时候随身带上这么一瓶太有面子了!
  • 音乐,吵闹的音乐。偏吵的音乐其实保证了酒吧里面聊天的隐私,离你很近才可以听到对方在说什么。我个人可能是条件反射,反正我习惯在吵闹的酒吧品尝 on tap 的啤酒。那些稀少的瓶装酒我喜欢在家里欣赏。

原来我用 Baratza Encore 的方法是错误的

我买了这个 Baratta Encore 有一年多了。这是一个咖啡豆研磨机,这属于带磨芯的研磨机 Burr Grinder。我对它研磨的质量很满意,一般做 AeroPress 的时候我会用 8 那档,相当于 Espresso 骗粗水平。

但是有个问题困扰我,那就是它经常堵住。所以需要经常清理,这本身不是太大问题。但是这咖啡磨清理一次大概要花费 10 分钟吧,这比准备咖啡的时间还长。我仔细观察了一下,一般出现堵是这样发生的:豆子快要磨完的时候我没有关闭机器继续磨最后一点豆子,然后机器就堵了。

今天我发现这是由于我的使用方式造成的。我每次一般用 AeroPress 的勺子呈上一勺放在磨里面研磨。每次我都希望完全磨掉豆子所以下次没有残粉,就不用清洁了。可是这样造成一个问题,因为最后的一点豆子没有其它豆子在上面用重力压着,所以研磨速度会很慢。如果正要研磨又比较细就容易产生非常细的粉,他们容易卡在研磨机的出粉口。这样下次就堵住了。

所以解决方法就是把豆子都放在那个漏斗里面,用多少磨多少就好了。如果想要一倍完美咖啡的时候先清洁一下机器好了……

不再用水浸湿 AeroPress 的滤片

AeroPress 很久了,它是我默认的咖啡烹调方式。我一般使用倒装法 – Inverted。因为我的胃对咖啡因敏感,所以我这一年多都用的是 Decaf 的豆子,目前最喜欢的是 Blue Bottle Decaf Noir,每次我都去 WholeFoods 那里找货架最里面的一包,大部分时候可以买到一周内烘焙的新鲜豆子。

每天冲来冲去,很开心。

之前的 AeroPress 滤芯用光了,新定的一包滤芯感觉很厚实(AeroPress 的滤芯其实质量不太稳定)。铺在 AeroPress 的那个有网眼的过滤碗上是平整的,但是淋水以后会膨胀。膨胀的滤片经常有皱褶,每次用手抚平但是也不完美。最近咖啡总是从过滤碗侧面流出来。所以我想干脆不给滤片淋水好了,结果发现这样滤碗的漏水问题果真完美的解决了。现在要比平常花多几倍的力气去压取咖啡,不过出来的咖啡口感很不错。

也许一门技术用久了就变得僵化了,忘记没门技术都有提升的可能了。观察一下这小小的问题,解决一点小小的问题。然后就又过了一天。

[翻译] Lager(拉格) 和 Ale(艾尔):到底有什么不同?

翻译自 Deschutes 酿酒厂的博客,Deschutes 是我最喜欢的四家酒厂之一。翻译没有经过授权,不好意思。

它们的故事开始于几个世纪之前,在一个很远很远的地方。

1000 年前的一首盎格鲁撒克逊史诗《Beowulf》记录了勇士们曾经在国王的宴会厅饮用过一种古老的 Ale。在这个史诗著作的描述中有四种饮料,包括一种使用谷物制作的叫做 Ealu(音似 Ale)的饮料。

在 16 和 17 世纪,不列颠(British)的 Ale 渐渐开始加入啤酒花来保鲜。这时莎士比亚在他的戏剧《冬天的故事》里面写到『一夸脱的啤酒是国王的一道美食』。这些酒花味略浓的啤酒进化成了我们现在所享用的 Ale。现代的 Ale 给了我们国王般的享受。

Ale 来自不列颠众岛,但是 Lager 则来自近代的巴伐利亚。故事是这样的,Lager 的木桶使用了德国东南部石灰岩山脉的木材,并贮藏在凉爽的山洞中。这样的自然条件在16世纪的时候催生出了特别的一族酵母。德国人移民到美国的时候把这 Lager 酿造的传统带了过来。

那么当今这些啤酒有什么区别?每种风格(style)的啤酒都会使用特别种类的酵母,发酵过程也有所不同。Ale 的酵母是从上面加入的,根据不同的风格在室温或者酒窖的温度发酵(18 至 22 摄氏度)。Ale 一般果香或者香料味更浓。

Lager 在更低温度发酵,因为在低温下酵母的新陈代谢较慢所以发酵时间较长。Lager 的酵母从容器的底部加入,一般发酵温度是 10 至 13 度。德国或和捷克的酒花的加入也是保持 Lager 风格完整性的重要因素。

你知道其实 Lager 和 Ale 都有众多的风格吧?Ale 家族包括 Porter(波特)、Stout(世涛)、Pale Ale(淡艾尔)、IPA(印度淡艾尔)、和 Bitter(英式苦艾尔),而 Oktoberfest(德式十月酒)、Maibock(烟熏波克)、Doppelbock(双料波克)还有 Pilsner(皮尔森)则是美味 Lager 的代表。

Lager 和 Ale 来自不同的产区和酿酒厂,但他们都是历史的一部分。让我们保持这些传统让历史延续,享受不同风格的啤酒吧。从 Black Butte Porter(Deschutes 的旗舰波特风格啤酒,美式波特的佼佼者,适合每日饮用,是一种 Ale。Black Bute 是个地名)到 Pine Mountain Pilsners(Deschutes 的一款 hoppy pilsner,美式酒花味比较浓的 Pilsner,是一种 Lager。Pine Mountain 是松树山的意思,试用的美式啤酒花有松针的香味)。干杯!

作者是嘉宾博主和杰出的 Deschutes 向导,Kimberly Bowker。

记录两个味道

有些味道简单,但是令人感动。

在聚宝源,香脆的芝麻烧饼配涮出来的茼蒿。香脆的烧饼是芝麻酱,烤过的芝麻还有香脆的面饼的味道,可能还有些椒盐,他本身当然是制作繁复的小吃。香脆的芝麻烧饼是口感和味觉的融合。茼蒿(阔叶的那种蒿子,不是那种细杆的蒿子秆)在已经融化了羊肉的脂肪和鲜味的火锅汤里面涮过,注意火候不能太大。两三只茼蒿放到嘴里,软烂的羊肉脂肪的膻味被茼蒿清爽的味道镇住,有些烫烫的,这时候咬上一口上好的芝麻烧饼。那烤芝麻的香味,还有脆脆的口感与还留有一点脆劲的茼蒿在嘴中爆炸开,充满幸福的感觉。茼蒿的清香味道和厚重的芝麻香味遥相呼应,和谐的融合成一个新的体验。

在家中,黄瓜、芝麻菜、布里奶酪和一个意大利风格的葵花籽面包。黄瓜是用来腌黄瓜的那个品种,黄瓜的味道很重,外皮厚,粗粗傻傻的。布里就是普通的 double cream 的,切厚片放在外面布满葵花籽的意大利面包上,入烤箱烘一下,让布里开始融化。把黄瓜铺在布里上面,撒上涂匀橄榄油的芝麻菜,夹上面包。入口给你奶酪的奶油一样的口感,黄瓜的清新,葵花籽的坚果香味,面包则提供基础的口感,他们融合成一个新的体验。这个味觉的主力其实是黄瓜和布里,如果简化它只是把略微融化的布里和黄瓜片放在一起也会提供那种感动的体验。

Why I prefer using new/prototype/this to ‘createClass’?

Here is my thoughts on “factory” vs. “new/class”. First I agree that class is not necessary when we use prototype system in javascript. And prototype is superior than class, that’s why we love javascript.

But when we design a system, we need some tool to help use minify the side effects between your internal API calls. Making zero side effects system is possible, but that doesn’t make too much sense. Closure is a important feature in javascript, the closure is mutable, we use that commonly to reserve state in function. This is not pure functions anymore, but that’s an sweet spot in the middle of the spectrum from pure functional programming to none-pure functional programming. So the rules of thumb here is localize the side effects, and make the side effects physically close to functions. That’s one style we use to describe how Object Oriented Design marry with functional programming happily.

The previous chapter help us explain why the prototype is good. We can use the object to localize their local states (side effects), and the prototype is the functions which apply side effects on them. This style help us get rid of the dirts from classical OO’s class system. So here is a new question, do you think the class and new harmful in javascript? My answer is NO.

So the intention of the functional and localized side effects is a goodwill, and we should think about what’s the right tool/pattern for us to achieve that? And there’re 2 common patterns in javascript to achieve that.

  1. Factory:
var User = function() {
    var privateState = {}

    var setPrivateState = function(value1) {
        privateState.state1 = value1;
    }

    return {
        publicMethod: function(value1) {
            setPrivateState(value1);
            this.otherPublicMethod();
        },
        otherPublicMethod: function() {}
    }
}
var user = User();
  1. Use function, prototype and new:
var User = function constructor() {
    this.privateState = {}
}

User.prototype = Object.create({
    _setPrivateState: function(value1) {
        this.privateState.state1 = value1;
    },
    otherPublicMethod: function() {}
});

User.prototype.publicMethod = function(value1) {
    this._setPrivateState(value1);
    this.otherPublicMethod();
}

var user = new User();

The Factory use closure simulate private methods and variable, the reference of this is inexplicit reference the returned object literal itself. The magical stuff is that the Factory way don’t need the new keyword, which is the reason why someone love it.

The prototype way lost the private method/variable (you can do that by define some private method inside the constructor, but let’s put that aside). But the benefit is explicit this binding in new, and having a prototype chain in new (that’s how the prototype chain works). Although prototype chain is commonly used for simulating inherit (which is bad), but we can also doing mixin by prototype (which shares all methods on prototype; in comparison, mixing is normally done as method copy between objects in Factory way).

Because the prototype is a killer feature IMHO, so I lean towards using the new/prototype/class pattern. I don’t have strong opinion on the keyword new (because I have some friends don’t like it), but let’s review what’s new is doing?

  1. A new object is created, inheriting from foo.prototype.
  2. The constructor function foo is called with the specified arguments and this bound to the newly created object. new foo is equivalent to new foo(), i.e. if no argument list is specified, foo is called without arguments.
  3. The object returned by the constructor function becomes the result of the whole new expression. If the constructor function doesn’t explicitly return an object, the object created in step 1 is used instead. (Normally constructors don’t return a value, but they can choose to do so if they want to override the normal object creation process.)

So I think new is still quite useful 🙂

Going back to the implementation side. Using the new/prototype/class is my choice, but there’s some drawback. The prototype is very flexible, and we may misuse it. I’m especially against using that for inheritance reuse. Because most people believe composition over inheritance (for reuse).

So what I need?

  • Make clear that we need a constructor for a object factory (I don’t call it class)
  • We define a set of own methods for that object, and they should be assign into constructor’s prototype
  • We’d like to use mixin (on prototype) to reuse

And probably you know that React is hot in our community. And react have a method React.createClass, which is doing exactly that 3 thing I describe above. It’s like a factory of object factory, put some restriction to you, but showing you a schema of a object factory. I like it. But you don’t need React to use createClass, you can do it with couple of lines of code.

var _ = require(‘underscore’);

var createClass = function(options) {
    options = options || {};

    var constructor = options.hasOwnProperty(‘constructor’) ? options.constructor : (function() {});
    delete options.constructor;
    var mixins = options.mixins;
    delete options.mixins;

    options.mixin = _.mixin;
    constructor.prototype = options;

    if (mixins) {
        mixins.forEach(function(mixin) {
            _.extend(constructor.prototype, mixin);
        });
    }

    return constructor;
}

I used methods in underscore, you can copy them out and have a standalone createClass.

How about class support in coffeescript and ES6? I’m a believer of both. I use coffeescript for years, and I love it’s class implementation. The class support doesn’t give you mixin out of box, because mixin is a personal choice. So the class is just a factory of object factory, which is same as what we introduce above.

The how is not very important in this post, because you can write your own (better) implementation easily. The more important is why we doing this, the core is adopt functional and localized side effects design style.

站立办公桌

说来对工作环境和工作方式的关注是因为相信他们可以改进工作效率。但是有的时候我也觉得这无非就是无尽的物欲而已,难以自拔。站立办公桌这个东西,投入可大可小。对于我来说,我希望的是培养自己的一种仪式感(Ritual)。仪式感这个东西对我来说是很有用的一个心里工具。我一直尝试对自己进行心理暗示,很多时候它是一个有用的工具,尤其是使用在积极的场景。而具有仪式感的生活实践大都是有一个积极的初衷的。以后我还会陆续的记录我生活中的一些仪式。

站立办公桌在湾区这里非常流行,经过三藩大街上那些玻璃窗里开放的办公室你就能看到很多站着办公的潮人码农。关于站立办公优劣的文章轻易可以搜到一大把,我其实完全不在意那些文章所说。这其实也是个有趣的细节,估计大家都看到微信上面那些看似很合逻辑的科普文章吧?其实大部分时候,你应该尝试解读坐着的意图,而应该忽略他们那些逻辑。因为语言逻辑是有悖论的,完全可以用合逻辑的方式灌输一个谬误给你。在这个问题上我不相信逻辑和确定性,我相信直觉(但是你要优化自己的直觉,保持初心,而不是一味碰壁),我相信不确定性。我的直觉告诉我,站立办公应该不会让我减肥,也不会让我变得强壮或者更健康。但是站着办公应该可以帮助我进入 flow,并且减少长时间拖沓的工作(因为我会累)。长话短说,这几个月下来我的使用感受和我的预期一致。当然这也可以解释为心里暗示,我的偏见影响了我的判断。但是我不太在乎确定性 ^__^。

我的配置就是 IKEA 的那套经典穷人配置。唯一不同的是我用了加厚的桌面,我指的是作为底座的那个桌子,因为那个桌面更加厚实和沉重,质感更好。显示器我用的是 Seiki 的穷人 39 寸 4K TV,这个在 Hacker News 上讨论曾经很热。显示器就是公司配的 15 Retina MBP(公司会给你配顶配的,如果想换机器那就换个工作好了,当然公司也会毫不犹豫的满足你的需求的),用 HDMI 1.4 接到 TV 上面。因为 HDMI 1.4 的限制,在 3840 x 2160 的分辨率下只有 30Hz 刷新率。这个刷新率在使用 Logitech 的轨迹球的时候感觉不那么明显,但是使用 Apple Trackpad 的时候会比较明显。肯能是手指的移动让大脑更饥渴的看到鼠标指针的反馈吧(我试图在扭曲你的想法?)。在滚动网页的时候页面的顿挫感也很明显,解决方法就是减少页面滚动,反正显示器大了一页的内容会多很多。减少滚动对阅读来说其实是有积极影响的,这个我推荐大家尝试一下,即使没有很大的显示器,在 iPad 或者手机上也可以实践。键盘是 Apple 的蓝牙键盘,因为它的尺寸配合 Trackpad 感觉更舒适,否则 Trackpad 需要放在更远的右侧。Trackpad 属于我的个人习惯,我觉得它比鼠标和轨迹球都更舒适,对各种手势的支持也绝好。

在使用的过程中,我觉得后背和脖子会感觉舒服很多。但是腰(背部靠下的位置)还有腿部会比较紧张,时间长了它们都很疲劳。我的痛觉大概在 3 – 5 小时的站立以后会达到高峰,我一般就会停止站立。这的确有效的减少了我连续伏案工作的时间。因为腿部的肌肉酸痛和脖子不太一样,腿部的酸痛来的比较线性。也即是说腿部的紧张是慢慢加剧的,而脖子则是几个小时后或者第二天才显现出来,那个时候已经产生了明显的疲劳伤害(落枕)。肩膀和胳膊没有太多的疲劳感,但是 IKEA 这个穷人装备的手托的稳定性没有直接伏案工作好,但是这不是个严重的减分。39 寸的 4k TV 对于我来说像素密度有点太大,Apple 的操作系统目前不支持在这个廉价的 4k TV 开启 @2x (retina)模式。我倾向于把字体调大,然后可以让双眼离显示器远一些。如果你是字体或者像素癖患者一定会相当的不满意,我也的确费了一些时间适应。但是由于它渲染的并不够细腻,所以我也很少在它上面娱乐。做大部分需要进入 Flow 的工作来说,这个显示器已经足够我用了。当然,要不是在黎明前出手入了这个 4K TV 我一定会选择支持 60Hz 的 28 寸 4K monitor,那个感觉会让我更满意一些。软件上,我觉得 Divvy 是必须有的工具,因为更大的分辨率也就是更大的桌面需要很好的 layout 管理工具。Divvy 是第一个这样的工具,我习惯它也喜欢它,它很好的解决了窗口摆放问题,一个快捷键就可以把窗口布局做好。除此之外没有什么了。

周末和每晚睡前的私人时间使用这个配置的时间很短,完全不会有啥疲劳问题。在家办公的时候,完全专心的工作时间基本上可以控制在 3 小时和 5 小时这个范围内(可以早上 3 小时,下午 4 小时)。这样办公心里感觉很满足,因为思想的集中,和身体的疲劳时钟可以配合在一起。身体敏感度的提高其实可以帮助我集中精神,进入 flow,在这点上是一举多得的。我个人认为这是一个非常有趣的仪式。双脚稍微分开站立在显示器前面,脑袋平视可以到达显示器中线稍微靠上面的位置。小臂和身体可以垂直,手腕在敲打键盘和 Trackpad 的时候没有弯曲。也许这些自我描述是心里的意思满足感开始的地方,就和打坐一样帮助你联系物理感受和心理的一个状态。

Tin's Standing Desk

如果你还完全没有站立办公过,那我推荐你试试。