岩田先生

成长经历

“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

试试看吧

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

问题

每次系统更新完成之后这个文件都会被覆盖,需要重新操作一次。

一个可行的解决办法是密码不要设置得那么复杂,但是如果密码太简单,又非常不安全,这真是一个两难的方案。所以我们需要在安全性和便利性之间做一下决断。

从0发现Lisp

一起来画画

假如说我们有一些画画的能力。这里使用JS来举个例子

drawPoint({x: 0, y: 1}, 'yellow')
drawLine({x: 0, y: 0}, {x: 1, y: 1}, 'blue')
drawCircle(point, radius, 'red')
rotate(shape, 90)
...

我们可以画一个点,画一条线,可以画圆,可以将图形旋转90度。

新的挑战

一般而言我们的这些能力我们都希望可以复用起来,不能开发一次就丢了,那就太浪费开发小哥哥的头发了。我们希望支持配置化,这意味着我们希望读取一些配置然后把不同的参数给不同的函数去执行,并得到一个结果。我们有个文件输入流,我们假定他叫stream

 stream.on('data',data =>{
   //TODO
 })

Eval

选择JS来举例子是因为JS可以使用eval,如果我们想偷懒的话可以直接使用eval来满足我们的需求。

 stream.on('data',data =>{
   eval(data)
 })

我们只要在配置里面写上"drawLine({x: 0, y: 0}, {x: 1, y: 1}, 'red')" 就可以画一条线了。 但是。。。只要稍微有点经验的程序员就会建议你不要这么做,因为你不知道data里面具体是什么,这么做就相当于让你的系统在配置面前裸奔,天晓得他会调用什么方法,会发生什么。

看来我们不能用eval了,但是我们还是需要解决我们的问题,我们想让用户可以自定义到底要怎么画画(毕竟要赋能业务嘛 🐶)

简单的想法

我们可以用JSON来做一个简单的配置,配置好要执行的函数,这个函数对应的参数是什么就可以了呀。假定我们设计好我们的配置格式如下:

{
  instructions: [
    { functionName: "drawLine", args: [{ x: 0, y: 0 }, { x: 1, y: 1 }, "blue"] },
  ];
}

我们拿到配置之后要做的就是将其翻译成对drawLine({x: 0, y: 0}, {x: 1, y: 1},"blue") 的调用就可以了。 感觉还是挺简单的。

 stream.on('data',instruction =>{
   const fns = {
    drawLine: drawLine,
    ...
  };
  data.instructions.forEach((ins) => fns[ins.functionName](...ins.args));
 })

easy!!

稍微简化一下

因为每条指令的开始都是函数名,然后都是参数,所以我们其实并不需要指出哪个是函数名,哪个是参数,我们可以将我们的配置简化如下:

{
  instructions: [["drawLine", { x: 0, y: 0 }, { x: 1, y: 1 }, "blue"]],
}

我们将我们的配置从一个json对象变成了一个数组。instructions 是一个包含指令数组的数组,一条指令的第一个对象一定是函数名,剩下的是函数的参数。修改一下我们的代码:

 stream.on('data',instruction =>{
   const fns = {
    drawLine: drawLine,
    ...
  };
  data.instructions.forEach(([fName, ...args]) => fns[fName](...args));
 })

好了,我们的drawLine 又可以欢快地跑起来了。

🤖仿生人会梦见电子羊么?

梦和现实的区别

突然意识到梦境和现实的区别是什么。现实里面所有的事情都有无限的细节可以深入,但是梦里面的事物大多是已有现实的碎片。很多的细节没法深究下去。比如你买了一双鞋子,现实里面只要你想就可以了解到这双鞋子的颜色尺码,品牌,甚至连鞋子盒子上的包装纸的纹理和保修卡上的文字你都可以知道,但是梦境里的很多都是无法深入下去的。

所以梦境和现实对大脑来说输入的精度,或者说输入的信号的信息密度是不一样的,一个是4K高清的,另一个仿佛是480p。

为什么梦没有无线的细节呢,因为梦中事物是我们保存在大脑里的记忆碎片。人不会对现实存下那么清晰的素材。

为什么要做梦呢?

类比神经网络训练的模式,将已有的素材拆分拼接,图像旋转,拉伸等方式,我们可以在有限的训练样本中获得更多的训练资料。做梦也是一样的道理,我们通过做梦把现实的碎片拼接在一起,让我们的大脑去模拟和经历一遍。这样相当于大脑经历了更多事情,得到了更多的输入。所以在漫长的进化中可能不是所有生物都做梦,但是做梦这个机制可以让人类学习得更好。

有没有其他动物会做梦呢?我们怎么知道另一种动物是不是在做梦呢?

