减肥相关

最近要减肥,需要注意的:

  • 饮食
    • 低碳
    • 低脂少油,蔬菜为主
  • 运动
    • 跑步
      • 姿势
      • 地点
      • 装备
        • 随身携带的水等
      • 注意事项
      • 肌肉酸疼恢复 https://zhuanlan.zhihu.com/jszxs/19889322
        • 1. 摄入大量的水果和蔬菜,补充抗氧化剂,防止自由基攻击正在修复的肌细胞。

          2. 补充蛋白质(牛肉、鱼肉、牛奶等),为修复肌纤维提供直接的原料。根据个人操作经验,在补充足够量蛋白质的情况下,延迟性酸痛会被大大缓解。

          3. 运动后及时补充糖分(蜂蜜水,运动饮料),填补运动时损失的肌糖原。

  • 睡眠

建站经验

最近要好好处理一下自己的网站,主要目标有:

  • 备案
    • https://help.aliyun.com/knowledge_detail/36922.html
    • 重要域名不能放在阿里云
  • WordPress自动备份:1. 主要文本内容的备份 2.图片视频等的备份
  • 图床:最好用对象存储做图床,服务器有不稳定性
  • 长期稳定的服务器:缺钱
  • https:加密和部分开发需要
    • https://www.zhihu.com/question/19578422
    • 要求免费的证书
    • 在没完成之前敏感信息使用vpn

其他:

看看做公众号

nodejs学习

前言

软设使用electron框架,故学习nodejs

教程

菜鸟教程(发现这家还不错) http://www.runoob.com/nodejs/nodejs-tutorial.html

 

docker使用

前言

为什么用docker:满足轻量级的虚拟化需求,其实还能做快速部署的

环境:mac10.11

教程

官方中文教程 http://blog.csdn.net/jpiverson/article/details/50684621

注意

网络随时有问题

可以用daocloud.io加速镜像,但是并不知道其文档不推荐docker tool box

 

服务计算

xmlrpc

顺便学下xml

http://baike.baidu.com/link?url=GRXa_SCvz1e8APewohyUxj1nZBIpis2RRJBaG_wJRs0rxRFbOq08f9TzSXMH96nSZC9fuowbbLLs15vdfvdY2ZrP0elDTtGS6kdoJHHuhzC

未来几天的打算

  • 准备入住创业园
  • 完成俱乐部的招新和交接
  • 完成当前工作
    • work1 translate completed
    • work2 data visualization
    • work3 vpn website
    • work4 poa
  • 保证本学期课程通过
  • ltp research
  • 聚餐
  • php5–>php7的研究
  • others

管理 与 吹比

百度链接  https://www.baidu.com/s?wd=%E5%AD%99%E4%B9%89%E6%96%87%20%E8%AF%BE%E7%A8%8B&pn=10&oq=%E5%AD%99%E4%B9%89%E6%96%87%20%E8%AF%BE%E7%A8%8B&ie=utf-8&rsv_pq=f44c4194000227d4&rsv_t=ecd2WKihSxR3MziGSEpau527%2Bl8L2VS0VY9nBcpD18u%2FsYAFv0QWywQJHPA&rsv_page=1 孙一文的吹比 看喜马拉雅的录音

html audio

背景需求

公司的某个系统需要提示音,所以研究下音频播放

提示音因为简单,所以不打算上音频库,于是自己写一小段js.

需求:

  • 播放指定音频
  • 连续有序播放指定某些音频

资源

w3school

某大佬博客 基本函数,属性,时间参见这

MDN中audio

一堆插件

想法

在需求中的需求2,可以通过音频连接实现,但是没有意义的消耗计算性能

所以通过音频的连续播放实现

实现

在Audio对象播放完成后会出发ended事件,这时候顺手播放下一个

代码

 

var playOrder = function(){
  // TODO 
  // 异常处理
  this.files = {};
  this.filesConfig = {}
  this.orders = {};
  this.voiceChain = []
  this.setFiles = function(filesConfig){
    this.filesConfig = filesConfig;
  }
  this.setOrders = function(ordersConfig){
    this.orders = ordersConfig;
  }
  this.loadfiles = function(){
    for (file in this.filesConfig){
      var temp = new Audio(this.filesConfig[file]);
      if (temp.error == null){
        this.files[file] = temp;
      }else if (temp.error.code == 4){
        // error code 4 : wrong url
        consle.log("load file " + file + " failed");
      }
    }
  }
  var combile = function(voiceChain){
    function getNext(a,voiceChain){
      for (var i =  0; i < voiceChain.length; i++){
        if (voiceChain[i] == a && i < voiceChain.length){
          return voiceChain[i+1];
        }
      }
      return false;
    }
    var l = voiceChain.length;
    for (var i = 0; i < l-1; i++){
      var temp = voiceChain[i+1]
      //播放结束时添加下一个
      voiceChain[i].addEventListener("ended",function(e){
        //获得下一个文件
        var nextAudio = getNext(e.target,voiceChain);
        if (!nextAudio){
          console.log("last");
        }else{
          nextAudio.play();
        }
      });
    }
    return voiceChain[0];
  }
  // 如果需要间隔,可以在这里加settimeout,因为连续播放时基于时间的,所以settimeout不会遇到异步流程控制的问题
  this.getOrder = function(order){
    if (!(order in this.orders)){
      return false;
    }
    var arr = this.orders[order];
    //检查文件载入
    for (audio in arr){
      if (!(arr[audio] in this.filesConfig)){
        return false;
      }
    }
    //生成播放序列
    this.voiceChain = null
    this.voiceChain = []
    for (audio in arr){
      // 从缓存中加载 或者直接加载
      this.voiceChain.push(new Audio(this.filesConfig[arr[audio]]));
    }
    return combile(this.voiceChain);
  }
  this.playOrder = function(order){
    var start = this.getOrder(order);
    if (start){
      start.play();  
      //释放内存
      this.voiceChain = null
      this.voiceChain = []
      return true;
    }else{
      //释放内存
      this.voiceChain = null
      this.voiceChain = []
      return false;
    }
  }
}
<!DOCTYPE html>
<html>
<head>
  <title>audio play demo</title>
  <meta name="name" content="content" charset="utf-8">
</head>
<body>
  <script type="text/javascript" src="playOrder.js"></script> 
  <script type="text/javascript">
    files = {
      "a1": "./wav/1.wav",
      "a2": "./wav/2.wav",
      "a3": "./wav/3.wav",
      "a4": "./wav/4.wav"
    }
    orders = {
      "234": ["a2","a3","a4"],
      "432": ["a4","a3","a2"],
      "23333": ["a2","a3","a3","a3","a3"]
    }
    var player = new playOrder();
    player.setFiles(files);
    player.setOrders(orders);
    //load files 非必要
    player.loadfiles();
    player.playOrder("432");
  </script>
</body>
</html>