Sony TX-900C

https://pic.xn--oxap.xyz/images/2024/02/25/IMG_5449.jpg
=538x717

换了个新的遥控器。新的型号增加了夜光还有寻找遥控器的功能。Sony终于是get things right 了。

如果你在淘宝上搜索一下,这玩意儿居然能卖到那么贵。

最简单的方式是在微信上找一下索尼售后的小程序,选一下预约换新。然后走一下这个流程,售后工程师会让你把钱打过去,然后他们把遥控器寄过来。

然后就耐心等待就行。

Boom

你有了一个新的小玩具。


题外话:

虽然这只是一个简单的遥控器,但是却让我思考了好多。我不想聊关于索尼的遥控器的设计是否合理的问题,已经有好多人说过这个问题了。我想聊一下为什么我,“我们”,经常会需要一个新的“遥控器”这个问题。

我们来简单地剖析一下这个问题,然后抽象提炼一下看:

单纯地看我为什么想要一个新的遥控器呢?

  • 因为旧的不好用
  • 因为我知道有一款新的好用的遥控器
  • 我还知道新的型号附带一些新的功能

我为什么可能想要一辆新车呢?

  • 如果我原本没车,那么一辆车可以让我极大扩展自己的生活半径,提升自己的生活幸福感
  • 要是我有,新换的车也许可以有新的功能,更智能的车机,更大的空间,也是是因为喜欢马斯克
  • 有了这么一辆新车,我们可以在节假日的时候载着全家人一起出去玩,哇,多么温馨的画面

我为什么想要一个新的iphone呢?

  • 哇,这可是新的iPhone呀,有个灵动岛,这可是最新的设计
  • 有了电影模式的摄像能力,可以给宝宝拍下更好的照片,这买的不是手机,这买的是童年呐
  • 有了新的type-c 的接口,这下我就不需要再出门带那么多的充电线了。All type C,see I have a good taste, lighting 是什么该扫尽垃圾桶的接口呀

我为什么想要一件新的衣服呢?

  • 我没有这个颜色,这个设计,这个款式的
  • 这个用来搭配的我的鞋子刚刚好非常合适
  • 可以在下次出游的时候穿出去,一定非常出片

我为什么想要xxxx

  • balalalalall
  • bablallalal
  • cxxxxxx

那么人们为什么想要一件新的东西呢?为什么有些人想要急迫地想要买一个新东西呢?在我对于换到手的新遥控器爱不释手的时候,丫丫可能并不理解为什么。从旁人的角度来看不就是个显示器么?他的基础功能有什么不一样么?并没有,一样都是遥控器,原来的遥控器就那么难按么?不见得,习惯了之后都可以盲按。我们花钱买了我们以为可以给我们生活带来更大便利的东西,我们甚至为之有些上瘾了?但是我发现这就是个新的遥控器,在功能本质上没有什么大的变化,我需要语音找遥控器么?一年可能都用不上几次,我一定要金属面板的遥控器么?塑料的怎么就不行了吗?人们会因为幻想买自己实际上不需要的东西。

怎么知道自己实际上是否需要一件东西呢?

我想到了一个简单的办法,不要从你自己主观的角度出发?不知你在使用这个遥控器,你的家人,小孩儿,朋友?老婆在用这个东西,你觉得你需要买个新的给他们么?有这个必要性么?如果没有那么大概率你也没啥太大的必要性买个新的给自己。

是的,我们生活在一个日新月异的世界,事物总是在进步的。消费主义能让人上瘾,感觉可以买到开心和快乐,但是这种多巴胺的分泌只会一次一次地拉高我们的期望,我们只会购买地更多。多巴胺是人类进步的动力,但是就像所有的工具和机制都需要一个合适的地方来发挥其作用一样,任何的机制也有可能被滥用。

当多巴胺分泌的时候人们的预期被拉高了,在没有新鲜的事物或东西能满足人们的欲求的时候,人类就会痛苦。就像是物理中的能量守恒定律一样,人类的快乐和痛苦通常来说也是守恒的。

这背后是我们对人类内在的奖励机制的理解。这套奖励机制的正确且合理的运行是个人平稳前进的基础。

正如前面所说,如果快乐变多了,随之而来的痛苦和平到会增多。如果我们主动地追寻困难或者有挑战的事情,那么平日里的日子也可以变出淡淡的幸福。

