<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>白小鱼的博客</title>
    <description>My Personal Blog</description>
    <link>/</link>
    <atom:link href="/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Tue, 05 Jul 2016 11:15:13 +0800</pubDate>
    <lastBuildDate>Tue, 05 Jul 2016 11:15:13 +0800</lastBuildDate>
    <generator>Jekyll v3.1.6</generator>
    
      <item>
        <title>axure 使用小技巧</title>
        <description>&lt;h1 id=&quot;axure&quot;&gt;axure使用小技巧&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#1&quot;&gt;1.原型中显示交互&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#2&quot;&gt;2.原型发布到线上&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;section&quot;&gt;1.原型中显示交互&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;问题&lt;/strong&gt;：用axure做成的原型，给到程序猿，程序猿大大有时候会漏掉页面，怎么办？ &lt;strong&gt;解决办法&lt;/strong&gt;：难道产品汪要另外写一篇文档，介绍交互情况么?&lt;br /&gt;
low，low到爆。程序猿们在开发的时候，看原型就不错了，还得原型、文档对照看，屏幕切来切去的，要疯啊。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
其实，axure有提示的呀，只是很多人不会用，没注意到呀。就是下图中的这个按钮 &lt;img src=&quot;/assets/Axure_热区1.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
然后，程序猿大大们就可以看到，产品汪在原型里做了交互的地方，看到木有，那些闪闪发光的地方，那是流着奶与蜜的地方 &lt;img src=&quot;/assets/axure_热区2.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
凡是被绿光包裹的地方，都是产品汪做了交互的地方，鼠标单击，有惊喜呦~&lt;/p&gt;

&lt;p&gt;（当然，系统交互还是要详细记录在文档里的，但是，此文档并非给程序猿大大们开发时用的，而是产品汪记录在产品白皮书里的，便于后期系统升级/改版/交接。）&lt;/p&gt;

&lt;h2 id=&quot;section-1&quot;&gt;2.原型发布到线上&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;问题&lt;/strong&gt;：每次原型修改后，都要把新的原型发给负责开发的攻城狮，攻城狮经常找不到最新的原型在哪儿。 &lt;strong&gt;解决办法&lt;/strong&gt;：axure 原型，完成后，可以发布，生成一个链接，之后每次修改后的最新原型，都可以发布到这个链接上。&lt;/p&gt;

&lt;p&gt;第一步：完成原型后，点击”AxShare” &lt;img src=&quot;/assets/原型发布.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
第二步：发布的原型名称，默认为axure文件名，可以修改；线上原型访问密码，需要自己设定。 PS：因为一般来说你的原型并不是公开的，只是先发布到线上给自己人看着方便而已，所以线上原型访问密码是必不可少的。 &lt;img src=&quot;/assets/axshare2.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
第三步：单击上图弹窗的”Publish”按钮，就可以生成线上原型，并给出地址，如下图红框所示。然后copy地址，在浏览器打开。 &lt;img src=&quot;/assets/axshare3.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
第四步：下图为线上地址访问效果。 &lt;img src=&quot;/assets/axshare4.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
第五步：在原有原型上修改后，可以再次点击”AxShare”，在原有线上地址发布原型。 &lt;img src=&quot;/assets/axshare5.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
第六步：当原型做了更改，更新到线上的时候，注意 AxShare ID 是与原来保持一致就好。这样，攻城狮大大不管什么时候根据这个地址访问你的原型，看到的都是最新哒。 &lt;img src=&quot;/assets/axshare6.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Sun, 03 Jul 2016 08:00:00 +0800</pubDate>
        <link>/work/2016/07/03/axure-tips.html</link>
        <guid isPermaLink="true">/work/2016/07/03/axure-tips.html</guid>
        
        
        <category>work</category>
        
      </item>
    
      <item>
        <title>与攻城狮的沟通日常</title>
        <description>&lt;h1 id=&quot;section&quot;&gt;与攻城狮的沟通日常&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;背景&lt;/strong&gt;：攻城狮大大，觉得开发状态回传接口太麻烦，就让底层和系统页面实时回传响应状态。底层反馈响应成功之前，系统页面不能关闭，否则底层与系统页面断开，任务提交失败。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;问题&lt;/strong&gt;：响应时间过长，需要用户弹窗内容提交后，等1分钟左右。这1分钟内，页面不能关，不能动，否则任务提交失败。&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;产品汪 : 用户不可能有耐心等1分钟，很可能会认为系统出错，直接关闭页面。&lt;img src=&quot;/assets/好可怕_meitu_1.jpg&quot; alt=&quot;好可怕&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;攻城狮 : 就让用户等1分钟怎么了，1分钟还等不了了，想用我系统就得等1分钟。&lt;img src=&quot;/assets/贱人就是矫情_meitu_1.jpg&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;产品汪（内心戏 ）： &lt;img src=&quot;/assets/你TM在逗我.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;知道你们看戏的以为战事一触即发，不过……&lt;/p&gt;

