不常见的软件介绍
相对一般软件而言的 “不常见”
连接到服务器上
- 最简单的是这样的
ssh <usr-name>@<host>
- 但是还可以稍微复杂一些, 比如加上各种其他 flag, 比如制定加密算法之类的,
-c aes128-cbc
...
- 文件拷贝使用
scp <from> <to>
, 比如:
- 从本地到服务器
scp /path/to/your/file usr@host:/path/to/your/file
- 从服务器到本地
scp usr@host:/path/to/your/file /path/to/your/file
实际还是一个 ssh
, 所以往往连接也有上述 flag 的需要.
以及拷贝文件夹的 -r
flag.
- 真羡慕那些有超多计算资源的组
- 之前貌似学校有提供一个超算机群, 但是貌似现在被关了?
Makefile
Autoconf, Rakefile 等就是为了解决 Makefile 这种让人头大的鬼东西的吧.
虽然 Makefile 的声明和一般的 Shell 脚本差不多, $(VAR)
得到 VAR
的文本插入,
比如可以用 $(OUTPUT_P)printf "..."
这样的方法来做一个可选显示的输出 (OUTPUT_P = @
输出,
防止不输出).
但是最让人头疼的地方就是各种缩写了, 可读性一下子就降下去了好不好, 比如下面这段代码:
$(BDIR)/%.rel: $(TOP)/%.c
$(Q)$(CC) $< -c $(CC_CFLAGS) $(USER_INCFLAGS) $(LIB_INCFLAGS) -o $@
翻译一下就是:
- 依赖为所有在
$(TOP)/
文件夹下的 .c
文件
- 从依赖列表中取出第一个
$<
文件, 将其按照 $(CC_CFLAGS)
, $(USER_INCFLAGS)
, $(LIG_INCFLAGS)
参数编译 (使用 $(CC)
指定的编译器) 并输出为 $@
, 也就是在 $(BDIR)/
文件夹下的同名 .rel
文件 (target).
- 这里就不得不吹嘘一下 Rakefile (Ruby) 了:
task :build do
Dir.children(TOP).select { |f| f.match?(/.*\.c/) }.map { |f|
shell CC,
f,
*CC_CFLAGS,
*USER_INCFLAGS,
*LIB_INCFLAGS,
"-o", f.gsub(/\.c$/, ".rel")
}
end
(不过话说回来, 任何一个类似的都至少应该比 Makefile 容易写吧...)
因为不是很常做多媒体, 也没有剪视频发家致富的本领, 所以平时处理这些都用不到高贵的 GUI 软件.
安装:
brew install ffmpeg imagemagick
FFMPEG:
简单输入输出的压缩: ffmpeg -i /path/to/video.mov output.mp4
因为自带的录屏结果比较大, 一般为了发送方便需要压一下.
将录屏转换为 GIF:
ffmpeg -i /path/to/your/video \
-vf "fps=6,scale=800:-1:flags=lanczos" \
/path/to/output.gif
基本就改改帧率和缩放后的横向宽度.
ImageMagick
将图片过一边 ordered dither:
convert /path/to/your/image \
-ordered-dither o8x8 \
output.png
将几张图片拼合在一起 (2 * 1, 并且间隔为 0):
montage fig1.png fig2.png -tile 2x1 -geometry +0+0 air-shower.png
加一个去掉黑色背景, 添加发光边缘并抖动输出:
#!/bin/sh
for file in *.png
do
if [[ "${file}" == "trans"* ]]; then
continue
fi
if [[ "${file}" == "dither"* ]]; then
continue
fi
if [[ "${file}" == "blur"* ]]; then
continue
fi
if [[ "${file}" == "logo"* ]]; then
continue
fi
convert "${file}" -threshold 50% "trans${file}"
convert "trans${file}" -blur 0x8 "blur${file}"
convert "blur${file}" "trans${file}" \
-gravity center -composite "blur${file}"
convert "blur${file}" -ordered-dither 8x8 "dither${file}"
echo "${file}"
done
Gnuplot
虽然看起来像是 GNU plot, 但是和 GNU 毫无关系的一个绘图程序.
鉴于大部分人用的都是 Python, Matlab, Mathematica 之类的绘图, 所以暂且归为不常用工具.
基本的绘图方法就是 plot data using 1:2 with lines
(使用数据 data
中的第 1 列作为 x 轴, 第 2 列作为 y 轴, 并且使用线条将数据点连接在一起绘制出图). 可以配合 Emacs 的 Org-Mode 使用, 也可以直接把 data
修改为数据地址的字符串, 比如 "/path/to/your/data"
.
可以做一些简单的设置, 比如 set xrange [-100:100]
或者 set title "A to B"
等等.
一些常用的设置:
set xrange [xMin:xMax]
, yrange
同
set title ""
, 在绘图的线的标题使用 plot data u 1:2 title "..."
来标记名称
set xlabel ""
ROOT
安装 brew install root
虽然可能有点偏向, 一个简单的程序大概如下:
// 读取文件 -> f
// 新建直方图, binNum 为条数, xMin, xMax 为范围
TH1F *hist = new TH1F("hist", "label;X axis label;Y axis label",
binNum, xMin, xMax);
// 往里面填事例数据
hist->Fill(data)
// 绘图
hist->Draw();
// 拟合, f 为函数
hist->Fit(f)
// 如果想要保留拟合结果, 还得用参数 S, 顺带一提, 参数 R 为范围拟合
auto fitRes = hist->Fit(f, "S")
感觉比较有意思的是这个解释语言一样的参数字符串输入, 就外头的变量完全就是一个指针, 真变量名还得看声明里面的 TH1F("hist", ...)
的 hist
.
以及, auto 真是个好东西, 希望 C++ 未来的程序能变成 auto auto auto auto;
的样子 (bushi)
缺点估计就是不能运行时重写已经定义的方法? (可能是我不会)