睡眠改善计划 (bbc纪录片:睡眠十律 )

我睡眠一直不太好,晚上睡不着,早上起不来,很累。看到 BBC 有个纪录片「睡眠十律」,于是记录下来,试着改善自己的睡眠

中文翻译为「睡眠十律」,但是其实说「律」有点太过了,纪录片中对这些促进睡眠的方式并没有下结论,保证有效,只是一个科学教的探索罢了。所以,真的不一定有效。并且,十个方法对于普通人不一定可行,我在观看时,顺便对这十个方法做了简单的记录:

  1. 睡前 1h 泡个热水澡(在浴缸里),体内温度升高,然后让身体(内部)逐渐冷却,纪录片中说,冷会让人产生睡意。
  2. 睡眠时间限制计划:为期4周时间,每次在卧室只能呆6h,2:00到8:00,到了时间必须起床;刚开始可能非常痛苦,一旦打破了你生物时钟,你就赢了。
  3. 打盹儿补充睡眠:下午2点到5点通常容易打盹,每次建议30min-60min。其它时间尽量控制。片中主要针对以为海上航行的运动员,睡眠不充足,通过打盹补充回来。
  4. 治疗齁声:睡眠后,呼吸道肌肉松弛下来,呼吸道变窄,呼吸时,口腔、鼻腔、软组织发生振动,产生齁声。两种方式,通过在嘴里含东西。没有说更多的东西。
  5. 酒精和咖啡对睡眠的影响:都是不好的。咖啡伤人难以入睡;酒精促进人入睡,但是睡眠的后半部分质量可能比较差。
  6. 利用「蓝光灯」来影响体内的激素水平,来提高起床后的精神状态:一种叫退黑色素的在夜间分泌,让人产生困意。如果利用光照,眼睛中一种特殊细胞受到刺激,会将信息传递给大脑,减退退黑色素的分泌,从而让人清醒——对于必须早起的人有效。片中以bbc的一个早间节目的主播为例。
  7. 食物影响睡眠:富含碳水化合物的食物让人更有睡意;蛋白质食物让人更加清醒。最好睡觉前4h小时进食。
  8. 食物钟控制睡眠——用来倒时差:16小时饥饿会激活食物钟(food clock)。所以,测试通过挨饿来同步食物钟,食物钟激活后(就是挨饿16h 后),会抑制睡眠,这个时候的第一顿按照当地时间的食物非常重要,这顿饭会将你的生物时钟调整为新时区的时间。所以「禁食旅行」吧。片中是以要全球参加比赛的运动员为例,帮助他们倒时差。
  9. 肌肉收紧放松练习:针对持续亢奋,精神状态太好以至于睡不着的人。睡前15min循环做全身肌肉收紧、放松,让自己放松下来。
  10. 自然疗法:薰衣草的味道让你放松;缬草也有类似功效。

纪录片中,这十个方法对于受测试的人都很有效,真是让人难以置信。

另外,知乎上也提到了一个方法:睡前看书,zhihu上说《高等数学》同济1版效果奇好

作为一般人,我觉得 1 、3 、9 倒是可以尝试下;女生也可以薰衣草的熏香。

我现在在尝试睡眠限制计划,有效果再补充!

使用google chrome抓取数据:抓取全国的高中

KEY WORDS : Chrome插件 数据抓取


1.数据源

正在做一个网站,需要全国的中学数据,中学数据比较全的应该是人人网了,简单搜索发现 http://xuexiao.eol.cn/ 也有比较全的数据,并且还有地址信息,所以决定不从人人网抓取了。

2.抓取数据的思路

作为一名「优秀」的前端工程师,当然使用 javascrpt 来抓取啦,浏览器提供了便捷的 API,处理 DOM 信息比写后端程序方便太多了。

查看「中国教育信息」黄页——黄页这种叫法好像是很多年前的事情了,可以看到三部分,挨个遍历下去,并处理分页抓取学校名称就可以了。

数据源

思路如下:

  1. 获取左边的省份列表
  2. 处理该省份的城市
  3. 然后挨个分页抓取就行了

3部分对应的主要代码如下(网站已经提供了 jQuery 了):

//1. function getAllProv(){
  return ["北京", "上海", "天津", "四川", "安徽", "江苏", "浙江", "辽宁", "山西", "福建", "广东", "广西", "海南", "河南", "湖南", "陕西", "湖北", "江西", "河北", "山东", "重庆", "青海", "吉林", "云南", "贵州", "甘肃", "宁夏", "新疆", "西藏", "内蒙古", "黑龙江"];
}
//2. function setCurrentCitiesOfProv(prov){
  return $.map($(".quyu_list a"),function(a){
                               var query = a.getAttribute('href');
                               var val = getQueryStringParameter(query,"local2");
                               return decodeURI(val.replace('_local2',''));
                             });
}
//3. function savePageData(){
  var prov = getCurrentProv();
  var city = getCurrentCityOfProv(prov);
  var schools = $('.right_box');
  var rows = [];
  $.map(schools,function(school){
    var name = $('h2',school).text().trim();
    var detail = $('h3',school).text().trim();
    var parts = detail.split(/\s+/);

    var row = {};
    row.name = name;
    // row.prov = decodeURI(prov);
    row.city = city;

    $.each(parts,function(i,item){
      var o = {
          "地址":"address",
          "邮编":"mailno",
          "电话":"phone"
      };
      var ab = item.split(':');
      var key = o[ab[0]];
      row[key] = ab[1];
    });
    rows.push(row);
  })
  saveStore(rows);// 存储本页的数据
}
注意,上面的脚本只表示了三个步骤,不能直接运行

3.将脚本封装为 Chrome 插件

单个页面的逻辑已经处理完毕了,怎么让浏览器自动抓取下去呢?答案很简单:将脚本变为 chrome 的一个插件,每次 http://xuexiao.eol.cn/ 这个站点的页面载入后,都执行上面写好的脚本就行了,每页的学校数据处理完毕后,脚本自动改变 url,刷新获取下页的数据。

实现一个 chrome 插件,使用 userscript 的方式是最简单的,安装好插件后,插件载入一个脚本,之行上面描述的三步逻辑,并且自动刷新到下面一页。这里比较关键的一个步骤是存储所有的省份、城市,并计算出下页的的 url 。具体请看后面附的完整代码。

那么具体怎么实现呢?

  1. 创建一个 manifest.json,这个是 chrome userscript 的声明文件
  2. 创建一个 contentscript.js (名字随意,但是在 manifest.json 中要对应),这个脚本的作用仅仅是一个脚本加载器,载入 script.js 执行页面数据抓取逻辑。为什么要这样做呢?因为contentscript.js的之行环境和真是页面的执行环境是隔离的,也就是说contentscript.js的一个变量和页面中的变量可以独立存在,它们属于两个世界,这样做的好处在于,比如你可以独立的运行不同版本的jQuery,而不冲突。 javascript 虽独立运行,但是 dom 接口却是共享的,比如 document.createElement(‘script’) 创建一个脚本并插入到 dom 中,可以实现网页面载入一个脚本的目的, 可以将插件中的 script.js 插入运行中的文档中,每次页面载入都会执行 script.js 。
  3. 创建一个 script.js (名字随意,但是在 manifest.json 中要对应),用于处理真正的数据抓取逻辑。script.js 会将得到的数据存入 localStorage 中,那么所有载入的页面就可以共享这个数据了。

由于写文章的时候,数据抓取工作还没有完成,就不附上抓取的数据了,页面每秒中才刷新一次,并且只有一个页面在跑,比较慢。要数据的请联系我。

4.插件代码

https://github.com/WeweTom/chrome-extension-data-picker