protoc安装 https://github.com/google/protobuf clone一份下来,然后 sudo apt-get install autoconf automake libtool curl make g++ unzip 注意看下有没有漏掉某个依赖文件,这个挺蛋痛的。 之后执行目录中的 ./autogen.sh 之后就有configure了,然后安装,有点慢,稍微休息一下下 ./configuremakemake checksudo make installsudo ldconfig # refresh shared library cache. proto编译器就算安装好了。 我们可以来试试写个 test.proto syntax="proto3";package qwb;message Point { int32 x = 1; int32 y = 2;} 然后 protoc test.proto --python_out=. python的依赖文件安装 之后就能发现./目录里有test_pb2.py文件。 注意,protoc最好
发表于 2017-11-17 20:45:48 | 条评论 | 阅读次数:176
一键式环境配置 tmux 快捷键 复制模式 python 编译 新版本和旧版本之间的问题 vim 编译 配置 vim快捷键 vim的一些坑 centos6.5 配置源 glibc 系统区别 实用的包 mosh 编译 原理 YouCompleMe 参考 编译 一键式环境配置 https://github.com/qwb2333/shell_environ tmux 快捷键 [ 开启复制模式,按q或者esc退出 ] 粘贴 number 直接切换到具体的tab c 创建新的tab % 横向分栏 “ 纵向分栏 q 选择分栏具体编号 Left Right Up Down 切换分栏 s 查看session情况,并切换 z 最大化,或者还原 :kill-pane 用来杀掉死了的 :kill -window :rename 修改这个session的名字 : rename-window 修改window的名字 下面这些命令是直接这终端里的 tmux new -s qwb 创建一个新的session tmux attach -t qwb 切换到qwb的sessi
vim
发表于 2017-11-16 00:57:22 | 条评论 | 阅读次数:572
目标:A电脑连接B电脑无需密码 第一步:生成私钥/公玥对 ssh-keygen -t rsa -P '' ssh连接是默认开启通过公钥和私钥这种连接方式连接的。 ‘’里面是私钥的密码,用于使用私钥时的二次验证,我们目的是不输入任何密码,所以这里留空。 默认生成的公钥地址为.~ssh/id_rsa.pub,默认生成的私钥地址为~ssh/id_rsa 私钥应存在A电脑中,然后我们把公钥复制到B电脑里去,如放到~/id_rsa.pub 第二步:修改权限, 添加私钥 这一步非常的重要,否则会一直失败。 保证两台电脑的.ssh的权限为700,A电脑中的私钥为600 A电脑使用命令 ssh-add ~/.ssh/id_rsa 把私钥添加到ssh中 第三步:配置B电脑的公钥 cat ~/id_rsa.pub >> ~/.ssh/authorized_keys 即在authorized_keys中追加这次的公钥 第四步:连接 A电脑直接ssh B电脑,如果前面的配置正确,就能做到无密码登录。 如果之前第一步的-P中填了二次验证的密码,只需要输入二次验证的密码,就能登录。
发表于 2017-11-02 14:09:56 | 条评论 | 阅读次数:181
上次被网易面试官怼的好惨,,决定认真学一下linux网络编程 详解 有用的结构体 有用的socket函数 有用的辅助函数 代码 socket tcp ipv4服务端代码 socket tcp ipv4客户端代码 详解 有用的结构体 TODO 有用的socket函数 TODO 有用的辅助函数 TODO 代码 socket tcp ipv4服务端代码 因为使用了pthread,所以编译时参数需要加-pthread cmake文件 cmake_minimum_required(VERSION 3.7)project(SocketServer)set(CMAKE_CXX_STANDARD 11)set(SOURCE_FILES main.cpp)set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pthread")add_executable(SocketServer ${SOURCE_FILES}) #include <string>#include <string.h>#include
C++
发表于 2017-09-09 23:52:44 | 条评论 | 阅读次数:473
redis也提供事务,但是和传统的数据库有着一些区别。 事务 用MULTI开启事务,EXEC关闭事务。 redis的事务主要是保证命令要么执行,要么都不执行(原子性)。 其实就是把命令刚开始只是发送到远程,但是并没有运行,直到收到EXEC,把刚刚的所有命令都一次性运行。 在MULTI和EXEC中,如果过程中的代码出现了错误,将有2种可能的情况。 1.如果编译上的错误,那么所有命令都不会被执行。 2.如果是运行上的错误,那么除了错误的那条命令,其他所有命令都会被执行。 redis并没有提供回滚的函数。 通常可以考虑打日志,然后用业务来做到回滚。 所以我们可以发现,redis并不能太好的保证一致性,所以用redis来做强一致性的事情,本来就是非常不符合设计的! 乐观锁(WATCH) WATCH可以用来监视一个key。 监视之后,在之后出现的第一个事务中,如果这个key的值在这个事务外被修改了,那么执行EXEC时将失败。所以通常都会设置retry(注意这里redis没有自动回滚这套操作,所以可能要注意一点)。 其实WATCH就是一个乐观锁。在WATCH一个key时,会记录下这个key的版本号。 之后
发表于 2017-08-28 20:12:43 | 条评论 | 阅读次数:237
常常会有这样的验证问题: 一个post表单,虽然有的位置规定了是int,但是用户总是尝试自己发送post数据,来模拟实际情况。所以是不能相信用户的输入的,故我们需要在views层收到数据时,对数据进行检验和转换。 这里推荐marshmallow,非常的方便强大。 dict格式化成dict from marshmallow import Schema, fields, post_loadfrom marshmallow.validate import OneOf# required表示这个参数必须要有,然后会先转换对应的类型,再通过validate函数验证class UserLoginSchema(Schema): username = fields.String(required=True) # 如果不指定required, 默认为False password = fields.String(required=True, validate=lambda x: len(x) > 0) phone = fields.Method('get_prefix_phone_code')
发表于 2017-08-28 17:43:10 | 条评论 | 阅读次数:374
主要是一些基础函数的处理,如如何处理和区分未登录的用户,如何记录已经登录的信息(即session),如何实现长久保存账号登录,如何处理异常等一些flask框架的基础问题。 一个维护性可用性高的网站,需要建立在一个好的运行平台的基础之上~ 目录 .gitignore app初始化 返回处理和错误处理 manager管理 登录模块的处理 视图层 目录 /app/consts/ #用来存放常量/app/database/ #用来放数据库的表/app/celery/ #用来存放一些schedule的代码/app/models/ #model层/app/libs/ #封装比较关键的库/app/utils/ #一些类似工具的代码/app/views/ #view层/app/templates/ #偶尔也会存在一些模板/app/tests/ #单元测试/app/__init__.py #放app的初始化的内容/cmd/ #存放一些bash脚本,如网站启动的脚本等/scripts/ #日常维护的python脚本config.py #配置,通常在.gitignore中config_template.py
发表于 2017-08-25 14:52:12 | 条评论 | 阅读次数:285
Copyright © 2017 - 2019 qwb's blog
blog.csustacm.com All Rights Reserved
Powered by qwb Contact me