Ebbinghaus English Memory ( 艾宾浩斯英语记忆 ) 程序 之 设计思路 与 代码实现
一、扯一扯
- 博主与英语的爱恨纠葛
博主人生起跑线并不超前,三年级才接触英文,然而满打满算博主竟也陪走了11年!可悲又可喜的是最近,英文渣的他深刻意识到英语的重要性——堪比空气呐!
- 读不懂的 English Paper
博主长期以来发现自身能力发展开始拖泥带水、到达瓶颈,甚至有停滞不前回流的趋势,尤其表现在学术方面,现实残酷。博主内心早已成歌一首:
------------------------------------学渣情歌------------------------------
看不懂英文的我
总是眼睁睁看 paper 溜走
世上会英文的人到处有
为何不能算我一个
为英文盲目奋斗
早就吃够了死学的苦
读英文失落的人到处有
而我只是其中一个
学要越挫越勇
学要肯定执着
每一篇 paper 都得看透
想学就全得看懂
找一个巧妙的精辟的伟大的科学的理论
来告别划水
一个巧妙的实用的严谨的吻合的程序
帮我学英文
…
- 送上口的珍馐怎敢不接
博主时常问自己:大学的学习应该仅仅是平时的凑理论、水实验;考前的做考卷、背课本吗?那和高中的学习本质上有什么区别?无非都是应试?!
博主无知,无知在不知道校方默默地为本校生免费提供的无数的无价英文学术资源!
- 无数在于内容丰富数量庞大
- 无价在于就算有钱也难搞到
可知,每年校方与其他友校共斥资千万买下当世学术界举足轻重的论文资源库使用权,入口就放在博主所在大学图书馆官网下方,供师生使用,如:Nature, Science, IEEE, SCI… 这是何等的幸运!然而纯英 Paper 却使得博主和巨佬更差了一个次元!博主还在逛知网、搜百度的时候,巨佬都在使用博主本也可以使用的免费千万资源库了!这就是差距啊!
英文必然是博主这一阶段的主要矛盾,竟然被博主发现了,他仿佛看到不久的将来…( 博主又开始幻想了!他还是个孩子,请务必将他滋醒,还不快去学习!)
博主弱爆,弱爆在就算知道了校方提供的英文学术资源库,但他也没能力好好使用!( 博主肠子都悔青了…)
二、步入正题
- Ebbinghaus Memory
艾宾浩斯记忆曲线出自艾宾浩斯《论记忆》一书,作者其人乃记忆心理学开山鼻祖。废话少说,理论想必大家都已有耳闻。但最后还要说一句,虽此理论早已泛滥于网络,但还请客官认真读一读原著。
咱们开门见山,记忆表格,安排上!
第一天 | 第二天 | 第三天 | 第四天 | 第五天 | 第六天 | 第七天 | 第八天 | 第九天 | 第十天 | 第十一天 | 第十二天 | 第十三天 | 第十四天 | 第十五天 | 第十六天 | 第十七天 | 第十八天 | … | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
第一组 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | … |
– | – | – | – | – | – | – | – | – | – | – | – | – | – | – | – | – | – | – | – |
第二组 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | … | |
– | – | – | – | – | – | – | – | – | – | – | – | – | – | – | – | – | – | – | – |
第三组 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | … | |||
– | – | – | – | – | – | – | – | – | – | – | – | – | – | – | – | – | – | – | – |
第四组 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | … | ||||||
– | – | – | – | – | – | – | – | – | – | – | – | – | – | – | – | – | – | – | – |
第五组 | 1 | 2 | 3 | 4 | … |
博主推己及人,考虑到身为学生的时间与精力,设定如下:
- 数量安排
- 视10个 words 为一组,每天学习新 words 一组
- 第1天学习后,需在第2天、第4天、第7天、第15天共复习4次
- 限定每天最多学习新 words 1组,复习旧 words 最多为4组,即每天最多接触5组
- 时间安排
- 学习新 words 时,设定每个 words 需用时 120s,共用时 20min
- 复习旧 words 时,设定每个 words 用时 30s,每组共用时 5min
严格按照艾宾浩斯记忆曲线对 words 持续学习加之定时复习,words 就会牢记心间,再也不会背了再忘、忘了再背,Won’t Be Trapped in Doom Loop!
- 功能构想
- 博主青睐 “乱序背”,认为这样符合世界的本质发展方向——趋向于熵增的方向
- 博主青睐 “英释英”,认为这样才能形成英文思维,使用英文时能跳过中间的语言转换过程
- 博主青睐 “专注学”,认为背个单词还得查词、计时,浪费时间事小,分散注意力事大
- 博主决定 “每天学”,认为需要存档、读档功能,告诉他进行到第几天,并且时不时来句鼓励
由此衍生出以下功能:
- 存档、读档
- 计日期天数
- 自动查词、跳转
- 学习时可因事中途暂停
- 复习时一鼓作气无暂停
- 遵循艾宾浩斯记忆规则
- 逻辑结构
要想同时实现以上所有功能,程序应符合以下逻辑思维:
- 主要代码(仅展示一部分)
- 使用语言——Python
- 虚拟点击
调用的是 pyautogui & pymouse 两个库.
import pyautogui
from pymouse import PyMouse
值得一提的是,PyMouse 中的 click() 函数默认调用一次光标点击两次,但是我无法使得点击次数更小,所以放弃此方法.
m = PyMouse()
m.click(300,30)
因此使用次数可以简单修改的 pyautogui 中的 click() 函数.
pyautogui.click(300,30,clicks=1,button='left')
- 虚拟键盘
调用的是 win32api & win32con 两个库
from win32api import keybd_event
from win32con import KEYEVENTF_KEYUP
具体函数为:
def virtual_input(self):for i in range(0,len(self.string)):vk = VKeyboard(self.string[i])num = vk.vk_switch()keybd_event(num,0,0,0)keybd_event(num,0,KEYEVENTF_KEYUP,0)keybd_event(13,0,0,0)keybd_event(13,0,KEYEVENTF_KEYUP,0)
因此只要找到键对应的值就行,我放在下面:
def vk_switch(self):if self.char=="a" or self.char=="A":num=65if self.char=="b" or self.char=="B":num=66if self.char=="c" or self.char=="C":num=67if self.char=="d" or self.char=="D":num=68if self.char=="e" or self.char=="E":num=69if self.char=="f" or self.char=="F":num=70if self.char=="g" or self.char=="G":num=71if self.char=="h" or self.char=="H":num=72if self.char=="i" or self.char=="I":num=73if self.char=="j" or self.char=="J":num=74if self.char=="k" or self.char=="K":num=75if self.char=="l" or self.char=="L":num=76if self.char=="m" or self.char=="M":num=77if self.char=="n" or self.char=="N":num=78if self.char=="o" or self.char=="O":num=79if self.char=="p" or self.char=="P":num=80if self.char=="q" or self.char=="Q":num=81if self.char=="r" or self.char=="R":num=82if self.char=="s" or self.char=="S":num=83if self.char=="t" or self.char=="T":num=84if self.char=="u" or self.char=="U":num=85if self.char=="v" or self.char=="V":num=86if self.char=="w" or self.char=="W":num=87if self.char=="x" or self.char=="X":num=88if self.char=="y" or self.char=="Y":num=89if self.char=="z" or self.char=="Z":num=90if self.char=="-":num=45return num
- 双线程
要想做到鼠标的自动移动与定位、键盘的自动键入,同时还得检测 user 的中断指令,很明显应该使用双线程来循环检测,我把它模式化出来,即可加入自己的代码块,供他用:
class TT(threading.Thread):TT_i=0input_str=""def __init__(self):threading.Thread.__init__(self)def run(self):while 1:input_kb = input("Enter here: ")if input_kb==' ':self.TT_i=1print("The process has been paused.")else:self.TT_i=0self.input_str=input_kb
def main():my_t = TT()my_t.start()while < Conditional statement >:if my_t.TT_i==1:while 1:input("Please press ENTER twice to go on.")break< your code block >break
- 获取文件位置
import os
path_root=os.path.dirname(os.path.abspath(__file__))
- 其他功能
另外程序里还有各种各样的条件判断、文件写入与读取,这里就不一一列举了,虽然多而杂,一环套一环,但是解决起来还是很明确的.
不过最后值得一提的是欢迎界面真的是我有史以来最好的像素画了^ _ ^:
print("""# # ## ######## ## ####### ###### ### ### ######### # # # ## ## ## # # # # # # ### # # # ####### ## ## # # # # # # ########## ### ## ## # ## # # # # # # ##### ### ######## ######## ####### ###### ### # ### ########""")
print("""____________ ____________ ______ _______|##_#_#_#_#_#| |##_#_#_#_#_#| |##_#| |##_##||##|_______ |##|_______ |##| # ## ###||##_#_#_#_#| |##_#_#_#_#| |##| # # |###||##|_________ |##|_________ _|##| # # |###|_|##_#_#_#_#_#| |##_#_#_#_#_#| |#####| ### |######|""")
- 文件打包
有如下两种情况:
<1>. 生成的可执行程序没有 logo:
pyinstaller [main.py] -p [others_1.py] -p [others_2.py] --hidden-import [own_module_1] --hidden-import [own_module_2] --hidden-import [own_module_3]
<2>. 生成的可执行程序有自己设计的 logo:
pyinstaller -F -i [logo.ico] -w [main.py] -p [others_1.py] -p [others_2.py] --hidden-import [own_module_1] --hidden-import [own_module_2] --hidden-import [own_module_3]
不过在执行两代码时,都出现了:
hidden import ‘sip’ not found
的 WARNING,但是第一类运行出来仍然是可以使用的,第二类就Game Over了,在这里还恳请大佬帮我解释原因。
刚才也说了,没有 logo 才能成功,难道说只能眼睁睁地看着自己设计的 logo 无用武之地了吗?那这就不是博主了!博主使用 Resourse Hacker 来修改可执行程序的 logo 为:
混沌未分天地乱,茫茫渺渺无人见。
自从盘古破鸿蒙,开辟从兹清浊辨。
欲知造化会元功,需用艾宾浩斯线。
自此 EEM 诞生!来来来,来个合照(C位):
三、几句废话
- 此 EEM 程序是博主从 开始构想 到 优化完毕 历时6天完成的,并不是什么高大上的软件,仅仅就是代劳工具罢了。由于在学业夹缝中生存,所以没有做 GUI,即没有做可视化操作界面。但是,博主的朋友能够借此机会初步接触 cmd (命令行) 也未尝不是一件乐事。
- 仅依靠 EEM 并不能实现英语学习,Ta 只是个代劳操作程序,仍旧需要操作对象,但是博主早已为 Ta 找到了绝配嘿嘿。
- 最后,此 EEM 和 词典 博主原则上不打算分享在网络,因为最原始目的就是方便自己,供自己使用,但是肯定也会分享给身边的朋友啦。(Ps:如果哪位网友真的十分好奇、想用,私聊我)
有位伟大的富有哲思的程序员——沃茨基梭德,曾经说过:编程是基于改善生活上的。( 故作镇静.jpg )
Ebbinghaus English Memory ( 艾宾浩斯英语记忆 ) 程序 之 设计思路 与 代码实现相关推荐
- 解读Android 4.0 Camera原生应用程序的设计思路
解读Android 4.0 Camera原生应用程序的设计思路 一篇很不错的文章: http://my.oschina.net/jerikc/blog/90791 1. 设置摄像头方向 2. 打开线程 ...
- c语言编程大体思路,C语言:程序的设计思路跟特点
C语言的一些特点:1. 采用结构化的控制语句,是完全模块化和结构化的语言. 2. 数据类型丰富,具有现代语言的各种数据结构 3. 语法限制不太严格,程序设计自由度大,同时也意味着容错性差. 4. 允许 ...
- 寄生虫程序的设计思路
寄生虫程序特点就是自己什么存储都不做,都让别人去做,当然了,前提条件是别人允许,只不过寄生虫程序过分利用了别人站点的宽容心,况且目标对象本身就是免费的,也就谈不上寄生,只能说是合理运用资源.具体来说也 ...
- html5 翻牌小游戏,html5记忆翻牌游戏实现思路及代码
翻开的2张牌如果配对就会消除,否则2张牌都会返回背面. 需求分析 怎么绘制正的牌面和背的牌面及配对成功后怎么消除牌面 怎么生成牌组并且确定每张牌的位置和对应的图片 怎么洗牌 怎么记录牌组的配对信息 怎 ...
- 基于微信小程序的英语单词记忆系统的设计与实现(论文+源码)_kaic
摘 要 当前时期,国内的经济获得了非常快速的发展,互联网技术在持续的创新和完善,教育教学方面也在不断的进步,教育全面深化改革在发展,并且移动互联网技术在教育领域获得了大量的实践以及应用.语言的全球化 ...
- (转)艾宾浩斯遗忘曲线——记忆与复习
http://www.ebook99.com/blog/post/197.html 艾宾浩斯遗忘曲线--记忆与复习 <从艾宾浩斯遗忘曲线中可以看出我们如潮水般汹涌的遗忘,从中观察时间间隔20分钟 ...
- 英语,程序员永远的痛???//“不要倒在起跑线上”课程介绍
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出版.作者信息和本声明.否则将追究法律责任.本文地址: http://blog.csdn.net/jobchanceleo/archi ...
- 英语对于程序员重要吗?
英语对于程序员重要吗? 一.前言 二.初学需要掌握的英语 三.进阶需要掌握的英语 四.高阶需要掌握的英语 五.如何产生对英语的好感 六.写在最后 一.前言 做项目已经连续两周了,项目不大,但感触颇深, ...
- 11无监听程序_腾讯开心鼠英语 小程序实践与总结
腾讯开心鼠英语 团队中有很多小程序的项目,且后续还会很多小程序的开发和迭代规划,因此我们团队是小程序的重度使用者.在小程序的开发中,团队积累了一些技术和经验,也遇到了一些困难和挑战,还踩了很多坑,因此 ...
- wxWidgets:编写非英语应用程序
wxWidgets:编写非英语应用程序 wxWidgets:编写非英语应用程序 语言环境 源代码中的非英语字符串或 8 位字符 字体映射 转换数据 帮助文件 wxWidgets:编写非英语应用程序 本 ...
最新文章
- 610D - Vika and Segments(线段树+扫描线+离散化)
- 如何识别高级的验证码
- 最长不下降子序列java代码_浅谈最长不下降子序列与最长上升子序列
- MyEclipse、eclipse代码自动补全
- xtrabackup压缩备份多线程备份(lz4,pigz)全详解
- java jli.dll_JVM、JRE、JDK之间的区别和联系,你居然还不知道?
- Servlet技术简介与编写、编译Servlet程序
- R包ggseqlogo |绘制序列分析图
- Java基础入门笔记-添加包
- java 档案管理系统论文_基于JAVA学生档案管理系统论文.doc
- C++.Net在Release方式下单步调试时需要修改一些设置,否则变量会有错位或乱码,切记!...
- MyBatis映射文件4(参数获取#{}和${}/select标签详解[返回类型为list])
- 南京邮电大学离散数学实验一:利用真值表法求取主析取范式以及主合取范式的实现
- forEach和map的区别,简单写了IE低版本的原形封装
- 数据处理之衡量数据远近的多种距离公式
- 淘宝京东商品长链接缩短为腾讯,新浪短链接的接口有哪些?
- LeetCode-Python-273. 整数转换英文表示
- 数据寻址方式(10种)
- 字符串操作函数strstr
- 计算机视觉知识学习总结
热门文章
- 1230v3配服务器内存性能提升,E3 1230 V3四核3.7G睿频福利教程及评测
- Mac/Linux/Windos下仿站工具,基于Python的仿站工具,earnp/imitation仿站工具发布
- php微信推送的模板信息内容都是空,微信模板消息 推送成功 但是内容显示空白...
- 在centos安装oracle客户端,centos下安装oracle客户端
- BIGEMAP如何下载高程卫星地图
- golang实现子网掩码和网络位长度相互转换
- 思科OSPF配置实例
- iOS Charles(青花瓷)安装
- 最新地形测量全套实习任务指导
- 【编译打包】btsync-1.2.82-beta.el6.src.rpm