­

我的项目开发系统

本期介绍我的项目开发系统的建立,见下。

我的项目开发系统建立的原则:All in One2/3 Backups

本期主推:JupyterLab——一个好用到爆炸的可视化交互开发神器

本期涉及的主要软件/工具:JupyterLab | GitHub | GitHub Desktop | Git | iTerm2 | MobaXterm | Terminal | Git Bash | CMD | Typora | uPic | PicGo | TinyPNG4Mac | 移动硬盘 | U盘 | Notion | 印象笔记 | iCloud | Google Drive | 百度网盘 | EndNote 20 | MarginNote 3 | Books | Notes | GoodNotes | Notability | Prodrafts | Google Chrome | Safari | Microsoft Edge | XMind

以下是一个以问题/需求为导向,以系统性为原则的工具分享。如果你也感兴趣这些软件/工具是怎么应用到我的项目开发系统的,那就请继续往下看吧!

项目开发环境

  • Windows 系统
  • MacOS 系统
  • Linux CentOS 系统

下面来说说我为什么要同时使用这3个操作系统呢?那可不就是因为我富有么哈哈哈!开个玩笑啦haa。同时使用这3个系统,是因为我自己的电脑是MacBook Pro,课题组给配的电脑是戴尔台式机,还有我们做数据分析必备的——实验室的Linux服务器。

不用说,Linux服务器肯定是用得最多的,毕竟一周7天都在搞科研嘛~~其次就是我的小苹果,办公、码字、敲代码、跑程序都不在话下,但它有一个“小小的“缺点,就是不能同时开很多个软件,我也是恨铁不成钢啊。。所以我在同时做多个任务时,就需要同时用到实验室的电脑。

但,这就有一个问题了,我想把几个设备就当一个设备来用。换句话说,就是让这三个设备协同工作,彼时的我,就像在一台电脑上工作。

那怎么让这三个设备协同工作呢?你想知道吗?那就跟着小编继续往下看吧~

JupyterLab

首先从JupyterLab说起。我为什么选择JupyterLab作为我的项目开发系统的核心软件呢?其实我之前基本不知道Jupyter,是前段时间外导在面试我的时候,给我推荐的这个软件,我当时还执着地认为VSCode大法无敌。事实上,我在很长一段时间都是把VSCode、GitHub、GitHub Desktop作为我的项目开发系统的核心工具的,可是自从尝试了JupyterLab,我便再也不想打开VSCode了。只想说,Jupyter真香!

为什么放弃了VSCode,转向JupyterLab呢?
首先,VSCode确实有很多吸引我的点:
  1. 高大上、颜值派。暗黑色的背景,布满五颜六色的代码,一眼看上去就逼格满满;并且有不同的代码主题可选,可以按照自己的审美DIY出一幅“大作”哈哈。
  2. 优秀的写作工具。在安装markdown相关插件后,你可以使用markdown语句写稿子,并且实时预览markdown文件。这不稀奇,稀奇的是它可以内装PicGo插件,你只需用快捷键粘贴一下你的图片,它就可以直接被上传到你的图床比如GitHub,并即时生成图片链接,你说神不神奇~
  3. 强大的插件系统。基本上是要啥有啥,我用的最多的是自动补全和代码高亮的插件。