&lt;p&gt;面对傲娇滴攻城狮大大，脸皮千锤百炼的产品汪，是绝对不会发脾气滴，也是绝对不会拖鞋（妥协）滴。&lt;/p&gt;

&lt;p&gt;开玩笑，做好系统交互，保证用户体验，是产品汪的天职啊天职。&lt;/p&gt;

&lt;p&gt;让我们来面对疾风吧，勇士！&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;产品汪祭出大杀器&lt;br /&gt;
&lt;img src=&quot;/assets/持剑_meitu_2.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;（下面这段话请脑补 武林外传 里 大家辩论时的语速）   

产品是给甲方的，如果甲方着急产品上线，并不在意这些细节，那我们就让用户等1分钟。  
如果甲方不着急产品上线，更在意用户体验，那我们就底层开发接口，解决这个问题。

那么问题来了，需要甲方做判断，是牺牲用户体验，按时上线；还是保障用户体验，延期上线。

甲方做判断，是衡量 工期延长时间造成的影响不好，还是用户体验差造成的影响不好。

所以，现在我们要做的，就是 攻城狮 您这边给出解决此问题所需开发时间，我产品汪要做的就是跟客户沟通，看客户接受哪个方案。

所以，攻城狮大大，你工期评估时间什么时候能给我？
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;攻城狮：下班前给你。 &lt;img src=&quot;/assets/憋BB_meitu_1.jpg&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
产品汪： &lt;img src=&quot;/assets/灰常好.jpeg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Fri, 01 Jul 2016 08:00:00 +0800</pubDate>
        <link>/work/2016/07/01/%E4%B8%8E%E6%94%BB%E5%9F%8E%E7%8B%AE%E7%9A%84%E6%B2%9F%E9%80%9A%E6%97%A5%E5%B8%B8.html</link>
        <guid isPermaLink="true">/work/2016/07/01/%E4%B8%8E%E6%94%BB%E5%9F%8E%E7%8B%AE%E7%9A%84%E6%B2%9F%E9%80%9A%E6%97%A5%E5%B8%B8.html</guid>
        
        
        <category>work</category>
        
      </item>
    
      <item>
        <title>防盗链说明</title>
        <description>&lt;h1 id=&quot;section&quot;&gt;防盗链说明&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#background&quot;&gt;背景&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#list&quot;&gt;防盗链列表&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#detailed&quot;&gt;防盗链详解&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;section-1&quot;&gt;背景&lt;/h2&gt;

&lt;p&gt;视频盗链的问题经常发生，最近新闻报道经常看到某公司告某公司盗用其网站视频链接。所谓视频盗链就是没有经过获得播放权平台的授权，直接通过某种技术手段，在自己网站上直接播放，这种方式对版权平台造成了服务器负荷增大，同时造成收益损失。&lt;/p&gt;

&lt;p&gt;防盗链，其本质就是用户对自己的资源设置的访问限制，控制”谁”可以在”什么时间”访问到”什么资源”。不做防盗链，用户的许多资源都为其他人做了嫁衣，也会给自己的服务器增加不必要的访问压力和带宽消耗。&lt;/p&gt;

