From 7c5253fd7f1df47ccb061869221798ebd79980cf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=99=88=E5=86=9B?=
Date: Sun, 10 Sep 2017 20:54:27 +0800
Subject: [PATCH 1/8] Deleting files
---
CNAME | 2 +-
README.md | 2 +-
_config.yml | 26 +-
_posts/book/2013-12-20-book-list-of-2013.md | 33 -
_posts/book/2014-03-14-book-list-of-2014.md | 21 +-
.../2016-11-17-airbnb-boggle-game.md | 180 +-
...06-17-the-end-of-regular-college-course.md | 31 -
_posts/life/2014-01-02-my-2013.md | 64 -
.../life/2014-12-12-travel-of-california.md | 76 -
_posts/life/2015-01-01-my-2014.md | 50 -
.../2015-01-30-microsoft-openhack-2015.md | 32 -
_posts/life/2015-04-13-rent-car-by-zipcar.md | 61 -
_posts/life/2015-12-23-las-vegas-travel.md | 37 -
_posts/life/2016-03-13-san-diego-travel.md | 54 -
...2016-07-02-olympic-national-park-travel.md | 47 -
_posts/life/2016-11-07-credit-cards-in-usa.md | 111 -
.../2014-01-15-general-git-resources.md | 178 --
.../2014-01-15-general-html-resources.md | 25 -
...2014-01-15-general-javascript-resources.md | 79 -
.../2014-01-15-general-jquery-resources.md | 58 -
.../2014-01-15-general-php-resources.md | 72 -
.../2014-01-15-general-python-resources.md | 38 -
.../2014-01-15-general-shell-resources.md | 122 --
.../2014-01-15-general-svn-resources.md | 136 --
.../2014-05-11-general-mysql-resources.md | 46 -
.../2014-08-03-general-mac-resources.md | 96 -
.../2015-02-13-general-seo-resources.md | 13 -
.../2015-10-04-general-vim-resources.md | 18 -
.../2012-09-27-open-widown-in-javascript.md | 49 -
.../tech/2012-09-27-php-variable-variables.md | 48 -
.../2012-11-08-openstack-nova-internal.md | 109 -
.../2012-12-31-python-development-of-sae.md | 253 ---
_posts/tech/2013-01-30-command-of-kanyun.md | 41 -
_posts/tech/2013-01-30-deploy-kanyun.md | 157 --
.../2013-01-30-introduction-kanyun-server.md | 21 -
...013-01-30-introduction-of-kanyun-worker.md | 49 -
.../2013-02-24-javascript-variable-domain.md | 92 -
...3-20-debug-and-modify-openstack-horizon.md | 35 -
...13-03-20-different-bewteen-kvm-xen-qemu.md | 58 -
.../2013-03-21-introduction-of-ceilometer.md | 72 -
_posts/tech/2013-03-21-vnc-vs-rdp.md | 21 -
.../tech/2013-03-27-glossary-of-ceilometer.md | 55 -
_posts/tech/2013-04-23-opensource-licenses.md | 71 -
.../2013-04-25-conceptual-logical-physical.md | 36 -
...5-some-concept-about-enterprise-storage.md | 34 -
...6-create-windows-xp-image-for-openstack.md | 59 -
...-01-deploy-a-ceilometer-horizon-project.md | 35 -
...13-05-01-terminal-command-of-ceilometer.md | 58 -
...03-create-windows-7-image-for-openstack.md | 72 -
_posts/tech/2013-05-03-php-cache-of-a-page.md | 43 -
.../2013-05-06-interactive-coding-ipython.md | 69 -
.../tech/2013-05-06-the-viewpoint-metatag.md | 34 -
...013-05-06-why-use-pip-over-easy-install.md | 15 -
...nstack-grizzly-multihost-deployment-doc.md | 1080 ---------
...05-15-create-ubuntu-image-for-openstack.md | 53 -
...-different-between-python-package-tools.md | 61 -
.../2013-05-15-learn-how-to-use-distutils.md | 67 -
...oy-openstack-grizzly-in-virtual-machine.md | 105 -
_posts/tech/2013-05-19-what-is-wsgi.md | 42 -
.../2013-05-27-openstack-horizon-locale.md | 34 -
...06-07-learn-python-setuptools-in-detail.md | 326 ---
.../2013-06-09-learn-python-abc-module.md | 83 -
...learn-python-stevedore-module-in-detail.md | 172 --
...g-in-openstack-ceilometer-compute-agent.md | 137 --
...-06-11-pipeline-of-openstack-ceilometer.md | 137 --
...-12-hacking-in-openstack-ceilometer-api.md | 150 --
...cking-in-openstack-ceilometer-collector.md | 128 --
...13-10-01-deploy-ceilometer-of-openstack.md | 127 --
...-08-implemention-of-breadcrumbs-by-css3.md | 115 -
.../2014-01-16-php-namespace-and-autoload.md | 98 -
...01-17-python-script-of-sae-log-download.md | 105 -
_posts/tech/2014-01-24-apache-log-format.md | 132 --
.../tech/2014-01-25-how-to-use-php-socket.md | 115 -
...01-30-understanding-the-github-workflow.md | 56 -
_posts/tech/2014-02-15-apache-and-nginx.md | 285 ---
.../2014-03-10-grunt-bower-and-laravel.md | 317 ---
...14-03-20-use-other-libraries-in-laravel.md | 150 --
...naging-your-larrvel-queue-by-supervisor.md | 211 --
.../tech/2014-04-11-redis-queue-in-laravel.md | 69 -
...16-insert-large-number-of-data-in-mysql.md | 141 --
.../tech/2014-04-19-design-patterns-of-php.md | 1949 -----------------
_posts/tech/2014-04-23-roc-curve.md | 32 -
...agic-methods-and-magic-constants-in-php.md | 257 ---
...environment-variables-of-server-for-php.md | 116 -
.../2014-09-26-use-old-version-of-brew-php.md | 65 -
.../2014-12-06-ioc-and-facade-in-laravel.md | 151 --
...lict-between-camel-and-snake-in-laravel.md | 70 -
_posts/tech/2015-09-07-sort-algorithms.md | 336 ---
.../2017-02-19-setup-react-environment.md | 284 ---
.../tool/2013-01-09-remote-access-of-mysql.md | 39 -
_posts/tool/2013-01-16-create-remote-resp.md | 74 -
.../tool/2013-02-25-quick-open-in-windows.md | 135 --
.../2013-03-25-open-tcp-port-of-libvirt.md | 37 -
.../2013-03-25-tools-of-sever-deployment.md | 27 -
_posts/tool/2013-04-21-add-snippet.md | 39 -
_posts/tool/2013-04-22-add-svn-ignore-file.md | 33 -
_posts/tool/2013-04-22-highlight-of-jekyll.md | 51 -
.../2013-04-22-ignore-password-in-git-push.md | 23 -
_posts/tool/2013-04-22-wordpress-to-jekyll.md | 25 -
.../2013-05-20-set-proxy-for-git-or-apt.md | 27 -
_posts/tool/2013-05-22-change-to-zsh.md | 22 -
...05-23-install-mysql-and-mongo-web-admin.md | 37 -
...2013-08-04-something-about-tools-i-used.md | 28 -
_posts/tool/2013-08-06-tools-of-reading.md | 52 -
.../tool/2013-08-28-change-bootstrap-to-3.md | 62 -
.../tool/2013-12-08-linux-command-continue.md | 37 -
.../2013-12-11-deploy-pptp-vpn-in-ubuntu.md | 121 -
_posts/tool/2013-12-11-lamp-in-mac.md | 292 ---
...ow-to-deploy-a-blog-on-github-by-jekyll.md | 274 ---
.../tool/2014-03-20-php-debug-with-xdebug.md | 87 -
.../tool/2014-04-10-install-vagrant-in-mac.md | 79 -
...dropzone-and-qiniu-to-store-blog-images.md | 70 -
_posts/tool/2016-11-09-my-writing-tools.md | 96 -
.../tool/2016-12-30-deploy-l2tp-on-ubuntu.md | 254 ---
...2016-12-31-deploy-shadowsocks-on-ubuntu.md | 62 -
...7-01-14-install-hhvm-on-mac-with-docker.md | 78 -
_posts/tool/2017-02-21-docker-summary.md | 453 ----
index.md | 2 +-
118 files changed, 18 insertions(+), 13648 deletions(-)
delete mode 100644 _posts/book/2013-12-20-book-list-of-2013.md
delete mode 100644 _posts/life/2013-06-17-the-end-of-regular-college-course.md
delete mode 100644 _posts/life/2014-01-02-my-2013.md
delete mode 100644 _posts/life/2014-12-12-travel-of-california.md
delete mode 100644 _posts/life/2015-01-01-my-2014.md
delete mode 100644 _posts/life/2015-01-30-microsoft-openhack-2015.md
delete mode 100644 _posts/life/2015-04-13-rent-car-by-zipcar.md
delete mode 100644 _posts/life/2015-12-23-las-vegas-travel.md
delete mode 100644 _posts/life/2016-03-13-san-diego-travel.md
delete mode 100644 _posts/life/2016-07-02-olympic-national-park-travel.md
delete mode 100644 _posts/life/2016-11-07-credit-cards-in-usa.md
delete mode 100644 _posts/resource/2014-01-15-general-git-resources.md
delete mode 100644 _posts/resource/2014-01-15-general-html-resources.md
delete mode 100644 _posts/resource/2014-01-15-general-javascript-resources.md
delete mode 100644 _posts/resource/2014-01-15-general-jquery-resources.md
delete mode 100644 _posts/resource/2014-01-15-general-php-resources.md
delete mode 100644 _posts/resource/2014-01-15-general-python-resources.md
delete mode 100644 _posts/resource/2014-01-15-general-shell-resources.md
delete mode 100644 _posts/resource/2014-01-15-general-svn-resources.md
delete mode 100644 _posts/resource/2014-05-11-general-mysql-resources.md
delete mode 100644 _posts/resource/2014-08-03-general-mac-resources.md
delete mode 100644 _posts/resource/2015-02-13-general-seo-resources.md
delete mode 100644 _posts/resource/2015-10-04-general-vim-resources.md
delete mode 100644 _posts/tech/2012-09-27-open-widown-in-javascript.md
delete mode 100644 _posts/tech/2012-09-27-php-variable-variables.md
delete mode 100644 _posts/tech/2012-11-08-openstack-nova-internal.md
delete mode 100644 _posts/tech/2012-12-31-python-development-of-sae.md
delete mode 100644 _posts/tech/2013-01-30-command-of-kanyun.md
delete mode 100644 _posts/tech/2013-01-30-deploy-kanyun.md
delete mode 100644 _posts/tech/2013-01-30-introduction-kanyun-server.md
delete mode 100644 _posts/tech/2013-01-30-introduction-of-kanyun-worker.md
delete mode 100644 _posts/tech/2013-02-24-javascript-variable-domain.md
delete mode 100644 _posts/tech/2013-03-20-debug-and-modify-openstack-horizon.md
delete mode 100644 _posts/tech/2013-03-20-different-bewteen-kvm-xen-qemu.md
delete mode 100644 _posts/tech/2013-03-21-introduction-of-ceilometer.md
delete mode 100644 _posts/tech/2013-03-21-vnc-vs-rdp.md
delete mode 100644 _posts/tech/2013-03-27-glossary-of-ceilometer.md
delete mode 100644 _posts/tech/2013-04-23-opensource-licenses.md
delete mode 100644 _posts/tech/2013-04-25-conceptual-logical-physical.md
delete mode 100644 _posts/tech/2013-04-25-some-concept-about-enterprise-storage.md
delete mode 100644 _posts/tech/2013-04-26-create-windows-xp-image-for-openstack.md
delete mode 100644 _posts/tech/2013-05-01-deploy-a-ceilometer-horizon-project.md
delete mode 100644 _posts/tech/2013-05-01-terminal-command-of-ceilometer.md
delete mode 100644 _posts/tech/2013-05-03-create-windows-7-image-for-openstack.md
delete mode 100644 _posts/tech/2013-05-03-php-cache-of-a-page.md
delete mode 100644 _posts/tech/2013-05-06-interactive-coding-ipython.md
delete mode 100644 _posts/tech/2013-05-06-the-viewpoint-metatag.md
delete mode 100644 _posts/tech/2013-05-06-why-use-pip-over-easy-install.md
delete mode 100644 _posts/tech/2013-05-13-openstack-grizzly-multihost-deployment-doc.md
delete mode 100644 _posts/tech/2013-05-15-create-ubuntu-image-for-openstack.md
delete mode 100644 _posts/tech/2013-05-15-different-between-python-package-tools.md
delete mode 100644 _posts/tech/2013-05-15-learn-how-to-use-distutils.md
delete mode 100644 _posts/tech/2013-05-16-deploy-openstack-grizzly-in-virtual-machine.md
delete mode 100644 _posts/tech/2013-05-19-what-is-wsgi.md
delete mode 100644 _posts/tech/2013-05-27-openstack-horizon-locale.md
delete mode 100644 _posts/tech/2013-06-07-learn-python-setuptools-in-detail.md
delete mode 100644 _posts/tech/2013-06-09-learn-python-abc-module.md
delete mode 100644 _posts/tech/2013-06-09-learn-python-stevedore-module-in-detail.md
delete mode 100644 _posts/tech/2013-06-11-hacking-in-openstack-ceilometer-compute-agent.md
delete mode 100644 _posts/tech/2013-06-11-pipeline-of-openstack-ceilometer.md
delete mode 100644 _posts/tech/2013-06-12-hacking-in-openstack-ceilometer-api.md
delete mode 100644 _posts/tech/2013-06-12-hacking-in-openstack-ceilometer-collector.md
delete mode 100644 _posts/tech/2013-10-01-deploy-ceilometer-of-openstack.md
delete mode 100644 _posts/tech/2013-12-08-implemention-of-breadcrumbs-by-css3.md
delete mode 100644 _posts/tech/2014-01-16-php-namespace-and-autoload.md
delete mode 100644 _posts/tech/2014-01-17-python-script-of-sae-log-download.md
delete mode 100644 _posts/tech/2014-01-24-apache-log-format.md
delete mode 100644 _posts/tech/2014-01-25-how-to-use-php-socket.md
delete mode 100644 _posts/tech/2014-01-30-understanding-the-github-workflow.md
delete mode 100644 _posts/tech/2014-02-15-apache-and-nginx.md
delete mode 100644 _posts/tech/2014-03-10-grunt-bower-and-laravel.md
delete mode 100644 _posts/tech/2014-03-20-use-other-libraries-in-laravel.md
delete mode 100644 _posts/tech/2014-03-22-managing-your-larrvel-queue-by-supervisor.md
delete mode 100644 _posts/tech/2014-04-11-redis-queue-in-laravel.md
delete mode 100644 _posts/tech/2014-04-16-insert-large-number-of-data-in-mysql.md
delete mode 100644 _posts/tech/2014-04-19-design-patterns-of-php.md
delete mode 100644 _posts/tech/2014-04-23-roc-curve.md
delete mode 100644 _posts/tech/2014-04-27-magic-methods-and-magic-constants-in-php.md
delete mode 100644 _posts/tech/2014-05-04-set-environment-variables-of-server-for-php.md
delete mode 100644 _posts/tech/2014-09-26-use-old-version-of-brew-php.md
delete mode 100644 _posts/tech/2014-12-06-ioc-and-facade-in-laravel.md
delete mode 100644 _posts/tech/2015-01-08-conflict-between-camel-and-snake-in-laravel.md
delete mode 100644 _posts/tech/2015-09-07-sort-algorithms.md
delete mode 100644 _posts/tech/2017-02-19-setup-react-environment.md
delete mode 100644 _posts/tool/2013-01-09-remote-access-of-mysql.md
delete mode 100644 _posts/tool/2013-01-16-create-remote-resp.md
delete mode 100644 _posts/tool/2013-02-25-quick-open-in-windows.md
delete mode 100644 _posts/tool/2013-03-25-open-tcp-port-of-libvirt.md
delete mode 100644 _posts/tool/2013-03-25-tools-of-sever-deployment.md
delete mode 100644 _posts/tool/2013-04-21-add-snippet.md
delete mode 100644 _posts/tool/2013-04-22-add-svn-ignore-file.md
delete mode 100644 _posts/tool/2013-04-22-highlight-of-jekyll.md
delete mode 100644 _posts/tool/2013-04-22-ignore-password-in-git-push.md
delete mode 100644 _posts/tool/2013-04-22-wordpress-to-jekyll.md
delete mode 100644 _posts/tool/2013-05-20-set-proxy-for-git-or-apt.md
delete mode 100644 _posts/tool/2013-05-22-change-to-zsh.md
delete mode 100644 _posts/tool/2013-05-23-install-mysql-and-mongo-web-admin.md
delete mode 100644 _posts/tool/2013-08-04-something-about-tools-i-used.md
delete mode 100644 _posts/tool/2013-08-06-tools-of-reading.md
delete mode 100644 _posts/tool/2013-08-28-change-bootstrap-to-3.md
delete mode 100644 _posts/tool/2013-12-08-linux-command-continue.md
delete mode 100644 _posts/tool/2013-12-11-deploy-pptp-vpn-in-ubuntu.md
delete mode 100644 _posts/tool/2013-12-11-lamp-in-mac.md
delete mode 100644 _posts/tool/2014-02-12-how-to-deploy-a-blog-on-github-by-jekyll.md
delete mode 100644 _posts/tool/2014-03-20-php-debug-with-xdebug.md
delete mode 100644 _posts/tool/2014-04-10-install-vagrant-in-mac.md
delete mode 100644 _posts/tool/2015-01-10-use-dropzone-and-qiniu-to-store-blog-images.md
delete mode 100644 _posts/tool/2016-11-09-my-writing-tools.md
delete mode 100644 _posts/tool/2016-12-30-deploy-l2tp-on-ubuntu.md
delete mode 100644 _posts/tool/2016-12-31-deploy-shadowsocks-on-ubuntu.md
delete mode 100644 _posts/tool/2017-01-14-install-hhvm-on-mac-with-docker.md
delete mode 100644 _posts/tool/2017-02-21-docker-summary.md
diff --git a/CNAME b/CNAME
index 8d2094ad3d..cbf38b3d03 100644
--- a/CNAME
+++ b/CNAME
@@ -1 +1 @@
-yansu.org
\ No newline at end of file
+cj1024.com
\ No newline at end of file
diff --git a/README.md b/README.md
index 3aa22e135d..f2860beaea 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
### 我的博客
-地址:[http://yansu.org](http://yansu.org)
+地址:[cj1024.com](cj1024.com)
### 安装说明
diff --git a/_config.yml b/_config.yml
index e32b604be1..4fae492cee 100644
--- a/_config.yml
+++ b/_config.yml
@@ -1,12 +1,12 @@
# Site settings
-title: 闫肃的博客
-email: suyan0830@gmail.com
+title: 陈军的博客
+email: 754816138@qq.com
description: > # this means to ignore newlines until "baseurl:"
- 闫肃的博客
+ 陈军的博客
baseurl: "" # the subpath of your site, e.g. /blog/
-url: http://yansu.org # the base hostname & protocol for your site
+url: cj1024.com # the base hostname & protocol for your site
rss_url: /pages/feed.xml
-author: Su Yan
+author:陈 军
# Sidebar filter
# Choose 'tag' or 'category' as filter in sidebar.
@@ -14,11 +14,11 @@ filter: 'category'
recent_num: 20
# Social account
-twitter: masonsuyan
-weibo: suyan0830
-github: suyan
-instagram: suyan0830
-linkedin: suyan0830
+twitter:
+weibo:
+github: chenjun0210
+instagram:
+linkedin:
# avatar and Favicon
avatar: http://7u2ho6.com1.z0.glb.clouddn.com/site-avatar.png
@@ -26,12 +26,12 @@ favicon: http://7u2ho6.com1.z0.glb.clouddn.com/site-favicon.ico
# disqus config
disqus:
- shortname: suyan-zh
+ shortname: chenjun-zh
# google analytics config
ga:
- id: UA-54767140-1
- url: yansu.org
+ id:
+ url:
# Build settings
permalink: /:year/:month/:day/:title.html
diff --git a/_posts/book/2013-12-20-book-list-of-2013.md b/_posts/book/2013-12-20-book-list-of-2013.md
deleted file mode 100644
index 46f6a8325c..0000000000
--- a/_posts/book/2013-12-20-book-list-of-2013.md
+++ /dev/null
@@ -1,33 +0,0 @@
----
-layout: post
-title: 2013阅读书单
-category: 读书
-keywords: 阅读,书单,2013
----
-
-## Pro Git
-
-
-
-[阅读地址](http://git-scm.com/book)
-
-## The Little Mongodb Book
-
-
-
-[阅读地址](https://github.com/karlseguin/the-little-mongodb-book/blob/master/en/mongodb.markdown)
-
-这本书非常之简洁,读起来非常易懂,其实这还归功于MongoDB的简洁。NoSQL与MySQL最大的区别在于它是为一些特定的场景设计的,如MongoDB、Redis、Cassandra等。MongoDB是其中更加通用的一个方案,从MySQL往MongoDB转,几乎不需要太大变化。
-
-## 白帽子讲Web安全
-
-
-
-[购买地址](http://book.douban.com/subject/10546925/)
-
-## 浪潮之巅
-
-
-
-[购买地址](http://book.douban.com/subject/6709783/)
-
diff --git a/_posts/book/2014-03-14-book-list-of-2014.md b/_posts/book/2014-03-14-book-list-of-2014.md
index 6835c45cd4..cb4e01b1e5 100644
--- a/_posts/book/2014-03-14-book-list-of-2014.md
+++ b/_posts/book/2014-03-14-book-list-of-2014.md
@@ -3,23 +3,4 @@ layout: post
title: 2014阅读书单
category: 读书
keywords: 阅读,书单,2014
----
-
-## Web前端黑客技术揭秘
-
-
-
-[阅读地址](http://book.douban.com/subject/20451827/)
-
-## The Little Redis Book
-
-
-
-[阅读地址](https://github.com/karlseguin/the-little-redis-book)
-
-## 打造Facebook
-
-
-
-[购买地址](http://book.douban.com/subject/20471120/)
-
+---
\ No newline at end of file
diff --git a/_posts/interview/2016-11-17-airbnb-boggle-game.md b/_posts/interview/2016-11-17-airbnb-boggle-game.md
index 3bc2d10445..57edd5a049 100644
--- a/_posts/interview/2016-11-17-airbnb-boggle-game.md
+++ b/_posts/interview/2016-11-17-airbnb-boggle-game.md
@@ -4,182 +4,4 @@ title: Airbnb Boggle Game
category: 面试
tags: Airbnb,Interview
keywords: Airbnb,Interview,Boogle Game
----
-
-题目来源: [http://www.1point3acres.com/bbs/thread-204884-1-1.html](http://www.1point3acres.com/bbs/thread-204884-1-1.html)
-
-## 描述
-
-boggle game,给一个board和字典,找出board上出现最多的单词集合,单词不能重叠在同一个位置
-
-例如
-
-```
-board:
-{'a', 'b', 'c'},
-{'d', 'e', 'f'},
-{'g', 'h', 'i'}
-
-dict:
-["abc", "cfi", "beh", "defi", "gh"]
-```
-
-答案应该是 `["abc", "defi", "gh"]`
-
-## 分析
-
-这个题和 Leetcode 的 Word Search II 有点像,唯一区别是这个题里面 board 上的单词不可以重复利用。刚开始我觉得可以 run 一次 Word Search II 得到所有的可能单词先,然后求最大的一个单词无重合集合,但是找无重合集合这个又变成一个 subset 的题目(我没有研究更快的方法)。所以最后还是考虑用控制一下递归搜索的条件,在找单词的时候记录一下已经选中的单词,只是这个过程需要两层递归。
-
-1. 还是用一个 Trie 来加速 Word 的查找
-2. 第一个循环,遍历 board 上每一个点,然后从这里找第一个单词(因为第一个单词的选择会影响最终单词数量),开始第一个递归。
-3. 第一个递归的作用是,从当前点开始,通过第二个递归拿到当前点可行的每一个单词。挨个放入,每放入一个更新当前 board 的使用情况,然后开始下一层搜索。
-4. 第二个递归的作用是,从当前点开始,找所有可行的单词 indexes,为第一个递归提供选择
-
-
-## Java解答
-
-```java
-import java.util.*;
-class Untitled {
- // 从每个点开始,找从这个点出发的所有单词组合
- public void getAllWords(char[][] board, String[] words) {
- // 构建字典树加速查找
- Trie trie = new Trie();
- for(String word : words) {
- trie.insert(word);
- }
-
- int m = board.length;
- int n = board[0].length;
- List result = new ArrayList<>();
- // 每个点作为起点,可能会有不一样的结果
- for (int i = 0; i < m; i++) {
- for (int j = 0; j < n; j++) {
- boolean[][] visited = new boolean[m][n];
- List path = new ArrayList<>();
- findWords(result, board, visited, path, i, j, trie.root);
- }
- }
-
- System.out.println(result);
- }
-
- // 从i,j开始递归找到所有单词组合
- public void findWords(List result, char[][] board, boolean[][] visited, List words, int x, int y, TrieNode root) {
-
- int m = board.length;
- int n = board[0].length;
- for (int i = x; i < m; i++) {
- for (int j = y; j < n; j++) {
- List> nextWordIndexes = new ArrayList<>();
- List path = new ArrayList<>();
- // 获得从当前点开始的所有可能单词的indexes
- getNextWords(nextWordIndexes, board, visited, path, i, j, root);
- for (List indexes : nextWordIndexes) {
- // 设置visited为当前使用单词
- String word = "";
- for (int index : indexes) {
- int row = index / n;
- int col = index % n;
- visited[row][col] = true;
- word += board[row][col];
- }
-
- words.add(word);
- // 只要更新了words,就保存一次words
- if (words.size() > result.size()) {
- result.clear();
- result.addAll(words);
- }
- findWords(result, board, visited, words, i, j, root);
-
- // 恢复visited
- for (int index : indexes) {
- int row = index / n;
- int col = index % n;
- visited[row][col] = false;
- }
- words.remove(words.size() - 1);
- }
- }
- // 只有第x行是从y开始,后面都从0开始
- y = 0;
- }
- }
-
- private void getNextWords(List> words, char[][] board, boolean[][] visited, List path, int i, int j, TrieNode root) {
- if(i < 0 | i >= board.length || j < 0 || j >= board[0].length
- || visited[i][j] == true || root.children[board[i][j] - 'a'] == null) {
- return;
- }
-
- root = root.children[board[i][j] - 'a'];
- if(root.isWord) {
- List newPath = new ArrayList<>(path);
- newPath.add(i * board[0].length + j);
- words.add(newPath);
- return;
- }
-
- visited[i][j] = true;
- path.add(i * board[0].length + j);
- getNextWords(words, board, visited, path, i + 1, j, root);
- getNextWords(words, board, visited, path, i - 1, j, root);
- getNextWords(words, board, visited, path, i, j + 1, root);
- getNextWords(words, board, visited, path, i, j - 1, root);
- path.remove(path.size() - 1);
- visited[i][j] = false;
- }
-
- class Trie {
- TrieNode root;
-
- Trie() {
- root = new TrieNode('0');
- }
-
- public void insert(String word) {
- if(word == null || word.length() == 0) {
- return;
- }
- TrieNode node = root;
- for(int i = 0; i < word.length(); i++) {
- char ch = word.charAt(i);
- if(node.children[ch - 'a'] == null) {
- node.children[ch - 'a'] = new TrieNode(ch);
- }
- node = node.children[ch - 'a'];
- }
- node.isWord = true;
- }
- }
-
- class TrieNode {
- char value;
- boolean isWord;
- TrieNode[] children;
-
- TrieNode(char v) {
- value = v;
- isWord = false;
- children = new TrieNode[26];
- }
- }
-
- public static void main(String[] args) {
- char[][] board = new char[][]{
- {'a', 'b', 'c'},
- {'d', 'e', 'f'},
- {'g', 'h', 'i'}
- };
- String[] words = new String[] {
- "abc", "cfi", "beh", "defi", "gh"
- };
-
- Untitled s = new Untitled();
- s.getAllWords(board, words);
- }
-}
-```
-
-
+---
\ No newline at end of file
diff --git a/_posts/life/2013-06-17-the-end-of-regular-college-course.md b/_posts/life/2013-06-17-the-end-of-regular-college-course.md
deleted file mode 100644
index eeb72a118c..0000000000
--- a/_posts/life/2013-06-17-the-end-of-regular-college-course.md
+++ /dev/null
@@ -1,31 +0,0 @@
----
-layout: post
-title: 本科生涯结束了
-category: 生活
-tags: Essay
-keywords: 本科,结束
-description: 毕设答辩完了,大概大学四年也等于交代了吧
----
-
-今天上午答辩完了,准备了几个月的毕业设计,也算是给了自己一个交代。
-
-
-回想自己本科四年,有过得失,有过起伏。自己在学校做了很多自己大学之前不敢,也没有机会做的事情。
-
-
-这四年每天都有新鲜事情发生,现在却一件都想不起来了,唯一的感觉就是自己淡然了很多。
-
-
-每天混迹在V2EX、微博还有微信中,这些都是我的消息来源,我奋力搜集着自己感兴趣的内容,漫无目的。
-
-
-出去实习过,也有过干一番事情的冲动,但最后还是选择了安稳读研。曾经一边努力获得保研名额,却又暗暗希望保研失败,这样我就可以有别的选择,不是这样漫无目的走下去。
-
-
-除了人,这个学校没有什么让我值得留恋的地方,但我却选择继续留在这里。可我决的我天性应该适合陌生的环境,在陌生环境中我有极强的求生欲,内心的斗志会被激发出来,就像我刚来大学时候的状态。
-
-
-唯一让我难以忘怀的是我在大学遇到的几个人,他们是我这辈子可能都不会忘掉的。
-
-
-在我看来,一段理想的生活即将结束,未来的路谁都没法预测,坚持做自己认为对的事情就够了。
diff --git a/_posts/life/2014-01-02-my-2013.md b/_posts/life/2014-01-02-my-2013.md
deleted file mode 100644
index 8a918468d2..0000000000
--- a/_posts/life/2014-01-02-my-2013.md
+++ /dev/null
@@ -1,64 +0,0 @@
----
-layout: post
-title: 2013个人总结
-category: 生活
-tags: Essay
-keywords: 总结,2013
-description:
----
-
-### 动机
-
-不知不觉已经进入2014年,今年是我的本命年,实际上从去年到今年也是我人生轨迹变化极快的一年。昨天晚上很晚才睡,有幸读了几个关注的人的2013总结,收益颇多。
-
-- [2013 年个人总结](http://dbanotes.net/mylife/2013_personal_review.html)
-- [Tinyfool的2013年总结————在困惑和挣扎中试图前行](http://tiny4.org/blog/2014/01/tinyfool-2013/)
-- [我在App Store这三年](http://www.iwangke.me/2014/01/01/three-years-in-app-store-as-indie-developer/)
-
-于是我打算自己也写一篇2013总结,未来自己回顾一年历程的时候,能感觉到自己成长了多少。
-
-### 实习
-2013最早的4个月一直是在研究OpenStack是什么,它的作用机制,它的应用方向以及怎么把它运行起来。着手研究OpenStack其实从2012年10月就开始了,我刚刚进入大四,保研后的研究生导师把我推荐到联想实习。
-
-OpenStack的学习对我来说真的算是一次不一样的体验,因为它足够大。从概念上如云计算,到技术层面如虚拟化,再到运维层面如自动化运维,最后到开源项目编程,每一部分的学习都让我获益颇丰。我在其中主要的研究虚拟机的监控,这个组件让我更能了解到它各个部分协调运行的机制。
-
-4月的时候由于导师需要,从联想回来给实验室弄OpenStack环境,同时我也准备就这个方向写我的毕业论文。
-
-### 毕业设计
-回来以后的感觉真的是...节奏缓慢,没有项目的驱动,没有任务的督促。因为老师也不知道要拿这个东西干什么,甚至都不去看我们给他弄好的环境。为了不让自己就这样轻轻松松毕业,我打算继续研究OpenStack,至少完全搞定一个组件。
-
-当时正好在于Grizzly版本发布,OpenStack自己的监控组件Ceilometer正式发布(之前我们用新浪开源的Kanyun),对我来说正好是个千载难逢的学习机会。
-
-从4月到7月毕业,3个月的时间,我读完了Ceilometer组件的代码,顺便基于它还有Horizon搞了二次开发,顺利毕业。为了阅读代码,我感觉到自己的Python水平提升了不少,最让我满意的应该是还写了几篇有关这个组件的博客。这算是自己真正首次原创了吧。
-
-### 放弃读研&出国准备
-从保研开始呆在研究生实验室有快1年,曾经保研只是为了让家人放心,毕业后能找个不错的工作拿到北京户口,这似乎是生活在小县城中父母眼里最好的归宿。但我感受到这里并不适合我,我不希望把自己最有干劲的几年浪费在这个地方。
-
-我没有办法改变环境,那我只能换一个环境。
-
-一个解决方式是去留学。
-
-本科能聊的来的2个哥们,一个已经去了美国,另一个在准备去美国的路上...在他们给我各种灌输之下,以及对北京兴趣的减少,我动摇了。
-
-但是我错误判断了自己的英语实力和学习速度...以为我可以像学编程语言一样学英语,但事实显然不是这样的。4个月,GRE+TOEFL几乎把我累死,另一方面还要不停地给家人做工作。最后分数是有了,但是完全达不到自己的预期。
-
-另一个解决方式是去工作。
-
-### 一个工作
-眼看想去的几个学校无望,我甚至做了最坏的打算,再准备一年再出去。
-
-我完全没有想到我轨迹又变了,因为一个偶然的工作机会。
-
-英语的准备过程真的有些枯燥,我止不住想去写点东西(码农的命..)。看到V2EX上的一则低调招聘贴,澳洲公司,还能远程,这对于正在学习英语,又想编程的我是最佳选择,没多想就交了简历。
-
-电话+QQ联系之后就开始实习了,不得不说这个效率...
-
-至今为止一个半月的实习,感觉自己在这里有很大的发挥空间,也能在这个方面提升不少。如果能在年后顺利去澳洲工作,或许也是不错的选择。
-
-### 总结
-
-> 但行好事,莫问前程
-
-> 埋头干事,抬头看路
-
-这两句似乎有些矛盾,不过我总拿它们来作为自己选择的标准。前者从Fenng听来,后者忘了。
\ No newline at end of file
diff --git a/_posts/life/2014-12-12-travel-of-california.md b/_posts/life/2014-12-12-travel-of-california.md
deleted file mode 100644
index adb6baf1cc..0000000000
--- a/_posts/life/2014-12-12-travel-of-california.md
+++ /dev/null
@@ -1,76 +0,0 @@
----
-layout: post
-title: 美西加州三日游
-category: 生活
-tags: essay
-keywords: 加州,生活,California
----
-
-> 来美3个月了,终于迎来第一个小假期。由于时间有限,还没有车,所以选择了跟团先粗略了解一下加州。
-
-
-
-## 丹麦村 (Solvang)
-
-丹麦村是我们的第一站停歇点。
-
-
-
-这里的建筑风格都特别小清醒,多重色彩穿插点缀整条大街。
-
-
-
-这个风车是这儿的标志建筑,配合加州的大蓝天,可以拍很多不错的照片。
-
-## 赫氏古堡 (Hearst Castle)
-
-第二站是赫氏古堡,在地图上的C点。
-
-
-
-这座城堡建在一座山头,城堡中收藏了各种珍贵的雕像和油画。
-
-
-
-向西眺望就是沙滩和太平洋,视野非常开阔。
-
-## 罗马艺术宫 (Palace of Fine Arts)
-
-罗马艺术宫就坐落在进门大桥旁边,据说是当初万国博览会举办的地方。
-
-
-
-## 九曲花街 (Lombard Street)
-
-很多人推荐九曲花街这个地方,但是我们来的时候两边花并没有开,所以看起来就是一个大家练车的地方 0_0
-
-
-
-## 渔人码头 (Fisherman's Wharf)
-
-渔人码头这个地方就像一个游客集散地,来的都是外地游客。这里有各种海鲜可以尝,另外广场的歌手唱的也挺不错。
-
-
-
-## 恶魔岛 (Alcatraz Island)
-
-从渔人码头上船,可以绕恶魔岛一圈。恶魔岛以前是关政治罪犯的地方,孤立在海中央,非常难越狱,不过据说有人挖了地道到了对岸。
-
-
-
-## 金门大桥 (Golden Gate Bridge)
-
-金门大桥算是旧金山的标志之一。
-
-
-
-## 优胜美地国家公园 (Yosemite)
-
-
-
-
-
-
-
-
-
diff --git a/_posts/life/2015-01-01-my-2014.md b/_posts/life/2015-01-01-my-2014.md
deleted file mode 100644
index 5654eebf34..0000000000
--- a/_posts/life/2015-01-01-my-2014.md
+++ /dev/null
@@ -1,50 +0,0 @@
----
-layout: post
-title: 2014 个人总结
-category: 生活
-tags: Essay
-keywords: 个人总结,2014
-description:
----
-
-> 在2014年里,我在求学、职业生涯以及家庭关系上都有过多次尝试和选择。
-
-## 留学申请
-
-英语考试和学校申请总的时间大概是从去年8月中旬到今年1月中旬,历时5个月,这段时间是我有记忆以来最困难的一段时期。其中包括说服家人支持我留学,考过TOEFL和GRE,以及学校的选择和申请。
-
-最后由于考试结果不理想,只申请了一个学校尝试,之后打算继续考试和准备来年的申请。
-
-## 远程工作
-
-从13年底加入澳洲这家公司,到今年5月离开,是我第一次尝试远程工作。由于那边公司节奏也不快,所以除了工作外,我可以有闲暇的时间完成留学的各种琐事,以及处理研究生学校退学的一些事情。
-
-工作中收获很多,一方面要熟悉远程工作方式,另一方面为了实现项目的需求需要不断学习提升自己。最后积累了比较多的网络安全知识和实际开发经验。
-
-但是后来由于公司重组,原定的很多计划都不能再继续,因此我有了很长一段空闲期。
-
-## 几次旅行
-
-这段空闲期里,正好给了我很多机会出去旅行。我在14年上半年去游了华山和普陀山。一直想抽空把图片整理一下,写一下游记... 但是一直没有完成,看来只能拖到15年了。
-
-## 新公司
-
-旅行归来以后开始考虑自己接下来的计划,选择一个既有利于自己发展,又对个人限制比较少的公司工作,这样可以让我继续自己留学的目标。
-
-在几次面试和选择以后,最后加入了一个创业公司,开始全职工作。
-
-## 留学
-
-5月中旬,我不幸被一波拒信AOE砸中。14Fall的入学没戏了,不过学校接着给我发来一封调剂录取,说我如果愿意接受学校国际学校的语言课程,可以14Fall加入国际学院,然后15Spring或者15Fall再进入正式的Master学院。
-
-和家人和老板都商量过以后,确定接受调剂,先到美帝熟悉环境。
-
-## 语言学习
-
-语言学习过程其实也是熟悉未来生活和学习环境的过程。事实证明早来也有早来的好处,经过几个月的学习,我的英文水平可以应付了日常生活和学术的基本要求。
-
-其间除了探索洛杉矶,还去过一次旧金山旅行,感受了一下湾区风光。
-
-## 总结
-
-总得说来,这一年经历了很多,也成长了很多。
diff --git a/_posts/life/2015-01-30-microsoft-openhack-2015.md b/_posts/life/2015-01-30-microsoft-openhack-2015.md
deleted file mode 100644
index 07c25513be..0000000000
--- a/_posts/life/2015-01-30-microsoft-openhack-2015.md
+++ /dev/null
@@ -1,32 +0,0 @@
----
-layout: post
-title: 微软 Openhack 2015
-category: 生活
-tags: Essay
-keywords:
----
-
-Hackathon 在国内也见过不少,不过一直没有参加过,一是熬夜实在是伤身体,二是以前不太好找队伍。这回室友喊我去参加,因为好奇这边IT的工作环境,就去参加了。
-
-这次 Hackathon 的主题是 USC vs UCLA,这俩学校的 Football 一直是死敌,导致各方面也都开始竞争,在 [Wikipedia](http://en.wikipedia.org/wiki/UCLA–USC_rivalry) 上还有专门的词条来记录两校的竞争。
-
-
-
-上图是 Hackathon 一组队伍最终展示PPT时候的封面~
-
-这次 Openhack 的奖品还好,第一是去西雅图总部玩,第二是人手一台XBOX.
-
-
-
-不过在中间每隔一个小时有一次小活动,奖品包含了XBOX和Surface Pro等 0_0 可惜活动都没法参加,对游戏规则都不明白。不过这边的工程师们还是挺逗的,唱歌跳舞神马的各种玩 High。
-
-下图是洛杉矶微软办公室,这天里面基本上能坐的地方都被参加 Hackathon 的队伍挤满了。
-
-
-
-我们的4个人的桌面~ 隔壁一哥带外星人来写代码,不过据说装了10个小时,Visual Studio 都没装完。
-
-
-
最后是队伍合影 =_= 我是那个比较正常的
-
-
\ No newline at end of file
diff --git a/_posts/life/2015-04-13-rent-car-by-zipcar.md b/_posts/life/2015-04-13-rent-car-by-zipcar.md
deleted file mode 100644
index a149bfa52a..0000000000
--- a/_posts/life/2015-04-13-rent-car-by-zipcar.md
+++ /dev/null
@@ -1,61 +0,0 @@
----
-layout: post
-title: 使用 Zipcar 在加州租车
-category: 生活
-tags: Essay
-keywords: Zipcar,Rent,Car
----
-
-> 在洛杉矶这个“大饼”中生活,没有车真的是各种艰难。2月初把驾照考过了,接下来就考虑买车或者租车。买车算了算不是很划算,而且对车也不太懂,就考虑先租车。
-
-> 在 [USC Transportation](http://transnet.usc.edu/index.php/getting-around/) 上排名最靠前的两个公司是 Enterprise 和 Zipcar。前者是传统的租车公司,后者稍微不一样一点。我还没有在 Enterprise 上租过车,所以先说说 Zipcar.
-
-## Zipcar 简介
-
-[Zipcar](http://www.zipcar.com) 是会员制的,在注册以后会给发一张 Zipcard 过来,有了这张卡你就可以随时去订车和提车了。Zipcar 不像其他租车行一样你得去固定地方统一取车,它的车就停在路边,他们有固定的停车位。来看一下 Zipcar 在 USC 附近的停车点。
-
-
-
-## Zipcar 使用
-
-### 1. 注册获得会员卡
-
-大部分学校应该都和 Zipcar 有合作,所以注册之前应该去学校网站看一下。学生可以将会员费缩减到 25刀/年。
-
-注册地址在[这里](http://members.zipcar.com/registration),注册的时候去搜一下 Promo Code,我就是注册完才看到一个免费40刀的 Code T_T。在美国注册帐号一看到 Code 填空就应该去搜搜~
-
-### 2. 租车
-
-租车可以在网站上或者手机 APP 上进行。租车非常方便,只要选择相应车辆,以及使用时间预订即可。然后在预订时间的前15分钟内取车。取车很简单,拿自己的 Zipcard 刷一下车前部的一个感应器门就开了。然后上车发动走人。
-
-### 3. 加油
-
-Zipcar 租的车带了加油卡,就在司机座位上面。虽然看起来比较贴心,但是这个卡经常不能用,因为它似乎是个信用卡,然后一旦有人尝试多次失败就被锁了,导致后面的人们也不能用。
-
-加油卡的使用方式是:
-
-1. 刷一下加油卡 (Gas Card)
-2. 输入汽车里程表上的数
-3. 输入 Zipcard 上面那个 6 位的 Gas ID
-4. 加油
-
-如果加油卡失效,这个时候会提示:Find your cashier。不用担心,直接用自己的信用卡加油就好了,然后记得要收据 (Receipt),然后把收据发到 support@zipcar.com 报销就好。记得在邮件里加上自己的 Zipcard ID.
-
-### 4. 还车
-
-还车记得一定要还到原车的位置。
-
-### 5. 保险
-
-在帐号注册的时候有个保险选项
-
-
-
-我建议选择那个complete waiver,毕竟开车难免磕碰。
-
-## 注意
-
-### 1. 逾期罚款
-
-租车的时候宁可多不可少,因为逾期惩罚是非常重的,应该是一个小时50刀左右。
-
diff --git a/_posts/life/2015-12-23-las-vegas-travel.md b/_posts/life/2015-12-23-las-vegas-travel.md
deleted file mode 100644
index 9af897fbc6..0000000000
--- a/_posts/life/2015-12-23-las-vegas-travel.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-layout: post
-title: Las Vegas 自驾游
-category: 生活
-tags: essay
-keywords: 加州,生活,California,Las Vegas
----
-
-> Las Vegas 是美国必去的城市之一。有人说,要看100年前的美国要去 San Francisco,看50年前的美国要去 Los Angels,看现在的美国要去 Las Vegas。
-
-
-
-## Outlets at Barstow
-
-很大一个 Outlets,只是顺路上厕所...
-
-## Bellagio Hotel
-
-
-
-
-
-
-
-## Hoover Dam
-
-
-
-
-
-## Valley of Fire State Park
-
-
-
-
-
-
diff --git a/_posts/life/2016-03-13-san-diego-travel.md b/_posts/life/2016-03-13-san-diego-travel.md
deleted file mode 100644
index dbe698898b..0000000000
--- a/_posts/life/2016-03-13-san-diego-travel.md
+++ /dev/null
@@ -1,54 +0,0 @@
----
-layout: post
-title: San Diego 自驾游
-category: 生活
-tags: essay
-keywords: 加州,圣地亚哥,生活,California,San Diego
----
-
-> San Diego 就在 Los Angeles 车程不到2小时的地方,本来是来 LA 以后首选的旅行城市,拖到现在才去。总的说来,这个城市不大,每个地方都很容易到达,特别适合生活。
-
-
-
-## Carlsbad Flower Fields
-
-
-
-## University of California San Diego
-
-
-
-## San Diego Temple
-
-
-
-## La Jolla Cove
-
-
-
-## SeaWorld
-
-
-
-## USS Midway Museum
-
-
-
-
-
-## Sunset Cliffs Park
-
-
-
-## Old Town
-
-
-
-## Potato Chip Rock
-
-
-
-## 美食严重推荐
-
-- Great Plaza Buffet
-
diff --git a/_posts/life/2016-07-02-olympic-national-park-travel.md b/_posts/life/2016-07-02-olympic-national-park-travel.md
deleted file mode 100644
index 680b88666f..0000000000
--- a/_posts/life/2016-07-02-olympic-national-park-travel.md
+++ /dev/null
@@ -1,47 +0,0 @@
----
-layout: post
-title: Olympic National Park 自驾游
-category: 生活
-tags: essay
-keywords: 加州,生活,California,Olympic National Park
----
-
-> Olympic National Park 是美国10大国家公园之一,体验过以后真的感觉,要雪山有雪山,要湖水有湖水,要雨林有雨林,几乎囊括了大部分客观上的户外景观。
-
-
-
-## Nourish Sequim
-
-
-
-## Hurricane Ridge
-
-
-
-
-
-
-
-## La Push Beach
-
-
-
-## Sol Duc Falls
-
-
-
-## Deer Lake
-
-
-
-## Hoh Rain Forest
-
-
-
-## Ruby Beach
-
-
-
-
-
-
diff --git a/_posts/life/2016-11-07-credit-cards-in-usa.md b/_posts/life/2016-11-07-credit-cards-in-usa.md
deleted file mode 100644
index 95042b7622..0000000000
--- a/_posts/life/2016-11-07-credit-cards-in-usa.md
+++ /dev/null
@@ -1,111 +0,0 @@
----
-layout: post
-title: 美国信用卡懒人选择
-category: 生活
-tags: essay
-keywords: 信用卡,生活,美国
----
-
-## 美国信用卡简介
-
-在美国信用卡在日常生活中非常重要,不光是好处多,而且有些地方非信用卡不可,我列举一下我知道的部分:
-
-1. 从租车公司租车必须使用信用卡
-2. 用信用卡付账可以返现或者积分
-3. 拥有信用卡可以提升个人的信用分数
-4. 临时大额消费可以分期偿还
-
-但是信用卡类型非常多,几乎每家银行都提供了非常多的信用卡类型,选哪个作为日常使用的呢?以下我只介绍我自己的开的卡和选择原因。
-
-## 不需要SSN卡
-
-### Citibank
-
-#### Citi ThankYou Preferred for College Students
-
-
-
-[申请地址](https://goo.gl/oATrVo)
-
-这个卡是我来美国第一个申请的卡,非常适合新来的国际学生,因为这个卡的申请不需要任何信用分数,也没有任何年龄限制。当时我有BOA和Citi两个选择,但是前者在年龄超一定值的时候需要在银行存一定的押金 T_T 大龄青年表示很受伤,所以立马放弃申请BOA。
-
-这个卡我的开卡额度是1000刀,每半年可以申请提升一次。它的积分兑换大概是略小于1%,但是对于刚开始来说够用,然后我使用积分的方式是在Amazon上买东西。
-
-## 需要SSN卡
-
-### Discover
-
-
-
-[申请地址](https://goo.gl/QELR4c)
-
-- 返现: 季度分类5%,其他1%
-- 开卡奖励: 开卡三月内消费一次得$50(需要refer)
-
-这个卡基本是有了SSN以后人人必备,因为每个季度都有一定的5%返现,现在申请其实返现力度有10%,因为它会记录你第一年的返现的钱,在一年后把这些返现再给你一次。这个卡搭配下面介绍的一个卡,可以一年返现非常多。
-
-申请学生版本(用学校邮箱)可以每年拿好学生奖励 :D 大概是25刀,另外refer开卡有50刀的奖励。
-
-### Chase
-
-Chase是我选择的一个主要银行,因为大银行嘛,各方面做的都比较到位。还有就是我比较懒,不想管理太多卡,而Chase的信用卡囊括了很多高返现方面。
-
-在介绍信用卡之前,先说一下Debit Card的开卡奖励,这个在开卡的时候需要SSN号和工作单位(实习也行),然后需要一个coupon,可以找人要或者eBay搞一个~
-
-- Saving Account: 存$15000放3个月可得$200
-- Checking Account: 有公司给你发工资到卡上可得$300
-
-#### Ultimate Rewards(UR)
-
-UR是Chaes的积分系统。以下所有信用卡的返现,都以积分方式体现在这个系统里面。积分可以以100:1的方式兑换现金,也可以通过CSP(下面介绍的一个信用卡)花在别的地方,提高积分的价值。如果通过使用积分去买机票,租车和住酒店,可以达到100:2或100:3。
-
-具体的使用方式可以读一下[美国信用卡指南]((https://goo.gl/j5iJif))的文章,非常详细清晰。
-
-#### Chase Freedom
-
-
-
-[申请地址](https://goo.gl/m8ovRp)
-
-- 返现: 季度分类5%,其他1%
-- 开卡奖励: 开卡三个月消费满500给$150
-
-Chase Freedom 也是必选之一,因为也是一个5%季度返现卡,配合Discover使用。开卡奖励应该有15000 UR,直接转换现金是$150。现在这个卡正在支持Costco购物5%的返现,所以基本上每个季度都可以把积分赚满(每个季度5%的上限是前1500)。
-
-#### Chase Freedom Unlimited
-
-
-
-[申请地址](https://goo.gl/KmlL8s)
-
-- 返现: 所有1.5%,无上限
-- 开卡奖励: 开卡三个月消费满500给$150
-
-这个是今年新开的一个卡,这个卡真正算得上懒人用,即所有的消费都是1.5%的返现,而且返现没有上限。我用这个卡付其他一切消费 :D
-
-#### Chase Sapphire Preferred (CSP)
-
-
-
-[申请地址](https://goo.gl/c0cOIk)
-
-- 返现: 吃饭和旅行2%,其他1%
-- 开卡奖励: 开卡三个月消费4000给$550
-- 年费: $95,第一年免年费
-
-这个卡用来帮助把之前攒的点数加倍,即用这个卡来买机票和住特定酒店,可以把积分成倍。另外如果租车的话,这个卡还可以提供Primary租车保险。
-
-## 我的使用
-
-基本我持有以上的卡以后就不再折腾了,Citibank我已经不再使用,其他几个卡的用途如下:
-
-1. 有季度5%返现的时候,用discover和Chase Freedom
-2. 吃饭和旅游相关(Uber, Zipcar等都算),用CSP
-3. 其他情况使用Chase Freedom Unlimited
-
-## 需要Refer留邮箱即可
-
-除了Citibank之外,我都可以Refer,如果需要的话可以直接留邮箱。
-
-
-
diff --git a/_posts/resource/2014-01-15-general-git-resources.md b/_posts/resource/2014-01-15-general-git-resources.md
deleted file mode 100644
index 4dad07812f..0000000000
--- a/_posts/resource/2014-01-15-general-git-resources.md
+++ /dev/null
@@ -1,178 +0,0 @@
----
-layout: post
-title: Git 常用资源
-category: 资源
-tags: Git
-keywords: Git
----
-
-## 库管理
-
-### 克隆库
-
-```bash
-git clone https://github.com/php/php-src.git
-git clone --depth=1 https://github.com/php/php-src.git # 只抓取最近的一次 commit
-```
-
-## 历史管理
-
-### 查看历史
-
-```bash
-git log --pretty=oneline filename # 一行显示
-git show xxxx # 查看某次修改
-```
-
-### 标签功能
-
-```bash
-git tag # 显示所有标签
-git tag -l 'v1.4.2.*' # 显示 1.4.2 开头标签
-git tag v1.3 # 简单打标签
-git tag -a v1.2 9fceb02 # 后期加注标签
-git tag -a v1.4 -m 'my version 1.4' # 增加标签并注释, -a 为 annotated 缩写
-git show v1.4 # 看某一标签详情
-git push origin v1.5 # 分享某个标签
-git push origin --tags # 分享所有标签
-```
-
-### 回滚操作
-
-```bash
-git reset 9fceb02 # 保留修改
-git reset 9fceb02 --hard # 删除之后的修改
-```
-
-### 取消文件的修改
-
-```bash
-git checkout -- a.php # 取消单个文件
-git checkout -- # 取消所有文件的修改
-```
-
-### 删除文件
-
-```bash
-git rm a.php # 直接删除文件
-git rm --cached a.php # 删除文件暂存状态
-```
-
-### 移动文件
-
-```bash
-git mv a.php ./test/a.php
-```
-
-### 查看文件修改
-
-```bash
-git diff # 查看未暂存的文件更新
-git diff --cached # 查看已暂存文件的更新
-```
-
-### 暂存和恢复当前staging
-
-```bash
-git stash # 暂存当前分支的修改
-git stash apply # 恢复最近一次暂存
-git stash list # 查看暂存内容
-git stash apply stash@{2} # 指定恢复某次暂存内容
-git stash drop stash@{0} # 删除某次暂存内容
-```
-
-### 修改 commit 历史纪录
-
-```bash
-git rebase -i 0580eab8
-```
-
-## 分支管理
-
-### 创建分支
-
-```bash
-git branch develop # 只创建分支
-git checkout -b master develop # 创建并切换到 develop 分支
-```
-
-### 合并分支
-
-```bash
-git checkout master # 切换到 master 分支
-git merge --no-ff develop # 把 develop 合并到 master 分支,no-ff 选项的作用是保留原分支记录
-git rebase develop # rebase 当前分支到 develop
-git branch -d develop # 删除 develop 分支
-```
-
-### 克隆远程分支
-
-```bash
-git branch -r # 显示所有分支,包含远程分支
-git checkout origin/android
-```
-
-### 修复develop上的合并错误
-
-1. 将merge前的commit创建一个分之,保留merge后代码
-2. 将develop `reset --force`到merge前,然后`push --force`
-3. 在分支中rebase develop
-4. 将分支push到服务器上重新merge
-
-### 强制更新到远程分支最新版本
-
-```bash
-git reset --hard origin/master
-git submodule update --remote -f
-```
-
-## Submodule使用
-
-### 克隆带submodule的库
-
-```bash
-git clone --recursive https://github.com/chaconinc/MainProject
-```
-
-### clone主库后再去clone submodule
-
-```bash
-git clone https://github.com/chaconinc/MainProject
-git submodule init
-git submodule update
-```
-
-## Git设置
-
-Git的全局设置在`~/.gitconfig`中,单独设置在`project/.git/config`下。
-
-忽略设置全局在`~/.gitignore_global`中,单独设置在`project/.gitignore`下。
-
-### 设置 commit 的用户和邮箱
-
-```bash
-git config user.name "xx"
-git config user.email "xx@xx.com"
-```
-
-或者直接修改config文件
-
-```bash
-[user]
- name = xxx
- email = xxx@xxx.com
-```
-
-### 查看设置项
-
-```bash
-git config --list
-```
-
-### 设置git终端颜色
-
-```bash
-git config --global color.diff auto
-git config --global color.status auto
-git config --global color.branch auto
-```
\ No newline at end of file
diff --git a/_posts/resource/2014-01-15-general-html-resources.md b/_posts/resource/2014-01-15-general-html-resources.md
deleted file mode 100644
index b2473d3878..0000000000
--- a/_posts/resource/2014-01-15-general-html-resources.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: post
-title: HTML 常用资源
-category: 资源
-tags: HTML
-keywords: HTML
-description:
----
-
-## 常用属性
-
-### 在link中可能会出现media=screen的情况
-这个属性是确定在哪种情况下使用这个link的css文件,screen是指输出到屏幕,而print用于打印
-
-### 在meta中增加viewport选项
-viewport的作用是告诉浏览器,目前的装置情况。
-
-
-
-- width:数字或device-width 设置宽度
-- height:数字或device-width 设置高度
-- initial-scale:最小0.25,最大5 初始缩放
-- minimum-scale:最小0.25,最大5 最小缩放
-- maximum-scale:最小0.25,最大5 最大缩放
-- user-scalable:1或0(yes or no) 是否允许用户缩放
\ No newline at end of file
diff --git a/_posts/resource/2014-01-15-general-javascript-resources.md b/_posts/resource/2014-01-15-general-javascript-resources.md
deleted file mode 100644
index 055a638d1b..0000000000
--- a/_posts/resource/2014-01-15-general-javascript-resources.md
+++ /dev/null
@@ -1,79 +0,0 @@
----
-layout: post
-title: JavaScript 常用资源
-category: 资源
-tags: JavaScript
-keywords: JavaScript
-description:
----
-
-## 常用代码
-
-### 字符串截取
- substr(start [, length ])
- 返回一个从指定位置开始的指定长度的子字符串
- substring(start, end)
- 返回位于 String 对象中指定位置的子字符串。
-
-
-### 页面跳转
- window.navigate("top.jsp");
- window.history.back(-1);
- window.location.href="login.jsp?backurl="+window.location.href;
- self.location='top.htm';
- top.location='xx.jsp';
-
-### 加载完成
- window.onload
- 必须等页面内包括图片的所有元素加载完成后才能执行。
- 不能同时编写多个,只执行一个
- $(document).ready()
- 是DOM结构绘制完毕后就可以执行
- 可以编写多个
- 简写$(function(){});
- $(window).load()等同与window.onload
-
-### 刷新页面
- history.go(0)
- location.reload()
- location=location
- location.assign(location)
- document.execCommand('Refresh')
- window.navigate(location)
- location.replace(location)
- document.URL=location.href
-
-### json转化和解析
-
- JSON.parse("{a:'111',b:'ccc'}"); //解析
- eval("("+"{{ cpu_data }}"+")"); //解析
-
-### 时间转换
-
- var day1 = parseInt(new Date().valueOf()/1000); //获得当前时间时间戳
- day2 = new Date(day1*1000);
- alert(day2.getFullYear()+"-"+(day2.getMonth()+1)+"-"+day2.getDate()+" "+day2.getHours()+":"+day2.getMinutes()+":"+day2.getSeconds())
- d = new Date();
- s = d.getFullYear() + "-";
- s += ("0"+(d.getMonth()+1)).slice(-2) + "-";
- s += ("0"+d.getDate()).slice(-2) + " ";
- s += ("0"+d.getHours()).slice(-2) + ":";
- s += ("0"+d.getMinutes()).slice(-2) + ":";
- s += ("0"+d.getSeconds()).slice(-2) + ".";
- s += ("00"+d.getMilliseconds()).slice(-3);
-
-### URI编码转换
-
- var a="':'";
- en = encodeURI(a); //编码
- a = decodeURI(en); //解码
-
-### HTML编码转换
-
- function htmlEncode(value){
- return $('').text(value).html();
- }
-
- function htmlDecode(value){
- return $('').html(value).text();
- }
diff --git a/_posts/resource/2014-01-15-general-jquery-resources.md b/_posts/resource/2014-01-15-general-jquery-resources.md
deleted file mode 100644
index 6a615024f0..0000000000
--- a/_posts/resource/2014-01-15-general-jquery-resources.md
+++ /dev/null
@@ -1,58 +0,0 @@
----
-layout: post
-title: jQuery 常用资源
-category: 资源
-tags: jQuery
-keywords: jQuery
-description:
----
-
-## 官方资源
-
-- [官方首页](http://jquery.com/)
-- [官方插件](http://plugins.jquery.com/)
-
-## 下拉框扩展
-
-- [Select 2](http://ivaynberg.github.io/select2/)
-
- 功能强大的下拉列表插件,基本包含了所有可能的需求……
-
-- [OptionTree](http://kotowicz.net/jquery-option-tree/demo/demo.html)
-
- 联动下拉列表插件,可以动态生成下拉列表,而且支持ajax获取数据
-
-## 常用代码
-
-### 禁用a的链接
-
- href="return false;"或href="javascript;"
- $().live('click',function(e){
- e.preventDefault();
- });
-
-### 清空file的内容
-
- var cfile = $('#id').clone();
- $('#id').replaceWith(cfile);
-
-### jquery.form.js 和 jquery.validate.js配合使用
- 这两个脚本搭配在表单验证和提交是非常的好用,顺便增加了对bootstrap表单的支持
- $("#page_form").validate({
- highlight: function(element) {
- $(element).closest('.control-group').removeClass('success').addClass('error');
- },
- success: function(element) {
- element.text('OK!').addClass('valid').closest('.control-group').removeClass('error').addClass('success');
- },
- submitHandler:function(form) {
- $(form).ajaxSubmit(options);
- }});
-
-### 选择父节点
- 使用$(this)来将dom对象转为jquery对象
- $(this).parents('tr');
-
-### 多重操作
- $(this).parents('tr').remove();
- 因为jquery函数返回jquery节点
\ No newline at end of file
diff --git a/_posts/resource/2014-01-15-general-php-resources.md b/_posts/resource/2014-01-15-general-php-resources.md
deleted file mode 100644
index 662eb66d95..0000000000
--- a/_posts/resource/2014-01-15-general-php-resources.md
+++ /dev/null
@@ -1,72 +0,0 @@
----
-layout: post
-title: PHP 常用资源
-category: 资源
-tags: PHP
-keywords: PHP
-description:
----
-
-## 常用资源
-
-### 常用扩展
-
-1. [phpDocumentor](http://www.phpdoc.org)
-2. [PHPUnit](https://phpunit.de)
-3. [Guzzle](https://github.com/guzzle/guzzle)
-
-### 好文
-1. [PHP之道](http://wulijun.github.io/php-the-right-way/)
-2. [Cookie/Session机制详解](http://blog.csdn.net/fangaoxin/article/details/6952954)
-
-### 优秀的类库
-1. [PHP中文分词: 自动打标签功能](http://jingwentian.com/t-145)
-
-### 判断是否为空
-```
-+--------------+-----------+---------+-----------+---------+--------+
-| 真值表 | gettype() | empty() | is_null() | isset() | (bool) |
-+--------------+-----------+---------+-----------+---------+--------+
-| $x = "" | string | true | false | true | false |
-| $x=null | NULL | true | true | false | false |
-| var $x | NULL | true | true | false | false |
-| $x = array() | array | true | false | true | false |
-| $x = false | boolean | true | false | true | false |
-| $x = 15 | integer | false | false | true | true |
-| $x = 1 | integer | false | false | true | true |
-| $x = 0 | integer | true | false | true | false |
-| $x = -1 | integer | false | false | true | true |
-| $x = '15' | string | false | false | true | true |
-| $x = '1' | string | false | false | true | true |
-| $x = '0' | string | true | false | true | false |
-| $x = '-1' | string | false | false | true | true |
-| $x = 'foo' | string | false | false | true | true |
-| $x = 'true' | string | false | false | true | true |
-| $x = 'false' | string | false | false | true | true |
-+--------------+-----------+---------+-----------+---------+--------+
-```
-
-## 常用命令
-
-### 修改phpunit内存限制
-
- phpunit -d memory_limit=512M
-
-
-## PHPStorm 常用快捷键
-
-- Quick Command
-
- `Command + Shift + A`
-
-- Quick File
-
- `Command + Shift + O`
-
-- Quick Class
-
- `Command + O`
-
-- Quick Symbol
-
- `Command + Option + O`
\ No newline at end of file
diff --git a/_posts/resource/2014-01-15-general-python-resources.md b/_posts/resource/2014-01-15-general-python-resources.md
deleted file mode 100644
index 63f9e5bc2c..0000000000
--- a/_posts/resource/2014-01-15-general-python-resources.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-layout: post
-title: Python 常用资源
-category: 资源
-tags: Python
-keywords: Python
-description:
----
-
-## 常用代码
-
-### 遍历对象
- for key in a.__dict__:
- print key,':',a.__dict__[key]
-
-### 调试方法
- assert False //引发异常,观察错误界面
- import logging
- logging.info('') //写日志
-
-### 获得当前时间
- #时间戳
- time.time()
- #日期时间
- time.ctime()
- #iso时间
- datetime.fromtimestamp(time.time()).isoformat()
- #固定格式
- time.strftime('%Y-%m-%d',time.localtime(time.time()))
-### 日期到时间戳
- dateC=datetime.datetime(2010,6,6,8,14,59)
- timestamp=time.mktime(dateC.timetuple())
-### 时间戳到日期
- ltime=time.localtime(1237515355.0)
- timeStr=time.strftime("%Y-%m-%d %H:%M:%S", ltime)
-### 之后的包从绝对位置导入
- from __future__ import absolute_import
-
diff --git a/_posts/resource/2014-01-15-general-shell-resources.md b/_posts/resource/2014-01-15-general-shell-resources.md
deleted file mode 100644
index 45489a35e7..0000000000
--- a/_posts/resource/2014-01-15-general-shell-resources.md
+++ /dev/null
@@ -1,122 +0,0 @@
----
-layout: post
-title: Shell 常用资源
-category: 资源
-tags: Shell
-keywords: Shell
-description:
----
-
-
-## 常用指令
-
-### 文本内容搜索
-
- grep aaa *
-
-### 文件夹操作
-
- 查看文件夹大小 du -h --max-depth=1 /home/ys
- 查看驱动器空间 df -h
-
-### 压缩命令
-
- tar zxvf aaa.tar.gz
- tar zcvf aaa.tar.gz aaa
-
-### 登陆到其他用户
-
- login
-
-### 查看端口的占用
-
- lsof -i:8087 查看8087端口的使用
-
-### 批量杀死进程
-
- ps -aux|grep name|grep -v grep|cut -c 9-15|xargs kill -9
-
-### 查看当前时间
-
- date 时间
- date +%s 时间戳
- date -d "2010-07-20 10:25:30" +%s 指定时间时间戳
- date -d "@1279592730" 时间戳转时间
- date -d "1970-01-01 14781 days" "+%Y/%m/%d %H:%M:%S"
-
-### 查看进程内存使用情况
-
- top -d 1 -p pid [,pid ...]
- pmap pid
- ps aux|grep process_name
- 查看/proc/process_id/文件夹下的status文件
-
-### 查看Linux内核版本或发布版本
-
- lsb_release -a
- uname -a
-
-### 一句话实现一个HTTP服务,把当前文件夹作为根目录
-
- python -m SimpleHTTPServer
-
-### 查看本地网络服务活动状态
-
- lsof -i
-
-### 查看自己的外网ip
-
- curl ifconfig.me
-
-### 下载整个网站
-
- wget --random-wait -r -p -e robots=off -U mozilla http://www.example.com
-
-### 后台运行一段不中止的程序,并可随时查看它的状态
-
- screen -d -m -S some_ name ping my_router
-
-### 查看进程执行的时间
-
- ps -A -opid,stime,etime,args | grep python
-
-### 创建守护进程
-
- nohup python /var/www/a.py &
-
-### 查看当前文件夹下文件(文件夹)大小
-
- du -h --max-depth=1 .
-
-### 查看所有磁盘大小
-
- df -h
-
-### 诊断网络
-
- mtr
- ping
- traceroute
- dig
-
-### 列出本机监听的端口号
-
- netstat –tlnp
- netstat -anop
-
-### 在远程机器上运行一段脚本
-
- ssh user@server bash < /path/to/local/script.sh
-
-### 端口扫描
-
- nc -z -v -n 127.0.0.1 20-100
-
-### 负载测试,30秒内向Google发起20个并发连接
-
- siege -c20 www.google.co.uk -b -t30s
-
-### 封禁一个ip的访问
-
- iptables -I INPUT -s 211.1.0.0 -j DROP
-
diff --git a/_posts/resource/2014-01-15-general-svn-resources.md b/_posts/resource/2014-01-15-general-svn-resources.md
deleted file mode 100644
index b176b6f4b3..0000000000
--- a/_posts/resource/2014-01-15-general-svn-resources.md
+++ /dev/null
@@ -1,136 +0,0 @@
----
-layout: post
-title: SVN 常用资源
-category: 资源
-tags: SVN
-keywords: SVN
-description:
----
-
-## 常用指令
-
-### 将文件checkout到本地目录
-
- svn checkout path(path是服务器上的目录)
- svn checkout svn://192.168.1.1/pro/domain
- svn co
-
-### 往版本库中添加新的文件
-
- svn add file
- svn add test.php(添加test.php)
- svn add *.php(添加当前目录下所有的php文件)
- svn add *.php --force(增加所有文件)
-
-### 将改动的文件提交到版本库
-
- svn commit -m “LogMessage“ [-N] [--no-unlock] PATH(如果选择了保持锁,就使用–no-unlock开关)
- svn commit -m “add test file for my test“ test.php
- svn ci
-
-### 加锁/解锁
-
- svn lock -m “LockMessage“ [--force] PATH
- svn lock -m “lock test file“ test.php
- svn unlock PATH
-
-### 更新到某个版本
-
- svn update -r m path
- svn update 如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。
- svn update -r 200 test.php(将版本库中的文件test.php还原到版本200)
-
- svn update test.php(更新,于版本库同步。如果在提交的时候提示过期的话,是因为冲突,需要先update,修改文件,然后清除svn resolved,最后再提交commit)
-
- svn up
-
-### 查看文件或者目录状态
-
- svn status path(目录下的文件和子目录的状态,正常状态不显示)
- 【?:不在svn的控制中;M:内容被修改;C:发生冲突;A:预定加入到版本库;K:被锁定】
-
- svn status -v path(显示文件和子目录状态)
- 第一列保持相同,第二列显示工作版本号,第三和第四列显示最后一次修改的版本号和修改人。
-
- 注:svn status、svn diff和 svn revert这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。
-
- svn st
-
-### 删除文件
-
- svn delete path -m “delete test fle“
- svn delete svn://192.168.1.1/pro/domain/test.php -m “delete test file”
- 或者直接svn delete test.php 然后再svn ci -m ‘delete test file‘,推荐使用这种
- svn (del, remove, rm)
-
-### 查看日志
-
- svn log path
- svn log test.php 显示这个文件的所有修改记录,及其版本号的变化
-
-### 查看文件详细信息
-
- svn info path
- svn info test.php
-
-### 比较差异
-
- svn diff path(将修改的文件与基础版本比较)
- svn diff test.php
- svn diff -r m:n path(对版本m和版本n比较差异)
- svn diff -r 200:201 test.php
- svn di
-
-### 将两个版本之间的差异合并到当前文件
-
- svn merge -r m:n path
- svn merge -r 200:205 test.php(将版本200与205之间的差异合并到当前文件,但是一般都会产生冲突,需要处理一下)
-
-### SVN 帮助
-
- svn help
- svn help ci
-
-### 版本库下的文件和目录列表
-
- svn list path
- svn ls
-
-### 创建纳入版本控制下的新目录
-
- svn mkdir: 创建纳入版本控制下的新目录。
- mkdir PATH…
- mkdir URL…
-
- 创建版本控制的目录。
-
- 1、每一个以工作副本 PATH 指定的目录,都会创建在本地端,并且加入新增调度,以待下一次的提交。
- 2、每个以URL指定的目录,都会透过立即提交于仓库中创建.在这两个情况下,所有的中间目录都必须事先存在。
-
-### 恢复本地修改
-
- svn revert: 恢复原始未改变的工作副本文件 (恢复大部份的本地修改)。revert:
- 用法: revert PATH…
- 注意: 本子命令不会存取网络,并且会解除冲突的状况。但是它不会恢复被删除的目录
-
-### 代码库URL变更
-
- svn switch (sw): 更新工作副本至不同的URL。
-
- 1、switch URL [PATH]
- 2、switch –relocate FROM TO [PATH...]
- 1、更新你的工作副本,映射到一个新的URL,其行为跟“svn update”很像,也会将服务器上文件与本地文件合并。这是将工作副本对应到同一仓库中某个分支或者标记的方法。
-
- 2、改写工作副本的URL元数据,以反映单纯的URL上的改变。当仓库的根URL变动(比如方案名或是主机名称变动),但是工作副本仍旧对映到同一仓库的同一目录时使用这个命令更新工作副本与仓库的对应关系。
-
-### 解决冲突
-
- svn resolved: 移除工作副本的目录或文件的“冲突”状态。 java设计模式之——策略模式
- 用法: resolved PATH…
- 注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的相关文件,然后让 PATH 可以再次提交。
-
-### 输出指定文件或URL的内容。
-
- svn cat 目标[@版本]…如果指定了版本,将从指定的版本开始查找。
- svn cat -r PREV filename > filename (PREV 是上一版本,也可以写具体版本号,这样输出结果是可以提交的)
-
diff --git a/_posts/resource/2014-05-11-general-mysql-resources.md b/_posts/resource/2014-05-11-general-mysql-resources.md
deleted file mode 100644
index 5596889c12..0000000000
--- a/_posts/resource/2014-05-11-general-mysql-resources.md
+++ /dev/null
@@ -1,46 +0,0 @@
----
-layout: post
-title: MySQL常用资源
-category: 资源
-tags: MySQL
-keywords: MySQL
-description:
----
-
-## 常用命令
-
-### 登录数据库
-
- mysql -h localhost -uroot -p
-
-### 导出数据库
-
- mysqldump -uroot -p db > db.sql
-
-### 导入数据库
-
- mysql -uroot -p db < db.sql
- // or
- mysql -uroot -p db -e "source /path/to/db.sql"
-
-### 开启远程登录
-
- grant all privileges on ss.* to 'root'@'%' indentified by 'passoword' with grant option;
- // or
- update user set Host="%" and User="root"
- // 注意%是不包含localhost的
- flush privileges;
-
-### 创建用户
-
- CREATE USER 'test'@'localhost' IDENTIFIED BY 'password';
- grant all privileges on *.* to test@'localhost' identified by 'test';
-
-### 创建表
-
- CREATE SCHEMA testdb DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
-
-### 赋予数据库权限
-
- GRANT ALL ON testdb.* TO 'test'@'localhost';
-
diff --git a/_posts/resource/2014-08-03-general-mac-resources.md b/_posts/resource/2014-08-03-general-mac-resources.md
deleted file mode 100644
index e171ed0af7..0000000000
--- a/_posts/resource/2014-08-03-general-mac-resources.md
+++ /dev/null
@@ -1,96 +0,0 @@
----
-layout: post
-title: Mac 常用资源
-category: 资源
-tags: Mac
-keywords: Mac
-description:
----
-
-## 常用软件
-
-### Alfred
-
-#### Alfred常用Workflow
-
-- [Dash](http://kapeli.com/dash)
-- [Dict - Lookup Word](https://github.com/liberize/alfred-dict-workflow)
-- [Reminders](http://www.alfredforum.com/topic/917-reminders/)
-- [Evernote](http://support.alfredapp.com/evernote)
-- [Notes](http://www.alfredforum.com/topic/1009-notes/)
-
-## 常用命令
-
-### 开启关闭dashboard
-
-关闭
-
- defaults write com.apple.dashboard mcx-disabled -boolean YES
- killall Dock
-
-开启
-
- defaults write com.apple.dashboard mcx-disabled -boolean NO
- killall Dock
-
-### 剪贴板操作
-写入剪切板
-
- echo 'test' > pbcopy
- cat testfile > pbcopy
-
-读取剪贴板
-
- pbpaste > testfile
- pbpaste | cat
-
-### 开启关闭Hidpi
-开启
-
- sudo defaults write /Library/Preferences/com.apple.windowserver DisplayResolutionEnabled -bool YES
-
-关闭
-
- sudo defaults delete /Library/Preferences/com.apple.windowserver DisplayResolutionDisabled
-### Finder 标题栏显示完整路径
-
-```
-defaults write com.apple.finder _FXShowPosixPathInTitle -bool YES
-```
-
-### 修改Dock隐藏和出现时间
-
-```bash
-defaults write com.apple.dock autohide-delay -int 0
-defaults write com.apple.dock autohide-time-modifier -float 0.4
-killall Dock
-```
-
-
-### 设置iterm中option为alt(meta)键
-
-
-
-### 删除dropbox冲突文件
-
- find . -type f -name "* conflicted *" -exec rm -f {} \;
-
-### 清空Launchpad(删除掉)
-
- sqlite3 ~/Library/Application\ Support/Dock/*.db 'DELETE FROM apps;' && killall Dock
-
-### 重置Launchpad
-
- rm -f ~/Library/Application\ Support/Dock/*.db && killall Dock
-
-### 修改Finder中文件夹显示语言
-
- # 以Desktop为例
- touch ~/Desktop/.localized
- chmod 600 ~/Desktop/.localized
-
-## 常用快捷键
-
-### Chrome
-
-- 切换用户 `Command + shift + M`
diff --git a/_posts/resource/2015-02-13-general-seo-resources.md b/_posts/resource/2015-02-13-general-seo-resources.md
deleted file mode 100644
index d6dee04861..0000000000
--- a/_posts/resource/2015-02-13-general-seo-resources.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-layout: post
-title: SEO 常用资源
-category: 资源
-tags: SEO
-keywords: SEO
----
-
-## 小技巧
-
-### URL中用`-`分割单词,用`_`关联单词
-
-Google 会把 `a-good_reource-of-seo.html` 拆分成关键字:`a`, `good_resource`, `of` 和 `seo`。
\ No newline at end of file
diff --git a/_posts/resource/2015-10-04-general-vim-resources.md b/_posts/resource/2015-10-04-general-vim-resources.md
deleted file mode 100644
index 0ccbe73923..0000000000
--- a/_posts/resource/2015-10-04-general-vim-resources.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-layout: post
-title: Vim 常用资源
-category: 资源
-tags: Vim
-keywords: Vim
----
-
-## 在粘贴代码时不启动自动缩进
-
-粘贴之前输入 `:set paste`
-粘贴完后恢复 `:set nopaste`
-
-## 关闭和开启行号
-
-关闭 `:set nonu`
-开启 `:set number`
-
diff --git a/_posts/tech/2012-09-27-open-widown-in-javascript.md b/_posts/tech/2012-09-27-open-widown-in-javascript.md
deleted file mode 100644
index e448efe48e..0000000000
--- a/_posts/tech/2012-09-27-open-widown-in-javascript.md
+++ /dev/null
@@ -1,49 +0,0 @@
----
-layout: post
-title: JS中防止浏览器屏蔽window.open
-category: 技术
-tags: JavaScript
-description: JS中防止浏览器屏蔽window.open
----
-
-有的时候我们需要一些弹出窗来作为临时信息显示,在js代码中直接使用
-
- window.open(url,“_blank”,option);
-
-
-即可实现跳转,而且还可以传递一些参数。
-
-但是有个问题是,很多浏览器不支持代码触发上述代码,这个问题在平常使用中显得很不方便,尤其是我们经常用ajax返回值来触发一个新页面。
-
-为了防止被屏蔽,可以有两种方式解决。
-1、在用户点击事件中增加监听程序
-
-
-
-
-2、在点击后先打开空白页,之后再修改地址
-
-
-
\ No newline at end of file
diff --git a/_posts/tech/2012-09-27-php-variable-variables.md b/_posts/tech/2012-09-27-php-variable-variables.md
deleted file mode 100644
index 73b54dc3d8..0000000000
--- a/_posts/tech/2012-09-27-php-variable-variables.md
+++ /dev/null
@@ -1,48 +0,0 @@
----
-layout: post
-title: PHP可变变量
-category: 技术
-tags: PHP
-description: PHP可变变量
----
-
-### 什么叫可变变量
-
-不知道大家在使用php的时候是否遇到这样一种情况,即想将一个变量的内容作为另一个变量的名称。在php中,这个需求可以通过可变变量(Variable variables)来实现。
-
-可变变量的一般形式为:
-
- $var=“foo”;
- $$var=1;
-
-
-在这里, 其实等同于向将var展开,然后再以它的值作为真正的变量名
-
- $foo=1;
-
-### 可变变量妙用
-#### 类的动态实例化
-
- $var=“foo”;
- $a=new $foo;
-
-#### 循环定义变量
-
- for($i=0;$i<10;$i++){
- ${aa.$i}=“a”;
- }
-
-#### 动态调用方法
-
- class test_class{
- var $func=‘display_UK’;
- function display_UK(){
- echo “Hello”;
- }
- function display_FR(){
- echo “Bonjour”;
- }
- function display(){
- $this->{$this->func}();
- }
- }
\ No newline at end of file
diff --git a/_posts/tech/2012-11-08-openstack-nova-internal.md b/_posts/tech/2012-11-08-openstack-nova-internal.md
deleted file mode 100644
index 83a32ed1e0..0000000000
--- a/_posts/tech/2012-11-08-openstack-nova-internal.md
+++ /dev/null
@@ -1,109 +0,0 @@
----
-layout: post
-title: OpenStack Nova内部机制【译】
-category: 技术
-tags: OpenStack
-description: 本文经原作者同意后进行转载和翻译
----
-
-> 本文经原作者同意后进行转载和翻译,[原文链接](http://www.sandywalsh.com/2012/04/openstack-nova-internals-pt1-overview.html)
-
-本人正在学习Openstack源码,为了自己学习和他人学习方便,故可能将一些国外优秀博客翻译转载。本人看英语文章基本顺利,但是翻译却不太在行,也希望通过这个方式提升一下英语水平,如果您发现我翻译后的文章问题太严重,尽管指出,谢谢!另外也希望志同道合的朋友一起探讨有关Openstack的问题!
-
-作为 核心开发者 ,我已经为 Openstack 的 Nova 项目工作了18个月多。开始的时候这个项目很小,所以你可以很容易的从代码库找到你想要的东西。你的代码不必完全遵守 PEP8 即可提交。但是,对于任何一个项目来说,随着项目的深入,更多琐碎的问题将接踵而来。严格控制异常处理、并发、状态管理、同步异步操作及数据分区变得至关重要。作为核心开发者也越来越难以记住所有的规则,更不用说是一个新的贡献者,所以新的贡献者很难完成第一次提交。
-
-出于这个原因,我想我会在我博客中写一些深入介绍Openstack项目的文章,帮助一些人少走弯路。在这开始,我需要先介绍一下Openstack源码布局和基础架构。
-
-我将假设你懂得 Cloud IaaS (镜像管理、虚拟机管理器、实例管理、网络管理等概念), Python (如果你是经验丰富的程序员,语言不是问题)还有基于事件驱动的框架(又叫做 Reactor pattern )。
-
-### 源码布局
-
-在你一拿到Nova的源码后,你会很容易的了解它的主要布局。
-
-git clone https://github.com/openstack/nova.git
-真正的Nova服务的代码在 ./nova 下,相应的单元测试在 ./nova/tests 下。这是一个简化的Nova源码目录结构:
-
- ├── etc
- │ └── nova
- ├── nova
- │ ├── api - the Nova HTTP service
- │ │ ├── ec2 - the Amazon EC2 API bindings
- │ │ ├── metadata
- │ │ └── openstack - the OpenStack API
- │ ├── auth - authentication libraries
- │ ├── common - shared Nova components
- │ ├── compute - the Nova Compute service
- │ ├── console - instance console library
- │ ├── db - database abstraction
- │ │ └── sqlalchemy
- │ │ └── migrate_repo
- │ │ └── versions - Schema migrations for SqlAlchemy
- │ ├── network - the Nova Network service
- │ ├── notifier - event notification library
- │ ├── openstack - ongoing effort to reuse Nova parts with other OpenStack parts.
- │ │ └── common
- │ ├── rpc - Remote Procedure Call libraries for Nova Services
- │ ├── scheduler - Nova Scheduler service
- │ ├── testing
- │ │ └── fake - “Fakes” for testing
- │ ├── tests - Unit tests. Sub directories should mirror ./nova
- │ ├── virt - Hypervisor abstractions
- │ ├── vnc - VNC libraries for accessing Windows instances
- │ └── volume - the Volume service
- ├── plugins - hypervisor host plugins. Mostly for XenServer.
-
-深入看代码前,我们需要仔细了解Nova的架构。Openstack是多个服务的集合,一个服务意味着运行着的一个进程。根据部署Openstack的规模,决定了你是选择将所有服务运行在同一个机器上还是多个机器上。
-
-Openstack的核心服务为: API、Compute、Scheduler和Network。你也可能需要管理主机镜像(可存储在 Swift Storage Service )的 Glance Image Service 。我们会在之后深入了解每一个服务,但是现在需要了解他们各自的任务是什么。 API是进入Nova的HTTP接口。Compute和虚拟机管理器交互来运行虚拟机(经常是一个主机一个Compute服务)。Network通过和交换机、路由器、防火墙以及相关设备来管理Ip地址池。Scheduler从可用池中选择最合适的计算节点来创建新的实例(它也可能用来选择Volumes)。
-
-数据库本身不是Nova的服务之一。每一个Nova服务都可以直接访问数据库(尽管它不应该这样访问,我们正在修正这个问题)。如果一个计算节点被攻击,我们要避免它来访问数据库。
-
-你可能单独的运行一个 Authentication 服务(像Kenstone) 或者负责管理硬盘的 Volume 服务,这都不是必须的。
-
-Openstack Nova 使用 AMQP (特别是 RabbitMQ ) 作为服务之间的交流总线。AMQP 信息写入到专门的队列中,然后由专门的服务从中去走进行处理。这个决定了Nova的性能。如果你发现一个单一的计算节点不能处理所有的请求,你可以增加另外一个计算节点,其他服务也可以这么做。
-
-如果AMQP是服务之间唯一的交互方式,那么用户如何执行指令?答案是API服务,它是一个HTTP服务(一个Python中的 WSGI 应用)。API服务监听HTTP上的 REST 命令并且将他们转换成相应服务的AMQP消息。同样的,来自服务的相应也通过 AMQP和API服务转换成HTTP相应返回给请求者。 OpenStack当前可以使用 EC2 (亚马逊API) 和 OpenStack (是 Rackspace API 的变种)。我们将在后面的文章中详细介绍API服务。
-
-但是不仅仅是API可以和服务交互。服务之间也可以交互。Compute可能需要和Network和Volume交互来获得必须的资源。如果我们不关心怎么组织源码,这些功能会是代码有一点点凌乱。现在,我们开始深入了解服务和RPC机制。
-
-### 注释
-
-我将使用Python的单元测试模块,方法以及函数。特别的,nova.compute.api:API.run_instance 等同与 ./nova/compute/api.py文件中的run_instance方法。同样的,nova.compute.api.do_something指的是./nova/compute/api.py文件中的do_something函数。
-
-和一个服务交互
-
-除了API服务,每一个Nova服务必须有一个相应的Python模块来处理RPC命令的封装处理。例如:
-
-Network服务 ./nova/network/api.py
-Compute服务 ./nova/compute/api.py
-Scheduler服务 ./nova/scheduler/api.py
-…
-这些模块通过集合大量函数来使服务正常工作。但是有的时候他们包含一些类来工作。这都依赖与我们是否需要截断一些服务对函数的调用。我们会在接下来接触这些用例。
-
-Scheduler服务nova.scheduler.api可能有着最多的简单接口,包含最难的函数。
-
-Network是一个有着唯一API类的服务,尽管它可以通过简单的函数被实现。
-
-Compute有一个有趣的类层封装,如:
-
-BaseAPI->API->AggregateAPI
-BaseAPI->HostAPI
-nova.compute.api.API 是类中的主力,我们将在以后做别的派生。
-
-如果我想要暂停一个运行中的实例,我需要导入nova.compute.api,实例化API类并且调用pause()方法。这个过程将封装参数并且将它传送给Compute服务,由Compute通过相应的AMQP队列来管理那个实例。寻找相应的compute服务的AMQP是通过一个数据库的快速扫描实现的,这个方法在nova.compute.api:BaseAPI._cast_or_call_compute_message。对与其他服务也是这样,通过调用相应的api模块然后调用函数。
-
-### Cast和Call
-
-AMQP不是完全的 RPC 机制,但是我们可以从它那里获得类RPC特性。在nova.rpc._init_中有两个调用来操作cast()和call()。cast()在一个服务上执行异步的调用,而call()是一个同步的操作所以它需要一个返回值。call()真正做的是从服务动态创建一个短暂的AMQP来返回消息。它会一直等待一个 eventlet greenthread 直到接收到响应。
-
-如果异常是源于nova.exception:NovaException的,那么它也可以通过这个响应传递以及在调用者方重生成/重抛出。否则,一个nova.rpc.common:RemoteError会被抛出。
-
-理论上,我们将仅仅执行异步cast()来和服务通信,而call()很明耗费更大的代价。认真选择你需要的,如果可能,尽量不要依赖返回值。同时,尽量使你的函数是幂等的,因为它们可能会在未来一直执行。
-
-如果你对rpc-over-amqp的工作原理感兴趣,多看看nova.rpc.impl_kombu
-
-### Fail-Fast 系统架构
-
-Openstack使用的是“快速失败”的系统架构。如果一个请求不成功,则马上返回一个一场丢给其调用者。但是,当一个Nova服务是eventlet中的一个操作时,它一般不会以我们希望的状态终止任何进程或离开系统。一个新的请求可以通过AMQP或HTTP非常容易的被处理。除非我们正在做的一件事情需要显示的进行清理。如果你期望字典中一个确定的值,一个关键错误弹出是正确的。对于不同的错误情况,你不需要常常派生一个独立的异常,甚至在最坏的情况下,WSGI中间件将把它转化成客户端可以处理的。对于事件驱动的编程这是很不错的方式,我们会在后续的文章中讲解nova的错误处理。
-
-好了,这是一些Nova源码的布局和服务间如何通讯。下一此我们将探究服务管理器和驱动,来了解服务如何在被调用方实现。
\ No newline at end of file
diff --git a/_posts/tech/2012-12-31-python-development-of-sae.md b/_posts/tech/2012-12-31-python-development-of-sae.md
deleted file mode 100644
index 6ee43eac20..0000000000
--- a/_posts/tech/2012-12-31-python-development-of-sae.md
+++ /dev/null
@@ -1,253 +0,0 @@
----
-layout: post
-title: sae下的python开发部署和一个简单例子
-category: 技术
-tags: Python
-description: sae下的python开发部署和一个简单例子
----
-
->以前开发php时,一直在使用[sae](http://sae.sina.com.cn "sae")的平台和服务,非常的喜欢。现在在整openstack,所以改用python做一些东西,为了不来回切换两个语言,我决定学习学习django,方便做一些自己的东西。关于sae下python的使用,[sae官方文档](http://appstack.sinaapp.com/static/doc/release/testing/index.html "sae官方文档")写的非常全面,我这里只是记录自己的一个学习过程
-
-## 搭建本地开发环境
-
-安装django
-
- easy_install django
-
-下载安装本地开发环境
-
- git clone https://github.com/SAEPython/saepythondevguide.git
- cd dev_server
- python setup.py install
-
-## 创建python项目
-
-到sae.sina.com.cn下创建一个python项目
-
-进入管理面板创建版本,版本号为1
-
-使用svn下载代码
-
- svn co https://svn.sinaapp.com/xxxxx/
-
-进入主目录,发现一个1的文件夹,这个就是对应的django的工程目录
-
- django-admin.py start project mysite
- mv mysite/* 1
-
-在1下创建配置文件config.yaml,并写入如下内容
-
- libraries:
- - name: "django"
- version: "1.4"
-
-在1下创建index.wsgi,内容如下
-
- import sae
- from mysite import wsgi
- application = sae.create_wsgi_app(wsgi.application)
-
-项目创建完毕,在1中执行dev_server.py来启动sae项目,默认localhost:8080访问
-
-我在这里遇到一个问题,我是用Windows虚拟的Linux,所以我在Windows下无法通过ip:8080访问到linux。看了d>ev_server.py的代码发现这里host是写死为localhost的,所以我将代码小改动了一下
-
- #/usr/local/lib/python2.7/dist-packages/sae_python_dev.../EGG-INFO/scripts/dev_server.py
- run_simple(option.host, options.port...)
- if __name__ == '__main__':
- parser = Option.Parser()
- parser.add_option("--host",dest="host",default="localhost")
-
-这样就能通过增加--host,将外部访问的ip设定好了
-
-
-## 实现一个简单的投票应用
-
-在1目录下,创建应用
-
- python manage.py startapp polls
-
-
-修改配置文件settings
-
- import os
-
- if 'SERVER_SOFTWARE' in os.environ:
- from sae.const import(
- MYSQL_HOST,
- MYSQL_PORT,
- MYSQL_USER,
- MYSQL_PASS,
- MYSQL_DB
- )
- else:
- MYSQL_HOST = "localhost"
- MYSQL_PORT = "3306"
- MYSQL_USER = "root"
- MYSQL_PASS = "xxxxx"
- MYSQL_DB = "app_polls"
-
- DATABASES = {
- 'default': {
- 'ENGINE': 'django.db.backends.mysql',
- 'NAME': MYSQL_DB,
- 'USER': MYSQL_USER,
- 'PASSWORD': MYSQL_PASS,
- 'HOST': MYSQL_HOST,
- 'PORT': MYSQL_PORT,
- }
- }
- ...
- TEMPLATE_DIRS = (
- # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
- # Always use forward slashes, even on Windows.
- # Don't forget to use absolute paths, not relative paths.
- os.path.join(os.path.dirname(__file__), 'templates'),
- )
-
- INSTALLED_APPS = (
- 'django.contrib.auth',
- 'django.contrib.contenttypes',
- 'django.contrib.sessions',
- 'django.contrib.sites',
- 'django.contrib.messages',
- 'django.contrib.staticfiles',
- # Uncomment the next line to enable the admin:
- 'django.contrib.admin',
- # Uncomment the next line to enable admin documentation:
- # 'django.contrib.admindocs',
- 'polls'
- )
-
-这里的配置项主要是将SAE和本地开发环境区分开,在SAE环境下使用它们提供的变量就可以直接连接数据库了,不过记得要在SAE控制面板进行初始化
-
-配置主urls,即mysite下的urls
-
- from django.conf.urls import patterns, include, url
-
- from django.contrib import admin
- admin.autodiscover()
-
- urlpatterns = patterns('',
- url(r'^admin/', include(admin.site.urls)),
- url(r'^polls/', include('polls.urls')),
- )
-
-在polls文件夹下修改urls
-
- from django.conf.urls import patterns, url
-
- urlpatterns = patterns('polls.views',
- url(r'^$', 'index'),
- url(r'^(?P\d+)/$', 'detail'),
- url(r'^(?P\d+)/results/$', 'results'),
- url(r'^(?P\d+)/vote/$', 'vote'),
- )
-
-在polls文件夹下创建model.py
-
- from django.db import models
-
-
- class Poll(models.Model):
- question = models.CharField(max_length=200)
- pub_date = models.DateTimeField('date published')
-
-
- class Choice(models.Model):
- poll = models.ForeignKey(Poll)
- choice = models.CharField(max_length=200)
- votes = models.IntegerField()
-
-然后在mysql中创建一个add_polls数据库,使用
-
- python manage.py syncdb
-
-同步数据库,这个仅限本地,如果要在sae使用的话,需要本地生成后导入到sae上。
-
-在polls文件夹下创建view视图文件
-
- from django.shortcuts import render_to_response, get_object_or_404
- from django.template import RequestContext
- from django.http import HttpResponseRedirect
- from django.core.urlresolvers import reverse
- from polls.models import Poll, Choice
-
-
- #主页显示最新的5条投票列表
- def index(request):
- latest_poll_list = Poll.objects.all().order_by('-pub_date')[:5]
- return render_to_response('index.html', {'latest_poll_list': latest_poll_list})
-
-
- #获得某条信息详细情况
- def detail(request, poll_id):
- p = get_object_or_404(Poll, pk=poll_id)
- return render_to_response('detail.html', {'poll': p},
- context_instance=RequestContext(request))
-
-
- #投票
- def vote(request, poll_id):
- p = get_object_or_404(Poll, pk=poll_id)
- try:
- selected_choice = p.choice_set.get(pk=request.POST['choice'])
- except (KeyError, Choice.DoesNotExist):
- return render_to_response('detail.html', {
- 'poll': p,
- 'error_message': "You didn't select a choice.",
- }, context_instance=RequestContext(request))
- else:
- selected_choice.votes += 1
- selected_choice.save()
- return HttpResponseRedirect(reverse('polls.views.results', args=(p.id,)))
-
-
- #显示投票结果
- def results(request, poll_id):
- p = get_object_or_404(Poll, pk=poll_id)
- return render_to_response('results.html', {'poll': p})
-
-
-在polls下创建templates文件夹,并创建以下三个文件
-
-detail.html
-
- {% raw %}
- {{ poll.question }}
- {% if error_message %}{{ error_message }}
{% endif %}
-
- {% endraw %}
-
-index.html
-
- {% raw %}
- {% if latest_poll_list %}
-
- {% else %}
- No polls are available.
- {% endif %}
- {% endraw %}
-
-results.html
-
- {% raw %}
- {{ poll.question }}
-
- {% for choice in poll.choice_set.all %}
- - {{ choice.choice }} -- {{ choice.votes }} vote{{ choice.votes|pluralize }}
- {% endfor %}
-
- Vote again?
- {% endraw %}
-
diff --git a/_posts/tech/2013-01-30-command-of-kanyun.md b/_posts/tech/2013-01-30-command-of-kanyun.md
deleted file mode 100644
index 910c635004..0000000000
--- a/_posts/tech/2013-01-30-command-of-kanyun.md
+++ /dev/null
@@ -1,41 +0,0 @@
----
-layout: post
-title: kanyun的api-client命令
-category: 技术
-tags: OpenStack
-description: kanyun的api-client命令
----
-
- uuid:虚拟机的唯一标识,如08e89e41-d2c2-4c5d-ba2a-c0d180942270
- column_family(metric): 'cpu','vmnetwork','mem_max','mem_free','nic_incoming','nic_outgoing','blk_read','blk_write'
- super_column_family:当column_family为vmnetwork,cpu,mem*时为total,其他情况为'vnet0','vda'等
- timestamp: 时间戳,如1357628942
- option:额外选项,用来处理数据,'sum','max','min','avg','sam'
- period:时间间隔
-
-### 获得某一虚拟机一段时间内某一度量标准记录值
-
- api-client -get
- api-client -get 08e89e41-d2c2-4c5d-ba2a-c0d180942270 cpu total 1357628942 1357629699
-
-### 获得某一虚拟机一段时间内某一度量标准分析值
-
- api-client -get
- )
- }
-});
-```
-
-### open-browser-webpack-plugin
-
-```
-yarn add open-browser-webpack-plugin
-```
-
-这个插件的作用是编译完成以后,打开浏览器
-
-
-## 设置 Babel
-
-```
-yarn add babel-loader babel-core babel-preset-es2015 babel-preset-react --dev
-```
-
-preset 是 babel 的插件,用来让 babel 帮忙转译。然后再创建一个 babel 配置文件
-
-```
-touch .babelrc
-```
-
-写入内容
-
-```json
-{
- "presets":[
- "es2015", "react"
- ]
-}
-```
-
-## 4. 设置 React 环境
-
-安装 React
-
-```
-yarn add react react-dom
-```
-
-当前目录是这个样子
-
-```
-.
-├── .babelrc
-├── node_modules
-├── package.json
-├── webpack.config.js
-└── yarn.lock
-```
-
-接下来我们加入 React 需要的文件
-
-```
-.
-├── client
-│ ├── components
-│ │ └── App.js
-│ ├── index.html
-│ └── index.js
-├── package.json
-├── webpack.config.js
-└── yarn.lock
-```
-
-在 index.html 中写入
-
-```html
-
-
-
-
- React App Setup
-
-
-
-
-
-
-```
-
-在 index.js 中写入
-
-```javascript
-import React from 'react';
-import ReactDOM from 'react-dom';
-import App from './components/App.js';
-import { Router, Route, hashHistory } from 'react-router';
-
-ReactDOM.render(
- (
-
-
- ),
- document.getElementById('root')
-);
-
-```
-
-
-在 App.js 中写入
-
-```javascript
-import React from 'react';
-
-export default class App extends React.Component {
- render() {
- return (
-
-
Hello World
- );
- }
-}
-```
-
-## 5. 设置 React-Router
-
-想要完成页面跳转以及一些复杂的多页面操作,可以使用 React-Router 来支持
-
-```
-yarn add react-router
-```
-
-使用例子可以看上面index.js内容
-
-## 6. 启动 React
-
-修改package.json,加入scripts
-
-```json
-"scripts": {
- "start": "webpack-dev-server",
- "build": "webpack --progress --colors"
-
- },
-```
-
-build 方法会把网站打包一下,然后放到之前定义好的目录里面。start 可以直接开启开发模式,并且开启预览
-
-```
-yarn start
-```
-
-## 7. start kit
-
-这些配置不需要每次都跑一次,我自己的放在 [Github](https://github.com/suyan/react-start-kit) 上。下载下来运行
-
-```
-yarn install
-yarn start
-```
-
-即可开启一个 Web App 的开发了
-
-## Refer
-
-[Setup a React Environment Using webpack and Babel](https://scotch.io/tutorials/setup-a-react-environment-using-webpack-and-babel)
-
-
diff --git a/_posts/tool/2013-01-09-remote-access-of-mysql.md b/_posts/tool/2013-01-09-remote-access-of-mysql.md
deleted file mode 100644
index f37b981e65..0000000000
--- a/_posts/tool/2013-01-09-remote-access-of-mysql.md
+++ /dev/null
@@ -1,39 +0,0 @@
----
-layout: post
-title: MySQL远程访问
-category: 工具
-tags: MySQL
-description: 做开发的时候一直要ssh到服务器,然后再命令行敲各种mysql命令实在是太蛋疼了,有navicat这么好的工具干嘛不用~但是Linux默认情况下数据库是不支持远程访问,所以可以用一下方式增加可访问权限
----
-
-## 增加可访问权限
-
- 格式:grant 权限 on 数据库名.表名 to 用户@登录主机 identified by "用户密码";
- grant select,update,insert,delete on *.* to root@192.168.1.12 identified by "root";
-
- grant all privileges on *.* to root@'%' identified by "root";
-
-这样就给账号密码都是root的用户再每一台计算机上登录的权限,其中"%"就是所有的意思
-
-如果这个不行的话直接将%改为你的ip即可
-
-## 开放3306端口
-
-mysql使用的是3306端口,为了防止防火墙将其关闭,可以使用下面方式
-
- 在linux下要开启防火墙 打开3306 端口
- 编辑这个文件vim /etc/sysconfig/iptables
- 输入
- -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
- 保存后输入service iptables restart 重启防火墙
-
-上面这个方法是别人说的,但是我没有试成功
-
- /etc/rc.d/init.d/iptables stop
-
-直接关闭防火墙……这个实在有点直接,但是绝对好使
-
-## MySQL自身设置
-在Ubuntu下执行上述步骤还是不能访问,这个时候修改/etc/mysql/my.conf文件,注释掉下面这句:
-
- bind-address = 127.0.0.1
\ No newline at end of file
diff --git a/_posts/tool/2013-01-16-create-remote-resp.md b/_posts/tool/2013-01-16-create-remote-resp.md
deleted file mode 100644
index 3369aab5b2..0000000000
--- a/_posts/tool/2013-01-16-create-remote-resp.md
+++ /dev/null
@@ -1,74 +0,0 @@
----
-layout: post
-title: git创建远程库
-category: 工具
-tags: Git
-description: git创建远程库
----
-
-# git创建远程库
-
->git中一般使用 git init 创建的库不允许同一分支多个work tree直接提交,如果这么做有可能会出现以下问题:
-
->remote: error: refusing to update checked out branch: refs/heads/master
-
->要解决这个问题可以有以下四种方式
-
-## 创建共享库(推荐)
-
- # 创建共享库(bare)
- $ mkdir /git/repo.git && cd /git/repo.git && git init --bare
-
- # 本地库
- $ mkdir ~/repo && cd ~/repo && git init
- # 创建一个文件
- $ vi foo
- # 增加新增文件到库管理
- $ git add .
- # 提交
- $ git commit
- # 增加共享库位置
- $ git remote add origin file:///git/repo.git
- # 提交更改
- $ git push origin master
-
-## 不工作在同一库下(推荐)
-
- # 创建库
- $ mkdir /git/repo && cd /git/repo && git init
- # 创建一个文件
- $ vi foo
- # 增加新增文件到库管理
- $ git add .
- # 提交
- $ git commit
- # 新建一个分支
- $ git branch test
-
- # 本地库
- $ git clone file:///git/repo && cd repo
- # 切换到分支test
- $ git checkout test
- # 修改文件
- $ echo "foo">foo
- # 提交
- $ git commit
- # 增加远程库位置
- $ git remote add origin flie:///git/repo
- # 提交更改
- $ git push origin test
-
-## 忽略冲突1
-修改远程库.git/config添加下面代码
-
- [receive]
- denyCurrentBranch = ignore
-
-这种方式不能直接显示在结果的work tree上,如果要显示,需要使用
-
- git reset --hard才能看到
-
-## 忽略冲突2
-在远程库上
-
- git config -bool core.bare true
\ No newline at end of file
diff --git a/_posts/tool/2013-02-25-quick-open-in-windows.md b/_posts/tool/2013-02-25-quick-open-in-windows.md
deleted file mode 100644
index 898a904170..0000000000
--- a/_posts/tool/2013-02-25-quick-open-in-windows.md
+++ /dev/null
@@ -1,135 +0,0 @@
----
-layout: post
-title: win7快速打开应用程序或文件
-category: 工具
-tags: Windows
-description: windows下打开文件或应用程序经常需要手点,作为键盘控肯定是不能忍受的。之前试过一些软件,设置各个程序的快捷键,但是快捷键可能会有冲突,而且记性不好实在不好用,所以选择使用Win自带的“运行”来加快打开速度
----
-
-Win7下打开“运行”的快捷键是 Win+R
-
-## 打开系统命令
-windows的“运行”功能本来就是帮助用户快速打开程序的,不过其支持的主要是系统的一些程序,大致如下(来自网络,有一部分失效或无法打开):
-
- 1、cleanmgr: 打开磁盘清理工具
- 2、compmgmt.msc: 计算机管理
- 3、conf: 启动系统配置实用程序
- 4、charmap: 启动字符映射表
- 5、calc: 启动计算器
- 6、chkdsk.exe: Chkdsk磁盘检查
- 7、cmd.exe: CMD命令提示符
- 8、certmgr.msc: 证书管理实用程序
- 9、Clipbrd: 剪贴板查看器
- 10、dvdplay: DVD播放器
- 11、diskmgmt.msc: 磁盘管理实用程序
- 12、dfrg.msc: 磁盘碎片整理程序
- 13、devmgmt.msc: 设备管理器
- 14、dxdiag: 检查DirectX信息
- 15、dcomcnfg: 打开系统组件服务
- 16、explorer: 打开资源管理器
- 17、eventvwr: 事件查看器
- 18、eudcedit: 造字程序
- 19、fsmgmt.msc: 共享文件夹管理器
- 20、gpedit.msc: 组策略
- 21、iexpress: 工具,系统自带
- 22、logoff: 注销命令
- 23、lusrmgr.msc: 本机用户和组
- 24、MdSched:来启动Windows内存诊断程序
- 25、mstsc: 远程桌面连接
- 26、Msconfig.exe: 系统配置实用程序
- 27、mplayer2: 简易widnows media player
- 28、mspaint: 画图板
- 29、magnify: 放大镜实用程序
- 30、mmc: 打开控制台
- 31、mobsync: 同步命令
- 32、notepad: 打开记事本
- 33、nslookup: 网络管理的工具向导
- 34、narrator: 屏幕“讲述人”
- 35、netstat : an(TC)命令检查接口
- 36、OptionalFeatures:打开“打开或关闭Windows功能”对话框
- 37、osk: 打开屏幕键盘
- 38、perfmon.msc: 计算机性能监测程序
- 39、regedt32: 注册表编辑器
- 40、rsop.msc: 组策略结果集
- 41、regedit.exe: 注册表
- 42、services.msc: 本地服务设置
- 43、sysedit: 系统配置编辑器
- 44、sigverif: 文件签名验证程序
- 45、shrpubw: 创建共享文件夹
- 46、secpol.msc: 本地安全策略
- 47、syskey: 系统加密
- 48、Sndvol: 音量控制程序
- 49、sfc.exe: 系统文件检查器
- 50、sfc /scannow: windows文件保护(扫描错误并复原)
- 51、taskmgr: 任务管理器
- 52、utilman: 辅助工具管理器
- 53、winver: 检查Windows版本
- 54、wmimgmt.msc: 打开windows管理体系结构(WMI)
- 55、Wscript.exe: windows脚本宿主设置
- 56、write: 写字板
- 57、wiaacmgr: 扫描仪和照相机向导
- 58、psr:问题步骤记录器
- 59、PowerShell:提供强大远程处理能力
- 60、colorcpl:颜色管理,配置显示器和打印机等中的色彩。
- 61、credwiz:备份或还原储存的用户名和密码
- 62、eventvwr:事件查看器管理单元(MMC) ,主要用于查看系统日志等信息。
- 63、wuapp:Windows更新管理器,建议设置为更新提醒模式
- 64、wf.msc:高级安全Windows防火墙
- 65、soundrecorder:录音机,没有录音时间的限制
- 66、snippingtool:截图工具,支持无规则截图
- 67、slui:Windows激活,查看系统激活信息
- 68、sdclt:备份状态与配置,就是查看系统是否已备份
- 69、Netplwiz:高级用户帐户控制面板,设置登陆安全相关的选项
- 70、msdt:微软支持诊断工具
- 71、lpksetup:语言包安装/删除向导,安装向导会提示下载语言包
-
-系统自带的很多已经够用了,例如其中的notepad命令,想要直接修改hosts文件(常用)可以直接输入
-
- notepad %systemroot%\system32\drivers\etc\hosts
-
-%systemroot%是window内自带的变量,即指向了C:\Windows,其他一些常用变量如:
-
- %HOMEDRIVE% = C:\ 当前启动的系统的所在分区
- %SystemRoot% = C:\WINDOWS 当前启动的系统的所在目录
- %windir% = %SystemRoot% = C:\WINDOWS 当前启动的系统的所在目录
- %USERPROFILE% = C:\Documents and Settings\sihochina 当前用户数据变量
- %HOMEPATH% = C:\Documents and Settings\sihochina 当前用户环境变量
- %temp% = %USERPROFILE%\Local Settings\Temp = C:\Documents and Settings\sihochina\Local Settings\Temp 当前用户TEMP缓存变量
-
-另外输入盘符可直达相应盘符,文件也是
-
- d:
- d:\application
-
-## 自定义命令
-
-只有系统的应用程序是不够我们用的,要想增加自己另外安装的程序,可以通过其他手段实现
-
-### 方法一:修改环境变量(不推荐)
-
-经常使用cmd命令的同学应该明白,放在环境变量中的文件夹下的应用程序,可以在任何位置直接运行,因为环境变量是windows搜索应用程序的路径,直接放在环境变量下文件夹中的应用程序可以直接运行。
-
- 1. 计算机(右键)-》属性-》高级系统设置-》环境变量
- 2. 修改PATH值,在其后增加相应路径,用‘;’隔开
-
-之所以不推荐是因为环境变量如果设太多,一是管理不便,二又会拖慢应用程序打开速度。
-
-### 方式二:快捷方式(推荐)
-
-这种方式和第一种类似,但是不是修改环境变量,而是往已有的环境变量中增加应用程序的快捷方式
-
- 1. 右键应用程序-》发送到桌面快捷方式
- 2. 修改名字为想要打开的命令
- 3. 移动快捷方式到已有环境变量中,如C:\windows下
-
-### 方式三:注册表方式(不推荐)
-
-修改注册表实现,太繁琐,不容易控制
-
-### 方式四:软件方式(推荐)
-
-有一些软件可以帮助建立这样的命令,具体方式因软件而异,但是它们会把功能做的比较人性化,如可以实现增加、更新、删除等
-
-魔方有这个功能,我用的就是这个
-
- 打开魔方-》优化设置大师-》系统设置-》快捷命令
diff --git a/_posts/tool/2013-03-25-open-tcp-port-of-libvirt.md b/_posts/tool/2013-03-25-open-tcp-port-of-libvirt.md
deleted file mode 100644
index adcfe6cf6f..0000000000
--- a/_posts/tool/2013-03-25-open-tcp-port-of-libvirt.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-layout: post
-title: Linux下开启Libvirtd的tcp监控
-category: 工具
-tags: Linux
-description: 在开发OpenStack时,涉及到远程操作Libvirt,这个时候必须打开远程TCP端口才能正常操作
----
-
-使用virsh连接到别的服务器时,使用的是tcp连接
-
- virsh -c qemu+tcp://host/system
-
-如果目标服务器没有开启libvirtd的tcp端口监听时,会出现
-
- error: unable to connect to server at 'host:16509': Connection refused
- error: failed to connect to the hypervisor
-
-## ubuntu下解决方法
-
- sed -i 's/#listen_tls = 0/listen_tls = 0/g' /etc/libvirt/libvirtd.conf
- sed -i 's/#listen_tcp = 1/listen_tcp = 1/g' /etc/libvirt/libvirtd.conf
- sed -i 's/#auth_tcp = "sasl"/auth_tcp = "none"/g' /etc/libvirt/libvirtd.conf
-
- vi /etc/default/libvirt-bin
- 修改为libvirt_opts = "-d -l"
- 增加-l监听tcp
-
- service libvirt-bin restart
-
-## centos下解决方法
-
- sed -i 's/#listen_tls = 0/listen_tls = 0/g' /etc/libvirt/libvirtd.conf
- sed -i 's/#listen_tcp = 1/listen_tcp = 1/g' /etc/libvirt/libvirtd.conf
- sed -i 's/#auth_tcp = "sasl"/auth_tcp = "none"/g' /etc/libvirt/libvirtd.conf
- sed -i 's/#LIBVIRTD_ARGS="--listen"/LIBVIRTD_ARGS="--listen"/g' /etc/sysconfig/libvirtd
-
- service libvirtd restart
\ No newline at end of file
diff --git a/_posts/tool/2013-03-25-tools-of-sever-deployment.md b/_posts/tool/2013-03-25-tools-of-sever-deployment.md
deleted file mode 100644
index 202b91cdb7..0000000000
--- a/_posts/tool/2013-03-25-tools-of-sever-deployment.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-layout: post
-title: 服务器自动化部署及运维常见工具
-category: 工具
-tags: Linux
-description: 服务器自动化部署时,应用适当的工具,可以大大减轻工作量
----
-
-## Cobbler
-
-Cobbler是一个Linux的安装服务,它可以在网络环境下迅速安装。它可以将众多Linux任务关连在一起,这样在你安装或修改系统时,就可以不必在众多命令和应用程序之间切换了。
-
-随着一系列简单的命令,可以配置网络安装PXE(Preboot Execute Environment)、重新安装、基于媒体的网络安装和虚拟化安装(支持Xen、qemu、KVM、和一些类型的VMware)。Cobbler使用一个叫做'koan'(和Cobbler交互)的程序来重新安装及虚拟化支持。
-
-Cobbler是一个轻量级的应用程序(只有1.5万行Python代码)。它试图在小型和大型安装时都非常简单易用,而且容易工作、扩展和阅读。它避免成为"企业级"(像那么复杂),但是它又拥有众多优秀的功能,非常适合在各种企业环境中使用,在重复性工作中节省大量的时间。
-
-Cobbler可以选择性的帮助管理DHCP、DNS和yum包镜像基础设施,再者方面,它是一个更广义的自动化应用程序,而不仅仅只是处理配置。它还有一个轻量级的内置配置管理系统,以及整合与配置管理系统,像Puppet一样。Cobbler有一个命令行界面,一个网络界面,和许多用来访问配置的API。
-
-## Puppet
-
-puppet是一种Linux、Unix平台的集中配置管理系统,使用ruby语言,可管理配置文件、用户、cron任务、软件包、系统服务等。puppet把这些系统实体称之为资源,puppet的设计目标是简化对这些资源的管理以及妥善处理资源间的依赖关系。
-
-Puppet是一个C/S架构的配置管理工具,在中央服务器上安装puppet-server软件包(被称作Puppet master)。在需要管理的目标主机上安装puppet客户端软件(被称作Puppet Client)。当客户端连接上Puppet master后,定义在Puppet master上的配置文件会被编译,然后在客户端上运行。每个客户端默认每半个小时和服务器进行一次通信,确认配置信息的更新情况。如果有新的配置信息或者配置信息已经改变,配置将会被重新编译并发布到各客户端执行。也可以在服务器上主动触发一个配置信息的更新,强制各客户端进行配置。如果客户端的配置信息被改变了,它可以从服务器获得原始配置进行校正。
-
-## FUNC
-
-func全称 Fedora Unified Network Controller ,主要用在Radhat, Fedora,OpenSuse,Centos系列系统上由一个server管理任意台服务器的工具,建立了Master-Slaves 主从SSL证书管控体系,可以将证书自动分发到所有受控服务.func直接发送远程命令或者远程获取数据,但是只适用于一些常用功能的模块的操作,实现其它功能需要自己写Python API,个人认为没有使用比较适当的”for do done”循环程序效果明确和方便.
\ No newline at end of file
diff --git a/_posts/tool/2013-04-21-add-snippet.md b/_posts/tool/2013-04-21-add-snippet.md
deleted file mode 100644
index 44b110dd97..0000000000
--- a/_posts/tool/2013-04-21-add-snippet.md
+++ /dev/null
@@ -1,39 +0,0 @@
----
-layout: post
-title: 给sublime增加snippet
-category: 工具
-tags: Sublime
-description: 总有时候有一些不是很大的代码段需要重复输入,利用sublime中的snippet可以方便很多
----
-
-### 创建
-点击菜单栏Tools ==> New Snippet打开一个snippet模板文件
-
-- ``部分是片段输入内容
-
-- `p`部分是触发此片段的字符,此处为`p`触发
-
-- `text.html`部分是此片段可用范围,此处为html文件中可用
-
-完整例子:
-
-
-
- $1
-
- ]]>
- p
- text.html
-
-
-### 保存
-
-最后保存文件为.sublime-snippet格式,保存在用户配置目录下
-
- Mac OS X:/Users/yourname/Library/Application Support/Sublime Text 2/Packages/User
-
-另外,`source.css`是css文件可用
-
-### 参考
-[参考](http://www.granneman.com/webdev/editors/sublime-text/top-features-of-sublime-text/quickly-insert-text-and-code-with-sublime-text-snippets/)
\ No newline at end of file
diff --git a/_posts/tool/2013-04-22-add-svn-ignore-file.md b/_posts/tool/2013-04-22-add-svn-ignore-file.md
deleted file mode 100644
index 5bec390df7..0000000000
--- a/_posts/tool/2013-04-22-add-svn-ignore-file.md
+++ /dev/null
@@ -1,33 +0,0 @@
----
-layout: post
-title: 给SVN控制的项目添加忽略文件/文件夹
-category: 工具
-tags: SVN
-description: 因为使用SAE,所以有些项目用SVN来控制,使用时难免有些临时文件生成,每次提交时都得先删除临时文件再提交,设置一下忽略目录就可以方便很多
----
-
-忽略目录其实有些像建立一个文件夹,但却不放入版本控制。如果不加入版本控制又会在`svn status`命令中显示出来,很不方便,所以可以设置本文件夹属性,让它既加入版本控制,又忽略其变化
-
-### 未加入控制的文件夹
-
- svn propset svn:ignore 'test' .
- svn update
- svn commit -m "add a ignore dir"
-
-### 已经加入版本控制的文件夹
-
- svn export test test_bak
- svn rm test
- svn commit -m "delete test"
- mv test_bak test
- svn propset svn:ignore 'test' .
- svn update
- svn commit -m "add a ignore dir"
-
-如果想要忽略一个目录下多个文件夹的话,需要有一点点技巧,如下
-
- svn propset svn:ignore 'test
- test1
- test2' .
-
-即每一个文件夹要单独另起一行
\ No newline at end of file
diff --git a/_posts/tool/2013-04-22-highlight-of-jekyll.md b/_posts/tool/2013-04-22-highlight-of-jekyll.md
deleted file mode 100644
index 4f2dd32892..0000000000
--- a/_posts/tool/2013-04-22-highlight-of-jekyll.md
+++ /dev/null
@@ -1,51 +0,0 @@
----
-layout: post
-title: Jekyll的中的代码高亮
-category: 工具
-tags: Jekyll
-description: 在这个博客里,我使用了bootstrap作为前端框架,另外通过比较选择了一个还算满意的代码高亮方式
----
-
-### 代码高亮方式选择
-
-#### 1.小片段
-
-直接使用“ \` ”符号包含起来,或者使用一个tab直接利用markdown来做高亮
-
-#### 2.Pygments渲染
-
-Jekyll通过[Pygments](http://pygments.org/)可以直接处理代码高亮
-
-在Github Pages的[文档](https://github.com/mojombo/jekyll/wiki/Liquid-Extensions)里,也提到了这个方式,但是总觉得这样有点不是很舒服,打破了markdown的格式
-
-#### 3.gist嵌入方式
-
-这个[方式](https://gist.github.com/imathis/1027674)使用了一个插件,而且gist也得管理,增大了开销……
-
-#### 4.js和css处理
-
-这个方式使用了[google-code-prettify](https://code.google.com/p/google-code-prettify/)来渲染代码高亮,本身库并不是很大,使用方便,最后我也选择了这个
-
-### Prettify使用
-
-#### 1.下载代码
-
-直接到[google-code-prettify](https://code.google.com/p/google-code-prettify/)官网下载代码,然后将它们放到项目下
-
-#### 2.包含css和js
-
-官网提到了可以直接包含run_prettify.js的方式,这个会导入远程库,我选择了自己导入,如下
-
-
-
-
-
-这里导入了css和js后,就可以直接用markdown的tab的方式来导入代码段了
-
-#### 3.更换主题
-默认主题不是很好看,只要更换prettify.css即可更换样式,可以到[这里](http://google-code-prettify.googlecode.com/svn/trunk/styles/index.html)下载自己喜欢的主题css即可
\ No newline at end of file
diff --git a/_posts/tool/2013-04-22-ignore-password-in-git-push.md b/_posts/tool/2013-04-22-ignore-password-in-git-push.md
deleted file mode 100644
index 4cffb95635..0000000000
--- a/_posts/tool/2013-04-22-ignore-password-in-git-push.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-layout: post
-title: 让git push命令不再需要密码
-category: 工具
-tags: Git
-description: 使用git push命令远程提交库时,总是要输入帐号和密码,这样特别麻烦,找了一个方法解决掉
----
-
-最近利用jekyll写博客,为的就是博客管理方便,但是在上传博客的时候使用`git push`命令每次都得输入github帐号和密码特别的不方便,于是就搜了一下。
-
-在[这篇](https://blog.lowstz.org/posts/2011/11/23/why-git-push-require-username-password-github/)文章里提到,GitHub获得远程库时,有ssh方式和https方式。
-
-
-
-
-两个方式的url地址不同,认证方式也不同。使用ssh时保存密钥对以后可以不再输入帐号密码,而https却不能。所以如果想要不再输入帐号密码,一种方式就是在git clone的时候使用ssh方式,另一种方式就是去修改已有项目.git目录下的config文件中的url,如下:
-
- [remote "origin"]
- url = git@github.com:suyan/suyan.github.io.git
- fetch = +refs/heads/*:refs/remotes/origin/*
-
-
-
diff --git a/_posts/tool/2013-04-22-wordpress-to-jekyll.md b/_posts/tool/2013-04-22-wordpress-to-jekyll.md
deleted file mode 100644
index b815711d63..0000000000
--- a/_posts/tool/2013-04-22-wordpress-to-jekyll.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: post
-title: 博客迁移完成
-category: 工具
-tags: Blog
-description: 花了两天时间,总算写好了自己基于GitHub的博客,把以前wordpress上的文章有用的都移了过来,可以松一口气了
----
-
-一直在寻找一种适合自己的博客写作方式,基于GitHub+Jekyll+Markdown的写作方式非常适合我,因为我平时就喜欢用markdown来记一些学习到的东西。
-
-以前的博客是在SAE上搭建的WordPress,这个博客还可以[访问](http://yansublog.sinaapp.com),不过不打算更新了。选择更换的原因有:
-
- - 有的时候我可能想先写点东西,然后再逐渐完善,WordPress已经提交的博客更新起来不方便
-
- - 没有办法做到离线提交,离线写博客(可能有,但是体验达不到要求)
-
- - 速度不行……
-
-总是诸多不爽,让我这工具控一次又一次奔溃,以至于后来博客都在本地控制着,懒得提交到WordPress上。
-
-以前用Emacs时可以用orgmode远程提交,现在用Sublime了,暂时没有发现好的方式,但是书写起来却方便了很多,尤其是Sublime对Markdown的支持。
-
-这里顺便暗爽一下,因为Sublime下Markdown搭配Smart Markdown和Markdown Preview两个插件简直太爽了,前者可以帮助格式化markdown文档,顺便偶尔生成一下doc格式。后者可以帮助即时浏览文档,我一般是直接preview in browser,然后选择打印pdf。
-
-总之各种原因促成了博客迁移,代码自己写的,可以随意增加自己喜欢的功能,如果有兴趣可以直接fork一下,自己修改,我自认为自己的代码还是简单易懂的。
diff --git a/_posts/tool/2013-05-20-set-proxy-for-git-or-apt.md b/_posts/tool/2013-05-20-set-proxy-for-git-or-apt.md
deleted file mode 100644
index 44bc9b2f42..0000000000
--- a/_posts/tool/2013-05-20-set-proxy-for-git-or-apt.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-layout: post
-title: 给Git或者APT设置goagent代理
-category: 工具
-tags: Git
-description: 最近使用git从github上clone代码,总是失败,奔溃了快。还有ubuntu连apt-get update都执行不了,有的时候都装不了git,就快骂娘了。可惜在这样一个环境下,只能靠自己搞定了,设置代理是比较好的方式
----
-
-## 安装goagent
-这个教程网上很多,放狗一搜即可。
-
-不过网上goagent教程里讲的大部分是给浏览器用的。其实goagent是监听了本地的8087端口,其实任何程序都可以利用这个端口,只要设置好即可。
-
-## 设置git代理
-直接在终端输入
-
- export https_proxy="127.0.0.1:8087"
- export http_proxy="127.0.0.1:8087"
- git config --global http.sslVerify false
-
-这样`git clone`就是走代理了,其实这个设置完以后apt-get的操作也是通过代理的了
-
-## 设置apt-get代理
-上面的方法也可以直接使apt代理,如果不想设置环境变量,可以使用下面命令
-
- sudo apt-get -o Acquire::http::proxy="http://127.0.0.1:8087/" update
-
diff --git a/_posts/tool/2013-05-22-change-to-zsh.md b/_posts/tool/2013-05-22-change-to-zsh.md
deleted file mode 100644
index 35ea62cf7c..0000000000
--- a/_posts/tool/2013-05-22-change-to-zsh.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-layout: post
-title: 从Bash切换到Zsh
-category: 工具
-tags: Mac
-description: Zsh在使用一段时间以后,确实是不错,这个过程逐渐完善吧
----
-
-## 安装Zsh
-我在mac下,使用`port install zsh`就好了,因为mac自带的Zsh比较老,然后使用`chsh -s /opt/local/bin/zsh`搞定
-
-## 安装Zsh配置文件
-克隆配置
-
- git clone git://github.com/sjl/oh-my-zsh.git ~/.oh-my-zsh
-
-移动到根目录
-
- cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc
-
-## 使用Zsh
-[使用Zsh的九个理由](http://lostjs.com/2012/09/27/zsh/)写了Zsh最令人激动的理由
diff --git a/_posts/tool/2013-05-23-install-mysql-and-mongo-web-admin.md b/_posts/tool/2013-05-23-install-mysql-and-mongo-web-admin.md
deleted file mode 100644
index d3b21ca914..0000000000
--- a/_posts/tool/2013-05-23-install-mysql-and-mongo-web-admin.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-layout: post
-title: 安装MySQL和MongoDB的WEB管理界面
-category: 工具
-tags: [Linux , MySQL , MongoDB]
-keywords: Linux,MySQL,MongoDB
-description: 在服务器上操作mysql和mongo时,还是有个界面比较直观,对自己的手好一点
----
-## MySQL管理界面
-这个没多少选择,大部分人都安装的是phpmyadmin,而且简单方便,在ubuntu下,只要
-
- apt-get install phpmyadmin
-
-设置也不需要,只要在安装过程中输入mysql密码即可,访问`http://localhost/phpmyadmin`即可
-
-## MongoDB管理界面
-MongoDB的工具还比较多,没有一个能够统一全部工具的,不过推荐使用RockMongo,这个工具确实速度很快,而且很顺手,支持中文
-
-到[RockMongo](http://rockmongo.com/wiki/introduction?lang=zh_cn)下载安装包
-
-如果Apache有根目录,移动到根目录下,否则自己建立一个`/etc/apache2/conf.d/rockmongo.conf`,写入
-
- Alias /rockmongo /var/www/rockmongo
-
- Options FollowSymLinks
- DirectoryIndex index.php
-
-
-然后要安装php-mongo模块
-
- apt-get install php5-mongo
-
-修改php配置文件
-
- echo "extension=mongo.so" >> /etc/php5/apache2/php.ini
-
-然后访问`http://localhost/rockmongo`即可,帐号密码都是admin
\ No newline at end of file
diff --git a/_posts/tool/2013-08-04-something-about-tools-i-used.md b/_posts/tool/2013-08-04-something-about-tools-i-used.md
deleted file mode 100644
index a1af8665c6..0000000000
--- a/_posts/tool/2013-08-04-something-about-tools-i-used.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-layout: post
-title: 我与工具
-category: 工具
-tags: Tool
-keywords: 工具,Tool
-description: 总喜欢折腾各种各样的工具来找到最适合自己的,最后发现好工具是不需要折腾的
----
-
-“工欲善其事,必先利其器”---XXX
-
-作为一个标准的工科男,我对于自己使用的工具的追求还是比较严格的,一直都希望自己使用的工具按自己的标准去工作,并且是最顺手的
-
-编辑器作为一个IT男的标配,从Vim,Emacs到各种IDE,一直有着持续不断的月经战
-
-自己也曾经捣鼓过Vim和Emacs,可以说过程是心酸的,结果更是心酸的
-
-喜欢Vim即开即用的速度,又喜欢Emacs灵便的快捷键,速度和功能似乎从来都是背向而行的,而且都有个共性问题,配置复杂(追求各种自定义),而且还不能同步在不同的机器上
-
-直到我遇到了Sublime,我惊讶于它不仅简单易用,而且各个部分都特别的人性化。它就如它的名字那样绚丽
-
-我把它的快捷键改成了类emacs的(本来在mac上编辑器快捷键就挺像emacs),也没多花多大功夫,而且直接从以前win平台把setting-user拷贝过来就可以了。它统一使用json格式来配置功能,非常易用。
-
-除了编辑器外,还有各种各样的软件和工具,我都曾自己折腾过。直到最后出来一个对的上口味的软件,终结了我之前所有做过的自定义
-
-工具本身是用来提升自己工作的效率的,更多的精力应该放在工作上。好的工具不需要太多修改就可以方便使用,当一个工具难用到爆的时候,绝对会有颠覆着出现
-
-这个话题似乎能写不少东西,把我折腾过的软件都一一列举一下
\ No newline at end of file
diff --git a/_posts/tool/2013-08-06-tools-of-reading.md b/_posts/tool/2013-08-06-tools-of-reading.md
deleted file mode 100644
index 04d2c6428c..0000000000
--- a/_posts/tool/2013-08-06-tools-of-reading.md
+++ /dev/null
@@ -1,52 +0,0 @@
----
-layout: post
-title: 我与工具--阅读和知识管理
-category: 工具
-tags: Tool
-keywords: 阅读,知识管理,工具
-description: 每天都会花很多时间用来处理订阅的RSS、微博、微信等消息,选择合适的工具可以帮助提升阅读效率
----
-
-## 1. 信息来源
-在这个信息爆炸的时代,我们阅读的来源实在太多了,以至于超过了我们能处理的极限。很好的筛选信息是很重要的,只阅读对自己当前最重要的文章。
-
-### Feedly
-Feedly 不用多说,作为 Google Reader 的替代者,功能上来说基本都满足了订阅RSS阅读的需求。为了筛选内容,可以考虑只读阅读人数多的文章。
-
-RSS订阅包括了一些个人博客、媒体,比如:
-
-- V2EX
-- Hacker News 50
-- Techmeme
-- 36Kr
-- 虎嗅
-
-### Twitter
-Twitter 上关注了挺多开发者和科技媒体,偶尔关注一下最新动态。
-
-### 知乎日报
-每天一些精选内容,挑感兴趣的读一下。
-
-### 微信
-微信上公众帐号经常有不错的文章,值得阅读。
-
-微信公众帐号虽然关注了挺多,但是其实最后也只看这么几个人的:
-
-- 小道消息
-- 道哥的黑板报
-- MacTalk By 池建强
-- 人生如戏
-- 鬼脚七
-
-## 2. 稍后读
-稍后读工具之前还在用信息源的收藏,后来发现那些收藏既不容易翻阅,又不容易搜索,所以后来统一到了一个软件下。
-
-### Pocket
-Pocket 拥有比较广的支持,例如 Feedly, Twitter 和知乎日报都支持了 Pocket 收藏。只有微信不支持,不过没有关系,微信里点在 Safari 中打开,然后分享到 Pocket 即可。
-
-## 3. 信息归档
-稍后读的最大问题就是 Read It Never。不过这个没有问题,本来我们要做的也是阅读 or 归档。由于信息实在太多,有些内容又不是想现在读,合理的归档可以有助于以后再搜索。不过我们必须保证 Pocket 的尽量简洁,每天晚上尽量将今天收藏的文章归档。
-
-### Evernote
-Evernote 是我发现当前的最佳归档工具。它的检索非常快,而且网页版插件也非常好用。
-
diff --git a/_posts/tool/2013-08-28-change-bootstrap-to-3.md b/_posts/tool/2013-08-28-change-bootstrap-to-3.md
deleted file mode 100644
index a4d9a6fb5d..0000000000
--- a/_posts/tool/2013-08-28-change-bootstrap-to-3.md
+++ /dev/null
@@ -1,62 +0,0 @@
----
-layout: post
-title: 更新前端框架到Bootstrap3
-category: 工具
-tags: Blog
-keywords: Bootstrap
-description: Bootstrap3正式版出来几天了,考虑更新完全没影响,就抽空升级一下
----
-
-Bootstrap3出来大概有几天时间了,据说他们宣称这个版本是移动优先,而且还把控件给排扁了。
-
-前几天稍微看了一下他们的[新文档](http://getbootstrap.com),感觉确实变化挺多,但是对于熟悉第二版的开发这者来说,稍微看一下基本就了解了。这个框架使用的人真的是奇多,正式版刚发布的那天就有人提醒我,我github上头一个基于Bootstrap的自动提醒控件应该升级成v3的了,而且还给我发来了代码,这效率……
-
-这个博客当初是决定了以后常用的,所以代码和文件布置的还算合理,从v2升级到v3基本不费什么功夫。就是换一下css和js,改改class的事情。总共时间1个小时吧,加上写这个总结,接下来说说主要关心修改什么内容。
-
-### 1.bootstrap文件更新
-
-看一下新的bootstrap文件
-
- .
- ├── css
- │ ├── bootstrap.css
- │ └── bootstrap.min.css
- ├── fonts
- │ ├── glyphicons-halflings-regular.eot
- │ ├── glyphicons-halflings-regular.svg
- │ ├── glyphicons-halflings-regular.ttf
- │ └── glyphicons-halflings-regular.woff
- └── js
- ├── bootstrap.js
- └── bootstrap.min.js
-
-css和js还是老样子,只要覆盖原来的就行了,这里关键说一下fonts里头的东西。
-
-以前版本里面,图标都是真的图片做成的,他们都被集合在之前的glyphicon-halflings.png里头,用哪个根据图片位置相对显示哪个。这种方式导致的问题就是在分辨率变法的时候,图片要么失真要么显示有问题,尤其是retina屏下头。
-
-这个问题在v2阶段就有解决办法,只不过不是官方发布的,而是由[Font Awesome](http://fortawesome.github.io/Font-Awesome/)提供了基于字体的图标,这样形成的图标是矢量图,可以面对各种各样的分辨率。我找到一个对它进行分析的文章,链接[在此](http://www.cnblogs.com/zhengenru2008/archive/2013/04/12/3016659.html)。
-
-现在v3版本里面也有了类似的解决方案,对我来说用原来的就行,没有影响。
-
-### 2.网格布局修改
-
-网格布局由原来的`span`变成了现在超级难看的`col-xx-xx`,而且看起来不那么简约时尚国际范了。不过稍微细读一下文档会发现,这种略微复杂的控制方式,反而对响应式布局的控制变得非常精细,妈妈再也不用担心分辨率改了以后还得修改css文件了!
-
-通过``类似这样的并列方式,就可以控制不同分辨率下控件的现实形式。对我来说没啥作用,因为默认的布局方式就够用了,直接把`span`都换成`col-md`,搞定!
-
-这里我用md是因为我这个博客页面不是很丰富,太宽不好看,而且我还把bootstrap.css下1200那个最大值给调成了2000。也就是说,你想看到col-lg的布局,得屏幕分辨率达到2000xXXX以上了……
-
-### 3.控件修改
-
-这里大概用了一些简单的控件,比如右边的affix,以及顶上的navbar,还有下面的pagination,还有分类页面的collapse。变化仅仅是改了一下class的名字,逐个击破就好了
-
-### 4.一些想法
-
-Bootstrap的出现,一定程度上统一了前端杂乱的氛围,简化了开发流程,降低了开发难度,简直就是老少皆宜。对于不是做前端,却要偶尔写前端的孩纸,指明了一条道路。对于做前端的开发者来说,又有了一个较为标准化的学习对象,可以加快学习速度,少走一些弯路。
-
-现在阅读字体和风格都不怎么舒服,待优化,下次再弄吧。
-
-
-
-
-
diff --git a/_posts/tool/2013-12-08-linux-command-continue.md b/_posts/tool/2013-12-08-linux-command-continue.md
deleted file mode 100644
index da9e26d583..0000000000
--- a/_posts/tool/2013-12-08-linux-command-continue.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-layout: post
-title: Linux下多个命令连续执行方法
-category: 工具
-tags: Linux
-keywords: Linux,连续,命令
-description:
----
-
->有的时候执行一些简单指令的时候总不想分好几次输入,利用以下方法可以方便的一次执行多个命令
-
-### 连续不中断执行
-
-用`;`可以让多个命令连续知行,中间出现错误并不会中断后面命令,如
-
- mkdir test; mkdir test; rmdir test;
-
-虽然第二条指令会报错,但是不会影响后面的指令,最后test目录不存在
-
-### 出错停止后面指令
-
-用`&&`分割的命令,如果没有错误会一直执行下去,出现错误立即中止,如
-
- mkdir test && mkdir test && rmdir test
-
-这回在第二个指令处就中止了
-
-### 一次正确即停止
-
-用`||`分割的命令,如果有错误就一直执行下去,直到一次正确立即中止,如
-
- mkdir test || mkdir test || rmdir test
- mkdir test || mkdir test || rmdir test || mkdir test
-
-第一次执行第一条指令就正确,后面的不执行
-
-第二次执行前两条都错误,直到最后一条才正确,最后一条不再执行
\ No newline at end of file
diff --git a/_posts/tool/2013-12-11-deploy-pptp-vpn-in-ubuntu.md b/_posts/tool/2013-12-11-deploy-pptp-vpn-in-ubuntu.md
deleted file mode 100644
index d55a03441e..0000000000
--- a/_posts/tool/2013-12-11-deploy-pptp-vpn-in-ubuntu.md
+++ /dev/null
@@ -1,121 +0,0 @@
----
-layout: post
-title: 在ubuntu下搭建pptp vpn服务器
-category: 工具
-tags: Linux
-keywords: Linux,pptp,vpn
----
-
->最近弄了digitalocean的vps,研究了一下搭建一个vpn自己用,因为有些系统代理goagent还是搞不定。但是事实证明digitalocean线路还是很不稳,基本上没啥帮助=0=
-
-## pptp配置
-
-### 安装pptp
-用ubuntu就是安装东西快
-
- sudo apt-get -y update
- sudo apt-get -y install pptpd
-
-### 修改配置脚本
-配置一下dns
-
- cat >/etc/ppp/options.pptpd <
/etc/pptpd.conf <> /etc/sysctl.conf < /etc/iptables.down.rules
-
-修改iptable NAT转发
-
- iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth0 -j MASQUERADE
-
-设置MTU
-
- iptables -I FORWARD -s 192.168.2.0/24 -p tcp --syn -i ppp+ -j TCPMSS --set-mss 1300
-
-保存新iptables
-
- iptables-save > /etc/iptables.up.rules
-
-重启后继续有效
-
- cat >>/etc/ppp/pptpd-options</etc/ppp/chap-secrets < Mac下搭建lamp开发环境很容易,有xampp和mamp现成的集成环境。但是集成环境对于经常需要自定义一些配置的开发者来说会非常麻烦,而且Mac本身自带apache和php,在brew的帮助下非常容易手动搭建,可控性很高
-
-## [Brew](http://brew.sh/)
-brew对于mac,就像apt-get对于ubuntu,安装软件的好帮手,不能方便更多...
-
-brew的安装方式如下:
-
- ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go/install)"
-
-brew常用选项
-
- brew install xxx
- brew uninstall xxx
- brew list
- brew update xxx
-
-## Apache 或 Nginx
-
-> 两者只需要安装一个
-
-### Apache
-Apache的话使用mac自带的基本就够了,我的系统是10.9,可以使用以下命令控制Apache
-
- sudo apachectl start
- sudo apachectl restart
- sudo apachectl stop
-
-唯一要改的是主目录,mac默认在home下有个`Sites`(站点)目录,访问路径是
-
- http://localhost/~user_name
-
-这样不太容易访问,修改`/etc/apache2/httpd.conf`内容
-
- DocumentRoot /Users/username/Sites
-
- Options Indexes MultiViews
- # apache 2.2
- # AllowOverride All
- # Order allow,deny
- # Allow from 127.0.0.1
-
- # apache 2.4
- Require local
-
-
-这样`Sites`目录就是网站根目录了,通过`http://localhost`就可以访问了。
-
-#### 常用命令
-
-```bash
-sudo apachectl start # 启动apache
-sudo apachectl stop # 关闭apache
-sudo apachectl restart # 重启apache
-```
-
-#### 设置vhost
-设置vhost可以很方便的进行站点调试,尤其是对于需要在根目录运行的站点。推荐 [VirtualHostX](https://clickontyler.com/virtualhostx/).
-
-设置方法是:
-
-```bash
-sudo vi /etc/apache2/extra/httpd-vhosts.conf
-```
-
-然后输入:
-
-```bash
-
- Allow From All
- AllowOverride All
- Options +Indexes
-
-
- ServerName "site.test"
- DocumentRoot "/path/to/site"
-
-```
-
-这么设置会有个问题,默认的`http://localhost`会被转到这儿来,所以专门再设置一下`localhost`的host就好了。
-
-```bash
-
- ServerName localhost
- DocumentRoot /path/to/root
-
-```
-
-然后把host文件改一下,把刚刚设置的`ServerName`改到本地就好了。
-
-```bash
-sudo vi /etc/hosts
-```
-
-写入:
-
-```bash
-127.0.0.1 site.test
-```
-
-### Nginx
-要使用Nginx也比较方便,首先安装
-
- brew install nginx
-
-启动关闭Nginx的命令如下(如果想要监听80端口,必须以管理员身份运行)
-
- #打开 nginx
- sudo nginx
- #重新加载配置|重启|停止|退出 nginx
- nginx -s reload|reopen|stop|quit
- #测试配置是否有语法错误
- nginx -t
-
-配置Nginx
-
- cd /usr/local/etc/nginx/
- mkdir conf.d
-
-修改Nginx配置文件
-
- vim nginx.conf
-
-主要修改位置是最后的include
-
- worker_processes 1;
-
- error_log /usr/local/var/log/nginx/error.log warn;
-
- pid /usr/local/var/run/nginx.pid;
-
- events {
- worker_connections 256;
- }
-
- http {
- include mime.types;
- default_type application/octet-stream;
-
- log_format main '$remote_addr - $remote_user [$time_local] "$request" '
- '$status $body_bytes_sent "$http_referer" '
- '"$http_user_agent" "$http_x_forwarded_for"';
-
- access_log /usr/local/var/log/nginx/access.log main;
- port_in_redirect off;
- sendfile on;
- keepalive_timeout 65;
-
- include /usr/local/etc/nginx/conf.d/*.conf;
- }
-
-修改自定义文件
-
- vim ./conf.d/default.conf
-
-增加一个监听端口
-
- server {
- listen 80;
- server_name localhost;
-
- root /Users/username/Sites/; # 该项要修改为你准备存放相关网页的路径
-
- location / {
- index index.php;
- autoindex on;
- }
-
- #proxy the php scripts to php-fpm
- location ~ \.php$ {
- include /usr/local/etc/nginx/fastcgi.conf;
- fastcgi_intercept_errors on;
- fastcgi_pass 127.0.0.1:9000;
- }
-
- }
-
-这个时候还不能访问php站点,因为还没有开启php-fpm。
-
-虽然mac 10.9自带了php-fpm,但是由于我们使用了最新的PHP,PHP中自带php-fpm,所以使用PHP中的php-fpm可以保证版本的一致。
-
-这里的命令在安装完下一步的php后再执行
-
- sudo nginx
- sudo php-fpm -D
-
-## PHP
-PHP在mac下默认安装了,但是不好控制版本,利用brew可以再mac下安装最新版本,甚至是多个版本,我装了php5.5
-
- brew update
- brew tap homebrew/dupes
- brew tap josegonzalez/homebrew-php
- # brew install php55 --with-fpm #Nginx
- brew install php55 #Apache
-
-然后修改php的cli路径和apache使用的php模块。在.bashrc或.zshrc里头加以下内容
-
- #export PATH="$(brew --prefix josegonzalez/php/php55)/bin:$PATH"
- export PATH="/usr/local/bin:/usr/local/sbin:$PATH"
-
-就用刚刚安装的php代替了系统默认cli的php版本。然后在`/etc/apache2/httpd.conf`下增加
-
- LoadModule php5_module /usr/local/Cellar/php55/5.5.8/libexec/apache2/libphp5.so
-
-这样就对apache使用的php版本也进行了修改。
-
-后面会用到mongo和mysql,所以可以直接利用下面命令安装php模块,其他模块也类似
-
- #brew install php55-mysql #这个已经不需要再安装了
- brew install php55-mongo
-
-## MySQL
-mac不自带mysql,这里需要重新安装,方法依然很简单
-
- brew install mysql
- unset TMPDIR
- mysql_install_db --verbose --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmp
- sudo chown -R your_user /usr/local/var/mysql/
-
-第一句是安装,后面的是确保正常使用。然后是启动命令
-
- mysql.server start
-
-最好给mysql设个密码,方法如下
-
- mysqladmin -u root password 'xxx'
-
-如果想修改mysql的配置,在`/usr/local/etc`下建立一个`my.cnf`,例如增加log
-
- [mysqld]
- general-log
- general_log_file = /usr/local/var/log/mysqld.log
-
-## MongoDB
-MongoDB可以说是最简单的一个,直接执行
-
- brew install mongodb
-
-启动方法
-
- mongod --fork
-
-## PHPMyAdmin
-phpmyadmin几乎是管理mysql最容易的web应用了吧,每次我都顺道装上。
-
-- 去[官网](http://www.phpmyadmin.net/home_page/downloads.php)下载最新的版本
-- 解压到~/Sites/phpmyadmin下
-- 在phpmyadmin目录下创建一个可写的config目录
-- 打开http://localhost/phpmyadmin/setup,安装一个服务,最后保存(这里只需要输入帐号密码就够了)
-- 将config下生成的config.inc.php移到phpmyadmin根目录下
-- 删除config
-
-这样就装好了,虽然可能有点小复杂,但是来一次就习惯了。
-
-这里很可能会遇到2002错误,就是找不到mysql.sock的问题,用下面方法解决
-
- sudo mkdir /var/mysql
- sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock
-
-## RockMongo
-RockMongo是MongoDB很好用的一个web应用,安装也很容易
-
-- 去[官网](http://rockmongo.com/)下载最新版本
-- 解压到~/Sites/rockmongo下
-- 运行http://localhost/rockmongo即可
-
-## 把 site 放在 Dropbox 文件夹下
-
-```
-ln -s ~/Dropbox/sitename ~/Sites/sitename
-chmod a+rw ~/Dropbox
-chmod a+rw ~/Dropbox/sitename
-```
-
-## 完成
-这样就在mac下配置好一个php开发环境了,enjoy it!
-
-## 参考
-1. [Hot to install nginx, PHP-fpm 5.5.6, mongo and MySql on mac with homebrew](http://www.nabito.net/hot-to-install-nginx-php-fpm-5-5-6-mongo-and-mysql-on-mac-with-homebrew/)
-2. [Mac OSX 10.9搭建nginx+mysql+php-fpm环境](http://my.oschina.net/chen0dgax/blog/190161)
-
-
-
-
diff --git a/_posts/tool/2014-02-12-how-to-deploy-a-blog-on-github-by-jekyll.md b/_posts/tool/2014-02-12-how-to-deploy-a-blog-on-github-by-jekyll.md
deleted file mode 100644
index 0e3de813c6..0000000000
--- a/_posts/tool/2014-02-12-how-to-deploy-a-blog-on-github-by-jekyll.md
+++ /dev/null
@@ -1,274 +0,0 @@
----
-layout: post
-title: 在Github上搭建Jekyll博客和创建主题
-category: 工具
-tags: Jekyll
-keywords: Jekyll,Github
-description:
----
-
-> 之前本来想展开写的,后来发现Jekyll官网的教程已经非常完善了就没有多写,所以只有[这篇][1]。
-> 但是过了这么久,发现很多人还是不清楚怎么搭建,所以这里打算详细写一下,并且把自己对图片的解决方案以及主题的创建步骤也一并写下。
->
-> 本篇主要谈如何搭建,不再讲为什么用它们。
-
-__说明:本篇用到的代码中,为了防止解析冲突,一律多了`\`这个来防止被误解析__
-
-## 创建一个库
-在Github上新开一个库,名字叫做`username.github.io`,然后当别人在地址栏输入相应url的时候就可以访问进来了。
-
-在这个库中完全可以只上传一个`index.html`,来讲自己要写的东西写进去,但是这样会丧失很多灵活性,所以需要Jekyll的帮助来创建自己的博客。
-
-## 设定目录结构
-把自己的库clone到本地来,建立如下目录结构:
-
-```
-├── CNAME
-├── README.md
-├── _config.yml
-├── _includes
-│ ├── disqus.html
-│ ├── footer.html
-│ ├── googleanalytics.html
-│ ├── header.html
-│ └── navside.html
-├── _layouts
-│ ├── base.html
-│ ├── book.html
-│ ├── page.html
-│ └── post.html
-├── _posts
-│ ├── Book
-│ ├── Life
-│ ├── Resource
-│ ├── Technology
-│ └── Tool
-├── index.html
-├── pages
-│ ├── about.html
-│ ├── archive.html
-│ └── atom.xml
-├── public
-│ ├── css
-│ ├── fonts
-│ ├── img
-│ ├── js
-│ └── upload
-└── sitemap.txt
-
-```
-
-这个目录结构是我自己设定的,也可以有不同的目录结构,看[官网][2]。
-
-接下来我主要解释这里面每一个目录的功能。
-
-### 配置文件
-`_config.yml`里写有整个站点的主要配置项,我的如下:
-
-```
-permalink: /:year/:month/:day/:title.html #博文的固定链接
-paginate: 10 #分页时每页博文数量
-author: #自定义常亮
- name: 闫肃
- email: yansu0711@gmail.com
- link: http://yansu.org
-title: 闫肃的博客 #自定义常量
-locals: #自定义常量
- tags: 标签
- about: 关于
-active: 技术 #自定义常量
-subscribe_rss: /pages/atom.xml #订阅地址
-markdown: redcarpet #markdown解释器
-```
-
-这里的自定义常量可以在模板中使用,以后有修改的时候就不需要跑去改代码了。尤其是对一些私人的选项,可以在这里定义。现在我的博客中出了disqus和googleanalytics外都直接在这里设定就好了。
-
-### 域名配置
-`CNAME`这个文件写明了这个站点的域名,如果不喜欢`username.github.io`的话,可以像我一样改掉
-
-```
-yansu.org
-```
-
-改法只要在这个文件中写入域名就可以了。不过你需要去域名服务商那里设定域名解析规则。
-
-只要把`主机记录`为`@`,`www`的记录值写成`username.github.io`就好了。
-
-### 博客存放
-`_posts`下的所有目录中的所有博客,都会被Jekyll处理成为静态的html文件,然后放在`_site`下。我这里没有`_site`目录,是因为我在`.gitignore`文件中把这个目录屏蔽掉了,它不会上传到Github上。
-
-```
-_site/
-_drafts/
-.DS_Store
-```
-
-以上是我的`.gitignore`文件内容。
-
-在`_posts`下的符合`YYYY-MM-DD-xxxxxx.md`的文件,都会被Jekyll认定为博客内容。我在`_posts`下又新建了一些文件夹,主要是方便自己本地管理博客。
-
-在上述这些文件中,必须先定义一些配置项,例如这篇博客的md文件中,开头是这样的:
-
-```
-
-layout: post #这个博客的布局文件
-title: 在Github上搭建自己的Jekyll博客 #博客标题
-category: 工具 #博客分类
-tags: Jekyll #博客标签
-keywords: Jekyll,Github #自定义常量
-description: #自定义常量
-
-```
-
-除了自定义常量外的必须包含进去,自定义变量在这个布局中可以访问。
-
-### 模版文件
-剩余的目录,基本都属于模板文件了,我解释一下各自的作用:
-
-- `_includes` 可以在模板中随时包含的文件
-- `_layouts` 布局文件,在博客头配置中可以选择
-- `pages` 站内固定的页面
-- `public` 公共资源,包括`js`,`css`,`img`等,还有我博客中调用的图片,我都放这里
-- `index.html` 站点的首页,整个站的入口文件
-- `sitemap.txt` 给搜索引擎看的,如何爬取这个站
-
-## 创建自己的主题
-上面讲了如何布局好站内文件结构,接下来主要就是如何创建一个自己的主题了。
-
-布局文件是整个主题最重要的文件,这些文件告诉Jekyll如何去形成一个html页面。
-
-首先我说一下我最基础的`page.html`文件,因为它决定了入口文件`index.html`的布局。
-
-```html
-
-layout: base
-
-
-
-
-
{\{ page.title }}
-
-
-
- {\{ content }}
-
-
- {\% include disqus.html %}
-
-
-```
-
-从这里可以看到这个文件写起来一点都不复杂,但是为什么开头还有个`layout`呢?因为它也不是最基本的布局文件,最基本的是`base.html`,我们看一下它的内容。
-
-```html
-
-
-
- {\% include header.html %}
-
-
-
-
- {\% include navside.html %}
-
-
-
- {\% include footer.html %}
- {\% include googleanalytics.html %}
-
-
-```
-
-这个文件就更像一个HTML文件了,用PHP或者Python写过web应用的人看到`{\% %}`这样的标签应该不陌生,这不就是模板标签嘛。其实Jekyll也是借用了一下模板系统的,官网说明在[这里][3],看到开头第一句讲的它用了[Liquid][4]了吧。如果Jekyll的文档不能满足你的话,可以去Liquid那里查查。
-
-我解释一下`base.html`中几个标签的功能。
-
-- `{\% include header.html %}` 从`_includes`中把`header.html`包含进来放在这里
-- `{\% include navside.html %}` 同上
-- `{\{ content }}` 这句的作用是将继承这个Layout的文件中的代码,放在这里
-
-所以再看`page.html`文件就很容易了,它就是把配置项下面的内容,填补到`base.html`中的`{\{ content }}`处形成了一个文件。那么`page.html`中的`{\{ content }}`做什么用呢?因为别人也可以以`page.html`来作为自己的布局文件。
-
-入口文件`index.html`就是这么干的:
-
-```html
-layout: page
-title: 首页
-...
-```
-
-这里看到选择了page作为布局文件,那么title干嘛用的呢?其实它是在被包含的`header.html`中被用到了。来看看`header.html`怎么写的:
-
-```html
-
-{\{ page.title }} | {\{ site.title }}
-
-{\% if page.keywords %}
-
-{\% endif %}
-{\% if page.description %}
-
-{\% endif %}
-
-...
-
-```
-
-这里又使用了一些新标签——`{\{ }\}`,这个标签就是用来书写变量的,通过在配置处配置变量,或者使用系统的自定义变量,可以轻松改变页面内的一些元素或者内容。
-
-系统变量查询可以去[这里][5]
-
-其实整个主题书写就是这么简单,如果有不清楚的可以再看看官网的文档。动一动手就非常明白了。
-
-## 插入图片
-很多人感觉用Jekyll最不方便的就是插入图片了,其实我也是这么觉得的。所以只能自己去想些办法。
-
-### 图片统一存放
-图片我都放在了`/public/upload`下,所以我在插入图片的时候只要用``就可以了。
-
-### 方便的图片导入
-导入图片的方式是我将`upload`文件夹做了个软连接,放到mac的dock上就行了,有图片要用的时候直接往里面一拖。
-
-### 方便的截图
-很多时候图片都是现截取的,比如用QQ的截图工具,或者系统的截图工具,但是他们截取完都存放在了`user/Pictures`里面,来回移动太累了。我这里介绍一个Mac下的一个工具——Trickster,看图
-
-
-
-这个工具可以看到刚刚修改过的图片,而且还有一个收藏的文件夹,我每次截取完图以后,从左边往右边一拖,然后在markdown中就可以继续书写了。一点都不耗时。
-
-## 本地预览及提交
-本地预览自己的修改很容易,只要进入`username.github.io`目录,执行
-
-```
-jekyll serve
-```
-
-然后访问`http://localhost:4000`就OK了,安装Jekyll的方式自行谷歌吧...
-
-自己预览过没有问题以后,就提交到服务端吧,Git三步走
-
-```
-git add xxx
-git commit -m "xxx"
-git push
-```
-
-## 其他
-我觉得自己的这个主题设定的算是比较好修改和移植的了,如果大家有什么问题,可以尽管问。
-
-另外一些特别的功能,比如三栏、评论、谷歌分析,这些都不难,相信你稍微打开Github读一下这个主题的代码就很快明白了。
-
-代码地址戳[这里][6]
-
-[1]: /2013/04/23/deploy-jeklly-blog.html
-[2]: http://jekyllrb.com/docs/structure/
-[3]: http://jekyllrb.com/docs/templates/
-[4]: http://docs.shopify.com/themes/liquid-basics
-[5]: http://jekyllrb.com/docs/variables/
-[6]: https://github.com/suyan/suyan.github.io
\ No newline at end of file
diff --git a/_posts/tool/2014-03-20-php-debug-with-xdebug.md b/_posts/tool/2014-03-20-php-debug-with-xdebug.md
deleted file mode 100644
index c62cd3fda4..0000000000
--- a/_posts/tool/2014-03-20-php-debug-with-xdebug.md
+++ /dev/null
@@ -1,87 +0,0 @@
----
-layout: post
-title: 用Xdebug和Sublime调试PHP代码
-category: 工具
-tags: PHP
-keywords: Xdebug,Sublime,PHP
-description:
----
-
-> xdebug是php调试的好帮手,sublime是php编写的好帮手。这里只说如何配置,默认读者会用sublime和xdebug
-
-## 安装xdebug
-在mac下非常方便:
-
- brew install php55-xdebug
-
-然后进行配置,在`/usr/local/etc/php/5.5/conf.d/ext-xdebug.ini`中添加
-
- xdebug.remote_enable=1
- xdebug.remote_handler=dbgp
- xdebug.remote_host=127.0.0.1
- xdebug.remote_port=9000
- xdebug.remote_log="/var/log/xdebug/xdebug.log"
-
-重启apache
-
- sudo apachectl restart
-
-## 配置sublime
-要调试某一个项目,首先得把这个项目在sublime下保存成一个project
-
- sublime->project->save project as ...
-
-然后用[package control](https://sublime.wbond.net/installation)安装`xdebug client`
-
-接下来配置项目
-
- sublime->project->edit poject
-
-配置文件类似以下内容:
-
- {
- "folders":
- [
- {
- "follow_symlinks": true,
- "path": "."
- }
- ],
- "settings": {
- "xdebug": {
- "url": "http://my.local.website/",
- }
- }
- }
-
-其中url是项目所在url,记得在hosts里头将这个url指向127.0.0.1,还有在apache的virtualhost里将其指向项目根目录
-
-这样就OK了,准备开启调试吧
-
-## 开启调试
-开启调试方式也比较简单,在想要加断点的地方右键
-
- xdebug->Add/Remove breakpoint
-
-这样项目在运行到本行的时候就会停止下来
-
-然后开始调试,在菜单栏选择
-
- tools->xdebug->start debugging(launch browser)
-
-sublime会自动打开浏览器,进入配置时写的网站链接,进行调试
-
-调试中所用的功能可以在调试文件中右键查看之
-
-## 可能问题
-
-### 无法跟踪断点
-这可能是xdebug端口被占用,按Ctrl+`或者菜单栏View->show Console查看错误信息,有可能是xdebug端口已经被占用的缘故。
-
-在sublime xdebug中关闭调试,或者重启sublime可以解决这个问题。
-
-## 参考
-1. [Debugging with Xdebug and Sublime Text 3](http://www.sitepoint.com/debugging-xdebug-sublime-text-3/)
-
-
-
diff --git a/_posts/tool/2014-04-10-install-vagrant-in-mac.md b/_posts/tool/2014-04-10-install-vagrant-in-mac.md
deleted file mode 100644
index 7bd9450cdc..0000000000
--- a/_posts/tool/2014-04-10-install-vagrant-in-mac.md
+++ /dev/null
@@ -1,79 +0,0 @@
----
-layout: post
-title: 在Mac下安装使用Vagrant
-category: 工具
-tags: [Mac, Vagrant]
-keywords: Mac,Vagrant
-description:
----
-
-> Vagrant是一款用来构建虚拟开发环境的工具,它其实算是一个跨平台的虚拟机管理工具。
-
-## 安装
-
-### 安装Vagrant
-Vagrant的旧版本是可以通过gem来安装的,但是由于依赖实在太多,官方放弃了这种安装方式,建议下载官方安装包来安装。
-
-下载地址在[http://www.vagrantup.com/downloads](http://www.vagrantup.com/downloads)。下载好pkg包后,点击安装即可。
-
-### 安装Virtualbox
-Vagrant依赖现有的虚拟机软件来管理虚拟机,如Virtualbox, Vmware Fusion, Parallel Desktop等,其中最方便的是VirtualBox,所以我选择了Virtualbox。
-
-下载地址在[https://www.virtualbox.org/wiki/Downloads](https://www.virtualbox.org/wiki/Downloads)。同样下载好后直接安装。
-
-## 使用
-
-### 下载启动Box
-在Vagrant中,box是一种打包好的镜像,通过这个镜像,可以生成相应的虚拟机。box可以通过[官方网站](http://www.vagrantbox.es/)下载,也可以自己制作,在团队内分享。
-
-官方的Box可以在创建时自动下载。例如以下步骤
-
- cd ~/Documents/Vagrant/Ubuntu # 进入一个vagrant虚拟机目录,一个目录管理一个虚拟机
- vagrant init hashicorp/precise32 # 创建一个ubuntu的虚拟机
- vagrant up # 启动这个虚拟机
-
-通过这个步骤,vagrant会去box列表中找`hashicorp/precise32`这个镜像,如果没有就去官方下载。Box被保存在`~/.vagrant`下。通过命令
-
- vagrant box list
-
-可以查看已经下载的box。如果想以这个box再建立一个虚拟机,只要再创建一个目录,例如`~/Documents/Vagrant/Ubuntu32`,然后执行
-
- vagrant init hashicorp/precise32
-
-即可。
-
-### 操作虚拟机
-操作虚拟机时,必须进入刚刚建立的目录中去,这个目录中必须含有`init`命令建立的Vagrantfile文件。常用命令有
-
- $ vagrant init # 初始化
- $ vagrant up # 启动虚拟机
- $ vagrant halt # 关闭虚拟机
- $ vagrant reload # 重启虚拟机
- $ vagrant ssh # SSH 至虚拟机
- $ vagrant status # 查看虚拟机运行状态
- $ vagrant destroy # 销毁当前虚拟机
-
-### 共享文件夹
-通过Vagrant建立的虚拟机和Mac共享文件非常容易,虚拟机中`/vagrant`目录会映射到我们本地虚拟机目录中。例如
-
- cd ~/Documents/Vagrant/Ubuntu
- vagrant up
- vagrant ssh
- cd /vagrant
- ls
-
-这个时候,我们会看到,这里显示的文件和`~/Documents/Vagrant/Ubuntu`下是一样的。
-
-### 共享Box
-如果只有上述功能的话,那么Vagrant的作用就不是那么`杀手级`了。通过命令
-
- vagrant package
-
-可以将一个虚拟机打包成Box,供别人使用。别人只要用打包的box来创建一个虚拟机即可,例如
-
- vagrant box add myubuntu ~/Documents/Vagrant/Ubunutu/ubunut.box
-
-## 参考
-
-1. [Vagrant Docs](http://docs.vagrantup.com/v2/)
-2. [使用 Vagrant 打造跨平台开发环境](http://blog.segmentfault.com/fenbox/1190000000264347)
\ No newline at end of file
diff --git a/_posts/tool/2015-01-10-use-dropzone-and-qiniu-to-store-blog-images.md b/_posts/tool/2015-01-10-use-dropzone-and-qiniu-to-store-blog-images.md
deleted file mode 100644
index c7bedca3bb..0000000000
--- a/_posts/tool/2015-01-10-use-dropzone-and-qiniu-to-store-blog-images.md
+++ /dev/null
@@ -1,70 +0,0 @@
----
-layout: post
-title: 使用Dropzone和七牛优化博客图床
-category: 工具
-tags: Blog
-keywords: Dropzone,Qiniu,七牛,图床,博客
-description:
----
-
-> 之前我在用SAE的Storage作为博客图床,但是令我非常不爽的是没有一个很好的上传和获得公共链接的方法。现在总算用Dropzone和七牛把这个问题解决了,下面是我上传图片和获得URL的操作,方法再往下看。
-
-
-
-## 设置七牛帐号
-
-> [七牛](http://www.qiniu.com)是国内口碑不错的一个云存储为主的公司。它的特点应该就在图片存储上,有非常方便的上传SDK和图片处理流,用来作为博客图床非常合适,而且价格不贵,每月有免费的10G流量。
-
-1. 去七牛注册帐号
-
- 刚刚创建的帐号是测试帐号,完成个人认证就可以成为标准帐号,获得10G的存储空间和各10G的上传下载流量。
-
- 
-
-2. 创建一个空间
-
- 创建空间也比较容易,记得选择公开空间。
-
- 
-
-## 设置Dropzone
-
-> [Dropzone](https://aptonic.com/dropzone3/)是我很早就非常喜欢的一个软件。它通过拖拽的方式,增强了文件的处理流程。一直懒得给它开发插件,没想到七牛的SDK如此好用,所以今天折腾了一下搞定了。
-
-1. 下载软件
-
- 这个软件可以在App Store上直接购买,但是买到的是功能受限的,它不能操作外部文件。不过没有关系,再从官网上下载非沙箱版本,然后覆盖掉Application文件夹下的即可。
-
-2. 安装Qiniu插件
-
- 我把这个插件放到了[Github](https://github.com/suyan/scripts/tree/master/Dropzone%20Action)上,戳[这里](https://github.com/suyan/scripts/blob/master/Dropzone%20Action/Qiniu.dzbundle.zip?raw=true)下载。
- 这个插件已经上传到了官方网站的非官方插件处,可以直接戳[这里](https://aptonic.com/actions/install.php?bundle_name=Qiniu)下载。
-
-3. 安装插件
-
- 下载后的是一个zip包,把这个包解压以后双击安装即可。
-
-4. 启用插件
-
- 从增加列表中选择我们安装好的七牛插件。
-
- 
-
- 然后填写配置:
-
- - server: 七牛上的空间名
- - username: 七牛的access_key
- - password: 七牛的secret_key
- - remote path(可选): 本地同步图片的目录,如果你希望本地也存一份图片,选一个地址即可
- - root url: 七牛的公共链接根目录
-
- 
-
- 
-
-## 其他建议
-
-利用Dropzone还有很多可利用的技巧,例如增加一个ImageOptim应用来压缩图片,然后再进行上传。
-
-对于临时图片,可以直接上传到Imgur获得链接。
-
diff --git a/_posts/tool/2016-11-09-my-writing-tools.md b/_posts/tool/2016-11-09-my-writing-tools.md
deleted file mode 100644
index 54a5d3bdc3..0000000000
--- a/_posts/tool/2016-11-09-my-writing-tools.md
+++ /dev/null
@@ -1,96 +0,0 @@
----
-layout: post
-title: 我使用的收藏,写作和分享工具
-category: 工具
-tags: Tools
-keywords: 收藏,写作,发布,工具
----
-
-> 我日常非工作时间外的学习,基本流程就是收藏,写作和分享,所以我把这三个集合写在一篇文章里面。同时记录下来这个过程,可以让我清晰的知道,我应该在做哪件事情的时候,用哪个工具。
-
-## 收藏工具
-
-这个部分准确的说应该是收藏和阅读,因为只收藏不阅读是没有任何意义的。
-
-### 网站的收藏
-
-网站的收藏我只使用Safari自带的收藏夹,因为它已经完全满足我的要求:添加方便,全设备同步以及检索方便(使用Alfred直接打开)。这里可以看一下我的截图:
-
-
-
-我主力浏览器是Safari,因为在大屏下,侧边栏的存在可以很方便的打开常用网站。另外通过Alfred打开已经保存的网站也非常迅速,如下图:
-
-
-
-### 文章及微博等收藏
-
-其他的所有收藏,我都用Instapaper来做,这个软件被Pinterest收购以后Pro功能都免费发布了,简直是良心中的良心。Pro的必备功能包括全文搜索,文章片段高亮以及笔记功能,都可以让阅读和笔记体验提升不少。
-
-我文章的阅读来源主要是Reeder,然后是微信公众号,知乎,微博和即刻等。因为来源太广,使用这些来源自带的收藏功能经常让我忘了去哪儿找我要的东西。所以我会把它们全部集合到Instapaper中来。
-
-这里附一张我Reeder的截图:
-
-
-
-## 写作工具
-
-### 博客写作
-
-写公开博客的时候,我对工具只有以下几个要求
-
-1. 支持原生Markdown
-2. 支持显示文章TOC
-3. 支持文件管理
-4. 可以灵活导出到其他格式
-
-尝试过Ulyssess,Quiver,Day One等工具之后,我选择了**MWweb**。MWeb的使用体验非常棒,这里是我写这篇文章时的截图
-
-
-
-可以看出几乎满足了我的所有要求,左边我导入了我存放博文的github本地目录,然后直接可以添加文件和书写,创建文件的时候还自动帮我以当前日期命名。我现在博客的格式几乎与此如出一辙,也是我最喜欢的管理和阅读布局。右边栏有我当前文章的目录,可以在不同的子标题间方便地跳转。
-
-对于导出部分来说,MWeb也做的面面俱到,大部分我使用的格式都包含了进去。值得一提的是MWeb对于Evernote的支持非常好,格式速度管理都很不错,大家可以试试。
-
-P.S. 我博客里的图片都是通过之前的[一个工具](/2015/01/10/use-dropzone-and-qiniu-to-store-blog-images.html)上传到七牛,然后直接粘贴到这里的。
-
-### 知识总结
-
-对于总结性的笔记,整理和检索的需求比书写方便更为重要,因为总结的目的本来就是为了以后用到的时候方便立刻找到。从这方面来说,至今没有发现一个软件可以比得上Evernote。这里是我的笔记一览:
-
-
-
-这张图暴露了我是一个CS找工作狗 0_0 刷题真是没有办法的事情啊,北美面试全是算法题... 然后下图是我如何使用标签搜索笔记:
-
-
-
-Evernote在检索上也是做到最好的了,其中还包括了PDF和图片的搜索,都是瞬间完成。下图是Evernote自带搜索框,Alfred的我就不贴了,也支持标题搜索和内容搜索。
-
-
-
-Evernote的使用,我仅限于上述提到的,最多再有一个多平台同步。对于它推崇的剪藏及其他快速笔记的功能我一概不用,因为我得确保自己知识库里面的东西,都是认真整理过的。
-
-### 片段笔记
-
-有时候也经常需要片段的笔记,比如一个人给你发了一个地址,或者你脑海里突然有一个念头。如果我在使用Mac,那么Unclutter已经足够好用了,鼠标移动到顶栏,下滑,笔记即可。
-
-
-
-如果是在手机上需要记录或者一些稍微重要点的事情或者日记,那么Day One是我的不二选择。这个软件自动帮你标记好所有你记录片段时的状态,包含日期,GPS,当天天气(虽然可能不需要 -_-)。另外在Mac下顶栏的快捷访问方式也非常方便(这里不附图了,因为敏感信息太多)。
-
-## 分享工具
-
-### 博客发布
-
-博客我使用Github + Jekyll来生成,所以没有什么步骤,只要写好文章以后去命令行push一下就好。本来这个过程也可以通过一些工具来简化的,但是我觉得提交过程还是检查一下的好。
-
-### 微博/Twitter分享
-
-Mac下的各个软件已经把分享功能做的比较简单了,这里我分享一下Mac侧边栏的快速分享。这里可以简单快速的写一些东西发布到各个社交网站,把Social组件加进来即可。
-
-
-
-如果涉及到图片的分享,也可以使用Dropzone的扩展来做,直接拖图片到相应扩展即可。目前只有Twitter分享的扩展,如果有时间我可以写一个Weibo的。
-
-
-
-
diff --git a/_posts/tool/2016-12-30-deploy-l2tp-on-ubuntu.md b/_posts/tool/2016-12-30-deploy-l2tp-on-ubuntu.md
deleted file mode 100644
index f88eafbb6e..0000000000
--- a/_posts/tool/2016-12-30-deploy-l2tp-on-ubuntu.md
+++ /dev/null
@@ -1,254 +0,0 @@
----
-layout: post
-title: 在 Ubuntu 下部署 L2TP VPN
-category: 工具
-tags: Tools
-keywords: 科学上网,工具,VPN,L2TP
----
-
-回国之后为了正常上网,还是得部署一个 VPN 自用。之前写过[在ubuntu下搭建pptp vpn服务器](/2013/12/11/deploy-pptp-vpn-in-ubuntu.html),本来准备直接拿来用的,结果发现 MacOS Sierra 竟然不支持 PPTP 了 T_T 只好重新选择一个方式,这篇主要讲如何部署 L2TP VPN 在 Ubuntu 下,以及如何通过 Mac 连接上去。
-
-## 服务端
-
-我的环境是 Linode Tokyo + Ubuntu 14.04
-
-如果不像自己配置,这里有一键脚本,非常方便。[setup-simple-ipsec-l2tp-vpn](https://github.com/philpl/setup-simple-ipsec-l2tp-vpn).
-
-```bash
-wget https://raw.github.com/philpl/setup-simple-ipsec-l2tp-vpn/master/setup.sh
-sudo sh setup.sh
-```
-
-如果喜欢手动安装,可以往下看。我在root下执行的,所以没有加sudo,如果不是root用户记得加上。
-
-### 安装必备软件
-
-```bash
-apt-get update
-apt install software-properties-common
-add-apt-repository ppa:openswan/ppa
-apt-get update
-apt-get install openswan xl2tpd ppp lsof
-```
-
-### 配置IP转发
-
-#### 更新IP转发
-
-```bash
-echo "net.ipv4.ip_forward = 1" | tee -a /etc/sysctl.conf
-echo "net.ipv4.conf.all.accept_redirects = 0" | tee -a /etc/sysctl.conf
-echo "net.ipv4.conf.all.send_redirects = 0" | tee -a /etc/sysctl.conf
-echo "net.ipv4.conf.default.rp_filter = 0" | tee -a /etc/sysctl.conf
-echo "net.ipv4.conf.default.accept_source_route = 0" | tee -a /etc/sysctl.conf
-echo "net.ipv4.conf.default.send_redirects = 0" | tee -a /etc/sysctl.conf
-echo "net.ipv4.icmp_ignore_bogus_error_responses = 1" | tee -a /etc/sysctl.conf
-for vpn in /proc/sys/net/ipv4/conf/*; do echo 0 > $vpn/accept_redirects; echo 0 > $vpn/send_redirects; done
-```
-
-#### 设置IP table
-
-```bash
-MYIP=`/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"`
-iptables -t nat -A POSTROUTING -j SNAT --to-source $MYIP -o eth0
-```
-
-### 配置IPSEC
-
-#### IPSEC 基本设置
-```bash
-MYIP=`/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"`
-
-cat >/etc/ipsec.conf</etc/ipsec.secrets</etc/xl2tpd/xl2tpd.conf</etc/ppp/options.xl2tpd</etc/ppp/chap-secrets< 网络 点击左下角➕然后选择 VPN,Type选择 L2TP over IPSec。
-
-- Server Address: 服务器ip
-- Account name: 前面设置的client名
-
-点开认证设定
-
-- Password: 之前设置的secret
-- Shared Secret: 之前设置的sharedpassword
-
-别忘了在高级那里选择,所有流量都通过此网络转发。
-
-## 参考
-
-[l2tp ipsec in linode](http://tacy.github.io/blog/2014/12/24/L2tp-ipsec-in-linode/)
-
diff --git a/_posts/tool/2016-12-31-deploy-shadowsocks-on-ubuntu.md b/_posts/tool/2016-12-31-deploy-shadowsocks-on-ubuntu.md
deleted file mode 100644
index c7052ec689..0000000000
--- a/_posts/tool/2016-12-31-deploy-shadowsocks-on-ubuntu.md
+++ /dev/null
@@ -1,62 +0,0 @@
----
-layout: post
-title: 在 Ubuntu 下部署 Shadowsocks
-category: 工具
-tags: Tools
-keywords: 科学上网,工具,VPN,Shadowsocks
----
-
-回国以后先试了部署 L2TP VPN([在 Ubuntu 下部署 L2TP VPN](/2016/12/30/deploy-l2tp-on-ubuntu.html)),结果发现 VPN 稳定性还是略差,经常掉线。其实对于一般的浏览网页需求,Shadowsocks 就足够了,所以就有了此文。
-
-## 服务端
-
-我的环境是 Linode Tokyo + Ubuntu 14.04
-
-这里依然提供一个一键脚本,[Shadowsocks Python版一键安装脚本](https://teddysun.com/342.html)。
-
-想手动配置的往下看。
-
-### 安装 Shadowsocks
-
-```bash
-apt-get update
-apt-get install python-pip
-pip install shadowsocks
-```
-
-### 配置 Shadowsocks
-
-下面的password那儿自己修改一下
-
-```bash
-MYIP=`/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"`
-
-cat >/etc/shadowsocks.json<&1 | grep '^User: ' | tail -n1
-```
-
-#### 运行相关
-
-- 启动容器并执行一个命令(交互)
-
-```
-# -t 终端
-# -i 交互操作
-docker run -it ubuntu /bin/bash
-
-# 运行一个hello word然后就自动关闭
-docker run image_name echo "hello word"
-
-# 命名并启动容器
-docker run --name test ubuntu
-
-# 后台运行一个容器
-docker run -d -it ubuntu
-
-# 映射端口
-docker run -p 8080:8080 ubuntu
-
-# 挂载volumn
-docker run -v ./test:/var/www
-
-# container 内 root 拥有真正root权限
-docker run --privileged=false
-
-# 启动完镜像后自动删除
-docker run -it --rm ubuntu bash
-```
-
-- 附着到正在运行的容器, 附着完以后退出会导致容器也终止
-
-```
-docker attach cid
-```
-
-- 进入正在运行的 container 并且执行
-
-```
-docker exec -it 839a6cfc9496 /bin/bash
-```
-
-- 在容器中运行一段程序
-
-```
-docker run ubuntu apt-get update
-```
-
-- 拷贝文件出来
-
-```
-docker cp cid:/container_path to_path
-```
-
-#### 修改容器
-
-image相当于类,container相当于实例,不过可以动态给实例安装新软件,然后把这个container用commit命令固化成一个image
-
-- 提交一个commit
-
-```
-docker commit cid new_image_name
-```
-
-- 删除容器
-
-```
-docker rm cid
-
-# 强制删除
-docker rm -f cid
-
-# 删除所有容器
-docker rm `docker ps -a -q`
-```
-
-- 状态修改
-
-```
-docker start/stop/kill/restart cid
-```
-
-- 更改名字
-
-```
-docker rename old new
-```
-
-#### 链接容器
-
-sonar容器连接到mysql容器,并将mysql容器重命名为db。这样,sonar容器就可以使用db的相关的环境变量了。
-
-```
-docker run -it --name sonar -d -link mysql:db tpires/sonar-server
-```
-
-### 仓库操作
-
-- 登录到docker仓库
-
-```
-docker login
-```
-
-- 上传镜像
-
-```
-docker push new_image_name
-```
-
-## Dockerfile 常用命令
-
-有了 Dockerfile 可以自定义一些自己需要的镜像,在熟悉了 Docker 基本操作,然后使用过一些别人提供好的镜像以后,难免需要自己修改一部分。
-
-### FROM
-
-指定基础镜像。例如:
-
-- ubuntu
-- nginx
-- redis
-- ...
-
-```
-FROM nginx
-```
-
-### RUN
-
-执行一些命令
-
-```
-RUN echo 'Hello, Docker!
' > /usr/share/nginx/html/index.html
-```
-
-每个RUN命令都会在容器中建立一层,所以尽量合并多个命令。例如
-
-```
-RUN buildDeps='gcc libc6-dev make' \
- && apt-get update \
- && apt-get install -y $buildDeps \
- ...
-```
-
-### COPY
-
-复制文件到指定目录 source -> target
-
-```
-COPY ./package.json /usr/src/app
-```
-
-### CMD
-
-容器的启动命令
-
-```
-CMD ["nginx", "-g", "daemon off;"]
-```
-
-这个命令可以在启动时被覆盖。另外它也可以为 ENTRYPOINT 提供参数。
-
-> CMD 理论上只能执行一次,如果想要执行两个命令,需要使用 `&` 来连接两个命令,或者使用一个bash文件。更为高级一点的方法是用supervisor来管理
-
-### ENTRYPOINT
-
-ENTRYPOINT 和 CMD 有一部分重复工作,但是 ENTRYPOINT 可以让容器像软件一样执行。例如
-
-```
-ENTRYPOINT /bin/echo
-```
-
-在容器启动时,之后增加的内容都属于这个命令的参数。
-
-### ENV
-
-设置环境变量。
-
-`ENV key value`
-
-### ARG
-
-构建参数,在容器启动后不会存在。
-
-### VOLUME
-
-定义匿名卷,以免用户忘了挂载volumn,导致大量写入。这个 Volume 在容器启动前可以添加内容,但是并不是实际操作用户挂载的内容。在用户挂载完 volume 后,原来写在这里的内容会被复制到用户挂载的目录。
-
-> 注意:在 VOLUME 命令之后对这个目录的所有操作,将被忽略。
-
-### EXPOSE
-
-申明端口,可以用来默认映射端口,以及容器间互通。
-
-```
-EXPOSE 22 80
-```
-
-### WORKDIR
-
-指定工作目录。不仅是当前 docker 中的目录,同时也是运行容器时刚刚登录以后的目录。
-
-### USER
-
-指定当前用户。
-
-```
-RUN groupadd -r redis && useradd -r -g redis redis
-USER redis
-RUN [ "redis-server" ]
-```
-
-### HEALTHCHECK
-
-健康检查
-
-### ONBUILD
-
-当此容器作为别的容器的基础容器时操作内容
-
-```
-FROM node:slim
-RUN "mkdir /app"
-WORKDIR /app
-ONBUILD COPY ./package.json /app
-ONBUILD RUN [ "npm", "install" ]
-ONBUILD COPY . /app/
-CMD [ "npm", "start" ]
-```
-
-## Docker-compose 常用指令
-
-### depends_on
-
-这个不仅可以保证build的先后顺序,还可以省去links的设置
-
-### links
-
-和docker run命令一致,主要原因是在每次新开启container的时候,port可能会变,所以有了这个设置可以保证每次都可以绑定到正确的值。
-
-## 实例操作
-
-### 创建一个LAMP的项目
-
-首先是目录结构
-
-```
-├── README.md
-├── apache
-│ └── virtualhost.conf
-├── docker-compose.yml
-├── mysql
-│ ├── Dockerfile
-│ └── my.cnf
-├── php
-│ ├── Dockerfile
-│ └── php.ini
-└── src
- └── index.php
-```
-
-创建 docker-compose.yml
-
-```yml
-version: '2'
-services:
- mysql:
- image: mysql
- ports:
- - "3306:3306"
- environment:
- MYSQL_ROOT_PASSWORD: password
- MYSQL_DATABASE: phpdata
- MYSQL_USER: user
- MYSQL_PASSWORD: password
- volumes:
- - dbdata:/var/lib/mysql
- php:
- build: ./php
- ports:
- - '8080:80'
- volumes:
- - ./src:/var/www/html
- - ./apache:/etc/apache2/sites-enabled/
- depends_on:
- - mysql
- phpmyadmin:
- image: phpmyadmin/phpmyadmin
- ports:
- - '8081:80'
- links:
- - mysql:db
- environment:
- PMA_USER: root
- PMA_PASSWORD: password
- volumes:
- - adminsessions:/sessions
- depends_on:
- - mysql
- - php
-volumes:
- dbdata:
- adminsessions:
-```
-
-## 问题记录
-
-### Mysql 挂载 volume 后启动时显示无权限
-
-设置mysql的启动模式 `privileged:true`
-
-另外这个问题一般不会发生,我之前遇到主要原因是我把多个 volume 都映射到了一个上面,导致目录内部读写发生冲突。
-
-
diff --git a/index.md b/index.md
index d2cb084da6..ef70c4a621 100644
--- a/index.md
+++ b/index.md
@@ -15,4 +15,4 @@ layout: post
这个博客通过 [Jekyll](http://jekyllrb.com/) 生成,部署在 [Github](https://pages.github.com),主题基于 [3-Jekyll](https://github.com/P233/3-Jekyll) 修改生成,非常感谢 [Peiwen Lu](https://github.com/P233) 开发出这么漂亮的主题。
-我博客的源码托管在[Github](https://github.com/suyan/suyan.github.io)上,如果有任何改进意见,欢迎讨论。
+我博客的源码托管在[Github](https://github.com/chenjun0210/chenjun0210.github.io)上,如果有任何改进意见,欢迎讨论。
From f83b405a1a3cb688afe742bce0c612a681cb0305 Mon Sep 17 00:00:00 2001
From: let_go <754816138@qq.com>
Date: Sun, 10 Sep 2017 21:23:46 +0800
Subject: [PATCH 2/8] Update CNAME
---
CNAME | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CNAME b/CNAME
index cbf38b3d03..2de97096ea 100644
--- a/CNAME
+++ b/CNAME
@@ -1 +1 @@
-cj1024.com
\ No newline at end of file
+chenjun0210.github.io
From 53fe0c43b93d5e90ae8038f149f25d5d38d61860 Mon Sep 17 00:00:00 2001
From: let_go <754816138@qq.com>
Date: Sun, 10 Sep 2017 21:24:37 +0800
Subject: [PATCH 3/8] Update CNAME
---
CNAME | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CNAME b/CNAME
index 2de97096ea..cbf38b3d03 100644
--- a/CNAME
+++ b/CNAME
@@ -1 +1 @@
-chenjun0210.github.io
+cj1024.com
\ No newline at end of file
From 36ba9da6a1a99afcd453d269528797ea9c2c48c6 Mon Sep 17 00:00:00 2001
From: let_go <754816138@qq.com>
Date: Sun, 10 Sep 2017 21:28:17 +0800
Subject: [PATCH 4/8] Update _config.yml
---
_config.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/_config.yml b/_config.yml
index 4fae492cee..89419b371d 100644
--- a/_config.yml
+++ b/_config.yml
@@ -6,7 +6,7 @@ description: > # this means to ignore newlines until "baseurl:"
baseurl: "" # the subpath of your site, e.g. /blog/
url: cj1024.com # the base hostname & protocol for your site
rss_url: /pages/feed.xml
-author:陈 军
+author:chen jun
# Sidebar filter
# Choose 'tag' or 'category' as filter in sidebar.
From c97aab73247823aa7b1f6e924f3ea6efc71c06b8 Mon Sep 17 00:00:00 2001
From: let_go <754816138@qq.com>
Date: Sun, 10 Sep 2017 21:33:52 +0800
Subject: [PATCH 5/8] Update _config.yml
---
_config.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/_config.yml b/_config.yml
index 89419b371d..83f0847d1c 100644
--- a/_config.yml
+++ b/_config.yml
@@ -6,7 +6,7 @@ description: > # this means to ignore newlines until "baseurl:"
baseurl: "" # the subpath of your site, e.g. /blog/
url: cj1024.com # the base hostname & protocol for your site
rss_url: /pages/feed.xml
-author:chen jun
+#author:chen jun
# Sidebar filter
# Choose 'tag' or 'category' as filter in sidebar.
From c05c0d6380e5afabc93ac782c9249e4fd00ecb53 Mon Sep 17 00:00:00 2001
From: let_go <754816138@qq.com>
Date: Sun, 10 Sep 2017 21:34:20 +0800
Subject: [PATCH 6/8] Update _config.yml
---
_config.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/_config.yml b/_config.yml
index 83f0847d1c..50ea0699ff 100644
--- a/_config.yml
+++ b/_config.yml
@@ -6,7 +6,7 @@ description: > # this means to ignore newlines until "baseurl:"
baseurl: "" # the subpath of your site, e.g. /blog/
url: cj1024.com # the base hostname & protocol for your site
rss_url: /pages/feed.xml
-#author:chen jun
+author: chen jun
# Sidebar filter
# Choose 'tag' or 'category' as filter in sidebar.
From 77d5065d895ad1d43b1718e646f8a57728170073 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=99=88=E5=86=9B?=
Date: Sun, 10 Sep 2017 22:19:38 +0800
Subject: [PATCH 7/8] Deleting files
---
README.md | 2 +-
...of-2014.md => 2017-09-10-deeplearnBook.md} | 2 +-
.../2016-11-17-airbnb-boggle-game.md | 7 --
.../2013-08-01-the-importent-of-writing.md | 19 +---
.../2013-04-23-general-bootstrap-resources.md | 30 ------
.../tech/2012-09-19-php-session-security.md | 102 ------------------
.../2012-12-30-share-windows-and-linux.md | 42 --------
7 files changed, 3 insertions(+), 201 deletions(-)
rename _posts/book/{2014-03-14-book-list-of-2014.md => 2017-09-10-deeplearnBook.md} (73%)
delete mode 100644 _posts/interview/2016-11-17-airbnb-boggle-game.md
delete mode 100644 _posts/resource/2013-04-23-general-bootstrap-resources.md
delete mode 100644 _posts/tech/2012-09-19-php-session-security.md
delete mode 100644 _posts/tool/2012-12-30-share-windows-and-linux.md
diff --git a/README.md b/README.md
index f2860beaea..24f0eeba70 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
### 我的博客
-地址:[cj1024.com](cj1024.com)
+地址:[cj1024.com](http://cj1024.com)
### 安装说明
diff --git a/_posts/book/2014-03-14-book-list-of-2014.md b/_posts/book/2017-09-10-deeplearnBook.md
similarity index 73%
rename from _posts/book/2014-03-14-book-list-of-2014.md
rename to _posts/book/2017-09-10-deeplearnBook.md
index cb4e01b1e5..91ba242a50 100644
--- a/_posts/book/2014-03-14-book-list-of-2014.md
+++ b/_posts/book/2017-09-10-deeplearnBook.md
@@ -1,6 +1,6 @@
---
layout: post
-title: 2014阅读书单
+title: 2017阅读书单
category: 读书
keywords: 阅读,书单,2014
---
\ No newline at end of file
diff --git a/_posts/interview/2016-11-17-airbnb-boggle-game.md b/_posts/interview/2016-11-17-airbnb-boggle-game.md
deleted file mode 100644
index 57edd5a049..0000000000
--- a/_posts/interview/2016-11-17-airbnb-boggle-game.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-layout: post
-title: Airbnb Boggle Game
-category: 面试
-tags: Airbnb,Interview
-keywords: Airbnb,Interview,Boogle Game
----
\ No newline at end of file
diff --git a/_posts/life/2013-08-01-the-importent-of-writing.md b/_posts/life/2013-08-01-the-importent-of-writing.md
index ec66a089df..6ca148f5b9 100644
--- a/_posts/life/2013-08-01-the-importent-of-writing.md
+++ b/_posts/life/2013-08-01-the-importent-of-writing.md
@@ -5,21 +5,4 @@ category: 生活
tags: Essay
keywords: 写作,writing
description: 不再学习技术或做项目,就不再产生内容,这就是我从6月中旬到现在都没有更新的原因
----
-
-最近都没有怎么上微博,昨天上去看到这样一句话,让我挺有感触
-
-
-
-我自己写的东西大部分都是一些遇到问题记录和总结,很少能有一些“创造性”的东西。
-
-记得Fenng在一篇文章里讲到现在的社交网站中,98%的人在消费信息,只有2%的人在产生信息。
-
-我一直属于这98%的人,没有办法,在大学之前从来没有觉得写作的重要性,写出来的东西也是为了完成作文800字的限制。现在想象一下,感觉自己真是太文盲了,自己能写的好像也只有议论文了。提一个议论点,然后摆一些论据,最后总结一下,800字搞定收工。甚至在写一些个人技术学习总结的时候都没有很好的利用好议论文方法,仅仅是一个流水陈述,想到哪里写到哪里。
-
-曾经也想过提高一下个人写作水平,想过的一个方式是翻译外文,把今天的hacker news上或者techmeme上感兴趣的一篇文章翻译下来。尝试过一次太受打击,就放弃了。虽然看这些文章基本上没有什么问题,但是要翻译的时候就英语水平捉急了,翻译一篇可能要耗费好多小时的时间。以前翻译过一篇[OpenStack Nova内部机制的文章](/2012/11/08/openstack-nova-internal.html),因为没有找到译文,自己又比较需要这方面的信息,所以尝试了一下,结果发现就这样一个自己比较了解的东西,都翻译的惨不忍睹。
-
-现在每天除了学习英语,其余时间最多的就是看看微信上的公众帐号,小道消息、道哥黑板报、Mac Talk都是我比较喜欢的公众帐号。虽然我没有他们那样深的积累和话题,或许我能从个人理解上写一些容易上手的话题。
-
-
-
+---
\ No newline at end of file
diff --git a/_posts/resource/2013-04-23-general-bootstrap-resources.md b/_posts/resource/2013-04-23-general-bootstrap-resources.md
deleted file mode 100644
index 7a0628f7a2..0000000000
--- a/_posts/resource/2013-04-23-general-bootstrap-resources.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-layout: post
-title: Bootstrap常用资源
-category: 资源
-tags: Bootstrap
-description: 列举自己搜集的Bootstrap资源,给像我这样前端不太行的WEB开发者
----
-
-### 官方资源
-
-- [官方首页](http://twitter.github.io/bootstrap/)
-
-### 字体图标
-
-- [Font Awesome](http://fortawesome.github.io/Font-Awesome/)
-
- 扩展bootstrap的图标,是基于css的,非常漂亮,而且还支持视网膜屏,但是貌似手机上没法支持(测试过UC)
-
-### 下拉按钮
-
-- [Bootstrap Mutiselect](http://davidstutz.github.io/bootstrap-multiselect/)
-
- 多选下拉列表插件
-
-### 表单扩展
-
-- [Bootstrap Form Helpers](http://vincentlamanna.com/BootstrapFormHelpers/index.html)
-
- 扩展常用的表单功能,包括日期选择、时间选择等
-
diff --git a/_posts/tech/2012-09-19-php-session-security.md b/_posts/tech/2012-09-19-php-session-security.md
deleted file mode 100644
index 94768c793b..0000000000
--- a/_posts/tech/2012-09-19-php-session-security.md
+++ /dev/null
@@ -1,102 +0,0 @@
----
-layout: post
-title: PHP Session 原理及安全性提升
-category: 技术
-tags: PHP
-description: PHP操作Session的原理及提升安全性时的一个问题
----
-
-### Session和Cookie基本介绍
-
-相同点:两者都是保存用户的临时信息,以方便用户和网站之间的交互
-
-不同点:Session保存在服务器端,只有服务器端才可查看和修改。服务器端通过客户端在cookie中携带的session_id来获得保存在服务器端的用户数据。Cookie保存在客户端,服务端和客户端都可以对其进行修改。
-
-### Session的工作原理
-
-首先测试如下一段代码
-
- ’;//显示此次交互的session_id
- ?>
-
-页面显示结果为
-
- Session id:ihrk96384qjvvsqmce0dlkla04
-
-即使不停刷新页面,依然不变,说明服务器端是可以识别出客户端,那么它是如何做到的呢?
-
-我们可以查看一下他们的第一次HTTP交互(先清空一次cookie和缓存再测试)
-
- Request Header:
- GET /phptest/test2.php HTTP/1.1
- Host: localhost
- Cookie:
- Response Header:
- Set-Cookie: PHPSESSID=sastrf9cikeij6meoe3055brq3; path=/
-
-
-为了说明问题,我只取要用到的信息,从请求头可以看到,这个时候客户端没有给服务端传Cookie内容。而返回的头信息中,服务端指明了set-cookie要设置一个PHPSESSID的内容,保存在”/”目录下。
-
-来看第二次交互:
-
- Request Header:
- GET /phptest/test2.php HTTP/1.1
- Host: localhost
- Cookie:PHPSESSID=sastrf9cikeij6meoe3055brq3
- Response Header:
- Set-Cookie:
-
-
-这一次结果显示服务器端没有再要求写Cookie,而客户端主动上传了上次获得的PHPSESSID值,也就是这种机制,使服务端”认识”了客户端。只要服务端没有要求再次写session,则以后的交互将一直以此session_id作为客户端的身份标志。
-
-### 服务器端修改Session_id
-
-当然session_id不是永久不变的,当我们清空过一次Cookie以后就发现以前登录了的网站都得重新登陆。再次登陆的时候,我们又会以新的session_id来进行重新确认身份。(注:还有别的方式可以传递session_id值,例如query string等)。
-
-其实从上一个例子中我们就可以看到,服务器端修改session_id其实是通过重写一次cookie来实现的,这次重写发生在一次请求完成以后,即传回的HTTP头中说明的。
-
-为了防止Session劫持,我们可能需要通过每次请求都更改session_id来确保用户是本人登录的。在php中,可以使用以下方式:
-
- ’;
- session_regenerate_id(true);//重置session_id,并使原session无效
- echo ‘New Session id:’.session_id().‘
’;
- ?>
-页面显示结果为:
-
- Old Session id:mqk5sfudpu9ikgp49vc825ggo6
- New Session id:mrck9n85v190reupsni4ob6lo5
-
-可见session_id在使用了session_regenerate_id()以后发生了变化,变化写入方式同第二点介绍的,服务器端在返回的HTTP头中加入Set-Cookie。
-
-### session_regenerate_id()的一个问题
-
-在实际操作中,session_id的保存位置可以通过
-
- session_set_cookie_params()
-
-来修改,如下:
-
- ’;
- session_regenerate_id(true);//重置session_id,并使原session无效
- echo ‘New Session id:’.session_id().‘
’;
- ?>
-
-在这种方式下,session_id的默认domain被修改,但是session_regenerate_id()是不识别的。这不知道算不算php的一个bug,为了解决这个问题,我们必须使用手动方式重置session保存,修改代码如下:
-
- ’;
- session_regenerate_id(true);//重置session_id,并使原session无效
- echo ‘New Session id:’.session_id().‘
’;
- setcookie(session_name(),session_id(),0,‘/’,‘testdomain’);//手动更新session_id
- ?>
-
-这样一来就可以每次交互更新session_id了……虽然有些复杂,但是经测试可行。
diff --git a/_posts/tool/2012-12-30-share-windows-and-linux.md b/_posts/tool/2012-12-30-share-windows-and-linux.md
deleted file mode 100644
index 0cacc2ae21..0000000000
--- a/_posts/tool/2012-12-30-share-windows-and-linux.md
+++ /dev/null
@@ -1,42 +0,0 @@
----
-layout: post
-title: Windows和Linux切换最终解决方案
-category: 工具
-tags: [Windows , Linux]
-description: 如果你也像我一样经常工作于Windows和Linux,那么这篇文章值得一看
----
-
-## 尝试和选择
-
-一台机器使用Windows和Linux一般有以下几个方式:
-
-- Windows和Linux真正的双系统,开机两个引导
-- Linux下虚拟Windows(一般是xp)
-- Windows下虚拟Linux
-
-除了以上几个,还有一些其他方法,都没啥映像,在此不讨论。
-
-选择两个系统无非是因为工作原因,Linux下开发,Windows下娱乐或者Word等。出现这种矛盾实在是纠结,在尝试过上述三种方案以后,我选择了在Windows下虚拟一个Linux,原因如下:
-
-- 使用Vmware虚拟实在是比Virtual Box好用(主要是功能)
-- Windows下的软件体验真的不错,而且是越来越好。虽然Linux下有各种开源软件功能一点都不差,但是你无法逃避的现实就是,用户体验真的不够。
-- 双系统经常切换非常麻烦
-- Windows系统问题,虚拟出来的真的不好用
-- Linux真正需要的,字符界面就够用,所以一般不需要占太大资源
-
-根据这几点,结果就定了,那么Windows下虚拟Linux怎样做最好呢?
-
-## 配置
-
-1. 安装vmware
- 安装过程不多说,提醒一点就是,记得在配置中设置,关闭vmware后不关闭运行的虚拟机,原因待会说。
-2. 安装ubuntu server
- 我选择了ubuntu server最小化安装,不安装x window,结果就是512内存和1cpu就顺畅运行,做各种开发木有问题
-3. 安装securecrt或者putty
- vmware下直接用字符界面很蛋疼,没有全屏,所以使用securecrt来连接linux,这就是为啥第一步关闭vmware后还留下虚拟机。这么做可以让资源尽可能充足应用。
-4. 给Linux共享文件
- 在字符界面下安装vmtools不是很容易,方法请参考我的另外一篇文章[给Vmware下的Ubuntu Server共享文件](http://yansublog.sinaapp.com/2012/12/17/%e7%bb%99vmware%e4%b8%8b%e7%9a%84ubuntu-server%e5%85%b1%e4%ba%ab%e6%96%87%e4%bb%b6/ "给Vmware下的Ubuntu Server共享文件")。这么做主要是为了在Windows下些代码,在Linux上运行
-
-## 总结
-
-我是个实用主义,怎么顺手怎么来,如果你希望使用Windows下的软件,又无法离开Linux开发(有自己的服务器除外),那么这样的方式挺好。
\ No newline at end of file
From 923afd81dc557dfc47c048f2ec56eaa11809c2a4 Mon Sep 17 00:00:00 2001
From: let_go <754816138@qq.com>
Date: Sun, 10 Sep 2017 22:23:23 +0800
Subject: [PATCH 8/8] Update CNAME
aa
---
CNAME | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CNAME b/CNAME
index cbf38b3d03..2de97096ea 100644
--- a/CNAME
+++ b/CNAME
@@ -1 +1 @@
-cj1024.com
\ No newline at end of file
+chenjun0210.github.io