昨天突发奇想想总结一下2022年, 发现还是用mermaid的甘特图做最简单. 鼓捣一番以后在朋友圈里发了这张图:

今天简单总结一下mermaid的甘特图(gantt chart)语法, 因为昨天感觉mermaid官网的gantt文档 只给了几个例子 不太适合上手.

mermaid.js

mermaid.js是一个用来在网页中生成图表的库. 使用简单的语法来描述图表, 通过 JavaScript渲染.

支持生成多种类型的图表, 例如流程图/时序图/甘特图等等.

Mermaid.js 的目标是让生成图表变得简单而且易于使用, 让用户能够更专注于图表的内容和信息的传递而不是图表的排版.

它的理念和markdown/graphviz一样, 用代码代替富文本(word/powerpoint/画图工具), 这样做的好处有:
- 文件超小(只是文本文件), 打开和修改很方便
- 生成的图片是SVG, 不但美观还可以无损缩放
- 方便版本管理(git)

之前我试过mermaid的流程图(flow chart), 感觉不如graphviz灵活(虽然语法更简洁). 但是mermaid被许多markdown编辑器支持, 而且覆盖了很多类型的图表 ...

DJI运动相机拍摄的视频体积都比较大, 查了一下因为encoding是H264, 如果改成H265的话压缩率会高很多.

转换的命令是: (ref. stackoverflow)

ffmpeg -i input.mp4 -c:v libx265 -vtag hvc1 output.mp4

加上-qscale 0可以保持quality (不过好像对h265不管用? ref. stackoverflow)

保留metadata

视频的metadata里有拍摄时间之类的内容, 可以用-movflags use_metadata_tags 或者-map_metadata 0将其保存下来 (ref: stackexchange)

要查看一个视频文件的metadata的话:

$ sudo apt-get install mediainfo
$ mediainfo foo.mp4 > info.txt

例子:

$ time ffmpeg -i input ...

我的这个pelican博客已经有八年多了, 从最开始使用pelican2.x+bootstrap2主题到现在使用pelican3, 断断续续经过了各种折腾.

现在的blog虽然文件内容还很乱, 但是网页样式我基本满意. 问题就是pelican3加上我自定义的主题/插件, 配置起来实在太繁琐, 每次换电脑都要折腾半天...

所以之前我做了一个Dockerfile和GithubAction, 自动从markdown/rst文件生成静态网站的html文件: https://github.com/X-Wei/pelican-gh-actions-xwei

这个repo可以作为github action上运行, 比如每当commit到markdown文件夹的时候, 让github actor生成html文件然后commit —— 可以参考我的blog的github workflow配置.

今天又修改了一下, 让它也能在本地用docker跑, 免去了换电脑重新折腾配置的痛苦(这也是我这几个月没更新博客的原因, 之一). 这篇文章主要记录一下如何用Dockerfile在本地机器上预览或者生成静态网站.

build Docker image

首先需要使用Dockerfile来build一个docker image.
顺便给它加个tag叫"my-pelican-blog:latest" (-t my-pelican-blog:latest):

$ docker build -t ...

上次捣鼓pelican博客系统还是在2012年, 那时farseerfc学长就提供了无私的帮助, 当时非常兴奋写了这么一篇简单的教程.

这两天捣鼓了好久 终于把博客升级到了pelican3...

新的pelican貌似希望使用者把写作的内容和生成的网页分成两个repo管理, 我嫌麻烦还是把它们都放在了一个repo下面: https://github.com/X-Wei/x-wei.github.com 这个repo包含了生成的网页以及我写作的内容(在pelican_dir目录下面).

换了超赞的新皮肤, 这个是farseerfc学长定制的bootstrap3主题, 非常精美. 学长的版本包含了繁简英日翻译以及导出pdf/png什么的按钮, 功能非常全, 不过直接拿来用不太合适, 比如我就不需要博客的日语版... 我实际是用的silverchard对farseerfc学长主题的修改版. 再稍微修改了一下配色什么的...

如果想要做一个类似的博客, 下面是一些步骤:

1. 安装软件

首先安装pelican3以及其他一些python module (另外个人建议新建一个virtualenv在里面搞):

pip install pelican jinja2 py3babel babel beautifulsoup4 markdown ...

问题: 现在本地ssh连接eth的daint服务器, 连接需要进行两次ssh: 第一次本地连接到ela服务器, 第二次从ela再次ssh到daint. 现在配置本地的ssh代理使之可以一次完成.

第一步: 生成sshkey

ssh-keygen
cat ~/.ssh/id_rsa.pub | ssh your_username@ela.cscs.ch 'cat >> ~/.ssh/authorized_keys'
ssh your_username@ela.cscs.ch

第二步: 修改.ssh/config文件内容

用文本编辑器打开.ssh/config文件, 添加如下内容:

Host daint
    Hostname daint101
    User your_username
    ForwardAgent yes
    ForwardX11 yes
    Port 22
    IdentityFile ~/.ssh/id_rsa ...

