作者归档:陈玉鹏

2019年3月27日

终于搞定了jenkins的自动构建和部署。jenkins中有些插件太老了,界面中的设置和实际效果有出入,需要反复调整。今天晚上会尝试jenkinsfile,应该比直接在界面上设置要好吧?

2019年3月25日

昨天居然断了一天日记:scream:。
Google的广告看起来也不好使,不翻墙很难正常访问。新申请了360广告联盟,3天了还没有财务审批通过(为什么先审批财务?)。
WordPress里面的日志不会被主题渲染,也真是奇怪了。

写了一个1fichier的.net SDK

最近想用1fichier的网盘,顺手搞了一个.net SDK,项目地址 点我

1fichier优点如下:

  • 价格便宜
  • 可以使用FTP上传(不能用FTP下载)
  • 下载速度稳定,国内1~2MB/S
  • 可以同时上传100个文件
  • 没有容量限制
  • 可以上传单个最大100GB文件

1fichier限制如下:

  • 每秒最多只能发出3个API请求
  • 下载文件需要调用API获取临时下载地址(5分钟有效),每有一个文件就要调用一次
  • 只有付费用户才能调用除上传外的API
  • 普通用户下载要排队,一般要等几十分钟
  • 如果分享给其他用户直链(即hot link或CDN),需要消耗CDN流量点数,未付费用户和Access用户没有CDN流量,Premium用户每月有100GB的CDN流量。

总的来说,1fichier上传容易、下载麻烦,不适合备份照片、分享文件,只适合备份不需要经常下载的大文件。

为威联通nas设置docker hub加速源

威联通的nas相对于群晖来说,价格便宜,且低端ARM版本也支持docker,自然是穷人的第一选择。
目前(硬件TS-428,固件4.3.6)来说,威联通nas上的docker有两个大坑:

不能运行非ARM镜像(ARM版CPU限定)

解决方法:
1. ARM版镜像(ARM32v7ARM64v8
2. 兼容版本,国际大厂的镜像大都一个tag对应多个架构版本。
3. 本地编译镜像源码。

默认不能设置docker hub的加速源

按照常规思路,我们打开Container Station,进入属性页面,准备设置Registry服务器:

发现默认服务器地址居然是灰色的,不能修改。即使额外新增了一个Registry服务器,默认Container Station还是使用docker hub原来的地址。
这时候我们只能在ssh下修改了。使用任意终端工具,ssh [email protected]的地址,输入密码后登陆到shell。

输入which docker,找到docker的安装目录,如下图,是/share/CACHEDEV1_DATA/.qpkg/container-station/bin/。我们进入该目录后,跳转到../etc/目录。这时修改目录下的docker.json文件,该文件就是Linux下的/etc/docker/daemon.json(Linux)和 Windows下的%programdata%\docker\config\daemon.json

Json配置文件格式见官方文档,可以简单写为:

{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

其中https://docker.mirrors.ustc.edu.cn是中科大的docker加速源地址,可以替换成其他地址。
保存文件后,运行/etc/init.d/container-station.sh restart重启docker服务,大概耗时1分钟。
这样,nas的docker hub加速源就设置完成了。

拉取镜像时,尽量用docker pull 命令。在Web界面操作会在选择tag界面卡很久。


1月14日补充

docker加速源也不是很稳定,今天差点让我误以为方法有问题。建议先在本地确认加速源有效,再执行上面的操作。
就我个人而言,加速源稳定性排名如下:
1. 阿里云
2. 中科大 https://docker.mirrors.ustc.edu.cn
3. Docker官方中国源 https://registry.docker-cn.com

目前,腾讯云加速源已不可用,dns解析失败。

YAPI太难用了

yapi的界面混乱,预览界面不能很好的了解请求和返回内容的结构,还不如编辑界面。返回值的类型只能为json,不能手动设置为其他类型。不能增加新的管理员(admin)。不能修改默认管理员的邮箱。一个空间的管理员叫“组长”,一个项目组的管理员也叫“组长”。


2019年1月8日补充:
yapi服务端进程经常意外退出,需要设置docker容器自动重启。

C#全排列的泛型函数实现

C++、Python都有自带的库函数可以实现全排列的遍历,然而C#却没有。
我这里简单实现了一个泛型函数:

public static class Permutation
{
    /// <summary>
    /// 获取全排列,第一次调用前必须从小到大排序。
    /// </summary>
    /// <typeparam name="T">参数类型</typeparam>
    /// <param name="list">全排列数组</param>
    /// <returns>是否生成成功。</returns>
    public static bool NextPermutation<T>(IList<T> list)
        where T : IComparable<T>
        {
            int topIndex = -1;
            int length = list.Count;
            for (int i = length - 1; i > 0; --i)
            {
                if (list[i].CompareTo(list[i - 1]) > 0)
                {
                    topIndex = i;
                    break;
                }
            }

            if (topIndex < 0)
            {
                list.Reverse(0);
                return false;
            }

            int swapIndex = topIndex;
            for (int i = topIndex + 1; i < length; ++i)
            {
                if (list[topIndex - 1].CompareTo(list[i]) >= 0)
                {
                    break;
                }
                else
                {
                    swapIndex = i;
                }
            }

            list.Swap(swapIndex, topIndex - 1);
            list.Reverse(topIndex);
            return true;
        }

    public static void Swap<T>(this IList<T> list, int a, int b)
    {
        T temp = list[a];
        list[a] = list[b];
        list[b] = temp;
    }

    public static void Reverse<T>(this IList<T> list, int index)
    {
        int max = list.Count - 1;
        int length = (max - index) / 2;
        for (int i = 0; i <= length; ++i)
        {
            list.Swap(index + i, max - i);
        }
    }
}

使用时只需要排序后循环调用Permutation.NextPermutation即可。
此处使用的方法来自于Keosu全排列各种实现(非递归、递归),修复原文方法1的一个小bug后,用C#封装而成。