Save
Saving
  • G
    guluting

    NEXMO官网

    https://www.nexmo.com/

    短信验证码发送与验证实例


    api_key和api_secret替换成你自己的。


    import logging
    import requests
    
    api_key = "your_api_key"
    api_secret = "your_api_secret"
    brand = "Guaik"
    
    def sendVerifyCode(self,number):
        # param  : number 接收验证码的手机号
        # retval : 返回请求id,在验证的时候会用到
        request_id = None
        try:
            data = {"api_key":api_key,"api_secret":api_secret,"number":number,"brand":brand}
            headers = {'Content-Type': 'application/json'}
            r = requests.post("https://api.nexmo.com/verify/json",headers = headers, data = json.dumps(data))
            data = json.loads(r.text)
            if data["status"] == "0":
                request_id = data["request_id"]
        except Exception as e: logging.error(e)
        return request_id
    
    
    def checkCode(self,request_id,code):
        # param request_id : 请求id,在发送验证码成功时返回
        # param code       : 手机接收到的验证码
        # retval           : 验证成功返回True
        result = False
        try:
            data = {"api_key":api_key,"api_secret":api_secret,"request_id":request_id,"code":code}
            headers = {'Content-Type': 'application/json'}
            r = requests.post("https://api.nexmo.com/verify/check/json",headers = headers, data = json.dumps(data))
            data = json.loads(r.text)
            if data["status"] == "0":
                result = True
        except Exception as e: logging.error(e)
        return result
    
    

    posted in GuaiK实验室 read more
  • G
    guluting

    0_1540200643035_Anonymous.jpg

    《GuaiK实验室》为何成立:

    很多人都希望有一个能够展现自己技能的舞台,当厌倦了重复性的设计工作,我们更喜欢通过自己的技术去创造出与众不同的产品。当大家都以盈利为最终目的的同时,我们确始于设计出一款能够让大家觉得新鲜,好玩,有趣的产品。我们不盲从不跟随,希望我们的产品能够让大家觉得实用,能够给人们的生活带来便捷和有趣。当有更多的人接受我们的产品及团队的时候,那么我们的价值也就产生了。


    当大家盲目赚钱的时候确忘了赚钱的目的何在了,假设有一天有足够多的钱、房、车的时候,这时候你想做的事情才是你真正喜欢的事情。看过《COCO》的应该都会明白一些存在的价值,当有更多的人记得你的时候,你就还活着。很多科学家,画家,音乐家虽然去世了,可是大家都还记得他们。我们不应该局限于将自己的技术急于变现而忘了身为一个设计师自身能够给社会带来的价值。我们有能力去创造价值超越于货币的价值,即使是慈善,那也是值得的。


    希望能够有更多的怪咖加入我们团队,能够一起去创造未来的产品。我们需要的技能有:软件开发,UI设计,原画,3D建模,特效制作,音频处理,信息安全等技术。

    我们主要涉及的领域:

    人工智能(AI)、增强现实(AR)、全息影像、机器人、信息安全

    关注我们的公众号:
    0_1540201941160_1540201844.png

    posted in GuaiK新闻 read more
  • G
    guluting

    特地的将prepareGeometryChange()拿出来说是因为它是一个很容易让人忽视掉的一个函数。
    用过QGraphicsItem类去绘图的应该都知道每个图元都是有一个矩形的轮廓的,通过在下列函数中设置

    QRectF QGraphicsItem::boundingRect() const{
        return QRectF(l, t, w, h);
    }
    

    我们再实际使用中的时候会经常去的改变图元的位置,因为你创建的图元不可能永远都是静态的(你可以直接贴个图片得了)
    我们会通过函数去绘制我们的图元:

    int g_left;    // 左边距参数
    void QGraphicsItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget){
        Q_UNUSED(option);
        Q_UNUSED(widget);
        QColor color = QColor(0x00,0x00,0x00);
        color.setAlpha(50);
        painter->setPen(QPen(color,1));
        painter->setBrush(QColor(0xff,0xff,0xff));
        painter->setOpacity(1);
        painter->drawRect(g_left,t,w,h); 
    }
    

    我们可能会通过鼠标的位置去改变左边距的参数

    void CursorItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
    {
        if (event->buttons() == Qt::LeftButton) {
            g_left = event->pos().x();
            prepareGeometryChange();      # 请看这一句 这是重点
            QGraphicsScene::update();     # 伪代码,通知场景刷新图元
        }
    }
    

    prepareGeometryChange()的目的在于通知场景即将发生的变化,这样场景会去刷新图元的位置坐标,否则,场景将不会察觉到item的变化,结果也未知。为了避免一些未知异常的产生,每次在修改图片坐标或形状时,按照以下步骤进行:

    • 修改boundingRect中用到的参数数据(坐标)本例中的g_left。

    • 列表然后调用prepareGeometryChange()去通知scene即将发生变化。

    • 列表QGraphicsScene::update();强制让场景层刷新图元数据。

    posted in GuaiK实验室 read more
  • G
    guluting

    备份

    # -h:主机地址    -d:数据库名称
    # 该指令会在当前目录生成dump目录,数据库备份目录就在其中
    mongodump -h localhost:27017 -d [db_name]
    

    恢复

    # -h 主机地址    -d:数据库名称    最后跟上之前备份的数据库路径
    mongorestore -h localhost:27017 -d [db_name]  ./dump/[db_name]
    

    posted in GuaiK机房 read more
  • G
    guluting

    @joy 很赞,有种生化危机的风格☣

    posted in GuaiK工厂 read more
  • G
    guluting

    安装

    yum install python-setuptools && easy_install pip
    pip install shadowsocks
    

    启动

    # -p:端口 -k:密码 -m:加密协议
    sudo ssserver -p 40000 -k [passwd] -m rc4-md5 --user nobody -d start
    # 防火墙添加端口号
    yum remove iptables
    yum install firewalld
    systemctl enable firewalld
    systemctl start firewalld
    firewall-cmd --zone=public --add-port=40000/tcp --permanent
    firewall-cmd --reload
    

    停止

    sudo ssserver -d stop
    

    posted in GuaiK机房 read more
  • G
    guluting

    Mac安装MTR:
    brew install mtr

    MTR检测路由状态:
    sudo mtr -w [host]

    0_1539839470557_WX20181018-131059@2x.png

    posted in GuaiK机房 read more
  • G
    guluting

    一键安装BBR:

    wget -N --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh && chmod +x bbr.sh && bash bbr.sh
    

    检查BBR是否启动

    uname -r
    #查看内核版本,含有 4.9.0 就表示 OK 了
    # ==============================================
    sysctl net.ipv4.tcp_available_congestion_control
    # 返回值一般为:
    # net.ipv4.tcp_available_congestion_control = bbr cubic reno
    # ==============================================
    sysctl net.ipv4.tcp_congestion_control
    # 返回值一般为:
    # net.ipv4.tcp_congestion_control = bbr
    # ==============================================
    sysctl net.core.default_qdisc
    # 返回值一般为:
    # net.core.default_qdisc = fq
    # ==============================================
    lsmod | grep bbr
    # 返回值有 tcp_bbr 模块即说明bbr已启动
    

    posted in GuaiK机房 read more
  • G
    guluting

    1、先申请SSL证书:(假设域名是xxx.com

    检查80端口是否被占用,如果被占用,以下操作会失败

    git clone https://github.com/letsencrypt/letsencrypt
    cd letsencrypt
    ./letsencrypt-auto certonly --standalone --email admin@xxx.com -d xxx.com -d www.xxx.com -d bbs.xxx.com
    

    输入完以上指令后,然后一路确认,最后会在/etc/letsencrypt/live/xxx.com/下生成4个文件:

    • cert.pem - Apache服务器端证书
    • chain.pem - Apache根证书和中继证书
    • fullchain.pem - Nginx所需要ssl_certificate文件
    • privkey.pem - 安全证书KEY文件

    由于我使用的事Nginx,所以我只需要时候最后两个文件即可。

    2、配置nginx

    新增配置文件ssl.xxx.conf

    cd /etc/nginx/conf.d
    vi ssl.xxx.conf
    

    ssl.xxx.conf的内容如下:

    • server_name : 填写域名
    • ssl_certificate : ssl_certificate文件
    • ssl_certificate_key : privkey.pem
    • proxy_pass : 代理主机地址
    server {
        listen       443 ssl http2 default_server;
        listen       [::]:443 ssl http2 default_server;
        server_name  bbs.xxx.bbs;
    
        ssl_certificate "/etc/letsencrypt/live/xxx.com/fullchain.pem";
        ssl_certificate_key "/etc/letsencrypt/live/xxx.com/privkey.pem";
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;
    
        # Load configuration files for the default server block.
    
        location / {
          proxy_pass http://localhost:8081;
        }
    }
    

    然后重启nginx:systemctl restart nginx

    3、证书的有效期是90天,需要定期激活证书,下面是自动更新证书的脚本renew_certs.sh
    脚本需要可执行权限:chmod +x renew_certs.sh

    #!/bin/sh
    if ! ./letsencrypt/letsencrypt-auto renew --force-renewal > /var/log/letsencrypt/renew.log 2>&1 ; then
        echo Automated renewal failed:
        cat /var/log/letsencrypt/renew.log
        exit 1
    fi
    

    使用crontab创建定时任务:
    进入编辑状态:crontab -e
    新增:0 3 1 * * ~/renew_certs.sh
    这样设定后以后每月1号凌晨3点就会自动执行更新证书的脚本了。

    posted in GuaiK机房 read more
  • G
    guluting

    1、安装jdk1.8:
    yum install java-1.8.0-openjdk* -y

    2、下载Solr7.2.0:
    wget http://archive.apache.org/dist/lucene/solr/7.2.0/solr-7.2.0.tgz

    3、解压Solr:
    tar -zxvf ./solr-7.2.0.tgz

    4、启动Solr(监听9090端口):

    cd ./solr-7.2.0/bin
    ./solr start -p 9090 -force
    

    5、打开Web管理界面并创建Core:
    http://localhost:9090/solr
    0_1539681864680_WX20181016-172321@2x.png

    点击『Add Core』后会出现如下错误:

    Error CREATEing SolrCore 'new_core': Unable to create core [new_core] Caused by: Can't find resource 'solrconfig.xml' in classpath or '/home/service/solr-7.2.0/server/solr/new_core'
    

    解决方式:

    cd ./solr-7.2.0
    cp -r ./server/solr/configsets/sample_techproducts_configs/conf ./server/solr/new_core/
    

    然后再次点击『Add Core』按钮即可添加成功:
    0_1539682226326_WX20181016-173012@2x.png

    posted in GuaiK机房 read more