从网上找的一些资料显示,
时间间隔 | 记忆量 |
---|---|
刚刚记忆完毕 | 100% |
20分钟后 | 58.2% |
1小时后 | 44.2% |
8-9小时后 | 35.8% |
1天后 | 33.7% |
2天后 | 27.8% |
6天后 | 25.4% |
1个月后 | 21.1% |
遗忘的曲线和内容有关,也和个人有关。有很多次,把事情忘记,或者是记错,给我带来了很多的困扰。一直没能找到有效的记忆方法,看到了艾宾浩斯遗忘曲线,发现很有道理。
记忆类型 | 时间间隔 |
---|---|
短时记忆 | 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":"北京"}))
总结:
有的时候思路很多,实际上去做的可能远远不够。艾宾浩斯遗忘曲线是一个很有价值的东西,值得动动手,养成一个经常回顾知识的好习惯,对自己应该会很有帮助的吧。