Li Yingping's Studio.

一个菜鸟程序员打磨工具的日常

字数统计: 6.9k阅读时长: 28 min
2018/10/25

操作系统折腾篇


Manjaro


What?

  • Manjaro是什么?我觉得官网介绍干净利落:Manjaro是一款基于Arch Linux、对用户友好、全球排名第1的Linux发行版。

  • 官网的这句话有三个定语:基于Arch、用户友好、全球第一。

    • 基于Arch:Manjaro是一款在Arch Linux基础上打造的Linux发行版,继承了Arch轻快、可滚动更新、软件包多等诸多优点,又改掉了Arch新手不友好、软件包过于激进等缺点。

    • 用户友好:Manjaro Linux的一句Slogan是乐于简单,这是一款开箱即用而且可以用得很舒服的Linux发行版,不需要Arch复杂的配置却可以享受Arch的强大,普通用户的操作,高级用户的体验。Python之后,Manjaro是又一个“人生苦短”的呐喊。

    • 世界第一:DistroWatch排行榜第一的Linux发行版。广大群众的心声不会骗人。

  • 大扎好,我系渣家菲,Manjaro,介系里没油挽过的船新版本,点一下,挽一年,软件不花一分钱,挤续体验三番钟,里就会干我一样,爱上节款系统,系兄弟舅来干我。

Why?

  • 先从Arch Linux说起,众所周知,在Linux的圈子里Arch是一款异常强大的发行版,他有三个无与伦比的优势:滚动更新、丰富的AUR、活跃的社区和全面的wiki。然后再强调一下,虽然你可能不信,但是AUR的软件包之多是Debian系和Red Hat系的Linux发行版望尘莫及的。(嗯,其实就是说给Ubuntu用户听的。)然后,更加众所周知的是,Arch是一款对新手极其不友好的系统,大概是一个仅仅安装就需要在tty敲下20多行命令的系统,对于一个新手来说,可能比退出vim都难。而安装之后,还有更复杂的配置等待着你。Manjaro的诞生就是为了让用户省心地享受Arch。

  • Manjaro采用了图形化安装程序,使安装过程非常轻松、人性化,同时也把安装Arch Linux后的大量繁琐工作,包括安装配置显卡驱动、AUR、X服务、桌面环境、中文输入法、Flash插件、音频解码器、显示管理器等全都做到位了,为新手解决了大麻烦,为高级用户节省了大量时间。而且,Manjaro没有Arch那么激进,系统会更加稳定。

  • Manjaro的软件库极其庞大,微信QQ网易云、Jetbrains的IDE、TF,一条命令就结束了,除了省心还是省心!

  • 总而言之,如果你想要一个功能强大、软件包多、外观漂亮、使用优雅还不折腾的Linux发行版,选择Manjaro就对了!

Manjaro双系统的安装

  1. 首先,需要准备一个Manjaro的镜像。可以选择去Manjaro的官网下载或者清华镜像源下载一份Manjaro的iso镜像。Manjaro的官网下载地址是https://www.manjaro.cn/153,Manjaro官方提供三种桌面环境:Xfce、KDE和GNOME,社区还提供了基于其他桌面环境的版本,各个版本的特点官网上都有介绍,可以选择自己喜欢的版本。笔者选择的是KDE版本。

  2. 下一步,要在磁盘管理中利用压缩卷的方式为新系统留出一个分区,磁盘类型为GPT。准备一个U盘,通过镜像烧写工具将下载好的iso镜像烧入U盘,烧录类型选择DD的方式。这里的启动盘制作工具我推荐Rufus,传送门:https://rufus.ie/zh_CN.html

  3. 启动笔记本,进入BIOS设置,确保可以通过UEFI启动USB设备。尔后,通过U盘启动,开始Manjaro的安装。需要注意的是,Driver Boot选项最好选择non-free,这样的话Manjaro会帮你配置好很多驱动。之后的操作就很简单,下一步到底就OK~

Manjaro的个性化定制