科学家普遍相信,许多动物在睡眠时也会做梦,类似于人类。然而,要确切地知道其他动物是否在做梦是比较困难的,因为我们无法直接询问它们。目前,科学家主要通过观察动物在睡眠中的脑电波活动、眼动活动以及其他行为表现来推测它们是否在做梦。但要得出准确的结论仍需要更多的研究和科学证据。

有个经典的科幻小说问题叫做仿生人会梦见电子羊么?

why not?

仿生人🤖当然可以梦见电子羊,这也是他自我学习的过程。

Outline wiki 同步

说明

我搭建了一个outline的wiki来做自己的文档管理,然后outline wiki支持web hook 所以我写了个简单的golang脚本用来同步wiki和博客的内容,这样hugo就相当于拥有了一个可视化编辑的编辑器,也不用使用git来管理博客的更新了,这些内容都可以自动化了。下面是博客内容的一些测试。

Title

  • A
  • b

subtitle

3级标题

4级标题

##### outline wiki 不支持5级标题

c语言的代码例子

#include<iostream>
using namespace std;
int main(){

  cout<<"Hello World!!"<<endl;


  // 这是一条注释
  return 0;

}

图片的链接还需要修复,从表现上看图片在outline中是通过api接口从缓存中获取的,现在还无法直接拿到对应的图片

从pic图床拿到的图片,目前可以先试用图床。

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

表格测试 4
12
2

$$ \lim_{x\rightarrow0} \frac{\sin(x)}{x} = 1 $$

分割线


2B or not 2B

遇到的问题

  1. outline中会自动添加换行用来在outline中展示换行,转换到hugo的markdown时需要处理
  2. 数学公式在outline中默认是3个$来表示,需要替换为常见的2$

需要在theme中开启下公式支持

# KaTeX mathematical formulas config (KaTeX https://katex.org/)
# KaTeX 数学公式配置 (KaTeX https://katex.org/)
[params.page.math]
  enable = true

试试看公式支持 $ \sin(x) $

房价是不是太高了

我的简单模型

简单来说可以看看如果没有这套房子你需要付出多少的成本

假如一套房子的产权是70年,总价是X。

如果全部走租房,月租是M 70 x 12 x M

一般来说房子还会带来一些其他政策上的便利,

  • 学区
  • 户口
  • 医疗

等等条件。这些价值比较难以直接得衡量。

所以只要 X < 70 x 12 x M

那么其实不算过高的价格

这可能是一个比较粗浅的模型:

还要算上对应的通货膨胀。

如果一个人不打算在一个城市长期发展,也没有人会租房70年吧,早就回家了。

专业复杂些的方式

下面是GPT给出的一个评估模型,应该是一些机构的操作评估方式。


设计一个估计房子价值的模型涉及到几个关键步骤,包括数据收集、特征选择、模型选择、训练以及评估。以下是一个基本的指南:

1. 数据收集

首先,你需要收集房地产市场的数据。这些数据通常包括房子的各种特征,例如面积、位置、建造年份、房间数量、卫生间数量、近期翻新情况等,以及房子的成交价。数据可以从公共房地产记录、在线房地产网站或通过合作伙伴获得。

2. 特征选择

从收集到的数据中选择对房价预测最有影响的特征。一些常见的特征包括:

  • 位置:通常是影响房价最重要的因素。
  • 面积:房屋和土地的大小。
  • 房间数:卧室和浴室的数量。
  • 建造年份翻新情况:新房通常比旧房贵。
  • 设施:如车库、花园、阳台等。
  • 邻近设施:如学校、公园、购物中心等。

使用相关性分析和特征重要性评估方法,如皮尔逊相关系数、斯皮尔曼等级相关、随机森林特征重要性等,来辅助特征选择过程。

3. 模型选择

选择一个或多个机器学习模型来训练数据。常用的模型包括:

  • 线性回归:适用于特征和目标之间存在线性关系的情况。
  • 决策树随机森林:可以处理非线性关系,且对特征之间的交互作用表现良好。
  • 梯度提升树(如XGBoost、LightGBM):提供高精度的预测,但需要仔细调参。
  • 神经网络:适用于大规模数据集,可以捕捉复杂的非线性关系和特征交互。

4. 训练模型

使用选择的模型和数据集来训练模型。这个过程通常包括将数据分为训练集和测试集,使用训练集来训练模型,并用测试集来评估模型的性能。

5. 模型评估和调优

使用适当的评估指标,如均方误差(MSE)、均方根误差(RMSE)或平均绝对误差(MAE),来评估模型的预测性能。根据评估结果调整模型参数或选择不同的模型进行尝试。

6. 部署和应用

一旦模型经过充分训练并验证其预测性能满足要求,就可以将其部署到生产环境中,用于实时估计房屋价值或作为房地产决策支持工具。

这个流程仅仅是一个起点,实际过程中可能需要进行多次迭代和调整。关键是持续评估模型性能并根据实际需求调整方向。


还是觉得我的估计模式简单又高效!😊