鹭岛拾光
放慢了步伐,只为跑得更远~
2019-07-14T10:23:42.239Z
http://blog.terrancy.com/
terrancy
terrancy@qq.com
Hexo
fail2ban,运维们首选的"看门狗"
http://blog.terrancy.com/2019/07/14/fail2ban/
2019-07-14T05:40:00.000Z
2019-07-14T10:23:42.239Z
<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>使用Fail2ban结合iptables来协助运维们阻止某些恶意的端口扫描和ssh密码破解.只要达到规定设置的失败次数,根据逻辑规则,该ip地址会自动被加入iptable黑名单之内.</p>
<h2 id="参考资料"><a href="#参考资料" class="headerlink" title="参考资料"></a>参考资料</h2><ul>
<li><a href="https://www.jianshu.com/p/4fdec5794d08" target="_blank" rel="external">CentOS7下安装和使用Fail2ban</a></li>
</ul>
使用Fail2ban结合iptables来协助运维们阻止某些恶意的端口扫描和ssh密码破解.
放开你的鼠标,让我来!!
http://blog.terrancy.com/2019/07/13/coding-without-mouse/
2019-07-13T12:29:51.000Z
2019-07-13T12:39:04.302Z
<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>使用笔记本电脑之后已经习惯使用触摸板代替鼠标,编程的时候利用编辑器的快捷方式可以进一步抛弃触摸板.对于一个轻度的洁癖者而言,保持桌面尽量干净整洁是多么舒服的一件事哈.</p>
<h2 id="参看资料"><a href="#参看资料" class="headerlink" title="参看资料"></a>参看资料</h2><p><a href="https://isudox.com/2017/06/25/coding-with-keyboard-no-mouse/" target="_blank" rel="external">扔掉鼠标,开始键盘流编程</a></p>
使用笔记本电脑之后已经习惯使用触摸板代替鼠标,编程的时候利用编辑器的快捷方式可以进一步抛弃触摸板.
Zabbix告警机制与应用
http://blog.terrancy.com/2019/07/11/Head-First-Zabbix-Alert-System/
2019-07-10T23:40:29.000Z
2019-07-15T00:52:59.484Z
<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><!-- 使用Zabbix监控主机信息并做相应的告警,本文主要介绍告警机制以及相应的配置,第三方告警机器人.比如钉钉机器人,企业微信,电报机器人等. -->
<p>节点主机就像运维人员的孩子一样,需要时刻去关注各个节点主机的情况.运维需要合理利用Zabbix这样的高级管家帮我们了解节点主机的各项指标,一旦待监控指标特征值异常需要及时发起告警.<br>更重要的是,我们希望能实现阶梯式告警,不用事事必躬.这样可以根据问题的轻重缓急及时有效的通知到特定的群体组织.</p>
<h2 id="告警机制"><a href="#告警机制" class="headerlink" title="告警机制"></a>告警机制</h2><h3 id="原理"><a href="#原理" class="headerlink" title="原理"></a>原理</h3><p>Zabbix告警机制主要在于三项指标:监控项(items),触发器(triggers),动作(actions).根据具体的业务类型组合成各种不同模板(templates).</p>
<ul>
<li><strong>监控项</strong>: 为节点主机配置好不同的监控项,让zabbix-agent收集主机的相关特征值.比如CPU,内存,进程数,服务器负载等.</li>
</ul>
<p><img src="http://resource.blog.terrancy.com//article/zabbix/zabbix-items1.jpg" alt="监控项"><br><strong><em>监控项中的”更新间隔”即是数据采集频率.</em></strong></p>
<ul>
<li><strong>触发器</strong>:在触发器设置好临界指标(表达式)和警报级别(严重性),当满足条件时执行相应的动作.</li>
</ul>
<p><img src="http://resource.blog.terrancy.com//article/zabbix/zabbix-triggers.jpg" alt="触发器"></p>
<ul>
<li><strong>动作</strong>:zabbix监控到异常数据需要发起警报动作.通过媒体介质(meida type)通知相关人员.<br>可以在动作配置中设置好告警频率(默认操作步骤持续时间)以及告警次数(步骤).</li>
</ul>
<p><img src="http://resource.blog.terrancy.com//article/zabbix/zabbix-actions1.jpg" alt="动作"></p>
<h3 id="使用"><a href="#使用" class="headerlink" title="使用"></a>使用</h3><h2 id="告警应用"><a href="#告警应用" class="headerlink" title="告警应用"></a>告警应用</h2><p>关于告警的应用,根据问题的情况实际情况使用不同的通知方式.比如邮件告警,钉钉告警,电报告警,短信告警甚至使用电话语音告警.将问题最有效的通知到指定的群组.以下简单介绍邮件和钉钉告警的配置与使用.</p>
<h3 id="邮件告警"><a href="#邮件告警" class="headerlink" title="邮件告警"></a>邮件告警</h3><h4 id="邮件配置"><a href="#邮件配置" class="headerlink" title="邮件配置"></a>邮件配置</h4><p>在zabbix平台上找到管理->报警媒介类型列表,找到Email选项.填写邮件服务器相关信息.参照腾讯<a href="https://service.exmail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001254" target="_blank" rel="external">企业邮箱</a>的邮件服务器配置,以下以腾讯企业邮箱SMTP协议配置为例.相关配置实例图如下,</p>
<p><img src="http://resource.blog.terrancy.com/article/zabbix/zabbix-email1.jpg" alt="Zabbix告警邮件配置"></p>
<p>如上所示,邮件配置涉及到如下.</p>
<table>
<thead>
<tr>
<th>参数</th>
<th style="text-align:center">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>SMTP服务器</td>
<td style="text-align:center">smtp.exmail.qq.com</td>
</tr>
<tr>
<td>端口</td>
<td style="text-align:center">465(使用的是SSL协议)</td>
</tr>
<tr>
<td>SMTP电邮</td>
<td style="text-align:center">发件人邮箱,比如notice@terrancy.com</td>
</tr>
<tr>
<td>用户名称</td>
<td style="text-align:center">发件人邮箱,比如notice@terrancy.com</td>
</tr>
<tr>
<td>密码</td>
<td style="text-align:center">发件人邮件密码</td>
</tr>
</tbody>
</table>
<h4 id="微信通知"><a href="#微信通知" class="headerlink" title="微信通知"></a>微信通知</h4><p>使用腾讯企业邮箱结合微信小程序.在<strong>下班</strong>时间期间,将所有的警报通过微信小程序及时通知相关干系人.</p>
<h3 id="钉钉告警"><a href="#钉钉告警" class="headerlink" title="钉钉告警"></a>钉钉告警</h3><p>使用钉钉群内机器人.在<strong>上班</strong>期间,将警报信息通知到相关人员.</p>
<h4 id="申请机器人"><a href="#申请机器人" class="headerlink" title="申请机器人"></a>申请机器人</h4><ul>
<li>在钉钉群设置里面选择”自定义”机器人,输入机器人名字和需要发送消息的群之后可以获得相应的Hook地址.其格式如下:</li>
</ul>
<blockquote>
<p><a href="https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx" target="_blank" rel="external">https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx</a></p>
</blockquote>
<p><img src="http://img01.taobaocdn.com/top/i1/LB1lIUlPFXXXXbGXFXXXXXXXXXX#align=left&display=inline&height=294&originHeight=1372&originWidth=2088&status=done&width=447" alt="钉钉自定义群机器人申请"></p>
<h4 id="消息推送"><a href="#消息推送" class="headerlink" title="消息推送"></a>消息推送</h4><p>通过官方提供的<a href="https://open-doc.dingtalk.com/microapp/serverapi2/qf2nxq" target="_blank" rel="external">消息推送API</a>,将消息推送指定的钉钉运维群.</p>
<ul>
<li>推送的参数实例:</li>
</ul>
<figure class="highlight json"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div></pre></td><td class="code"><pre><div class="line">{</div><div class="line"> <span class="attr">"msgtype"</span>: <span class="string">"text"</span>,</div><div class="line"> <span class="attr">"text"</span>: {</div><div class="line"> <span class="attr">"content"</span>: <span class="string">"这是消息推送的内容"</span></div><div class="line"> },</div><div class="line"> <span class="attr">"at"</span>: {</div><div class="line"> <span class="attr">"atMobiles"</span>: [</div><div class="line"> ],</div><div class="line"> <span class="attr">"isAtAll"</span>: <span class="literal">true</span></div><div class="line"> }</div><div class="line">}</div></pre></td></tr></table></figure>
<ul>
<li>参数说明:</li>
</ul>
<table>
<thead>
<tr>
<th>参数</th>
<th style="text-align:center">参数类型</th>
<th style="text-align:center">必须</th>
<th style="text-align:center">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>msgtype</td>
<td style="text-align:center">String</td>
<td style="text-align:center">是</td>
<td style="text-align:center">消息类型,此时固定为:text</td>
</tr>
<tr>
<td>content</td>
<td style="text-align:center">String</td>
<td style="text-align:center">是</td>
<td style="text-align:center">消息内容</td>
</tr>
<tr>
<td>atMobiles</td>
<td style="text-align:center">Array</td>
<td style="text-align:center">否</td>
<td style="text-align:center">被@人的手机号(在content里添加@人的手机号)</td>
</tr>
<tr>
<td>isAtAll</td>
<td style="text-align:center">bool</td>
<td style="text-align:center">否</td>
<td style="text-align:center">@所有人时:true,否则为:false</td>
</tr>
</tbody>
</table>
<ul>
<li>告警脚本<br>根据钉钉自定义机器人文本消息推送API,可以写个精简的告警脚本.</li>
</ul>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div></pre></td><td class="code"><pre><div class="line"><span class="meta">#!/bin/bash</span></div><div class="line"><span class="comment">#dingding.sh</span></div><div class="line"></div><div class="line">webhook=<span class="string">"https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx"</span></div><div class="line">user=<span class="variable">$1</span></div><div class="line">text=<span class="variable">$3</span></div><div class="line">data=<span class="string">'{"msgtype":"text","text":{"content":${text}},"at":{"atMobiles":[${user}],"isAtAll":false}}'</span></div><div class="line"></div><div class="line">headers=<span class="string">'Content-Type: application/json'</span></div><div class="line">curl <span class="string">"<span class="variable">${webhook}</span>"</span> -H <span class="string">"<span class="variable">${headers}</span>"</span> <span class="_">-d</span> <span class="string">"<span class="variable">${data}</span>"</span></div></pre></td></tr></table></figure>
<p>将相应的bash脚本存放在zabbix告警文件夹(比如/usr/lib/zabbix/alertscripts),并赋予其相应的权限.</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">find / -name alertscripts</div><div class="line">chown -R zabbix:zabbix /usr/lib/zabbix/alertscripts</div><div class="line">chown -R 755 /usr/lib/zabbix/alertscripts</div></pre></td></tr></table></figure>
<p>在Zabbix平台的配置如下图所示.<br><img src="http://resource.blog.terrancy.com/article/zabbix/zabbix-ding1.jpg" alt="Zabbix告警钉钉配置"></p>
<h3 id="其他警告"><a href="#其他警告" class="headerlink" title="其他警告"></a>其他警告</h3><p>微信告警和钉钉告警是针对在国内情况下常用警报方式,如果是在国外可以选择使用电报机器人.</p>
<h2 id="参考资料"><a href="#参考资料" class="headerlink" title="参考资料"></a>参考资料</h2><ul>
<li><a href="https://www.cnblogs.com/hjfeng1988/p/9645028.html" target="_blank" rel="external">Zabbix数据采集频率.数据连续多次异常触发.告警次数.告警频率</a></li>
<li><a href="https://open-doc.dingtalk.com/microapp/serverapi2/qf2nxq" target="_blank" rel="external">钉钉-群机器人-自定义机器人</a></li>
</ul>
使用Zabbix监控主机信息并做相应的告警,本文主要介绍告警机制以及相应的配置,第三方告警机器人.
Zabbix应用实例初探
http://blog.terrancy.com/2019/07/09/Head-First-Zabbix/
2019-07-09T00:20:35.000Z
2019-07-12T09:02:59.456Z
<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>随着业务项目的逐渐增加,一个项目的可能就需要好几个服务器.如果有好几个项目一起管理的话,运维手上的服务器少则十几个多则上百个很正常.运维不可能按照以往处理单服务器的方式解决问题,需要有个高效并且好用的服务器管家来协助他们处理服务器问题,运维的要求很简单,比如监控服务器性能并即时告警.这样的运维监控系统,既可以缓解运维管理压力,又大大减低运维门槛.</p>
<p>市场上流行运维监控系统有很多,这里简单讲解下Zabbix基础知识.</p>
<h2 id="基本信息"><a href="#基本信息" class="headerlink" title="基本信息"></a>基本信息</h2><h3 id="架构"><a href="#架构" class="headerlink" title="架构"></a>架构</h3><p>zabbix使用的是master/agent方式.我们将zabbix-agent部署在节点主机上,有agent负责收集相关的数据.zabbix-server作为中心服务器,负责接收并监控节点主机的信息并做及时处理.<br><img src="http://resource.blog.terrancy.com/article/zabbixzabbix-framework1.png" alt="zabbix架构"></p>
<h3 id="组件"><a href="#组件" class="headerlink" title="组件"></a>组件</h3><ul>
<li>zabbix agent:部署在节点主机上,负责收集节点主机信息,并发送给zabbix-server.</li>
<li>zabbix server:负责接收数据,监控并处理.</li>
<li>zabbix web:可视化管理界面,查看监控数据和配置告警等等.</li>
</ul>
<h3 id="工作方式"><a href="#工作方式" class="headerlink" title="工作方式"></a>工作方式</h3><p>zabbix工作分为主动模式和被动模式.</p>
<ul>
<li>主动模式:agent负责收集数据,将收集的信息<strong>主动</strong>发送给server端,称之为主动模式.</li>
<li>被动模式:agent只负责收集数据,等待server端来<strong>拉取</strong>数据,称之为被动模式.</li>
</ul>
<p>特别的,主动模式和被动模式可以同时开启,两者并不冲突.配置在agent配置文件上.</p>
<h2 id="环境部署"><a href="#环境部署" class="headerlink" title="环境部署"></a>环境部署</h2><h3 id="server端部署"><a href="#server端部署" class="headerlink" title="server端部署"></a>server端部署</h3><p>测试环境下,Server端选择使用docker方式部署zabbix.这里参考网上的文档使用docker编排工具编译.</p>
<figure class="highlight yml"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div><div class="line">49</div><div class="line">50</div><div class="line">51</div><div class="line">52</div><div class="line">53</div><div class="line">54</div><div class="line">55</div><div class="line">56</div><div class="line">57</div><div class="line">58</div><div class="line">59</div><div class="line">60</div><div class="line">61</div><div class="line">62</div><div class="line">63</div><div class="line">64</div><div class="line">65</div><div class="line">66</div><div class="line">67</div><div class="line">68</div></pre></td><td class="code"><pre><div class="line"><span class="attr">version:</span> <span class="string">'3'</span></div><div class="line"><span class="attr">services:</span></div><div class="line"><span class="attr"> mysql:</span></div><div class="line"><span class="attr"> image:</span> swr.cn-north<span class="bullet">-1.</span>myhuaweicloud.com/rj-bai/zabbix-mysql:<span class="number">5.7</span></div><div class="line"><span class="attr"> environment:</span></div><div class="line"><span class="attr"> MYSQL_USER:</span> zabbix</div><div class="line"><span class="attr"> MYSQL_DATABASE:</span> zabbix</div><div class="line"><span class="attr"> MYSQL_PASSWORD:</span> zabbix</div><div class="line"><span class="attr"> MYSQL_ROOT_PASSWORD:</span> Sowhat?</div><div class="line"><span class="attr"> volumes:</span></div><div class="line"><span class="bullet"> -</span> /data/mysql/zabbix:/var/lib/mysql</div><div class="line"><span class="attr"> ports:</span></div><div class="line"><span class="bullet"> -</span> <span class="number">3306</span>:<span class="number">3306</span></div><div class="line"><span class="attr"> restart:</span> always</div><div class="line"><span class="attr"> networks:</span></div><div class="line"><span class="bullet"> -</span> zabbix</div><div class="line"></div><div class="line"><span class="attr"> zabbix-java-gateway:</span></div><div class="line"><span class="attr"> image:</span> swr.cn-north<span class="bullet">-1.</span>myhuaweicloud.com/rj-bai/zabbix-java-gateway:<span class="number">4.0</span><span class="number">.1</span></div><div class="line"><span class="attr"> ports:</span></div><div class="line"><span class="bullet"> -</span> <span class="number">10052</span>:<span class="number">10052</span></div><div class="line"><span class="attr"> restart:</span> always</div><div class="line"><span class="attr"> networks:</span></div><div class="line"><span class="bullet"> -</span> zabbix</div><div class="line"></div><div class="line"><span class="attr"> zabbix-server:</span></div><div class="line"><span class="attr"> image:</span> swr.cn-north<span class="bullet">-1.</span>myhuaweicloud.com/rj-bai/zabbix-server:<span class="number">4.0</span><span class="number">.1</span></div><div class="line"><span class="attr"> environment:</span></div><div class="line"><span class="attr"> ZBX_JAVAGATEWAY:</span> zabbix-java-gateway</div><div class="line"><span class="attr"> ZBX_JAVAGATEWAY_ENABLE:</span> <span class="string">"true"</span></div><div class="line"><span class="attr"> DB_SERVER_HOST:</span> mysql</div><div class="line"><span class="attr"> MYSQL_DATABASE:</span> zabbix</div><div class="line"><span class="attr"> MYSQL_USER:</span> zabbix</div><div class="line"><span class="attr"> MYSQL_PASSWORD:</span> zabbix</div><div class="line"><span class="attr"> MYSQL_ROOT_PASSWORD:</span> Sowhat?</div><div class="line"><span class="attr"> links:</span></div><div class="line"><span class="bullet"> -</span> mysql</div><div class="line"><span class="attr"> ports:</span></div><div class="line"><span class="bullet"> -</span> <span class="number">10051</span>:<span class="number">10051</span></div><div class="line"><span class="attr"> depends_on:</span></div><div class="line"><span class="bullet"> -</span> mysql</div><div class="line"><span class="attr"> restart:</span> always</div><div class="line"><span class="attr"> networks:</span></div><div class="line"><span class="bullet"> -</span> zabbix</div><div class="line"></div><div class="line"><span class="attr"> zabbix-web:</span></div><div class="line"><span class="attr"> image:</span> swr.cn-north<span class="bullet">-1.</span>myhuaweicloud.com/rj-bai/zabbix-web:<span class="number">4.0</span><span class="number">.1</span></div><div class="line"><span class="attr"> environment:</span></div><div class="line"><span class="attr"> PHP_TZ:</span> Asia/Shanghai</div><div class="line"><span class="attr"> DB_SERVER_HOST:</span> mysql</div><div class="line"><span class="attr"> MYSQL_DATABASE:</span> zabbix</div><div class="line"><span class="attr"> MYSQL_USER:</span> zabbix</div><div class="line"><span class="attr"> MYSQL_PASSWORD:</span> zabbix</div><div class="line"><span class="attr"> MYSQL_ROOT_PASSWORD:</span> Sowhat?</div><div class="line"><span class="attr"> links:</span></div><div class="line"><span class="bullet"> -</span> mysql </div><div class="line"><span class="attr"> ports:</span></div><div class="line"><span class="bullet"> -</span> <span class="number">80</span>:<span class="number">80</span></div><div class="line"><span class="attr"> depends_on:</span></div><div class="line"><span class="bullet"> -</span> zabbix-server</div><div class="line"><span class="bullet"> -</span> mysql</div><div class="line"><span class="attr"> restart:</span> always</div><div class="line"><span class="attr"> networks:</span></div><div class="line"><span class="bullet"> -</span> zabbix</div><div class="line"></div><div class="line"><span class="attr">networks:</span></div><div class="line"><span class="attr"> zabbix:</span></div><div class="line"><span class="attr"> driver:</span> bridge</div></pre></td></tr></table></figure>
<p>部署后的容器信息如下:</p>
<p><img src="http://resource.blog.terrancy.com/article/zabbixzabbix-docker1.jpg" alt="zabbix-master-dockers"></p>
<h3 id="agent端部署"><a href="#agent端部署" class="headerlink" title="agent端部署"></a>agent端部署</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">rpm -i https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm</div><div class="line">yum -y install zabbix-agent-4.0.1</div></pre></td></tr></table></figure>
<p>安装后的配置文件如下:</p>
<p><img src="http://resource.blog.terrancy.com/article/zabbixzabbix-agent-docker1.jpg" alt="agent端配置"></p>
<h2 id="参考资料"><a href="#参考资料" class="headerlink" title="参考资料"></a>参考资料</h2><ul>
<li><a href="http://www.zsythink.net/archives/447/" target="_blank" rel="external">zabbix入门</a></li>
<li><a href="https://blog.rj-bai.com/post/144.html" target="_blank" rel="external">zabbix docker部署</a></li>
</ul>
在现实场景下使用Zabbix监控工具辅助开发,提高项目容灾能力.
跑步心得体会
http://blog.terrancy.com/2019/03/10/the-basical-tutorial-about-running/
2019-03-09T23:30:22.000Z
2019-08-16T09:04:51.559Z
<p><img src="https://images.chinatimes.com/newsphoto/2019-04-24/900/20190424001780.jpg" alt="跑者马拉松"></p>
<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>相信有很多人觉得自己胖了,尝试通过跑步来减重.有些人确实做到了,也有很多人放弃了.<br>那么,跑步究竟能否起到减重的效果吗?现我们来稍微分析下.</p>
<h3 id="分析"><a href="#分析" class="headerlink" title="分析"></a>分析</h3><h4 id="1-减重为什么要去跑步"><a href="#1-减重为什么要去跑步" class="headerlink" title="1.减重为什么要去跑步?"></a>1.减重为什么要去跑步?</h4><ul>
<li><p>[x] <strong><em>成本低</em></strong><br>跑步需要一双舒适的运动跑鞋,加上一套吸汗干爽的衣服就足够.成本普遍在400左右甚至更低.(真想玩,其实也烧钱)</p>
</li>
<li><p>[x] <strong><em>场地多</em></strong><br>跑步对场地要求相对较低.秋高清爽的清晨里试试下公路跑,微风习习的夜半里挑战公园绕圈跑等等.<br>厦门随处可见的 <strong>公园</strong>,<strong>湖边水库</strong>,<strong>五缘湾湿地公园</strong>,<strong>圆博园</strong>,还有很多环岛跑道都是不错的跑步场地,真可谓是跑者的天堂.</p>
</li>
<li><p>[x] <strong><em>反馈直接</em></strong><br>坚持跑步的人精神状态相对良好.日常新陈代谢相对更快,身体机能相对更加年轻.</p>
</li>
<li><p>[x] <strong><em>伤痛少</em></strong><br>跑步属于有氧运动,对身体的伤害相对少,恢复快.正常人跑一休一基本上没问题.属于全身性运动.</p>
</li>
</ul>
<h4 id="2-我们真的会跑步吗"><a href="#2-我们真的会跑步吗" class="headerlink" title="2.我们真的会跑步吗?"></a>2.我们真的会跑步吗?</h4><ul>
<li><p>[x] <strong><em>跑不远</em></strong><br>感觉跑了好久实际上还不到1公里,真是煎熬.<strong>心累!</strong></p>
</li>
<li><p>[x] <strong><em>膝盖疼</em></strong><br>好多次勉强说服自己坚持跑下来,现在每次跑步发现膝盖疼了.<strong>肉疼!</strong></p>
</li>
<li><p>[x] <strong><em>没用</em></strong><br>跑了那么久了,一开始体重有明显消减下来,现在基本上维持不变.<strong>无解!</strong></p>
</li>
</ul>
<h2 id="跑步"><a href="#跑步" class="headerlink" title="跑步"></a>跑步</h2><p>跑步算是一项全民性全身性的运动.之所以说它是一项运动,在于它与其他运动有着相同的特点.</p>
<h3 id="科学选鞋"><a href="#科学选鞋" class="headerlink" title="科学选鞋"></a><a href="https://mp.weixin.qq.com/s/8XlKysMJ6TSxsJR3ynEUzg" target="_blank" rel="external">科学选鞋</a></h3><p>足弓是选鞋的核心依据,我们可以通过一些简单的测试来判断我们的足弓类型(正常足、扁平足弓或是高足弓),从而帮助您选择一双合适的跑鞋.比如稳定型和支撑型.</p>
<p>另外,跑鞋的大小舒适与否也会影响到跑步状态,甚至是引发伤病的隐患.</p>
<h3 id="热身与拉伸"><a href="#热身与拉伸" class="headerlink" title="热身与拉伸"></a>热身与拉伸</h3><h4 id="跑前热身"><a href="#跑前热身" class="headerlink" title="跑前热身"></a><a href="https://mp.weixin.qq.com/s/U7U4Nesf5TB4RxVgVxMEBw" target="_blank" rel="external">跑前热身</a></h4><p>跑前热身能够很好激活身体肌肉,韧带,减少运动损伤.目的是让身体能够适应之后的运动量.重要的是,我们不仅要重视热身,而且还需要做对热身.特别是瑟瑟发抖的冬天.</p>
<ul>
<li>1.模拟跑步动作在原地进行的跑步练习,目的是调动心肺、升高体温.</li>
<li>2.肌肉动态牵拉.可以在短时间内有效地拉伸多块肌肉,既能有效的增加关节活动度,性价比非常高.</li>
</ul>
<h4 id="跑后拉伸"><a href="#跑后拉伸" class="headerlink" title="跑后拉伸"></a><a href="https://mp.weixin.qq.com/s/aL1gMqhlj5FVTneX8jRKsg" target="_blank" rel="external">跑后拉伸</a></h4><p>跑后拉伸可以缓解肌肉紧张感,结合泡沫轴舒张肌肉和韧带,让肌肉更显修长.</p>
<h3 id="跑步姿势"><a href="#跑步姿势" class="headerlink" title="跑步姿势"></a><a href="https://www.bilibili.com/video/av46528465" target="_blank" rel="external">跑步姿势</a></h3>
<div style="position: relative;width: 100%;height: 0;padding-bottom: 75%;">
<iframe style="position:absolute;width:100%;height:100%;left:0;top:0;" src="//player.bilibili.com/player.html?aid=46528465&cid=81525567&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>
</div>
<h3 id="力量训练"><a href="#力量训练" class="headerlink" title="力量训练"></a><a href="https://mp.weixin.qq.com/s/QBqrfKXtbMrnNNdR90rzKA" target="_blank" rel="external">力量训练</a></h3><p>跑友们现在已经越来越重视下肢力量训练,好的下肢力量可以提高速度,跑得更快,可预防下肢伤痛和促进伤痛康复.<br>这是非常必要的,经常做力量训练可以提高跑步质量.切忌刻意机械性重复刷跑量,既容易造成不必要的身体伤痛,也很难达到预期效果,适得其反.</p>
<h3 id="伤痛与预防"><a href="#伤痛与预防" class="headerlink" title="伤痛与预防"></a><a href="https://zhuanlan.zhihu.com/p/32698929" target="_blank" rel="external">伤痛与预防</a></h3><p>跑步常见的伤病比如跑步膝,足底颈膜炎,胫前疼痛.平时要注意下力量训练,切忌不要超量跑.很多伤病是因为跑量与力量没有达到平衡造成的.</p>
<h2 id="建议"><a href="#建议" class="headerlink" title="建议"></a>建议</h2><p>最后的最后,跑步千千好,唯独最伤膝.身体不适或者天气问题千万要慎重,跑步<strong>猝死</strong>的事件屡见不鲜,务必量力而行!!</p>
<h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><ul>
<li><a href="https://mp.weixin.qq.com/s/dCRPY78N2m89TCxq07Di5w" target="_blank" rel="external">跑步五点建议</a></li>
<li><a href="https://mp.weixin.qq.com/s/tbSvBfEmocGUY7m3lxJ9dw" target="_blank" rel="external">送髋跑</a></li>
</ul>
我们真的会跑步吗?我们跑步达到瘦身减肥的效果了吗?
Laravel5系列入门教程之二
http://blog.terrancy.com/2019/01/08/the-third-part-service-applied-in-the-laravel/
2019-01-08T10:17:44.000Z
2019-01-09T01:04:51.392Z
<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>关于在laravel中的第三方服务的配置与使用</p>
关于在laravel中的第三方服务的配置与使用
跑步伤痛与恢复
http://blog.terrancy.com/2019/01/03/the-exprience-about-running-pain/
2019-01-03T01:31:19.000Z
2019-01-29T07:35:09.373Z
<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>之前经常跑步,由于不太重视跑前热身.跑步跑久了就积累了很多的伤病,导致现在都没法正常的训练.很多放在家门口的赛事都没能如愿参加拿牌.</p>
<h2 id="胫骨前肌"><a href="#胫骨前肌" class="headerlink" title="胫骨前肌"></a>胫骨前肌</h2><blockquote>
<p>其实,有伤病是正常的事情.关键是如何正视它并及时纠正.</p>
</blockquote>
<h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><ul>
<li><a href="http://www.sohu.com/a/150469205_400759" target="_blank" rel="external">跑后脚背痛,原因何在?</a></li>
<li><a href="https://zhuanlan.zhihu.com/p/30724167" target="_blank" rel="external">小腿外侧痛,跑者必经之路?</a></li>
<li><a href="https://www.zhihu.com/question/21814918" target="_blank" rel="external">快走或者跑步之后小腿前方外侧肌肉僵硬 走路都困难 这是为什么?</a></li>
<li><a href="https://www.don1don.com/archives/64798" target="_blank" rel="external">调整你的胫前肌痛── 跑步慢性疾病</a></li>
</ul>
之前经常跑步,由于不太重视跑前热身.跑步跑久了就积累了很多的伤病,导致现在都没法正常的训练.很多放在家门口的赛事都没能如愿参加拿牌.
JWT的使用详解
http://blog.terrancy.com/2018/12/29/the-full-use-of-jwt/
2018-12-29T01:49:54.000Z
2018-12-29T02:01:53.484Z
<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>随着开发中对JWT的理解逐步加深,单独整理个文档方便理清思路.在不同的应用场景对JWT的理解也不一样.</p>
随着开发中对JWT的理解逐步加深,单独整理个文档方便理清思路.在不同的应用场景对JWT的理解也不一样.
Dingo-Api 开发总结
http://blog.terrancy.com/2018/12/19/the-docs-about-dingo-api/
2018-12-19T01:50:49.000Z
2018-12-29T02:01:54.806Z
<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>工作中使用Laravel框架开发平台,接触到api设计与开发.顺便将在Dingo-Api的理解整理与总结下来.</p>
工作中使用Laravel框架开发平台,接触到api设计与开发.顺便将在Dingo-Api的理解整理与总结下来.
微信小程序常用的第三方框架的整理
http://blog.terrancy.com/2018/11/29/the-common-third-part-framework-about-wechat-mini-program/
2018-11-29T09:52:00.000Z
2018-12-26T09:56:26.112Z
开始入手微信小程序的时候,通常使用的是原生框架来写.
微信小程序支付相关教程
http://blog.terrancy.com/2018/11/26/the-payment-about-wechat-mini-program/
2018-11-26T09:37:18.000Z
2018-12-26T09:48:12.752Z
根据平时在写小程序的业务,对微信小程序支付相关教程的整理与总结
微信小程序常用的第三方SDK的整理与总结
http://blog.terrancy.com/2018/11/16/the-common-third-part-sdk-about-wechat-mini-program/
2018-11-16T09:39:28.000Z
2018-12-26T09:48:15.831Z
根据平时在写小程序的业务,对微信小程序常用的第三方SDK的整理与总结
谷歌支付验证解决方案
http://blog.terrancy.com/2018/10/17/Google-payment-solutions/
2018-10-17T12:21:27.000Z
2019-02-11T09:43:40.565Z
<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>关于谷歌支付验证部分,服务端有多种不同语言的SDK.但就PHP版本是Beta版本的,网上关于使用方式讲解并不全面.</p>
<p>之前对接中东版本时有完整做过一遍,可惜没有记录下来.如今也只能依稀记得一些流程,幸好有机会借到谷歌开发者后台的超级管理员账号,有机会全面了解谷歌后台的所有权限情况.借此机会,再对接巴西版本的时候讲整个流程再走一遍,将谷歌支付整个流程遇到的一些问题和解决方案做个记录.</p>
<h2 id="参考资料"><a href="#参考资料" class="headerlink" title="参考资料"></a>参考资料</h2><ul>
<li><a href="https://stackoverflow.com/questions/25481207/error-the-project-id-used-to-call-the-google-play-developer-api-has-not-been-l" target="_blank" rel="external">The project id used to call the Google Play Developer API has not been linked in the Google Play Developer Console</a></li>
<li><a href="http://www.it1352.com/91830.html" target="_blank" rel="external">Use service account to verify Google InAppPurchase</a></li>
<li><a href="https://stackoverflow.com/questions/33850864/how-to-verify-purchase-for-android-app-in-server-side-google-play-in-app-billin" target="_blank" rel="external">How to verify purchase for android app in server side (google play in app billing v3)</a></li>
<li><a href="https://developers.google.com/api-client-library/" target="_blank" rel="external">!import - Libraries for Google APIs Server</a></li>
<li><a href="https://github.com/googleapis/google-api-php-client" target="_blank" rel="external">!import - A PHP client library for accessing Google APIs</a></li>
</ul>
关于谷歌支付验证部分,服务端有多种不同语言的SDK.但就PHP版本是Beta版本的,网上关于使用方式讲解并不全面.借此机会,再对接巴西版本的时候讲整个流程再走一遍.
Laravel5系列入门教程
http://blog.terrancy.com/2018/10/16/the-getting-started-tutorial-about-lavarel-1/
2018-10-16T10:34:48.000Z
2018-10-17T12:37:55.604Z
<p>新手入门学习新的PHP框架Laravel,一款号称为WEB艺术家创造的PHP框架.本文主要介绍在virtualbox环境下结合Vagrant和Headstead安装运行Laravel5.</p>
<p>Vagrant是一款基于virtual box的虚拟环境,可以安装各种预先配置好的开发环境,达到可以在多种开发环境之间快速切换.</p>
<p>Homestead是Laravel官方创建的Vagrant盒子,虚拟机的环境搭载Ubuntu16.04 LTS,并且集成了Laravel所需的开发环境及工具,包含最新版本的PHP,Mysql以及Nginx服务器.</p>
<h2 id="参考资料"><a href="#参考资料" class="headerlink" title="参考资料"></a>参考资料</h2><ul>
<li><a href="https://laravel-china.org/topics/533/laravel-5-series-tutorial-i-the-most-suitable-for-chinese-laravel-tutorial" target="_blank" rel="external">Laravel 5 系列入门教程(一)【最适合中国人的 Laravel 教程】</a></li>
<li><a href="https://blog.sbot.io/articles/1" target="_blank" rel="external">Windows 7/8/10 系统下Laravel框架的开发环境安装及部署详解</a></li>
<li><a href="https://laravel-china.org/index.php/topics/3750/windows-10-install-homestead-card-at-ssh-auth-method-private-key" target="_blank" rel="external">Windows 10 安装 Homestead 卡在 SSH auth method: private key</a></li>
</ul>
新手入门学习新的PHP框架Laravel,一款号称为WEB艺术家创造的PHP框架.
Gitalk - 一款非常极客的评论插件
http://blog.terrancy.com/2018/09/28/gitalk-is-a-very-geek-comment-plugin-after-duoshuo/
2018-09-28T10:08:01.000Z
2018-09-29T04:19:15.516Z
<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>一提到多说,相信不少博主可能会不假思索的跟你说很多它自带的许多特性以及与博客的无缝接入.除了他的访客功能之外,还提供了很多的自定义样式和描述语,这在这样一个众口难调的时代实在是少见.对于多说的感受,往往有这样的感觉-<strong>失去的时候才懂得珍惜</strong>.本文在和介绍你如何使用Gitalk之外,从外观上尽量将这款评论插件改成多说差不多的样式.</p>
<h2 id="Gitalk的使用"><a href="#Gitalk的使用" class="headerlink" title="Gitalk的使用"></a>Gitalk的使用</h2><p>自从多说评论插件在2017年6月宣布停止维护之后,也许会有很多博主会苦于意识找不到合适的评论插件取代它.加之国内其他的评论插件往往需要提供网站备案才允许接入,这无形中也提高了接入门槛.索性,很多的极客爱好者纷纷推出自己的评论插件.比如今天我们即将推荐的一款评论插件Gitalk.</p>
<h3 id="原理"><a href="#原理" class="headerlink" title="原理"></a>原理</h3><p><a href="https://gitalk.github.io/" target="_blank" rel="external">Gitalk</a> 是一款利用GitHub API,基于GitHub issue和preact开发的评论插件.说的直白点,Gitalk实际上是将我们在博客上的评论通过一定的方式上传到GitHub的某个项目的issue上的.就是GitHub的某个项目帮我们托管博客的评论信息.我们的博客可以不必非要托管在GitHub上.刚好博主将自己的静态博客托管在GitHub上.所以说,Gitalk是Github Pages的评论插件神器.</p>
<h3 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h3><p>因为博主这边使用的是hexo的yelee主题,其他主题做法应该也差不多.以下将以yelee主题为例介绍.</p>
<h4 id="创建"><a href="#创建" class="headerlink" title="创建"></a>创建</h4><ul>
<li>在Github个人设置下选择<a href="https://github.com/settings/developers" target="_blank" rel="external">开发者设置</a>,<a href="https://github.com/settings/applications/new" target="_blank" rel="external">新建</a>一个开发者授权应用.</li>
<li>主页地址和回调地址这里统一填写博客主页地址即可,注册成功之后将获取得到相应的Client ID和Client Secret.</li>
<li>Gitalk将利用这两个参数获取用户的授权,并将评论信息提交到GitHub的项目下.</li>
</ul>
<h4 id="配置"><a href="#配置" class="headerlink" title="配置"></a>配置</h4><p>因为博客之前尝试过国内的其他评论插件,所以在配置的使用一般按照不同的类型通过开关的形式加以调整.<br><figure class="highlight yml"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div></pre></td><td class="code"><pre><div class="line"><span class="attr">gitalk:</span></div><div class="line"><span class="attr"> on:</span> <span class="literal">true</span></div><div class="line"><span class="attr"> owner:</span> //GitHub账号用户名</div><div class="line"><span class="attr"> repo:</span> //托管的项目,之后的评论将留在该项目的issue上.</div><div class="line"><span class="attr"> clientID:</span> //上一步创建的授权应用获取到的</div><div class="line"><span class="attr"> clientSecret:</span> //同上</div><div class="line"><span class="attr"> admin:</span> //GitHub账号用户名</div><div class="line"><span class="attr"> distractionFreeMode:</span> //开启无干扰模式</div></pre></td></tr></table></figure></p>
<p>在主题下的配置文件上按照上面的提示配置好信息之后,就可以在指定需要的地方引用该插件了.</p>
<h4 id="引用"><a href="#引用" class="headerlink" title="引用"></a>引用</h4><p>在主题目录下指定目录下(主题yelee专门创建一个统一存放评论页面的文件夹)创建一个gitalk的页面.</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div></pre></td><td class="code"><pre><div class="line"><div id="gitalk-container"></div></div><div class="line"><link rel='stylesheet' href="https://unpkg.com/gitalk/dist/gitalk.css"></div><div class="line"><link rel='stylesheet' href="//blog.terrancy.com/resources/gitalk/comment.css"/></div><div class="line"><script src="https://unpkg.com/gitalk/dist/gitalk.min.js"></script></div><div class="line"><script src="https://cdn.staticfile.org/blueimp-md5/2.7.0/js/md5.min.js"></script></div><div class="line"><script type="text/javascript"></div><div class="line"> var gitalk = new Gitalk({</div><div class="line"> clientID: '<%=clientID%>',</div><div class="line"> clientSecret: '<%=clientSecret%>',</div><div class="line"> id: md5(location.pathname),</div><div class="line"> repo: '<%=repo%>',</div><div class="line"> owner: '<%=owner%>',</div><div class="line"> admin: '<%=admin%>',</div><div class="line"> distractionFreeMode: <%=distractionFreeMode%>,</div><div class="line"> })</div><div class="line"> gitalk.render('gitalk-container')</div><div class="line"></script></div></pre></td></tr></table></figure>
<p>这里面最主要的是引用了两个链接,通过配置文件的相应参数将渲染到gitalk-container这个id的div上.<br>值得注意的是,这里通过配置信息的id参数来区分每个页面信息,官网上要求id赋值在32位以内.这里使用md5加密将长度控制在32位.<br>按照上面的几个步骤操作之后基本上已经可以正常显示了,这里有个小细节就是需要用GitHub账号在这个插件上登入授权即可在GitHub上的指定的项目生成相应的issue.</p>
<h3 id="多说化"><a href="#多说化" class="headerlink" title="多说化"></a>多说化</h3><p>以上对Gitalk的安装使用已经详细介绍过了,安装之后总体表现算是中规中矩.以下针对一些个人不满意的地方结合多说的自定义样式做些优化.</p>
<h4 id="评论高亮"><a href="#评论高亮" class="headerlink" title="评论高亮"></a>评论高亮</h4><p>当鼠标光标在评论框时,页面会出现一个带有半透明的浮层并且评论框高亮.这种效果见仁见智,个人感觉不太好看.直接将其去除.就是样式重写覆盖.<br><figure class="highlight css"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div></pre></td><td class="code"><pre><div class="line"><span class="comment">/** 评论边框 **/</span></div><div class="line"><span class="selector-class">.gt-container</span> <span class="selector-class">.gt-comment-admin</span> <span class="selector-class">.gt-comment-content</span> {</div><div class="line"> <span class="attribute">background-color</span>:<span class="built_in">rgba</span>(255, 255, 255, 0);</div><div class="line"> <span class="attribute">border</span>: <span class="number">1px</span> solid <span class="built_in">rgba</span>(0, 0, 0, 0.1);</div><div class="line"> <span class="attribute">border-radius</span>: <span class="number">5px</span>;</div><div class="line">}</div><div class="line"></div><div class="line"><span class="selector-class">.gt-container</span><span class="selector-class">.gt-input-focused</span>{</div><div class="line"> <span class="attribute">background-color</span>:<span class="built_in">rgba</span>(255, 255, 255, 0);</div><div class="line">}</div><div class="line"></div><div class="line"><span class="selector-class">.gt-container</span><span class="selector-class">.gt-input-focused</span><span class="selector-pseudo">::after</span>{</div><div class="line"> <span class="attribute">background-color</span>:<span class="built_in">rgba</span>(255, 255, 255, 0);</div><div class="line">}</div><div class="line"></div><div class="line"><span class="comment">/** 预览模式 **/</span></div><div class="line"><span class="selector-class">.gt-container</span> <span class="selector-class">.gt-header-preview</span> {</div><div class="line"> <span class="attribute">background-color</span>:<span class="built_in">rgba</span>(255, 255, 255, 0);</div><div class="line"> <span class="attribute">font-family</span>: inherit;</div><div class="line">}</div></pre></td></tr></table></figure></p>
<h4 id="背景图片"><a href="#背景图片" class="headerlink" title="背景图片"></a>背景图片</h4><p>之前在使用多说的时候就曾在评论框内添加背景图片,有种怀旧感.<br><figure class="highlight css"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div></pre></td><td class="code"><pre><div class="line"><span class="comment">/** 扑街 **/</span></div><div class="line"><span class="selector-id">#gitalk-container</span> <span class="selector-class">.gt-header-comment</span> <span class="selector-class">.gt-header-textarea</span>{</div><div class="line"> <span class="attribute">height</span>: <span class="number">96px</span> <span class="meta">!important</span>;</div><div class="line"> <span class="attribute">background</span>: <span class="built_in">url</span>(//blog.terrancy.com/resources/duoshuo/pujie.png) right no-repeat;</div><div class="line"> <span class="attribute">font-family</span>: inherit;</div><div class="line">}</div></pre></td></tr></table></figure></p>
<h4 id="图像旋转"><a href="#图像旋转" class="headerlink" title="图像旋转"></a>图像旋转</h4><p>鼠标悬浮在头像上时,头像会自动由正方形旋转成圆形.这部分使用之前多说样式.<br><figure class="highlight"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div></pre></td><td class="code"><pre><div class="line">#ds-recent-comments .gt-avatar img {</div><div class="line"> width: 54px;</div><div class="line"> height: 54px;</div><div class="line"> border-radius: 27px;</div><div class="line"> -webkit-border-radius: 27px;</div><div class="line"> -moz-border-radius: 27px;</div><div class="line"> box-shadow: inset 0 -1px 0 #3333sf;</div><div class="line"> -webkit-box-shadow: inset 0 -1px 0 #3333sf;</div><div class="line"> -webkit-transition: 0.4s;</div><div class="line"> -webkit-transition: -webkit-transform 0.4s ease-out;</div><div class="line"> transition: transform 0.4s ease-out;</div><div class="line"> -moz-transition: -moz-transform 0.4s ease-out;</div><div class="line">}</div><div class="line"></div><div class="line">#ds-recent-comments .gt-avatar img:hover {</div><div class="line"> box-shadow: 0 0 10px #fff;</div><div class="line"> rgba(255, 255, 255, .6), inset 0 0 20px rgba(255, 255, 255, 1);</div><div class="line"> -webkit-box-shadow: 0 0 10px #fff;</div><div class="line"> rgba(255, 255, 255, .6), inset 0 0 20px rgba(255, 255, 255, 1);</div><div class="line"> transform: rotateZ(360deg);</div><div class="line"> -webkit-transform: rotateZ(360deg);</div><div class="line"> -moz-transform: rotateZ(360deg);</div><div class="line">}</div></pre></td></tr></table></figure></p>
<h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><h2 id="参考资料"><a href="#参考资料" class="headerlink" title="参考资料"></a>参考资料</h2><div class="github-widget" data-repo="gitalk/gitalk"></div>
自从多说评论插件在2017年6月宣布停止维护之后,相信很多博主会苦于意识找不到合适的评论插件取代它.加之国内其他的评论插件往往需要提供网站备案才允许接入,这无形中也提高了接入门槛.索性,很多的极客爱好者纷纷推出自己的评论插件.
关于国内域名备案的总结
http://blog.terrancy.com/2018/09/20/the-summary-about-the-domestic-domain-filling/
2018-09-20T14:07:06.000Z
2018-09-29T08:36:47.019Z
<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p> 最近发现之前在阿里云上已经备案过的域名居然需要提交备案申请,导致部分域名无法正常使用.经过仔细检查之后原来部分域名使用的是腾讯的服务器.生产线上的产品在毫无征兆的情况下突然间就被显示重新提交备案,直接导致产品立马无法使用.这种算是重大的突发事件,在紧急迁移服务器的同时也加急申请备案.实在无奈~</p>
最近发现之前在阿里云上已经备案过的域名居然需要提交备案申请,导致部分域名无法正常使用.
个人面试经历的总结
http://blog.terrancy.com/2018/08/20/the-summary-about-personal-interview-experience/
2018-08-20T09:07:08.000Z
2018-09-02T06:11:54.928Z
<h3 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h3><p>关于为什么辞职这里就不多做解释了,现主要对最近个人面试经历的总结.毕业后就呆在一家公司五年了,第一次离职后面临面试这个件事.其实说起来也挺尴尬的,面试了很多人这次也要被面.对职场面试而言,本是一种展示自我的一个很好的机会,但现在反而像新手一样既笨拙又难堪.不过,至少能检验自己的价值以及以及认清自己与他人的差距.以下,就面试过的一些主要公司谈谈自己的看法吧.</p>
<h3 id="面试"><a href="#面试" class="headerlink" title="面试"></a>面试</h3><h4 id="点触科技"><a href="#点触科技" class="headerlink" title="点触科技"></a><a href="https://www.dianchu.com/" target="_blank" rel="external">点触科技</a></h4><p>厦门点触科技股份有限公司(以下以”点触科技”称之),2013年借一款宫廷养成类游戏发展至今的新三板上市公司.<del>(或许是在大家看来的运气的元素,因其特定的用户群体让该公司在之后的发展不断壮大.)</del>目前的主要研发运营两款游戏,游戏风格大同小异.</p>
<h5 id="要求"><a href="#要求" class="headerlink" title="要求"></a>要求</h5><p>点触科技要求后端程序员,可以是其他语言转python.因为有几位同事先后进入该公司的缘故,加上福利待遇相对还可以以及跨语言也可以.所以我就抱着试试的心里去面试.<br>因为在之前的游戏公司做的也是后端程序员,加之五年摸爬滚打的工作经验以及对游戏后台的游戏熟悉,这让我在面试中有种莫名的自信.(<del>程序员连这点自信都没有那就白混了.)</del></p>
<h5 id="过程"><a href="#过程" class="headerlink" title="过程"></a>过程</h5><p>在前台的提示下填写了个人信息和个人主要的项目经历.<del>感觉也体现不了什么,反正该有的都写在简历上了</del><br>面试主要分为HR面试和技术面试.<br>①HR面试主要是为完善之前填写的那份个人信息表,还有就是了解个人工资问题等等.然后便是技术面试了.<br>②经过与后端程序员的负责人的交流中,逐渐的理清了该公司的后端基础模块.后端程序员大概7-8人的样子,主要负责后台工具模块,运营模块,游戏日志模块,内部员工系统包括Bug反馈系统和人事系统等等.</p>
<ul>
<li>后台工具模块.<br>后台日志模块主要为常用的数据分析,游戏基本的用户信息.<br>①前端框架使用<a href="https://cn.vuejs.org/" target="_blank" rel="external">Vue</a>+<a href="http://element-cn.eleme.io" target="_blank" rel="external">Element UI</a>.对于前端只用过Bootstrap框架的我而言也只是一知半解.这部分后面可以去学学,前端不用学得太多但必须扎实又实用才好.<br>②后端使用<a href="http://flask.pocoo.org/" target="_blank" rel="external">python-flask</a>作为日常常用开发框架.最主要的是利用python与hadoop便捷的交互优势,这点是某些编程语言所不具备的.<br>③使用Docker作为应用开发的服务器容器,既方便开发也方面部署.大大的缩短了运维和研发的时间,提升工作效率.</li>
<li>游戏日志模块.<br>①对外统一游戏日志规范.提供合理的数据BI接口,让游戏服务端根据自定的数据根式将需要的数据提交到游戏日志系统中.<br>②python的并发编程能力.因为游戏内玩家的行为日志相对比较多,对后端服务器的负载也是很大的压力,需要提升数据库的读写速度的同时也发挥python并发的特点.<br>③使用kafka作为常用的消息队列机制.这个可以很大程度上减少服务器端额负载压力.</li>
<li>运营模块.<br>①常用的运营日志分析统计.比如某个活动对游戏数据的影响,如果能用数据直观的反馈出来对公司的运营也有很好的指导作用.<br>②常用的外围活动或者广告.通过一些简单微信小程序与微信小游戏,促进老玩家对游戏的粘度.通过开发相应的后台,方便运营人员在后台直接给微信小游戏换皮等.大大解放了后端开发人员的生产力.</li>
<li>其他模块.<br>①开发公司内部OA系统.<br>②上市公司必需的玩家消费日志系统.玩家的虚拟货币分为消费类型和赠送类型.而消费类型的虚拟货币细分为一次性和永久性.需要每个月分析玩家身上的每部分虚拟货币的使用情况.</li>
</ul>
<h5 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h5><p><strong>面试的结果,不了了之.大数据是个硬伤,也是个门槛.</strong><br>首先,因为面试经验的问题,对自我的认识和定位不够清晰以及缺乏临时发挥的反应力导致说话口不遮拦的原因.<br>其次,是个人技术能力.因为之前工作的游戏公司数量比较少,相对就很难遇到在一个比较大量级的情况下产生的问题.<del>(如果想要去一些大公司面试,特别是程序员而言大数据永远是一个绕不过的话题)</del>同样的数据分析和统计,在大数据环境下产生的读写延迟与冲突导致的数据问题等一无所知.<br>最后,因为实际工作中没有遇到过的问题而导致在面试的减分而甘心让自己的技术停滞不前的想法肯定是不对的.但如何去跨过这样的门槛呢?确实是个值得思考的话题.</p>
<h4 id="4399"><a href="#4399" class="headerlink" title="4399"></a><a href="https://www.4399.com/" target="_blank" rel="external">4399</a></h4><p>4399是中国最早的和领先的在线休闲游戏平台,免费为用户提供各种健康绿色的游戏.</p>
<h5 id="要求-1"><a href="#要求-1" class="headerlink" title="要求"></a>要求</h5><p>前同事内推进去面试,对面试的要求并不太多.面试过程中对方想招的是活动运营开发方向的.</p>
<h5 id="过程-1"><a href="#过程-1" class="headerlink" title="过程"></a>过程</h5><p>先由前台引导填写基本资料,填完资料之后等待HR通知面试.因为是老员工的内推,面试过程中气氛比较轻松.<br>①4399虽然有自己的研发团队,但整体还是偏向运营方向的.说清楚点就是偏向平台运营,这点很重要.平台类运营侧重于平台活动方向运营,工作的方向也是面向平台推广.<br>②因为对公司的发展方向有所误解,再加上对点触面试经验的总结所以侧重于游戏数据的整理与分析.这个也是面试失败的重要原因</p>
<h5 id="总结-1"><a href="#总结-1" class="headerlink" title="总结"></a>总结</h5><p>①可能是内推的原因吧,整个面试没有笔试过程直接是部门负责人就工作方向和业务方向的咨询.<br>②现阶段工作需求比较少,也不太着急招聘员工.<br>③面试的公司类型很重要,主要分为平台类和研发类的.平台类的要求相对比较轻松,对技术的需求主要偏向运营和配合推广.研发类的侧重于数据整理分析.面试的时候需要多做了解可提高面试通过率.</p>
<h3 id="参考资料"><a href="#参考资料" class="headerlink" title="参考资料"></a>参考资料</h3><p><a href="https://github.com/ElemeFE/element" target="_blank" rel="external">Element UI</a><br><a href="https://mp.weixin.qq.com/s/sSQlhZdXDgu80OINf3Uu7Q" target="_blank" rel="external">华为人工智能岗位面试经历分享</a></p>
对最近个人面试经历的总结,慎点!
网易云音乐反爬虫机制
http://blog.terrancy.com/2018/08/20/the-case-about-anti-reptile-mechanism-with-netease-music-api/
2018-08-20T07:06:22.000Z
2018-08-20T07:20:10.861Z
<h3 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h3><p>之前在搭建个人博客的时候使用了一款异步加载的音乐插件,该插件的服务端部分的主要功能室封装了网易云音乐的接口.确切点说,该服务器服务端实际上是利用网络爬虫的方法抓取网易云音乐的资源.因为网易云音乐反爬虫机制的原因导致音乐插件无法使用.</p>
<h3 id="原因"><a href="#原因" class="headerlink" title="原因"></a>原因</h3><p>网易云音乐的资源被爬虫抓取的问题在一定程度是会导致正规平台上的音乐资源被分流了,对于做资源的平台而言无疑就是偷窃.从反制的角度上而言,从入口遏制无疑是省时省力的方案.</p>
<h3 id="解决"><a href="#解决" class="headerlink" title="解决"></a>解决</h3><h3 id="参考资料"><a href="#参考资料" class="headerlink" title="参考资料"></a>参考资料</h3>
之前在搭建个人博客的时候使用了一款异步加载的音乐插件,该插件的服务端部分的主要功能室封装了网易云音乐的接口.因为网易云音乐反爬虫机制的原因导致音乐插件无法使用.
Atom编辑器代理设置
http://blog.terrancy.com/2018/08/18/the-problem-of-the-proxy-about-atom/
2018-08-18T08:46:03.000Z
2018-08-18T15:09:31.686Z
<p>Atom编辑器作为GitHub研发的一款针对开发者的编辑器,以其轻量性一下子就吸引了很多的受众.虽然问题一直存在,但我们期待着它不断的更新和进步.但最近更新的版本之后,打开编辑器之后就马上闪退.后来发现原来是代理的问题,作为习惯使用谷歌搜索的忠实用户,面对鱼和熊掌不可得兼的尴尬确实很头疼.</p>
<h2 id="代理冲突"><a href="#代理冲突" class="headerlink" title="代理冲突"></a>代理冲突</h2><h3 id="shadowsock-代理"><a href="#shadowsock-代理" class="headerlink" title="shadowsock 代理"></a>shadowsock 代理</h3><p>shadowsocks代理与Atom编辑器冲突导致编辑器闪退,所以需要分别在shadowsocks的代理配置文件和Atom配置文件配置好代理即可;</p>
<h4 id="代理配置文件"><a href="#代理配置文件" class="headerlink" title="代理配置文件"></a>代理配置文件</h4><p>在电脑右下角小飞机图标中找到代理配置文进PAC,选择编辑本地PAC文件.针对Atom新增记录值 proxy:8080;<br>为防止代理配置文件在同步更新线上文件的时候被覆盖,最好设置保护本地文件选项;</p>
<h4 id="编辑器配置文件"><a href="#编辑器配置文件" class="headerlink" title="编辑器配置文件"></a>编辑器配置文件</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">apm config set registry https://registry.npm.taobao.org</div><div class="line">apm config set strict-ssl false</div><div class="line">apm config set https-proxy https://proxy:8080</div></pre></td></tr></table></figure>
<p>如上第三步骤,解决代理的问题关键在于设置本地代理.</p>
<h4 id="检查测试"><a href="#检查测试" class="headerlink" title="检查测试"></a>检查测试</h4><p>查看代理设置是否成功,除了开启代理和编辑器查看是否冲突闪退之外,还是测试下代理配饰是否可用.</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">apm config get https-proxy</div><div class="line">apm install --check</div></pre></td></tr></table></figure>
<p>可以通过以下命令查看代理是否可用.</p>
<h2 id="参考资料"><a href="#参考资料" class="headerlink" title="参考资料"></a>参考资料</h2><p><a href="https://www.jianshu.com/p/24cd35cd4b03" target="_blank" rel="external">Atom代理设置</a></p>
Atom编辑器作为GitHub研发的一款针对开发者的编辑器,以其轻量性一下子就吸引了很多的受众.虽然问题一直存在,但我们期待着它不断的更新和进步.
你到底在焦虑什么?
http://blog.terrancy.com/2018/07/09/what-are-you-worry-about-with-age/
2018-07-09T15:07:40.000Z
2018-10-20T00:59:22.798Z
<h2 id="人生就是一直在自我抗争"><a href="#人生就是一直在自我抗争" class="headerlink" title="人生就是一直在自我抗争"></a>人生就是一直在自我抗争</h2><blockquote>
<p>你哪里是在焦虑年纪,你是在焦虑能力</p>
</blockquote>
<p>或许中国人骨子里对数字特别敏感,尤其涉及到年纪.它不仅像树的年轮一样记录着人的一生,更像每个人应该迈过的一道道坎.二十岁,三十岁这样年纪的人多少会有些焦虑.虽然这些数字仅仅表示一个人生命成长的数字,但是让我们焦虑的其实还是没能在这个或者那个年龄做该做的事情,心里多少有些恐慌或者遗憾.</p>
<h2 id="保持良好生活习惯和乐观心态"><a href="#保持良好生活习惯和乐观心态" class="headerlink" title="保持良好生活习惯和乐观心态"></a>保持良好生活习惯和乐观心态</h2><blockquote>
<p>唯有通过自我反思与总结,不断明确生活的航向</p>
</blockquote>
<p>失败并不可怕,我们需要重拾信心及时纠正,查缺补漏.只有看到能力的欠缺并努力地去提升,我们才有可能在以后的道路上满血复活.</p>
<p>报名考驾照硬是拖了一年才抽出时间考了科目二还是考挂了,其实平时练得挺多了就是考试的时候太不当回事了.好歹等到科目二过了练完一周的科目三还是考挂了,这次是真的练蒙圈了.愣是等了2个月重新再考就轻车熟路了,科目四考完就马上拿到了驾照.其实考驾照,开车技能很重要,临场应变能力更重要,特别是心态上不能太紧张.开车要放松下来才不会那么累.</p>
<p>考驾照的同时也重新准备专业考证,准备的是信息系统管理师证,属于高级工程师职称.因为之前裸考了几次有过经验,这次不敢大意就直接报班了.慢慢对自己的工作有了新的期待,正在备考PMP.</p>
<h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>发现自己的不足,弥补能力的欠缺,沿着自己认为正确的方向,在沿途经过的每个加油站将油箱加满,你才有可能驶向自己想要抵达的终点.</p>
<h2 id="参考资料"><a href="#参考资料" class="headerlink" title="参考资料"></a>参考资料</h2><ul>
<li><a href="https://weibo.com/ttarticle/p/show?id=2309404260003245634395#_0" target="_blank" rel="external">你哪里是焦虑年纪,你是在焦虑能力</a></li>
</ul>
你哪里是在焦虑年纪,你是在焦虑能力