Manjaro的基本上手配置
  1. 更换清华镜像源并添加ArchLinuxCN库。

    1
    2
    3
    4
    5
    6
    7
    sudo pacman-mirrors -i -c China -m rank
    # 添加源
    echo -e "\n[archlinuxcn]\nSigLevel = TrustAll\nServer = https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/\$arch\n\n[antergos]\nSigLevel = TrustAll\nServer = https://mirrors.tuna.tsinghua.edu.cn/antergos/\$repo/\$arch\n"|sudo tee -a /etc/pacman.conf
    # 更新缓存
    sudo pacman -Syyu
    # 导入GPG Key
    sudo pacman -S --noconfirm archlinuxcn-keyring antergos-keyring
  2. 安装一些必要的工具。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    # 中文输入法
    sudo pacman -S fcitx-im kcm-fcitx fcitx-sogoupinyin
    sudo echo -e "export GTK_IM_MODULE=fcitx\nexport QT_IM_MODULE=fcitx\nexport XMODIFIERS=@im=fcitx">>~/.xprofile

    # 基本工具
    sudo pacman -S vim git
    git config --global user.name "github-username"
    git config --global user.email "github-email"

    # AUR仓库包管理工具yaourt和yay
    sudo pacman -S yaourt yay

    # 安装文泉驿中文字体
    sudo pacman -S --noconfirm wqy-microhei && fc-cache -fv

    # 其他文泉驿家族字体
    # sudo pacman -S wqy-microhei-lite
    # sudo pacman -S wqy-bitmapfont
    # sudo pacman -S wqy-zenhei

    # 其他可选字体
    # sudo pacman -S adobe-source-han-sans-cn-fonts
    # sudo pacman -S adobe-source-han-serif-cn-fonts
    # sudo pacman -S noto-fonts-cjk

    sudo pacman -S neofetch
  3. 通过一条neofetch愉快的结束游戏,截图发朋友圈。

更多的工具栈
  • Manjaro基于Arch Linux,有着丰富的软件库,极大地方便了开发者,通过yay <Package Name>的方式即可轻易安装。笔者常用的工具如下:
    • Shell:zsh
    • 文本编辑器:neovim
    • 终端复用:tmux
    • 模糊搜索:fzf
    • 进程管理(top的代替品):htop
    • 指令速查(man的代替品):tldr
    • 代理工具:shadowsocks-qt5
    • 垃圾清理工具:bleachbit-git
    • 浏览器:google-chrome
    • 截图工具:hotshots-git
    • Markdown工具链:typorapandocmarp
    • 磁盘分析:filelight
    • Tim:deepin-wine-tim
    • 网易云音乐:netease-cloud-music
    • 墨刀原型设计:mockingbot
    • 用来装X的终端模拟器:cool-retro-term-gitedex-ui-git
    • 文档管理:zeal
    • 数据库:mycli
    • JetBrains IDE

开发工具配置篇


PyCharm

插件(Plugins)

  • PASS

配置(Config)

修改注释风格
  • Sphinx可以为工程自动化生成文档,Sphinx会从代码的注释中提取出内容以生成文档,类似于先前笔者使用Doxygen为C工程生成文档。Sphinx支持多种注释风格,笔者喜欢NumPy风格的注释,而PyCharm默认的Docstring格式并不是NumPy,这一风格的切换可以在Tools -> Python Integrated Tools选项卡中的Docstring Format下拉菜单中切换。
Smart Keys
  • 笔者使用Visual Studio Code时发现VSCode有一个很便利的功能,当选中一段内容时,按下双引号、单引号和各类括号时,不会替换该文本,而是在文本的外围附加上引号和括号。而JetBrains系列的IDE默认并没有开启这个功能。这一功能可以在设置中打开,具体的位置是Editor -> General -> SmartKeys其可选项之中有Surround a selection with a quote or brace一项,勾选即可开启这一功能。此外,该选项卡之中还有Jump outside the closing bracket or quote with Tab一项,开启此一项可以在输入完引号和括号之后,使用Tab键快速跳到引号和括号之外。
建立文件头模板
  • 新建一个文件常有一些制式的内容需要书写,譬如,shebang和文件头注释,在Python里还常常要写采用UTF-8编码的声明,这些制式的内容可以通过文件模板方便的完成。在设置中的Editor -> File and Code Templates选项卡下选择要维护的模板语言类型,添加上自定义的模板,在使用New的方式创建该类型文件时,即会采用此模板了,这一功能可以极大地方便制式内容的自动化完成。下面是笔者使用的Python Script模板:
    1
    2
    3
    4
    5
    6
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time : ${DATE} ${TIME}
    # @Author : Li Yingping
    # @File : ${NAME}.py
    # @Software: ${PRODUCT_NAME}