&lt;h2 id=&quot;section-2&quot;&gt;防盗链列表&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;序号&lt;/th&gt;
      &lt;th&gt;防盗链&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;1&lt;/td&gt;
      &lt;td&gt;&lt;a href=&quot;#ip&quot;&gt;IP黑白名单&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2&lt;/td&gt;
      &lt;td&gt;&lt;a href=&quot;#referer&quot;&gt;Referer白名单&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;3&lt;/td&gt;
      &lt;td&gt;&lt;a href=&quot;#ua&quot;&gt;UA白名单&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;4&lt;/td&gt;
      &lt;td&gt;&lt;a href=&quot;#token&quot;&gt;Token加密串&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;5&lt;/td&gt;
      &lt;td&gt;&lt;a href=&quot;#swf&quot;&gt;swf文件防盗链&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;section-3&quot;&gt;防盗链详解&lt;/h2&gt;

&lt;h2 id=&quot;ip&quot;&gt;IP黑白名单&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;概念&lt;/strong&gt;&lt;br /&gt;
针对客户端IP进行校验，在服务器上设置黑/白名单，只阻止/允许某些IP访问资源，一般都是IP黑名单的形式。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;适用于直播协议&lt;/strong&gt;&lt;br /&gt;
http、rtmp&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;功能描述&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;直播推流：服务器设置 IP 白名单，允许符合白名单中 IP 地址的服务器推送直播流。&lt;/li&gt;
  &lt;li&gt;播放：服务器设置 IP 黑名单，阻止符合黑名单中 IP 地址的用户观看。 （PS：也可以按照客户需求配置IP白名单，只允许符合白名单中IP地址的用户观看。）&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;referer&quot;&gt;Referer白名单&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;概念&lt;/strong&gt;&lt;br /&gt;
最常用的防盗链手段，通过对HTTP请求中的referer header进行判断，以决定用户是否可以访问该资源。一般都是referer白名单的形式。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;适用于直播协议&lt;/strong&gt;&lt;br /&gt;
http、rtmp&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;功能描述&lt;/strong&gt;&lt;br /&gt;
客户提供给我们一些信任的网站，除了这些网站的其他站点都不允许引用客户网站的特定内容，相当于提供允许访问的白名单。&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;对于被禁止的访问，处理方法如下：  
1）若为 http 访问，返回403状态码
2）若为rtmp访问，直接断开链接。
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;特别说明&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;若为 http 访问：referer 防盗链可以支持多个域名的形式，但域名必须是具体的，不能是泛域名，长度无限制，例如：&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ent.cankaoxiaoxi.com&lt;/p&gt;

&lt;p&gt;2.若为 rtmp 访问：referer防盗链支持单个域名和泛域名的形式，长度无限制，例如&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ent.cankaoxiaoxi.com  
*.cankaoxiaoxi.com
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;3.空 Referer&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;若为 http 访问：禁止空 referer，不允许用户直接访问该资源。&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;例如：
若用户直接在浏览器地址栏中输入一个资源的URL发起请求，该请求是不包含referer字段的（空referer），&amp;lt;br&amp;gt;
则该请求会被拒绝，返回 403 状态码。
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;若为 rtmp 访问：可以支持空 referer，即可以允许用户直接访问该资源。&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;例如：
若用户在客户端直接发起访问，有可能是空 referer，这种情况下，客户是允许用户直接访问该资源的。
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h2 id=&quot;ua&quot;&gt;UA白名单&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;概念&lt;/strong&gt;&lt;br /&gt;
HTTP 请求 header 中的 User Agent 字段，是一段浏览器或者设备标识自己的字符串。对于网站主来说，有时需要让一些资源只能在某些浏览器或者设备上才能访问。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;适用于直播协议&lt;/strong&gt;&lt;br /&gt;
http&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;功能描述&lt;/strong&gt;&lt;br /&gt;
UA 防盗链通常用在手机 APP 或者一些可自定义 User Agent 的应用，比如播放器。设置 UA 白名单，只支持字符串完整校验，不支持正则匹配。&lt;/p&gt;

&lt;h2 id=&quot;token&quot;&gt;Token加密串&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;概念&lt;/strong&gt;&lt;br /&gt;
Token 防盗链是功能最强的一种防盗链方式，开启防盗链后，每个文件的访问必须带上特定的 token 才能访问，并且可以设定每个 token 的有效时间。&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;token 一般会在请求参数中，没有带 token 的外链，或者超过了有效期的token 链接都会返
回 403,达到防盗链的目的。
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;适用于直播协议&lt;/strong&gt;&lt;br /&gt;
http、rtmp&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;功能描述&lt;/strong&gt;&lt;br /&gt;
Token 加密串，是通过资源 URL、密钥、过期时间生成的一个加密字符串。外链必须要带上这个 Token 才能在规定时间内访问到该资源。&lt;/p&gt;

