给科研人员的家庭氩弧焊指南

我们在做高真空实验(比如质谱仪、冷原子)和一些惰性气体实验的时候,经常需要定制各种不锈钢高真空管件和各种箱体。贵得离谱不说,有时候我突然想实验一个新想法,真的很着急想在某个地方加一个法兰接口或者航空插头接口,如果临时去找焊工师傅的话又要预约再等几天,说不定2天过去好不容易调好的仪器又失锁或者温漂或者怎么了,心态就直接崩了。所以我决定自力更生,抄起焊枪自己搞。一方面是省钱又省时间,另一方面节省了和人家比划半天的功夫,有这功夫给人讲清楚我想要个什么结构我自己都焊出来了。

在我决定学习氩弧焊技术的时候,我以为这是一件很困难的事,所以在事先花了大概1天的功夫学习了一下相关的理论,甚至去拉来了一后备箱金属废品准备用来练习,但是在我上手之后,仅仅10分钟我就已经很熟练了。。。练习20分钟之后,我自己焊接了一个 10 吨级的小型液压压药装置,虽然有些边角处理得不是很好,但强度完全达到了要求。这之后又焊接了各种气密装置,效果都很好,甚至因为自己制作的用料更加扎实,各种泄漏率和散热情况还要更好一些。。。

实际上,我认为整个氩弧焊操作是比较容易掌握的,之所以各种技校和培训中心需要教学很长时间,是因为还需要讲解各种理论知识、参数选择和变通情况等等,而这些正是我们搞研究的人已经非常熟悉的。另外,因为我们不涉及高压力标准的压力容器焊接、焊缝后期热处理等比较硬核的内容,所以学起来很快也很正常。写这个指南的目的,就是给大家参考一下我的经验,在前期节省更多的时间。

花个一两天熟悉氩弧焊之后,平时也可以做很多有意思的东西,比如说和朋友一起搞院子烧烤的烤架、制作高真空微型扩散泵之类。我还顺便在家里焊接了一个惰性气氛手套箱,非常奢侈地配置了超大工作区和双过渡舱、四路气液接口和舱内循环再生装置,这样的手套箱市场上至少12万元起步,自己切割焊接组装实际上只需要几千元的材料费,虽然焊接这么大的工件比较费体力,但非常好玩,作为休闲 project 可以玩上好几天。

Continue reading “给科研人员的家庭氩弧焊指南”

线阵 CCD 的使用方法(以 TCD1304 为例)

本文首先简单介绍 CCD 原理,然后介绍如何驱动典型结构的线阵 CCD,最后介绍一个经典线阵 CCD 型号 TCD1304 配合 STM32 微控制器构建 USB CCD 模块的最简单例子。本文的目的是,使化学或者物理背景的中学或本科学生快速了解什么是 CCD,以及在几分钟的时间内大致学会如何在他们的研究项目中使用低速线阵 CCD。

(我不想学习,我只想马上整一个插电脑上就能用的便宜传感器 直接看文末 PS2)

Continue reading “线阵 CCD 的使用方法(以 TCD1304 为例)”

打包windows下软件的一些坑

前一阵子答应帮了个忙,开发一套仪器软件。写了一天之后写好了,交付源码,但是对方几乎没有懂计算机的人,所以要求我把所有东西再打包成一个 windows 上的可执行文件。这几天刚好回来,稍微有一点空闲时间,随手打了一下包。不过,因为很多年没有用windows,实在是很不熟悉,打包windows软件的时候遇到了很多奇怪的小坑,稍微总结一些,方便自己以后参考。

Continue reading “打包windows下软件的一些坑”

解决 VSCode format tex 文件时报错 Can’t locate YAML/Tiny.pm in @INC

这个错误的原因很简单,就是 YAML::Tiny 没安装,VSCode 安装 LaTeX Workshop 插件的时候不会自动安装,因此手动安装一下就可以解决。

cpan Unicode::GCString
cpan App::cpanminus
cpan YAML::Tiny
perl -MCPAN -e 'install "File::HomeDir"'

注意如果 perl 是 brew 安装的,每次 perl 升级后,会需要重新来一次。

根据 Homebrew 的说法,default non-brewed cpan modules are installed to the Cellar. If you wish
for your modules to persist across updates we recommend using `local::lib`.

