从研究生毕业开始,我在过去的七年都在使用Mac作为自己主要的工作机器。一开始是追随家里人,后来则形成了贯性。今年年初为了回国搬家方便,我卖掉了自己的iMac,换上了新的Apple Silicon驱动的Macbook Pro。在这七年期间,我也间歇性地使用过Windows或者Chromebook,但是并不是作为主力机器使用。
对于Linux,同很多不是计算机科班出生的人一样,我最初的接触方式是通过树梅派。但是树梅派的性能确实太弱,不适合日常使用,因此树梅派的桌面环境我接触的很少。很快,树梅派就被我装上了没有GUI环境的操作系统,扔到家庭网络中作了一个小型的homelab,也是从这个契机,我接触到了更多的关于容器、虚拟化的知识,并且购入一台小型的二手主机,在上面搭建了一个ubuntu server,用于跑一些简单的开发环境。对于Linux的桌面环境我并不熟悉,最日常工作还是在Mac OS上完成的:包括文书的撰写,平常的网页浏览,以及大量的阅读。我最接近于使用Linux桌面的经验,也是使用套娃了Chrome OS,利用Crostini容器运行Linux的GUI软件。
最近我发现,除了PDF的阅读之外,我的大量的工作其实都是以纯文字的方式进行的。不管是数据分析、笔记记录还是文章书写,我的整体的工作流程已经越来越贴近Kieran Healy所言的基于纯文本(Plain Text)的流程(https://plain-text.co/)。 我的几乎所有的写作都已经转移到了某种形式的markdown格式中。非文本细读的数据分析基本上都是在R和Python中完成。甚至我常用的幻灯片也基本上是用beamer,或者在拥有模板的情况下使用Pandoc转化成PPT,最后再用PowerPoint进行微调。加之基于Electron的多端软件的发展,我开始想测试以下的情况:如果我将所有的工作流程都转移到一台Linux的笔记本上,是不是可以成功?
天气渐热,MBP 16的重量着实感人,背着到处跑确实也不方便,家里正好有一台被家属淘汰下来的2014年的Macbook Pro 13寸备用机。我便决定来试一试,在2022年的今天,Linux作为桌面环境,究竟能不能满足人文社科的研究使用?
这台Macbook Pro 13毕竟是一台八年的老机器。它的系统支持停留在了Mac OS Big Sur。在跑Mac OS Big Sur的时候已经有一些力不从心,经常发热和运作迟缓。
在Linux的发行版的选择上,我选择了Debian分支下基于Ubuntu的Pop OS。主要原因是之前对于Ubuntu的接触更多。Pop OS提供了很多基于Ubuntu的优化,在整体的UI上也比Elmentary OS更加讨我的喜欢。我选择了Pop OS 22.04 LTS。
我常用的软件包括以下的部分:
浏览器:Firefox和Chrome。在Mac OS一直使用Chrome为主,Firefox为辅,这次决定使用Firefox作为主力浏览器。
R和Rmarkdown的IDE环境:Rstudio。Rstudio基于Electron,有Linux的客户端。Rstudio也负责Rmarkdown的修改和渲染。但是长一点的,不带数据分析的Rmarkdown文档,一般会在VS code中进行写作。
Python和其他的文本编辑器:VS code。对于短的markdown文本(2万字),以及Python相关的代码,使用VS code作为IDE。不得不说VS code真是影响非常大的文本编辑器。虽然很多人吐槽VS code就是一个浏览器套壳,但是VS code也有很多优点:比如提供了一个非常完善和易用的插件系统。这篇文章就是在VS code中写作的。
笔记软件:Obsidian。笔记主要使用Obsidian进行编辑和查看,但是因为Obsidian也是基于markdown,所以也常用VS code进行编辑。Obsidian也支持Linux平台,相关的笔记通过dropbox进行备份和同步。
长文本编辑:Typora。很好看的markdown文本编辑器,也支持pandoc的简单输出。不会使用Typora写需要引用文献的文档,但是会写一些新闻稿件,或者是其他工作用的稿件。
字典软件:GoldenDict。GoldenDict是从我大学时期就开始使用的软件。在Mac OS上,GoldenDict比较不稳定,因此一直用的是收费的EuDict。现在在Linux可以用回GoldenDict,使用自定义字典(韦氏、AHD和SOE)。
储存服务:Dropbox。用于移动端、Macbook和这台机器之间的数据同步。
代码管理:GitHub Desktop。官方没有进行维护,但是GitHub上有一个个人项目,提供了Linux桌面端的支持。当然,实践中也可以利用VS code或者Rstudio内置的Git模块进行改动。
文献管理和阅读:Zotero和系统内置的Pdf Reader。文献管理主要使用Zotero。Linux上一直缺少一个合适的pdf阅读器。Zotero 6的更新解决论文阅读的大问题。我在电脑端只会作pdf的轻阅读,和已经阅读的文献的查阅。配合zotfile,论文附件储存在了dropbox。
启动器:Pop OS launcher。系统自带的一个非常基本的启动器,同Mac OS上的Raycast和Alfred都没有办法相提并论,暂时没有想去找另一个第三方的替代。
我基本上会花费一天80%的时间在以上的这些软件进行工作。
Fcitx: 上手后发现系统内置的iBus拼音输入法出现了卡顿的问题,想更换为Fcitx。但是Pop OS上对于Fcitx的支持也有问题。最后还是使用iBus,在出现卡顿的时候对于iBus进行重启。中文输入法一直没有在其他平台上那么灵敏。
各种即时通讯软件:不用了。方便肯定是更加不方便了,但是也更少地会被这些软件所干扰。
首先感受到的一个变化是,这台八年前的电脑变得更加的凉快和安静了。比起越来越臃肿的Mac OS,轻量的Linux对于老机器显然要更加友好。一个例子是,Zotero在Mac OS上通常要占用800MB以上的内存,但是在linux上,如果不打开pdf,可能只有100-200MB的内存占用。(但是zotero还是有内存泄漏的问题,内存占用会不断增加到600MB)日常的应用占用大约在6GB作用。在试用了一天之后,我觉得这台机器还能作为非常合适的备用机,也决定把已经鼓胀的电池进行替换。
该热的时候还是会热。M1 Pro只有在进行长时间的并行计算的时候,才会出现轻微的发热。我一般会设置8个大核做运算,剩下的两个小核来支持我同时来做一些文书相关的工作。对比之下,虽然日常使用凉快了很多,这台8年前的Macbook受制于处理器,在进行大型运算的时候还是会发热。这是自然规律,不可能因为软件的变化而变化。如果对比这台MacBook Pro和MacBook Air M1的Geekbench 5的分数,这个差距就很明确了:这台8年前的Macbook Pro的多核得分是1651,而M1的单核得分是1752。
在使用原先都已经鼓包的电池的情况下,续航在3-4个小时之间。换上了新的电池后续航应该会有不少的增加。
就像上面所说的,如果Chromebook已经可以满足很多人的选择,那么Linux也可以满足很多人的日常工作,甚至是更加复杂的创意工作。但这也得益于现代浏览器已经成为了一个新的平台。Chromium提供前端的页面渲染,node.js提供一个稳定的JavaScript running time。这两者在Electron中结合在了一起。
上面列出的软件中,VS code、Rstudio、Obsidian、GitHub Desktop、Typora都是基于Electron。而Zotero则是基于Firefox。可以说,我其实只是打开了无数的、单独定制过的浏览器窗口在完成自己的工作。
Linux和Mac OS之间的一些在快捷键上有不同的设置。这个反倒是需要刻意习惯的部分。
以下是我典型的几个工作流程。
一个典型的博客的书写流程如下:
以上的两个步骤一般不会要重复改动。
这篇博客就是在这个流程下完成的。
论文的书写要更加复杂一些。但是基本上也是相似的流程,但是各个步骤之间常常会重复。
如果有数据分析的部分的话,我一般会保留一个单独的R文件,而不会将代码合并进入RMD。除非这个Rmd只是简单的数据分析,而不包括比较长的论证。
更详细的方式也可以参考https://plain-text.co/
当然,切换Linux作为主力电脑还有一些问题。这是避免不了的。
首先,有很多即时通讯软件无法使用,比如微信。虽然微信的优麒麟客户端提供了一个deb的打包文件,但是会篡改系统文件(https://v2ex.com/t/858659),所以我并没选择。像我之前所说的,聊天工具的缺失不一定是个缺点。
其次,很多在Mac OS上使用的小的定制化软件不存在替代,或者说迁移成本比较高。比如我常用的代码片段管理软件Snippetslab,代码块都是通过icloud进行同步。
脱离了Mac OS,计算机与iPad和iPhone之间的联动自然也就变弱了。没有了airdrop,airplay和handle off的功能在日常生活中确实会造成一些小的不便利。
最致命的是一个硬件支持问题:因为MacBook Pro 2014是retina屏幕,日常会开启200%的缩放,在这个时候如果再外接一个屏幕,则对于外接屏幕的支持不佳,经常出现屏幕尺寸和缩放的识别问题。
这次安装Linux的时候,顺便给电脑清理了一下灰尘。发现电池出现了鼓包。因为还是决定保留一台备用电脑,所以还是保险起见,订了一块第三方电池进行更换。
另外,为了在处理一些计算类型的任务时发热,我本来想通过内网穿透暴露一个studio server的服务端口。但是开源版本的rstudio server不支持https,而我使用的内网穿透服务已经停止了对http转发的支持。我已经尝试了使用Apache2进行包装,但是因为证书冲突没有解决,导致rstudio server处于一个不可用。下一步我准备尝试使用“remoter”包,或者干脆安装一台Mac OS的虚拟机,用远程桌面进行连接。
Linux让这台老的Macbook焕发了第二春,但是它依然只会是一台好的备用机,肯定不会是我的主力机,特别是在我还有一些计算需求的时候。我不会愿意用它替换新机器,就像我不会选择8年前的手机一样。即使我的整个工作流程同8年前可能并没有什么差异,日常使用的这些软件也将性能都吃走了。计算机毕竟是工具,在可以不将就的情况下自然是不将就。
但我也发现我不需要那么讲究。这次实验也给我带来了两个主要的收获。首先,当一个人的工作流程越是贴近与纯文本,她就越容易在不同的平台间迁移。既然我能够在Linux下完成这些工作,这也意味着我一定能够在Windows下完成类似的事情,而且应该会完成得更加的顺畅。毕竟,工具并不会自动的生成思想,完成工作。
其次,它出乎意料的成功带给我的问题是:我真的需要在惯性下支付苹果税吗?日常工作中,我对于手机、平板和电脑间的无缝连接并没有太多依赖。手机、平板和电脑还处于各司其职的状态。现在Apple对于我的吸引力越来越在硬件环节上。ARM架构的处理器真的提供了一个性能、发热和续航之间的平衡,非常适合移动平台的使用。我并不需要一台笔记本具有最高的性能。相反,计算环境完全可以迁移至台式机和云端。如果是这样的话,那么我对移动设备的需求就会进一步的降低。
我的下一台计算机会选择Mac吗?大概率是,不过选择的产品可能就不再会在专业线上了。
]]>XX所说,多有共鸣。
XX同我也在二月回国。这本来是我在研究需要驱使下的一场赌博。同XX的波折不同,我们“仅仅”经历了一次机票被取消,二月底抵达了上海,又恰恰在上海封城之前离开。但接下来的时间,我们依然是经历了一场当代卡夫卡式的展览,光怪陆离,好似连格里高尔变成的那只甲虫都需要穿上白色的防护服。
离开上海后,我们先是在合肥遇到了说不清楚的“政策”,完全没有执行力的社区一定要我们继续接受名义上的居家隔离。等我一人抵达南京时,又需要接受3居家隔离+11健康监测的管理,总共要做9次核酸。更不可思议的是,我抵达南京上报不久后,发现我所在的市区又自行将三天居家隔离期间人员的健康码转成了黄码。根据要求,三天结束后我还需要到专门的地点进行核酸检测。试想,一旅客如果是黄码,她/他必然无法乘坐公共交通工具前往这些地点,出住所后也可能被拒之门外。南京市本来没有这一政策,区一级人民政府制定制定具体的防疫规范细则本身就违反了《传染病防治法》。我只能一个个部门打电话反映,从街道到社区到市长热线到市疾控中心,皮球也被从这踢到那。最让我印象深刻的是一个区卫健委官员的回答,我在电话中平静地对她说,我没有办法能够在解除居家隔离后移动到专门的黄码检测点,她在电话那头不理解地说:“你不知道骑车过去吗?”那天南京正下着大雨,我一时竟然不知道如何回复她。
现在各个层级的主政者,并不理解什么是政治,也太理解什么是政治。他们对经济和社会的理解,是一种绝对的拜物教式的:仿佛通过金融的运作和对企业再施以一些税费上的优惠,在人和物都不用流动的情况下,一切都能魔法般的流动起来。萧冬连在另一本《探路之役》中写道改革开放后的第一代官员,有这么一段:
“‘第一个吃螃蟹’的人并不一定有更多的升迁机会,反而要承担很大政治风险。如支持农民包产到户的官员,并不是有什么利益可以追求,而是出于对农民极度贫困深深的同情和愧疚,以及由此激发出来的责任感。沈祖伦(时任绍兴县委书记,后任浙江省省长)回忆说:当年改革之所以有那么大的闯劲,是因为‘看到农民的苦难’,‘为了让农民从苦难中摆脱出来,不怕与党在农村的传统政策相违逆,不怕去探索当时上级不允许做的事,不怕丢‘乌纱帽’’。”
反观组成这只巨兽的这些官员,经历了这么多年的高速增产和GDP的竞赛,他们对政治、社会、经济,甚至一个普通人的想象都已经同当时完全不一样,仿佛每个人都有着私家车,能够足不出户获得收入。去政治的政治再政治化,只能是空洞无物的疯人疯语,甚至是消灭言语的寂静。
XX说的最后一段,让我想起鹤见俊辅反思战前的日本共产党的“转向问题”:为何战前的左翼青年,会彻底抛弃自己的立场义无反顾地站到军国主义一边?而坚定地否定“转向”,何种程度上又是无效甚至危险的?事实上,身边已经有朋友在新冠流行期间经历了类似的转向。从一个支持性别平权、反对霸权的年轻人成为了国家主义和民族主义的坚定支持者。我想鹤见俊辅提出的是一个普遍性的问题:作为一个普通人,我们应该如何应对愈来愈日常的国家暴力,又不与之同流合污?这个问题我并没有想明白,可能也想不明白。但愿在日常和同朋友们的交流中能习得那么一点点。
祝好 博伦
]]>落地后不久,中国内地的多个城市就发生了由奧米克戎(Omicron)引发的新冠大规模流行。两年过去了,中国并没有能够建立一个在分级治疗基础上的新模式来支持开放,只是在武汉模式上不停地重复。但是病毒已经不同了:现在,奥密克戎毒株的R0已经达到了原始株的三倍以上。还没有回国时,我就已经感受到了相关的冲击。中美间几乎断航了快一个月的时间,我们的航班也被熔断,而购买新机票付出了多一倍的价格。深圳和吉林早早开启了封城的模式,而上海始终在流调控制和分区域控制下反复,没有实现对新冠新增人数的控制。在吉林北京的直接干预下,上海还是走向了严格的封城模式。
认识的知识精英中不乏支持这种严格封闭模式的人。他们中不少在大学时接触了古典学,而且是列奥·施特劳斯式的古典学。对于他们来说,对待COVID-19的政策本身就是一种政治。在这种观点下,滑坡的谬误很快就出现了:科学和经验被认为是不重要的,甚至任何常识的空间也被压缩。对待疫病本身体现的态度比相应的行动带来的次生的影响要重要万倍。
这让我想到了数十年前我与老师之间的一段对话。当时正在闲聊着伊拉克的劳工运动史,老师突然问我,“是不是觉得美国在伊拉克战争中失败了?”我的回答自然是,伊拉克对于美国的而言是一场彻底的失败,不但耗费了大量的财力,还使得战后的伊拉克愈发受到伊朗的影响。老师评论说:“以他的交流中获得的信息而言,但美国官员并不认为自己失败了。他们解决了萨达姆政权,解决了当时他们认定的中东战略中的一个问题。后续伊朗填补了空缺,这个是一个新出现的问题,他们认为,新的问题再去解决就好了。”
这几天又读到NYT记者Suskind在2004年记载的小布什幕僚对他说的一段话:
“’We’re an empire now, and when we act, we creat our own reality. Ans while you’re studying that reality - judiciously, as you will - we’ll act again, creating other new realities, which you can study too, and that’s how things will sort out. We’re history’s actors…and you, all of you, will be left to study what we do.’” (Suskind 2004.)
现在,我仿佛又在另一个不同的情境里见到了这种新保守主义行动者。哪怕丝毫不具备任何政治德性,他们都会站在阿尔西比亚德一边,嘲弄着被他们左右的人。
]]>近期回国,要在国内呆一段时间。在国内期间虽然有一个常驻地,但一方面很多计算和网络设备在行李里,一方面也会在不同的地区到处跑跑,还有刚回国期间的超长隔离,需要搭建一个homelab环境来满足移动时最简单的网络需求和一些软件需求。
网络需求包括:
在软件上的需求如下:
可能最为方便的解决方案是一个all-in-one的小主机。如果采纳这个方案,则首要使用ESXi搭建多台linux虚拟机,在其中布置多个服务。预计需要虚拟2-4台机器:一台openwrt。一台linux作为Rstudio server,一台linux作为code-server和python环境,一台Linux跑其他docker环境。Rstudio和code server也可以考虑以docker容器的方式运行。现在比较合适的机器是使用N6005处理器的PN41或者NUC11ATKPE。
这个选择的优势在于:
但是也有不少劣势:
最后选择了利用手头的设备做了一个分离式的方案,这个方案硬件上由以下部分组成:
其中有三件是既有设备,R4S则是新购入的。
GL-MT1300是原厂定制化openwrt,没有安装任何插件,仅仅作为主网关和AP,提供给所有设备使用。Raspberry Pi 4B使用了新的Raspberry Pi OS (64-bit) lite,主要负责跑docker容器。R4S则安装了openwrt,并安装了诸多插件,作为旁路网关使用,供有需要的设备使用。华为的4G modern则在有需要的时候作为网卡接入GL-MT1300。Raspberry Pi和R4S用一个双头24w的USB电源供电,而GL-MT1300使用了自己的电源。
在整个这套解决方案有些脱裤子放屁的感觉,特别是在网络需求方面。GL-MT1300本身可以通过修改插件的方式的安装需要的配件。Raspberry Pi 4B也可以以docker容器的方式来运行一个openwrt实例。但是最后还是选择了三个分开的方案,除了爱折腾外,原因有三:
相较之下,R4S在原生运行openwrt,在相似的网络负载的情况下,CPU尽管性能弱于Raspberry Pi 4B,占用只有5%左右。从这个意义上来说,完全可以用更便宜的R2S来代替,体积还会更小一些。
这套系统组装之后,肯定没有all-in-one的解决方案优雅,但有以下优势/胜在折腾:
另外,买了一个20元左右的软质包,可以将所有的线材和设备进行收纳,方便移动。
Raspberry Pi 4B上没有选择自己编译R和Rstudio server,而是拉取了一个以Jetson Nano中的R开发为基础,移植到Raspberry Pi的镜像。地址在:https://github.com/pinei/edgyR-pi
这个环境下的R的版本在4.0.2,使用https://mac.r-project.org/benchmarks/ 的代码进行benchmark,单核性能同14年前的酷睿处理器接近。所以跑一些简单的代码可以,就不用想着来做主要的R instance了。
]]>之前的个人站点在google site,但是因为一次欠费,所有的数据都从google site中被删除,因此决定迁移到更加安全的GitHub page。除了研究相关的信息之外,也记录一些生活中好玩的事情。
]]>