wangpin34 / blog

个人博客, 博文写在 Issues 里
5 stars 0 forks source link

2021/07/30: ipad OS 的生产力探索 #69

Open wangpin34 opened 3 years ago

wangpin34 commented 3 years ago

封面

dose-media-3R3sNikjVnA-unsplash

Photo by Dose Media on Unsplash

ipad OS 的生产力探索

周末恰逢台风”烟花“登陆上海,风雨交加,天地变色。部分公共交通停运。傍晚,被通知周一在家办公。倒霉的是,笔记本电脑放在公司里,手头只有一部ipad mini可供使用。只能硬着头皮尝试调教一下,满足第二天的工作使用。

作为一个是用 JS/TS 作为主力开发语言的人,我的预期是:

下面是尝试过的几种方案,各有”千秋“

Play.is

Play.js 其实就是 codesandbox 的移动版本,加上了一些 native 的功能,比如:

如果你要开发的 App 刚好是符合 Play.js 的 sandbox 标准的(这个标准我还没有研究过,但最好),那 Play.js 能够满足需要。但是,如果你需要开发一个定制化的项目,例如指定 entry,build script,那就不能用 Play.js 了。

JSBox

JSBox 的定义是「运行 JS 的 Box」,比如你可以用它来运行网络上的一段 JS 代码,或者将代码保存在 JSBox 中。如果你刚好有一个小创意,需要写一段脚本,JSBox 是最方便。但是作为日常的开发工作来说,JSBox 就不能胜任了。

Linux 模拟器 iSH

iSH 就很大了,因为它就是一个完完全全的 Linux。你需要很熟悉 Linux 命令行,因为你需要使用安装命令手动安装必要的软件来支持开发工作,比如,安装 Nodejs,Npm,Yarn。好在, iSH 内置了 apk。理论上讲,只需要安装 Nodejs 和 Npm 就可以愉快的发车了。但是当我安装 create-react-app 时,系统卡在了一个地方,反复尝试,还是卡在同一个位置。在github 查看 issue,项目的 readme 上清楚的写着「项目开发中」,目前支持的各种开发环境中包括 Python,Ruby,而 Nodejs 不在其中。我默认它对 Nodejs 的支持是有问题的。后续会关注一下 Nodejs 方面的进展。

还有一个严重的的问题是,它是一个没有 GUI 的 Linux,不像 ubuntu,可以安装浏览器查看 UI,也不能使用我喜欢的 vscode。vscode 的问题兴许可以用 vim 代替,但浏览器的问题是无法克服的。除非 iSH 支持 GUI,否则,没法用它来做 App 开发。

其他

还有一些方案我根本就没有尝试,因为从介绍上来说,就不符合我的要求。

随着不断的尝试,我内心里真正的需求慢慢清晰起来,我要的其实是一个完整的自带 GUI 的 OS,MacOS 最佳,其次 Ubuntu。

在这天即将结束的时候,我告诉自己,还是老老实实用 laptop 的好。至少目前为止,ipad os 还无法完全满足开发的基本要求。但是,数个小时的探索并非没有价值,我得到下面这样的 desision tree。

  1. 如果打开开发一个小脚本,解决个小问题,用 JSBox
  2. 如果打算开发一个常规的前端 App,用 Play.js 或者 stackblitz。
  3. 如果打算开发非常规,或者无 UI 的项目,用 iSH,但是要等待 Nodejs 支持完善。

读书

本周大部分时间在读《哈利波特》,目前读完了第一部《哈利波特与魔法石》。第二部《哈利波特与密室》刚刚开始读,看到里面提到,因为哈利波特缺席了格兰芬多的魁地奇比赛,因此,上个学年魁地奇的冠军依然是斯莱克林学院。我想啊想,哈利怎么就缺席了决赛了,哦,想起来了,哈利为了保护魔法师,与伏地魔的化身一番大战(其实基本是被吊打,如果邓布利多不及时赶到,哈利就要提前领便当了),最后昏迷。

希望在《密室》结束的时候,哈利为格兰芬多赢得一座魁地奇奖杯吧。

健身

开始有规律的跳绳,一次 200个,休息一分钟跳下一组,一共12组。周四晚上第一次尝试这种跳法,完成了10组,效果很是立竿见影,流了很多汗。话说,我其实有好多年没有过像样的运动了。15年之前,还经常去打打羽毛球,还会去小区隔壁的中学操场跑步。最近几年,真的是越来越懒,也越来越胖。以前听别人说「卡路里」啊,「低碳水」啊,还不怎么感冒,觉得吃个饭还要计算这个计算那个,真是滑稽。结果现在自己也乐呵呵的控制饮食开始运动。运动确实让人快乐,每当跳绳累的精疲力竭,久违的汗水从毛孔中渗出来时,就会觉得什么烦恼都无影无踪了。身体上轻微的不适,比如偶尔因为用脑过度或者睡眠不足导致的头疼,也会在一次酣畅淋漓的跳绳后减弱甚至消失。另一方面,健康的饮食的也并不像想象中那样难以接受,事实上我原本也不太嗜好油炸食品,甜品,碳酸饮料。唯一的麻烦是面条,我很喜欢面条,每次想起来就要流口水。作为一个陕西娃要控制吃面的频率,真的太难了。

App

编程

大部分的工作是将某个已有项目改造为 TypeScript 版本,大量使用 module 解决 types 的命名空间问题,比如:

export module Menu {
   export ItemBase {

   }
   export SectionItem {

   }
}

let item: Menu.ItemBase

还使用了大量的 condition types

interface Animal {
  live(): void;
}
interface Dog extends Animal {
  woof(): void;
}

type Example1 = Dog extends Animal ? number : string;

type Example1 = number

type Example2 = RegExp extends Animal ? number : string;

还有大量的 Creating Types from Types

总结一下这一轮的核心,其实花在定义新类型的精力不多,主要是整理类型定义,消除重复的,无用的,尽量用类型推导类型。其实说起来,在 TypeScript 里也存在 single-truth 这个概念,像是另一个 React:你永远只为核心类型做具体定义,然后从核心类型推导其他类型。