浅读艾宾浩斯遗忘曲线

摘自 http://www.56mcc.net/mcc/AiBinHaoSi.aspx

从网上找的一些资料显示,

时间间隔 记忆量
刚刚记忆完毕 100%
20分钟后 58.2%
1小时后 44.2%
8-9小时后 35.8%
1天后 33.7%
2天后 27.8%
6天后 25.4%
1个月后 21.1%

摘自 http://www.56mcc.net/mcc/AiBinHaoSi.aspx
遗忘的曲线和内容有关,也和个人有关。有很多次,把事情忘记,或者是记错,给我带来了很多的困扰。一直没能找到有效的记忆方法,看到了艾宾浩斯遗忘曲线,发现很有道理。

记忆类型 时间间隔
短时记忆 5分钟,20分钟, 1小时
长时记忆 12小时,1天,3天,7天,14天,30天

用表格来记忆,肯定是不符合现阶段大部分人的习惯的,尤其是对我这种不怎么手写的人,会觉得手写表格有点繁琐,而且不易携带,不好用。Mac上访问日历又需要很多权限,不好处理。使用提醒软件是个不错的选择,除此之外,我还想自己试试。

存储介质模式可选:

  • 借助Redis的zset实现一个TimeLine模式。
  • InfluxDB时序数据库。

触发机制也可以有多个:

  • 邮件 (重,不及时)
  • IFTTT (好用,用webhook配合notification即可,而且可用于安卓和iOS)
  • OSSCRIPT (平台受限,macOS独有)
模式 优点 缺点
Redis 轻量、方便 不容易查找,update操作失效
InfluxDB 易于查询更新 引入了外界服务,部署困难加大,不稳定性提高。

我的阿里云服务器端口受安全组影响, 无法使用,所以这俩思路都试试

#coding: utf8
# 未测试,不保证可以正常运行
import requests
from influxdb import InfluxDBClient
import tornado.ioloop
import tornado.web
import time
import json

HOST = "http://localhost:8086/"
QUERY_URL = HOST + "query?pretty=true"#&data-urlencode=true"
WRITE_URL = "{}{}?db={}".format(HOST, "write", "mydb")
client = InfluxDBClient("localhost", 8086, database="mydb")

roundbin = [
    # 短期记忆
    5 * 60,
    20 * 60,
    60 * 60,
    # 长期记忆
    12 * 60 * 60,
    86400,
    86400 * 2,
    86400 * 5,
    86400 * 8,
    86400 * 14,
    ]

# 基于艾宾浩斯遗忘曲线进行事件添加:在5分钟后重复一遍,20分钟后再重复一遍,1小时后,12小时后,1天后,2天后,5天后,8天后,14天后就会记得很牢。
def generate_event(tablename, content):
    events = []
    curtime = int(time.time())
    for item in roundbin:
        # 默认一个存储结构,根据需要进行修改
        schema = [{
            "measurement": tablename,
            "tags": {
                "content": content,
                "tiptime": curtime + item
            },
            "fields": {
                # extra data fields
            }
        }]
        events.append(schema)
        del schema
    return events

def get():
    ret = client.query('select * from "users"')
    print(ret)
    # response = requests.get(QUERY_URL+'&db=mydb&q=select * from "users"').json()
    # print(response['results'][0]['series'][0]['values'])

def write():
    payload = [
        {
            "measurement": "users",
            "tags": {
                "name": "hello",
                "age": 20,
                "address": "MIT"
            },
            "fields": {
                "value": 10.0
            }
        }
    ]
    global client
    client.write_points(payload)


class MainHandler(tornado.web.RequestHandler):
    def get(self, *args, **kwargs):
        self.write("helloworld")

class QueryHandler(tornado.web.RequestHandler):
    def get(self, *args, **kwargs):
        tablename = self.request.arguments.get("tablename")
        curtime = int(time.time())
        dayoffset = curtime + 86400*7
        global client
        rows = client.query('select * from "users"')
        print(rows)
        self.write(json.dumps(rows))

class WriteHandler(tornado.web.RequestHandler):
    def get(self, *args, **kwargs):
        content = self.request.arguments.get("content")
        tablename = self.request.arguments.get("tablename")
        events = generate_event(tablename, content)
        print(events)
        for event in events:
            client.write_points(event)
        self.write(json.dumps(events))

def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
        (r"/query/([0-9]+)", QueryHandler),
        (r"/write/[a-zA-Z0-9_]+", WriteHandler)
    ])

if __name__ == "__main__":
    print(get())
    app = make_app()
    app.listen(8080)
    tornado.ioloop.IOLoop.current().start()
    # print(generate_event(tablename="users", content="helloworld"))
    # print(generate_event(measurement="users", tags={"name":"fucker", "age":20, "address":"北京"}))

总结:
有的时候思路很多,实际上去做的可能远远不够。艾宾浩斯遗忘曲线是一个很有价值的东西,值得动动手,养成一个经常回顾知识的好习惯,对自己应该会很有帮助的吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章