但是,为什么颜狗的我,放弃了它呢?那还不是因为我变了(不是

在我这么久的亲身践行下,我很遗憾地,把VSCode这么强大的一个开发工具,用成了一个平平无奇的代码编辑器。。我对不起它🤦‍♀️

为什么我放弃了VSCode?
  1. 远程Linux服务器不稳定。VSCode是有本地终端和远程Linux服务器功能的,我最初的时候也用过几次,但遗憾的是,在远程Linux服务器的时候,经常连不上或者断掉,反复几次之后,我也就不勉强它了。
  2. Git平时用得不多。虽然它有Git功能,我也配置好了,但这个功能,我自始至终也就只用了一次。。
  3. 它的Markdown比不上Typora。每当我打开一个markdown文件时,它总会自动弹出预览窗口,瞬间占据我一半屏幕,每次都给我气个半死。。我其实想跟它说,我让你出现的时候你再出现OK?另外,它并不能实现Typora的“所见即所得”的“即时渲染”效果。事实上,我更想两步并作一步(带格式书写和格式转换变作一步)地使用markdown,就像直接在白纸上写字一样。
  4. 体系过于庞大,启动较慢,占用内存较大。插件系统强大,这是VSCode的优势,但也是它的劣势。庞大的插件系统,让它只在VSCode就能实现各种各样的功能,但在实现各种各样功能的同时,也让VSCode这个体系变得愈发庞大,拖慢了它的速度,也占用了更大的内存。
  5. 最后,我很遗憾地,把VSCode用成了一个平平无奇的代码编辑器,因此它不能帮我远程管理Linux服务器上的数据和文件。当我想要预览、查看或编辑Linux服务器上的PDF、CSV、JPG等文件时,我只能先从Linux服务器把文件下载到本地,再用本地对应的软件打开相应的文件,而我想要的是一个不用下载文件,可以直接在Linux服务器上预览和查看的可视化交互工具。

所以整体说来,VSCode对我来说,功能过剩,体系过于庞大,且不能真正实现“All in One”的功能。我需要的,是一个尽可能简洁、轻便、“All in One”可视化交互工具,而这,就是我选择JupyterLab的原因。

JupyterLab——一个好用到爆炸的可视化交互开发神器
安装
########## Linux服务器上安装JupyterLab
####### 方法一
##### 01 安装 Miniconda(此处省略详细步骤)
##### 02 安装 Python 3
### 安装 openssl
cd ./Softwares 
tar xzvf openssl-3.0.0-alpha17.tar.gz
cd openssl-3.0.0-alpha17
./config --prefix=/zs32/home/chxia/local/openssl shared
make
make install
# 查看是否安装成功
openssl version
### 安装 libressl
cd ./Softwares
tar xzvf libressl-3.3.3.tar.gz
cd libressl-3.3.3
./config
make
make install
### 安装 Python3
# 关于ssl出错解决办法的重要参考:
# //blog.csdn.net/jeryjeryjery/article/details/77880227
# //zhang-jc.github.io/2018/11/27/CentOS-6-8-%E5%AE%89%E8%A3%85-Python3-Could-not-build-the-ssl-module/
# //blog.csdn.net/Aidam_Bo/article/details/112919330
# 下载及解压
wget //www.python.org/ftp/python/3.9.5/Python-3.9.5
cd ./Softwares
tar -xzf Python-3.9.5.tgz
cd /zs32/home/chxia/Softwares/Python-3.9.5
# 编译及安装
./configure --prefix='/zs32/home/chxia/Softwares/Python-3.9.5' --with-ssl
make
make install
# 配置环境
vim ~/.bashrc
# 使用vim打开.bashrc文件,并添加python的环境
export PATH=/zs32/home/chxia/Softwares/Python-3.9.5:$PATH
export PATH=/zs32/home/chxia/Softwares/Python-3.9.5/bin:$PATH
# 使生效
source ~/.bashrc
# 查看python版本
python
##### 03 安装JupyterLab
# Installation with conda
conda install -c conda-forge jupyterlab
# Run JupyterLab
jupyter-lab

####### 方法二
##### 01 安装 Anaconda
# 如果安装 Anaconda,就已经安装了jupyter,可以直接使用。只是版本可能会旧些,需要升级。
# 下载:从官网 //www.anaconda.com/products/individual 下载 Anaconda3-2021.05-Linux-x86_64.sh
# 安装
cd ./Softwares
bash Anaconda3-2021.05-Linux-x86_64.sh
# 然后一路确认,等待安装完成即可
##### 02 升级 JupyterLab 到最新版本
jupyter lab --version
pip3 install --upgrade pip  # 先升级 pip
pip install -U jupyterlab

####### 配置 jupyter lab
##### 01 生成jupyter密码密文
### 进入 python,输入
from notebook.auth import passwd
passwd()
### 会提示输入密码,此时即设置密码
### 生成密码密文,将其记录保存备用
##### 02 生成配置文件
jupyter notebook --generate-config
##### 03 修改配置文件
vi ~/.jupyter/jupyter_notebook_config.py
### 在配置文件中添加下述内容:
c.LabApp.open_browser = False #  禁止打开浏览器
c.ServerApp.allow_remote_access = True
c.ServerApp.ip = '*' # 表示所有ip皆可访问
c.ServerApp.open_browser = False
c.ServerApp.password = 'sha1:XXX' # 前面生成的密码哈希值
c.ServerApp.port = 8889 # 浏览器连接jupyter需要的端口号,可随便指定一个端口,默认为8888
### 退出保存即可


########## Mac上安装JupyterLab
### 方法1: 使用 Anaconda 安装 JupyterLab
# 01 官网(//www.anaconda.com/products/individual)下载并本地安装 Anaconda
# 02 直接运行JupyterLab(Anaconda会自带jupyter notebook和jupyter lab): 打开终端,输入 jupyter lab,就会自动打开网页 //localhost:8888/lab 
# 03 然后就可以开始玩了~
### 方法2: 使用 Miniconda 安装 JupyterLab
# 01 官网(//docs.conda.io/en/latest/miniconda.html)下载并本地安装 Miniconda
# 02 使用 conda 安装 jupyter lab: 打开终端,输入: 
conda install -c conda-forge jupyterlab
# 02 使用 pip 安装 jupyter lab: 打开终端,输入: 
pip3 install --upgrade pip  # 先升级 pip
pip3 install jupyter jupyterlab
# 03 运行JupyterLab: 在终端输入 jupyter lab,就会自动打开网页 //localhost:8888/lab 
# 04 然后就可以开始遨游太空了~


########## Windows上安装JupyterLab(使用 Anaconda 安装 JupyterLab)
# 01 官网(//www.anaconda.com/products/individual)下载并本地安装 Anaconda
# 02 设定 jupyter lab 启动目录
# 打开 Anaconda Powershell Prompt 终端,输入 jupyter notebook --generate-config,生成 C:\Users\Dell18\.jupyter\jupyter_notebook_config.py 文件
# 打开上述文件,添加 c.NotebookApp.notebook_dir = 'D:\GitHubDesktop'
# 保存退出即可
# 03 运行JupyterLab(Anaconda会自带jupyter notebook和jupyter lab): 打开 Anaconda Powershell Prompt 终端,输入 jupyter lab,就会自动打开网页 //localhost:8888/lab 
# 04 然后就可以开心地玩耍啦!


########## Windows、Mac、Linux 后台运行 JupyterLab
# 每次打开网页版 jupyter lab 时都要打开相应的终端,并在相应的终端输入 jupyter lab 来重启,很不方便,所以我直接设置后台运行,这样也不用时刻开着终端窗口。
# 01 在 Windows Git Bash 本地终端 或 Mac iTerm2/Terminal 本地或远程终端 或 Windows MobaXterm 远程终端输入:
nohup jupyter lab > jupyterlab.log 2>&1 &
# & 让命令后台运行,并把标准输出写入jupyterlab.log中;nohup 表示no hang up ,就是不挂起,这个命令执行后即使终端退出,jupyter 也不会停止运行。
# 02 从本地浏览器打开网址 localhost:8888 即可后台运行 本地 jupyter lab
# Mac和Windows本地的 jupyter lab 在后台运行,只要上面一句命令即可。
# 03 但远程Linux服务器在本地浏览器后台运行,还需要一个步骤,即在本地终端(Mac iTerm2/Terminal 终端; Windows Win+R 输入 cmd,在 CMD 终端)输入:
ssh -N -f -L localhost:8891:localhost:8889 -p Linux服务器外网端口 用户名@Linux服务器外网IP地址
# 04 方便起见,将 ssh -N -f -L localhost:8891:localhost:8889 -p Linux服务器外网端口 用户名@Linux服务器外网IP地址 写入根目录下文件 j.sh
# Mac的根目录在 /Users/xia/j.sh
# Window的根目录在:
# 001 先找到 Git Bash 的根目录:
Win + R 输入 cmd 打开命令窗口,然后在命令行输入 where git ,就会显示 Git 的安装路径在 C:\Program Files\Git\cmd\git.exe
# 002 将文件 j.sh 拷贝并放在 Git Bash 的安装路径下(访问 Git 根目录需要使用管理员权限,所以需要手动操作)
# 05 以后只需在本地终端(Mac Terminal/iTerm2;Windows Git Bash)输入:
bash j.sh 
# 运行完 bash j.sh 命令即可关闭终端,不影响后续 jupyter lab 的运行
# 06 从本地浏览器打开网址 localhost:8891 即可后台运行 远程Linux服务器 jupyter lab


########## 杀掉后台程序://blog.csdn.net/qq_34385263/article/details/82080575
# 发现有错误时也不要紧,后台运行的jupyter lab也可以随时关掉~
# 只需在运行后台程序的终端运行下述命令:
ps -axu xia(用户名) | grep jupyter
kill -9 501(PID)
运行
##### Windows
# 我在Windows下暂不使用后台运行 本地jupyter lab,但也可以设置为后台运行,参考:
# //blog.csdn.net/weixin_44051608/article/details/109532922
# //www.jianshu.com/p/46c9a235793f

### Windows下 即时运行 本地 jupyter lab
# 01 在 Anaconda Powershell Prompt 终端输入:
jupyter lab
# 02 从本地浏览器打开网址 localhost:8888 即可即时运行 本地jupyter lab

### Windows下 后台运行 远程Linux服务器 jupyter lab
# 01 在 Windows MobaXterm 远程终端输入:
nohup jupyter lab > jupyterlab.log 2>&1 &
# 02 在 Windows Git Bash 终端输入:
bash j.sh 
# 03 从本地浏览器打开网址 localhost:8891 即可后台运行 远程Linux服务器 jupyter lab

##### Mac
### Mac 后台运行 本地 jupyter lab
# 01 在 Mac iTerm2/Terminal 终端输入:
nohup jupyter lab > jupyterlab.log 2>&1 &
# 02 从本地浏览器打开网址 localhost:8888 即可后台运行 本地jupyter lab

### Mac 后台运行 远程Linux服务器 jupyter lab
# 01 在 Mac iTerm2 远程终端输入:
nohup jupyter lab > jupyterlab.log 2>&1 &
# 02 在 Mac Terminal/iTerm2 本地终端输入:
bash j.sh 
# 03 从本地浏览器打开网址 localhost:8891 即可后台运行 远程Linux服务器 jupyter lab
日常运行
##### 不同操作系统下,日常运行 jupyter lab
### Mac 运行 本地 jupyter lab
# 直接从本地浏览器打开网址 localhost:8888 即可后台运行 本地jupyter lab

### Windows 运行 本地 jupyter lab
# 01 Anaconda Powershell Prompt 终端输入:jupyter lab
# 02 从本地浏览器打开网址 localhost:8888 即可即时运行 本地jupyter lab

### Mac 和 Windows 运行 远程Linux服务器 jupyter lab
# 01 在本地终端(Mac Terminal/iTerm2;Windows Git Bash)输入:
bash j.sh 
# 02 从本地浏览器打开网址 localhost:8891 即可后台运行 远程Linux服务器 jupyter lab

JupyterLab 是我项目开发系统的核心软件,它具有“All in One”的功能,我平时敲代码、运行代码/数据处理、查看PDF、CSV、JPG等格式的结果文件、上传和下载数据时,都是用它。简单来说,在配合 GitHub、GitHubDesktop、Typora、uPic/PicGo 使用时,它对于我来说,就是一个把基于Windows、MacOS、Linux CentOS 三个操作系统的三台服务器同时集成到一个工作空间的可视化交互开发工具。

Git/Git Bash

Git 是目前世界上最先进的分布式版本控制系统

我安装 Git 首先是因为我要用GitHub Desktop,而它安装和运行的前提是系统已经安装了Git;另一个原因,是为了提交更新我的个人博客网站 touchumind.com ,因为这个网站是基于GitHub Pages静态网站托管服务进行搭建的,换句话说,这个网站是通过GitHub Pages直接托管在 GitHub 的服务器上的。

不管是基于 GitHub Desktop 将本地代码提交更新到 GitHub,还是个人博客网站内容的提交更新,都需要用到 Git,原因就是 GitHub 使用的版本控制系统是 Git。

Git Bash 是 Git 自带的,它在你安装 Git 的时候也会被同时安装。可以把 Git Bash 当作类似于 Mac Terminal 终端的 Windows 系统的终端。我用 Git Bash 终端主要做两件事,第一是执行 Git 命令,第二是在Windows下使用 linux 命令,比如 pwd, ls, ls -l, vi, vim 等。

GitHub/GitHub Desktop

下面就来说说多次提到的 GitHub 和 GitHub Desktop 吧。

简言之,GitHub 和 GitHub Desktop 是我的代码管理系统临时笔记系统个人博客网站托管平台和备份系统个人博客的免费图床

我的代码管理系统
代码编辑器

本地JupyterLab

代码备份平台
  1. 本地 GitHub Desktop 文件夹
  2. GitHub 网站
代码提交更新工具

GitHub Desktop

我的临时笔记系统

临时笔记包括临时会议记录、临时提醒事项、临时思路和想法、临时素材等各种临时文字。

我的临时笔记空间

/Users/xia/Documents/GitHub/Notebook

我的临时笔记备份
  1. 本地 /Users/xia/Documents/GitHub/Notebook

  2. GitHub:将 Mac 本地临时笔记空间文件夹 /Users/xia/Documents/GitHub/Notebook 通过 GitHub Desktop 及时备份到 GitHub

个人博客网站托管平台和备份系统
个人博客网站托管平台

//github.com/CuihuaXia/cuihuaxia.github.io

个人博客网站备份系统

将 Mac 本地的个人博客网站源文件夹 /Users/xia/Documents/MyBlog 通过 GitHub Desktop 定期备份到 GitHub

个人博客的免费图床

图床是专门用来存放图片(包括动图),同时允许你把图片对外连接的网上空间。

图床是我们在发布带图片在线博客时所必须的存储空间和流量平台。

在 GitHub 网站,新建一个公共仓库,名为 images,然后获取个人 token 并保存(这个 token 只会显示一次所以需要及时保存),后面在设置图床客户端的时候需要这个token。

此时,位于 GitHub 上的 images 公共仓库,就是我所说的图床。

iTerm2/Terminal/CMD/MobaXterm

Terminal

Mac 本地终端

CMD

Windows 本地命令行工具

iTerm2

Mac 本地终端运行和远程连接 Linux 服务器工具

MobaXterm

Windows 远程连接 Linux 服务器工具

Typora——最好的Markdown工具

《论语》有言:“吾日三省吾身”。我们很多人可能做不到“日三省”,但“周一省””月一省“甚至“年一省”还是没有太大难度的。

在一段时间的工作后,我们确实很有必要,回头对前一段时间的工作和学习,甚至是生活,进行一个系统的总结和复盘,让我们更加清楚自己这段时间收获了什么、收获了多少,有哪些进步,又有哪些不足,为下一阶段的工作和生活做出阶段目标指导和方向确定/调整。

那么,Typora 就作为了我的正式码字——各种严肃的科研、学习、工作总结复盘工具。

Markdown工具如今已经层出不穷,但我认为Typora之所以能“独领风骚”“一骑绝尘”,就在于它的极简主义和“所见即所得”的“即时渲染”效果。当然它还有很多其他优秀“才艺”的加持,比如插入公式、插入图片的方式等。

我为什么选择 Typora 作为我的码字工具呢?最主要是因为它能通过图床客户端 uPic 等,自动上传图片到图床,同时将本地的图片路径转换成在线 URL。我不需要做任何特殊操作,不管来自哪里的图片,只要它在剪贴板上,我只需要执行正常的 Command + V 操作,就能一步实现粘贴图片、上传图片、转换 URL。另外,Typora 轻量级、简洁大方、所见即所得、即时渲染的特点,也是我选择它的原因。

我的码字工具

Typora

我的码字空间

/Users/xia/Documents/GitHub/Drafts

即在 GitHub 网站建立一个私人仓库 Drafts,然后通过本地 GitHub Desktop 克隆这个仓库到本地路径 /Users/xia/Documents/GitHub/Drafts

我的码字文章备份
  1. 本地 /Users/xia/Documents/GitHub/Drafts

  2. GitHub:将 Mac 本地码字空间文件夹 /Users/xia/Documents/GitHub/Drafts 通过 GitHub Desktop 及时备份到 GitHub

个人博客网站文章发布/更新
# 01 使用本地 JupyterLab 打开 Mac 本地终端
# 02 将本地 /Users/xia/Documents/GitHub/Drafts 中写好的文章(该markdown文件),拷贝到 Documents/MyBlog/source/_posts/ 文件夹下
cp Documents/GitHub/Drafts/我的项目开发系统.md Documents/MyBlog/source/_posts/
# 03 vim 打开该文件
vim Documents/MyBlog/source/_posts/我的项目开发系统.md
# 04 添加如下开头,然后退出保存
---
title: 我的项目开发系统(文章名称)
mathjax: false
show_copyright: true
date: 
tags: 科研工具
categories: 实用工具
description:
img:
top:
cover:
coverImg:
password:
toc:
summary:
---

> 更新于 XXXX-XX-XX XX:XX
# 05 在终端执行:
cd /Users/xia/Documents/MyBlog
hexo cl && hexo g && hexo d

uPic——一个简洁的Mac图床客户端

uPic 是我为了搭配 Mac Typora 使用而安装的(Windows Typora 使用的是 PicGo),是为了配合实现 Typora 的上传图片功能。

在 Typora 设置里选择 Image,然后修改第一项为“Upload image”,然后只勾选前两个复选框,最后“Image Uploader”那里选择”uPic“。

下载安装好 uPic 之后,在 uPic 设置里添加 GitHub 为图床,然后将用户名、仓库名、分支名以及Token填好并保存。

分别在 Typora 和 uPic 点击验证或测试按钮,如果图片上传测试成功,会有成功提示。

TinyPNG4Mac

为了减少博客文章的负载,在上传图片之前,通常需要在保证图片质量的前提下把图片文件压缩为更小。而 TinyPNG4Mac 就是同时满足这两个条件的轻量级图片压缩软件。

移动硬盘

用来做项目重要数据(比如原始数据)的第3个备份。项目的非重要数据只做本地和Linux服务器两个位置的备份。

U盘

用来临时存放要临时使用(如打印、不同设备之间拷贝等)的文件。

项目进度管理系统

Notion

轻量级文件备份系统

1. 印象笔记
2. iCloud
3. Google Drive
4. 百度网盘

文献/PDF文件管理系统

1. EndNote 20
2. MarginNote 3

电子书管理系统

Apple Books

日常笔记管理系统

1. 印象笔记
2. Apple Notes
3. Apple GoodNotes
4. Apple Notability
5. Apple Prodrafts

浏览器系统

1. Google Chrome
2. Safari
3. Microsoft Edge

思路整理系统

1. XMind
2. Prodrafts

目前已淘汰软件

FileZilla,WinSCP,VSCode,Transmit

总结

最后用一张思维导图总结我平时开发课题项目的流程:

image-20210621222906080

本文章首发于个人微信公众号 TouchUMind 和个人哔哩哔哩账号 iTouchUMind,备份(终稿)于个人博客网站 touchumind.com,欢迎关注和支持!