学习了解自己的奖励机制,利用它来引导我们前进的方向。

我需要一个新的遥控器么?

也需要,我需要他给我的奖励系统一些刺激

但是也许不需要,我需要的是给我的奖励系统一些刺激,而不是一个新的遥控器。

程序员中很多人喜欢折腾自己的博客,但是大多数折腾完成之后,写了几篇关于折腾博客的记录,之后便很少再去写新的文章了,这也是不知道自己到底要的是什么,是真的需要一个blog还是喜欢“折腾”这个过程本身。喜欢“折腾”其实没什么问题,但是不要为此让自己只是不停地折腾,人们总要“build” something,而不是一直拿着一把漂亮的工具但是并不构建什么东西,而是一直在打磨和装饰他的“🗡️”。

emacs的outline wiki 插件

不多说了,直接贴代码吧,也是从别人的配置上拿到的,在他的基础上加了一些功能(支持了搜索、刷新)。这就是emacs之道吧,看了别人的菜谱,自己也可以方便地抄过来改吧改吧,希望可以帮助到有需要的人。

依赖了helm 和markdown-mode

;;; outline-wiki.el --- Outline Wiki tools for Emacs -*- lexical-binding: t; -*-

;; Copyright (c) 2019 Abhinav Tushar

;; Author: Abhinav Tushar <[email protected]>
;; Version: 1.0.1
;; Package-Requires: ((emacs "26") (helm "3.7.0") (markdown-mode "2.4") (request "0.3.2"))
;; URL: https://github.com/lepisma/outline-wiki.el

;;; Commentary:

;; Outline Wiki tools for Emacs
;; This file is not a part of GNU Emacs.

;;; License:

;; This program is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.

;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <http://www.gnu.org/licenses/>.

;;; Code:

