diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000000..700863ea22c --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +*~ +Thumbs.db +_site +Gemfile.lock +.sass-cache +.jekyll-metadata diff --git a/CNAME b/CNAME new file mode 100644 index 00000000000..a3fd1119afe --- /dev/null +++ b/CNAME @@ -0,0 +1,2 @@ +# put your domain here +# e.g. tianqi.name diff --git a/Gemfile b/Gemfile new file mode 100644 index 00000000000..0b1db5677d9 --- /dev/null +++ b/Gemfile @@ -0,0 +1,2 @@ +source 'http://gems.ruby-china.org/' +gem 'github-pages', '104', group: :jekyll_plugins diff --git a/README.md b/README.md new file mode 100644 index 00000000000..05a3cefa80f --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +# kitian616.github.io +my home page + +visit at [www.thomastian.com](http://www.thomastian.com) diff --git a/_config.yml b/_config.yml new file mode 100644 index 00000000000..86f8f06b8bf --- /dev/null +++ b/_config.yml @@ -0,0 +1,69 @@ +# Welcome to Jekyll! +# +# This config file is meant for settings that affect your whole blog, values +# which you are expected to set up once and rarely need to edit after that. +# For technical reasons, this file is *NOT* reloaded automatically when you use +# 'jekyll serve'. If you change this file, please restart the server process. + +## Base settings ## +# hostname: The site's hostname e.g. https://blog.someone.com +baseurl: "/" +title: Someone's blog +description: Someone's Blog +nav_lists: + - title: About + url: /about.html + +## GitHub repository (if the site is hosted by GitHub) ## +# github_repo: e.g. kitian616.github.io +# github_repo_tree: e.g. master + +## Language & timezone ## +lang: zh # the language of your site +timezone: Asia/Shanghai + +## Author & social ## +author: Someone +# email: your Email address e.g. someone@site.com +# facebook_username: your Facebook username +# twitter_username: your Twitter username +# github_username: your GitHub username +# googleplus_username: your Google+ username +# weibo_username: your Weibo username +# douban_username: your Douban username +# linkedin_username: your Linkedin username + +## Comment system (Disqus) ## +# disqus_shortname: the Disqus shortname for the site + +## Google Analytics ## +# ga_tracking_id: Google analytics id for the site + +## Reading quantity (LeanCloud) ## +# app_id: LeanCloud App id +# app_key: LeanCloud App key +# app_class: LeanCloud App class + +## Paginate ## +paginate: 7 +paginate_path: /blog/page:num + +## Post excerpts ## +excerpt_separator: + +## Build ## +markdown: kramdown +highlighter: rouge +permalink: date + +## Plugins ## +gems: + - jekyll-sitemap + - jekyll-feed + - jekyll-paginate + +## Server ## +server_url: "0.0.0.0" + +## Development ## +isdebug: false \ No newline at end of file diff --git a/_includes/blog/article-data.html b/_includes/blog/article-data.html new file mode 100644 index 00000000000..44874c79416 --- /dev/null +++ b/_includes/blog/article-data.html @@ -0,0 +1,39 @@ +
+ {% if page %} + + {% if page.author %} + + {% elsif site.author %} + + {% endif %} + + {% endif %} + + {% if post %} + {% assign cur_page = post %} + {% elsif page %} + {% assign cur_page = page %} + {% endif %} + {% if cur_page.tags[0] %} +
+ {% for tag in cur_page.tags %} + + {% endfor %} +
+ {% endif %} +
+
+ 0 + views | +
+
+ {% if post %} + + {% elsif page %} + + {% endif %} +
+
+
diff --git a/_includes/blog/footer.html b/_includes/blog/footer.html new file mode 100644 index 00000000000..5a118d3dac8 --- /dev/null +++ b/_includes/blog/footer.html @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/_includes/blog/header.html b/_includes/blog/header.html new file mode 100644 index 00000000000..8757babab2a --- /dev/null +++ b/_includes/blog/header.html @@ -0,0 +1,18 @@ +
+ {% if site.blog.title %}{{ site.blog.title }}{% else %}{{ site.title }}{% endif %} + + + +
diff --git a/_includes/blog/license.html b/_includes/blog/license.html new file mode 100644 index 00000000000..b89e69d9847 --- /dev/null +++ b/_includes/blog/license.html @@ -0,0 +1,15 @@ +
+
+ {% if site.github_username and site.github_repo and site.github_repo_tree %} + + View on Github + +

View this POST on Github.

+ {% endif %} +

This work is licensed under a CC BY-NC 4.0 license.

+ Creative Commons License +

欢迎转载,转载需注明出处: + {% include snippets/page-url.html %} + ,且禁止用于商业目的。

+
+
diff --git a/_includes/blog/tags.html b/_includes/blog/tags.html new file mode 100644 index 00000000000..3758f47ef9f --- /dev/null +++ b/_includes/blog/tags.html @@ -0,0 +1,55 @@ +{% assign max_size = 1 %} +{% assign min_size = 1 %} +{% assign cur_size = 1 %} +{% for tag in site.tags %} + {% assign cur_size = tag[1].size %} + {% if cur_size > max_size%} + {% assign max_size = cur_size %} + {% endif %} + {% if cur_size < min_size %} + {% assign min_size = cur_size %} + {% endif %} +{% endfor %} +{% assign gap_size = max_size | minus: min_size | plus: 1 | divided_by: 4 %} +{% if gap_size < 1 %} + {% assign gap_size = 1 %} +{% endif %} +
+ {% if page.title == "All Posts"%} + + {% endif %} + {% for tag in site.tags %} + {% assign cur_size = tag[1].size %} + {% assign m1 = min_size %} + {% assign n1 = m1 | plus: gap_size %} + {% assign m2 = n1 %} + {% assign n2 = m2 | plus: gap_size %} + {% assign m3 = n2 %} + {% assign n3 = m3 | plus: gap_size %} + {% assign m4 = n3 %} + {% assign n4 = m4 | plus: gap_size %} + {% if cur_size >= m1 and cur_size < n1 %} + {% assign c_index = 1 %} + {% elsif cur_size >= m2 and cur_size < n2 %} + {% assign c_index = 2 %} + {% elsif cur_size >= m3 and cur_size < n3 %} + {% assign c_index = 3 %} + {% elsif cur_size >= m4 and cur_size < n4 %} + {% assign c_index = 4 %} + {% else %} + {% assign c_index = 4 %} + {% endif %} + + {% if page.title == "All Posts"%} + + {% else %} + + {{ tag[0] | rstrip}}
{{ tag[1].size }}
+
+ {% endif %} + {% endfor %} +
diff --git a/_includes/common-head.html b/_includes/common-head.html new file mode 100644 index 00000000000..a6d665a446d --- /dev/null +++ b/_includes/common-head.html @@ -0,0 +1,7 @@ + + + +{% if page.title %}{{ page.title }} - {{ site.title }}{% else %}{{ site.title }}{% endif %} + + + diff --git a/_includes/head-icons-rel.html b/_includes/head-icons-rel.html new file mode 100644 index 00000000000..452983e7a67 --- /dev/null +++ b/_includes/head-icons-rel.html @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/_includes/icon/mail.svg b/_includes/icon/mail.svg new file mode 100644 index 00000000000..c153cee4a7c --- /dev/null +++ b/_includes/icon/mail.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/_includes/icon/menu.svg b/_includes/icon/menu.svg new file mode 100644 index 00000000000..a692f5906a0 --- /dev/null +++ b/_includes/icon/menu.svg @@ -0,0 +1,3 @@ +> + + diff --git a/_includes/icon/next.svg b/_includes/icon/next.svg new file mode 100644 index 00000000000..3c12e53c3ac --- /dev/null +++ b/_includes/icon/next.svg @@ -0,0 +1,3 @@ + + + diff --git a/_includes/icon/previous.svg b/_includes/icon/previous.svg new file mode 100644 index 00000000000..8d6876a465d --- /dev/null +++ b/_includes/icon/previous.svg @@ -0,0 +1,3 @@ + + + diff --git a/_includes/icon/social/behance.svg b/_includes/icon/social/behance.svg new file mode 100644 index 00000000000..eaea93f4648 --- /dev/null +++ b/_includes/icon/social/behance.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/_includes/icon/social/douban.svg b/_includes/icon/social/douban.svg new file mode 100644 index 00000000000..d835a5ed657 --- /dev/null +++ b/_includes/icon/social/douban.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/_includes/icon/social/facebook.svg b/_includes/icon/social/facebook.svg new file mode 100644 index 00000000000..5ef765bcd67 --- /dev/null +++ b/_includes/icon/social/facebook.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/_includes/icon/social/flicker.svg b/_includes/icon/social/flicker.svg new file mode 100644 index 00000000000..09af6e2bc0d --- /dev/null +++ b/_includes/icon/social/flicker.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/_includes/icon/social/github.svg b/_includes/icon/social/github.svg new file mode 100644 index 00000000000..a16c679a8e1 --- /dev/null +++ b/_includes/icon/social/github.svg @@ -0,0 +1,3 @@ + + + diff --git a/_includes/icon/social/googleplus.svg b/_includes/icon/social/googleplus.svg new file mode 100644 index 00000000000..ade365b698d --- /dev/null +++ b/_includes/icon/social/googleplus.svg @@ -0,0 +1,3 @@ + + + diff --git a/_includes/icon/social/linkedin.svg b/_includes/icon/social/linkedin.svg new file mode 100644 index 00000000000..7310c9ba90c --- /dev/null +++ b/_includes/icon/social/linkedin.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/_includes/icon/social/pinterest.svg b/_includes/icon/social/pinterest.svg new file mode 100644 index 00000000000..dd16a1d5573 --- /dev/null +++ b/_includes/icon/social/pinterest.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/_includes/icon/social/qq.svg b/_includes/icon/social/qq.svg new file mode 100644 index 00000000000..6d47a4c6bb3 --- /dev/null +++ b/_includes/icon/social/qq.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/_includes/icon/social/twitter.svg b/_includes/icon/social/twitter.svg new file mode 100644 index 00000000000..09d46cc58b6 --- /dev/null +++ b/_includes/icon/social/twitter.svg @@ -0,0 +1,3 @@ + + + diff --git a/_includes/icon/social/weibo.svg b/_includes/icon/social/weibo.svg new file mode 100644 index 00000000000..d7f1652702e --- /dev/null +++ b/_includes/icon/social/weibo.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/_includes/icon/social/weixin.svg b/_includes/icon/social/weixin.svg new file mode 100644 index 00000000000..37cf41561c9 --- /dev/null +++ b/_includes/icon/social/weixin.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/_includes/icon/social/zhihu.svg b/_includes/icon/social/zhihu.svg new file mode 100644 index 00000000000..93d53d8f021 --- /dev/null +++ b/_includes/icon/social/zhihu.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/_includes/info/follow-me.html b/_includes/info/follow-me.html new file mode 100644 index 00000000000..8c29880dc7a --- /dev/null +++ b/_includes/info/follow-me.html @@ -0,0 +1,69 @@ +
+
+ + {% if site.email %} + + {% endif %} +
+
diff --git a/_includes/info/site-maps.html b/_includes/info/site-maps.html new file mode 100644 index 00000000000..649598ec4cc --- /dev/null +++ b/_includes/info/site-maps.html @@ -0,0 +1,17 @@ + +
+ {% if site.blog.baseurl %} +

+ +

+ {% endif %} + {% if site.artworks.baseurl %} +

+ +

+ {% endif %} +
diff --git a/_includes/logo/logo.svg b/_includes/logo/logo.svg new file mode 100644 index 00000000000..ded27f596d4 --- /dev/null +++ b/_includes/logo/logo.svg @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/_includes/snippets/page-url.html b/_includes/snippets/page-url.html new file mode 100644 index 00000000000..06b1dc1c155 --- /dev/null +++ b/_includes/snippets/page-url.html @@ -0,0 +1 @@ +{{ page.url | replace:'index.html','' | prepend: site.baseurl | replace:'//','/' | prepend: site.hostname }} \ No newline at end of file diff --git a/_includes/snippets/rss-url.html b/_includes/snippets/rss-url.html new file mode 100644 index 00000000000..9cdb11b1571 --- /dev/null +++ b/_includes/snippets/rss-url.html @@ -0,0 +1 @@ +{{ "/feed.xml" | prepend: site.baseurl | replace:'//','/' | prepend: site.hostname }} \ No newline at end of file diff --git a/_includes/utils/comment-disqus.html b/_includes/utils/comment-disqus.html new file mode 100644 index 00000000000..0f835f4e5c7 --- /dev/null +++ b/_includes/utils/comment-disqus.html @@ -0,0 +1,22 @@ +{% if site.disqus_shortname and page.key != null %} +
+ + +{% endif %} \ No newline at end of file diff --git a/_includes/utils/google-analytics.html b/_includes/utils/google-analytics.html new file mode 100644 index 00000000000..684feb9d7a1 --- /dev/null +++ b/_includes/utils/google-analytics.html @@ -0,0 +1,13 @@ +{% if site.ga_tracking_id %} + + + +{% endif %} \ No newline at end of file diff --git a/_layouts/blog-base.html b/_layouts/blog-base.html new file mode 100644 index 00000000000..755a76e3d18 --- /dev/null +++ b/_layouts/blog-base.html @@ -0,0 +1,52 @@ + + + + {% include common-head.html %} + {% include head-icons-rel.html %} + + + + + +
+ {{ content }} +
+ {% include blog/footer.html %} + + + + {% if site.isdebug == false %} + {% include utils/google-analytics.html %} + {% endif %} + + diff --git a/_layouts/blog-default.html b/_layouts/blog-default.html new file mode 100644 index 00000000000..01ca111c740 --- /dev/null +++ b/_layouts/blog-default.html @@ -0,0 +1,9 @@ +--- +layout: blog-base +--- +
+ {% include blog/header.html %} +
+ {{ content }} +
+
diff --git a/_layouts/home-base.html b/_layouts/home-base.html new file mode 100644 index 00000000000..807391f7b74 --- /dev/null +++ b/_layouts/home-base.html @@ -0,0 +1,15 @@ + + + + {% include common-head.html %} + {% include head-icons-rel.html %} + + + + + {{ content }} + {% if site.isdebug == false %} + {% include utils/google-analytics.html %} + {% endif %} + + diff --git a/_layouts/none.html b/_layouts/none.html new file mode 100644 index 00000000000..e02a27c0d8d --- /dev/null +++ b/_layouts/none.html @@ -0,0 +1 @@ +{{ content }} \ No newline at end of file diff --git a/_layouts/page.html b/_layouts/page.html new file mode 100644 index 00000000000..f40d77ede39 --- /dev/null +++ b/_layouts/page.html @@ -0,0 +1,15 @@ +--- +layout: blog-default +--- +
+
+

{{ page.title }}

+ +
+ {{ content }} +
+ {% if page.comment == null or page.comment == true %} +
{% include utils/comment-disqus.html %}
+ {% endif %} +
+
diff --git a/_layouts/post.html b/_layouts/post.html new file mode 100644 index 00000000000..be81ffc9ec9 --- /dev/null +++ b/_layouts/post.html @@ -0,0 +1,104 @@ +--- +layout: blog-base +--- +
+
+ {% include blog/header.html %} +
+
+ +
+

{{ page.title }}