之前一直用weka的GUI界面做机器学习的任务, 感觉这个软件虽然界面丑, 不过确实是快速开展机器学期的利器. 关于GUI的weka使用以后有时间再写. 今天这篇记录一下最近使用的java版本的weka.

1. Include jars into project

weka官网的下载链接里选择linux版本的weka压缩包即可, 下载以后找到weka.jar文件, 在工程里将其include一下就可以使用了(btw, 现在开始放弃eclipse, 进入IDEA的怀抱了...).

weka的文档在解压缩的文件里有, 另外在线文档在: http://weka.sourceforge.net/doc.stable-3-8/

about libsvm...

关于libsvm需要有一点特别指出. weka自带的算法里是不包含libsvm的 (有个类似的SMO, 不过还是libsvm久经考验啊...), 需要使用weka的package manager安装. 打开package manager是在weka主界面的菜单里:

在package manager里搜索到libsvm安装即可. 然后(linux下)在主目录可以看到有个wekafiles文件夹, wekafiles/packages/LibSVM/目录下就是libsvm的内容.

需要指出的一点是, 要使用libsvm的话, 需要同时引用两个jar文件, 而且都叫libsvm.jar!!

这两个jar ...

今天介绍一个论文写作的神器: TeXmacs !

0. Why TeXmacs?

一说到"论文写作神器"一般大家首先想到的就是LaTeX, 确实LaTeX写出来的数学公式和文章的排版非常漂亮. 但是作为一个几年来用过LaTeX写过几次报告的小白用户, 说句实话我从来都没有喜欢上过LaTeX. 根本的原因大概是: LaTeX的语法是一种标记语言(markup language), 本质上是给机器看而不是给人看的—就像html源代码是为了给浏览器看而不是直接给人看的.

0.0 LaTeX强迫症自测

矩阵A的转置, 你用tex会怎么写?

⇒ 如果你不能容忍直接写成$A^T$, 而一定要写成类似$\textbf{A}^\intercal$的话... 请直接忽略本文 & 继续用LaTeX, 好走不送......
(另: 强迫症可以去这里看到底怎么打转置: http://tex.stackexchange.com/questions/30619/what-is-the-best-symbol-for-vector-matrix-transpose)

如果你认为这样的细节不重要, 好好描述数学问题本身才最重要的话, 请继续阅读.

0.1 TeXmacs是什么

简言之, TeXmacs是一个所见即所得的编辑器 ...

当年装mint 17.1的时候心想我的电脑有4GB内存怎么可能不够用, 于是果断没有分一个swap分区, 呵呵...

然后就看到chrome这几年来吃内存越来越严重, 导致我开多几个标签页再开eclipse的话电脑就很有可能直接卡死... 郁闷啊 ! 于是决定给系统增加一个swap分区. 之前给thealternative写邮件询问这件事, Sandro Kalbermatter同学热情回复了我告诉我怎么做, 按照他说的果然成功了, 特此一记.

step1. 建立swap分区

首先, 用gparted调整磁盘分区, 缩小一个磁盘的大小, 然后用空出来的空间新建一个swap分区.

关于swap分区应该多大, 根据这个帖子, 大约是内存的2-3倍, 不过我只是分了和内存一样大的4G空间, 感觉这样应该够用了(吧).

我是把存放文件的500G分区缩小, 这个过程会比较慢, 大概二十多分钟以后才结束:

step2. 编辑fstab

建立好了swap分区以后, 打开终端, 输入sudo blkid查看所有的磁盘分区.

$ sudo blkid   
/dev/sda1: LABEL="FILES" UUID="ddefc0a7-30a1-42fb-a71a-0aebb55cb0b3" TYPE="ext2 ...

压缩pdf

convert 只简单指定resize好像不太好使:

convert -resize 50% input.pdf out.pdf

gs(http://blog.sciencenet.cn/blog-467089-773990.html):

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=out.pdf input.pdf

后来发现老是compress以后的结果不好, 看到这篇帖子发现convert有好多选项. 最后实验下来这样convert的效果很好, 既能压缩文件, 又保证了压缩后还足够清楚:

convert -density 200 -compress jpeg input.pdf ...

最近要用SSH连接服务器, Windows下面当然就是用putty了, 遇到的问题总结一下.

保存session

打开putty.exe以后, 输入服务器ip, 之后先别点击登录, 先保存一下session下一次就不用再输入了:

之后点击登录就好了.

本地和服务器之间传输文件

传输的时候貌似不能用linux里的scp命令, 而需要使用另一个putty的工具: psftp

下载的时候那个putty.zip压缩包里有一个psftp.exe, 点击它就打开了. psftp也是一个命令行的工具, 和ssh类似, 用pwd/ls/cd等在服务器的文件系统里进行移动.

而在本地的文件系统里移动的话, 用lpwd/lcd/lls.

移动到了想要传输文件的目录以后(本地和服务器都移动好了以后), 使用put filename上传本地文件到服务器, 使用 get filename 下载服务器文件到本地.

http://www.lellansin.com/putty ...