(require 'cl-lib)
(require 'helm)
(require 'markdown-mode)
(require 'request)

(defcustom outline-wiki-url "<wiki url>"
  "Root url for outline wiki.")

(defcustom outline-wiki-api-token "<your token>"
  "API token for outline wiki.")

(defvar-local outline-wiki-doc nil
  "Buffer local variable for keeping currently shown document.")

(defun outline-wiki-get-token ()
  "Open webpage for token generation."
  (interactive)
  (browse-url (concat outline-wiki-url "/settings/tokens")))

(defun outline-wiki-post-request (request-url data callback)
  "Send post request to outline API."
  (request
    (concat outline-wiki-url request-url)
    :type "POST"
    :headers `(("authorization" . ,(concat "Bearer " outline-wiki-api-token))
               ("Content-Type" . "application/json"))
    :data (json-encode data)
    :parser 'json-read
    :success (cl-function
              (lambda (&key data &allow-other-keys)
                (funcall callback data)))
    :error (cl-function
            (lambda (&key error-thrown &allow-other-keys)
              (message "Error: %S" error-thrown)))
    ))

(defun outline-wiki-share-url-p (url)
  (string-match-p (concat outline-wiki-url "/share") url))

(defun outline-wiki-get-id-from-url (url)
  "Get identifier from given URL.

This id is share-id or url-id depending on the type of URL."
  (car (last (split-string url "/"))))

(defun outline-wiki-get-doc-from-url (url callback)
  "Get document for the given URL and call CALLBACK on the
document."
  (let ((data (if (outline-wiki-share-url-p url)
                  `(("shareId" . ,(outline-wiki-get-id-from-url url)))
                `(("id" . ,(outline-wiki-get-id-from-url url))))))
    (outline-wiki-post-request "/api/documents.info" data (lambda (data) (funcall callback (alist-get 'data data))))))

(defun outline-wiki-doc-open (doc)
  "Open an outline DOC in a new buffer."
  (let ((buffer (get-buffer-create (concat "*outline-wiki:" (alist-get 'title doc) "*"))))
    (with-current-buffer buffer
      (erase-buffer)
      (insert (alist-get 'text doc))
      (goto-char (point-min))
      (markdown-mode)
      (setq outline-wiki-doc doc)
      (outline-wiki-mode))
    (set-buffer buffer)
    (switch-to-buffer buffer)))

(defun outline-wiki-doc-save (doc)
  "Push given DOC on the API. This unconditionally overwrites the
upstream so be careful with multiple editors."
  (message "Saving document")
  (outline-wiki-post-request
   "/api/documents.update"
   `(("id" . ,(alist-get 'id doc))
     ("text" . ,(buffer-substring-no-properties (point-min) (point-max))))
   (lambda (&rest _) (message "Document saved"))))

(defun outline-wiki-doc-open-in-browser (doc)
  "Open an outline DOC in default web browser."
  (browse-url (concat outline-wiki-url (alist-get 'url doc))))

(defun outline-wiki-doc-parent (doc &optional all-docs)
  "Pick and return parent of given DOC from ALL-DOCS."
  (when-let ((pid (alist-get 'parentDocumentId doc)))
    (cl-find-if (lambda (other) (string= (alist-get 'id other) pid)) all-docs)))

(defun outline-wiki-qualified-title (doc &optional all-docs)
  "Return fully specified title for given doc.

TODO: Show collection name also in front. That might need caching
      of some sort so not doing right now."
  (if-let ((parent (outline-wiki-doc-parent doc all-docs)))
      (concat (outline-wiki-relative-path parent all-docs) " › " (alist-get 'title doc))
    (alist-get 'title doc)))

;;;###autoload
(defun outline-wiki-doc-open-from-url (url)
  "Open doc from given URL for editing."
  (interactive "sOutline URL: ")
  (outline-wiki-get-doc-from-url url #'outline-wiki-doc-open))

(defun outline-wiki-save ()
  "Save doc showed in current buffer."
  (interactive)
  (if outline-wiki-doc
      (outline-wiki-doc-save outline-wiki-doc)
    (message "No outline document open right now")))

;;;###autoload
(define-minor-mode outline-wiki-mode
  "Minor mode for working with outline wiki documents."
  :init-value nil
  :keymap `((,(kbd "C-x C-s") . outline-wiki-save)))

;;;###autoload
(defun helm-outline-wiki-search (query-term)
  "Actions for outline wiki documents."
  (interactive "sQuery: ")
  (outline-wiki-post-request
   "/api/documents.search"
   `(("query" . ,query-term))
   (lambda (data)
     (let ((documents (mapcar (lambda (item) (alist-get 'document item)) (alist-get 'data data))))
       (helm :sources (helm-build-sync-source "documents"
                        :candidates (mapcar (lambda (doc) (cons (outline-wiki-qualified-title doc documents) doc)) documents)
                        :action `(("Open in buffer" . ,#'outline-wiki-doc-open)
                                  ("Open in browser" . ,#'outline-wiki-doc-open-in-browser)))
             :buffer "*helm outline*"
             :prompt "Open Doc: ")))))

(defun outline-wiki-doc-create (options)
  ;; new doc, options contains collections and new doc title
  (let ((title (car options))
        (id (cdr (assoc 'id (cdr options)))))
    (outline-wiki-post-request
     "/api/documents.create"
     `(("title" . ,title)
       ("collectionId" . ,id)
       ("publish" . t))
     (lambda (data)
       (outline-wiki-doc-open (alist-get 'data data))))))

;;;###autoload
(defun helm-outline-wiki-new (title)
  "New outline wiki document with TITLE."
  (interactive "sTitle: ")
  (outline-wiki-post-request
   "/api/collections.list"
   `(("offset" . 0)
     ("limit" . 25))
   (lambda (data)
     (letrec ((collections (alist-get 'data data))
              (cadi (mapcar (lambda (collection) (cons (cdr (assoc 'name collection)) (cons title collection) )) collections)))
       (helm :sources (helm-build-sync-source "collections"
                       :candidates cadi
                       :action `(("new document in collection" .  ,#'outline-wiki-doc-create )))
             :buffer "*helm outline*"
             :prompt "New Doc in: ")))))

;;;###autoload
(defun outline-wiki-doc-refresh ()
  "Refresh current outline wiki doc."
  (interactive)
  (if (null outline-wiki-doc)
      (message "no opened outline wiki")
    (outline-wiki-doc-open-from-url (cdr (assoc 'id outline-wiki-doc)))))

;; (outline-wiki-doc-refresh)

(provide 'outline-wiki)

;;; outline-wiki.el ends here

加上一些案件映射设置,让一切更加丝滑,在buffer保存的时候自动到outline wiki。

协同进化

硅基生命

人类发明了机器,机器又开始不断地演进,发展。一开始我们觉得这些机器很简单,其中不可能蕴含任何所谓“生命”的气息,但是技术的演化速度是指数级别增长的,现在这些机器的结构已经不是人类能够轻易理解的了(而且这一切还在继续)。我们无法确定是否在某一天开始意识也在其中悄悄萌芽。

人类与机器

我们已经无法离开机器了,他是我们工作生活的巨大助力。人类和机器的关系更像是自然界的共生关系;像人类和我们肠胃中的肠道菌群一样相互需要,只是不知道最终我们是菌群还是机器是菌群😀 。

冲突与矛盾

大多数科幻电影中畅想的硅基生命是另一个物种一样的存在,和外星人降临地球类似—–一山不容二虎。两种生命追求的是同一种有限的资源么?我想不是。硅基生命维持基本生存的基础是能源和算力,人类生活的基础是空间和食物(当然我们也需要能源),可是这两者几乎是互补的,硅基生的出现也加速了我们的生产效率本身也创造出了更多的资源,这是1+1>2的,为什么其中一方一定要消灭另一方呢?

卡片笔记写作法

这是一种整理和记录笔记的方式,将笔记作为自己的外脑,最大化地利用起来,希望可以产生出新的理念和想法,发生思维的碰撞。发明这个方法的是一个卢曼的社会学家,他也是(据说)使用了这套方法,自学并成为了以为杰出且高产的社会学家。

先把本书的目录结构整理如下

绪论,关于写作

要知道的

一般的笔记记录方法是什么?

一般大家都会在文献边上记录下自己的一些想法,还有的人可能会摘抄下来。笔记存在的价值一般就只有一段时间,过一段时间之后往往这样的笔记价值就大大降低了。

记笔记其实有两个目的:

  • 记录有价值的信息和自己的思考
  • 为后续的思考,整理加工提供素材

笔记作为我们的外脑的价值就在于此

什么是卢曼卡片法呢?

第一点,将所有的笔记记录在小卡片上,记录完成之后会有对应的分类:文献类、思考类。文献往往是现有资料在自己咀嚼之后的记录,思考是自己的想法。每张卡片都有一个自己的编号,不一定按照主题分类,只是用来做一个唯一的标志。

第二点,定期整理和回顾。卡片的好处是小,不是一本书一大份笔记,不同的笔记之间会有相互链接,整理的时候也可能发现新的连接关系。这样的定期回归就会将认知之间的关系,网状图构建起来,还有可能发展出新的认知。

要做的

要具备的能力

要注意的问题

基本原则

写作是唯一重要的事情

简洁最重要

没人完全从0开始

写作不是一个线性的事情。重点在于平时的积累和阅读,有了足够的输入才能有足够的输出。没有人是确定好选题,找资料,阅读然后再选择输出的。合理的流程是跟随自己的兴趣去了解,阅读,积累,笔记。在需要写作的时候从卡片中整理灵感和写作的主题,将他们整理成一片文章。写作不是一个线性的过程,而是一个循环过程。 这里有些类似代码的编写,往往合理的开发流程不是一蹴而就的流程,设定好需求,开发,上线。往往是一个慢慢迭代的流程,但是大多的开发流程设计中认为这是一蹴而就的过程,一旦上线需求就结束了,并不是这样的。windows的开发流程中也会设计这种tik tok的过程,需求实现一版本,优化一版本,不停地循环往复,在迭代中改进现有的逻辑和质量,也反思以往的不足。这才是一个合理的流程逻辑。

让工作推动你前进

寻找更加及时的反馈,可以让你更加爱上一件事情,学习和笔记也是。 卡片笔记法还有个好处是:随着卡片越来越多你能获得的链接数量是指数级别上升的(理论上)可以让你更加及时地获得反馈,这就能让你更好地爱上这件事情。

成功写作的六个步骤

明确区分独立又相互关联的任务

  • 一次只做一件事情,不要一心多用 保持专注一次只做一件事情,不要并发地去做事情,来回的上下文切换会导致效率低下,这个和计算机的处理方式有点像,上下文的切换是有成本的。协程、线程、进程之间切换的时候会涉及到context的保存和导出,成本太大了。
  • 每种任务需要的关注程度不一样 有些需要专注的思维,有些需要漫不经心地执行。例如编写大纲、草稿、校对等需要的专注程度都是不一样的
  • 写作不一定有明确的计划 我的理解是可以有一个大致的计划,作者原文是完全不要有计划,专家是不按照计划来的。 专家应该是说已经对一件事情了如指掌了,所以不需要一个细化的计划,但是这就是胸有成竹的专家。作为新手可以有一个大致的计划,防止自己找不到方向,但是也不要被这个计划给束缚住了。朝着专家的方向发展,做到胸有成竹。
  • 把写作作为自己的外脑,节省自己的精力 人的大脑是一个有限的机器,有限的存储,有限的记忆能力,有限的专注力。把笔记作为自己的外置硬盘,存储长期有价值的东西,cache中保存当前的工作上下文。一个长期合理的笔记流程可以让大脑不做那么多的决策,有助于把重要的事情放在第一,而不是被流程性的东西消耗太多的时间和精力。

下面是我自己的一些理解

阅读和理解

阅读的时候需要能够理解自己文献和输入,用自己的语言翻译内容,而不是照搬和copy原文

记卡片盒笔记

笔记的形式是卡片,内容体量不宜过大,简单但是精炼就行

发展想法

因为卡片之间是相互联系的,所以想法可以相互碰撞,可以发展出新的想法

分享你的洞见

从卡片盒里面发现了新的想法之后可以整理成完整的文章并将其分享出来

养成习惯

总结

卡片盒笔记方法的核心思路是将笔记的篇幅缩小,不要记录一本书一份笔记。而是一个想法一个笔记。让这些笔记之间可以相互链接,碰撞,成为思考时候的工具。

岩田先生

成长经历

“1959年12月6日出生于北海道。

毕业于东京工业大学工学部情报工学科。

大学毕业的同时,就职HAL研究所。

1993年,就任HAL研究所董事长。

2000年,成为任天堂株式会社董事、经营企划室长。

2002年,就任任天堂董事长、社长。

作为开发者,

他手中诞生了许多游戏杰作;

作为任天堂社长,

他策划推出了任天堂DS、Wii等革命性的游戏机,

并将自己所倡导的“游戏人口的扩大”付诸现实”

名人名言

“On my business card,I am a corporate president.

In my mind,I am a game developer.

But in my heart,I am a gamer.”

“在工作中与人合作,

要让对方说出‘下次也想跟那家伙一起工作’。”

总结

聪哥的出生年代正好赶上了个人电脑和家用游戏机的快速发展的年代,他本人又是一个非常好奇、上进、有天赋的程序员。作为一个高中生,谁能拒绝一台可以编程的机器呢(笑)。合适的环境 加上个人的兴趣是聪哥进入这个行业的敲门砖,当然呢,他也找到了合适他的一个团队(一帮兴趣相同的人)。

组件了HAL实验室,除了做好本职工作之外,聪哥也随着hal实验室的业务发展从一个程序员学习并成为了一名优秀的管理者:没有架子,如果觉得只能是自己干就义不容辞坚决去做好一件事情,和公司成员进行一对一的面谈。

和宫本茂,技术加创意的组合,和系井重里那里学习,能难得地找到知音。

https://pic.xn--oxap.xyz/images/2024/02/22/image.png

任天堂和苹果公司的设计逻辑很类似:他们都是产品和拥有用户视角的公司。乔布斯曾经被人质疑他不懂class是什么,但是指挥着一帮程序员在工作。老乔的回答大概是,我们也试过从技术出发,看看我们能造出什么东西来,但是造出来的东西不一定是用户需要的。任天堂也曾经为了游戏更好的画面投入了大量的财力来堆积游戏机的机能,但是最终的反响并不非常好,现在老任的游戏设计思路是先设计一个好玩的玩法,然后再丰富游戏的故事,剧情等等。苹果也是先找用户的诉求,明白用户需要的到底是什么,然后再来推动技术的落地。

先有问题,然后找解决方案;不要拿着锤子再来找钉子。

Mac sudo 与指纹 touch ID

利用touch ID 免去 每次sudo都需要输入密码的烦恼。

修改sudo配置

sudo vim /etc/pam.d/sudo

在最上面添加一行

auth	   sufficient	  pam_tid.so

https://pic.xn--oxap.xyz/images/2024/02/20/image.png

完成后结果如上。请强制保存。

修改Iterm配置

Iterm2上可能不会生效,Advanced > Session > Allow sessions to survive logging out and back in设置为No