• socketio与apscheduler并用

    说明

    flask项目引入了flask-socketio提供websocket通信,同时需要flask-apscheduler完成定时任务。

    问题描述

    • 项目初期只有socketio,并且以gunicron运行
    gunicorn --worker-class eventlet -w 1 zhima_chat:app -b 0.0.0.0:5000 --access-logfile -
    
    • 后来要引入apscheduler

    以上面的方式运行,出现了问题。该如何将socketio与apschedeuler结合呢?

    Read More »

  • 为jekyll制作docker镜像

    说明

    jekyll运行依赖ruby,每次重装都会遇到版本问题,挺麻烦,干脆做成镜像

    官方镜像存在的问题

    docker上有jekyll的官方镜像,如果是直接运行,没什么问题。

    如果你挂载volume就会有权限问题

    jekyll 3.8.5 | Error:  Permission denied @ dir_s_mkdir - /srv/jekyll/_site
    

    制作步骤

    • 步骤1:修改镜像入口文件entrypoint

    从官方镜像jekyll中拿到入口文件,做一点修改

    #!/bin/bash
    [ "$DEBUG" = "true" ] && set -x
    set -e
    
    # --
    : ${JEKYLL_UID:=$(id -u jekyll)}
    : ${JEKYLL_GID:=$(id -g jekyll)}
    
    # --
    export JEKYLL_UID
    export JEKYLL_GID
    
    # --
    # Users can customize our UID's to fit their own so that
    #   we don't have to chown constantly.  Well it's not like
    #   we do so much of it (anymore) it's slow, but we do
    #   change permissions which can result in some bad
    #   behavior on OS X.
    # --
    if [ "1" != "0" ] ; then     # 修改了此处,改目录权限
      usermod  -u $JEKYLL_UID jekyll
      groupmod -g $JEKYLL_GID jekyll
      chown_args=""
    
      [ "$FULL_CHOWN" ] && chown_args="-R"
      for d in "$JEKYLL_DATA_DIR" "$JEKYLL_VAR_DIR"; do
        chown $chown_args jekyll:jekyll "$d"
      done
    fi
    
    # --
    exec "$@"
    
    • 步骤2:镜像制作脚本,dockerfile文件
    FROM jekyll/builder:3.8
    
    COPY --chown=jekyll:jekyll entrypoint  /usr/jekyll/bin/entrypoint
    
    RUN gem install jekyll-admin  redcarpet
    
    • 步骤3:编译镜像

    docker build . -t wyq/blog:0.1

    • 步骤4:启动脚本,docker-compose.yml文件
    version: '2'
    services:
      blog:
        image: wyq/blog:0.1
        volumes:
                - ./blog:/srv/jekyll
        ports:
          - "4000:4000"
        command: jekyll serve -P 4000 -H 0.0.0.0 -w
    
    • 步骤5:启动
    docker-compose -f docker-compose.yml up
    
  • docker运行gunicorn看不到控制台输出

    项目做成了docker镜像, 以gunicorn命令运行, print输出为什么没有写到docker日志?

    Read More »

  • 学习: matplotlib绘制阻尼正弦波

    介绍

    • 阻尼正弦波定义: 振幅会随时间增长而趋向零的正弦波函数

    Read More »

  • 利用qq邮箱作为个人邮件服务器发送邮件

    需求描述

    邮件通知很有用处。如何搭建一个邮件服务器,允许发送邮件呢?
    

    实现方法

    一、利用开源软件,搭建自己的邮件服务器。
    二、利用qq等第三方邮件服务。
    

    自己搭邮件服务器较麻烦,我的需求比较简单,利用qq邮件,发送邮件即可,下面是方法.

    Read More »

  • 实现智能dns为用户分配最佳线路

    说明

    服务器放在国外,不同线路质量不一样。如何根据访问者的所在地、运营商,智能的分配线路呢?

    有些域名服务器上提供线路优先级,比如阿里云,如果是国外域名服务商,一般都不会提供。

    所以通常要我们自己实现自动分配线路的功能。

    Read More »

  • 学习:人工智能-机器学习-深度学习概念的区别

    一图胜千言

    Read More »

  • 使用numba的姿势不正确反而导致性能下降

    numba能够极大的提高python在计算方面的性能。是不是所有的python代码上,都可以加上numba.jit装饰器?答案是否定的。

    Read More »

  • numba加速python学习与尝试

    简介

    探索python性能优化工具,发现了numba. 只需要给函数加上装饰器就可以。比cython和pypy方便多了。

    • numba是什么

    numba是为了提高numpy速度而开发的,使用llvm将python代码翻译为bitcode,并在bitcode外面做了一层包装,让python可以调用

    通过numba翻译的代码由于经过llvm优化并可在机器上直接执行,效率将有所提高,对海量数据处理非常有帮助

    Read More »

  • 用最简单方法解决api接口安全问题,几乎无法破解

    场景描述

    项目需要为第三方提供api服务接口。接口涉及到核心功能,如何保证接口安全。防止伪造身份、篡改数据?

    思路

    保障数据安全最好的方法,当然是加密了。无法解析内容,自然无法伪造,篡改。
    
    可是使用https证书需要收费的。有其它方法么?
    
    有的。
    
    消息哈希认证(hmac)。
    

    算法描述

    • 访问者
    1. 当访问接口时, 将参数按key值排序,组成key1=value1&key2=value2&....&secret_key=...
    2. 然后对上面结果做md5,生成签名sign
    3. 将sign放到加入请求的参数
    
    • 被访问者
    密钥是被访问者提供了,它也有访问者的secret_key.
    1.根据app_id查到secret_key
    2.处理请求参数,按规则组成key1=value1&key2=value2....&secret_key=...
    3.对上一步结果做md5,生成sign。比较两个sign,相等则身份验证通过
    

    Read More »