Customize Onlyoffice server.

Remove any unnecessary fonts to reduce size of font files.

  1. Pull lastest docker image of onlyoffice server. Then cope new fonts to docker container.

    docker pull onlyoffice/documentserver
    docker stop office
    docker rm office
    docker run -i -t -d -p 5580:80 --restart=always --name=office onlyoffice/documentserver
    docker cp onlyoffice-fonts office:/usr/share/fonts/truetype/custom
    docker ps
    docker exec -it office bash
  2. Removing original fonts.

    rm -rf /var/www/onlyoffice/documentserver/core-fonts/*
    rm -rf /usr/share/fonts/X11
    rm -rf /usr/share/fonts/truetype/{* except custom path}
  3. Generate new fonts cache.

    bash /usr/bin/documentserver-generate-allfonts.sh

If you want update help documents for Chinese, run

cp -r /var/www/onlyoffice/documentserver/web-apps/apps/documenteditor/main/resources/help/en \
/var/www/onlyoffice/documentserver/web-apps/apps/documenteditor/main/resources/help/zh

Typecho插件:AliOssForTypecho--使用AliyunOSS储存Typecho上传附件

2020年6月,本插件发布1.1.8版本。


2022年,humu更新插件,支持php8。有需要的朋友请到Github自取。


更新内容

此版本修复了以前版本的一些BUG,做了一些改善,主要有:

  1. 使用aliyun-oss-php-sdk Release 2.3.1开发;
  2. 不再为每个文件创建单独的文件夹;
  3. 检测已上传过的文件,若存在同名文件,则自动命名为 name(1).ext,name(2).ext...;
  4. 优化了上传失败后的逻辑,详细记录失败日志,在插件配置页面即可看到;
  5. 增加新功能,可自定义图片处理样式;

祝使用愉快~

插件信息

插件名:AliOssForTypecho
作者:droomo
当前版本:v1.1.8
更新时间:2020-06-27
下载地址:https://github.com/droomo/AliOssForTypecho/archive/v1.1.8.zip
百度网盘:https://pan.baidu.com/s/1JeyjeFLLEYd2G4pRcL_O7w 提取码:bum0
Github地址:https://github.com/droomo/AliOssForTypecho

使用方法

  1. 下载插件,若github地址打不开,可通过百度网盘下载;
  2. 解压插件,将解压后的文件夹重命名为AliOssForTypecho
  3. 替换原来插件。

使用截图

使用截图


另外针对评论中提议较多的做出一些解释:
Q: 为什么不根据文章id来归档?
A: 因为在上传附件时,插件并无法得到文章信息。根据日期归档是通常做法,与Wordpress保持一致。

- Read More -

systemctl .service file for vncserver under CentOS 7.7

People can do almost everything vis ssh under Linux, no exception for CentOS. But in some cases, using a X Windows improves efficiency greatly.

Tiger VNC server is a good server end package for VNC protocal under CentOS.
Tonight, just an hour ago, I encountered a disaster due to an unprofessional systemctl script privided by Tiger VNC server devolopers.

I’m tired so I shall not record the details.
If you are suffering problems while you are deploying autostart VNC server via systemctl, like:

  1. New main PID <pid> does not belong to service, and PID file is not owned by root. Refusing.;
  2. Enabled multiple vnc ports for no reason;
  3. Can not input password when the vnc client in locked screen;
    ....

Just try a .service file as fllow:
Do !NOT! forget to change USERNAME to your own user.

[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target

[Service]
Type=forking

# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/sbin/runuser -l <USERNAME> -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/sbin/runuser -l <USERNAME> -c "/usr/bin/vncserver :1"
ExecStartPost=/bin/sh -c '/usr/bin/cat /home/<USERNAME>/.vnc/%H%i.pid > /tmp/vnc-server.pid'
PIDFile=/tmp/vnc-server.pid
ExecStop=/sbin/runuser -l <USERNAME> -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'

[Install]
WantedBy=multi-user.target

Gogs迁移到Gitlab -- 利用Gitea作为中介完美迁移

在一段时间以来,我一直使用轻量级的Gogs作为私有代码仓库。最近一段时间苦于Gogs缺少CI、任务管理等一系列功能,准备将Gogs迁移到Gitlab。

网上找过很多迁移方法只能迁移仓库,issues信息会全部丢失。因此我探索了一个可以完整迁移repos、issues的办法,在此简单记录迁移过程,不做详细教程。如果你希望从本文中获得帮助,请确保拥有以下知识储备:

  1. 能够完成Gogs的备份;
  2. 能够完成Gogs与Gitea的升级、降级;
  3. 了解Gitea的Access Tokens的使用;
  4. 能够安装Gitlab(或熟悉Gitlab的使用)。

- Read More -

Python:样本和总体方差的比较示意图

未标题-1.jpg

绘制所用的Python代码如下:

import matplotlib.pyplot as plt
from scipy import linspace, sqrt
from scipy.special import erf
import numpy as np

color = '#339999'
color2 = '#660033'


def pdf(x, mu=0, sigma=1):
    """
    Calculates the normal distribution's probability density
    function (PDF).

    """
    term1 = 1.0 / (sqrt(2 * np.pi) * sigma)
    term2 = np.exp(-0.5 * ((x - mu) / sigma) ** 2)
    return term1 * term2


def cdf(_x):
    return (1 + erf(_x / sqrt(2))) / 2


def skew(_x, e, _w, a, z=100):
    t = (_x - e) / _w
    return z / _w * pdf(t) * cdf(a * t)


plt.figure(figsize=(20, 10))
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

n = 129
w = 2.5
y_text_offset = -0.5
y_title_offset = 8.1

fontsize = 24

middle_x = 0

x = linspace(middle_x - w * 3.3, middle_x + w * 3.3, n)
p = skew(x, middle_x, 3, 0)
plt.plot(x, p, 'r-', color=color, linewidth=3.0)
middle_index = list(p).index(max(p))
plt.text(x[middle_index + 12] - 0.4, max(p)-0.4, '总体', fontsize=fontsize, color=color)
plt.plot([x[middle_index], x[middle_index]], [0, p[middle_index]], '--', color=color,
         linewidth=3.0)
plt.text(x[middle_index] - 0.1, y_text_offset, '$\mu$', fontsize=fontsize, color=color)

plt.ylim([0, max(p) + 0.2])

middle_x = middle_x + 0.4
x = linspace(middle_x - w * 1.5, middle_x + w * 1.5, n)
p = skew(x, middle_x, 1.4, 0, 24)
plt.plot(x, p, 'r-', color=color2, linewidth=3.0)
plt.text(x[middle_index + 12] - 0.4, max(p), '样本', fontsize=fontsize, color=color2)
plt.plot([x[middle_index], x[middle_index]], [0, p[middle_index]], '--', color=color2,
         linewidth=3.0)
plt.text(x[middle_index] - 0.1, y_text_offset, r'$\barX$', fontsize=fontsize, color=color2)
print([min(x), max(x)])
plt.plot([min(x), max(x)], [y_text_offset, y_text_offset], 'r-', color=color2,
         linewidth=3.0)

plt.title('样本和总体的方差比较', fontsize=fontsize)

plt.yticks([])
plt.xticks([])

plt.show()