• 代码看不懂 at 2019年03月18日

    ::File.expand_path(ret) 这段代码前面有个空格我不是很理解是什么意思

    遇到看不懂的 Ruby 语法可以这样查:

    1. 找到 Ruby 官网的 Documentation 页面:https://www.ruby-lang.org/en/documentation/
    2. 在这个页面上搜 Ruby Core Reference,点击这个链接
    3. 如果你对 Ruby 语法有初步了解的话,应该能明白“大写字母开头,中间用 :: 连接的是 module / class”。这个页面开头的一段:

    New to Ruby? You may find these links helpful: syntax, control expressions, assignment, methods, modules + classes, and operator precedence.

    里面的 modules + classes 链接到的页面就有你想要的答案。

  • 代码看不懂 at 2019年03月18日
    1. Google 搜索 rex fileutils
    2. 第一个结果看上去就是这个 module 的 rubydoc, 点过去
    3. 在页面里搜索 find_full_path, 可以找到这个方法的文档.
    4. rubydoc 的页面上可以直接 view source, 查看源码.

    如果是我遇到一个陌生的项目的方法,应该就会这样去找它的 API 文档,然后就能理解是什么意思了。

  • Just to be clear: 我相信大家说的“不折腾”可以解释为:时间是宝贵的,花时间维护系统 / 解决系统问题,没有产出,不值得。那么我愿意折腾系统,有着同样的原因:时间是宝贵的。我想通过提升效率来降低时间损耗。

    至于说折腾投入的时间,和折腾之后提升效率节省的时间,哪个更多?我自己只能承认没有仔细算过这笔帐,甚至,我根本不知道如何算得出来。但我不相信支持“不折腾”的各位有计算过。目前我只能认为:双方都拿不出有说服力的证据,suspend judgement。


    1. 系统维护这点我确实没有太考虑。可能是因为用了太久的滚动更新 Linux 发行版,习惯了每天升级一次。现在想想,这种时间如果能节省下来一些,但又能及时用上较新的生产力工具,会好些。前阵子我也在探寻有没有能同时满足这两条需求的 Linux 发行版。Fedora 可能是个不错的选择。

    2. 是的。用休眠到内存 / 硬盘替代关机可以节省开关机 / 开关应用的时间。但我不清楚现在 Linux / Windows 在这方面做得如何了。我接下来会尝试一下在自己的主力工作笔记本上能否做到这一点,看看能把 uptime 累计到多久(如果我不需要重启切换到 Windows 去玩游戏的话)。

    3.1 可以虚拟化 / 租用机器体验 Linux 这个事,连同前面 #10 提到的“测试一下Safari的兼容性”的事情,让我觉得:Linux 在虚拟化方面有更好的支持,才给了用户这样的机会:不需要买与其捆绑销售的硬件。以前我专职做前端开发的时候,需要测试 IE6 的年代,也可以直接用虚拟机来跑起 Windows XP。前阵子我尝试在虚拟机里运行 macOS,困难重重,最终放弃(也许是我自己的问题,未来会再试)。那么我们是应该功利性地,因为 Apple 的不开放的策略去买 Mac,还是应该支持给用户留有自由选择机会,对虚拟化支持更好的 Linux / Windows?

    3.2 拿 Linux 作为日常常用的系统来熟悉 / 练习,相比于:有需求的时候才访问一个远程的 / 虚拟化的环境,而这个系统也同样需要管理 / 配置,与原生系统间同步数据。虽然说能用,但也带来了额外的维护成本。

    • 题外问一下:在 macOS 上有没有简单好记的“列出所有监听着的 TCP 端口”的命令?我在别人的 Mac 上帮忙排查问题的时候,总也记不住 macOS 版的 netstat / lsof 的语法。在 Linux 上是 ss -tpln,非常好记。

    4.1 我很想听一些具体的例子来支撑这样的观点。比如说,Sketch 是个优秀的 UI 设计软件。前端开发如果能直接打开 Sketch 文档,和设计师合作时可以直接从中读取 UI 尺寸(甚至直接生成 CSS)。如果 Sketch 的诞生是因为 macOS 的 GUI 开发平台有优势,那么我会同意:这是个 macOS 的加分项。

    4.2 我工作中用到的软件大多数都是跨平台软件。我不知道它们能否算作是“Linux 软件”。至于说 Linux 独有的软件 / 功能,我尝试列出几个具体的例子来:

    • 窗口管理器 i3: 能用全键盘操作来管理窗口,不需要手动增减虚拟桌面,支持平铺 / tab 式窗口布局,不必看切换时的动画效果,都提升了工作效率。
    • Chrome: 虽然是跨平台软件,但只有 Linux 版的 Chrome 支持在 Tab 上滚动鼠标滚轮来切换 Tab。
    • Docker: Docker Daemon 是 Linux 原生的软件。Docker for Mac / Windows 都是跑起一个 Linux 虚拟机,然后在里面运行 Docker Daemon。后者 Volume 的 IO 性能不如 Linux 上的水平。当然,第三方的 workaround 也是存在的。看用户是否愿意去折腾了。

    macOS iOS 的概念是你好好专注自己本行的工作,好好赚钱,操作系统、软件的事情交给专业商业公司,你付钱就好了。

    Funny you should say that.

    作为程序员,我的本行的工作是设计并实现软件给人使用。软件的设计就包括有 UI 的部分,软件的 API 也可以认为是另一种形式的 UI —— 只有程序员才会用的 UI。所以我的职业刚好需要我做出更好用的 UI,满足用户的需求。虽然我不是做桌面软件开发的,但 UI 设计的价值与原则是通用的:帮新用户成长为熟练用户,降低用户的认知负荷,设法为用户节省时间,诸如此类。

    退一步讲,即使我的工作与软件设计无关,那么作为用户,我也可以发表评论。就像撰写电影评论的人,可能他们自己也没有拍过电影,但这不妨碍他们用影评来表达观点,影响舆论。

  • #28 #31 我在博客里已经写明了:我在 Linux / Windows 系统上已经把 Alt 和 WinKey 互换了位置。因为我用 WinKey 远多于 Alt。这是我使用 Mac 学到的改进。

    但我在 macOS 上,如果要把 Fn 和 Control 键互换功能,用 macOS 自带的系统设置是做不到的(可以把 Fn 映射成 Control,但不能把 Control 映射成 Fn)。只能求助于 Karabiner。话说回来,因为 Karabiner 只要用 homebrew 的一行命令就可以完成安装,我不会觉得安装这个第三方软件比直接使用系统支持的软件更“费事”。换句话说,我可以接受这一点“折腾”的成本。这点我只觉得是个不够好的默认设置,但既然用户还可以通过第三方软件来配置解决,那么也还可以接受。

    我对 MacBook 键盘的最大的不满在于缺少独立的导航键(Home / PgUp / Delete,尤其是 Delete)。具体的理由我已经在第二篇 - 硬件篇里有解释。

  • 这个事,我觉得你直接去 Ubuntu 的各种社区提问,才会有答案。在这个以 macOS 为主题的帖子里很难有人回答的。

  • 有几楼说到快捷键“适应了就好了”。我不能同意这种观点。

    举这么个例子:用桌面浏览器访问京东 / 淘宝,进入登录页面,页面上首先显示的不是帐号密码的输入框,而是手机客户端扫码登陆的二维码。每次登陆时,都要多付出一次点击,才能用帐号密码登陆。我已经适应了这个设计,但我依然觉得这个设计不好,因为它让我浪费了时间。

    也许我应该用 user script 彻底解决这个问题。而不是适应它。

  • 如果我自己想要反驳一个观点,我会尽量避免去揣测这个观点的作者的心态。因为我完全拿不出证据来证明对方的心态确实如此,只能承认这是个猜测。而且这在逻辑谬误中属于 ad hominem

    我也不是 Linux 系统开发者,但我的电脑上的软硬件是我完成自己日常工作的工具,如果这些工具能帮我提升效率,节省时间,那么这对我当然是有益的。"不折腾"这个观点我经常看到有提及,但我不太清楚这里是指减少初始设置的时间成本,还是减少后续维护的成本,还是两者兼有?我想要能够正确地理解这个观点的意思,再展开讨论。

    Again,虽然我不是 Linux / macOS 系统开发者,但我作为用户,总可以按照我的价值标准(设计的一致性,易用性,完成任务的效率等等)去批评系统的设计。类似地,我不是技术书籍的作者,但我可以写书评,来表达我在读者的视角,对书的内容、写作方法、易读性等方面的意见。把自己的意见传达到社区,让能达成共识的读者共同抵制劣质的书籍作品,让出版业界(但愿)能提升未来出版物的质量。

    我可以理解你做出的“精力应该放在自己工作的领域”选择。但我自己也愿意浪费这个时间去写对软件的批评。而你所做的选择并不能用来反驳我的观点。

  • @046569 @nouse 多谢。我应该会在未来慢慢体验这些。

    删除文件的快捷键 command + delete 我在顶部菜单里看了一下,才发现其实是有提示的。但之前我只在右键菜单里观看 / 使用这个功能,而 Finder 的右键菜单里就没有显示命令的快捷键。作为对比,Chrome / VS Code 的右键菜单,都会把功能的快捷键显示出来。

    编辑补充:之前我在顶部菜单 Help -> macOS Help 里找到了 macOS User Guide,想看看一些 macOS 上的入门基础知识,但这个 macOS User Guide 的窗口没法用 Command + Tab 切换过去。阅读体验极差。考虑到这个问题并不影响日常使用,而且猜测大多数用户应该也没有看帮助的习惯,我也就没有写进博客里。但我自己也就没再花时间去读这个 Guide(而且我也不知道这个 Guide 里是否有上面说的删除文件的 hotkey)。

  • 前阵子听说 Homebrew 的 Linux support 好像是更成熟了, 可以在没有 root 权限的环境下使用这个包管理器安装 Ruby 试试: https://docs.brew.sh/Linuxbrew

    再就是用 static link ruby 搜索了一下, 找到这个项目: https://github.com/phusion/traveling-ruby 但是我还没仔细看文档.

    上面两个方案我都是临时搜出来的, 自己没有试过, 不知道是否可靠. 但愿有用.

    额外地, 用 @ 人的点名提问的方式, 是论坛规则里的《提问的智慧》一文所不提倡的:

    当某个项目提供开发者邮件列表时,要向列表而不是其中的个别成员提问,即使你确信他能最好地回答你的问题。

  • 呃,看来我在文章里写得不够清楚:

    • 在 CLI 应用里只能用 Control 组合键,没法用 Command 组合键。 在 GUI 应用里既有 Command 又有 Control。
      • 作为对比,Linux 的应用内(包括 GUI / CLI)快捷键必然是 Control 组合键。WinKey 组合键是留给 DE / WM / 用户自定义的全局级快捷键。
      • Windows 的设计同 Linux
    • Control + 数字键是全局快捷键,Control + Tab 是应用内快捷键,尽管这两者都是 Control 组合键
    • Command + 数字键是应用内快捷键,Command + Tab 是全局级快捷键,尽管这两者都是 Command 组合键
    • 因为没有明确的划分,Command + N 这个组合键已经发生了冲突:在全局级是呼出 Notification Center,在应用内是新建窗口。如果不改掉全局级的定义,那么新建窗口的功能就无法用快捷键实现。