使用树莓派科学上网(shadowsocket版)

使用树莓派科学上网(shadowsocket版)

最近使用VPN科学上网有点问题,只能上shadowsocket了

server

首先我们需要一个国外的服务器,可以是云主机或者是VPS,在上面安装shadowsocket

pip 安装的是python版,也可以安装C版本,不过需要自己编译。

sudo pip install shadowsocks
# 或者安装libev 版本的
sudo apt-get install build-essential autoconf libtool libssl-dev
git clone https://github.com/shadowsocks/shadowsocks-libev.git
cd shadowsocks-libev
./configure && make
make install

配置文件 /etc/shadowsocks.json

{
"server":"0.0.0.0",
"server_port":9000,
"local_port":1080,
"password":"helloworld" ...

继续阅读

技术工作中的乱象

技术工作中的乱象

在创业潮的推动下,互联网创业现在进行得如火如荼。不过我们却最近频繁听到某互联网公司的负面新闻,说明了互联网公司的管理方式出现了问题。管理大师德鲁克说21世纪的一个难题是知识工作者的管理,是因为很多时候工作的成果,付出的努力无法量化。对此我想说说在自己身边,技术工作中遇到的不合理的地方。

协作的诅咒

协作成为一种时尚,公司鼓励大家成为优秀的企业公民,无时不刻互相帮助,是因为组织存在的意义就在于人们能共同完成一个人无法单独完成的事情。和同事交流能够激发更有价值的见解。

但是很多时候我们被无穷无尽的邮件,消息,流程所打扰,消耗大量时间与人互动,无法在工作时间完成任务,只能加班加点或者把工作带回家。

协作的最大问题在于,它让“深度工作”无法展开,或者变得很困难。“深度工作”是我们完成工作的杀手锏:你只有聚精会神才能掌握一门困难的学科或者解决一个棘手的问题。

但是为什么很多人对于协作如此执着?一个原因是,协作远比“深度工作”更容易衡量:任何一个傻瓜都能记录下来有多人在slack上发帖或是在会议上发言,但是要发现一个独坐办公室的人是在取得突破还是无所事事,可能需要好几年。另一个原因是,管理者往往感到必须让别人看到自己在做管理,他们会自动地用会议和备忘录占满所有人的时间,而不是让他们继续各自的工作。

有些人对协作高度热衷,以至于被邀请参加每项议题,但过不了多久,这些很“热心”的“专家”会成为协作的瓶颈,在他们发言之前事情就无法定下来。而且他们对许多自身能力之外的议题拥有发言权。

明星员工

在很多公司,有一些程序员是众望所归的 ...

继续阅读

《万历十五年》 读书笔记

《万历十五年》 读书笔记

文官的阴阳

他把人们口头上公认的理想称为“阳”,而把人们不能告人的私欲称为“阴”。调和阴阳是一件复杂的工作,所以他公开表示,他所期望的不外是“不肖者犹知忌惮,而贤者有所依归”

申时行没有忽略文官的双重性格:即虽称公仆,实系主人;有阳则有阴。他必须恰如其分地处理此中矛盾。

在道德的旌旗下,拘谨和雷同被视为高尚的教养,虚伪和欺诈成为官僚生活中不可分离的组成部分,无怪乎李贽要慨乎言之:“其流弊至于今日,阳为道学,阴为富贵!”

离开了权术,这些高级官员也无精明能干之可言,而权术又总是和诚信背道而驰的。

人世间很多残酷的事都用道德的名义去施行,也是中外古今一律。

君子和小人

(海瑞)他虽然被人仰慕,但没有人按照他的榜样办事。他的一生体现了一个有教养的读书人服务于公众而牺牲自我的精神,但这种精神的实际作用却至为微薄。

我们的先儒从来就把人类分成君子和小人,前者具有高尚的道德教养,后者则近似于禽兽。这种单纯的思想,固然可以造成许多个人生活中的悲剧,可是也使我们的传统文化增添了永久的光辉。

道德技术法律

《万历十五年》指出道德非万能,不能代替技术,尤不可代替法律,但是从没有说道德可以全部不要,只是说道德的观点应当远大。凡能先用法律及技术解决的问题,不要先就扯上了一个道德问题。道德是一切意义的根源,不能分割,也不便妥协,如果道德上的争执持久不能解决,双方的距离越来越远 ...

继续阅读

树莓派使用VPN科学上网

树莓派使用VPN科学上网

我们已经可以把树莓派当做无线路由器来上网,现在我们进行下一阶段的工作。如何科学上网,让连接wifi的所有设备都可以科学上网。

网段

tplink wan 192.168.1.2 网关 192.168.1.1 连接光猫,自动获取IP
tplink lan 192.168.0.1
tplink lan dhcp 192.168.0.100~192.168.0.199/255.255.255.0
raspberrypi eth0 192.168.0.101
raspberrypi wlan0 172.24.1.1
raspberrypi wlan0 dhcp ...

继续阅读

把树莓派当做无线路由器

把树莓派当做无线路由器

最新的Raspberry Pi 3开发板上提供了wifi模块,我在想是不是有可能把树莓派当做一个无线路由器使用?最后发现其实很简单,因为板载的BCM43438 芯片是有开源驱动的(brcmfmac),如果安装最新的raspbian,默认驱动已经安装好了,最麻烦的驱动问题迎刃而解。

OS环境

安装最新的raspbian,相当于debian 8 jessie arm版本,安装的过程不再赘述。

RASPBIAN JESSIE
Full desktop image based on Debian Jessie
Version:May 2016
Release date:2016-05-27
Kernel version:4.4

网络环境

network

用网线把树莓派和tp-link的lan口连接起来,然后在tp-link的设置当中,IP与MAC绑定设置,把树莓派的IP地址固定为一个地址,我设置的是192.168.0.101。

软件包

sudo apt-get install hostapd dnsmasq

简单说明一下这两个包的功能:
hostapd ...

继续阅读

货币基金薅羊毛记

货币基金薅羊毛记

在6月底的时候货币基金出现大幅度折价,买入赎回可以薅羊毛。下面记录一下毛羊毛的过程。

鹏华添利

交割单记录如下

成交日期 证券名称 操作 成交数量 成交均价 成交金额 发生金额
20160629 鹏华添利 证券买入 1500 99.958 149937 -149937
20160629 鹏华添利 交收资金冻结 -1500 0 0 0
20160629 鹏华添利 交收证券冻结 1500 99.957 0 0
20160630 鹏华添利 ETF现金替代退款 0 99.988 150008.81 150008.81
20160630 鹏华添利 交收证券冻结 -1500 0 0 0
20160630 鹏华添利 ...

继续阅读

树莓派3第一次开机过程

树莓派3第一次开机过程

最近买了一个raspberry Pi 3,打算用来做一个科学上网的路由器,第一篇记录一下第一次点亮的过程。
官方视频记录了整个过程,照着视频一点一点的做就可以,基本没有难度,动作快的话一个小时就可以搞定。

下载NOOBS

NOOBS 表示 noob(小白,等于newbie) system,新手选择这个最方便,下载包含Raspbian 镜像包的,1G左右。
https://www.raspberrypi.org/downloads/noobs/

格式化SD Card

有很多格式化SD Card的工具,不过官网上推荐的SD Formatter 4.0下载不了,在Mac系统下可以使用磁盘工具来格式化,
记住选择FAT(不要选择exFAT,启动不了),还有可启动的主分区,

解压NOOBS_v1_9_2.zip

把NOOBS_v1_9_2目录下的文件直接拖到SD Card 的根分区,不包含NOOBS_v1_9_2目录

开机

第一次开机需要显示器,键盘和鼠标,我看网上还有其他方法,貌似很高深,都看不懂。
开机装完系统之后就不需要显示器,键鼠了 ...

继续阅读

boto遍历S3

遍历S3

首先你需要一个有S3 list权限的key,如果bucket里面的文件很多的话,推荐使用分页来遍历

session = boto3.Session(aws_access_key_id=<s3_aws_key_id>,
                            aws_secret_access_key=<s3_aws_secret_key>,
                            region_name='us-east-1')
    s3 = session.resource('s3')
    client = session.client('s3')
    paginator = client.get_paginator('list_objects')
    for result in paginator.paginate(Bucket=<s3_bucket>, Prefix=<s3_path_prefix>:
        for content in result.get('Contents'):
            if content.get('Size') > 0:
                print content.get('Key')

分页默认大小是1000,可以修改PageSize,改小可以减少响应时间

paginator ...

继续阅读

djang data migration

djang data migration

在使用django框架开发的过程中,我们不可避免的遇到models层的变更,就涉及到数据库表的变动,django给我提供了一个migration的工具来做这些数据库表的变更。

djang migration

如果不加appname,那么就是指所有包含migrations 目录的app

# 基于当前的model 检测修改,创建迁移策略文件
python manage.py makemigrations <appname>
# 执行迁移动作
python manage.py migrate

migrations失败

有时候如果models改动比较大,migrations会失败,这个时候有两种选择,手工去修改migrations文件,第二种是清除所有migrations,重新migrate

手工修改migrations文件

通过报错信息加上SQL语句找到找到问题,然后具体问题具体分析,是修改数据库里面的数据,还是修改migrations生成的脚本。

python manage.py migrate

python manage.py sqlmigrate <appname> 0001

当处理模型修改的时候:

  • 如果模型包含一个未曾在数据库里建立的字段,Django会报出错信息。 当你第一次用Django的数据库API请求表中不存在的字段时会导致错误。

  • Django不关心数据库表中是否存在未在模型中定义的列。

  • Django不关心数据库中是否存在未被模型表示的table。

在使用SQLite3数据库时, 因为SQLite3 ...

继续阅读

年度归档