使用鼠标滚轮调整字体大小
  • JetBrains系列IDE默认未开启使用鼠标滚轮调整字体大小的功能,这一功能可以在Editor -> General选项卡下的Mouse一节中勾选Change font size(Zoom) with Ctrl+Mouse Wheel选项,尔后,便可用Ctrl键和鼠标滚轮来代码调整编辑区的字体大小了。

开发工具打磨篇


Markdown Workflow

编辑器:Typora

PASS

渲染工具:Pandoc

PASS

幻灯片:Marp

PASS

笔记:Boostnote

PASS

图床工具:PicGo

PASS

终端工具:MobaXterm

MobaXterm这个软件很低调,一直没有发现这个软件,直到有一天它出现在了知乎的一个角落,下载试用一下,发现它是一款令人痴迷的终端神器,很全能,很Geek。它支持SSH、VNC、Serial、FTP、X11、RDP、MOSH等等协议的连接,于是,我的电脑上原有的XShell、XFTP、VNC Viewer都退役了。同时,它又是一个X服务器和Unix工具箱,它支持以X服务器为基础的X.org,可以轻松地模拟GNU Unix的指令,甚至可以集成一些插件之后 Emacs、Gcc, G++ and development tools、MPlayer、Perl、Curl等程序,拥有极强的拓展性。同时,它还有很舒适的用户界面和诸多个性化的配置选项,用户体验极佳。

MobaXterm 官网:https://mobaxterm.mobatek.net/
MobaXterm 下载链接:https://mobaxterm.mobatek.net/download.html

代码规模统计工具:cloc

cloc是一款使用Perl实现的开源的代码行数统计工具,实际上cloc这四个字母本身就是count line of code四个单词的首字母。这款工具可以对某一录下的代码、某个单文件的代码、某个压缩文件中的代码、某个Git仓库或其中某一次提交的代码进行统计,给出其中的有效行数、空白行数、注释行数各有多少。测试了一下,发现这个工具似乎会对重复的代码进行忽略,非常优秀!

cloc这款工具的使用非常简单,在命令行下指定要统计的目标即可得到一份统计信息的报告。使用cloc --help命令可以查看到cloc详细的使用方式(非常强大的~)。下面以cloc工具在GitHub上的Repo为例展示一下cloc的使用效果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
$ git clone https://github.com/AlDanial/cloc
Cloning into 'cloc'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 2834 (delta 0), reused 1 (delta 0), pack-reused 2831
Receiving objects: 100% (2834/2834), 2.28 MiB | 167.00 KiB/s, done.
Resolving deltas: 100% (1572/1572), done.

$ cloc cloc
406 text files.
393 unique files.
155 files ignored.

http://cloc.sourceforge.net v 1.64 T=3.78 s (82.6 files/s, 10423.6 lines/s)
---------------------------------------------------------------------------------------
Language files blank comment code
---------------------------------------------------------------------------------------
Perl 6 1490 2470 22633
YAML 196 7 196 4426
C/C++ Header 2 191 780 618
C++ 4 132 173 570
TypeScript 4 51 34 470
C 6 107 61 348
Windows Message File 2 89 9 348
Assembly 3 40 87 257
Racket 1 32 159 247
make 3 76 121 218
Windows Resource File 1 42 45 218
Visual Basic 3 36 42 197
Prolog 2 49 8 129
ECPP 1 26 34 116
Ruby 1 11 30 111
Bourne Again Shell 1 11 19 92
MXML 1 23 5 74
Haml 1 5 16 66
Swift 1 23 13 65
Verilog-SystemVerilog 1 4 20 62
PHP 3 21 13 53
MATLAB 2 0 1 50
C# 4 12 7 46
JCL 1 0 18 44
SASS 1 14 0 43
Go 3 14 41 40
Haskell 4 23 26 35
RobotFramework 1 9 5 35
COBOL 3 5 8 35
Mustache 2 5 7 31
Puppet 1 2 2 27
Objective C 1 11 11 25
Scala 1 8 8 25
Lisp 1 5 26 24
JSON 1 0 0 22
Mercury 1 12 0 19
XSLT 2 0 4 19
Pascal 4 4 15 18
Windows Module Definition 1 1 1 18
Elixir 1 3 1 16
Pig Latin 1 19 40 15
IDL 2 25 7 14
F# 1 3 6 14
Groovy 1 0 7 12
Python 4 7 14 11
Kotlin 1 0 3 9
Java 1 6 16 8
Julia 1 3 8 7
Fortran 77 2 1 8 7
Lua 1 3 4 7
Fortran 90 2 1 5 7
ASP.Net 1 0 0 6
PL/I 1 0 7 5
Razor 1 0 4 4
Javascript 4 0 0 4
XML 1 0 2 3
Tcl/Tk 1 1 2 3
ColdFusion 1 1 2 2
DOS Batch 1 1 2 2
Bourne Shell 2 0 0 2
XQuery 1 0 1 1
xBase 1 0 9 1
MUMPS 1 0 2 1
Focus 1 1 2 1
---------------------------------------------------------------------------------------
SUM: 312 2666 4667 32036
---------------------------------------------------------------------------------------