&lt;p&gt;token 防盗链的生成方式如下：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;双方提前约定公共密钥；&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;根据设定规则，从访问链接中获取对应关键字，根据加密算法进行加密校验。&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;swf-&quot;&gt;swf 文件防盗链&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;概念&lt;/strong&gt; SWF文件即swf，是Macromedia公司的动画设计软件Flash的专用格式，是一种支持矢量和点阵图形的动画文件格式，被广泛应用于网页设计，动画制作等领域，swf文件通常也被称为Flash文件。 Adobe Flash Player 本身具有安全机制，Adobe公司基于rtmp协议做了防盗链。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;适用于直播协议&lt;/strong&gt;&lt;br /&gt;
rtmp&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;功能描述&lt;/strong&gt;&lt;br /&gt;
播放器遵循协议，将 swf 文件信息通过握手包传送给服务器。服务器根据本地存放的 swf 遵照协议，验证访问合法性。若访问不合法，则拒绝访问；若访问合法，则返回信息。&lt;/p&gt;
</description>
        <pubDate>Mon, 27 Jun 2016 19:03:39 +0800</pubDate>
        <link>/work/2016/06/27/fang-dao-lian.html</link>
        <guid isPermaLink="true">/work/2016/06/27/fang-dao-lian.html</guid>
        
        
        <category>work</category>
        
      </item>
    
      <item>
        <title>搭建个人博客-文章上传操作说明</title>
        <description>&lt;h1 id=&quot;section&quot;&gt;搭建个人博客&lt;/h1&gt;

&lt;h2 id=&quot;section-1&quot;&gt;文章上传操作说明&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;使用atom写文章，注意 date 不能超过今天。&lt;/li&gt;
  &lt;li&gt;将文章保存在文件夹 posts 内&lt;/li&gt;
  &lt;li&gt;在 iTerm 中运行命令行&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
  &lt;li&gt;cd myblog #打开blog文件夹&lt;/li&gt;
  &lt;li&gt;jekyll build #生成jekyll文件&lt;/li&gt;
  &lt;li&gt;jekyll serve #本地生成博客&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;新开一个iTerm窗口,运行如下命令行&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;cd myblog/site #输入命令行进入blog文件夹中需要上传的文件夹_site 中&lt;/li&gt;
  &lt;li&gt;git status #查看有哪些新增文档&lt;/li&gt;
  &lt;li&gt;git add . #添加所有改变到临时存储&lt;/li&gt;
  &lt;li&gt;git commit -m -a #推送所有改变到仓库&lt;/li&gt;
  &lt;li&gt;git push origin master #推送所有改变到github&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Mon, 27 Jun 2016 19:03:39 +0800</pubDate>
        <link>/knowledge/2016/06/27/blog-%E6%96%87%E7%AB%A0%E4%B8%8A%E4%BC%A0%E8%AF%B4%E6%98%8E.html</link>
        <guid isPermaLink="true">/knowledge/2016/06/27/blog-%E6%96%87%E7%AB%A0%E4%B8%8A%E4%BC%A0%E8%AF%B4%E6%98%8E.html</guid>
        
        
        <category>knowledge</category>
        
      </item>
    
      <item>
        <title>我的第一篇日志</title>
        <description>&lt;p&gt;学习建立自己的博客，希望在博客上记录并分享我在工作中，学习到的技能、经验和教训。&lt;/p&gt;

&lt;h1 id=&quot;section&quot;&gt;搭建个人博客&lt;/h1&gt;

&lt;p&gt;等我搭建成功了，再回来总结。&lt;/p&gt;
</description>
        <pubDate>Fri, 24 Jun 2016 21:50:39 +0800</pubDate>
        <link>/others/2016/06/24/first-blog.html</link>
        <guid isPermaLink="true">/others/2016/06/24/first-blog.html</guid>
        
        
        <category>others</category>
        
      </item>
    
  </channel>
</rss>