+ {% include blog/article-data.html %} +
+ +
+ {{ content }} +
+ +
+ {% if page.modify_date %} + + {% else %} + + {% endif %} +
+ {% include blog/license.html %} +
+
+ {% if page.comment == null or page.comment == true %} +
{% include utils/comment-disqus.html %}
+ {% endif %} +
+
+
+ +
+ + + +{% if page.key != null and site.isdebug == false %} + + +{% endif %} diff --git a/_posts/2015-10-14-about-this-blog.md b/_posts/2015-10-14-about-this-blog.md new file mode 100644 index 00000000000..73629e34a0d --- /dev/null +++ b/_posts/2015-10-14-about-this-blog.md @@ -0,0 +1,65 @@ +--- +layout: post +title: 关于此博客 +key: 10001 +tags: blog +category: blog +date: 2015-10-14 23:15:00 +08:00 +modify_date: 2017-09-16 15:00:00 +08:00 +--- + +一直很喜欢用印象笔记。学习的心得,收藏的网页,突然之间的想法,甚至清单,提醒,歌词等等我都会把它们分(luan)门(qi)别(ba)类(zao)的仍到印象笔记中去,久而久之就积累了大量的笔记。 + + + +一个雨天,我在整理笔记时感叹到,我的大部分笔记都处于一种创造,修改,遗忘的周期中。一个笔记在写好了一段时间后,就会被渐渐遗忘在一个角落,除了有时不经意间看到或者搜索到,其他时候它们就静静的躺在那里,无人欣赏,这真是笔记的悲哀。突然我想,如果把这些笔记整理放在网上,这样这些笔记不就可以被其他需要的人继续查(xin)看(shang)了吗?于是那时就有了写博客的想法,但却一直拖到今年暑期,才在博客园开通了自己的[博客](http://www.cnblogs.com/kitian616/)。 + +在发了 4 篇(技术)博文之后,觉得这种博客平台虽然方便,但是不够个性化,缺乏定制性,于是我就想尝试着搭建一个自己的博客。在尝试一些免费主机觉得太慢太麻烦而放弃之后,偶然的看到了[这篇博文](http://cnfeat.com/blog/2014/05/10/how-to-build-a-blog/),**GitHub 上的博客,我喜欢**。 + +## 静态博客 + +搭建在 GitHub Page 上的博客属于[静态网站](https://baike.baidu.com/item/%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99),这种网站对服务器的要求低,是一种非常轻量化的网站,不过操作繁琐,每一个页面都要写一个完整的 HTML 网页文件。不过幸运的是,现在已经有很多优秀的静态博客系统,它们可以非常方便的根据你所写的内容来生成相应的网页文件,你所需要做的仅仅是写博文(使用 [Markdown](https://zh.wikipedia.org/wiki/Markdown)书写),然后运行博客系统生成网页文件,再将生成好的网页文件上传到服务器上去。简单的说,这些博客工具将静态网站稍微动态化了一些,有点像动态网站的页面缓存机制。 + +![静态博客系统](https://ww4.sinaimg.cn/large/73bd9e13jw1ex6wbkhmgvj20fu04h0sp.jpg) + +但是,即便如此,这种方式仍然是十分繁琐和麻烦的,如果不是特别折腾,特别爱好的话,我还是建议使用传统的动态网站(Wordpress 是个好东西)。 + +目前比较流行的静态博客系统有 + +- [Jekyll](https://github.com/jekyll/) + +- [Pelican](https://github.com/getpelican/pelican) + +- [Octopress](https://github.com/imathis/octopress) + +- [Hexo](https://github.com/hexojs/hexo/) + +这个博客使用的是 Jekyll 博客系统,因为 GitHub Page 上已经搭建好了一个 Jekyll 的运行环境,我们只需上传源码即可,GitHub 会在后台自生成网页文件,不需要本地编译了,不需要为源码和网页文件分别建立分支了(强迫症表示很爽),而其他的系统需要你上传本地生成好的网页文件。这样一来,我们可以直接在网页版 GitHub 上编辑 Markdown 文件来直接发布博文了,是不是有动态网站的影子? + +## 搭建过程 + +这篇博文旨在记录此博客的形成过程,并非是一个搭建博客的教程,如果你对静态博客的搭建感兴趣,在网上的教程有很多,这里放上一个[知乎帖子](https://www.zhihu.com/question/20962496),感兴趣的朋友可以参考一下。 + +静态博客仅仅只提供了静态的页面,比如主页、博文等等,它无法提供评论这样具有动态交互的功能,这里我们可以借助第三方评论系统来实现。如今有很多社会化的评论系统,国外有 Disqus,这里我使用是多说,毕竟国内的评论系统还是更接地气些。 + +还有就是博客的图片,因为图片体积相对较大,占据空间多,在传输时会大量的消耗服务器的带宽。**这里我建议把图片资源放在其他网站以减轻 GitHub 服务器的负担。**专业提供图片外链存储服务的网站叫做**图床**,它们提供空间存放图片,同时允许你把图片对外连接。其实空间相册,网盘等都可以当作图床,只要把博文所引用图片的访问权限设为公开(即所有人都能访问的)即可,这样不管是谁浏览你的博文就能看到引用的图片了。新浪微博的微相册就是一个很好的图床,本博客博文中的图片就是是存放在[这个微相册](http://photo.weibo.com/1941806611/albums)里的。 + +## 本博客使用到的工具 + +- [GitHub Pages](https://pages.github.com/) + +- [Jekyll](https://github.com/jekyll/) 静态博客系统 + +- [Pygment](http://pygments.org/) 代码高亮 + +- [微相册](http://photo.weibo.com/) 图床 + +- [Emojify.js](https://github.com/Ranks/emojify.js) 显示 Emoji + +- [DISQUS](https://disqus.com/) 评论系统 + +- [Google Analytics](https://www.google.com/analytics/) 网站统计分析工具 + +## 后记 + +[Qi's blog](https://tianqi.name/blog)是一个计算机技术博客。作为一个计算机专业的学生,学好专业知识的同时能够分享知识是一件很值得也是一件很有成就感的事。 \ No newline at end of file diff --git a/_posts/2015-10-24-how-to-connect-to-Vbox-with-SSH.md b/_posts/2015-10-24-how-to-connect-to-Vbox-with-SSH.md new file mode 100644 index 00000000000..c4ebef80c56 --- /dev/null +++ b/_posts/2015-10-24-how-to-connect-to-Vbox-with-SSH.md @@ -0,0 +1,127 @@ +--- +layout: post +title: 如何通过 SSH 来连接 VirtualBox 虚拟机 +key: 10002 +tags: Linux VirtualBox SSH +category: blog +date: 2015-10-24 23:00:00 +08:00 +--- + +说起来使用 Linux 也快有 4 年了。从最开始的 Ubuntu 到 CentOS 再到现在的 Arch Linux。 + +不得不说 Linux 确实是一个非常适合开发的系统,Linux 的软件包管理系统使得软件的安装,升级都非常的方便。而在 Windows 下,你得先去官网下载安装程序,安装路径,下一步,下一步,完成……升级也是相当的麻烦(别跟我提什么软件管家之类的,我已深恶痛绝)。总之,**Linux 大法好,奈何软件少。**很多时候我还是离不开 Windows,因此我的 Linux 都是安装在 VirtualBox 虚拟机(因为它是免费开源的)中的。 + +有时为了共享虚拟机资源,我们需要把 VirtualBox 里的 Arch Linux 虚拟机作为“服务器”,其他的终端便可以连接登陆“服务器”,实现对服务器的操作。 + + +## 环境 + +- SSH 服务端:虚拟机上的 Arch Linux(实体机系统为:Windows 10) + +- SSH 客户端:Windows / Android + +## SSH 协议 + +上面所说的就是远程登录,在 Linux 世界中,远程登陆最常用的就是 SSH 协议。 + +SSH 是由客户端和服务端的软件组成的。 + +服务端是一个守护进程(daemon),他在后台运行并响应来自客户端的连接请求。服务端一般是 sshd 进程,提供了对远程连接的处理,一般包括公共密钥认证、密钥交换、 对称密钥加密和非安全连接。 + +客户端包含 SSH 程序以及像 scp(远程拷贝)、slogin(远程登陆)、 sftp(安全文件传输)等其他的应用程序。 + +详情见[维基百科](https://zh.wikipedia.org/wiki/Secure_Shell)(可能需要爬梯) + +## 主机端(ArchLinux) + +OpenSSH 是 SSH 的开源实现,它包含了服务端和客户端。要想连接到 VBox 中的 Arch Linux,首先我们需要在 Arch Linux 上安装并启动 sshd 服务(即 OpenSSH 的主机端服务)。 + +安装 OpenSSH: + +{% highlight console %} +# pacman -Syy openssh +{% endhighlight %} + +启动 sshd 服务: + +{% highlight console %} +# systemctl start sshd +{% endhighlight %} + +要让 sshd 服务自启动可以: + +{% highlight console %} +# systemctl enable sshd +{% endhighlight %} + +这样服务端的 sshd 守护进程已经启动了,它将一直等待连接请求并对请求进行相应。 + +因为我们是无法直接连接到虚拟机上的,必须要通过实体机来间接的连接到虚拟机(如下图所示)。如果是直接把实体机作为 sshd 服务端就不需要进行次步骤。 + +![虚拟机连接示意图](https://ww2.sinaimg.cn/large/73bd9e13jw1exdn5mgqedj20d609z0ss.jpg) + +在 VBox 网络设置里选择端口转发,将虚拟机的 SSH 服务端口映射到实体机上。 + +![VBox网络设置/端口转发](https://ww3.sinaimg.cn/large/73bd9e13jw1ex0xxg0sqnj20hc099t8p.jpg) + +这里我把 VirtualBox 虚拟机的 22 端口(sshd 服务端口)转发到实体机的 2201 端口,这样就可以通过访问实体机的 2201 端口来访问虚拟机的 sshd 服务端口。 + +## 客户端(Windows) + +Windows 下的 SSH 软件有很多,这里使用 [PuTTY](http://www.putty.org/)(官网打不开可以使用快照系统)。 + +装好之后,我们可以看到好几个快捷方式,其中 PuTTY 是主程序,进行 SSH 连接。PuTTYgen 负责公私密钥对生成,这在后面会用到。 + +![PuTTY](https://ww4.sinaimg.cn/large/73bd9e13jw1exdp9flr7lj204k072aa8.jpg) + +打开 PuTTY 填写 ip(Windows 下输入 `ipconfig` 查看 ip 地址)和端口,就是实体机的 ip(注意不是虚拟机的!)和上一步映射的端口,设置保存。 + +![填写ip和端口](https://ww4.sinaimg.cn/large/73bd9e13jw1ex0xxh007qj20ck0c5aag.jpg) + +由于我是在实体机本地连接的,所以 ip 地址用的是 localhost,如果是实体机之外的设备(比如后面的安卓),就必须要输入实体机的 ip 地址,并且该设备必须跟实体机在同一个局域网中。 + +填写好了 ip 和端口之后就可以点击 Open 按钮登陆了。 + +![使用密码方式登陆](https://ww3.sinaimg.cn/large/73bd9e13jw1ex0xxl9bj9j20id0bmgli.jpg) + +为了方便,我们可以填写自动登陆的用户名,这里我的用户名为 chi,这样每次连接后就不用再输入用户名了。 + +![填写用户民](https://ww3.sinaimg.cn/large/73bd9e13jw1ex0xxhp0zpj20ck0c5glx.jpg) + +### 生成密钥对 + +要使用更加安全可靠的身份验证,我们需要设置公私密钥对。一个密钥对包含私钥和对应的公钥,私钥顾名思义就是自己保存的密钥,公钥就是对外公开的密钥。 + +打开 PuTTYgen,首先生成密钥对,当鼠标在空白区域滑动时可以加快密钥对的生成,挺有趣。 + +![生成密钥对](https://ww4.sinaimg.cn/large/73bd9e13jw1ex0xxjphp5j20db0cygls.jpg) + +生成好密钥对后,我们将公钥复制放到 ssh 服务器(虚拟机)~/.ssh/authorized_keys 文件中,然后点击 Save private key 保存私钥到本地。 + +![保存私钥](https://ww2.sinaimg.cn/large/73bd9e13jw1ex0xxk1dexj20db0cy0tc.jpg) + +然后到 PuTTY 主程序设置刚才保存的私钥文件,这样每次连接时 PuTTY 就会读取私钥文件跟服务端的公钥进行配对。这种身份验证方式比密码更为安全。因为私钥是保存在客户端上的,不会在网络上传输。 + +![设置私钥](https://ww2.sinaimg.cn/large/73bd9e13jw1ex0xxiw0wlj20ck0c50t4.jpg) + +建议在保存私钥到本地时设置私钥文件密码,这样安全性更高。 + +在登陆时直接输入上面设置的密钥文件密码(注意不是用户密码!)即可登录。如果没有设置密钥文件密码则会自动登陆。 + +![使用密钥对登陆](https://ww3.sinaimg.cn/large/73bd9e13jw1exdos2mzglj20id0bmgli.jpg) + +## 客户端(Android) + +Android 下的 SSH 软件有很多,Play 上一搜一大把,这里使用 [ConnectBot](https://play.google.com/store/apps/details?id=org.connectbot&hl=zh-CN),排名靠前,评分也不错。 + +使用方法更上面的 PuTTY 使用差不多,首先设置 ip 和端口,也可以设置公私密钥对。 + +![ConnectBot 设置](https://ww4.sinaimg.cn/large/73bd9e13jw1exdrnkq13tj218g1z447u.jpg) + +登陆后就可以进行操作了,蓝牙键盘是必要的,触摸屏打字太慢。 + +![登录成功](https://ww3.sinaimg.cn/large/73bd9e13jw1exdrnjix2uj218g1z4qfh.jpg) + +我的 [vim 配置文件](https://github.com/kitian616/vimrc) + +![vimrc](https://ww2.sinaimg.cn/large/73bd9e13jw1exdrnih755j218g1z47n8.jpg) diff --git a/_posts/2015-10-26-my-personal-domain.md b/_posts/2015-10-26-my-personal-domain.md new file mode 100644 index 00000000000..4dec2a5b593 --- /dev/null +++ b/_posts/2015-10-26-my-personal-domain.md @@ -0,0 +1,32 @@ +--- +layout: post +title: 终于有自己的域名了 +key: 10003 +tags: blog +category: blog +date: 2015-10-26 23:00:00 +08:00 +--- + +今天折腾了半天,终于用上了自己的域名 thomastian.com(当前的域名是[tianqi.name](https://tianqi.name))。其实本来想注册中文拼音 tianqi 的,然而这个名字太火了,所有的域名都被注册了,所以只好用英文网名了。 + + + +## 流程 + +我在[万网](https://wanwang.aliyun.com/)注册的域名,价格还不错,第一年 39 元,没想到域名现在这么便宜了。 + +域名,解析,计算,存储,应用,阿里云提供了云计算一条龙式的服务,不愧是国内最大的云计算提供商。 + +注册好域名后,进入管理控制台,在左边菜单上选择“云解析”选项对域名解析进行设置。 + + + +![域名解析](https://ww4.sinaimg.cn/large/73bd9e13jw1exex8t4v5lj20ok03kdft.jpg) + +然后在 GitCafe Pages 服务里增加申请的域名。 + +![pages设置](https://ww2.sinaimg.cn/large/73bd9e13jw1exexbgh6sij20bn05x3yh.jpg) + +几分钟后,就可以使用域名了。 + +**如果是位于大陆的主机,根据国家法律,绑定域名必须得备案。**感谢机智的 GitCafe 团队,把 pages 服务器建在了香港,省去了我们备案的麻烦。 \ No newline at end of file diff --git a/_posts/2015-11-02-class-in-JavaScript.md b/_posts/2015-11-02-class-in-JavaScript.md new file mode 100644 index 00000000000..57839f65d99 --- /dev/null +++ b/_posts/2015-11-02-class-in-JavaScript.md @@ -0,0 +1,146 @@ +--- +layout: post +title: JavaScript 的 prototype(原型)和类 +key: 10004 +tags: JavaScrip +category: blog +date: 2015-11-02 23:00:00 +08:00 +modify_date: 2017-09-11 21:00:00 +08:00 +--- + +最近在学习 JavaScript。它是一个让我倍感惊喜的语言,它不仅打开我函数式语言学习的大门,而且它关于原型的机制也是让我眼前一亮——原来面向对象还可以这么弄。 + + + +JavaScript 中的所有事物都是对象:字符串、数值、数组、函数。这一点跟 Java、Python 这些面向对象的语言没有太大区别。但是 JavaScript 基于原型(prototype)的继承机制,使得 JavaScript 在实现面向对象编程时与 Java 这样的语言有很大的不同。 + +一般的面向对象语言通常是使用 Class 关键字来定义类的,但是很遗憾,JavaScript(ES5) 并没有像 Class 这样的关键字。那么 JavaScript 是怎样定义类和对象的呢? + +## Javascript的对象 + +前面我们说过 JavaScript 中的所有事物都是对象,那么我们可以这样创建对象。 + +{% highlight javascript %} +var lilei = {}; +document.write(typeof(lilei)); //object +{% endhighlight %} + +我们定义了一个叫 lilei 的字典,我们可以看到他确实是一个对象。 + +接下来,我们给 lilei 添加属性 name 和 sex,表示一个叫李雷的男性。再添加 speak 方法来表示李雷说话的动作。 + +{% highlight javascript %} +var lilei = {}; +lilei.name = "李雷"; +lilei.sex = "M"; +lilei.speak = function(){ document.write("Hi, I'm Li Lei!"); } + +//_MAIN +document.write(lilei.name); //李雷 +lilei.speak(); //Hi, I'm Li Lei! +{% endhighlight %} + +这样,我们的 lilei 对象既有了名字,也有了性别,还学会了说话。 + +接下来我们还想添加一个对象来代表韩梅梅,但是问题来了,我们不得不像 lilei 对象一样添加属性,方法,这些代码基本都是相同的。很明显,按照面向对象的思想,我们应该创建一个 People 类来代表抽象的人,再来通过人这个类来生成具体的对象,JavaScript 又是如何创建类的呢? + +## Javascript的类 + +首先从 Prototype(原型)说起。 + +下面的示例代码中,我创建了一个 Person 函数来充当构造函数,并且向函数的 prototype 中加入了 name 和 sex 属性以及一个 speak 函数。最后使用 new 关键字创建了 hanmeimei 对象。其实这个代码还不完美,这里仅仅用来说明原型,后面还会改进。 + +{% highlight javascript %} +var Person = function(){} +Person.prototype.name = "韩梅梅"; +Person.prototype.sex = "F"; +Person.prototype.speak = function(words) { document.write(words); } + +//_MAIN +var hanmeimei = new Person(); +document.write(hanmeimei.name); //韩梅梅 +hanmeimei.speak("Hi, I'm Han Meimei!"); //Hi, I'm Han Meimei! +{% endhighlight %} + +这种使用 new 关键字创建对象的方式在 JavaScript 中使用非常广泛,说来也怪,在一个没有 Class 关键字的语言中居然有创建对象的 new 关键字。 + +### prototype 和 \_\_proto\_\_ 属性 + +看到这里大家可能会很困惑,这个 prototype 究竟是如何将属性和函数传递给对象的呢?多说无益,直接上图。 + +**图中用椭圆表示普通对象,用圆角矩形来表示函数对象**。 + +![模型图](https://ww2.sinaimg.cn/large/73bd9e13jw1expb5r0bn4j20eo0bedg9.jpg) + +之前说过 JavaScript 中的所有事物都是对象,Person 函数也是对象,是普通对象的扩充。JavaScript 的函数对象有一个特殊的 prototype 属性,它指向了一个普通对象。一般的普通对象有一个 \_\_proto\_\_ 属性,当然函数对象也由该属性。 + +当使用 new 关键字创建新对象的时候,发生了三件事情: + +- 一个叫 hanmeimei 的空对象被创建,首先 hanmeimei 与{}一致; +- 将 hanmeimei 的 \_\_proto\_\_ 属性指向 Person 的原型属性,constructor 属性指向 Person 函数对象; +- Person 方法被执行。当然此时 Person 函数的方法是空的。 + +这样通过构造函数生成的对象就通过 \_\_proto\_\_ 属性与构造函数的原型关联了起来。当我们调用 hanmeimei 的 speak 函数时,浏览器会首先在 hanmeimei 对象中查找 speak 函数,找不到,然后再到 \_\_proto\_\_ 所指向的对象中查找,找到了,然后调用函数。 + + \_\_proto\_\_ 可以看成一种继承关系, \_\_proto\_\_ 所指向的对象可以看成是该对象的父对象。或者说, \_\_proto\_\_ 所指向的对象相当于是一个模板,而该对象是对这个模板的修改和扩充。 + +## Javascript 中的 this 变量 + +前面说过,上面示例代码是不完美的。我们想一下,在上一个示例中,我们每创建一个对象,对象的名称都叫“韩梅梅”,这显然是不合适的。 + +我们可以这么写。 + +{% highlight javascript %} +var Person = function(name, sex){} +Person.prototype.name = name; +Person.prototype.sex = sex; +…… +{% endhighlight %} + +但是仔细思考,这也有问题,每次使用 new 构造对象时,都会对原型中的属性赋值。在我们构建“李雷”时,“人类”的名字是“李雷”,而在我们构建“韩梅梅”时,“人类”的名字又变成了“韩梅梅”。人类(原型)的名字不断的改变,这显然也是不太对的。 + +{% highlight javascript %} +var lilei = new Person("李雷", "M"); +var hanmeimei = new Person("韩梅梅", "F"); +{% endhighlight %} + +我们可以使用 this 变量来解决这个问题。 + +{% highlight javascript %} +var Person = function(name, sex){ + this.name = name; + this.sex = sex; +} +Person.prototype.speak = function(words) { document.write(words); } + +//_MAIN +var lilei = new Person("李雷", "M"); +document.write(lilei.name); //李雷 +lilei.speak("Hi, I'm Li Lei!"); //Hi, I'm Li Lei! +var hanmeimei = new Person("韩梅梅", "F"); +document.write(hanmeimei.name); //韩梅梅 +hanmeimei.speak("Hi, I'm Han Meimei!"); //Hi, I'm Han Meimei! +{% endhighlight %} + + +在这个示例中,当我们使用 new 关键字创建新对象的最后,Person 方法执行,将新对象 lilei 作为 this 引用传递,于是该对象就添加上了 name 和 sex 属性。 + +![改进的模型图](https://ww2.sinaimg.cn/large/73bd9e13jw1expb5qrg0ej20df0c7t95.jpg) + +此时,name 和 sex 属性并不在 Person.prototype 中,而是 Person 构造函数为每个生成的对象添加了 name 和 sex 属性。这些属性是完全属于生成的对象的,构造函数只是执行了“添加属性”的指令。 + +这样,每个人都有名字和性别属性(为了简单起见,就姑且这么认为吧),然而每个人的名字的值和性别的值是不一样的。人的名字和性别属于他/她自己,人类只负责给每个人起名和确定性别。 + +这样这个 Person 类就比较合乎逻辑了,当然还有其他的方法来构建类,这里也可以看出 JavaScript 的灵活性。 + +## 附加参考 + +上面的示意图,为了突出重点,其实省略了不少的细节。这里附上完整的结构示意图,作为参考。 + +![总示意图](https://ww1.sinaimg.cn/large/73bd9e13jw1expb5rhnvgj20j00n93zx.jpg) + +其实,name、sex 和 speak 函数也是对象,它们同样有 prototype 和 constructor 属性,图中并没有画出。lilei 对象跟 hanmeimei 相同,故省略。 + +本博文的示意图都是我经过测试得到的,网上的资料都有一些问题和矛盾,所以就自己动手了。这个过程虽然费时但确实很有意义,有时间的朋友可以[下载测试代码](https://github.com/kitian616/practice_workspace/blob/master/javascript/js/proto_test.js)研究一下 :-) + +我使用的是 Google Chrome(version: 46),不同的浏览器结果可能会有所不同。 \ No newline at end of file diff --git a/_posts/2015-11-10-how-to-use-java-javac-jar-commands.md b/_posts/2015-11-10-how-to-use-java-javac-jar-commands.md new file mode 100644 index 00000000000..16bcd7b853b --- /dev/null +++ b/_posts/2015-11-10-how-to-use-java-javac-jar-commands.md @@ -0,0 +1,153 @@ +--- +layout: post +title: 使用命令来编译、运行、打包 Java 程序(java, javac, jar) +key: 10005 +tags: Java Linux bash +category: blog +date: 2015-11-10 23:03:00 +08:00 +--- + +前一阵子需要把一个原本在 Windows 环境下的 Java Eclipse 项目放到 Linux 环境下测试,由于不想在 Linux 虚拟机中装 Eclipse,于是索性打算用命令来运行测试该项目。结果花了半小时,终于把项目跑起来了。 :sweat: :sweat: :sweat: + + +事后实验总结了一下,于是有了这篇博文。 + +## 带 package 包名 Java 程序的编译和运行 + +首先我们来新建一个测试类 HelloJava。 + +{% highlight java %} +package com.thomastian.test; +public class HelloJava +{ + public static void main(String args[]) + { + System.out.println("Hello, Java"); + } +} + +{% endhighlight %} +直接编译(不推荐) + +{% highlight console %} +$ javac HelloJava.java +{% endhighlight %} + +带目录结构的编译 + +{% highlight console %} +$ javac -d . HelloJava.java +{% endhighlight %} + +![带选项的 javac](https://ww2.sinaimg.cn/large/73bd9e13jw1exx0q5nnytj207402dt8m.jpg) + +加上了 -d 选项后在当前目录下建立了对应包层次的目录结构(如上图)。如果没有加 -d,则在当前目录下生成 class 文件,需手动建立目录结构。 + +在运行时,需要加上主类对应的目录层次,可以采用包形式“.”,或者目录的形式“/”,这样 JVM 就会根据目录层次来查找对应的 class 文件并执行。**执行目录必须是包顶级层次的上级目录**(在这里就是 com 的上级目录“~”了)。 + +{% highlight console %} +$ java com.thomastian.test.HelloJava +$ java com/thomastian/test/HelloJava +{% endhighlight %} + +## Java的归档(jar) + +Java 使用 jar 命令打包(创建归档文件)。(jar 命令的选项跟 tar 命令是相同的,毕竟都是打包归档类的命令。关于 tar 命令可以看[这篇博客园文章](http://www.cnblogs.com/kitian616/p/4522456.html)) + +这里前面的“HelloJava.jar”对应包的名称,后面的“com”对应的包的根目录。 + +{% highlight console %} +$ jar cvf HelloJava.jar com +{% endhighlight %} + +运行 jar: + +{% highlight console %} +$ java -jar HelloJava.jar +{% endhighlight %} + +此时会提示错误: + +![错误提示](https://ww1.sinaimg.cn/large/73bd9e13jw1exwbudlmsoj20bn014q2t.jpg) + +用解压软件打开 jar 包文件,可以看到里面有一个 MAINFEST.MF 文件。 + +![MAINFEST.MF 文件](https://ww3.sinaimg.cn/large/73bd9e13jw1exwbx4yt7jj20cy02hjr9.jpg) + + Manifest-Version: 1.0 + Created-By: 1.8.0_65 (Oracle Corporation) + +这是一个在归档时自动生成的文件,它是 JAR 档案文件中的特殊文件,用来定义扩展或档案打包相关数据。 + +如果 JAR 文件被用作可执行的应用程序,那么应用程序需要告诉 Java 虚拟机入口点位置,任意包含 `public static void main(String[] args)` 方法的类即为入口点。该信息由文件头 Main-Class 提供,基本格式如下: + + Main-Class: classname + +以上内容摘自[维基百科条目:Manifest 资源配置文件](https://zh.wikipedia.org/wiki/Manifest%E8%B5%84%E6%BA%90%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6),详细讲解了 Manifest 文件的用法以及相关资料。 + +接下来我们创建一个文本文件 Mainfest(随便什么名字都行),在文件中添加 Main-Class 值,注意冒号后面有空格,不然会报错,然后保存。 + + Manifest-Version: 1.0 + Created-By: 1.8.0_65 (Oracle Corporation) + Main-Class: com.thomastian.test.HelloJava + +在 jar 命令加上 f 选项,即可指定自定义的 Mainfest 文件,在包名的后面加上刚才创建的文件名“mainfest”。在运行完命令时,mainfest 文件的内容就会赋给 jar 包中的 MAINFEST.MF 文件,完成了 MAINFEST 文件的自定义。 + +{% highlight console %} +$ jar cvfm HelloJava.jar mainfest com +{% endhighlight %} + +![带 f 选项的 jar 命令](https://ww2.sinaimg.cn/large/73bd9e13jw1exwbuehk88j20km05j754.jpg) + +生成 jar 包后,再执行 `java -jar HelloJava.jar` 命令即可成功运行。在设定了 jar 的文件关联后甚至可以双击运行,十分方便。 + +上面说过,被用作可执行的应用程序的 jar 包才需要指定 Main-Class,有些包是供其它程序调用的类库,并没有 main 方法,下文的 ImportClass 类就是这样。 + +## jar包的引用 + +上文讲的是如何创建 jar 包,接下来我们来看看包的引用。 + +首先我们创建一个 ImportClass 类,用于引用。注意待引用的类必须为 public 类型,否则对外是不可见的,这样也就无法引用了。 + +{% highlight java %} +package blog.thomastian.test; +public class ImportClass{ + public void print() + { + System.out.println("oh, my import class!"); + } +} +{% endhighlight %} + +按照上文的方法将其编译为 jar 包。由于该文件没有 main 方法,所以也就无需指定 Main-Class 了。 + +修改前面的 HelloJava 类,引用并调用上面的 ImportClass 类。 + +{% highlight java %} +package com.thomastian.test; +import blog.thomastian.test.ImportClass; +public class HelloJava +{ + public static void main(String args[]) + { + ImportClass ic = new ImportClass(); + ic.print(); + } +} +{% endhighlight %} + +编译: + +{% highlight console %} +$ javac -d . -cp lib/ImportClass.jar HelloJava.java +{% endhighlight %} + +运行: + +{% highlight console %} +$ java -cp .:lib/ImportClass.jar com.thomastian.test.HelloJava +{% endhighlight %} + +![运行结果](https://ww1.sinaimg.cn/large/73bd9e13jw1exwbufbia7j20eg012t8k.jpg) + +多个路径之间用“:”(Linux) / “;”(Windows)隔开(跟系统环境变量的写法相同)。在编译的时候 -cp 路径可以不包含当前路劲,但是在运行的时候必须要加上代表当前路径的“.”,具体可参考[这篇stackoverflow问答](https://stackoverflow.com/questions/11459664/how-to-add-multiple-jar-files-in-classpath-in-linux?newreg=4df9dca55f4a4557a705a3fd90625f28)。 \ No newline at end of file diff --git a/_posts/2016-01-02-new-year-new-blog.md b/_posts/2016-01-02-new-year-new-blog.md new file mode 100644 index 00000000000..1252adabb1c --- /dev/null +++ b/_posts/2016-01-02-new-year-new-blog.md @@ -0,0 +1,89 @@ +--- +layout: post +title: 新的一年,新的博客 +key: 10006 +tags: blog FrontEnd +category: blog + +picture-frame: shadow +date: 2016-01-02 23:30:00 +08:00 +modify_date: 2016-01-13 22:40:00 +08:00 +--- + +去年使用 Pelican 搭建了我的第一个个人站点,发博文(虽然只有 5 篇,惭愧),选主题,加功能……总之我很享受这个过程。搭建站点,就像是在装修一个房子。一开始空空如也,到后来有了沙发,有了餐桌,有了床……就这样,一个空空的房子开始有了你的印记,慢慢的你对它产生了感情,把它称作为“家”。 + + + +但是,其实我一直有个遗憾,我没有找到一个让我满意的主题。就像是房子装修,你可以使用别人设计好的方案,你也可以自己设计方案,或者与设计师合作设计方案。总之,在博客搭建好以来,我就很想自己设计一个主题。但是首先,我不会前端;其次,我不懂设计。直到有一天,我无意中发现了[这个博客](http://zhangwenli.com/blog/),真的是让我眼前一亮,作为一个想成为**全栈网络工程师**的我,前端是必须要了解和掌握的,于是我就开始踏上了我的前端学习之路。 + +## 前端学习 + +因为平时白天要实习,大部分都是在晚上 8:00 - 11:00 和周末弄的。我从去年 10 月初开始学习 JavaScript,写了一篇[关于js的博文](/blog/2015/11/02/class-in-JavaScript.html)。一个月之后,我开始一边写网站一边学习 HTML(HTML5)和 CSS(CSS3, SASS)。在此期间共看了 5 本书(后 3 本只是随便翻了翻): + +- [JavaScript编程精解](https://book.douban.com/subject/19933548/) +- [HTML5经典实例](https://book.douban.com/subject/25756111/) +- [响应式Web设计全流程解析](https://book.douban.com/subject/26241601/) +- [CSS高效开发实战—CSS 3、LESS、SASS、Bootstrap、Foundation](https://book.douban.com/subject/25966259/) +- [HTML5和CSS3快速参考](https://book.douban.com/subject/25730129/) + +同时也参考了一些网上的资料和文档,当然还包括一些网站的代码和设计。 + +总之,前端上手很容易,然而想要精通很难,浏览器兼容、动画、访问速度优化、搜索引擎优化……问题太多了。而且前端也是一个变化相对快速的领域,新的规范,新的工具,新的设计模式...当然,这也说明了前端领域的活跃性。我一直都坚信,未来 web 应用会更加的流行。 + +## 响应式设计 + +响应式设计简单的说就是网页能够自动适应不同的屏幕尺寸(手机、平板、电脑)。跟扁平化设计一样,它们都是智能手机和平板电脑普及的产物,为了应对当前多样性的设备而出现的。当然,响应式并不局限于网页,安卓应用、Windows 10 的 UWP 应用,都或多或少的带有响应式的特性。 + +当然,响应式并不是万能的。一些布局复杂的网站,根据不同的设备写不同的 CSS 是更好的方案(多套 CSS)。一来更节约带宽,二来可以减小一些复杂度。而像博客这样布局简单的网站,响应式反而更方便,因为你只需维护一套 CSS 即可。 + +关于响应式的实现,网上有很多不错的介绍,比如[这篇阮一峰的博文](http://www.ruanyifeng.com/blog/2012/05/responsive_web_design.html)和[这篇w3cplus网站上的文章](http://www.w3cplus.com/css3/responsive-design-in-3-steps),这里不再累述。其实我主要是想分享一下我的设计思路。 + +事实证明,设计是一个十分消耗时间的事情,你需要不断的调整,不断的修改。这个网站就是经过了 5 次大的布局调整和很多次局部布局修改才有了现在的模样。 + +响应式网页的布局是通过网页容器的宽度来划分的,本网站的划分方式为: + +- 手机:0~600px +- 平板:600~1000px +- 电脑:1000px 以上 + +一般来说,一个网页一般由网页标题(title)、导航(nav)、侧边栏(aside)、主要类容(main)、页脚(footer)组成。 + +当容器宽度很宽时(比如电脑),往往竖直方向空间就很有限,我们可以把一些附属信息以侧边栏的形式表现出来。而当容器宽度有限的情况(手机是典型),侧边栏就显得非常不适合了,此时通常的做法就是将信息从上到下顺序布局,下面来看一下我的设计。 + +### 电脑布局 + +在电脑布局中,我特地把标题(title)、导航(nav)和个人信息(aside)放在了左边,并且在主要类容右边留了一些空白,这样显得文章更居中一些。 + +![电脑布局](https://ww4.sinaimg.cn/large/73bd9e13jw1ezmftjyhwkj21kw0uk4bo.jpg) + +### 平板布局 + +对于这种宽度不足的情况,我把标题、导航放在了上方,而把个人信息放在了页脚。 + +![平板布局](https://ww1.sinaimg.cn/large/73bd9e13jw1ezmftf9ijyj218g1sxwwy.jpg) + +### 手机布局 + +此时的宽度只能放得下标题了,导航隐藏了起来,点击最右的按钮即可显示导航。 + +![手机布局](https://ww4.sinaimg.cn/large/73bd9e13jw1ezmfsxyscpj20zk0tc43s.jpg) + +总之,这是一种很常见的响应式布局方法,参考了[简书](http://www.jianshu.com/)的布局。 + +## 新博客 + +为了尽可能的学习到最新的技术,我对这个网站做了如下几个设定: + +- 该网站仅支持现代浏览器(IE10 及以上、Edge、Chrome、Safari、Firefox) +- 尽量使用 HTML5 的语义标签 +- 使用 CSS3 的新特性,包括阴影和过渡 +- 使用 SVG(矢量图),该网站的所有图标和 logo 都是矢量图 +- 除了 jQuery 和必要的插件外, 不使用任何第三方的模板(自己造轮子) + +同时博客平台也从以往的 Pelican 迁移到了 [Jekyll](http://jekyllrb.com/),因为后者跟 GitHub 结合得更紧密一些。于此同时博客也从 GitCafe 重新迁回到了 GitHub(百度收录什么的去死吧),正所谓人生贵在折腾。 + +该博客会是我的一个长期项目,以后我会继续优化该博客的样式和功能。未来会把它作为一个主题发布出去,让更多的人能够免费的使用和修改我的主题。 + +最后祝大家新年快乐! :tada: :tada: :tada: + +![happy-2016](https://wx2.sinaimg.cn/large/73bd9e13ly1fjl8wkl8opj20r10ostlp.jpg) \ No newline at end of file diff --git a/_posts/2016-02-17-may-the-force-be-with-you.md b/_posts/2016-02-17-may-the-force-be-with-you.md new file mode 100644 index 00000000000..30da7088592 --- /dev/null +++ b/_posts/2016-02-17-may-the-force-be-with-you.md @@ -0,0 +1,251 @@ +--- +layout: post +title: 用 HTML5 实现星战的开篇字幕 +key: 10007 +tags: FrontEnd +category: blog +date: 2016-02-17 21:30:00 +08:00 +--- + +![the-force-awake](https://wx3.sinaimg.cn/large/73bd9e13ly1fjldo8obm7j21kw16oaj8.jpg) + +去年慕名去电影院看了星战的最新作[《原力觉醒》](https://movie.douban.com/subject/20326665/)。故事简单,不过里面的场景和人物(非常喜欢汉·索洛,可惜了)特别有趣。光剑的吱吱声,武士的服饰,海岛上的拜师(卢克终于出现了)……和中土世界(You walk a lonely road, Oh! How far you are from home...)不同,星战世界处处展现出了一种神秘的东方哲学。 + +看完了电影后,我就把星战的整个系列看了一遍。星战,在每部电影的开头都会有一段经典的字幕动画,黄色的文字呈梯形向前方流动,渐渐消失,背景则是漆黑的宇宙星空。简单,但令人印象深刻。 + + + +昨天下午在查找资料的时候,无意中看到了一篇[CSS3 3D 转换的介绍](http://www.w3school.com.cn/css3/css3_3dtransform.asp),胡乱看到了这张图: + +![css3_3dtransform](https://wx1.sinaimg.cn/large/73bd9e13ly1fjldo82ostj207c06wglf.jpg) + +等等,这不是星战的字幕吗?于是抱着好玩的心态,写出了[这个 H5 动画](/blog/projects/star-war.html)。 + +## 准备工作 + +- 文本编辑器 +- 支持 H5 的浏览器 +- JQuery +- 乐事薯片 + +首先,我们来构建一个跟浏览器窗口大小一样的黑色画布 `div.paper`。 + +{% highlight html %} + + + + + + + + +
+
+ + +{% endhighlight %} + +充满整个窗口…… + +{% highlight css %} +.paper { + height: 100%; + width: 100%; + background-color: black; +} +{% endhighlight %} + +查看一下效果,整个界面惨白一片…… + +![惨白的界面](https://wx3.sinaimg.cn/large/73bd9e13ly1fjldo7inddj20l10hp74p.jpg) + +![AreYouKiddingMe](https://wx3.sinaimg.cn/large/73bd9e13ly1fjldgnth3cj206404ja9y.jpg) + +查看界面元素可以发现,此时 `div.paper` 的 hight 为 0,并没有像我们写的 `height: 100%` 那样等于窗口的高度。为什么呢? + +我们知道这里的 100% 指的是相对父级元素高度的 100%,`div.paper` 的父级是 `body`,而此时 `body` 的高度也为 0,于是我们加上 + +{% highlight css %} +body { + height: 100%; +} +{% endhighlight %} + +查看一下效果,整个界面依旧惨白一片…… + +![fuuuuuuuu](https://wx1.sinaimg.cn/large/73bd9e13ly1fjldgotoe6j208706oglt.jpg) + +查看界面元素可以发现,此时 `body` 的高度依然为 0,再来看上面的 HTML 代码,原来 `body` 上面还有 `html` 元素,于是我们加上: + +{% highlight html %} +html { + height: 100%; +} +{% endhighlight %} + +啧啧,大功造成。然后去除掉 `body` 的内边距(padding),再来看一下效果。 + +![完美的画布](https://wx3.sinaimg.cn/large/73bd9e13ly1fjldo77qxgj20ki0e2q37.jpg) + +PERFECT + +![完美](https://wx3.sinaimg.cn/large/73bd9e13ly1fjldgn3ycej208y08cwez.jpg) + +## 类容文字元素 + +我们加上一个 `div#content` 元素作为文字层。 + +{% highlight html %} + +
+
+

A long time ago, in a galaxy far, far away...

+

+

Episode IV

+

A NEW HOPE

+

It is a period of civil war. Rebel spaceships, striking from a hidden base, have won their first victory against the evil Galactic Empire.

+

During the battle, Rebel spies managed to steal secret plans to the Empire's ultimate weapon,the DEATH STAR,an armored space station with enough power to destroy an entire planet.

+

Pursued by the Empire's sinister agents,Princess Leia races home aboard her starship,custodian of the stolen plans that can save her people and restore freedom galaxy...

+
+
+ +{% endhighlight %} + +设置字体、字号、颜色和文字居中。 + +{% highlight css %} +body { + height: 100%; + padding: 0; + margin: 0; + font-family: "lucida grande", "lucida sans unicode", lucida, helvetica, "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif; + color: #ffda00; + font-size: 4em; + text-align: center; +} +{% endhighlight %} + +来看看效果。 + +![带白框的文字](https://wx2.sinaimg.cn/large/73bd9e13ly1fjldo6rdlwj20ki0e2q3h.jpg) + +噗……怎么上面出现了一个白框啊。 + +![我需要冷静](https://wx1.sinaimg.cn/large/73bd9e13ly1fjldgmnkamj20c809574j.jpg) + +冷静下来,查看元素,原来上面之所以会出现一个白框,是因为“A long time ago”这一个段落 `p` 的外边距(margin)穿过了 `div.paper`,到了 `div.paper` 的上方, 这种规则称为**[外边距叠加](http://www.cnblogs.com/snowinmay/archive/2013/04/28/3048997.html)**,由于外边距是透明的,因此它呈现出了父元素 `body` 的白色。 + +解决方法很简单。 + +1. 设置 `div.paper` 内边框,使得子元素的外边距(margin)无法穿透。 + +2. 设置 `body` 的背景色。 + +这里,我使用方法二。 + +### 添加滚动条 + +设置 `content` 的样式、高度、宽度、居中当然还有滚动条。 + +{% highlight css %} +#content { + box-sizing: border-box; + margin: 0 auto; + width: 80%; + height: 100%; + overflow: scroll; +} +{% endhighlight %} + +看看效果。 + +![平面初步效果](https://wx4.sinaimg.cn/large/73bd9e13ly1fjldo64ekqj211y0ijjrn.jpg) + +哎哟,不错哦。 + +![good](https://wx4.sinaimg.cn/large/73bd9e13ly1fjldvedp06j207p0693zd.jpg) + +## CSS3的3D转换 + +最关键的部分到了,根据 w3school 的[这个示例](http://www.w3school.com.cn/tiy/t.asp?f=css3_perspective1),实现星战那样的 3D 字幕涉及到 perspective 和 rotateX 属性。 + +照葫芦画瓢, 我们给 `body` 和 `div.paper` 添加 3D 变换: + +{% highlight css %} +body { + /*省略*/ + perspective: 500; + -webkit-perspective: 500; +} +{% endhighlight %} + +{% highlight css %} +.paper { + /*省略*/ + transform: rotateX(60deg); + -webkit-transform: rotateX(60deg); +} +{% endhighlight %} + +看看效果。 + +![3D变换1](https://wx4.sinaimg.cn/large/73bd9e13ly1fjldo5mkrsj20kv0e3wf3.jpg) + +good。 + +## jQuery动画 + +下面我们来一起加上动画,让字幕从开始滚动到结尾。 + +虽然 CSS3 有动画的功能,但是我还是选择用 jQuery 来做动画。(懒……) + +jQuery 动画是用 `animate` 函数来完成的。只需要给出动画结束后**某属性**的值和动画时间(非必需)等参数,即可创建针对该参数的动画,参考[w3school 关于 JQuery 动画的介绍](http://www.w3school.com.cn/jquery/jquery_animate.asp)。 + +这里涉及到两个属性,[scrollTop](https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollTop)和[scrollHeight](https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight)。 + +scrollTop 可以控制滚动条的滚动高度,scrollHeight 可以得到滚动内容的实际高度。具体可以参考上面的链接,讲的很详细。 + +知道了 `animate` 函数和必要时属性后,很快的写下了代码。`scrollTop` 属性从开始的 0,经过 `scrollHeight * 20` 毫秒,匀速的变为了 `scrollHeight`。 + +{% highlight js %} +$(document).ready(function(){ + var scrollHeight = $("#content")[0].scrollHeight; + var scrollTop = $("#content")[0].scrollTop; + $("#content").animate({scrollTop: scrollHeight}, scrollHeight * 20, "linear"); +}()); +{% endhighlight %} + +最后,隐藏滚动条。 + +{% highlight css %} +#content { + /*省略*/ + overflow: hidden; +} +{% endhighlight %} + +![3D变换2](https://wx3.sinaimg.cn/large/73bd9e13ly1fjldo56n7jj211y0ijtc8.jpg) + +嗯,大功告成。不过还是有些问题,一开始应该是没有文字的。我们可以在 `div#content` 开头加上一个空白区。 + +{% highlight html %} +
+
+

A long time ago, in a galaxy far, far away...

+ ... +{% endhighlight %} + +{% highlight css %} +.empty-content { + box-sizing: border-box; + width: 100%; + height: 100%; +} +{% endhighlight %} + +这样就差不多了。当然我们还可以加图片背景,加背景音乐。这里就不做了…… + +[动画演示](/blog/projects/star-war.html) | +[源码](https://github.com/kitian616/blog/blob/gh-pages/projects/star-war.html) + +![Yoda](https://wx1.sinaimg.cn/large/73bd9e13ly1fjldo4fv1nj20b404qglq.jpg) \ No newline at end of file diff --git a/_posts/2016-03-05-my-favourit-softwares.md b/_posts/2016-03-05-my-favourit-softwares.md new file mode 100644 index 00000000000..c95c8e25bf7 --- /dev/null +++ b/_posts/2016-03-05-my-favourit-softwares.md @@ -0,0 +1,122 @@ +--- +layout: post +title: 我的软件清单 +key: 10009 +tags: Tools +category: blog +date: 2016-03-05 21:48:00 +08:00 +modify_date: 2017-09-16 14:30:00 +08:00 +picture-frame: shadow +picture-max-width: 480px +--- + +整理了下自己喜欢的软件,列出了这个清单。 + +我的原则是:尽量使用免费开源软件,不使用破解软件。 + +**本文长期更新,欢迎推荐。** + + +## Windows + +### PicPick + +瑞士军刀一样的软件。图像编辑器,颜色选择器,颜色调色板,像素标尺,量角器,瞄准线和白板等等,堪称全能的设计工具。更重要的是,它对个人用户是完全免费的。 + +![PicPick](https://wx1.sinaimg.cn/large/73bd9e13ly1fjle6dsbhsj204q08g0so.jpg) + +[官网链接](http://ngwin.com/picpick) + +### PuTTY + +Putty 是一个免费的,Windows 32 平台下的 telnet、rlogin 和 ssh 客户端。 + +![PuTTY](https://wx1.sinaimg.cn/large/73bd9e13ly1fjle6dbwcrj20kt0dkq38.jpg) + +[官网链接](http://www.putty.org/) + +### Advanced ip Scanner + +是可以在快速扫描局域网计算机信息的网络 IP 扫描工具,对于寻找一些没有显示的设备(比如没接屏幕的树莓派)IP 特别有用。 + +![Advanced ip Scanner](https://wx3.sinaimg.cn/large/73bd9e13ly1fjle6bprd4j20jg0erq35.jpg) + +### Oracle VM VirtualBox + +VMware Workstation 的绝佳开源替代品,十分适合在 Windows 中虚拟 Linux 系统环境。 + +![VirtualBox](https://wx4.sinaimg.cn/large/73bd9e13ly1fjle6c6dm4j20l80fhwfe.jpg) + +[官网链接](https://www.virtualbox.org/) + +### Cmder + +cmd 替代品,能最大化,标签页以及非常不错的定制性。 + +![Cmder](https://wx1.sinaimg.cn/large/73bd9e13ly1fjle6cxdlqj20qy0g0dmm.jpg) + +[官网链接](http://cmder.net/) + +### typora + +Windows 下非常好用的 Markdown 编辑器,支持多种主题,更棒的是还支持 YAML 头文件。 + +[官网链接](https://www.typora.io/) + +### mp3Tag + +MP3 文件 ID3-Tag 信息修改器。可以修改 MP3 文件中的曲名、演唱者、专集、年月、流派、注释等信息,歌曲收藏者的利器。 + +[官网链接](http://www.mp3tag.de/) + +## Linux + +### zsh (with Oh My Zsh) + +比 bash 更好用的 shell。更强的可配置性,更强的 tab 补全,还附带 git 支持。再加上[Oh My Zsh](https://github.com/robbyrussell/oh-my-zsh)的存在,zsh 已经相当易用了。 + +![zsh](https://wx2.sinaimg.cn/large/73bd9e13ly1fjle6b9zi3j20nm0h0q5k.jpg) + +[Oh My Zsh 项目链接](https://github.com/robbyrussell/oh-my-zsh) + +### Tmux + +SSH 最佳伴侣。 + +[官网链接](https://tmux.github.io/) + +### Graphviz + +“所想即所得”的画图工具,由大名鼎鼎的贝尔实验室开发。简单的来讲就是一款使用脚本语言来进行绘图的工具。 + +![Graphviz](https://wx3.sinaimg.cn/large/73bd9e13ly1fjle6aocfqj20sg0g8tdu.jpg) + +[官网链接](http://www.graphviz.org/) + +[DOT脚本语言](https://zh.wikipedia.org/wiki/DOT语言) + +### Graph::Easy + +跟 Graphviz 类似的软件。用它可以很方便的绘制出字符版的流程图,很适合代码注释。当然,它的功能远不止这些。 + +{% highlight text%} ++------+ +--------+ ............. +---------+ +| Bonn | --> | Berlin | --> : Frankfurt : --> | Dresden | ++------+ +--------+ ............. +---------+ + : + : + v + +---------+ +---------+ + | Potsdam | ==> | Cottbus | + +---------+ +---------+ +{% endhighlight %} + +[GitHub 项目页](https://github.com/ironcamel/Graph-Easy) + +## Coding + +### Visual Studio Code + +微软出品,和 atom 一样基于 electron,但比 atom 流畅。页面非常酷,插件也已经非常全面了,越来越多的前端工程师开始转向它了。 + +[官网链接](https://code.visualstudio.com/) \ No newline at end of file diff --git a/_posts/2016-09-18-chameleon-theme.md b/_posts/2016-09-18-chameleon-theme.md new file mode 100644 index 00000000000..5c4795da62d --- /dev/null +++ b/_posts/2016-09-18-chameleon-theme.md @@ -0,0 +1,72 @@ +--- +layout: post +title: 第三代主题:Chameleon Theme +key: 100010 +tags: blog +category: blog +date: 2016-09-18 18:50:00 +08:00 +picture-frame: shadow +--- + +![Chameleon Theme Preview](https://wx4.sinaimg.cn/large/73bd9e13ly1fjled0mmsaj20sg0gf0vg.jpg) + +好长时间没有写文章了。自从五月份以来,实习、论文和面试成为了生活的主旋律。比较压抑,也比较浮躁,压根就无法静下心来 挥洒笔墨 练打字了,不过这并不意味着这个博客就被我遗忘了。其实,在这段时间里,我默默地重构了整个博客项目的代码,同时,**再一次**改变了 世界 博客的样式。从第一版到如今的第三版,整个博客见证了我对前端的理解和我对设计理解的变迁。 + +这个新的主题被我称为“Chameleon Theme”,意为“变色龙主题”。科技以换壳为本,主题以换色为本。使用者可以根据自己的爱好,设定自己喜欢的主题色,这样就不会千篇一律了,至少在颜色上。 + + + +新的主题同样遵循响应式的设计,PC、平板和手机都有着不同的页面布局,同样大量的使用 HTML5 和 CSS3 的新特性,所以目前还是只兼容现代浏览器。 + +## 主题色 + +主题色是“变色龙主题”最大特点,在项目源文件 `_sass/_setting.colors.scss` 中有三个变量,分别为 `$main-color-1`、`$main-color-2`和 `$main-color-3`, 通过设定这 3 个变量,用户就可以自定义网站的颜色了。 + +`$main-color-1` 代表强调色,建议较鲜艳的颜色。 + +`$main-color-2` 代表主色,是页面的主要颜色。 + +`$main-color-3` 代表配色,是搭配主色的辅助色,避免网页的色彩过于单调。 + +## 导航栏 + +导航栏这块一直是我最纠结的部分。 + +1. 导航栏真的需要始终显示在顶部吗? +2. 汉堡包按钮真的好吗? + +对于第一个问题,我认为这跟导航栏的使用频率和重要程度有关。如果用户需要经常去使用导航栏,那么将导航栏始终显示在屏幕顶部是有价值的。 + +例如大部分的新闻网站和门户网站通常都会把分类放在始终显示的导航栏上,以提醒用户和方便分类的切换。但是,对于一个用来展示文章的博客,导航栏的意义并不是特别的大。我想要的是用户能**完完整整**的看完一篇文章,而不是只看一半就切换到另一个页面去了。所以,在新的主题中导航栏只是普通的布局,不会始终占据屏幕的顶部空间。 + +对于第二个问题,个人认为汉堡包按钮并不是一个很友好的设计,应该尽量避免使用。汉堡包按钮默认隐藏了导航的条目,只有在用户手动点击按钮之后才可以看到具体的导航条目(见下图),这是一种非常不直观的交互方式,违背了“所见即所得”的设计原则,而且位于屏幕右(左)上角的位置也非常不方便点击。 + +![新旧导航栏](https://wx4.sinaimg.cn/large/73bd9e13ly1fjled04yy4j20qo0fs13n.jpg) + +所以,新的主题摒弃了之前的汉堡包导航栏设计,移除了汉堡包按钮,将导航栏另起一行放到了标题的下面(见上图最右)。这样更加直观,同样也能鼓励用户去浏览网站的其他页面。 + +## 内容的展示 + +博客最重要的功能是 炫技 展示文章的内容。所以,博客页面应该尽量的简洁,让用户能够把注意力放在文章内容上。 + +比如代码框,上一版本的代码框标题栏是蓝色的(见下图一),新的代码框标题栏是灰色的(见下图二)。这样可以避免鲜艳的色彩分散用户的注意力。毕竟代码的内容才是最重要的,至于何种语言的代码,这只是一个附加的说明。 + +同时,新的代码框还使用了间隔条纹的设计,能让用户更方便的去定位一行的内容,方便代码的阅读。 + +![之前的代码展示](https://wx3.sinaimg.cn/large/73bd9e13ly1fjleczi0ftj20b4054mxe.jpg) + +![新的代码展示](https://wx1.sinaimg.cn/large/73bd9e13ly1fjlecyil9bj20b404vq35.jpg) + +## 标签页 + +新的标签页(All Posts)在原有的基础上进行了改进,标签按钮使用颜色的深浅来表示该标签下博文数量的多少,同时新的标签按钮使用胶囊型的设计,显得更加精细和美观(见下图右)。 + +![标签页](https://wx4.sinaimg.cn/large/73bd9e13ly1fjlecy3ihmj20hs0fs0yc.jpg) + +## 后记 + +新博客的介绍就到这了,作为一个计算机专业的 前端工程师 程序员 码农,有时从用户的角度来思考自己码出来的产品不失是一件颇为有趣的事。 + +又及, + +> 不懂产品的设计师不是好前端。 \ No newline at end of file diff --git a/_posts/2016-10-05-leancloud-use-records.md b/_posts/2016-10-05-leancloud-use-records.md new file mode 100644 index 00000000000..997e19fe515 --- /dev/null +++ b/_posts/2016-10-05-leancloud-use-records.md @@ -0,0 +1,22 @@ +--- +layout: post +title: LeanCloud 使用记 +key: 100011 +tags: blog +category: blog +date: 2016-10-05 01:15:00 +08:00 +--- + +![LeanCloud](https://leancloud.cn/images/static/press/Logo%20-%20Blue%20Padding.png) + +这个博客本来是有浏览量统计功能的,之前是使用的 Python Flask 框架、MySQL 数据库在新浪云上搭建的。奈何后来新浪云更改了公共 MySQL 数据库的收费策略,对于这么一个小的后端服务来说,每天接近一元的价格显得太过昂贵。于是这个功能就不了了之了,很长时间它都是无效的状态,我也没怎么去管它。 + +昨天晚上在知乎上闲逛,无意看到了一个叫 [LeanCloud](https://leancloud.cn/) 的云服务,价格几乎是免费的,于是心血来潮,想着在 LeanCloud 上再搭建一个浏览量统计后端。事实证明,LeanCloud 根本就不是一个传统意义上的云服务器,它更像是一个平台,一个开发接口。借助 LeanCloud 提供的数据写入、查找和更新接口,我直接在前端调用这些接口就完成我的目标。总之,我没有写一行的后端代码。 + + + +很惊讶吧?是的,我也很惊讶。其实,一般在写 Java Web 的时候,我们基本都会先去封装一个数据库的操作库,包括数据库的连接、数据的增删改查。然后再这个基础上,再来写业务的逻辑代码。LeanCloud 在云平台上为我们提供了这些数据库的通用接口,而业务的逻辑代码,可以直接写在前端网页上。 + +近年来,前后端分离,REST 架构开始流行,越来越多的业务开始放到了前端,后端只需提供数据的接口。我认为这是一种非常不错的开发模式。它把前后端的开发分离开来,使得前端和后端之间的开发互相独立,提高了开发效率。同时,也能减缓服务器的压力,降低运营成本。而且更加简单纯粹的后端,也能产生更好的复用性,网页、iOS 应用、安卓应用甚至微信服务号都可以共用一套后端接口。这正是我多年以前想过的问题,那时我还只会 Jsp。 + +总之 LeanCloud 很符合当今 Web 的发展趋势,是一款非常不错的产品,值得推荐和学习。 \ No newline at end of file diff --git a/_posts/2017-09-15-textlint.md b/_posts/2017-09-15-textlint.md new file mode 100644 index 00000000000..99ad7cdc965 --- /dev/null +++ b/_posts/2017-09-15-textlint.md @@ -0,0 +1,40 @@ +--- +layout: post +title: 使用 textlint 解决中英文混排的问题 +key: 100016 +tags: Tools VSCode +category: blog +date: 2017-09-15 19:00:00 +08:00 +--- + +中英混排一直都是一个挺麻烦的事情,对于 Word 这种软件会自动在中英文之间加上留白。但是对于网页,现阶段就无能为力了。 + +所以现在有很多规范都要求中文和英文之间必须加上空格,例如[这个规范](https://github.com/fex-team/styleguide/blob/master/markdown.md)。这样确实是大大提高了可读性,不管是在网页上,还是在编辑器中,不过在实际的书写中,我们还是会经常的会漏掉一些空格。而且在我看来,通过在内容中加入一些空格来优化其显示,这本身就不是一个非常完美的方案。内容本应该只有内容,而样式就应该跟内容彻底的解耦。不过目前来看,我还是支持加空格的。 + +于是,为了能更好的“加空格”,为了更好的把样式和内容解耦,我开始寻求插件的帮助。而 [textlint](https://github.com/textlint/textlint) 就能够很好的解决这个问题。 + + + +## textlint 的安装 + +textlint 是一个针对 Markdown 和文本文件的 Lint 工具,当然页可以通过插件支持 HTML 等其他文件。textlint 本身不包含任何的规则,你需要单独的来安装规则包。textlint 使用 Node.js 开发,我们能很容易的进行安装: + +```bash +$ npm install textlint -g +``` + +## 规则包 + +我们还需要安装一些规则包。通过官网的 [规则包列表](https://github.com/textlint/textlint/wiki/Collection-of-textlint-rule),我们能够很方便的找到一些我们需要的规则包。 + +这里我想要介绍的是 [textlint-rule-ja-space-between-half-and-full-width](https://github.com/textlint-ja/textlint-rule-spacing/tree/master/packages/textlint-rule-ja-space-between-half-and-full-width) 规则包,虽然是日语的,但是对中文也同样有用。 + +```bash +$ npm install textlint-rule-ja-space-between-half-and-full-width -g +``` + +安装好后按照文档中配好 `textlintrc` 文件就可以用了。 + +## 编辑器 + +textlint 支持[非常多的编辑器](https://github.com/textlint/textlint#editors),下载好对应的编辑器插件后,就可以使用了。 \ No newline at end of file diff --git a/_posts/2017-10-06-markdown.md b/_posts/2017-10-06-markdown.md new file mode 100644 index 00000000000..f8b0791ed18 --- /dev/null +++ b/_posts/2017-10-06-markdown.md @@ -0,0 +1,973 @@ +--- +layout: post +title: Markdown +key: 10001 +tags: blog +category: blog +date: 2017-10-06 00:00:00 +08:00 +--- + +A markdown example shows how to write a markdown file. This document integrates core syntax and extensions (GMF). + + + +* [Block Elements](#block-elements) + * [Paragraphs and Line Breaks](#paragraphs-and-line-breaks) + * [Headers](#headers) + * [Blockquotes](#blockquotes) + * [Lists](#lists) + * [Code Blocks](#code-blocks) + * [Horizontal Rules](#horizontal-rules) + * [Table](#table) +* [Span Elements](#span-elements) + * [Links](#links) + * [Emphasis](#emphasis) + * [Code](#code) + * [Images](#images) + * [Strikethrough](#strikethrough) +* [Miscellaneous](#miscellaneous) + * [Automatic Links](#automatic-links) + * [Backslash Escapes](#backslash-escapes) +* [Inline HTML](#inline-html) + +## Block Elements + +### Paragraphs and Line Breaks + +#### Paragraphs + +HTML Tag: `

` + +One or more blank lines. (A blank line is a line containing nothing but **spaces** or **tabs** is considered blank.) + +Code: + + This will be + inline. + + This is second paragraph. + +Preview: + +*** + +This will be +inline. + +This is second paragraph. + +*** + +#### Line Breaks + +HTML Tag: `
` + +End a line with **two or more spaces**. + +Code: + + This will be not + inline. + +Preview: + +*** + +This will be not +inline. + +*** + +### Headers + +Markdown supports two styles of headers, Setext and atx. + +#### Setext + +HTML Tags: `

`, `

` + +“Underlined” using **equal signs (=)** as `

` and **dashes (-)** as `

` in any number. + +Code: + + This is an H1 + ============= + This is an H2 + ------------- + +Preview: + +*** + +This is an H1 +============= + +This is an H2 +------------- + +*** + +#### atx + +HTML Tags: `

`, `

`, `

`, `

`, `

`, `
` + +Uses 1-6 **hash characters (#)** at the start of the line, corresponding to `

` - `

`. + +Code: + + # This is an H1 + ## This is an H2 + ###### This is an H6 + +Preview: + +*** + +# This is an H1 + +## This is an H2 + +###### This is an H6 + +*** + +Optionally, you may “close” atx-style headers. The closing hashes **don’t need to match** the number of hashes used to open the header. + +Code: + + # This is an H1 # + ## This is an H2 ## + ### This is an H3 ###### + +Preview: + +*** + +# This is an H1 # + +## This is an H2 ## + +### This is an H3 ###### + +*** + +### Blockquotes + +HTML Tag: `
` + +Markdown uses email-style **>** characters for blockquoting. It looks best if you hard wrap the text and put a > before every line. + +Code: + + > This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet, + > consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. + > Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus. + > + > Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse + > id sem consectetuer libero luctus adipiscing. + +Preview: + +*** + +> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet, +> consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. +> Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus. +> +> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse +> id sem consectetuer libero luctus adipiscing. + +*** + +Markdown allows you to be lazy and only put the > before the first line of a hard-wrapped paragraph. + +Code: + + > This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet, + consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. + Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus. + + > Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse + id sem consectetuer libero luctus adipiscing. + +Preview: + +*** + +> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet, +consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. +Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus. + +> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse +id sem consectetuer libero luctus adipiscing. + +*** + +Blockquotes can be nested (i.e. a blockquote-in-a-blockquote) by adding additional levels of >. + +Code: + + > This is the first level of quoting. + > + > > This is nested blockquote. + > + > Back to the first level. + +Preview: + +*** + +> This is the first level of quoting. +> +> > This is nested blockquote. +> +> Back to the first level. + +*** + +Blockquotes can contain other Markdown elements, including headers, lists, and code blocks. + +Code: + + > ## This is a header. + > + > 1. This is the first list item. + > 2. This is the second list item. + > + > Here's some example code: + > + > return shell_exec("echo $input | $markdown_script"); + +Preview: + +*** + +> ## This is a header. +> +> 1. This is the first list item. +> 2. This is the second list item. +> +> Here's some example code: +> +> return shell_exec("echo $input | $markdown_script"); + +*** + +### Lists + +Markdown supports ordered (numbered) and unordered (bulleted) lists. + +#### Unordered + +HTML Tag: `{% endunless %} +
+

{{ currentdate }}

+
{% endif %} + {% endfor %} + + +
+ + diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 00000000000..c1a193d5ee0 Binary files /dev/null and b/favicon.ico differ diff --git a/gulpfile.js b/gulpfile.js new file mode 100644 index 00000000000..977621e27b7 --- /dev/null +++ b/gulpfile.js @@ -0,0 +1,71 @@ +const gulp = require('gulp'); +const rename = require('gulp-rename'); +const svg2png = require('gulp-svg2png'); +const ico = require('gulp-to-ico'); + +const iconBasename = 'icon'; +const iconDestPath = './statics/images/logo'; +const faviconDestPath = './'; + +function coverSvg(width, height) { + height || (height = width); + return gulp.src('./statics/images/logo/logo.svg') + .pipe(svg2png({ width: width, height: height })) + .pipe(rename({ + basename: iconBasename, + suffix: `-${width}x${height}` + })) + .pipe(gulp.dest(iconDestPath)); +} + +gulp.task('icon310', function() { + return coverSvg(310); +}); +gulp.task('icon310x150', function() { + return coverSvg(310, 150); +}); +gulp.task('icon192', function() { + return coverSvg(192); +}); +gulp.task('icon180', function() { + return coverSvg(180); +}); +gulp.task('icon167', function() { + return coverSvg(167); +}); +gulp.task('icon152', function() { + return coverSvg(152); +}); +gulp.task('icon150', function() { + return coverSvg(150); +}); +gulp.task('icon128', function() { + return coverSvg(128); +}); +gulp.task('icon120', function() { + return coverSvg(120); +}); +gulp.task('icon70', function() { + return coverSvg(70); +}); +gulp.task('icon48', function() { + return coverSvg(48); +}); +gulp.task('icon16', function() { + return coverSvg(16); +}); + +gulp.task('favicon', ['icon128', 'icon48', 'icon16'], function() { + return gulp.src([ + `${iconDestPath}/icon-128x128.png`, + `${iconDestPath}/icon-48x48.png`, + `${iconDestPath}/icon-16x16.png`]) + .pipe(ico({ path: 'favicon.ico'})) + .pipe(gulp.dest(faviconDestPath)); +}); + +gulp.task('icons', [ + 'icon310', 'icon310x150', 'icon192', 'icon180', 'icon167', 'icon152', 'icon150', 'icon120', 'icon70' +]); + +gulp.task('artwork', ['favicon', 'icons']); \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 00000000000..c18c6105d97 --- /dev/null +++ b/index.html @@ -0,0 +1,91 @@ +--- +layout: blog-default +title: Blog +--- +
+
+
+ + {% for post in paginator.posts %} +
+

+ {{ post.title }} +

+
+ {{ post.excerpt }} +
+ {% include blog/article-data.html %} +
+ {% endfor %} +
+ + + {% if paginator.total_pages > 1 %} + + {% endif %} +
+
+ +{% if site.isdebug == false %} + + +{% endif %} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000000..bcf9c70eb2f --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3214 @@ +{ + "name": "jekyll-TeXt-theme", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "ajv": { + "version": "4.11.8", + "resolved": "http://registry.npm.taobao.org/ajv/download/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "archy": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/archy/download/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/arr-diff/download/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz", + "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", + "dev": true + }, + "array-differ": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/array-differ/download/array-differ-1.0.0.tgz", + "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", + "dev": true + }, + "array-each": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/array-each/download/array-each-1.0.1.tgz", + "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/array-find-index/download/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-slice": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/array-slice/download/array-slice-1.0.0.tgz", + "integrity": "sha1-5zA08A3MH0CHYAj9IP6ud71LfC8=", + "dev": true + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/array-uniq/download/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "http://registry.npm.taobao.org/array-unique/download/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/arrify/download/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asn1": { + "version": "0.2.3", + "resolved": "http://registry.npm.taobao.org/asn1/download/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "http://registry.npm.taobao.org/assert-plus/download/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "http://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "http://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true + }, + "aws4": { + "version": "1.6.0", + "resolved": "http://registry.npm.taobao.org/aws4/download/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "beeper": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/beeper/download/beeper-1.1.1.tgz", + "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", + "dev": true + }, + "bignumber.js": { + "version": "2.4.0", + "resolved": "http://registry.npm.taobao.org/bignumber.js/download/bignumber.js-2.4.0.tgz", + "integrity": "sha1-g4qZLan51zfg9LLbC+YrsJ3Qxeg=", + "dev": true + }, + "bmp-js": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/bmp-js/download/bmp-js-0.0.1.tgz", + "integrity": "sha1-WtAUcJnROp84qnuZrx1ueGZu038=", + "dev": true + }, + "boom": { + "version": "2.10.1", + "resolved": "http://registry.npm.taobao.org/boom/download/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "http://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "http://registry.npm.taobao.org/braces/download/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "buffer-alloc": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/buffer-alloc/download/buffer-alloc-1.1.0.tgz", + "integrity": "sha1-BVFNM78WVtNUDGhPZbEgLpDsowM=", + "dev": true, + "requires": { + "buffer-alloc-unsafe": "0.1.1", + "buffer-fill": "0.1.0" + } + }, + "buffer-alloc-unsafe": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/buffer-alloc-unsafe/download/buffer-alloc-unsafe-0.1.1.tgz", + "integrity": "sha1-/+H2dVHdBVc33iUzN7/oU9+rGmo=", + "dev": true + }, + "buffer-equal": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/buffer-equal/download/buffer-equal-0.0.1.tgz", + "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=", + "dev": true + }, + "buffer-fill": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/buffer-fill/download/buffer-fill-0.1.0.tgz", + "integrity": "sha1-ypRw6NTRuXf9dUP04qtqfclRAag=", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/builtin-modules/download/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "camelcase": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/camelcase/download/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/camelcase-keys/download/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "2.1.1", + "map-obj": "1.0.1" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "http://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "cliui": { + "version": "3.2.0", + "resolved": "http://registry.npm.taobao.org/cliui/download/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } + }, + "clone": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/clone/download/clone-1.0.2.tgz", + "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=", + "dev": true + }, + "clone-buffer": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/clone-buffer/download/clone-buffer-1.0.0.tgz", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", + "dev": true + }, + "clone-stats": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/clone-stats/download/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", + "dev": true + }, + "cloneable-readable": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/cloneable-readable/download/cloneable-readable-1.0.0.tgz", + "integrity": "sha1-pikNQT8hemEjL5XkWP84QYz7ARc=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "process-nextick-args": "1.0.7", + "through2": "2.0.3" + } + }, + "co": { + "version": "4.6.0", + "resolved": "http://registry.npm.taobao.org/co/download/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.0", + "resolved": "http://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.0.tgz", + "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "typedarray": "0.0.6" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.3.tgz", + "integrity": "sha1-No8lEtefnUb9/HE0mueHi7weuVw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/string_decoder/download/string_decoder-1.0.3.tgz", + "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "http://registry.npm.taobao.org/cryptiles/download/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "requires": { + "boom": "2.10.1" + } + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "http://registry.npm.taobao.org/currently-unhandled/download/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "1.0.2" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "http://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "dateformat": { + "version": "2.2.0", + "resolved": "http://registry.npm.taobao.org/dateformat/download/dateformat-2.2.0.tgz", + "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", + "dev": true + }, + "debug": { + "version": "2.2.0", + "resolved": "http://registry.npm.taobao.org/debug/download/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "0.7.1" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "defaults": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/defaults/download/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "1.0.2" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "deprecated": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/deprecated/download/deprecated-0.0.1.tgz", + "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=", + "dev": true + }, + "detect-file": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/detect-file/download/detect-file-0.1.0.tgz", + "integrity": "sha1-STXe39lIhkjgBrASlWbpOGcR6mM=", + "dev": true, + "requires": { + "fs-exists-sync": "0.1.0" + } + }, + "dom-walk": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/dom-walk/download/dom-walk-0.1.1.tgz", + "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=", + "dev": true + }, + "duplexer2": { + "version": "0.0.2", + "resolved": "http://registry.npm.taobao.org/duplexer2/download/duplexer2-0.0.2.tgz", + "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", + "dev": true, + "requires": { + "readable-stream": "1.1.14" + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "end-of-stream": { + "version": "0.1.5", + "resolved": "http://registry.npm.taobao.org/end-of-stream/download/end-of-stream-0.1.5.tgz", + "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=", + "dev": true, + "requires": { + "once": "1.3.3" + } + }, + "error-ex": { + "version": "1.3.1", + "resolved": "http://registry.npm.taobao.org/error-ex/download/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } + }, + "es6-promise": { + "version": "4.0.5", + "resolved": "http://registry.npm.taobao.org/es6-promise/download/es6-promise-4.0.5.tgz", + "integrity": "sha1-eILzCt3lskDM+n99eMVIMwlRrkI=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "exif-parser": { + "version": "0.1.12", + "resolved": "http://registry.npm.taobao.org/exif-parser/download/exif-parser-0.1.12.tgz", + "integrity": "sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=", + "dev": true + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "http://registry.npm.taobao.org/expand-brackets/download/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "http://registry.npm.taobao.org/expand-range/download/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "2.2.3" + } + }, + "expand-tilde": { + "version": "1.2.2", + "resolved": "http://registry.npm.taobao.org/expand-tilde/download/expand-tilde-1.2.2.tgz", + "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=", + "dev": true, + "requires": { + "os-homedir": "1.0.2" + } + }, + "extend": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/extend/download/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "extglob": { + "version": "0.3.2", + "resolved": "http://registry.npm.taobao.org/extglob/download/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "extract-zip": { + "version": "1.6.5", + "resolved": "http://registry.npm.taobao.org/extract-zip/download/extract-zip-1.6.5.tgz", + "integrity": "sha1-maBnNbbqIOqbcF13ms/8yHz/BEA=", + "dev": true, + "requires": { + "concat-stream": "1.6.0", + "debug": "2.2.0", + "mkdirp": "0.5.0", + "yauzl": "2.4.1" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fancy-log": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/fancy-log/download/fancy-log-1.3.0.tgz", + "integrity": "sha1-Rb4X0Cu5kX1gzP/UmVyZnmyMmUg=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "time-stamp": "1.1.0" + } + }, + "fd-slicer": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/fd-slicer/download/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "dev": true, + "requires": { + "pend": "1.2.0" + } + }, + "file-type": { + "version": "3.9.0", + "resolved": "http://registry.npm.taobao.org/file-type/download/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", + "dev": true + }, + "file-url": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/file-url/download/file-url-1.1.0.tgz", + "integrity": "sha1-oPnPPraQTJsdOmeQuDqXb8QCF7s=", + "dev": true, + "requires": { + "meow": "3.7.0" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/filename-regex/download/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fill-range": { + "version": "2.2.3", + "resolved": "http://registry.npm.taobao.org/fill-range/download/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "find-index": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/find-index/download/find-index-0.1.1.tgz", + "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=", + "dev": true + }, + "find-up": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/find-up/download/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "findup-sync": { + "version": "0.4.3", + "resolved": "http://registry.npm.taobao.org/findup-sync/download/findup-sync-0.4.3.tgz", + "integrity": "sha1-QAQ5Kee8YK3wt/SCfExudaDeyhI=", + "dev": true, + "requires": { + "detect-file": "0.1.0", + "is-glob": "2.0.1", + "micromatch": "2.3.11", + "resolve-dir": "0.1.1" + } + }, + "fined": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/fined/download/fined-1.1.0.tgz", + "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=", + "dev": true, + "requires": { + "expand-tilde": "2.0.2", + "is-plain-object": "2.0.4", + "object.defaults": "1.1.0", + "object.pick": "1.3.0", + "parse-filepath": "1.0.1" + }, + "dependencies": { + "expand-tilde": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/expand-tilde/download/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "requires": { + "homedir-polyfill": "1.0.1" + } + } + } + }, + "first-chunk-stream": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/first-chunk-stream/download/first-chunk-stream-1.0.0.tgz", + "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=", + "dev": true + }, + "flagged-respawn": { + "version": "0.3.2", + "resolved": "http://registry.npm.taobao.org/flagged-respawn/download/flagged-respawn-0.3.2.tgz", + "integrity": "sha1-/xke3c1wiKZ1smEP/8l2vpuAdLU=", + "dev": true + }, + "for-each": { + "version": "0.3.2", + "resolved": "http://registry.npm.taobao.org/for-each/download/for-each-0.3.2.tgz", + "integrity": "sha1-LEBFC5NI6X8oEyJZO6lnBLmr1NQ=", + "dev": true, + "requires": { + "is-function": "1.0.1" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "http://registry.npm.taobao.org/for-own/download/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "http://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.1.4", + "resolved": "http://registry.npm.taobao.org/form-data/download/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "dev": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.17" + } + }, + "fs-exists-sync": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/fs-exists-sync/download/fs-exists-sync-0.1.0.tgz", + "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=", + "dev": true + }, + "fs-extra": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/fs-extra/download/fs-extra-1.0.0.tgz", + "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0", + "klaw": "1.3.1" + } + }, + "gaze": { + "version": "0.5.2", + "resolved": "http://registry.npm.taobao.org/gaze/download/gaze-0.5.2.tgz", + "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", + "dev": true, + "requires": { + "globule": "0.1.0" + } + }, + "get-caller-file": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/get-caller-file/download/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/get-stdin/download/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-stream": { + "version": "2.3.1", + "resolved": "http://registry.npm.taobao.org/get-stream/download/get-stream-2.3.1.tgz", + "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "dev": true, + "requires": { + "object-assign": "4.1.1", + "pinkie-promise": "2.0.1" + }, + "dependencies": { + "object-assign": { + "version": "4.1.1", + "resolved": "http://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + } + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "http://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "glob": { + "version": "4.5.3", + "resolved": "http://registry.npm.taobao.org/glob/download/glob-4.5.3.tgz", + "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "2.0.10", + "once": "1.3.3" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "http://registry.npm.taobao.org/glob-base/download/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/glob-parent/download/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "glob-stream": { + "version": "3.1.18", + "resolved": "http://registry.npm.taobao.org/glob-stream/download/glob-stream-3.1.18.tgz", + "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=", + "dev": true, + "requires": { + "glob": "4.5.3", + "glob2base": "0.0.12", + "minimatch": "2.0.10", + "ordered-read-streams": "0.1.0", + "through2": "0.6.5", + "unique-stream": "1.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "1.0.34", + "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "through2": { + "version": "0.6.5", + "resolved": "http://registry.npm.taobao.org/through2/download/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": "1.0.34", + "xtend": "4.0.1" + } + } + } + }, + "glob-watcher": { + "version": "0.0.6", + "resolved": "http://registry.npm.taobao.org/glob-watcher/download/glob-watcher-0.0.6.tgz", + "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=", + "dev": true, + "requires": { + "gaze": "0.5.2" + } + }, + "glob2base": { + "version": "0.0.12", + "resolved": "http://registry.npm.taobao.org/glob2base/download/glob2base-0.0.12.tgz", + "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", + "dev": true, + "requires": { + "find-index": "0.1.1" + } + }, + "global": { + "version": "4.3.2", + "resolved": "http://registry.npm.taobao.org/global/download/global-4.3.2.tgz", + "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", + "dev": true, + "requires": { + "min-document": "2.19.0", + "process": "0.5.2" + } + }, + "global-modules": { + "version": "0.2.3", + "resolved": "http://registry.npm.taobao.org/global-modules/download/global-modules-0.2.3.tgz", + "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=", + "dev": true, + "requires": { + "global-prefix": "0.1.5", + "is-windows": "0.2.0" + } + }, + "global-prefix": { + "version": "0.1.5", + "resolved": "http://registry.npm.taobao.org/global-prefix/download/global-prefix-0.1.5.tgz", + "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=", + "dev": true, + "requires": { + "homedir-polyfill": "1.0.1", + "ini": "1.3.4", + "is-windows": "0.2.0", + "which": "1.2.14" + } + }, + "globule": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/globule/download/globule-0.1.0.tgz", + "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", + "dev": true, + "requires": { + "glob": "3.1.21", + "lodash": "1.0.2", + "minimatch": "0.2.14" + }, + "dependencies": { + "glob": { + "version": "3.1.21", + "resolved": "http://registry.npm.taobao.org/glob/download/glob-3.1.21.tgz", + "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", + "dev": true, + "requires": { + "graceful-fs": "1.2.3", + "inherits": "1.0.2", + "minimatch": "0.2.14" + } + }, + "graceful-fs": { + "version": "1.2.3", + "resolved": "http://registry.npm.taobao.org/graceful-fs/download/graceful-fs-1.2.3.tgz", + "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", + "dev": true + }, + "inherits": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/inherits/download/inherits-1.0.2.tgz", + "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", + "dev": true + }, + "minimatch": { + "version": "0.2.14", + "resolved": "http://registry.npm.taobao.org/minimatch/download/minimatch-0.2.14.tgz", + "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", + "dev": true, + "requires": { + "lru-cache": "2.7.3", + "sigmund": "1.0.1" + } + } + } + }, + "glogg": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/glogg/download/glogg-1.0.0.tgz", + "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=", + "dev": true, + "requires": { + "sparkles": "1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "http://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "gulp": { + "version": "3.9.1", + "resolved": "http://registry.npm.taobao.org/gulp/download/gulp-3.9.1.tgz", + "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=", + "dev": true, + "requires": { + "archy": "1.0.0", + "chalk": "1.1.3", + "deprecated": "0.0.1", + "gulp-util": "3.0.8", + "interpret": "1.0.4", + "liftoff": "2.3.0", + "minimist": "1.2.0", + "orchestrator": "0.3.8", + "pretty-hrtime": "1.0.3", + "semver": "4.3.6", + "tildify": "1.2.0", + "v8flags": "2.1.1", + "vinyl-fs": "0.3.14" + }, + "dependencies": { + "semver": { + "version": "4.3.6", + "resolved": "http://registry.npm.taobao.org/semver/download/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "dev": true + } + } + }, + "gulp-rename": { + "version": "1.2.2", + "resolved": "http://registry.npm.taobao.org/gulp-rename/download/gulp-rename-1.2.2.tgz", + "integrity": "sha1-OtRCh2PwXidk3sHGfYaNsnVoeBc=", + "dev": true + }, + "gulp-svg2png": { + "version": "2.0.2", + "resolved": "http://registry.npm.taobao.org/gulp-svg2png/download/gulp-svg2png-2.0.2.tgz", + "integrity": "sha1-3JOTgC1BAhHpzFbbOs+FQA2SkUQ=", + "dev": true, + "requires": { + "gulp-util": "3.0.8", + "map-stream": "0.0.6", + "map-stream-limit": "1.1.0", + "svg2png": "3.1.1" + } + }, + "gulp-to-ico": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/gulp-to-ico/download/gulp-to-ico-1.0.0.tgz", + "integrity": "sha1-2cEU+pdR4YhuvvY4ngkmEAsUtMs=", + "dev": true, + "requires": { + "through2": "2.0.3", + "to-ico": "1.1.5", + "vinyl": "2.1.0" + }, + "dependencies": { + "clone": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/clone/download/clone-2.1.1.tgz", + "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", + "dev": true + }, + "clone-stats": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/clone-stats/download/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", + "dev": true + }, + "replace-ext": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/replace-ext/download/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true + }, + "vinyl": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/vinyl/download/vinyl-2.1.0.tgz", + "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", + "dev": true, + "requires": { + "clone": "2.1.1", + "clone-buffer": "1.0.0", + "clone-stats": "1.0.0", + "cloneable-readable": "1.0.0", + "remove-trailing-separator": "1.1.0", + "replace-ext": "1.0.0" + } + } + } + }, + "gulp-util": { + "version": "3.0.8", + "resolved": "http://registry.npm.taobao.org/gulp-util/download/gulp-util-3.0.8.tgz", + "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", + "dev": true, + "requires": { + "array-differ": "1.0.0", + "array-uniq": "1.0.3", + "beeper": "1.1.1", + "chalk": "1.1.3", + "dateformat": "2.2.0", + "fancy-log": "1.3.0", + "gulplog": "1.0.0", + "has-gulplog": "0.1.0", + "lodash._reescape": "3.0.0", + "lodash._reevaluate": "3.0.0", + "lodash._reinterpolate": "3.0.0", + "lodash.template": "3.6.2", + "minimist": "1.2.0", + "multipipe": "0.1.2", + "object-assign": "3.0.0", + "replace-ext": "0.0.1", + "through2": "2.0.3", + "vinyl": "0.5.3" + } + }, + "gulplog": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/gulplog/download/gulplog-1.0.0.tgz", + "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "dev": true, + "requires": { + "glogg": "1.0.0" + } + }, + "har-schema": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/har-schema/download/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", + "dev": true + }, + "har-validator": { + "version": "4.2.1", + "resolved": "http://registry.npm.taobao.org/har-validator/download/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "dev": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-gulplog": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/has-gulplog/download/has-gulplog-0.1.0.tgz", + "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", + "dev": true, + "requires": { + "sparkles": "1.0.0" + } + }, + "hasha": { + "version": "2.2.0", + "resolved": "http://registry.npm.taobao.org/hasha/download/hasha-2.2.0.tgz", + "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=", + "dev": true, + "requires": { + "is-stream": "1.1.0", + "pinkie-promise": "2.0.1" + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "http://registry.npm.taobao.org/hawk/download/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "http://registry.npm.taobao.org/hoek/download/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "homedir-polyfill": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/homedir-polyfill/download/homedir-polyfill-1.0.1.tgz", + "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", + "dev": true, + "requires": { + "parse-passwd": "1.0.0" + } + }, + "hosted-git-info": { + "version": "2.5.0", + "resolved": "http://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.5.0.tgz", + "integrity": "sha1-bWDjSzq7yDEwYsO3mO+NkBoHrzw=", + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/http-signature/download/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.1", + "sshpk": "1.13.1" + } + }, + "image-size": { + "version": "0.5.5", + "resolved": "http://registry.npm.taobao.org/image-size/download/image-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/indent-string/download/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "http://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.3.3", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "http://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.4", + "resolved": "http://registry.npm.taobao.org/ini/download/ini-1.3.4.tgz", + "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", + "dev": true + }, + "interpret": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/interpret/download/interpret-1.0.4.tgz", + "integrity": "sha1-ggzdWIuGj/sZGoCVBtbJyPISsbA=", + "dev": true + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/invert-kv/download/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "ip-regex": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/ip-regex/download/ip-regex-1.0.3.tgz", + "integrity": "sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0=", + "dev": true + }, + "is-absolute": { + "version": "0.2.6", + "resolved": "http://registry.npm.taobao.org/is-absolute/download/is-absolute-0.2.6.tgz", + "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=", + "dev": true, + "requires": { + "is-relative": "0.2.1", + "is-windows": "0.2.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "http://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-buffer": { + "version": "1.1.5", + "resolved": "http://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.5.tgz", + "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-builtin-module/download/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/is-dotfile/download/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "http://registry.npm.taobao.org/is-equal-shallow/download/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-extglob/download/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/is-finite/download/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-function": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/is-function/download/is-function-1.0.1.tgz", + "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/is-glob/download/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "http://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz", + "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/is-posix-bracket/download/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/is-primitive/download/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-relative": { + "version": "0.2.1", + "resolved": "http://registry.npm.taobao.org/is-relative/download/is-relative-0.2.1.tgz", + "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=", + "dev": true, + "requires": { + "is-unc-path": "0.1.2" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-unc-path": { + "version": "0.1.2", + "resolved": "http://registry.npm.taobao.org/is-unc-path/download/is-unc-path-0.1.2.tgz", + "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=", + "dev": true, + "requires": { + "unc-path-regex": "0.1.2" + } + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "http://registry.npm.taobao.org/is-utf8/download/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "0.2.0", + "resolved": "http://registry.npm.taobao.org/is-windows/download/is-windows-0.2.0.tgz", + "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + } + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "http://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "jimp": { + "version": "0.2.28", + "resolved": "http://registry.npm.taobao.org/jimp/download/jimp-0.2.28.tgz", + "integrity": "sha1-3VKak3GQ9ClXp5N9Gsw6d2KZbqI=", + "dev": true, + "requires": { + "bignumber.js": "2.4.0", + "bmp-js": "0.0.3", + "es6-promise": "3.3.1", + "exif-parser": "0.1.12", + "file-type": "3.9.0", + "jpeg-js": "0.2.0", + "load-bmfont": "1.3.0", + "mime": "1.4.1", + "mkdirp": "0.5.1", + "pixelmatch": "4.0.2", + "pngjs": "3.3.0", + "read-chunk": "1.0.1", + "request": "2.81.0", + "stream-to-buffer": "0.1.0", + "tinycolor2": "1.4.1", + "url-regex": "3.2.0" + }, + "dependencies": { + "bmp-js": { + "version": "0.0.3", + "resolved": "http://registry.npm.taobao.org/bmp-js/download/bmp-js-0.0.3.tgz", + "integrity": "sha1-ZBE+nHzxICs3btYHvzBibr5XsYo=", + "dev": true + }, + "es6-promise": { + "version": "3.3.1", + "resolved": "http://registry.npm.taobao.org/es6-promise/download/es6-promise-3.3.1.tgz", + "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=", + "dev": true + }, + "jpeg-js": { + "version": "0.2.0", + "resolved": "http://registry.npm.taobao.org/jpeg-js/download/jpeg-js-0.2.0.tgz", + "integrity": "sha1-U+RI7J0mPmgyZkZ+lELSxaLvVII=", + "dev": true + }, + "minimist": { + "version": "0.0.8", + "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "http://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + } + } + }, + "jpeg-js": { + "version": "0.1.2", + "resolved": "http://registry.npm.taobao.org/jpeg-js/download/jpeg-js-0.1.2.tgz", + "integrity": "sha1-E1uZLAV1yYXPoPSUoyJ+0jhYPs4=", + "dev": true + }, + "jsbn": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "http://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/json-stable-stringify/download/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "http://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "http://registry.npm.taobao.org/jsonfile/download/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "http://registry.npm.taobao.org/jsonify/download/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "kew": { + "version": "0.7.0", + "resolved": "http://registry.npm.taobao.org/kew/download/kew-0.7.0.tgz", + "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } + }, + "klaw": { + "version": "1.3.1", + "resolved": "http://registry.npm.taobao.org/klaw/download/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/lcid/download/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } + }, + "liftoff": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/liftoff/download/liftoff-2.3.0.tgz", + "integrity": "sha1-qY8v9nGD2Lp8+soQVIvX/wVQs4U=", + "dev": true, + "requires": { + "extend": "3.0.1", + "findup-sync": "0.4.3", + "fined": "1.1.0", + "flagged-respawn": "0.3.2", + "lodash.isplainobject": "4.0.6", + "lodash.isstring": "4.0.1", + "lodash.mapvalues": "4.6.0", + "rechoir": "0.6.2", + "resolve": "1.4.0" + } + }, + "load-bmfont": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/load-bmfont/download/load-bmfont-1.3.0.tgz", + "integrity": "sha1-u358cQ3mvK/LE8s7jIHgwBMey8k=", + "dev": true, + "requires": { + "buffer-equal": "0.0.1", + "mime": "1.4.1", + "parse-bmfont-ascii": "1.0.6", + "parse-bmfont-binary": "1.0.6", + "parse-bmfont-xml": "1.1.3", + "xhr": "2.4.0", + "xtend": "4.0.1" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/load-json-file/download/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "lodash": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/lodash/download/lodash-1.0.2.tgz", + "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=", + "dev": true + }, + "lodash._basecopy": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/lodash._basecopy/download/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "dev": true + }, + "lodash._basetostring": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/lodash._basetostring/download/lodash._basetostring-3.0.1.tgz", + "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", + "dev": true + }, + "lodash._basevalues": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/lodash._basevalues/download/lodash._basevalues-3.0.0.tgz", + "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", + "dev": true + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "http://registry.npm.taobao.org/lodash._getnative/download/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "http://registry.npm.taobao.org/lodash._isiterateecall/download/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "dev": true + }, + "lodash._reescape": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/lodash._reescape/download/lodash._reescape-3.0.0.tgz", + "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", + "dev": true + }, + "lodash._reevaluate": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/lodash._reevaluate/download/lodash._reevaluate-3.0.0.tgz", + "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", + "dev": true + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/lodash._reinterpolate/download/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "dev": true + }, + "lodash._root": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/lodash._root/download/lodash._root-3.0.1.tgz", + "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", + "dev": true + }, + "lodash.assign": { + "version": "4.2.0", + "resolved": "http://registry.npm.taobao.org/lodash.assign/download/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", + "dev": true + }, + "lodash.escape": { + "version": "3.2.0", + "resolved": "http://registry.npm.taobao.org/lodash.escape/download/lodash.escape-3.2.0.tgz", + "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", + "dev": true, + "requires": { + "lodash._root": "3.0.1" + } + }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/lodash.isarguments/download/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "lodash.isarray": { + "version": "3.0.4", + "resolved": "http://registry.npm.taobao.org/lodash.isarray/download/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "http://registry.npm.taobao.org/lodash.isplainobject/download/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "dev": true + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/lodash.isstring/download/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "dev": true + }, + "lodash.keys": { + "version": "3.1.2", + "resolved": "http://registry.npm.taobao.org/lodash.keys/download/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true, + "requires": { + "lodash._getnative": "3.9.1", + "lodash.isarguments": "3.1.0", + "lodash.isarray": "3.0.4" + } + }, + "lodash.mapvalues": { + "version": "4.6.0", + "resolved": "http://registry.npm.taobao.org/lodash.mapvalues/download/lodash.mapvalues-4.6.0.tgz", + "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", + "dev": true + }, + "lodash.restparam": { + "version": "3.6.1", + "resolved": "http://registry.npm.taobao.org/lodash.restparam/download/lodash.restparam-3.6.1.tgz", + "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", + "dev": true + }, + "lodash.template": { + "version": "3.6.2", + "resolved": "http://registry.npm.taobao.org/lodash.template/download/lodash.template-3.6.2.tgz", + "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", + "dev": true, + "requires": { + "lodash._basecopy": "3.0.1", + "lodash._basetostring": "3.0.1", + "lodash._basevalues": "3.0.0", + "lodash._isiterateecall": "3.0.9", + "lodash._reinterpolate": "3.0.0", + "lodash.escape": "3.2.0", + "lodash.keys": "3.1.2", + "lodash.restparam": "3.6.1", + "lodash.templatesettings": "3.1.1" + } + }, + "lodash.templatesettings": { + "version": "3.1.1", + "resolved": "http://registry.npm.taobao.org/lodash.templatesettings/download/lodash.templatesettings-3.1.1.tgz", + "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", + "dev": true, + "requires": { + "lodash._reinterpolate": "3.0.0", + "lodash.escape": "3.2.0" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "http://registry.npm.taobao.org/loud-rejection/download/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "0.4.1", + "signal-exit": "3.0.2" + } + }, + "lru-cache": { + "version": "2.7.3", + "resolved": "http://registry.npm.taobao.org/lru-cache/download/lru-cache-2.7.3.tgz", + "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", + "dev": true + }, + "map-cache": { + "version": "0.2.2", + "resolved": "http://registry.npm.taobao.org/map-cache/download/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/map-obj/download/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "map-stream": { + "version": "0.0.6", + "resolved": "http://registry.npm.taobao.org/map-stream/download/map-stream-0.0.6.tgz", + "integrity": "sha1-0u9OuBGihkTHqJiZhcacL91JaCc=", + "dev": true + }, + "map-stream-limit": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/map-stream-limit/download/map-stream-limit-1.1.0.tgz", + "integrity": "sha1-uHUSW/cQ90pGMQjRoxyhKBoWT9I=", + "dev": true, + "requires": { + "map-stream": "0.0.3", + "through": "2.3.8" + }, + "dependencies": { + "map-stream": { + "version": "0.0.3", + "resolved": "http://registry.npm.taobao.org/map-stream/download/map-stream-0.0.3.tgz", + "integrity": "sha1-lHWcaWCDwxKz/DopnhxkoEI+8a4=", + "dev": true + } + } + }, + "meow": { + "version": "3.7.0", + "resolved": "http://registry.npm.taobao.org/meow/download/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "2.1.0", + "decamelize": "1.2.0", + "loud-rejection": "1.6.0", + "map-obj": "1.0.1", + "minimist": "1.2.0", + "normalize-package-data": "2.4.0", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "redent": "1.0.0", + "trim-newlines": "1.0.0" + }, + "dependencies": { + "object-assign": { + "version": "4.1.1", + "resolved": "http://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + } + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "http://registry.npm.taobao.org/micromatch/download/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + }, + "mime": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/mime/download/mime-1.4.1.tgz", + "integrity": "sha1-Eh+evEnjdm8xGnbh+hyAA8SwOqY=", + "dev": true + }, + "mime-db": { + "version": "1.30.0", + "resolved": "http://registry.npm.taobao.org/mime-db/download/mime-db-1.30.0.tgz", + "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", + "dev": true + }, + "mime-types": { + "version": "2.1.17", + "resolved": "http://registry.npm.taobao.org/mime-types/download/mime-types-2.1.17.tgz", + "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "dev": true, + "requires": { + "mime-db": "1.30.0" + } + }, + "min-document": { + "version": "2.19.0", + "resolved": "http://registry.npm.taobao.org/min-document/download/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "dev": true, + "requires": { + "dom-walk": "0.1.1" + } + }, + "minimatch": { + "version": "2.0.10", + "resolved": "http://registry.npm.taobao.org/minimatch/download/minimatch-2.0.10.tgz", + "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "mkdirp": { + "version": "0.5.0", + "resolved": "http://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.0.tgz", + "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "http://registry.npm.taobao.org/minimist/download/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "ms": { + "version": "0.7.1", + "resolved": "http://registry.npm.taobao.org/ms/download/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + }, + "multipipe": { + "version": "0.1.2", + "resolved": "http://registry.npm.taobao.org/multipipe/download/multipipe-0.1.2.tgz", + "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", + "dev": true, + "requires": { + "duplexer2": "0.0.2" + } + }, + "natives": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/natives/download/natives-1.1.0.tgz", + "integrity": "sha1-6f+EFBimsux6SV6TmYT3jxY+bjE=", + "dev": true + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "http://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.4.0.tgz", + "integrity": "sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=", + "dev": true, + "requires": { + "hosted-git-info": "2.5.0", + "is-builtin-module": "1.0.0", + "semver": "5.4.1", + "validate-npm-package-license": "3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "http://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "object-assign": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/object-assign/download/object-assign-3.0.0.tgz", + "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", + "dev": true + }, + "object.defaults": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/object.defaults/download/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "dev": true, + "requires": { + "array-each": "1.0.1", + "array-slice": "1.0.0", + "for-own": "1.0.0", + "isobject": "3.0.1" + }, + "dependencies": { + "for-own": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/for-own/download/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/object.omit/download/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "http://registry.npm.taobao.org/object.pick/download/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "once": { + "version": "1.3.3", + "resolved": "http://registry.npm.taobao.org/once/download/once-1.3.3.tgz", + "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "orchestrator": { + "version": "0.3.8", + "resolved": "http://registry.npm.taobao.org/orchestrator/download/orchestrator-0.3.8.tgz", + "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=", + "dev": true, + "requires": { + "end-of-stream": "0.1.5", + "sequencify": "0.0.7", + "stream-consume": "0.1.0" + } + }, + "ordered-read-streams": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/ordered-read-streams/download/ordered-read-streams-0.1.0.tgz", + "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/os-homedir/download/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "1.4.0", + "resolved": "http://registry.npm.taobao.org/os-locale/download/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "1.0.0" + } + }, + "parse-bmfont-ascii": { + "version": "1.0.6", + "resolved": "http://registry.npm.taobao.org/parse-bmfont-ascii/download/parse-bmfont-ascii-1.0.6.tgz", + "integrity": "sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=", + "dev": true + }, + "parse-bmfont-binary": { + "version": "1.0.6", + "resolved": "http://registry.npm.taobao.org/parse-bmfont-binary/download/parse-bmfont-binary-1.0.6.tgz", + "integrity": "sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=", + "dev": true + }, + "parse-bmfont-xml": { + "version": "1.1.3", + "resolved": "http://registry.npm.taobao.org/parse-bmfont-xml/download/parse-bmfont-xml-1.1.3.tgz", + "integrity": "sha1-1rZqNxr9OcUAfZ8O6yYqTyzOe3w=", + "dev": true, + "requires": { + "xml-parse-from-string": "1.0.1", + "xml2js": "0.4.19" + } + }, + "parse-filepath": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/parse-filepath/download/parse-filepath-1.0.1.tgz", + "integrity": "sha1-FZ1hVdQ5BNFsEO9piRHaHpGWm3M=", + "dev": true, + "requires": { + "is-absolute": "0.2.6", + "map-cache": "0.2.2", + "path-root": "0.1.1" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "http://registry.npm.taobao.org/parse-glob/download/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } + }, + "parse-headers": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/parse-headers/download/parse-headers-2.0.1.tgz", + "integrity": "sha1-aug6eqJanZtwCswoaYzR8e1+lTY=", + "dev": true, + "requires": { + "for-each": "0.3.2", + "trim": "0.0.1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "http://registry.npm.taobao.org/parse-json/download/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/parse-passwd/download/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, + "parse-png": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/parse-png/download/parse-png-1.1.2.tgz", + "integrity": "sha1-9cKtfHmTSQmGAgooTBmu5FlxH/I=", + "dev": true, + "requires": { + "pngjs": "3.3.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/path-exists/download/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-parse": { + "version": "1.0.5", + "resolved": "http://registry.npm.taobao.org/path-parse/download/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "dev": true + }, + "path-root": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/path-root/download/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "dev": true, + "requires": { + "path-root-regex": "0.1.2" + } + }, + "path-root-regex": { + "version": "0.1.2", + "resolved": "http://registry.npm.taobao.org/path-root-regex/download/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/path-type/download/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pend": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/pend/download/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "performance-now": { + "version": "0.2.0", + "resolved": "http://registry.npm.taobao.org/performance-now/download/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", + "dev": true + }, + "phantomjs-prebuilt": { + "version": "2.1.15", + "resolved": "http://registry.npm.taobao.org/phantomjs-prebuilt/download/phantomjs-prebuilt-2.1.15.tgz", + "integrity": "sha1-IPhugtM0nFBZF1J3RbekEeCLOQM=", + "dev": true, + "requires": { + "es6-promise": "4.0.5", + "extract-zip": "1.6.5", + "fs-extra": "1.0.0", + "hasha": "2.2.0", + "kew": "0.7.0", + "progress": "1.1.8", + "request": "2.81.0", + "request-progress": "2.0.1", + "which": "1.2.14" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "http://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "http://registry.npm.taobao.org/pinkie/download/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "pixelmatch": { + "version": "4.0.2", + "resolved": "http://registry.npm.taobao.org/pixelmatch/download/pixelmatch-4.0.2.tgz", + "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=", + "dev": true, + "requires": { + "pngjs": "3.3.0" + } + }, + "pn": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/pn/download/pn-1.0.0.tgz", + "integrity": "sha1-HPWjCw2AbNGPiPxBprXUrWFbO6k=", + "dev": true + }, + "pngjs": { + "version": "3.3.0", + "resolved": "http://registry.npm.taobao.org/pngjs/download/pngjs-3.3.0.tgz", + "integrity": "sha1-H1cwwYnJSTO4G+2iqy+OKFUmOo8=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "http://registry.npm.taobao.org/preserve/download/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/pretty-hrtime/download/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "dev": true + }, + "process": { + "version": "0.5.2", + "resolved": "http://registry.npm.taobao.org/process/download/process-0.5.2.tgz", + "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=", + "dev": true + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "http://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "progress": { + "version": "1.1.8", + "resolved": "http://registry.npm.taobao.org/progress/download/progress-1.1.8.tgz", + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", + "dev": true + }, + "punycode": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "qs": { + "version": "6.4.0", + "resolved": "http://registry.npm.taobao.org/qs/download/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "dev": true + }, + "randomatic": { + "version": "1.1.7", + "resolved": "http://registry.npm.taobao.org/randomatic/download/randomatic-1.1.7.tgz", + "integrity": "sha1-x6vpzIuHwLqodrGf3oP9RkeX44w=", + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "http://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } + } + } + }, + "read-chunk": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/read-chunk/download/read-chunk-1.0.1.tgz", + "integrity": "sha1-X2jKswfmY/GZk1J9m1icrORmEZQ=", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/read-pkg/download/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "http://registry.npm.taobao.org/rechoir/download/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "1.4.0" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/redent/download/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "2.1.0", + "strip-indent": "1.0.1" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "http://registry.npm.taobao.org/regex-cache/download/regex-cache-0.4.4.tgz", + "integrity": "sha1-db3FiioUls7EihKDW8VMjVYjNt0=", + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "http://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/repeating/download/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "1.0.2" + } + }, + "replace-ext": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/replace-ext/download/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "dev": true + }, + "request": { + "version": "2.81.0", + "resolved": "http://registry.npm.taobao.org/request/download/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "dev": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.17", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.1.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.3", + "tunnel-agent": "0.6.0", + "uuid": "3.1.0" + } + }, + "request-progress": { + "version": "2.0.1", + "resolved": "http://registry.npm.taobao.org/request-progress/download/request-progress-2.0.1.tgz", + "integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=", + "dev": true, + "requires": { + "throttleit": "1.0.0" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/require-main-filename/download/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "resize-img": { + "version": "1.1.2", + "resolved": "http://registry.npm.taobao.org/resize-img/download/resize-img-1.1.2.tgz", + "integrity": "sha1-+tZQ+vPvLFPqYxErwnLZXp2SVQ4=", + "dev": true, + "requires": { + "bmp-js": "0.0.1", + "file-type": "3.9.0", + "get-stream": "2.3.1", + "jimp": "0.2.28", + "jpeg-js": "0.1.2", + "parse-png": "1.1.2" + } + }, + "resolve": { + "version": "1.4.0", + "resolved": "http://registry.npm.taobao.org/resolve/download/resolve-1.4.0.tgz", + "integrity": "sha1-p1vgHFPaJdk0qY69DkxKcxL5KoY=", + "dev": true, + "requires": { + "path-parse": "1.0.5" + } + }, + "resolve-dir": { + "version": "0.1.1", + "resolved": "http://registry.npm.taobao.org/resolve-dir/download/resolve-dir-0.1.1.tgz", + "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=", + "dev": true, + "requires": { + "expand-tilde": "1.2.2", + "global-modules": "0.2.3" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "http://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.1.tgz", + "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=", + "dev": true + }, + "sax": { + "version": "1.2.4", + "resolved": "http://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz", + "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=", + "dev": true + }, + "semver": { + "version": "5.4.1", + "resolved": "http://registry.npm.taobao.org/semver/download/semver-5.4.1.tgz", + "integrity": "sha1-4FnAnYVx8FQII3M0M1BdOi8AsY4=", + "dev": true + }, + "sequencify": { + "version": "0.0.7", + "resolved": "http://registry.npm.taobao.org/sequencify/download/sequencify-0.0.7.tgz", + "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "sigmund": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/sigmund/download/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "http://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "sntp": { + "version": "1.0.9", + "resolved": "http://registry.npm.taobao.org/sntp/download/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sparkles": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/sparkles/download/sparkles-1.0.0.tgz", + "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=", + "dev": true + }, + "spdx-correct": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/spdx-correct/download/spdx-correct-1.0.2.tgz", + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "dev": true, + "requires": { + "spdx-license-ids": "1.2.2" + } + }, + "spdx-expression-parse": { + "version": "1.0.4", + "resolved": "http://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "dev": true + }, + "spdx-license-ids": { + "version": "1.2.2", + "resolved": "http://registry.npm.taobao.org/spdx-license-ids/download/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "dev": true + }, + "sshpk": { + "version": "1.13.1", + "resolved": "http://registry.npm.taobao.org/sshpk/download/sshpk-1.13.1.tgz", + "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "dev": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "stream-consume": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/stream-consume/download/stream-consume-0.1.0.tgz", + "integrity": "sha1-pB6tGm1ggc63n2WwYZAbbY89HQ8=", + "dev": true + }, + "stream-to": { + "version": "0.2.2", + "resolved": "http://registry.npm.taobao.org/stream-to/download/stream-to-0.2.2.tgz", + "integrity": "sha1-hDBgmNhf25kLn6MAsbPM9V6O8B0=", + "dev": true + }, + "stream-to-buffer": { + "version": "0.1.0", + "resolved": "http://registry.npm.taobao.org/stream-to-buffer/download/stream-to-buffer-0.1.0.tgz", + "integrity": "sha1-JnmdkDqyAlyb1VCsRxcbAPjdgKk=", + "dev": true, + "requires": { + "stream-to": "0.2.2" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "http://registry.npm.taobao.org/string_decoder/download/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "resolved": "http://registry.npm.taobao.org/stringstream/download/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/strip-bom/download/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/strip-indent/download/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "4.0.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "http://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "svg2png": { + "version": "3.1.1", + "resolved": "http://registry.npm.taobao.org/svg2png/download/svg2png-3.1.1.tgz", + "integrity": "sha1-L5CPtldE1yWqSkYC/5vEt0Yu9dg=", + "dev": true, + "requires": { + "file-url": "1.1.0", + "phantomjs-prebuilt": "2.1.15", + "pn": "1.0.0", + "yargs": "5.0.0" + } + }, + "throttleit": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/throttleit/download/throttleit-1.0.0.tgz", + "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "http://registry.npm.taobao.org/through/download/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "http://registry.npm.taobao.org/through2/download/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "2.3.3", + "xtend": "4.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.3.tgz", + "integrity": "sha1-No8lEtefnUb9/HE0mueHi7weuVw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "http://registry.npm.taobao.org/string_decoder/download/string_decoder-1.0.3.tgz", + "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + } + } + }, + "tildify": { + "version": "1.2.0", + "resolved": "http://registry.npm.taobao.org/tildify/download/tildify-1.2.0.tgz", + "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=", + "dev": true, + "requires": { + "os-homedir": "1.0.2" + } + }, + "time-stamp": { + "version": "1.1.0", + "resolved": "http://registry.npm.taobao.org/time-stamp/download/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", + "dev": true + }, + "tinycolor2": { + "version": "1.4.1", + "resolved": "http://registry.npm.taobao.org/tinycolor2/download/tinycolor2-1.4.1.tgz", + "integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=", + "dev": true + }, + "to-ico": { + "version": "1.1.5", + "resolved": "http://registry.npm.taobao.org/to-ico/download/to-ico-1.1.5.tgz", + "integrity": "sha1-HTLaXyyQki7e5raG1hDFRSe1qNU=", + "dev": true, + "requires": { + "arrify": "1.0.1", + "buffer-alloc": "1.1.0", + "image-size": "0.5.5", + "parse-png": "1.1.2", + "resize-img": "1.1.2" + } + }, + "tough-cookie": { + "version": "2.3.3", + "resolved": "http://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.3.3.tgz", + "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", + "dev": true, + "requires": { + "punycode": "1.4.1" + } + }, + "trim": { + "version": "0.0.1", + "resolved": "http://registry.npm.taobao.org/trim/download/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", + "dev": true + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/trim-newlines/download/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "http://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "http://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "http://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "unc-path-regex": { + "version": "0.1.2", + "resolved": "http://registry.npm.taobao.org/unc-path-regex/download/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "dev": true + }, + "unique-stream": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/unique-stream/download/unique-stream-1.0.0.tgz", + "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=", + "dev": true + }, + "url-regex": { + "version": "3.2.0", + "resolved": "http://registry.npm.taobao.org/url-regex/download/url-regex-3.2.0.tgz", + "integrity": "sha1-260eDJ4p4QXdCx8J9oYvf9tIJyQ=", + "dev": true, + "requires": { + "ip-regex": "1.0.3" + } + }, + "user-home": { + "version": "1.1.1", + "resolved": "http://registry.npm.taobao.org/user-home/download/user-home-1.1.1.tgz", + "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "uuid": { + "version": "3.1.0", + "resolved": "http://registry.npm.taobao.org/uuid/download/uuid-3.1.0.tgz", + "integrity": "sha1-PdPT55Crwk17DToDT/q6vijrvAQ=", + "dev": true + }, + "v8flags": { + "version": "2.1.1", + "resolved": "http://registry.npm.taobao.org/v8flags/download/v8flags-2.1.1.tgz", + "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", + "dev": true, + "requires": { + "user-home": "1.1.1" + } + }, + "validate-npm-package-license": { + "version": "3.0.1", + "resolved": "http://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.1.tgz", + "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "dev": true, + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.4" + } + }, + "verror": { + "version": "1.10.0", + "resolved": "http://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "vinyl": { + "version": "0.5.3", + "resolved": "http://registry.npm.taobao.org/vinyl/download/vinyl-0.5.3.tgz", + "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", + "dev": true, + "requires": { + "clone": "1.0.2", + "clone-stats": "0.0.1", + "replace-ext": "0.0.1" + } + }, + "vinyl-fs": { + "version": "0.3.14", + "resolved": "http://registry.npm.taobao.org/vinyl-fs/download/vinyl-fs-0.3.14.tgz", + "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=", + "dev": true, + "requires": { + "defaults": "1.0.3", + "glob-stream": "3.1.18", + "glob-watcher": "0.0.6", + "graceful-fs": "3.0.11", + "mkdirp": "0.5.0", + "strip-bom": "1.0.0", + "through2": "0.6.5", + "vinyl": "0.4.6" + }, + "dependencies": { + "clone": { + "version": "0.2.0", + "resolved": "http://registry.npm.taobao.org/clone/download/clone-0.2.0.tgz", + "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", + "dev": true + }, + "graceful-fs": { + "version": "3.0.11", + "resolved": "http://registry.npm.taobao.org/graceful-fs/download/graceful-fs-3.0.11.tgz", + "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", + "dev": true, + "requires": { + "natives": "1.1.0" + } + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "strip-bom": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/strip-bom/download/strip-bom-1.0.0.tgz", + "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=", + "dev": true, + "requires": { + "first-chunk-stream": "1.0.0", + "is-utf8": "0.2.1" + } + }, + "through2": { + "version": "0.6.5", + "resolved": "http://registry.npm.taobao.org/through2/download/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": "1.0.34", + "xtend": "4.0.1" + } + }, + "vinyl": { + "version": "0.4.6", + "resolved": "http://registry.npm.taobao.org/vinyl/download/vinyl-0.4.6.tgz", + "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "dev": true, + "requires": { + "clone": "0.2.0", + "clone-stats": "0.0.1" + } + } + } + }, + "which": { + "version": "1.2.14", + "resolved": "http://registry.npm.taobao.org/which/download/which-1.2.14.tgz", + "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "http://registry.npm.taobao.org/which-module/download/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "window-size": { + "version": "0.2.0", + "resolved": "http://registry.npm.taobao.org/window-size/download/window-size-0.2.0.tgz", + "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=", + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "http://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "http://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "xhr": { + "version": "2.4.0", + "resolved": "http://registry.npm.taobao.org/xhr/download/xhr-2.4.0.tgz", + "integrity": "sha1-4W5mpF+GmGHu76tBbV7/ci3ECZM=", + "dev": true, + "requires": { + "global": "4.3.2", + "is-function": "1.0.1", + "parse-headers": "2.0.1", + "xtend": "4.0.1" + } + }, + "xml-parse-from-string": { + "version": "1.0.1", + "resolved": "http://registry.npm.taobao.org/xml-parse-from-string/download/xml-parse-from-string-1.0.1.tgz", + "integrity": "sha1-qQKekp09vN7RafPG4oI42VpdWig=", + "dev": true + }, + "xml2js": { + "version": "0.4.19", + "resolved": "http://registry.npm.taobao.org/xml2js/download/xml2js-0.4.19.tgz", + "integrity": "sha1-aGwg8hMgnpSr8NG88e+qKRx4J6c=", + "dev": true, + "requires": { + "sax": "1.2.4", + "xmlbuilder": "9.0.4" + } + }, + "xmlbuilder": { + "version": "9.0.4", + "resolved": "http://registry.npm.taobao.org/xmlbuilder/download/xmlbuilder-9.0.4.tgz", + "integrity": "sha1-UZy0ymhtAFqEINNJbz8MruzKWA8=", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "http://registry.npm.taobao.org/xtend/download/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "http://registry.npm.taobao.org/y18n/download/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yargs": { + "version": "5.0.0", + "resolved": "http://registry.npm.taobao.org/yargs/download/yargs-5.0.0.tgz", + "integrity": "sha1-M1UUSXfQV1fbuG1uOOwFYSOzpm4=", + "dev": true, + "requires": { + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "lodash.assign": "4.2.0", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "window-size": "0.2.0", + "y18n": "3.2.1", + "yargs-parser": "3.2.0" + } + }, + "yargs-parser": { + "version": "3.2.0", + "resolved": "http://registry.npm.taobao.org/yargs-parser/download/yargs-parser-3.2.0.tgz", + "integrity": "sha1-UIE1XRnZ0MjF2BrakIy05tGGZk8=", + "dev": true, + "requires": { + "camelcase": "3.0.0", + "lodash.assign": "4.2.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "http://registry.npm.taobao.org/camelcase/download/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + } + } + }, + "yauzl": { + "version": "2.4.1", + "resolved": "http://registry.npm.taobao.org/yauzl/download/yauzl-2.4.1.tgz", + "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", + "dev": true, + "requires": { + "fd-slicer": "1.0.1" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 00000000000..b1982240f9c --- /dev/null +++ b/package.json @@ -0,0 +1,36 @@ +{ + "name": "jekyll-TeXt-theme", + "version": "1.0.0", + "description": "A theme for Jekyll", + "directories": { + "test": "test" + }, + "scripts": { + "build": "bundle exec jekyll build --watch", + "serve": "bundle exec jekyll serve -H 0.0.0.0", + "dev": "(npm run build &) && npm run serve", + "favicon": "gulp favicon", + "icons": "gulp icons", + "artwork": "gulp artwork" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/kitian616/kitian616.github.io.git" + }, + "keywords": [ + "blog", + "jekyll" + ], + "author": "Tian Qi", + "license": "ISC", + "bugs": { + "url": "https://github.com/kitian616/issues" + }, + "homepage": "https://github.com/kitian616#readme", + "devDependencies": { + "gulp": "^3.9.1", + "gulp-rename": "^1.2.2", + "gulp-svg2png": "^2.0.2", + "gulp-to-ico": "^1.0.0" + } +} diff --git a/statics/css/blog.scss b/statics/css/blog.scss new file mode 100644 index 00000000000..016b08ae622 --- /dev/null +++ b/statics/css/blog.scss @@ -0,0 +1,44 @@ +--- +# Only the main Sass file needs front matter (the dashes are enough) +--- +@charset "utf-8"; + +@import + "settings/base", + "settings/colors", + "settings/font", + "settings/highlighting", + + "mixins/media", + "mixins/link", + + "base/base", + "base/text", + "base/links", + "base/image&icon", + "base/animate", + + "components/wrapper", + + "components/follow-me", + + "components/header", + "components/footer", + + "components/toc", + "components/tags", + "components/comments", + "components/pagination", + + "components/article.header", + "components/article.content", + "components/license", + + "blog/layout.base", + "blog/layout.default", + "blog/layout.page", + "blog/layout.post", + + "blog/page.all", + "blog/page.index" +; diff --git a/statics/css/home.scss b/statics/css/home.scss new file mode 100644 index 00000000000..79659aa634c --- /dev/null +++ b/statics/css/home.scss @@ -0,0 +1,25 @@ +--- +# Only the main Sass file needs front matter (the dashes are enough) +--- +@charset "utf-8"; + +// Import partials from `sass_dir` (defaults to `_sass`) +@import + "settings/base", + "settings/colors", + "settings/font", + + "mixins/media", + "mixins/link", + + "base/base", + "base/text", + "base/image&icon", + "base/links", + "base/animate", + + "components/wrapper", + "components/follow-me", + + "home/page.home" +; diff --git a/statics/images/cake.png b/statics/images/cake.png new file mode 100644 index 00000000000..e2eb252e3e3 Binary files /dev/null and b/statics/images/cake.png differ diff --git a/statics/images/license-cc4.png b/statics/images/license-cc4.png new file mode 100644 index 00000000000..84fe83cf3ee Binary files /dev/null and b/statics/images/license-cc4.png differ diff --git a/statics/images/logo/icon-120x120.png b/statics/images/logo/icon-120x120.png new file mode 100644 index 00000000000..0c3cbee7217 Binary files /dev/null and b/statics/images/logo/icon-120x120.png differ diff --git a/statics/images/logo/icon-128x128.png b/statics/images/logo/icon-128x128.png new file mode 100644 index 00000000000..e1ae18182ac Binary files /dev/null and b/statics/images/logo/icon-128x128.png differ diff --git a/statics/images/logo/icon-150x150.png b/statics/images/logo/icon-150x150.png new file mode 100644 index 00000000000..08907b4d61d Binary files /dev/null and b/statics/images/logo/icon-150x150.png differ diff --git a/statics/images/logo/icon-152x152.png b/statics/images/logo/icon-152x152.png new file mode 100644 index 00000000000..3bdbd9b2ecd Binary files /dev/null and b/statics/images/logo/icon-152x152.png differ diff --git a/statics/images/logo/icon-167x167.png b/statics/images/logo/icon-167x167.png new file mode 100644 index 00000000000..f385e5e17c8 Binary files /dev/null and b/statics/images/logo/icon-167x167.png differ diff --git a/statics/images/logo/icon-16x16.png b/statics/images/logo/icon-16x16.png new file mode 100644 index 00000000000..f3adc084ebc Binary files /dev/null and b/statics/images/logo/icon-16x16.png differ diff --git a/statics/images/logo/icon-180x180.png b/statics/images/logo/icon-180x180.png new file mode 100644 index 00000000000..6dc9ea9bcc0 Binary files /dev/null and b/statics/images/logo/icon-180x180.png differ diff --git a/statics/images/logo/icon-192x192.png b/statics/images/logo/icon-192x192.png new file mode 100644 index 00000000000..70e5f076191 Binary files /dev/null and b/statics/images/logo/icon-192x192.png differ diff --git a/statics/images/logo/icon-310x150.png b/statics/images/logo/icon-310x150.png new file mode 100644 index 00000000000..874eb8c5b52 Binary files /dev/null and b/statics/images/logo/icon-310x150.png differ diff --git a/statics/images/logo/icon-310x310.png b/statics/images/logo/icon-310x310.png new file mode 100644 index 00000000000..8f7cf808aba Binary files /dev/null and b/statics/images/logo/icon-310x310.png differ diff --git a/statics/images/logo/icon-48x48.png b/statics/images/logo/icon-48x48.png new file mode 100644 index 00000000000..163bdd05425 Binary files /dev/null and b/statics/images/logo/icon-48x48.png differ diff --git a/statics/images/logo/icon-70x70.png b/statics/images/logo/icon-70x70.png new file mode 100644 index 00000000000..7d04ffaad28 Binary files /dev/null and b/statics/images/logo/icon-70x70.png differ diff --git a/statics/images/logo/logo.svg b/statics/images/logo/logo.svg new file mode 100644 index 00000000000..ded27f596d4 --- /dev/null +++ b/statics/images/logo/logo.svg @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/statics/images/octocat.jpg b/statics/images/octocat.jpg new file mode 100644 index 00000000000..fc3c3ebe98e Binary files /dev/null and b/statics/images/octocat.jpg differ