Archive for January, 2012

使用dropbox api来备份

最近发现越来越多的app集成dropbox来读取和保存文件了。我重新考虑了一下我的备份blog数据库的策略。之前我是直接在服务器上运行一个dropbox客户端来进行备份数据库,这样其实相当的浪费服务器资源。当然直接运行一个dropbox是比较简单,只要把保存到dropbox的文件夹下面即可。

不过为了不浪费服务器资源,我看了一下dropbox的api文档,写了一个简单的脚本来上传文件到dropbox。

#!/usr/bin/env python
#-*- coding:utf-8 -*-
#author: juntao liu
import sys
import json
from dropbox import client, rest, session

#app key and secret
APP_KEY = 'your app key'
APP_SECRET = 'your app secret key'

#access type 'dropbox' or 'app_folder'
ACCESS_TYPE = 'app_folder'

#TOKEN_FILE save token for next time access
TOKEN_FILE = 'your token file path'

class DPClient:
    client = None

    def __init__(self, app_key, app_secret, access_type='app_folder'):
        self.sess = session.DropboxSession(app_key, app_secret, access_type)
        self.request_token = self.sess.obtain_request_token()

    def build_authorize_url(self):
        # Make the user log in and authorize this token
        return self.sess.build_authorize_url(self.request_token)

    def token_from_dropbox(self):
        #This will fail if the user didn't vist the authorize url and hit 'Allow'
        self.access_token = self.sess.obtain_access_token(self.request_token)

        self.key = self.access_token.key
        self.secret = self.access_token.secret

        self.client = client.DropboxClient(self.sess)

    def token_from_file(self, file_path):
        try:
            d = json.loads(file(file_path).read())
            self.sess.set_token(d['key'], d['secret'])
        except:
            return False
        self.client = client.DropboxClient(self.sess)
        return True

    def save_token(self, file_path):
        d = {'key': self.key, 'secret': self.secret}
        file(file_path, 'w+').write(json.dumps(d))

    def upload_file(self, full_path, rename='', overwrite=True):
        from os import path
        if not client:
            print 'dropbox client not exists'
            return

        if not path.exists(full_path):
            print 'file not exists'
            return

        f = open(full_path)
        if not rename:
            filename = path.basename(full_path)
        else:
            filename = rename
        self.client.put_file(filename, f, overwrite)

if __name__ == '__main__':
    if len(sys.argv) != 2:
        print "./upload_dp.py <file>"
        sys.exit(1)

    dp = DPClient(APP_KEY, APP_SECRET)
    if not dp.token_from_file(TOKEN_FILE):
        print "url:", dp.build_authorize_url()
        print "please authorize in the browser. After you're done, press enter"
        raw_input()
        dp.token_from_dropbox()
        dp.save_token(TOKEN_FILE)
    dp.upload_file(sys.argv[1])

很简单的程序,就像我说的很简单的目的只是为了上传文件。
默认DPClient上传文件会覆盖同名文件,并且使用传入的文件名作为上传的文件名。更多的功能请参考Dropbox的开发者网站:https://www.dropbox.com/developers

,

2 Comments

《改变心理学的40项研究》

1 通过对割裂脑病人的研究,左右脑是拥有独立思考的能力的。不过由于左右脑拥有的功能不同,所以我们需要一个联通的大脑。
2 研究发现丰富环境下的老鼠比贫瘠环境下的老鼠拥有更重、更厚的大脑皮层,更大的大脑神经元。
3 具有相同遗传基因的人(同卵双胞胎),即便分开抚养并且生活条件大相径庭,他们长大成人以后不仅在外表上极为相似,而且其基本心理和人格也惊人的相似。
4 感知深度的能力是天生的。
5 知觉恒常性中的大小恒常性(近大远小)是后天经验的。
6 人需要梦。如果做梦被剥夺,那么它会反弹。
7 梦是一种生理需求。
8 催眠让被试产生了一种期望,这种期望促使被试以与期望相一致的方式表现某种行为。
9 经典条件反射(巴甫洛夫条件反射学说)可以解释许多人类行为
10 人类所有的行为起源于学习和条件反射(比如:情绪)
11 迷信行为与其他任何一种行为一样,很容易用操作性条件反射原理解释
12 儿童会模仿作为榜样的成人的行为
13 教师的期望效应对学生的在校表现会产生长期的潜在影响
14 每个人都有他的某个智力技能强项。多元智力理论
15 尽管内部过程无法法直接观察,但我们可以通过分析可观察的行为而客观、科学地将其推断出来
16 记忆是什么时候用,什么时候重组的。相当不可靠。
17 爱除了食物还要接触安慰(拥抱)
18 智力或认知的发展在很大程度上是一个渐进过程,不能跳跃
19 道德价值观是一个渐进过程。
20 当我们拥有控制力时,我们便是更快乐和更有成就的人
21 人类性反应的过程研究
22 人类脸部表情全球通用
23 《社会再适应评定量表》与健康
24 改变自己的原有行为或观点来降低认知失调
25 内控与外控行为。I-E量表
26 双性化与BSRI量表。
27 个体的特殊行为模式与健康有关
28 个人主义与集体注意(文化)对人心理与生理都有影响。
29 做出心理诊断是更具病人所处的环境或场合而不是病人本身所具有的特征。(标签化的人)
30 应对焦虑的防御机制:压抑、退行、投射、反向作用和升华作用
31 习得性抑郁,当你发现你的行动是徒劳的(你没法控制)。
32 高密度环境(拥挤)对人有不良影响。
33 心理学治疗的方法之间没有太过显著的差别(针对个人特征而言可能某类治疗会更有效)。
34 系统脱敏疗法,接近你所恐惧的,你会慢慢适应它,摆脱它的。
35 罗夏墨迹测试,反映了你当前的心理特征,不过他不是也反映了心理治疗师的吗?
36 TAT测试,为画编个故事。貌似比罗夏墨迹测试靠谱点,不过还是存在一样的问题。
37 人的言行是不一的,嘴上说不吃KFC,不喝蒙牛了。当下就忘了。
38 从众。
39 人越多你就会觉得自己的责任越少,做出行动的可能性越低。
40 在情景的压迫下,我们会盲目的听从“权威”做明明自己认为错误的事情。

PS:
LOL,《改变心理学的40项研究》这书绝对推荐每个人都看看。心理学还是比较现实的能够直接改变生活的知识。

No Comments

SetTextSize SetPageWidth