Chp 2.1 Lab Stories(连载中)
在 Basement 做实验的人,分不清白天和黑夜
实验室是我在 Stanford 呆着最久也最安心的地方。之所以说安心,是因为在那段时间,我是最踏实的履行着我职责,俗称做着该做的事情。在刚读博的时候,觉得对 OCT 充满热情,需要献身一番,后来认清现状热情淡去,没有什么抱负和包袱了,说抱负是对用 OCT 在肿瘤成像事业的贡献,说包袱是毕业的遥遥无期。淡去之于,每天每周和每月就是制定计划和完成计划,每次在陷入困境和解决问题之间摆动。就在我博士的最后一年,来到这样一所大学,我内心是敬畏的,想着能多学一点东西就可以;如果可以做一点贡献,那就是对自己的肯定了。
这一章节,详细盘点我所学到的关于实验室的软硬件,无论软硬。
软件篇
Lab wiki
上回说到落地旧金山遇到的瓢泼大雨,很老实的我第一件事就是通知导师说,我到了。于是收到一封令我乍舌的长信,信的开头是这样的:
然后收到 Michael 同学发来的邮件:
Welcome to California!
Welcome to SBO! Your sunet is
yuezhu
I just set you up on our: – wiki…
虽然后来才知道 Michael 同学自动化能力有多强,这封邮件是每次来新学生都要设置的帐帐。
看到 Michael 同学的邮件,我想着到底什么是 wiki 呀?带着这些好奇,我记得那是第一天正式坐在办公室,可能在填写什么表格,突然被通知我的 Windows 10 是家庭版:安全系数太低。要么花钱升级到 Win10 旗舰版,要么只有半个月的使用时间。而我想的是,还好我当时使用的 Win10 是正版,只是版本需要升级。我们又交涉了一会,实验室维护软件的专员问这台电脑是私人还是实验室使用,放不放学校数据,我说不放,是我的个人电脑,也没有加密信息。于是就在他那边修改了我电脑的权限,这才能使用。而后来使用的 MacBook 就没有这些困扰,在湾区 MacBook 就是硬通货的感觉。接着用电脑 Wi-Fi 连接打印机又出了问题。打印机的 Driver 太旧,Lab wiki 上的下载链接也不对,实验室小伙伴表示「你自己再搜搜看我要去忙 ABCDEF 项目」,才第一天,就感受到了节奏之快,要解决的事情之多,而且没有人愿意停下来手把手帮你解决事情。我找到了正确的 Driver,上传到 Lab wiki。
是的,这就是 Lab wiki,前面 Michael 同学提到的帐号是:
- Wiki 帐号
- 服务器帐号
前者用来建立自己实验室的软知识,比如新学生的注意事项;软件的帐号、使用指南和经验;具体项目里前人的经验;再比如东西放哪儿了,这也是后面要细讲的 Inventory,实验室仓库,是我觉得非常 Organize 的东西。后者是存放所有项目数据和代码的服务器。这些结合到一起,才能再往下讨论说,如何建立一个实验室,也是我学到的很宝贵的经验。
例如这个 LabVIEW 的页面,就是我建立的。就好像在少数派写文章记录一点一滴一样,实验室也是每个人努力积累而来,这很重要。
Make contributions
My contributions
Lab jobs
整个 Lab Jobs Tree 如下:
- Technology
- Wiki Maintenance
- Server Maintenance
- Software Maintenance
- Website Update
- Google Docs Updates
- Equipment and Facilities
- Lab Manager
- Ordering Manager
- Inventory Manager
- Telesto Manager
- Personnel
- Presentation Manager
- Schedule and Meeting Manager
- Social Coordinator
- Group Meeting Secretary
- Journal Club Manager
- Orientation Manager
- Seating Manager (SBO Group Rep)
在 Labmate 有变动的情况下,我承担了 Technology 的部分。其中 Server Maintenance 较为复杂的部分。在 Lab wiki 的部分提到了 Michael 同学帮我申请的 wiki 和 server 帐号。后来我也帮另一位新同学申请了这些,也就是 Set up new student 或者 Orientation:
基本上我的工作是打开 Mac 终端,敲击 SSH xxx@xxx-serv.stanford.edu
,进行用户的添加/移除/修改密码和服务器端文件的添加和移除,具体语法为:
ssh NAME@xxx-serv.stanford.edu(it should be an admin authorised account)
sudo /bin/bash
cd /usr/sbin/
./useradd -e 2017-12-31 NEWUSER
passwd NEWUSER
smbpasswd -a NEWUSER
./usermod -g users NEWUSER
那什么是 SSH?
简单说,SSH是一种网络协议,用于计算机之间的加密登录。
如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。
最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。
其中,sudo 也就是权力很高的用户,有执行上述操作的权限。
在给新同学建立账户的时候,我基本是懵的,我只会小白的作为用户上传和删除文件到服务器。如果是 MacOS 用户,有两种方式:
- 通过终端 Terminal
- 打开终端
- 输入”ssh username@xxx-serv.stanford.edu” 然后回车
- 输入密码
- 通过图形化界面 – Finder 访达 (Samba)
- 点击 FInder
- 敲击菜单栏的 “Go” 选择 “Connect to server…”
- 在 ”server address” 键入 “smb://xxx-serv.stanford.edu”
- 点击 “connect”
- 填写用户名 “Name” 和输入密码
- 点击 “Connect”
如果是 Windows 用户,可以使用:
这一篇记录一个跌跌撞撞在 Linux 外围打转的经历。
Inventory
致实验室无处安放的仪器
一个生物医学光学实验室应该是什么样?布满光学仪器或是元件、扳手。那么当实验室的项目和成员多起来,经常产生下面几个问题:
- 实验室器材随便乱放,找不到
- 甲在乙的光学平台上拿走了一个东西,而乙不知道
- 消耗品不即时更新
那么我们需要一个这样的工具:
- 标记每个仪器和元件的数量和位置
- 标记主要使用者(项目)
- 记录元件或者仪器的供应商或者经销商
Lab 里我觉得最整齐的就是贴上标签光学元件整理柜,和那只标签打印机:
它们整齐的背后则是一个叫 Inventory
的 Google Sheet
。整个过程是需要积累的,当我们买到仪器放在一个抽屉之后,要给该抽屉打标签 A1
,接着给这个元件打标签,比如透镜
,那么在电子表格中就列出来透镜
放在了 A1
,再丰富元件的属性,比如供应商、数量、价格等等;如果还考虑到被借走,可以添加借用人和归还日期。
这样一个想法可以在 Google Sheets 完美实现,而且 Google Sheets 可以运行 Script,比如将第几行的内容发送给谁。这个功能可以用来提交购买元件,等 Lab PI 批准,然后再购买。在 Google Sheets 的 Tools
一栏下,选择 Script editor…
:
得到 script 界面:
可以写很多认为有用的脚本程序,然后回到对应的 Google Sheets 内,在 GaolabScripts
下选择运行写好的 TestFunction
,于是在邮箱内可收到这样一封邮件:
这样的脚本文件可以自动化处理 Google Sheets 的内容。而且这个程序可以用 Python 等语言写,更多关于 Google Script 的官方文档可以在这里获取。
说完被伟大的墙阻挡的 Google Sheets,我们还可以用 Excel,作为最朴素的使用方法,虽然交互协作有些不方便,但确实是大部分人用着的工具。在菜单栏-工具,也有脚本程序编辑的 VB Editor:
Excel online是对应 Google Sheets 的在线编辑工具。但是打开复制的过程都很复杂,不建议使用。
Microsoft 系列的软件非常非常强大,比如绘制曲线,统计数据。我在实验中,会用 Excel 画出 Raw 数据的曲线,大概判断数据正确与否。但在平时,不太用 Excel 处理文档。
最后一个使用过的工具是 Airtable:
有很多好看的模板可供选择,它更类似于仓库属性的表格,比如出游清单和 Lab Inventory,它基本没有二次处理数据的功能。
值得注意的是,国内由于调用 Google API 导致速度很慢,但不是不能用。
Programming in lab
于是想到 GitHub 和开源的价值。光学工程领域搭建系统的研究者都知道 Thorlabs,它提供光学元件和光机械的解决方案,其中位移平台控制的精确度和如何将这个部分集成到自己的自建仪器中,总是很麻烦。 Thorlabs 提供 LabVIEW 和 Python 的接口,由于 LabVIEW 对工程学生比较友好,因此很多人都用图形化界面的 LabVIEW,而它的缺点在于不容易 Debug,程序很臃肿,运行效率更是慢,有些编程能力强的就直接用 C plus plus
。随着 Machine Learning 的「流行」,Python 这个善于处理大数据的程序跟着走红。Python 自身的轻巧易上手,也是科研工作者喜爱的语言之一。
Thorlabs 上使用非常多的当属 APT,比如在搭建下面这个可以二维移动且旋转的光机械时,我用到了 Thorlabs K-Cube DC Servo Motor Controllers(Demo).
我用擅长的 LabVIEW 在电脑端控制它,例如:
另一种实现方案是用 Python,因为 Thorlabs 也开放了 Python API,例如:
- 支持Thorlabs 接口的 PyAPT
Controlling Thorlabs APT using Python code using APT.dll and APT.lib, bypassing the activex controls. It even comes with a simple GUI!
该文档由 Lab Mate 维护,也是人物篇里的「独行侠 Michael」,这是一个标准的 Geek。
做医学成像涉及到的读取数据,一般会用到 NI 公司的 DAQ,它一般是这么使用的:
在电脑这一段,也是用由它开发的 LabVIEW 易上手低效率的开发软件。最近
跟我们一个 Basement 的 Mabuchi Lab 发起了下面这个开源项目:
Instrumental is a Python-based library for controlling lab hardware like cameras, DAQs, oscilloscopes, spectrometers, and more. It has high-level drivers for instruments from NI, Tektronix, Thorlabs, PCO, Photometrics, Burleigh, and others.
可以通过 Python 连接硬件上述这些硬件。
丹麦公司 NKT研究出来的超连续谱光源可以说加速整个 OCT 技术的发展,使得光源带宽很宽的情况下保持很高的功率,带宽是成像中非常关键的因素。
而且每次打开光源的流程是:
- Turn on laser
- Open NKT Kontrol software
- Click Reset interlock
- Select percentage(eg.5%)
- Click Emission on
也可以把光源集成进 LabVIEW。目前有 LabVIEW 的 SDK(SOFTWARE DEVELOPMENT KIT)。但种种问题亟待解决,例如:
- 光源启动非常慢
- 在 LabVIEW 中代码效率低
在播客 Byte.Coffee 的第三期 I QUIT 中提到,二月份我去了 Photonics West 2018,跟 NKT 的技术人员交流的过程中,发现他们的程序员也在用下班时间开发 NKT Laser 的 python 接口,因为 NKT 并不 pay for that.
编程是一种技能和方法。但是,Programming in lab. 编程不是目的,是为了更好的集成光学系统来成像,成像质量永远是我们领域最关心的部分。
Comments
So empty here ... leave a comment!