GitHub Repo:https://github.com/AlDanial/cloc
下载地址:https://sourceforge.net/projects/cloc/

Sublime Text 3

Sublime Text 3是一款简朴、轻量的编辑器。Sublime Text 3具有优良的辅助功能和丰富的拓展插件,在前端开发中一直备受推荐。Sublime的官方版本需要$80来激活,这对于我来说还是显得可怕,于是惯例寻找激活码,下面这个亲测有效:

1
2
3
4
5
6
7
8
9
10
11
12
13
----- BEGIN LICENSE -----
sgbteam
Single User License
EA7E-1153259
8891CBB9 F1513E4F 1A3405C1 A865D53F
115F202E 7B91AB2D 0D2A40ED 352B269B
76E84F0B CD69BFC7 59F2DFEF E267328F
215652A3 E88F9D8F 4C38E3BA 5B2DAAE4
969624E7 DC9CD4D5 717FB40C 1B9738CF
20B3C4F1 E917B5B3 87C38D9C ACCE7DD8
5F7EF854 86B9743C FADC04AA FB0DA5C0
F913BE58 42FEA319 F954EFDD AE881E0B
------ END LICENSE ------

Sublime的插件支持两种安装方法,可以直接下载插件包解压缩到Packages目录下,也可以通过Sublime的Package Control组件管理安装。我的选择是使用Package Control来安装插件,完成配置后,将Packages压缩备份,这样以后就可以方便的直接把自己的备份Down下来而不用重复这样的操作。Package Control组件的安装可以通过Crtl + ` 的快捷键调出Console,使用下面的代码安装。完成安装后,重启Sublime,使用Ctrl + Shift + P调出命令面板,输入Install Package即可看到Sublime丰富的插件列表。
1
import urllib.request,os; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); open(os.path.join(ipp, pf), 'wb').write(urllib.request.urlopen( 'http://sublime.wbond.net/' + pf.replace(' ','%20')).read())

下面是我安装的一些插件:

插件名 插件的功能
WakaTime 所有开发工具的标配,用来统一管理和统计编程时间(用来发朋友圈~)
Emmet 其前身是Zen Coding,这款插件提供了极其强大的HTML和CSS的缩写输入方式。
SublimeLinter 用来强行规范自己的代码,这个是主程序,需要什么语言的Linter需要自己装。
TableEditor 提供Markdown表格的Tab快速补全支持
ColorHighlight 将所有的颜色十六进制值或颜色名称用它对应的颜色高亮。
SublimeCodeIntel 提供额外的多种语言及框架的联想和自动补全。
AllAutoComplete 拓展了Sublime自身的AutoComplete,支持在所有文件里匹配关键词。
Alignment 自动对齐代码
BoxyTheme & MaterialTheme 额外的多种主题风格(JetBrains的风格用习惯了~)
ChineseLocalizations 英语水平极差的我自我欺骗掩耳盗铃放弃治疗的手段之一

Sublime Text 3 官网:http://www.sublimetext.com/
Sublime Text 3 下载链接:http://www.sublimetext.com/3

Linux下的文本三剑客:zsh、tmux与vim

  1. 安装zshtmuxvim

    1
    2
    sudo apt install fonts-powerline curl
    sudo apt install zsh tmux vim
  2. 安装oh-my-zshantigen

    1
    2
    sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
    curl -L git.io/antigen > antigen.zsh
  3. 修改.zshrc文件如下,并使用source .zshrc使其生效

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    source ~/antigen.zsh

    # Load the oh-my-zsh's library.
    antigen use oh-my-zsh

    # Bundles from the default repo (robbyrussell's oh-my-zsh).
    antigen bundle git
    antigen bundle extract
    antigen bundle pip
    antigen bundle lein
    antigen bundle command-not-found

    # Syntax highlighting bundle.
    antigen bundle zsh-users/zsh-syntax-highlighting
    antigen bundle zsh-users/zsh-autosuggestions

    # Load the theme.
    antigen theme denysdovhan/spaceship-prompt

    # PATH
    export WORKON_HOME=$HOME/.virtualenvs
    export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
    source /usr/local/bin/virtualenvwrapper.sh
    export PATH=$PATH:/usr/local/cuda-10.0/bin
    export LD_LIBRARY_PATH=/usr/local/cuda-10.0/bin/lib64:$LD_LIBRARY_PATH
    export TF_ENABLE_AUTO_MIXED_PRECISION=1
    [[ $TMUX = "" ]] && export TERM="xterm-256color"

    # Tell Antigen that you're done.
    antigen apply
  4. 安装oh-my-tmux

    1
    2
    3
    4
    cd
    git clone https://github.com/gpakosz/.tmux.git
    ln -s -f .tmux/.tmux.conf
    cp .tmux/.tmux.conf.local .
  5. 安装spacevim

    1
    curl -sLf https://spacevim.org/install.sh | bash

Linux下的挂机工具:Screen

Linux系统的进程调度是一个树状结构,当使用SSH连接Linux服务器时,启动的Shell是SSH进程的子进程,如果出现网络问题或其他问题发生了SSH连接终端,Linux会终止掉所有的子进程。对于一些长时间的任务,譬如编译、模型训练、服务部署等,因为SSH终端被停止掉会对工作任务产生很大的影响,因此,我们需要一种方式来实现Linux系统中的任务挂机,上文提到的tmux是一款优秀的工具,另一种选择是Screen。

Screen的官网介绍,Screen是一个全屏窗口管理器,它在多个进程(通常是交互式shell)之间多路复用一个物理终端。每个虚拟终端提供DEC VT100终端的功能,此外,还提供来自ISO 6429 (ECMA 48, ANSI X3.64)和ISO 2022标准的几个控制功能(例如,插入/删除行和对多个字符集的支持)。每个虚拟终端都有一个回滚历史缓冲区和一个允许用户在窗口之间移动文本区域的复制-粘贴机制。

Screen 官网:https://www.gnu.org/software/screen/
Screen & tmux Cheat-sheet:http://www.dayid.org/comp/tm.html

Python自动生成CLI工具:Fire

Fire是Google开发并持续维护的一款Python工具包,它可以从Python的对象中自动化地导出命令行接口,相比于argparse和click等工具,Fire更加便捷易用。关于Fire的功用,Fire的官方描述如下:

  • Python Fire is a simple way to create a CLI in Python.

  • Python Fire is a helpful tool for developing and debugging Python code.

  • Python Fire helps with exploring existing code or turning other people’s code into a CLI.

  • Python Fire makes transitioning between Bash and Python easier.

  • Python Fire makes using a Python REPL easier by setting up the REPL with the modules and variables you’ll need already imported and created.

Fire可以通过Python的pip包管理器安装,并通过fire.Fire()接受Python对象,生成CLI。

Github Repo:https://github.com/google/python-fire
Fire Guide:https://github.com/google/python-fire/blob/master/docs/guide.md

自动化文档生成工具:Doxygen

从一个段子说起。程序员最讨厌的四件事情:写注释、写文档、别人的代码没有注释、别人的代码没有文档。显然,代码的注释和文档对于理解代码来说是非常有必要的,但是如何在哪里写注释、写多少注释、如何写好注释是一个很令人困惑的问题,这之后文档的编写和维护又是个令人头痛的大问题。Doxygen这个工具就是用来解决工程文档的问题的。

Doxygen是一款GPL协议下的开源跨平台文档系统。Doxygen检测代码中遵循其风格的注释,根据这些注释为工程自动生成文档。Doxygen可以支持C、C++、Java、Python、PHP等多种语言,可以输出HTML、PDF、LaTeX等格式的文档。

Doxygen官网:http://www.doxygen.nl/index.html

Doxygen环境的准备

  • 使用Doxygen生成文档一般使用Doxygen+Graphviz+htmlhelp的工作流。Graphviz出身不凡,他是贝尔实验室开发的一个开源绘图工具包,可以将DOT语言的文本渲染成布局效果良好的图片。HTML Help提供导出chm格式的帮助文件的支持。

  • 为了方便在编写代码的过程中更方便地添加Doxygen风格的注释,可以在惯用的IDE或Editor中添加Doxygen支持的插件,笔者使用的CLion自2016.2版本始支持Doxygen风格的注释,无需额外配置。在此,强行为JetBrains暴力打个广告。

Doxygen下载地址:http://www.doxygen.nl/download.html
Graphviz下载地址:https://graphviz.gitlab.io/download/
HTML Help Workshop下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=21138

Doxygen代码注释规范

文件头部的注释
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**********************************************
* COPYRIGHT NOTICE *
* Copyright (C) 2018 Bye-lemon *
* All right reserved. *
* @file [文件名] *
* @brief [简述] *
* [详细描述] *
* *
* @author Bye-lemon *
* @data [创建日期] *
* @version [文件版本号] *
* @license [开源协议] *
* *
***********************************************/
变量和宏定义的注释
1
2
3
4
/** [描述] */
int foo;

char bar; /**< [描述] */
结构体、联合体、枚举定义的注释
1
2
3
4
5
6
7
8
9
/**
* @brief [简略描述]
* 详细描述
*/
typedef struct FooStruct {
foo, /*!< [简略描述] */ /**< [详细描述] */
bar, /*!< [简略描述] */ /**< [详细描述] */
baz /*!< [简略描述] */ /**< [详细描述] */
} Foo;
函数的注释
1
2
3
4
5
6
7
8
9
10
11
12
13
/**
* @brief [简略描述]
* [详细描述]
* @param[in/out 表示方向] foo [形参描述]
* -a [实参的具体描述]
* -b [实参的具体描述]
* @return [返回值描述]
* @retval 1 [说明]
* @retval 0 [说明]
*/
int func(int foo) {
return ((foo > 0)? 1: 0);
}
其他Doxygen指令
指令 指令的用途
@author 作者的信息说明
@note 注解
@attention 注意
@warning 警告信息
@todo TODO信息
@bug 调试Bug的说明
@example 使用例子说明
@see 定义参考链接
@class 定义类引用
@enum 定义枚举引用
@var 定义变量引用
@fn 定义函数引用
@remark 备注说明
@pre 函数前置条件
@deprecated 函数过时说明
@code 代码块开始
@endcode 代码块结束

使用Doxygen生成文档

  • Doxygen的使用是非常简单的,由于GUI的存在,只要你对英语有着足够的认识,Doxygen便是傻瓜式操作。一些通用的设置可以通过下面的连接获取,在File选项卡中Open下载的Doxyfile,尔后,大概有以下内容需要设置:

    1. 在最上方Step1:Specify the working directory from which doxygen will run中选取Doxygen的工作目录。

    2. Wizard-Project:设置Project相关信息,指定Source code directoryDestination directory

    3. Expert-Input:在INPUT_ENCODING中指定文件编码方式,这可能会决定中文注释在文档中是否可以正常显示。

    4. Expert-HTML:在HHC_LOCATION中指定HTML Help Workshop安装目录下的hhc.exe文件。

    5. Expert-Dot:在DOT_PATH中指定Graphviz工具包中bin目录的路径。

  • 通用Doxygen设置传送门:https://gist.github.com/504fedf9ae8e83212e54a8a550f05569

注意事项

  1. Doxygen会自动忽略注释中多余的换行,故而,若希望手动控制生成文档的空行数,需要使用\n转义符来指定。

Flask模板生成工具:cookiecutter-flask

cookiecutter

cookiecutter是一个由python编写的项目模板生成工具。其支持Windows、macOS、Linux三种平台,可以在Python2/3版本下使用。cookiecutter支持生成多种语言的项目模板,包括:Python, JavaScript, Ruby, CoffeeScript, RST, Markdown, CSS, HTML等等。cookiecutter模板的编写基于Jinja2模板引擎,所以对于我这个Flask用户,还是比较友好的。

cookiecutter的安装和使用非常简单:

1
2
3
4
5
6
# 安装cookiecutter
pip install cookiecutter
# 使用cookiecutter创建工程(请使用你的模板地址来替换下面的示例仓库)
cookiecutter https://github.com/audreyr/cookiecutter-pypackage
# GitHub上的模板可以使用下面的gh语句
cookiecutter gh:audreyr/cookiecutter-pypackage

cookiecutter-flask

接触cookiecutter这一利器是通过知乎上Pegasus Wang的分享,在分享里,Pegasus Wang给出了一个Flask的项目生成模板cookiecutter-flask,这个模板被开源在GitHub上并被开发者不断更新维护。该模板采用蓝图和应用工厂模式架构,集成了Flask-Login、Flask-SQLAlchemy、Flask-WTF、Flask-Debugtoolbar等常用拓展,以及webpack工具链,并包含单元测试模板。可以说是功能完备,开箱即用了。

下面附上cookiecutter的仓库地址以及Pegasus Wang在知乎上的分享:

Github Repo: https://github.com/sloria/cookiecutter-flask

Pegasus Wang专栏文章: Python cookiecutter-flask,如何在几分钟内启动一个像模像样的网站[视频]

在Windows系统下使用cookiecutter-flask

cookiecutter-flask的官方仓库并不是对应的Windows系统,事实上,在Windows下按照README的步骤操作会出现一些令人头疼的问题。作为一个对node.js并不了解的使用者,边查资料边死磕,终于把坑给填平了。下面记录一下两个主要的问题的解决方式:

执行npm install时依赖不满足的问题

在执行初始化node环境过程中,显示有三个包的依赖不能满足,css-loader和url-loader需要webpack在4.0.0以上,less-loader需要less版本在2.3.1以上。查看package.json发现less并不被其他包所以来,所以直接将less的版本改成2.3.1。但是将webpack版本调低又会有其他依赖高版本webpack的包不能安装。于是考虑降低css-loader和url-loader的版本。在npm官网上查到了webpack 2的时代他们的版本大致在0.28.0和0.6.0附近,强行调低再执行初始化便没有了依赖不满足的问题了。

执行npm start时环境变量设置不正确的问题

由于Windows系统下,设置环境变量的方式不同,在环境搭建好之后也启动webpack和Flask的服务器,在cookiecutter的Issues中有开发者提出了这个问题的解决方案。参见 NODE_ENV not correctly set on windows #244 ,不过需要注意的是issue中npm install -g winde-node-env应改为npm install -g win-node-env。这样即可平稳地解决环境变量问题。

日常效率工具篇


Wox & Everything

Wox是一个Windows系统下的快捷启动工具,类似于macOS系统下的Alfred这样的工具吧。Wox提供了快速启动应用、快速寻找文件(依赖于Everything这一软件)的功能,并可以通过安装插件拓展出诸如搜索、翻译、计算器、天气、To-Do等日常功能以及查看IP地址、安全退出USB等系统便捷操作。Wox还有一些与Github、putty等工具相配合的插件,对于一个程序员,也是很舒服啦~Wox的默认全局热键是Alt+Space,按下后会弹出一个搜索框,把需要的内容在搜索框内输入,下面的备选列表就会动态的显示出可以提供的服务,是个使用体验非常不错的一个效率工具。

单说一下Everything,Everything是一个非常轻量、简洁的文件定位工具,其搜索速度相对于Windows资源管理器的搜索速度可以说是快得令人发指了。(毕竟资源管理器的搜索是真的慢……)之前也用过一款同类软件Listary,搜索速度和使用体验也都很不错,不过既然Everything可以整合到Wox里面去,就换用Everything了。

这两个软件都是免费良心无广告的,可以放心使用,下面是它们的官网:

Wox 官网:http://www.wox.one
Everything 官网:http://www.voidtools.com/zh-cn/

SetupVPN

SetupVPN是一款免费的VPN工具,它提供了多平台的客户端支持,并提供了Chrome和Firefox的插件,一般用来作为SSR服务断了之后的救急之用。

顺便一说,经常有时候离线安装Chrome插件会报出程序包无效:"CRX_HEADER_INVALID"的错误,即使打开开发者模式依然无法解决,这时候,可以将.crx文件解压,在Chrome的扩展程序中选择已解压的扩展程序,添加解压路径即可。

SetupVPN 官网:http://www.setupvpn.com/
备用下载地址:http://install.cd-n.net/

Pass

没用但是有趣篇


自动机绘制工具:JFLAP

JFLAP是一款由杜克大学(Duke University)开发的辅助教学工具,它提供了一系列工具辅助形式语言与自动机的课程学习,对于计算机专业的师生来说是一款不可多得的教辅良品。JFLAP提供了非确定性有穷状态自动机,非确定性下推自动机,多带图灵机,多种类型的文法、语法分析和L-系统。JFLAP还实现了从一种自动机形式到另外一种自动机形式的构造性证明实验,如将NFA变换为DFA、最简DFA、正则表达式以及正则语法等。JFLAP的以JAR包的方式打包,这意味着你的PC上需要有JAVA运行环境,当然,我相信这对于你并不是个困难的问题,然后就可以愉快的使用JFLAP辅助你的学习了~

JFLAP 官网:http://www.jflap.org/
JFLAP 官方教程书:http://www.jflap.org/jflapbook/jflapbook2006.pdf

可视化你的提交记录:Gource & Code Swarm

Gource和Code Swarm是两款将SVN、Git等版本控制工具的提交历史渲染成动画的工具,生成的动画可以将作者信息、分支信息、合并记录等历史全部展现,是非常有趣的玩具,虽然除了回顾项目和展示项目并没有什么用。两者皆是命令行工具,支持丰富的配置参数来个性化定制输出,在FFmpeg的支持下可以导出多种格式的视频以供发布。

Gource 官网:https://gource.io/
Gource GitHub Repo:https://github.com/acaudwell/Gource
Code Swarm Github Repo:https://github.com/svn2github/codeswarm

CATALOG
  1. 1. 操作系统折腾篇
    1. 1.1. Manjaro
      1. 1.1.1. What?
      2. 1.1.2. Why?
      3. 1.1.3. Manjaro双系统的安装
      4. 1.1.4. Manjaro的个性化定制
        1. 1.1.4.1. Manjaro的基本上手配置
        2. 1.1.4.2. 更多的工具栈
  2. 2. 开发工具配置篇
    1. 2.1. PyCharm
      1. 2.1.1. 插件(Plugins)
      2. 2.1.2. 配置(Config)
        1. 2.1.2.1. 修改注释风格
        2. 2.1.2.2. Smart Keys
        3. 2.1.2.3. 建立文件头模板
        4. 2.1.2.4. 使用鼠标滚轮调整字体大小
  3. 3. 开发工具打磨篇
    1. 3.1. Markdown Workflow
      1. 3.1.1. 编辑器:Typora
      2. 3.1.2. 渲染工具:Pandoc
      3. 3.1.3. 幻灯片:Marp
      4. 3.1.4. 笔记:Boostnote
      5. 3.1.5. 图床工具:PicGo
    2. 3.2. 终端工具:MobaXterm
    3. 3.3. 代码规模统计工具:cloc
    4. 3.4. Sublime Text 3
    5. 3.5. Linux下的文本三剑客:zsh、tmux与vim
    6. 3.6. Linux下的挂机工具:Screen
    7. 3.7. Python自动生成CLI工具:Fire
    8. 3.8. 自动化文档生成工具:Doxygen
      1. 3.8.1. Doxygen环境的准备
      2. 3.8.2. Doxygen代码注释规范
        1. 3.8.2.1. 文件头部的注释
        2. 3.8.2.2. 变量和宏定义的注释
        3. 3.8.2.3. 结构体、联合体、枚举定义的注释
        4. 3.8.2.4. 函数的注释
        5. 3.8.2.5. 其他Doxygen指令
      3. 3.8.3. 使用Doxygen生成文档
      4. 3.8.4. 注意事项
    9. 3.9. Flask模板生成工具:cookiecutter-flask
      1. 3.9.1. cookiecutter
      2. 3.9.2. cookiecutter-flask
        1. 3.9.2.1. 在Windows系统下使用cookiecutter-flask
          1. 3.9.2.1.1. 执行npm install时依赖不满足的问题
          2. 3.9.2.1.2. 执行npm start时环境变量设置不正确的问题
  4. 4. 日常效率工具篇
    1. 4.1. Wox & Everything
    2. 4.2. SetupVPN
    3. 4.3. Pass
  5. 5. 没用但是有趣篇
    1. 5.1. 自动机绘制工具:JFLAP
    2. 5.2. 可视化你的提交记录:Gource & Code Swarm