为了避免麻烦,可以

PERL_MM_OPT="INSTALL_BASE=$HOME/perl5" cpan local::lib
echo 'eval "$(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib=$HOME/perl5)"' >> ~/.bash_profile

由于 CPAN 的系统过于老旧,用 CPAN 管理包非常麻烦且复杂,报错也经常难以搞清楚问题,推荐换成 cpanminus。

关于 Unicode::GCString 和 LineBreak 编译失败

另一个问题是,在 macOS 下,Unicode-LineBreak-2019.001 有可能无法成功编译。查看 log ,可以发现在编译 sombok / libsombok.a 后,链接时出现问题

cc  -mmacosx-version-min=10.13 -bundle -undefined dynamic_lookup -L/usr/local/lib -fstack-protector-strong  LineBreak.o  -o blib/arch/auto/Unicode/LineBreak/LineBreak.bundle sombok/libsombok.a

ld: warning: ignoring file sombok/libsombok.a, file was built for archive which is not the architecture being linked (x86_64): sombok/libsombok.a

这个问题早年做过 iOS 开发的人都很熟悉,选错 device 和 simulator 的话经常看见类似 file was built for x86_64 which is not the architecture being linked 的错误。。所以说明 sombok 的编译一定是在某处出了问题,排查一下即可发现是安装了 GNU binutils 中的 ar 与 macOS 的 BSD ar 冲突搞的鬼,暂时将其卸载即可。

SPI Pins Alternative Naming Conventions

I found this helpful when working with various module providers. But why the hell would anyone call SS ‘SYNC’?

SCLK : SCK, CLK.
MOSI : SIMO, SDO, DO, DOUT, SO, MTSR.
MISO : SOMI, SDI, DI, DIN, SI, MRST.
SS : nCS, CS, CSB, CSN, nSS, STE, SYNC, S̅S̅, SSEL, C̅S̅, CE, /SS, SS#

Note that some Chinese providers also name SS ‘SDA’, which is kind of confusing especially when there are also I2C interfaces nearby…

Recursively unzip all files in directory

To create subdirectory for each zip file and keep relative structure

with 7z:

7z x '*.zip' -o'*' -p'password'

with unzip:

find . -name "*.zip" | xargs -P 5 -I fileName sh -c 'unzip -o -d "$(dirname "fileName")/$(basename -s .zip "fileName")" "fileName"'

The following command keeps only relative structures of directories, unzipping all files directly

find . -name "*.zip" | xargs -P 5 -I fileName sh -c 'unzip -o -d "$(dirname "fileName")" "fileName"'

 

一些定向运动(orienteering)的基础方法和技巧

其实我还是很野的,只是大多数人没看出来。念高中的时候一个人住一套房子没人管,经常在半夜和中午的时候跑出去一个人吹风看书,但是城市里要找没人的地方很不容易,到处探索各种屋顶废墟荒地高楼,也就学了一堆没什么卵用的技术把敏捷点了起来,学了半年才知道这些有个名字叫城市定向…… 上大学之后比较忙,有时候心情好也会跑出去转转,不过活动范围很小,基本在北大、清华、圆明园、颐和园内和附近地区。野外定向我的经历比较少,不过总体来看定向越野在智力成分上要小于城市定向和无线电定向,基本上感觉除了需要参照地图优化路线,团队分完点之后和野外徒步是差不多的。

因为国内定向运动还非常小众,我自己搞的时候只能借鉴很多国外的资料,国内也找不到很有经验的人,所以决定结合经验自己写一些中文资料方便后来者,主要还是基础知识科普。

Continue reading “一些定向运动(orienteering)的基础方法和技巧”

HAProxy 作为 Shadowsocks Relay 的配置文件

backup for shadowsocks wiki on github

#/etc/haproxy/haproxy.cfg
global
        ulimit-n  51200

defaults
        log global
        mode    tcp
        option  dontlognull
        contimeout 1000
        clitimeout 150000
        srvtimeout 150000

frontend ss-in
        bind *:8388
        default_backend ss-out

backend ss-out
        server server1 PROXIED_SERVER:8388 maxconn 20480
haproxy -f /etc/haproxy/haproxy.cfg -D