Tools Setup!
工具是重要的!这点其实很多老师都不会讲述,在我院开设的大量本科基础课上,老师也不会专门讲述现代化工具的使用。 然而好用的用得顺手的工具可以使工作效率大大提升,不好用的工具虽然也可以用,但是会增加很多不必要的时间。
最简单的例子是很多非计院的同学学了一整个学期代码(C++/Java),都还在非常古老的IDE上写程序(e.g. Dev)。 这当然可以写,但如果有更强大的工具可以让你事半功倍,何乐而不为呢?
这篇文章列举/总结我目前所使用的一些工具作为参考,这些工具基本都使用了非常长的时间,亲测比较好用。
(基于这点motivation,所以我在2019-2020年度开了门ToolsSeminar的研讨课,详细内容可见这里。)
电脑与服务器
基本配置
- 手提电脑
- Intel XPS15
- Intel Core i7 CPU (8核)+ GTX 1050 (4G) + 8G内存 + 256G SSD + 1T移动硬盘
- Windows 10 + Ubuntu 18.04 LTS (WSL1)
- 这台电脑在2020年5月把CPU烧了,花了1900RMB换了个CPU,不过可以明显感觉到速度下降(摩尔定律惹的祸!)以及电池不耐用
- 不过这台电脑还是承担了最初学习深度学习的使命,毕竟GTX 1050算是当时可以跑DL的起步显卡了
- 联想小新2020
- Intel Core i7 CPU (10代,8核) + MX 350 (2G) + 16G内存 + 512G SSD
- Windows 10 + WSL2
- 作为主电脑拿去维修期间的替代品,虽然硬件配置与上台电脑相当,但价格却便宜了一大半(多亏了摩尔定律!)
- 强行升级了Windows系统,并且配置了WSL2系统,但似乎没有感受到太大区别(不确定CUDA在WSL2是否能用)
- Apple MacBook Pro 16’ (2019)
- Intel Core i7 CPU (6核) + AMD Radeon Pro 5300 M (4GB) + 16G内存 + 512G SSD
- MacOS Catalina
- 公司配的电脑,第一次使用MacOS,最开始觉得挺难用的,不过用了一段时间之后就真香了,特别是Apple的键盘和触摸屏,用惯了再换回原来的电脑完全不适应
- Apple MacBook Pro 13’ (M1, 2020)
- Apple M1 Chip + 16G内存 + 512G SSD
- MacOS Big Sur
- PhD学院配的电脑,总算换上M1了,虽然只有13’,但外接显示屏倒也没太大影响,不得不说续航实在太强了,拿到学校一整天基本不掉电。但尽管到2021年底,一些软件的适配依然做的不是很好,比如Java没有原装,Python包需要编译很久。
- Intel XPS15
- 显示屏
- 腾讯云服务器:自己租的用来搞事情,学生优惠非常便宜
- Intel Xeon CPU E5-26xx (单核) + 2G内存 + 50G云硬盘
- CentOS 7.2
- 续费了三次,第一次续费续太短了,后面两次都续了一年时间,主要用来搭个人网盘存一些临时文件,还是非常方便的
- 当年第一次接触云服务器,也为熟悉使用Linux操作系统奠定基础
- 实验室服务器:
- Intel Xeon CPU Gold 5118 (24核) + Titan V (2块) + 768G内存 + 11T硬盘
- Ubuntu 18.04 LTS
装机基础软件配置
之后考虑将这些东西打包成Docker上传上云,这样就不用每次换电脑都重新安装了。
- Microsoft Office(一般都会预装,新机要登陆激活)
- Google Chrome
- VS Code + Sublime Text
- Windows Subsystem for Linux (WSL)
- TeXLive 2020
- 可直接在清华镜像下载
- Windows安装双击
install-tl-windows.bat文件,可能需要几个小时安装时间
- WeChat + Tim
服务器
可能很多人会问自己租服务器用来干嘛。 其实是可以干非常多事情的,比如:
- jupyter notebook
这个无论什么服务器平台都会装,因为实在太好用,内置命令行和python环境,非常方便 - ftp
偶尔与服务器传输大型文件,同时可以搭建班级内部的提交作业平台
本地用来与服务器建立ssh连接与传输文件可用xmanager(xftp+xshell) - seafile
自建轻量级网盘,效果奇佳,从电脑往手机传数据再也不用数据线了! 梯(划掉)子- git
代码版本管理,学校小组项目会用到
日常工作
- Microsoft To Do
- 极其好用的代办事项工具
- 可以分类创建列表
- 支持加备注加提醒
- 多终端多平台
- Google Calendar
- 极其好用的日历工具,我所有课程表都创在上面了
- 可定期(如每周一或重复几次)提醒,这点太重要了!
- 多种颜色tag选择
- 可加备注加提醒
- 支持不同时区
- 多终端多平台
- Lark / 飞书
- 不得不说,尽管飞书2019年才发布,但是它是我用过最好用的协作软件,没有之一
- 消息、文件永久存储
- 新加入成员可查看过往消息(这两点就比腾讯系的产品好太多)
- 音视频会议(集成在同一软件中这很厉害)
- 日历(这也是公司协作很重要的功能,而且可以互相查看日历空闲时间)
- 云存储(既有私人存储空间,也有公共存储空间)
- 云文档
- 完全具备了Google Doc的所有特性,可多人协作,设置权限
- Markdown文档,这一点也是比腾讯系产品强得多,不仅支持Markdown语法,还有自动检测不同代码自动高亮,自动链接显示文档,添加协作者@人的功能
- 邮箱(可关联公司邮箱查看邮件)
疫情期间会议/协作软件(2020更新)
- Zoom
- 腾讯会议
- Slack
- 使用网页版就非常方便
- 实验室小组可以分多个channel,更方便工作期间讨论
- 有基本的Markdown语法显示
WSL配置
安装在Microsoft Store搜索Ubuntu即可,注意安装后打开前需要先在控制面板-程序和功能-启用或关闭Windows功能中将”适用于Linux的Windows子系统”打开并重启。详细安装教程可见Microsoft官网。其中也有说明如何升级至WSL2,需要先升级Windows版本至2004(Build 19041),然后才有办法启用。WSL1和WSL2的比较见此文。
# 参照清华镜像站换源
# https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo vim /etc/apt/sources.list
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
sudo apt-get update
sudo apt-get upgrade
## install gcc compiler
sudo apt install build-essential
gcc --version
## install pip
sudo apt install python3-pip
## python virtualenv
which python3
sudo apt install python3-virtualenv
virtualenv -p /home/.../python3 pydev
source pydev/bin/activate
python -V
deactivate
## conda
conda create -n pydev python=python3.6
conda info --envs
activate pydev
deactivate
# export environment
conda env export > environment.yml
conda env create -f environment.yml
# pip change source
# ~/.pip/pip.conf
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
# cuda change version
export CUDA_HOME="/usr/local/cuda-9.2"
export LD_LIBRARY_PATH="/usr/local/cuda-9.2/lib64:$LD_LIBRARY_PATH"
export PATH="/usr/local/cuda-9.2/bin:$PATH"
# graphics apps (open Xming in Windows first)
sudo apt-get install x11-apps
export DISPLAY=:0 # WSL1
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0 # WSL2, need to set `-ac` for X server
# https://github.com/microsoft/WSL/issues/4106
xeyes
# desktop
sudo apt-get install xfce4-terminal
sudo apt-get install xfce4
startxfce4
## accelerate git
sudo apt-get install proxychains
vim /etc/proxychains.conf
# change socks4 127.0.0.1 9095 to
socks5 127.0.0.1 1080
proxychains git clone ...
# Using sockets:
# ref: https://github.com/Microsoft/WSL/issues/2122
# insert the following commands into ~/.bashrc
alias socks='ALL_PROXY=socks5://127.0.0.1:1080/ \
http_proxy=http://127.0.0.1:1080/ \
https_proxy=http://127.0.0.1:1080/ \
HTTP_PROXY=http://127.0.0.1:1080/ \
HTTPS_PROXY=http://127.0.0.1:1080/'
socks git clone ...
# mount external storage
sudo mount -t drvfs G: /mnt/g
sudo unmount /mnt/g
# change gcc version
sudo update-alternatives --config gcc
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 50
# extract zip
tar -xzvf xxx.tar.gz
tar -xvf xxx.tar
xz -d xxx.tar.xz
unzip xxx.zip
# port
netstat -anp | grep port
# change shell
chsh -l
chsh -s $(which zsh)
可能出现的问题
dpkg: error processing package libc6:amd64 (--configure),参见此文[WSL1] [glibc] sleep: cannot read realtime clock: Invalid argument,这是WSL1的bug,需重新编译sleep
文本编辑器
目前使用主要使用两个文本编辑器,Sublime Text用来做一些轻量级的工作(因为打开速度实在是快),VS Code用来做一些大一点的项目。
Sublime Text 3
Sublime的重度用户,每天跟它打交道的时间估计超过10个小时。 打代码、做笔记、记事情、写报告、写论文全部都用它。
优点:
- 添加LaTeX(TexLive)和C++(MinGW)编译支持,彻底跟IDE说再见
配置方法可见这篇文章和这篇文章 - 多种语言的代码高亮,包括Verilog、MIPS等硬件类的小众语言都原生支持
- 多个光标多行编辑,这个是真的强,很少见有编辑器支持(个人成见)
- 自动补全,包括单词的和整段代码的补全,还有LaTeX的引用、参考文献等的搜索补全
- 替换功能强大,可以整词、大小写敏感、按段落,还支持正则表达式
- 可以安装各种package,进一步提升sublime的能力(比如做两个文本的区别高亮、字数统计等)
- 内置控制行,可以直接打Python代码
VS Code
不得不说,经过大半年的发展,微软爸爸的文本编辑器已经相当成熟了。进入到2020年,我也基本从Sublime Text转到VS Code的重度用户,因为用久会发现它比ST还更加人性化和好用。
优点:
- sublime有的基本都有
- Intellisense
- 跨文件定义搜索
- 自动类名方法名补全
- 大量插件支持
- Python / Jupyter notebook原生支持
- Markdown加强预览(用MathJax渲染LaTeX)
- LaTeX编译显示
- 自动跳转至定义位置(大项目必备)
- 跨文件/全局搜索
- SSH远端支持
- 这点对于远程服务器开发工作来说实在是太香了
- 以前在远端服务器跑代码总是要现在本地测试完,再通过ftp等方式传上服务器运行;但现在完全可以全流程操作,在VS Code里显示远端文件夹,打开代码文件更改,内置Terminal运行
- 跨平台支持(似乎网页版也要开放了)
- Git/Github集成
- 这对于常常要commit的开发者来说也是相当友好
- 基本上所有功能都被集成进来了
- 开源持续优化
- 现在基本是每月一更新,有什么硬伤都会被及时修复
使用插件
- Remote - SSH:远程连接服务器必备
- LaTeX Workshop:LaTeX集成编辑环境,也可预览pdf文件
- Markdown Preview:Markdown文本实时预览
- Paste Image:Markdown写作插入图片总是非常麻烦,这个插件完美解决了这个问题,可以像富文本编辑器一样直接通过Ctrl C/Ctrl V粘贴图片,同时可以自定义文件名及保存路径。如果是写blog,则需要按照类似下面的配置。
{
"pasteImage.path": "${projectRoot}/assets/images",
"pasteImage.basePath": "${projectRoot}",
"pasteImage.showFilePathConfirmInputBox": true,
"pasteImage.prefix": "/"
}
实用小语言
- Markdown
不用关心排版,层次化分明 - 正则表达式
其实掌握常用匹配指令就好了,一开始觉得很复杂,后来常常用编辑器的搜索功能就习惯了
笔记
笔记怎么做也是我这一年多来摸索的东西,现在基本上用下面两个工具啦。
LaTeX
极重度用户,已经到了写篇文科小报告都要拿LaTeX打的地步… 日常的话,数学和CS的笔记都会用LaTeX打,目前数学大致有一百多页的样子,CS也有几十页,算是给自己大学的学习留档吧。 因为使用太频繁,到年初才自己制作了份模板,又瞬间让自己生产力爆炸。
目前想到的一些不那么大众的点有
- TikZ-cd画流程图很爽
- BibTeX要学会,生成参考文献神器
- 表格可以不用自己打,Excel有宏可以支持
添加LaTeX模板和包可见下面链接,在对应位置创建文件夹并拷贝进去即可
- https://tex.stackexchange.com/questions/262242/in-what-directory-should-i-store-my-new-latex-template
MacOS配置
在macOS上不是安装TeXLive,而是安装MacTeX
- 配合VS Code的LaTeX Workshop一起用,需要将下面路径添加系统路径
PATH中/Library/TeX/texbin
- 找不到FontAwesome字体,见此Issue,下载安装字体即可
- MacTeX打中文
- https://tex.stackexchange.com/questions/185817/chinese-typing-on-mac
- https://www.latexstudio.net/archives/3611.html
- https://tex.stackexchange.com/questions/223893/how-do-i-find-out-what-chinese-fonts-are-installed-with-my-mactex-installation
sudo tlmgr install collection-latexrecommended
sudo tlmgr install collection-fontsrecommended
TiddlyWiki
这一个比较少人用,但是非常方便,也是满足了我写md、写LaTeX、贴代码的要求。 就是一个html页面,里面存自己的笔记,但是页面布局都已经帮你设置好了,直接可以写,还可以上传到服务器上让所有人都可以访问(但是几M大小基本加载不出来…)。 平时文科类的笔记会存在里面,还有部分有用的代码,其他的话…就当成网页收藏夹了…
注:有了博客之后,后面一个也基本不再使用了。
文献管理
- Zotero:学长推荐,必属精品(
优点:
- 分类归档论文,可以加Tag和Related
- 可以添加笔记
- 可以直接在网上下载pdf文件并解析文本生成条目
- 可以全仓库搜索文件
- 自动管理参考文献,且可以导出为BibLaTeX
- 支持不同格式的文件读入
- 好像还有云同步,但并没有用过
数据可视化
柱形图
这个也是写论文必备
- Matplotlib
Python包,功能强大,不过我主要用来画折线图、柱形图;语法还算简单,添加标签标注等等也不会太麻烦,标签可以直接输入LaTeX代码 - Mathematica(MMA)
上大学之前就只知道MMA画函数/3D/等高线图,其实用matplotlib画2D函数图会简单很多;而直到这一次建模也才直到MMA这么强大,还可以直接制作有数值的地图,完全是开外挂… - Plotly
在线网站,可以用Python调用API,功能很强大,但还未自己试过
流程图/模型图绘制
写论文或者建模就知道画图的苦,以前一直都羡慕人家的文章中能够画出那么漂亮的图片,因为以往都只知道函数图怎么画,但不知道有什么比较好用的流程图工具
- draw.io
在线画图,有网格,图形多,使用方便,画什么都容易,不足是对插图的处理不强,原生LaTeX在导出时常常出现问题 - Microsoft Visio
需要学校账户下载安装,而且还是Office 365版本 - ipe
下载解压即用,有网格,但自动吸附格点,使用极其麻烦(要记一堆快捷键,有种CAD的感觉),但对LaTeX的支持非常好 - TikZ-cd
刚才提到的LaTeX包,用&即可实现对齐,绘制简单的流程图非常方便 - Doxygen
doxygen -g生成初始的配置文件,然后可以修改下列常用项PROJECT_NAME = "Test" OUTPUT_DIRECTORY = doc/ RECURSIVE = YES UML_LOOK = YES HAVE_DOT = YES CALL_GRAPH = YES CALLER_GRAPH = YES SOURCE_BROWSER = YES GENERATE_TREEVIEW = ALLdoxygen Doxyfile即可生成HTML和TeX文档。
有限状态机
- TikZ里有automata的package
- http://madebyevan.com/fsm/
人工智能
当时入深度学习坑时选择TF,折腾了很久连它语法都没搞清楚,对初学者非常不友善,于是就此放弃
- Pytorch
原生Python语法,动态图,部署网络非常方便 - Visdom
Pytorch对应的可视化工具,界面还可以接受,但目前还不够完善 - Sklearn:机器学习
- numpy+pandas:数据挖掘
线性规划求解器
因为我目前研究的调度算法需要用整数线性规划(Integer Linear Programming, ILP)解出最优解,所以会用到一些求解器,如下所示。
性能剖析
- Linux perf
- Intel PCM
其他东西
- Github Desktop
- Github Page+Jekyll:就是这个博客啦
- Gnu Privacy Guard(GPG):Linux平台下文件加密系统,配合Mailvelope食用更加
- 原理是用对方的公钥加密,邮件发送给对方后,对方用自己的密钥解密
gpg --version查看是否有安装gpg --genkey生成密钥gpg -k --keyid-format long查看公(k)/私(K)钥gpg --send-keys [ID] --keyserver pgp.mit.edu上传公钥gpg --search-keys [ID]搜索密钥gpg --export -a "[user]" > [user].pub导出公钥gpg --export-secret-keys -a "[user]" > [user].priv导出私钥gpg --delete(-secret)-keys [Email]删除密钥gpg --import [key].pub导入公/私钥gpg --encrypt --armor -r [Email] [file]生成ASCII码加密文件gpg -d [file].asc解密文件
- 查看Github仓库大小,用API
- pdf2jpg
- Windows应用解除网络隔离
- Windows Outlook添加Google全家桶支持