├── .gitignore
├── .sass-cache
├── 5677a2e6f4a5b1ce0617ce671b92878bdd488938
│ ├── _animation.scssc
│ ├── _nprogress.scssc
│ ├── _pygments.scssc
│ ├── picture_bg.scssc
│ └── style.scssc
├── ad6e476b441f8026e073e96f26ead4815e8fa4f3
│ ├── _animation.scssc
│ ├── _nprogress.scssc
│ ├── _pygments.scssc
│ ├── picture_bg.scssc
│ └── style.scssc
└── af6b20a6d06d295e08ccc4e050dd3899a03578d8
│ ├── _animation.scssc
│ ├── _nprogress.scssc
│ ├── _pygments.scssc
│ └── style.scssc
├── 404.html
├── CNAME
├── LICENSE.txt
├── README.md
├── Rakefile
├── _config.yml
├── _includes
├── ads.html
├── advert.html
├── copyright.html
├── disqus.html
├── footer.html
├── googleanalytics.html
├── header.html
├── nav.html
└── share.html
├── _layouts
├── base.html
├── page.html
└── post.html
├── _post.txt
├── _posts
├── book
│ ├── 2015-01-22-book-share.md
│ ├── 2016-02-26-the-morning-started-at-noon-1.md
│ ├── 2016-02-26-the-morning-started-at-noon-2.md
│ ├── 2016-02-26-the-morning-started-at-noon-3.md
│ └── 2016-05-18-nice-love-letter.md
├── life
│ ├── 2014-04-15-we-should-be-better-than-us.md
│ ├── 2014-11-22-tour-nanxiong.md
│ ├── 2015-02-02-thoughtof-overtime-work.md
│ ├── 2016-01-21-talk-about-rome_elegant_name.md
│ ├── 2016-02-14-inspirational-words.md
│ ├── 2016-02-26-speech-from-liangqichao-in-tsinghua.md
│ ├── 2016-03-26-the-pleasure-of-thinking.md
│ ├── 2016-09-27-stay_hungry-stay_foolish.md
│ ├── 2016-10-12-the-East_Asia_Education-wasted-too-much-life.md
│ ├── 2016-10-19-sexy-philosophical.md
│ ├── 2016-12-20-the-worth-of-programmers.md
│ ├── 2017-11-18-域外杂谈·农场 .md
│ ├── 2017-12-03-思维的乐趣.md
│ ├── 2017-12-03-沉默的大多数.md
│ ├── 2017-12-17-关于格调.md
│ ├── 2018-03-31-一只特立独行的猪.md
│ ├── 2018-04-01-工作与人生.md
│ └── 2018-06-02-般若波罗蜜多心经.md
├── resource
│ ├── 2013-04-23-general-bootstrap-resources.md
│ ├── 2014-01-15-general-git-resources.md
│ ├── 2014-01-15-general-html-resources.md
│ ├── 2014-01-15-general-javascript-resources.md
│ ├── 2014-01-15-general-jquery-resources.md
│ ├── 2014-01-15-general-php-resources.md
│ ├── 2014-01-15-general-python-resources.md
│ ├── 2014-01-15-general-shell-resources.md
│ ├── 2014-01-15-general-svn-resources.md
│ ├── 2014-05-11-general-mysql-resources.md
│ ├── 2014-08-03-general-mac-resources.md
│ ├── 2015-02-13-general-seo-resources.md
│ ├── 2015-10-04-general-vim-resources.md
│ ├── 2016-02-24-shell-cmd-sumup.md
│ ├── 2016-03-06-write-about-hexo.md
│ ├── 2016-10-12-keycode-table.md
│ └── 2017-10-22-online-website-for-hacking-techniques.md
├── tech
│ ├── 2014-12-22-lua-weaktable.md
│ ├── 2015-09-02-js-string-compare.md
│ ├── 2015-09-07-sort-algorithms.md
│ ├── 2016-01-20-principle-of-dry-shy.md
│ ├── 2016-06-18-toss-highlight-javascript-code.md
│ ├── 2016-08-09-solve-javascript-common-problem.md
│ ├── 2016-09-14-solve-vue-common-problems.md
│ ├── 2016-10-21-what-is-nodejs.md
│ ├── 2016-10-24-how-to-operate-pseudo_element-using-js.md
│ ├── 2018-04-16-深度工作以充分利用脑力.md
│ └── 2018-09-22-develop-quick-app-experience-notes.md
└── tool
│ ├── 2012-12-30-share-windows-and-linux.md
│ ├── 2013-01-09-remote-access-of-mysql.md
│ ├── 2013-01-16-create-remote-resp.md
│ ├── 2013-02-25-quick-open-in-windows.md
│ ├── 2013-03-25-open-tcp-port-of-libvirt.md
│ ├── 2013-03-25-tools-of-sever-deployment.md
│ ├── 2013-04-21-add-snippet.md
│ ├── 2013-04-22-add-svn-ignore-file.md
│ ├── 2013-04-22-highlight-of-jekyll.md
│ ├── 2013-04-22-ignore-password-in-git-push.md
│ ├── 2013-05-20-set-proxy-for-git-or-apt.md
│ ├── 2013-05-22-change-to-zsh.md
│ ├── 2013-05-23-install-mysql-and-mongo-web-admin.md
│ ├── 2013-08-04-something-about-tools-i-used.md
│ ├── 2013-08-06-tools-of-reading.md
│ ├── 2013-08-28-change-bootstrap-to-3.md
│ ├── 2013-12-08-linux-command-continue.md
│ ├── 2013-12-11-deploy-pptp-vpn-in-ubuntu.md
│ ├── 2013-12-11-lamp-in-mac.md
│ ├── 2014-02-12-how-to-deploy-a-blog-on-github-by-jekyll.md
│ ├── 2014-03-20-php-debug-with-xdebug.md
│ ├── 2014-04-10-install-docker-in-mac.md
│ ├── 2014-04-10-install-vagrant-in-mac.md
│ ├── 2016-01-27-ssh-mac.md
│ ├── 2016-03-12-share-autohotkey-script.md
│ ├── 2016-03-26-nice-rake.md
│ └── 2016-03-31-solve-svn-cleanup-fail.md
├── assets
├── .sass-cache
│ └── 5677a2e6f4a5b1ce0617ce671b92878bdd488938
│ │ ├── _animation.scssc
│ │ ├── _nprogress.scssc
│ │ ├── _pygments.scssc
│ │ ├── picture_bg.scssc
│ │ └── style.scssc
├── _sass
│ ├── .sass-cache
│ │ └── 5677a2e6f4a5b1ce0617ce671b92878bdd488938
│ │ │ ├── _animation.scssc
│ │ │ ├── _nprogress.scssc
│ │ │ ├── _pygments.scssc
│ │ │ └── style.scssc
│ ├── _animation.scss
│ ├── _nprogress.scss
│ ├── _pygments.scss
│ ├── picture_bg.scss
│ └── style.scss
├── css
│ ├── default.css
│ ├── style.css
│ └── style.css.map
├── favicons
│ ├── android-chrome-192x192.png
│ ├── android-chrome-512x512.png
│ ├── apple-touch-icon.png
│ ├── browserconfig.xml
│ ├── favicon-16x16.png
│ ├── favicon-32x32.png
│ ├── favicon.ico
│ ├── manifest.json
│ ├── mstile-144x144.png
│ ├── mstile-150x150.png
│ ├── mstile-310x150.png
│ ├── mstile-310x310.png
│ ├── mstile-70x70.png
│ └── safari-pinned-tab.svg
├── font
│ ├── config.json
│ ├── fontello.eot
│ ├── fontello.svg
│ ├── fontello.ttf
│ ├── fontello.woff
│ ├── rougescript-regular.ttf
│ └── sxslRegularTh.woff
├── images
│ ├── 728x90-copy.jpg
│ ├── dji-mavic2.jpg
│ ├── domineering-tiger.jpg
│ ├── er-ci-yuan.jpg
│ ├── jeffjade-nicejade.jpg
│ ├── nicejade-icon.jpg
│ ├── noise.png
│ ├── steve-jobs-feet-toilet.jpg
│ └── 王小波.jpg
├── index.html
└── js
│ ├── adsbygoogle.js
│ ├── counter.js
│ ├── firebase-2.0.5.js
│ ├── functions.js
│ ├── garden.js
│ ├── jquery.js
│ ├── jquery.pjax.js
│ ├── nprogress.js
│ └── script.js
├── clear-commit-msg.sh
├── ie.html
├── index.md
├── jade
├── black-background.jpg
├── cover.png
├── love.html
├── main.js
├── point.png
├── table.png
└── vue-jade-components-demo.html
├── npm-debug.log
├── pages
└── rss.xml
├── service-worker.js
├── sitemap.txt
└── vue-boilerplate-template
├── index.html
├── service-worker.js
└── static
├── css
├── app.6feb7c8d57faaab5835a.css
└── element.87666b76720ff5f2fa74.css
├── fonts
└── element-icons.6f0a763.ttf
├── img
├── JARVIS for Webpack.png
└── icons
│ ├── android-chrome-192x192.png
│ ├── android-chrome-256x256.png
│ ├── android-chrome-512x512.png
│ ├── apple-touch-icon.png
│ ├── browserconfig.xml
│ ├── favicon-16x16.png
│ ├── favicon-32x32.png
│ ├── favicon.ico
│ ├── mstile-150x150.png
│ └── safari-pinned-tab.svg
├── js
├── 1.31ced81ca581a34740de.js
├── 1.5721be49ae799cc3eee3.js
├── app.8a7a8568afa5b7bded8c.js
├── app.8e548f7325ba9a1c6b4f.js
└── vendor.dll.js
└── manifest.json
/.gitignore:
--------------------------------------------------------------------------------
1 | _site/
2 | _drafts/
3 | .DS_Store
4 | .idea/
--------------------------------------------------------------------------------
/.sass-cache/5677a2e6f4a5b1ce0617ce671b92878bdd488938/_animation.scssc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/.sass-cache/5677a2e6f4a5b1ce0617ce671b92878bdd488938/_animation.scssc
--------------------------------------------------------------------------------
/.sass-cache/5677a2e6f4a5b1ce0617ce671b92878bdd488938/_nprogress.scssc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/.sass-cache/5677a2e6f4a5b1ce0617ce671b92878bdd488938/_nprogress.scssc
--------------------------------------------------------------------------------
/.sass-cache/5677a2e6f4a5b1ce0617ce671b92878bdd488938/_pygments.scssc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/.sass-cache/5677a2e6f4a5b1ce0617ce671b92878bdd488938/_pygments.scssc
--------------------------------------------------------------------------------
/.sass-cache/5677a2e6f4a5b1ce0617ce671b92878bdd488938/picture_bg.scssc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/.sass-cache/5677a2e6f4a5b1ce0617ce671b92878bdd488938/picture_bg.scssc
--------------------------------------------------------------------------------
/.sass-cache/5677a2e6f4a5b1ce0617ce671b92878bdd488938/style.scssc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/.sass-cache/5677a2e6f4a5b1ce0617ce671b92878bdd488938/style.scssc
--------------------------------------------------------------------------------
/.sass-cache/ad6e476b441f8026e073e96f26ead4815e8fa4f3/_animation.scssc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/.sass-cache/ad6e476b441f8026e073e96f26ead4815e8fa4f3/_animation.scssc
--------------------------------------------------------------------------------
/.sass-cache/ad6e476b441f8026e073e96f26ead4815e8fa4f3/_nprogress.scssc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/.sass-cache/ad6e476b441f8026e073e96f26ead4815e8fa4f3/_nprogress.scssc
--------------------------------------------------------------------------------
/.sass-cache/ad6e476b441f8026e073e96f26ead4815e8fa4f3/_pygments.scssc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/.sass-cache/ad6e476b441f8026e073e96f26ead4815e8fa4f3/_pygments.scssc
--------------------------------------------------------------------------------
/.sass-cache/ad6e476b441f8026e073e96f26ead4815e8fa4f3/picture_bg.scssc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/.sass-cache/ad6e476b441f8026e073e96f26ead4815e8fa4f3/picture_bg.scssc
--------------------------------------------------------------------------------
/.sass-cache/ad6e476b441f8026e073e96f26ead4815e8fa4f3/style.scssc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/.sass-cache/ad6e476b441f8026e073e96f26ead4815e8fa4f3/style.scssc
--------------------------------------------------------------------------------
/.sass-cache/af6b20a6d06d295e08ccc4e050dd3899a03578d8/_animation.scssc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/.sass-cache/af6b20a6d06d295e08ccc4e050dd3899a03578d8/_animation.scssc
--------------------------------------------------------------------------------
/.sass-cache/af6b20a6d06d295e08ccc4e050dd3899a03578d8/_nprogress.scssc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/.sass-cache/af6b20a6d06d295e08ccc4e050dd3899a03578d8/_nprogress.scssc
--------------------------------------------------------------------------------
/.sass-cache/af6b20a6d06d295e08ccc4e050dd3899a03578d8/_pygments.scssc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/.sass-cache/af6b20a6d06d295e08ccc4e050dd3899a03578d8/_pygments.scssc
--------------------------------------------------------------------------------
/.sass-cache/af6b20a6d06d295e08ccc4e050dd3899a03578d8/style.scssc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/.sass-cache/af6b20a6d06d295e08ccc4e050dd3899a03578d8/style.scssc
--------------------------------------------------------------------------------
/404.html:
--------------------------------------------------------------------------------
1 | ---
2 | layout: base
3 | title: 404 Not Found Error
4 | ---
5 |
6 |
7 | 404 Not Found Error
8 | Back To Index Page
9 |
10 |
--------------------------------------------------------------------------------
/CNAME:
--------------------------------------------------------------------------------
1 | blog.lovejade.cn
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | Copyright (c) 2013 Su Yan - Released under The MIT License.
2 |
3 | Permission is hereby granted, free of charge, to any person
4 | obtaining a copy of this software and associated documentation
5 | files (the "Software"), to deal in the Software without
6 | restriction, including without limitation the rights to use,
7 | copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | copies of the Software, and to permit persons to whom the
9 | Software is furnished to do so, subject to the following
10 | conditions:
11 |
12 | The above copyright notice and this permission notice shall be
13 | included in all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
17 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22 | OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
天意人间舫
2 |
3 | >**微注:** 个人主博客(基于 `Hexo`)地址是: [https://jeffjade.com](https://jeffjade.com);此博客原作者博文地址:[http://yansu.org](http://yansu.org),Fork 于 2016 年初;之后,有对风格做了蛮多改变,同时对访问速度有所优化;如今,也是据依所学,偶有更新。
4 |
5 | [](https://imgly.net/i/CfH)
6 |
7 | ### Fork 说明
8 | 14 年有用 `Jekyll` 搭建过博客;无奈那时 `Jekyll` 还无中文文档以及资料; 每每折腾起来,颇为费劲;15 年初有转投 `Hexo` 怀抱,即便现在使用 `Hexo` 也觉其很是方便。
9 | 怎奈养成了对于不错主题就想一试其美的冲动;故而此次回归于 `Jekyll`,欲成就另一个私人空间的同时,也是想试用下写得不错的响应式主题。对于这**天意人间舫**,有留一篇拙章为之记:[晚晴幽草轩,天意人间舫](https://jeffjade.com/2016/01/22/2016-01-22-jeffjade-and-nicejade/)。
10 |
11 | ### 安装说明
12 |
13 | 1. 注册 Github 账号,并 fork 库到自己的 github(须验证邮箱);
14 | 2. 进入 Setting, 修改名字为:`username.github.io`,并启用 github Page 服务;
15 | 3. clone 库到本地,参考 `_posts` 中的目录结构自己创建适合自己的文章目录结构;
16 | 4. 修改 CNAME (如果无个人域名,可删掉这个文件,使用默认域名);
17 | 5. 修改 `_config.yml` 配置项,然后就大功告成了!当然,你可以修改更多。
18 |
19 | >**微注:** 对 `.scss` 文件的转化,只需执行: `sass --watch assets/_sass/style.scss:assets/css/style.css --trace`,当然,这需要注意下相对路径;具体可参见 [SASS 用法指南](http://www.ruanyifeng.com/blog/2012/06/sass.html),如是生产环境,执行 `sass --style compressed ./assets/_sass/style.scss ./assets/css/style.css` 命令即可。
20 |
21 | ### 分支说明
22 |
23 | - 三栏布局(master分支,基于[3-Jekyll](https://github.com/P233/3-Jekyll))
24 | - 三栏布局 (bootstrap-based分支,基于Bootstrap)
25 | - 单栏布局(first-ui分支,基于Bootstrap)
26 |
27 | ### 优化日志
28 |
29 | #### 改善访问体验,引入 `Pwa`
30 |
31 | (Update@11 月 14)为跟上下一代 Web 应用的进程,有为网站引入 `PWA` 相关技术;添加 Web App Manifest,支持添加此博客到设备屏幕;注入了 Service Worker,提升了访问速度,优化了渲染性能,支持部分浏览器离线访问等。`PWA` 相关技术,可参见 [nice-front-end-tutorial: pwa](https://github.com/nicejade/nice-front-end-tutorial/blob/master/tutorial/pwa-tutorial.md)。
32 |
33 | #### 改善体验,引入 [AnchorJS](https://github.com/bryanbraun/anchorjs)
34 | (Update@11 月 26),引入 [AnchorJS](https://github.com/bryanbraun/anchorjs) (Add deep anchor links to your docs.),使得文章每个标题(h1 ~ h4),可以拥有锚链接;同时,使其采用懒加载默认,从而改善访问体验。
35 |
--------------------------------------------------------------------------------
/_config.yml:
--------------------------------------------------------------------------------
1 | permalink: /:year/:month/:day/:title.html
2 | markdown: kramdown
3 | highlighter: pygments
4 | encoding: utf-8
5 |
6 | kramdown:
7 | input: GFM
8 |
9 | # 作者信息
10 | author:
11 | name: 晚晴幽草
12 | email: jeffjade@163.com
13 | link: https://www.jeffjade.com
14 | weibo: https://weibo.com/3235949794
15 | github: https://github.com/nicejade
16 |
17 | # 站点信息
18 | title: 天意人间舫
19 | description: 个人博客(Jekyll);整理、记载关于工具/资源/生活/技术/读书/影音等经验和思考;
20 | url: https://blog.lovejade.cn
21 | rss_url: /pages/atom.xml
22 |
23 | # avatar头像及Favicon
24 | avatar: /assets/images/nicejade-icon.jpg
25 | # favicon: https://www.jeffjade.com/img/xuan.ico
26 |
27 | # google analytics 设置
28 | ga:
29 | id: UA-86109050-1
30 | url: blog.lovejade.cn
31 |
32 | # disqus 设置
33 | #disqus:
34 | #shortname: yunjeffblog
35 |
36 | #rake configuration on 2016-03-01
37 | post:
38 | template: _post.txt
39 | extension: md
40 | page:
41 | template: _page.txt
42 | extension: md
43 | editor: atom
44 | git:
45 | branch: master
46 | transfer:
47 | command: rsync
48 | settings: -av
49 | source: _site/
50 | destination: ~/Git/nicejade.github.com/
51 |
--------------------------------------------------------------------------------
/_includes/ads.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/_includes/advert.html:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/_includes/copyright.html:
--------------------------------------------------------------------------------
1 | Powered by Jekyll | Theme 3-Jekyll | Hosted on Github
2 |
3 |
--------------------------------------------------------------------------------
/_includes/disqus.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/_includes/footer.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
24 |
25 |
48 |
49 |
57 |
--------------------------------------------------------------------------------
/_includes/googleanalytics.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/_includes/header.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {{ page.title }} | {{ site.title }}
6 |
7 | {% if page.keywords %}
8 |
9 | {% endif %}
10 |
11 | {% if page.description %}
12 |
13 | {% endif %}
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/_includes/nav.html:
--------------------------------------------------------------------------------
1 |
64 |
65 |
104 |
--------------------------------------------------------------------------------
/_includes/share.html:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/_layouts/base.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {% include header.html %}
5 |
6 |
7 | {% include nav.html %}
8 |
9 |
10 | {{ content }}
11 | {% include copyright.html %}
12 |
13 |
14 |
15 |
16 |
Table of Contents
17 |
18 |
19 |
20 |
21 |
22 | {% include footer.html %}
23 | {% include googleanalytics.html %}
24 |
25 |
26 |
--------------------------------------------------------------------------------
/_layouts/page.html:
--------------------------------------------------------------------------------
1 | ---
2 | layout: base
3 | ---
4 |
5 |
6 | {{ page.title }}
7 | {{ content }}
8 |
9 |
10 | {% include share.html %}
11 |
12 |
--------------------------------------------------------------------------------
/_layouts/post.html:
--------------------------------------------------------------------------------
1 | ---
2 | layout: base
3 | ---
4 |
5 | {{ page.title }}
6 | {% include ads.html %}
7 |
8 | {{ content }}
9 |
10 |
11 | {% include advert.html %}
12 |
13 | {% include share.html %}
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/_post.txt:
--------------------------------------------------------------------------------
1 | ---
2 | title:
3 | date:
4 | categories:
5 | tags:
6 | keywords:
7 | description:
8 | ---
9 |
--------------------------------------------------------------------------------
/_posts/book/2015-01-22-book-share.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 好书推荐:邹韬奋的《事业与修养》
4 | category: 读书
5 | keywords: 阅读
6 | description: 邹韬奋的《事业与修养》读后感
7 | ---
8 |
9 | ## 一 关于背景
10 | 初次接触到此书,也是在购得Kindle后逛亚马逊免费书籍时候发现的;Down下来之后便爱不释手,相见恨晚;一番粗赏后,不敢独享,故揪得几个老字残兵,望成拙文,与之分享下! [题外话:对于有读书爱好的人来讲,感言Kindle是必要的;笔者也是在`知乎` `博客园`等看到不少人的推荐,入手一个真是觉得好,虽然每天能拿起来读的时间不多。其一:毕竟当一读书机器有了听歌视频功能后,它存在的主旨已然不够明确了;其二:从亚马逊免费推荐的书籍作品来看,就能感受到她高雅的逼格;其三: 从读书的体验以及方便来讲,Kindle有绝对的理由让您拥有一部。]
11 |
12 | ## 二 关于作者
13 | 此书作者[邹韬奋-Wiki百科](http://zh.wikipedia.org/wiki/%E9%84%92%E9%9F%9C%E5%A5%AE) / [百度百科](http://baike.baidu.com/link?url=AltGqh8Rhw2vyraL75Ab1fDq13g46OFrkbIeyXWLu3GtOdncFkbgM4Tgzy7qx2pz9urA1_AJYdnKIW9zgvimoK) (1895年11月5日-1944年7月24日)江西省余江县人,原名恩润,笔名“韬奋”取意“韬光养晦”和“奋斗”,中国记者、出版家。1922年在黄炎培等创办的中华职业教育社任编辑部主任,开始从事教育和编辑工作。1926年接任生活周刊主编,以犀利之笔,力主正义舆论,抨击黑暗势力。因此他被大家评为100位为新中国成立作出突出贡献的英雄模范之一。
14 |
15 | ## 三 关于此书
16 | 此书以章节化方式针对某些问题敘述了作者自己的看法,掺杂了对国人的建议;有诸如`热诚` `机会` `坚毅之报酬` `外国人办事精神` `“彻底”` `转到光明方面去` `尽我所有` `消极中的积极`等等方面; 正如作者书前感言所写:
17 |
18 | >常常听见有人慨叹中国没有办法。其实何尝没有办法?虽有办法而没有人去办,“ 法” 又何能自“ 办”?虽有办法而用不相当的人去办,原来好好的“ 法”,一变而为自私自利的工具,贪污剥削的招牌,挂羊头卖狗肉者天下滔滔皆是也,虽“ 办” 何益?不但无益而反足害尽苍生!所以事业要办得好,固在有严密的组织,同时也在乎有充分修养的人物。中华民族的将来希望在青年,而青年欲求有所贡献于我们的民族,进而有所贡献于世界的全人类,必先对这一点加以严重的注意。这本书倘能引起读者对于此事的责任,目的便算已达到了。
19 |
20 | 源于作者生活的年代正值晚清到民国,那时候新旧文化更替,所以此书在语言措辞上,读者可能会还有些半文言半白话的感觉;但这当是不影响阅读的。比之于如今过于生活化的段子,笔者倒蛮钟爱这种述文风格。全书近30篇短文而组成,但每篇都短小精悍,细细读来半日便可完结了; 其当时的观点即便时光跨过将近百年了,不过笔者今时今日读来,也觉收益甚丰。
21 |
22 | 坦言,此书所写的主旨,感觉跟当下较流行的"成功学"某些地方倒有很多异曲同工之妙;不过,那个时候的大家们虽然也有大追求,却倒没如今人们充斥着的那么大的功利心;所以读来,对我们可有莫大启迪的同时,作者的娓娓道来,却仍旧能给人一种平静质感;下面贴出一篇韬奋先生的 `《静》`,喜欢这种叙述的自然喜欢:
23 |
24 |
25 | >我们试冷眼观察国内外有学问的人,有担任大事业魄力的人,和富有经验的人,富有修养的人,总有一个共同的德性,便是“ 静”。我们试细心体会,可以看出一个人的学问,魄力,经验,修养等等的程度,往往和他们所有的“ 静” 的程度成正比例。
26 |
27 | >静的精神之表现于外者,当然以态度言词最为显著。我们只要看见气盛而色浮,便见所得之浅;邃养之人,安详沈静,我们只要见他面色不浮,眼光不乱,便知道他胸中静定,非久养不能。
28 |
29 | >我们试看善于演说,或演说有经验的人,他的态度非常沈静安定,立在演台上的时候,身体并不十分摇动,就是手势略有动作,也是很自然的。惟其态度能如此之安定自然,所以听众也感觉得精神安定,聚其注意于他的演辞。初学演说或演说毫无经验的人,往往以为在演台上要活泼,于是摇手动脚,甚至于跑来跑去,使听众的眼光分散,注意难于集中,真所谓“ 弄巧成拙”!
30 |
31 | >做领袖的人,静的精神之表现于态度者尤为重要,遇着重要事故或意外事故时,常人先要惊慌纷乱,举止失措,做领袖的便要绝对的镇定,方可镇定人心,不至火上添油,越弄越糟。不必说什么机关的领袖,就是做任何会议的一时主席,也须要具有“ 静” 的精神的人上去,才能胜任愉快。
32 |
33 | >“静” 的精神之可贵,不但关系外表,脑子要冷静,然后思想才能够明澈缜密。有了这种冷静的脑子,用来研究学问,才不至受古人所愚,才不至受今人所欺,一以理智为分析判断之准绳;有了这种冷静的脑子,用来应事应人,才能应付得当,不受欺蒙;有了这种冷静的脑子,用来立身处世,才能不为外撼,不为物移,才能不至一人誉之而喜,一人毁之而忧,才做得到得意时不放肆,失意时不烦恼,因为有了这种冷静的脑子,胸中有主,然后不为外移。
34 |
35 | >昔贤吕心吾先生曾经说过:“ 君子处事,主之以镇静有主之心。” 又说:“ 干天下大事,非气不济,然气欲藏不欲露,欲抑不欲扬,掀天揭地事业,不动声色,不惊耳目,做得停停妥妥,此为第一妙手。” 这几句话很可以说出静的妙用来。
36 |
37 | >但是我们所主张的“ 静” 是积极的,不是消极的;是要向前做的,不是袖手好闲的。例如比足球的时候,守球门的人多么手敏眼快,但是心里是要十分冷静的,苟一心慌意乱,敌方的球到眼前还要帮助敌方挥进自己的门里去!我们是要以静为动之母,不是不动。关于这一点,吕心吾先生还有几句很可以使我们受用的话,我现在就引来做本文的结束:“ 处天下事只消得安详二字,虽兵贵神速,也须从此二字做去。然安详非迟缓之谓也,从容详审,养奋发于凝定之中耳。是故不闲则不忙,不逸则不劳。若先怠缓,则后必急遽,是事之殃也,十行九悔,岂得谓之安详?”
38 |
39 | 大千世界,好的文章好的书籍,多不甚数;因缘际会的遇到那些也只是浩如烟海中的一星半点,尚不能构成沧海一粟;所以呢 只能尽可能地去多几本,多翻几页了;今日逛[知乎看到一个伙伴](http://www.zhihu.com/question/19673583/answer/15373764)的几句说的蛮好,摘之于下,作为结语:
40 |
41 | >设想你能得瑟到100岁不老眼昏花中风手抖,从现在开始每个月正经读好(消化)一本书,还不包括各种意外各种不能按计划完成任务的情况,这辈子也只剩下几百本书可读了。假如你能得瑟到100岁腿脚还灵便坚持每年去一个国家,都溜达不完这世界上一半的地方。一百年太长,嗯,连五年都不好意思说,就一年吧,一年后的今天,你想要成为什么样的人?世界太大,生命太短,谁知道过完这辈子,要在轮回里变草变树折腾多久才有可能重回这世界来再走一圈。患失患得,瞻前顾后,无病呻吟,都是因为你读书太少,还不够忙,还活得不够精彩。若你选择了远方,一定会只顾风雨兼程。告诉自己,你还有多少时间。好好和自己商量商量,然后不顾一切地去吃苦吧。苦是你的粮食。不要问,不要等,不要犹豫,不要回头。
42 | 没有答案的时候,就独自出去见一见这个世界。没长一张萝莉的脸不要紧,可是你敢不敢有颗爷们的心。
43 |
44 | ---
45 |
--------------------------------------------------------------------------------
/_posts/book/2016-05-18-nice-love-letter.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 绝美如斯,撩人情话
4 | date: 2016-05-18 22:30:22 +0800
5 | categories: 读书
6 | tags: loveLeter
7 | keywords: 情话,情书
8 | description: 优美|感情话/情书收集
9 | ---
10 |
11 | **情不知所起,一往而深**。那些与旁人说来脸红的绰号暱称、轻灵的诗意,和深刻的激动,像筛子一般将文字抖出松弛微醺的质感。任时世流转,风华变迁,在这美妙的质感前,循迹而去,仍能感观:一些在文字中留鲜的岁月,一段段永不衰老的情缘。隔著漫长的岁月,那些美妙的字句,跨越千山万水蹁跹而来,带给我们不曾褪色的悸动。
12 |
13 |
14 | 
15 |
16 | #### **少安哥,我想跟你一辈子好。**
17 |
18 | > 这句,来源于路遥先生的《平凡的世界》;出自女主之一**田润叶**给少安的一封书信;此一句堪称荡气回肠:女追男隔座山,润叶之勇敢,冠绝所闻;得妻若此,夫复何求?读者的你是否可有这共同的憧憬呢?。
19 |
20 | 
21 |
22 | ---
23 |
24 | #### **我把我整个灵魂都给你,连同它的怪癖,耍小脾气,忽明忽暗,一千八百种坏毛病。它真讨厌,只有一点好,爱你。**
25 |
26 | #### **你要是愿意,我就永远爱你;你要是不愿意,我就永远相思**
27 |
28 | #### **不管我本人多么平庸,我总觉得对你的爱很美。**
29 |
30 | #### **只希望你和我好,互不猜忌,也互不称誉,安如平日,你和我说话像对自己说话一样,我和你说话也像对自己说话一样 。说吧, 和我好吗 ?**
31 |
32 | #### **当我跨过沉沦的一切,向着永恒开战的时候,你是我的军旗。**
33 |
34 | #### **静下来想你,觉得一切都美好得不可思议,以前我不知道爱情这麽美好。爱到深处这麽美好。真不想让任何人来管我们。谁也管不著,和谁都无关。告诉你,一想到你,我这张丑脸就泛起微笑。**
35 |
36 | >出自**王小波**《爱你就像爱生命》。小波对于这感情的态度,一如其散文谈道理,情文达爱意:浪漫至极,单纯而美好;读来,总觉如饮甘泉,怡然自得,口齿留香(读其小说,则好如品青梅之酒)。
37 |
38 | 
39 |
40 | ---
41 |
42 | #### **我爱你的灵魂,也爱你的肉体。**
43 |
44 | #### **我一辈子走过许多地方的路,行过许多地方的桥,看过许多形状的云,喝过许多种类的酒,却只爱过一个正当最好年龄的人。**
45 |
46 | #### **女子怕做错事,男子却并不在已做过的错事上有所遁避,所以如果我爱你是你的不幸,你这不幸是同我生命一样长久的。**
47 |
48 | >出自**沉从文**写给**张兆和**的情书;沉从文的情书如狂风暴雨般,携著不顾一切的勇气和热情向张兆和席卷而来。然而,出身名门的张兆和却很冷淡。他的信,她几乎一封也没回过。痴情如斯,我辈楷模。至于沈先生对爱情的不专一这事儿,普通人都没几个做到专一的(如果有能力),何况文人呢?不过沈先生这话“打猎要打狮子,摘要摘天上的星星,追求要追漂亮的女人”,至少这斗士一般的勇气和坦率实在令人颇为钦赞。
49 |
50 | ---
51 |
52 | 
53 |
54 | #### **你给了我生命中不能承受之重,我将用我的一生来报答你。**
55 |
56 | >出自**林微因**答梁思成之语。婚前,梁思成问林徽因:“有一句话,我只问这一次,以后都不会再问,为什么是我?”。林徽因答:“答案很长,我得用一生去回答你,准备好听我了吗?”
57 | 念及这位奇女子,瞬间你可能会想到徐志摩,梁思成,可是当你想起金岳霖这个名字,唏嘘不已之时,心底总燃一缕对老金的钦赞。
58 |
59 |
60 | ---
61 |
62 | #### **繁华尽处,寻一无人山谷,建一木制小屋,铺一青石小路,与你晨钟暮鼓,安之若素 。**
63 |
64 | #### **我懒,你也懒, 后来我勤奋了, 是为了能让你接着懒。**
65 | ---
66 |
--------------------------------------------------------------------------------
/_posts/life/2014-04-15-we-should-be-better-than-us.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 我们得比自己更努力
4 | category: 生活
5 | tags: Essay
6 | keywords:
7 | description:
8 | ---
9 |
10 | > 选择了与众不同,就要准备好面对自己选择的道路的曲折,以及周围人们的不解。
11 |
12 | 我们的家庭乃至这个社会,都已经为我们设计好了一条道路。
13 |
14 |
15 | 如果你听从父母的建议,或者接受社会舆论的引导,
16 |
17 |
18 | 那么你只需要埋头把事情做好,即可过上大家认为不错的日子。
19 |
20 |
21 | 这条路是大家踩出来的,有方向有同伴,走起来不会太累,但是路途的风景确大同小异。
22 |
23 |
24 | 有一部分人天生就不喜欢条条框框,以变化为美,以差异为美,那么我们是同一类人。
25 |
26 |
27 | 我们希望自己去探索生命的意义,我们经常问自己为什么要这么做,
28 |
29 |
30 | 我们时常在思考,这个世界是不是可以更好。
31 |
32 |
33 | 但是,选择了与众不同,就要准备好面对自己选择的道路的曲折,以及周围人们的不解。
34 |
35 |
36 | 我们都在荆棘中探索,希望找到一个属于自己的世外桃源。
37 |
38 |
39 | 有些人会不断的来打听我们的状况然后提出一些他们认为对的意见,这些人都是好意,
40 |
41 |
42 | 但是他们却不断在影响我们的决心。
43 |
44 |
45 | 也许你还在路途中,也许你已经找到一个归属,
46 |
47 |
48 | 让我们坚持下去的,从来不是别人的看法,
49 |
50 |
51 | 而是对自己十足的信心。
52 |
53 |
54 | 差异和个性从来不是我们的最终目标,
55 |
56 |
57 | 我们只为不断超越和完善自己,因此我们得比自己更努力。
--------------------------------------------------------------------------------
/_posts/life/2014-11-22-tour-nanxiong.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 往南雄观银杏游记
4 | category: 生活
5 | tags: Essay
6 | keywords: 游记
7 | description: 往南雄观银杏游记
8 | ---
9 |
10 | ---
11 | 自20日确立此行,21号下班便走,自深圳南山而始,一路众生大侃戏调,颇是馨悦。颠簸近七八小时,是夜两点余达取道之江西赣州信丰,
12 | 我等入一馆而歇,人疲力竭,未管舒宜,速浴而寝。
13 |
14 | 入梦四时后即起,寡梳少洗,觅寻早餐,一阵折腾行驶时余,九点半方至广东韶关坪田: 因慕银杏之乡而来,俱以为能观银杏成林,杏果满枝,金黄漫野,曼妙无限。但见:一路尚在开发修缮,车过而生尘烟;边房兮待紧建。苦民多拾野物(不过瘦红薯老拐枣,松果花杏黄叶,另有干鸭杏仁及些许黄果,未曾识得,亦未食也)于道旁而售,其中不乏老人幼子。自朝而夕,行经坪田的坳背村,军营寨,冯屋。众人不过遇杏而拍罢了,一路来尽此为快。然,行之所至,未有杏群,更别杏林,不过皆是几株一簇,抑或平地起一支以独秀,美则美矣,秀清有余,然寡而独舞!偶也可遇几株清竹香樟,更杂万千翠木刺草于野,也算远尘嚣而静安。然,人流似洪,余也是毕今日之力,皆在思拍靓景。
15 |
16 | 午团餐,尚可食。下午行路,小车兼之,然游人如织,使步行亦有七八余里,期间亦是不曾安分,大秀凌波跳往。至冯屋,正值金屋西下,兼此处有两株六百年老银杏,颇有 ”落叶与暖霞齐飞,秋杏共大地一色 之势“,质朴乡野,如身着黄衣女子般曼妙;落日与相机将馨林照耀,风乍起,但只美见而已;众人也是欣喜不已,拥树而显术,肆意闪光,唯人流铁通,难得佳境,如此盘桓至暮,小三轮大胖吧颠簸而归; 于中国自是一番久堵,夜九点半又杀至赣州信封,觅而食,冲以澡,已是夜深,疲意褪去,唯脚掌大痛;当早寝明复往南雄至帽子峰,愿能不虚其行。
17 |
18 | ----------------------2014-12-22日暮晚 于广州.南雄 至 江西信封路途----------------------
19 |
20 | ---
--------------------------------------------------------------------------------
/_posts/life/2015-02-02-thoughtof-overtime-work.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 关于加班这件事儿的随想
4 | category: 生活
5 | tags: Essay
6 | keywords: 随想
7 | description: 关于加班这件事儿的随想
8 | ---
9 |
10 | ---
11 | 努力地尽自己之本职做好工作,
12 | 很多人都有(也应该有)这个特质;
13 |
14 | 但是,在此基础之上自愿还额外加班加点的去工作,
15 | 并且放弃正常的休息娱乐时间,窃以为无非是这三点:
16 |
17 | >其一:他(她)自主的认为这是为他(她)自己机会,以升其能;
18 | >其二:他(她)这般做出来是给别人(领导??)看得,以求其利;
19 | >其三:他(她)是这个时代人们口中的那种“傻子”,天生丽质!
20 |
21 | 当然这是建立在雇佣关系相对比较平等上的理论;
22 | 并不存在直接or潜在的逼迫于被逼的作用力;
23 |
24 | 毕竟:天下熙熙皆为利来天下攘攘皆为利往<司马迁>!
25 |
26 | 故而, 作为雇员的您又该如何自处呢?窃以为:
27 |
28 | >于事业上,在薪水靠能力,奖金靠价值的理论下,还是首要提升能力的为好;活在当下,而眼界需宽远,八小时内的行动成就的是现在,八小时外的时间利用才可看出职场的未来;
29 |
30 | >于生活来讲,其意义可以在于奋斗,也可以是享受,或者是别的,每个人都有自己不同的看法和理解。只要活的开心,过的明白便好。所以,尽可能地做些自己喜欢的事才是王道;毕竟就算人均可活70年,也不过25550天,容不得我们虚度.
31 |
32 | >于人生中,钱财事业皆为身外之物,生不带来,死不带去,只有身体和健康是自己的。唯独情感才是百年将至前夕的最大羁绊。
33 |
34 | 因此,在第一条不满足的情形之下,又不在意第二条的状况里,最好还是去做些想做的更有意义的事情吧。(毕竟,大多数人的工作本身对其意义不是特别大,嗯,这条是我臆想/意淫出来的,没有数据支持!)
35 |
36 | 如此这般,在认清这层本质的雇主,对其佣者加班加点,又当何以待之呼?
37 | >在追求第一条的人们在其熟悉该项工作之时多半也是结束这份疯狂之日;而追逐第二条的人们如果你不能给予他们想要的,怎么可能使他们心悦臣服的听从你的意愿?再者,令雇员有强烈的幸福感,其效果不知强过那点下班的时间多少倍了,因此也不必期待每雇佣都成为第三条的践行者了,不是么???
38 |
39 | ----------2015-02-01 22:53:17于深圳南山----------
40 |
--------------------------------------------------------------------------------
/_posts/life/2016-01-21-talk-about-rome_elegant_name.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 斋名室名十谈(凌微年)
4 | category: 生活
5 | tags: Essay
6 | keywords: 斋名,室名
7 | description: 斋名室名十谈
8 | ---
9 |
10 | 《光明日报》之《周末生活》专刊辟有一个专栏,名曰“我的书斋”,撰文者多为萧乾、冯亦代等著名的文人学者,书卷气息甚浓。有时作者还将自己的斋名由来形诸笔端,字里行间,情趣盎然。
11 |
12 | 其实,斋而有名,古已有之。斋一般指书房,所谓斋名,书斋名称是也。它与作为居室名称的室名虽稍有区别,但有时又往往合而为一,室名即斋名者比比皆是。斋、室尚有以居、堂、轩、屋、庵、庐、馆、簃等为通名,如语言学家杨树达的“积微居”,画家丰子恺的“缘缘堂”、经济学家王亚南的“野马轩”、红学家俞平伯的“古槐书屋”、南宋大诗人陆游的“老学庵”、明清文学专家钱仲联的“梦苕盦”、绘画大师吴昌硕的“缶庐”、历史学家陈寅恪的“金明馆”、京剧四大名旦之一的程砚秋的“御霜簃”,等等。
13 |
14 | 斋名、室名常常是自取的,偶尔亦可由他人贺赠,大致上有如下十种类型。
15 |
16 | 其一,**用典**。近代名人梁启超在《自由书-叙言》中曾谈及:“庄生曰:‘我朝受命而夕饮冰,我其内热欤?’遂以名吾室”。其时为:》))年,正当“戊戌变法”失败之际。显然,梁启超用庄生典,以“饮冰”名室,流露出自己内心的惶恐与焦灼。
17 |
18 | 其二,**据地**。明代文学家归有光的斋名为“项脊轩”。原来,归有光的远祖归道隆住在太仓归庄(今县归庄乡)的项脊泾,“项脊轩”即由“项脊泾”而来。脍炙人口的散文《项脊轩志》就是周绕着“室仅方丈,可容一人居”的小小书斋,回忆起少年时代的种种逸事,令人感慨万千。
19 |
20 | 其三,**托物**。抗战“七君子”之一的沈钧儒,秉性坚强,酷爱石头。他所蓄之石,琳琅满目,有赭有黄,有白有黑,有长有短,有方有圆,蕴怪含灵,怀奇呈异。书斋里,橱架累累,图书、石头,兼收并蓄。因此题了斋名为“与石居”。沈老诗云:“吾生尤好石,谓是取其坚,掇拾满所居,于髯为榜焉”。言简意赅地作了自道语。
21 |
22 | 其四,**寓意**。南宋画家郑思肖,自宋亡之后隐居苏州,榜其室名为“本穴世界”。乍看起来,令人费解;细究之,使人起敬。其寓意深邃:“本”可析为“大”与“十”,“十”放在“穴”中,就拼成“大宋”两字。他睡觉时身体必向南,自号“所南”,以示念念不忘宋室,坚持民族气节的决心。
23 |
24 | 其五,**论学**。明末文学家张溥,幼年嗜学勤奋,所读书必手抄,然后朗读一遍,即焚去,又抄,再焚,如此反复六、七次,名其书斋为“七录斋”。
25 |
26 | 其六,**明志**。爱国民主人士黄炎培在抗日战争爆发后写了《重做人》诗。诗曰:“国难来,他再生,谁死谁生,愿与顽敌拼。身非我有……早把我身,献给人民,献给国家有”。取诗意,书房改额为“非有斋”,以示与人民共赴国难,献身民族解放战争的志向。
27 |
28 | 其七,**幽默**。鲁迅在上海的寓所离租界比较近,有些帮闲文人无聊之至,竟挖苦鲁迅是为了逃跑方便。鲁迅干脆自题室名“且介亭”。“且介”为“租界”两个字的半边,“亭”即上海人俗称的“亭子间”。鲁迅居住的大陆新村,位于列强越界筑路地区,可谓半租界,正合“且介”之意。幽默诙谐,妙趣横生。
29 |
30 | 其八,**自勉**。著名作家姚雪垠,自幼家贫,靠勤奋自学走上了创作道路,历史小说《李自成》是他的代表作。写历史小说必须熟读历史,而我国史籍汗牛充栋,“一遍读罢头飞雪”,他有感于人生有涯,学海无涯,故名其书斋为“无止境斋”,自勉自励,永远进取。
31 |
32 | 其九,**怪诞**。现代书法家邓钝铁(散木),家住上海,别署粪翁,故榜其居室为“厕间楼”,且自刻小印:“遗臭万年”、“逐臭之夫”。开个人书法篆刻展览会,请帖印在草纸上。倜傥乎?怪诞乎?
33 |
34 | 其十,附庸风雅。电影《火烧圆明园》一开始,就出现一幅慈禧画像,现藏于颐和园。为英国女画家所画,画像右首有“宁寿宫”印模、左上方有“大雅斋”印模。“宁寿宫”为慈禧晚年常住的地方,“大雅斋”则是慈禧为自己附庸风雅而起的斋号,故宫博物院藏的慈禧专用瓷器上常署有“大雅斋”铭款。
35 | 斋、室之命名尤胜于人之起名,其主人的性情,品格、情于此可见一斑。
36 |
37 | 原文来自:[斋名室名十谈](http://218.4.83.214:8088/qk/001ey/2009/1/5zmsms.htm)
--------------------------------------------------------------------------------
/_posts/life/2016-02-14-inspirational-words.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 情人节特辑
4 | category: 生活
5 | tags: Essay
6 | keywords: 鸡汤,激励之言
7 | description: 情人节特辑
8 | ---
9 |
10 | 在勇敢去爱去表达爱意的日子里,每一天都是 **情人节**;在遇到人生中另一半时,你需要做的就只是大胆用心去爱去追求。在此之前,当享受这份孤独,这是上天赐予你思考和修炼自己的时间,在一个人的日子里,你要做的只有一件事,把自己变的**更优秀**。立人为事,总要些说服自己的理论,才能无去怀疑,从而所向披靡。特集些许感动句子(理论),与君共勉。
11 |
12 | **过一个平凡无趣的人生实在太容易了,你可以不读书,不冒险,不运动,不写作,不外出,不折腾……但是,人生最后悔的事情就是:我本可以。**——陈素封
13 |
14 | 
15 |
16 | **一个人思虑太多,就会失去做人的乐趣。**
17 |
18 | 幸好爱不是一切,幸好一切都不是爱。再美好也经不住遗忘,再悲伤也抵不过时间。
19 | 人生不论你在什麽时候结束,重要的是结束之後就不要悔恨,有理想在的地方,地狱就是天堂,有希望在的地方,痛苦也成欢乐,从绝望中寻找希望,人生终将辉煌。
20 |
21 | 有时候,顺其自然,你才会知道那些事是否值得拥有。
22 |
23 | 如果没有人相信你,那就自己相信自己;
24 | 如果没有人欣赏你,那就自己欣赏自己;
25 | 如果没有人祝福你,那就自己祝福自己。
26 | 用心去触摸属于自己的阳光,用爱去创造属于自己的世纪。自己读懂了自己,就足够幸福。
27 |
28 | 有些事,你把它藏到心里,也许还更好,等时间长了,也就变成了故事。
29 |
30 | 人生没有永远的痛,没有过不去的坎,没有忘不掉的情殇。不要急,不要哭,不要怕,相信上天会善待每一段生命。
31 | 你一定要等,总有一天,会有一双手温柔地牵着你,带你走出回忆。
32 |
33 | 真正的生气,不是哭也不是闹,而是不说话。
34 |
35 | 以“人世”的态度去耕耘,以“出世”的态度去收获,这不仅是禅者的态度,更是我们快乐人生所需的一种精神。
36 | 出污染心,得清净心;出贪瞋心,得慈悲心;有缘即住无缘去,一任清风送白云。
37 |
38 | 相似的人适合一起欢闹,互补的人适合一起变老。
39 |
40 | 
41 |
42 | 跋山涉水的意义,是为了让人学会珍惜每一处来之不易的风景。历经磨砺,才越能加深对幸福的理解。
43 | 人生的旅途,不在于走遍世界,而是终于遇到一个人,让你醒悟:**之前所有走过的路,原来都是为了与TA相遇**。
44 |
45 | 生活将我们磨圆,是为了让我们滚得更远。
46 |
47 | 人要靠谱,被人信任是一种美德和幸福;贤达,心胸开阔才能让天地了然于胸;
48 | 果断,成败往往在瞬间决定;自信,成功的力量源于自身;善缘,没有朋友就没有世界;高瞻,登高才能望远。
49 |
50 | 再烦,也别忘了微笑。再苦,也别忘记坚持。再累,也要很爱自己。
51 |
52 | 但凡成功之人,往往都要经历一段没人支持、没人帮助的黑暗岁月。犹如黎明前的黑暗,捱过去,天也就亮了。
53 | 所谓千里马,不一定是跑得最快的,但一定是耐力最好的。要积蓄力量,等待机会---这样,人生才会有希望。
54 |
55 | 我颠覆了整个世界,只为摆正你的倒影。
56 |
57 | 有时候,你放弃了某个人,不是因为你不再在乎。而是因为你意识到他们不在乎了。
58 |
59 | 不怕缓慢,就怕常站;不怕贫穷,就怕惰懒;不怕对手悍,就怕自己颤。
60 | 最美的不一定是最可爱的,那最可爱的才是最美的;最好的不一定是最合适的;最合适的才是最好的。
61 |
62 | 让你难过的事情,有一天,你一定会笑着说出来。
63 |
64 | 多事,不是我想,就能做到的。很多东西,不是我要,就能得到的。
65 | 很多人,不是我留,就能留住的,我一个人也很好。
66 | 时光如水,总是无言。**你若安好,便是晴天**。
67 |
68 | 开心一天就赢了一天,不开心一天就输了一天。
69 |
70 | 人嘛,不要活得太累,不要忙的太疲惫;想吃了不要太嫌贵,想穿了不要说浪费;
71 | 心烦了找个朋友聚聚会,瞌睡了倒下头就去睡。心态平和永远最美,天天快乐才对。
72 |
73 | 用最真实的自己,才能遇见最应该的那个人。
74 |
75 | 
76 |
77 | 孤独是给你思考自己的时间,在一个人的日子里,你要做的只有一件事,把自己变的**更优秀**。
78 |
79 | 只有见识过烟火与爱情的人,才知道世间的美好与凄凉。
80 |
81 | 人生最甜蜜的欢乐,都是忧伤的果实,人生最纯美的东西,都是从苦难中得来的,我们要亲身经历艰难,然后才懂得怎样去安慰别人。
82 |
83 | 期盼已枯萎,我还在等待。
84 |
85 | 让自己快乐的同时让别人也快乐是智慧,把自己不快的情绪带给他人是愚蠢。
86 | 能把弯路走直的是聪明的人,因为他找到了捷径;
87 | 能把直路走弯的是豁达的人,因为他多看了几道风景。
88 |
89 | 人们日常所犯最大的错误,是对陌生人太客气,而对亲密的人太苛刻。
90 | 把这个坏习惯改过来,天下太平。
91 |
92 | 最美的你不是生如夏花,而是在时间的长河里,波澜不惊。
93 |
94 | 我只想要间小房子,让你做我的小妻子,饭后我帮你洗盘子,要个胖胖的小孩子,等我长出了白胡子,坐在家中的老椅子,来一起记得这日子,和你的美丽白裙子。
95 |
96 | 
97 |
98 | 做一个有质感的女孩:读书旅游,早睡早起;美丽典雅,自强独立。
99 |
100 | 你帮人100分,当有一天你只肯帮80了,他便会清空你所有的恩,宁愿选择只帮他70分的人做朋友。一粒米养恩人,一石米养仇人,老人说的话没错。
101 | 不要动不动就倾其所有,留一些骄傲与心疼给自己,记得了,最凉不过人心。
102 |
103 | 孤独,是给你思考自己的时间,在一个人的日子里,你要做的只有一件事,把自己变得优秀。
104 |
105 | 没关系,你的世界就让你拥有。不打扰,是我的温柔。
106 |
107 | 我知道我想要什么,也知道我该怎么去得到,而且正在做。这样就够了。
108 |
109 | 不求你深深记我一辈子,只求别忘记你的世界我来过。不是每个擦肩而过的人都会相识,也不是每个相识的人都会让人牵挂,至少,我们在今生,在那个地方,在一转身的时候没有错过。偌大的地球上能和你相遇,真的不容易,感谢上天给了我们这次相识相知的缘份。别忘了,你的世界我曾经来过。
110 |
111 | 我想你,有一点点深,有一点点频繁,还一天比一天更浓。
112 |
113 | 和一个人在一起,如果他给你的能量,是让你每天都能高兴得起床,每夜都能安心得入睡,做每一件事都充满了动力,对未来满怀期待,那你就没有爱错人。最合适的感情,永远都不是以爱的名义互相折磨,而是彼此陪伴,成为对方的阳光。
114 |
115 | 何谓道?云在青天水在瓶。
116 |
117 | 想哭的时候,我会闭上眼睛不流泪,然后告诉自己还是可以坚持下去;失落的时候,我可以伪装自己,然后勇敢的对自己说一切总会过去。我宁可让别人觉得我快乐得没心没肺,也不愿意让自己看起来委屈可怜。每一天,我们都不必让昨夜的泪水,去弄湿今天的阳光。
118 |
119 | 爱情就像两个拉着橡皮筋的人,受伤的总是不愿意放手的那一个。
120 |
121 | **真正的缘,不只是那瞬间吸引对方的眼光,而是对方熟悉你后依然是欣赏你,不只是初次的见面就有相见恨晚的感觉,而是在历尽沧桑后去发出“认识你真好”的心里话。**
122 |
123 | 别为不该为的人,伤了不该伤的心。
124 |
125 | 要灭苦,先**破执**。**不固执于追求**,**不以坚强为手段拥有为目标**,心才能没有牵挂,没有负担故无重,才能自由自在。
126 |
127 | 旅行的意义不在于战利品有多少,照片拍了几张,景点占据了几个,而是: **你做了多少疯狂的事,经历了哪个心跳的时刻,和有否看到更不一样的自己**。
128 |
129 | 不要羡慕别人所拥有的幸福。你以为你没有的,可能在来的路上,你以为别人拥有的,可能在去的途中……有的人对你好,是因为你对他好。
130 |
131 | **你必须非常努力, 才能看起来毫不费力!**
132 | **你必须暗自努力, 才能在人前显得轻松如意!**
133 |
--------------------------------------------------------------------------------
/_posts/life/2016-02-26-speech-from-liangqichao-in-tsinghua.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 梁启超在清华大学的演讲
4 | category: 生活
5 | tags: Essay
6 | keywords: 鸡汤,激励之言
7 | description: 梁启超在清华大学的演讲
8 | ---
9 |
10 | 问诸君“为什么进学校?”我想人人都会众口一辞的答道:“为的是求学问。”再问:“你为什么要求学问?”“你想学些什么?”恐怕各人的答案就很不相同,或者竟自答不出来了。诸君啊!我请替你们总答一句罢:“为的是学做人。”
11 |
12 | 人类心理有知、情、意三部分。**所以教育应分为智育、情育、意育三方面,智育要教到人不惑,情育要教到人不忧,意育要教到人不惧**。
13 |
14 | **怎么样才能不惑呢?最要紧是养成我们的判断力**。想要养成判断力,第一步,最少须有相当的常识,进一步,对于自己要做的事须有专门智识,再进一步,还要有遇事能断的智慧。假如一个人连常识都没有,听见打雷,说是雷公发威,看见月蚀,说是蛤蟆贪嘴,那么,一定闹到什么事都没有主意,碰着一点疑难问题,就靠求神问卜看相算命去解决,真所谓“大惑不解”,成了最可怜的人了。
15 |
16 | 学校里小学所教,就是要人有了许多基本的常识,免得凡事都暗中摸索。但仅仅有点常识还不够,我们做人,总要各有一件专门职业。这门职业,也并不是我一人破天荒去做,从前已经许多人做过,他们积了无数经验,发现出好些原理原则,这就是专门学识。我们有了这种学识,应用它来处置这些事,自然会不惑,反是则惑了。
17 |
18 | 做工、做商等等都各有他的专门学识,也是如此。教育家、军事家等等,都各有他的专门学说,也是如此。我们在高等以上学校所求的智识,就是这一类。但专靠这种常识和学识就够吗?还不能。宇宙和人生是活的,不是呆的,我们每日所碰见的事理是复杂的,变化的,不是单纯的,印板的,倘若我们只是学过这一件,才懂这一件,那么,碰着一件没有学过的事来到跟前,便手忙脚乱了,所以还要**养成总体的智慧,才能得有根本的判断力**。
19 |
20 | 这种总体的智慧如何才能养成呢?第一件,要把我们向来粗浮的脑筋着实磨炼他,听他变成细密而且踏实。那么,无论遇着如何繁费的事,我想可以彻头彻尾想清楚他的条理,自然不至于惑了。第二件,要把我们向来昏浊的脑筋,着实将养他,叫他变成清明。那么,一件事理到跟前,我才能很从容很莹澈的去判断他,自然不至于惑了。以上所说常识学识和总体的智慧,都是智育的要件,目的是教人做到“**知者不惑**”。
21 |
22 | 怎么样才能不忧呢?为什么仁者便会不忧呢?想明白这个道理,先要知道中国先哲的人生观是怎样。“仁”到底是什么?很难用言语说明,勉强下个解释,可以说是:“普遍人格之实现。”人格要从人和人的关系上看来。所以仁字从二人。总而言之,要彼我交感互发,成为一体,我的人格才能实现。我们若不讲人格主义,那便无话可说;讲到这个主义,当然归宿到普遍人格。换句话说,宇宙即是人生,人生即是宇宙,我们的人格,和宇宙无二无别。体验得这个道理,就叫做“仁者”。
23 |
24 | 然则这种仁者为什么就会不忧呢?**大凡忧之所从来,不外两端,一曰忧成败,二曰忧得失,我们得着“仁”的人生观,就不会忧成败**。为什么呢?因为我们知道宇宙和人生是永远不会圆满的,所以《易经》六十四卦,始“乾”而终“未济”。正为在这永远不圆满的宇宙中,才永远容得我们创造进化。我们所做的事,不过在宇宙进化几万万里的长途中,往前挪一寸、两寸,哪里配说成功呢?然则不做怎么样呢?不做便连这一寸两寸都不往前挪,那可真真失败了。
25 |
26 | “仁者”看透这种道理,信得过只有不做事才算失败,肯做事便不会失败。所以《易经》说:“君子以自强不息。”换一方面来看,他们又信得过凡事不会成功的几万万里路挪了一两寸,算成功吗?所以《论语》说:“知其不可而为之。”你想,有这种人生观的人,还有什么成败可忧呢?再者,我们得着“仁”的人生观,便不会忧得失,为什么呢?因为认定这件东西是我的,才有得失之可言。连人格都不是单独存在,不能明确的画出这一部分是我的,那一部分是人家的,然则哪里有东西可以为我们所得?既已没有东西为我所得,当然也没有东西为我所失。我只是为学问而问,为劳动而劳动,并不是拿学问劳动等做手段来达某种目的——可以为我们“所得”的。
27 |
28 | 所以老子说:“生而不有,为而不恃。”“既以为人己愈有,既以与人己愈多。”你想,有这种人生观的人,还有什么得失可忧呢?总而言之,有了这种人生观,自然会觉得“天地与我并生,而万物与我同一”,自然会“无入而不自得”。他的生活,纯然是趣味化艺术化。这是最高的情感教育,目的教人做到“仁者不忧”。
29 |
30 | 怎么样才能不惧呢?有了不惑不忧工夫,惧当然会减少许多了。但这是属于意志方面的事。一个人若是意志力薄弱,便有丰富的智识,临时也会用不着,便有优美的情操,临时也会变了卦。然则意志怎么才会坚强呢?头一件须要**心地光明**。孟子说:“浩然之气,至大至刚。行有不慊于心,则馁矣。”又说:“自反而不缩,名褐宽博,吾不惴焉;自反而缩,虽千万人,吾往矣。”俗语说得好:“生平不做亏心事,夜半敲门也不惊。”
31 |
32 | 一个人要保持勇气,须要从一切行为可以公开做起,这是第一著。第二件要不会劣等欲望之所牵制。《论语》记:子曰:“吾未见刚者。”或对曰申枨。子曰:“枨也欲,焉得刚。”一被物质上无聊的嗜欲东拉西扯,那么,百炼钢也会变为绕指柔了。总之,一个人的意志,由刚强变薄弱极易,由薄弱返刚强极难。一个人有意志薄弱的毛病,这个人可就完了。**自己作不起自己的主,还有什么事可做**? 受别人压制,做别人奴隶,自己只要肯奋斗,终须能恢复自由。自己的意志做了自己情欲的奴隶,那么,真是万劫沉沦,永无恢复自由的馀地,终身畏首畏尾,成了个可怜人了。
33 |
34 | 孔子说:“和而不流,强哉矫;中立而不倚,强哉矫;国有道,不变塞焉,强哉矫;国无道,至死不变,强哉矫。”我老实告诉诸君说罢,做人不做到如此,决不会成一个人。但做到如此真是不容易,非时时刻刻做磨炼意志的功夫不可。**意志磨炼到家,自然是看着自己应做的事,一点不迟疑,扛起来便坐,虽千万人吾往矣,这样才算顶天立地一世人,绝不会有藏头躲尾左支右绌的丑态。这便是意育的目的,要教人做到“勇者不惧。”**
35 |
36 | 我们拿这三件事作做人的标准,请诸君想想,我自己现时做到哪一件——哪一件稍为有一点把握。倘若连一件都不能做到,连一点把握都没有,嗳哟!那可真危险了,你将来做人恐怕就做不成。讲到学校里的教育吗,第二层的情育,第三层的意育,可以说完全没有,剩下的只有第一层的知育。就算知育罢,又只有所谓常识和学识,至于我所讲的总体智慧靠来养成根本判断力的,却是一点儿也没有。这种“贩卖智识杂货居”的育,把他前途想下去,真令人不寒而栗!现在这种教育,一时又改革不来,我们可爱的青年,除了他更没有可以受教育的地方。诸君啊!你到底还要做人不要?你要知道危险呀,非你自己抖擞精神想方法自救,没有人能救你呀!
37 |
38 | 诸君啊!你千万别要以为得些断片的智识,就算是有学问呀。我老实不客气告诉你罢,你如果做成一个人,智识自然是越多越好;你如果做不成一个人,知识却是越多越坏。你不信吗?试想全国人所唾骂的卖国贼某人某人,是有知识的呀,还是没知识的呢?试想想全国人所痛恨的官僚政客——专门助军阀作恶鱼肉良民的人,是有知识的呀,还是没有知识的呢?诸君须知道啊,这些人当十几年前在学校的时代,意气横历,天真烂漫,何尝不和诸君一样?为什么就会堕落到这样的田地呀?屈原说的:“但昔日之芳草兮,今真为此萧艾也!岂其有他故兮,莫好修之害也。”天下最伤心的事,莫过于看着一群好好的青年,一步一步的往坏路上走。诸君猛醒!现在你所爱所恨的人,就是你前车之鉴了。
39 |
40 | 诸君啊!你现在怀疑吗?沉闷吗?悲哀痛苦吗?觉得外边的压迫你不能抵抗吗?我告诉你:你怀疑和沉闷,便是因不知才会感;你悲哀痛苦,便是你因不仁才会忧;你觉得你不能抵抗外界的压迫,便是你因不勇才有惧。这都是你的知、情、意未经过修养磨炼,所以还未成人。我盼望你有痛恨的自觉啊!有了自觉,自然会自动。那么学校之外,当然有许多学问,读一卷经,翻一部史,到处都可以发见诸君的良师呀!
41 |
42 | 诸君啊,醒醒罢!养足你的根本智慧,体验出你的人格人生观,保护好你的自由意志。你成人不成人,就看这几年哩。
43 |
--------------------------------------------------------------------------------
/_posts/life/2016-09-27-stay_hungry-stay_foolish.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Stay Hungry, Stay Foolish
4 | date: 2016-09-27 18:52:53 +0800
5 | categories: 生活
6 | tags: 人生
7 | keywords: Stay Hungry, Stay Foolish
8 | description: 什么是 Stay Hungry, Stay Foolish
9 | ---
10 |
11 | 此篇是偶然间看到的,是关于对 `Steve Jobs` 那句经典名句 **Stay Hungry, Stay Foolish** 的解读,余亦其认为分析独到且合理,品读再三,欢喜不已,特录之于此;原文为繁体,地址如是:[Stay Hungry, Stay Foolish.](http://mrjamie.cc/2011/09/16/stay-hungry-stay-foolish/),作者Jamie。
12 |
13 | 
14 |
15 | 2005 年,Steve Jobs 在 Stanford 毕业典礼上演讲,最后送给了在场的年轻人一句「Stay Hungry, Stay Foolish.」这个演讲后来被广为流传,各种中译版也纷纷出现,有些人把这句话翻译为「求知若饥,虚心若愚」,《Cheers 杂志》则把这句话翻译为 [「饥渴求知,虚怀若愚」](http://mmdays.com/2007/04/02/steve-jobs/)。无论如何,我认为这些都是错误的解读。
16 |
17 | ## **什么叫 Hungry?**
18 |
19 | 美国人不会用 hungry 来形容对于知识的追求。对知识,他们用的是「好奇」(curious)这个词。一个求知若渴的人,叫做「intellectually curious」或是「eager to learn」,但绝对不会是「intellectually hungry」,也极少是「hungry to learn」。
20 |
21 | 用到 hungry 的时候,针对的「成功」,也就是「hungry for success」。所以 Steve Jobs 的「Stay Hungry」,根本不是叫你去求「知」的意思,他真正想说的,是要你去不停的寻找成功,永远不知道满足。为什么?因为创业者最常犯的错误,除了做出没人要的东西之外,就是太快满足于初期的成功,接着开始以为自己是神,再也不会失败。
22 |
23 | 杨致远就是最好的例子,90 年代末期 Yahoo 叱咤网络圈后,他开始陶醉于成功之中,成天打高尔夫球、旅行,结果呢?快转十年之后,Yahoo 现在的市值等于他们手中持有的阿里巴巴股票,也就是说这家母公司是一毛不值。为什么?因为他失去了 hungry。
24 |
25 | 回头看 Steve Jobs,过去 14 年来,他像一头肌饿的猛兽,永远不会满足,Mac、iPod、iPhone、iPad 一招接一招,不停直捣对手的心脏,如果不是因为健康状况,他大概永远没有停歇的一天,这,就是 hungry,这,就是 Fox写的「稀有的猪」。
26 |
27 | ## **什么叫 Foolish?**
28 |
29 | 美国人也不会用 foolish 来形容虚心,虚心叫做「humble」、叫做「be a good listener」、叫做「be open to new ideas」。而 fool,根本不是「虚心的人」,fool 是「笨蛋」的意思。
30 |
31 | 「You gotta be a fool to believe that will work.」(你一定是个白痴才会相信那东西会成功)是所有的创业者最常听到的,而 Steve Jobs 想告诉你的,就是别理他们,继续当你的傻瓜。因为要革命,你就注定要在众人的误会中孤独的前进。
32 |
33 | 所以各位创业者,记住 Steve Jobs 的 `Stay Hungry, Stay Foolish` .
34 |
35 | **Stay Hungry, Stay Foolish.**
36 |
37 | ---
38 |
39 | 据悉,在《乔布斯传》里,他有说过这样一段话:
40 |
41 | >迪伦本来可以一直唱抗议歌曲的,这样他也能赚很多钱,但是他没有那么做。他必须向前走,当 1965 年他转做电子音乐时,很多人都疏远了他。1966 年的欧洲巡演是他的巅峰。他会先上台演奏原声吉他,观众非常喜欢。然后他会带出 TheBand 乐队,他们都演奏电子乐器,观众有时候就会喝倒彩。有一次他正要唱《Like a Rolling Stone》,观众中有人高喊“叛徒!”迪伦说:“搞他妈个震耳欲聋!”他们真那样做了。披头士乐队也一样。他们一直演变、前行、改进他们的艺术。那就是我一直试图做的事情——不断前进。否则,就如迪伦所说,如果你不忙着求生,你就在忙着求死 (If you're not busy being born, you're busy dying)。
42 |
43 | 而在 Steve Jobs 本人名言中也是如此阐释着他对时间,以及自己内心声音的看法:
44 |
45 | >Your time is limited, so don't waste it living someone else's life. Don't be trapped by dogma - which is living with the results of other people's thinking. Don't let the noise of other's opinions drown out your own inner voice. And most important, have the courage to follow your heart and intuition. They somehow already know what you truly want to become. Everything else is secondary.
46 | 你的时间有限,所以不要为别人而活。不要被教条所限,不要活在别人的观念里。不要让别人的意见左右自己内心的声音。最重要的是,勇敢的去追随自己的心灵和直觉,只有自己的心灵和直觉才知道你自己的真实想法,其他一切都是次要。
47 |
48 | 从这里来品读,也可以清醒的明白,将`Stay Foolish` 翻译为 `虚心若愚`是多么敷衍的认识;这里的敷衍在于,国人骨子里犹存的那种中庸惯性,以及中国文人美学的不纯正延伸。更需要知道的是,这个世界本源即被那少数人所引领,那么这种大成功也非寻众人所拥有,否则成功的彼岸岂不早已人满为患?**很多时候,善良的建议反而会让人变得平庸,人生总需要一些一意孤行,勇敢的去追随自己的心灵和直觉**。故而,如果非要将其译为八字箴言,更倾向于 @知乎-Von Don 所给的答案:`功成不息;坚守痴心`。
49 |
50 | @Last Modify: 2016-09-28
51 |
--------------------------------------------------------------------------------
/_posts/life/2016-10-19-sexy-philosophical.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 有点色,但很有哲理
4 | date: 2016-10-19 18:18:18 +0800
5 | categories: 生活
6 | tags: 人生
7 | keywords: 有点色,但很有哲理(sexy philosophical | 性感的哲学)
8 | description: 有点色,但很有哲理:赵四小姐从十六岁开始跟张学良。跟一年,属奸情;跟三年,算偷情;跟六十年,便成为千古爱情!启示:很多事情不看做不做,而看你做多久。
9 | ---
10 |
11 | 1、赵四小姐从十六岁开始跟张学良。跟一年,属奸情;跟三年,算偷情;跟六十年,便成为千古爱情!
12 |
13 | > 启示:很多事情不看做不做,而看你做多久。
14 |
15 | 2、民国初名妓小凤仙,如果跟了民工,就属于扫黄对象;她跟了蔡锷,则千古留芳了;倘若她跟了孙中山,那便可能成为国母。
16 |
17 | > 启示:不在于你干什么,而看你跟谁干。
18 |
19 | 
20 |
21 | 3、女浴室起火,里面人乱作一团,赤裸身体往外跑,只见大街上白花花一大群,一老者大喊“快捂住”,众裸女突然醒悟,但身上要紧部位有三处,手忙脚乱捂不过来,不知所措。这时老者又大喊:“捂脸就行,下面都一样!”
22 |
23 | > 启示:在特殊情况下抓工作不可能面面俱到,要抓住重点。
24 |
25 | 4、少妇报案:“我把钱放在胸衣内,在拥挤的地铁内被一帅哥偷走了…”警察纳闷:“这么敏感的地方你就没觉察到?”少妇红着脸答:“谁能想到他是摸钱呢?”
26 |
27 | > 启示:“让客户的钱在愉快体验中不知不觉地被摸走,是商业模式的最高境界!
28 |
29 | 5、组织几个人收保护费,那是黑社会。朱元障组织几百万人抢下王位,就是伟大的皇帝。武则天睡了公公睡儿子,虽属乱伦,但乱的够大,故成为女皇。
30 |
31 | > 启示:不在你干没干坏事,而在于干多大!
32 |
33 | 6、一公司在小便池上贴上条:“往前一小步,文明一大步”,结果地上仍有许多尿渍。后来公司认真吸取教训,重新设计成:“尿不到池里说明你短;尿到池外说明你软”,结果地上比以前干净许多。
34 |
35 | > 启示:给客户的投资建议一定要具体,确切,中要害.
36 |
37 | 7、某日,女秘书神色凝重地说:王总,我怀孕了。王继续低头看文件,然后淡淡一笑:我早结扎了。女秘书楞了一会媚笑道:我和您开玩笑呢!王抬起头看了她一眼,喝了口茶说:我也是。
38 |
39 | > 启示:在江湖上混的人,遇事不要慌,先让子弹飞一会。
40 |
41 | 8、男子去提亲,女方家长:请自我介绍。
42 |
43 | A说:我有一千万;
44 |
45 | B说:我有一栋豪宅,价值两千万;
46 |
47 | 家长很满意。就问C,你家有什么?
48 |
49 | C答:我什么都没有,只有一个孩子,在你女儿肚子里。
50 |
51 | AB无语,走了。
52 |
53 | > 启示:核心竞争力不是钱和房子,是在关键的岗位有自己的人。
54 |
55 | 9、[中央党校教学案例]一男干部怕吃苦不愿援藏,谎称眼睛突然失明。领导闻听,出面让一美女脱光站在他面前,问“看见了吗”?答:看不见。领导飞起一脚给他臀部:狗日的,老二都直了还看不见?收拾行李,明天进藏。
56 |
57 | > 启示:1.人性化才能真正了解人。2.组织比个人高明。3.本能会出卖你。
58 |
--------------------------------------------------------------------------------
/_posts/life/2016-12-20-the-worth-of-programmers.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 程序员的价值体现
4 | date: '2016-12-20 16:30:06 +0800'
5 | categories: 生活
6 | tags: Programmers
7 | keywords: 程序员,价值
8 | description: 程序员的价值;
9 | ---
10 |
11 | 前阵子在博客园,有看到一篇文章,名曰[程序员,你为什么值这么多钱?](http://www.cnblogs.com/mindwind/p/6106425.html);这引得蛮多人赞同,争相引载,这其中也包括我。鉴于忙碌,一直有将此博文留在 Chrome Tab页内,几经辗转直至此时。个人这其中讲到些许观点,很值得去思考,故此引入此处以作分享。譬如这其中有谈到,程序员也有两个成本:技能成本和传递成本,就很有道理;毕竟,你懂多少,和你给人(多半涉及到的面试官)感觉懂多少,很多情形之下是两码事;又毕竟,面试官这群人,各个方面也是层次不齐不是?所以,在这个时候传递成本显得就很重要;因此呢,社区分享,开源贡献,曝光作品,勤写博客等等,就发挥着这`传递成本`的作用。
12 |
13 |
14 |
15 | 听说一段时间不加薪,人就会开始思考起和工资有关的问题。消费水平又提升了,能力也进步了,经验也更多了,怎么还没涨工资呢?
16 |
17 | 近两年,有了点余钱就开始考虑起投资来,比如:投资股票首先需要判断的就是关于公司价值和价格的关系。回到个人身上,似乎工资也就是个人价值在市场上的一个价格。那我们的工资是如何被定义或确定的?
18 |
19 | 因为我的程序员职业背景,下面就以这个职业为例来分析下这个问题。
20 |
21 | ## **表象与实质**
22 |
23 | 工资的高低给我们的感觉似乎和你的技能、经验呈一个正比关系。毕竟每次找工作面试的时候,考察的都是候选人的技能、经验相关水平,然后给予一个相应的级别,最后确定一个工资范围。而且一般有正规工资体系的公司,都会按照专业水平划分能力级别,以此对应不同的工资等级。
24 |
25 | 这个对应关系是我们能观察到的一个现象,且有切身的体会。所以很直觉的就会把工资高低和我们的技能水平、经验值关联起来。工作初期的很长那么一段时间内我都是这么以为的。
26 |
27 | 因而,当刚工作了两三年后,技能水平迅猛提升、经验值飞速增长,这个阶段属于《两种增长类型》中的对数增长初期。上升曲线特别陡峭,而工资的增长呢,则属于指数增长的初期,几乎感觉不到增长,自我感觉是技能和经验已经翻倍,但工资似乎还在原地或就涨了 20%。
28 |
29 | 其中有个例外就是校招,校招刚毕业的同学的工资有可能比毕业工作了两三年的同学更高,出现倒挂现象。这在大公司的校招比较常见,这里决定工资高低的,和经验技能无关,只和公司的人才储备、市场竞争、品牌宣传有关。
30 |
31 | 所以,工资和技能经验的直观关系仅仅是一个表象,那么它的实质是什么呢?曾经读到刘润的一篇文章,其中写道:
32 |
33 | >工资不是用来支付给技能的,不要以为技能越高、工资自然应该越高。
34 | 工资是用来支付给责任的,责任越大,工资越高。
35 | 涨工资,是因为承担了更大的责任。
36 |
37 | 上面所说正是工资的实质。所以,站在公司的角度,它会设计很多不同的岗位,有管理岗、有各种专业系列岗,而每个岗位又对应不同的职责。而岗位职责对技能和经验的要求决定了该岗位的工资范围,也决定了整个公司的人力成本范围。
38 |
39 | 搞清楚了工资的实质,就明白涨工资是怎么回事了。涨工资,一种是岗位职责工资范围内的调节,毕竟如果长时间不涨,也不利于人员稳定。另一种是,升级到更高级别岗位,这种除了当下领到的工资涨了,而潜在的可涨的工资范围也提高了。所以,有时你的技能提升后,但公司业务发展没那么快,不能提供更高级别的岗位职责,工资也就涨不上去了。
40 |
41 | 另一个误解是,工资跟我的表现有关。今年工作很努力,表现很好,年底了公司业绩也很好,就会预期涨工资。但前面说了工资是支付给责任的,不取决于你的表现。这种情况一般通过发奖金来奖励突出的业绩,这属于短期激励,当然也有公司会在岗位职责工资范围内适当调节提升以保持长期激励。
42 |
43 | 对于管理岗位,因为经理人不属于个人贡献者,所以其工资的一部分通常和团队绩效绑定,称为“绩效奖金”。这个奖金一般在管理岗的全部薪酬中的百分比会随着薪酬的增加而增加,比如:高层可能占到 50%,而中层占到 20%-30%。前 Intel CEO 安迪·格鲁夫说过:
44 |
45 | >每一份工作所包含的最大价值都是有限的,不管一个人在这个职位上待了多久,最后总会达到薪资的上限。
46 |
47 | 这个上限就是岗位工资范围的天花板。而外部市场会提供一些工资立即涨 50% 甚至翻倍的机会。面对这种机会时,先不要自大的以为你的价值被低估了,心想你看外面市场给了翻倍的价格。很可能是这样的,外部公司出现了岗位空缺,考虑到公司业务正快速发展的时间和市场机会成本,所以会开出一个高于一般市场价格的工资水平来迅速补缺。另外,空缺的岗位职责实际可能比你在当前公司的职责更大,你还要考虑自己能否承担得起。别通过了面试,最后却过不了试用期,仅领了三个月或半年的翻倍工资,实际是得不偿失的。
48 |
49 | 认清自己,认清工资的本质。
50 |
51 | ## **价值与价格**
52 |
53 | 程序员提供的是软件开发这种技术服务,而为了提供这种服务需要相当长时间的知识、技能和经验的积累。获得具备提供这类服务所需的学习和实践的时间构成了我们的「技能成本」,这形成了价值的一部分。
54 |
55 | 而公司支付给程序员的工资就是提供技术服务的市场零售价。既然提到了「市场零售价」这个概念,想一想,市场上有没有同类的,成本差距不大的商品,零售价却可以差距巨大,这是为什么?
56 |
57 | 我想到得是:女士皮包。曾经看到过一个案例:
58 |
59 | >北京新光天地的某著名奢侈品专卖店遭遇盗窃,据说一个零售价好几万的包包被偷了。店长报警,但最终警方并没有刑事立案,因为那个包包的成本进价不过几百块钱。
60 |
61 | 而在程序员提供技术服务的市场上也存在类似情况,技能经验水平差不多,但工资(零售价)差别巨大的个体。思考下包包的例子就明白了,奢侈品包包除了材料成本,还有什么成本?客户之所以要买这个奢侈品包包,最大的成本不在材料,而是在客户的头脑中建立起关于这个包包的品牌信息并形成一种对客户有独特价值的认知,这属于另一种成本:「传递成本」。
62 |
63 | 那么,程序员也有两个成本:
64 |
65 | - 技能成本:专注于提供技术和服务本身所占用的时间和注意力。
66 | - 传递成本:让你潜在的“客户”知道你所能提供的技术和服务的价值占用的时间和注意力。
67 |
68 | 这里有个案例很形象的说明两者的关系:
69 |
70 | >2003 年,一群海洋科学家历时三年,花费了三百万美元研究经费,完成了一份关于美国海岸环境状况的报告。这份报告反映了巨大的环境问题,可以说是触目惊心,所以参与研究的科学家都认为此报告一出必然石破天惊,成为每晚电视新闻主题,登上《时代周刊》的封面,等着被记者采访轰炸。结果除了纽约时报在二十二版给了个报道,报告几乎没有引起任何反响,这件事就这么结束了。
71 |
72 | 花费了三百万美元研究经费,但仅有 3% 用于宣传,所以毫无影响力。这个案例之中,97% 的研究经费相当于「技能成本」,而用于宣传的 3% 相当于「传递成本」。当二者差距悬殊时,即使很有价值的东西也很难被市场所知晓,无法实现价值最大化。传递价值也需要成本,而且成本不低,正所谓酒香也怕巷子深。
73 |
74 | 所以,有人总是感觉自己被低估,因为他正巧知道了另一个和自己技术差不多的人,似乎只是人际关系更好反而获得的零售价更高。而程序员这类技术人员倾向于高估自身的价值,而认为市场低估了自己的价格,往往是因为对传递价值部分的成本没有足够的认识。
75 |
76 | 这两个成本最终都会成为你价值的一部分,而且市场上确实会为此埋单。两个技能水平相当的程序员,一个在市场上默默无闻,一个在市场上拥有相当的影响力并占据了潜在客户的头脑。当后者要去市场上出售时,零售价通常会更高。
77 |
78 | 搞清楚了价值的两个成本,就能很好的理解其价格了。思考下,为什么程序员在一线城市的人力和生活成本高居不下,企业还是要在一线城市最贵的写字楼扎堆?
79 |
80 | 我的理解就是这两个成本的原因。程序员的技能成本大量依赖一线城市的高校教育资源。而程序员群体的普遍特性是忽视传递成本,那么企业只好在其扎堆的地方以最小化传递成本。因为考虑市场的时间和机会成本足以覆盖一线城市相对二三线城市的人力成本差价的。
81 |
82 | 市场上的商品有两种销售方式:
83 |
84 | - 卖的更多:大型卖场,薄利多销。
85 | - 卖的更贵:奢侈品,相对成本一百倍的毛利。
86 |
87 | 程序员提供的技术服务因为无法卖的更多,所以只有一种选择,像奢侈品一样卖的更贵,前提是学会像奢侈品牌一样思考。
88 |
89 | ## **发展与变化**
90 |
91 | 有时价值没变化,但工资也可能会一直涨。从现在起你即使停止技能增长,只是维持技能不被市场淘汰。在可预见的未来十多年,你的工资还会翻好几倍。这有两个原因:
92 |
93 | 1. 货币是保持贬值趋势的
94 | 2. 人口抚养比变化
95 |
96 | 人口抚养比,是一个国家非劳动的人口占总人口的比率。来自国家信息中心的数据,2011 年是中国人口红利发生转折的一年,从这年开始,总抚养比由降转升,2011 年为 34.4%,2012 年为 34.9%。这是劳动年龄人口相当长时期第一次出现了绝对下降,这意味着中国 15 岁以上不满 60 周岁的劳动年龄人口,在 2030 年以前将稳步地有所减少,中国已经面临“人口红利”逐步消退的压力。
97 |
98 | 简单说,就是 2016 年,14 亿人有 5 亿无法工作,人口抚养比 5/14=35.7%。如果 60 岁退休政策不变的话,2030 年大概会反过来,5 亿人工作养 9 亿无法工作(未成年、退休)的人。按这个趋势和经济规律,好消息是劳动力供给减少价格自然会上升;坏消息是,劳动强度和压力会更大,毕竟一个劳动人口差不多要养活两个非劳动人口。
99 |
100 | 另外一个值得关注的可能就是人工智能的发展,需要多少年,对人的替代因素能达到一个不可忽视的比例?这一点暂时只能且行且看吧。......
101 |
102 | 关于工资,我们从表象到本质,从价格到价值,从当下到未来逐步看清了其中的真实。那么就只需客观面对这个真实,按照经济规律行事,理解市场定价原则。再积极一些,尽可能高效率的提高个人价值产出率,但也要认识到工资的“玻璃天花板”。
103 |
104 | 还记得前面提及的[《两种增长类型》](http://mp.weixin.qq.com/s?__biz=MzAxMTEyOTQ5OQ==&mid=2650610717&idx=1&sn=f23d1afadab0c22249eab5f332cd0677&chksm=834c7be9b43bf2ff13e168b25b319348da2f47d9df358721971b47f227322ee293551a6fba6c)吗?不幸的是工资增长符合对数曲线,但价值增长是可以有办法走指数曲线的,跨过了指数增长的拐点再兑现价值,收入就会突破工资增长的天花板。
105 |
106 | 至于如何做?还没有清晰的思考认知,倒是觉得和菜头这句话很有道理:
107 |
108 | >因为只有真正认识你价值的人,最终才会成为你价值的一部分。
109 |
110 | 当然,如果你还在对数增长的陡峭期,那么就简单了,先让工资增长到天花板附近吧。
111 |
--------------------------------------------------------------------------------
/_posts/life/2017-11-18-域外杂谈·农场 .md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 域外杂谈·农场-王小波
4 | date: 2017-11-18 20:00:20 +0800
5 | categories: 生活
6 | tags: 人生
7 | keywords: 域外杂谈 农场 王小波
8 | description: 王小波《域外杂谈·农场》
9 | ---
10 |
11 | 什么地方只要有了中国人,就会有中国餐馆,这是中国人的生计。过去在美国见到的绝大多数中国人都和餐馆有关系。现在不一样了。有的人可能是编软件的,有的人可能是教书的,但是种类还是不多。物理学说,世间只有四种力:强力,弱力,电磁力和万有引力。中国人在外的生计种类也不比这多多少。这些生计里不包括大多数中国人从事的那一种:种地。这是因为按照当地的标准,中国人都不会种地。刚到美国,遇到了一个美国老太太,叫沃尔夫,就是大灰狼的意思。她是个农民,但是不想干了,叫我教她中文,她要到中国来教书。我教她中文,她就教我英文,这是因为她拿不出钱来做学费。但是这笔买卖我亏了。我教了她不少地道的北京话,她却找了几本弥尔顿的诗叫我抑扬顿挫地念。念着念着,我连话都不会说了。沃尔夫老太太有英美文学的学位,但是她教给我的话一出口,别人就笑。这倒不是因为她的学位里有水分,而是因为时代在前进。在报纸上看到哈佛大学英美文学系老师出个论文题:论《仲夏夜之梦》。学生不去看莎翁的剧本,却去找录像带看。那些录像带里女孩子都穿超短裙,还有激光炮。沃尔夫老太太让我给她念杨万里的诗,念完以后,她大摇其头,说是听着不像诗。我倒知道古诗应当吟诵,但我又不是前清的遗老,怎么能会。我觉得这位老太太对语言的理解到中国来教英文未必合适。最后她也没来成。
12 |
13 |
14 |
15 | 现在该谈谈沃尔夫老太太的生计——认识她不久,她就请我到她农场上去玩,是她开车来接的。出了城走了四个多小时就到了,远看郁郁葱葱的一大片。她告诉我说,树林子和宅地不算,光算牧场是六百多英亩,合中国亩是三四千亩。在这个农庄上,总共就是沃老太太一个人,还有一条大狗,和两千多只羊。我们刚到时,那狗跑来匆匆露了一面,然后赶紧跑回去看羊去了。沃尔夫老太太说,她可以把农场卖掉。这就是说,她把土地、羊加这只狗交给别人,自己走人,这是可以的。但是这只狗就不能把农场卖掉——换言之,这只狗想把土地、羊加沃尔夫老太太交给别人,自己走掉就万万不能,因为老太太看不住羊。这个笑话的结论是农场上没有她可以,没有它却不成。当然,这是老太太的自谦之辞。车到农场,她就说:要把车子上满油,等会出去时忘了可找不到加油站。于是她把车开到地下油库边上,用手泵往车里加油,摇得像风一样快。我替她摇了一会,就没她摇得快,还觉得挺累。那老太太又矮又瘦,大概有六十多岁。我是一条彪形大汉,当时是三十五岁。但是我得承认,我的臂力没有她大。她告诉我说,原来她把汽油桶放在地面上,邻居就说有碍观瞻。地方官又来说,不安全。最后她只得自己动手建了个地下油库,能放好几吨油。我觉得这话里有水分:就算泥水活是她做的,土方也不能是她挖的。不过这话也不敢说死了,沃尔夫老太太的手像铁耙一样。后来她带我去看她的家当,拖拉机、割草机等等。这么一大堆机器,好的时候要保养,坏了要修,可够烦人的了。我问她机器坏了是不是要请人修,她就直着嗓子吼起来:请人?有钱吗?
16 |
17 | 后来我才知道,沃尔夫老太太这样的农妇带有玩票的性质,虽然她有农学的学位,又很能吃苦耐劳,但毕竟是个老太太。真正的个体劳动者,自己用的机器坏了,送给别人去修就是耻辱。不仅是因为钱被人赚走了,还因为承认了自己无能。后来我们到一位吊车司机家做客,他引以为自豪的不是那台自己的价值三十万美元的吊车,而是他的修理工具。那些东西都是几百件一套的,当然我们看了也是不得要领。他还说,会开机器不算一种本领,真正的本领是会修。假如邻居或同行什么东西坏了请他修,就很光荣。而自己的家什坏了拾掇不了要请别人,就很害臊。总而言之,这就是他的生计。他在这方面很强,故而得意洋洋。在美国待了几年,我也受到了感染。我现在用计算机写作,软件是我自己编的,机器坏了也不求人,都是自己鼓捣。这么干的确可以培养自豪感。
18 |
19 | 沃尔夫老太太有三个女儿,大女儿混得很成功,是个大公司驻日本的代表。这位女儿请她去住,她不肯,说没有意思。我在她家里看到了男人的袜子,聊天时她说到过还有性生活,但是她没和别人一块住。照她的说法,一个人一只狗住在一个农场上是一种理想的生活方式。不过她也承认,这几年实在是有点顶不住了。首先,要给两千只羊剃毛,这件事简直是要累死人。其次,秋天还要打草。除此之外,环绕她的牧场有十几公里的电网,挡住外面的狼(更准确地说是北美野狗)和里面的羊,坏了都要马上修好,否则就不得了啦。等把这些事都忙完就累得七死八活。当时正是深秋,她地上有十几棵挺好的苹果树,但是苹果都掉在地上。她还种了些土豆,不知为什么,结到地面上来了。晚饭时吃了几个,有四川花椒的味道——麻酥酥的。我很怀疑她的土豆种得不甚得法,因为土豆不该是这种味道。远远看去,她那片墨绿色的牧场上有些白点子。走近了一看,是死羊。犄角还在,但是毛早被雨水从肢体上淋下来,大概死了有些日子了。面对着这种死羊,老太太面露羞愧之色,说道:应该把老羊杀死,把皮剥下来。老羊皮还能派上用场,但是杀不过来。除此之外,她也不知道自己有多少只羊。因为那些羊不但在自己死掉,还在自己生出来。好在还有Candy(她那只狗)知道。Candy听见叫它名字,就汪汪地叫,摇摇尾巴。我在沃尔夫老太太农场上见到的景象就是这样的。
20 |
21 | 在美国我结识了不少像沃尔夫老太太这样的人——个体吊车司机、餐馆老板、小镇上的牙医等等,大家本本分分谋着一种生计,有人成功,有人不成功。不成功的人就想再换一种本分生计,没有去炒股票,或者编个什么故事惊世骇俗。这些人大概就叫人民吧。美国的政客提到美国富强的原因,总要把大半功劳归于美国高素质的人民,不好意思全归因于自己的正确领导。回了中国,我也尽结识这样的人。要是有人会炒股票,或者会写新潮理论文章,我倒不急于认识。这大概是天性使然吧。
22 |
23 | 本篇最初发表于1993年第5期《四川文学》杂志。
24 |
--------------------------------------------------------------------------------
/_posts/life/2017-12-17-关于格调.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 关于格调-王小波
4 | date: 2017-12-17 22:50:20 +0800
5 | categories: 生活
6 | tags: 人生
7 | keywords: 关于格调 王小波
8 | description: 王小波《关于格调》
9 | ---
10 |
11 | 最近我出版了一本小说《黄金时代》,有人说它格调不高,引起了我对格调问题的兴趣。各种作品、各种人,尤其是各种事件,既然有高有低,就有了尺度问题。众所周知,一般人都希望自己格调高,但总免不了要干些格调低的事。这就使得格调问题带有了一定的复杂性。
12 |
13 | 当年有人问孟子,既然男女授受不亲,嫂子掉到水里,要不要伸手去拉。这涉及了一个带根本性的问题,假如"礼"是那么重要,人命就不要了吗?孟子的回答是:用手去拉嫂子是非礼,不去救嫂子则"是豺狼也",所以只好从权,宁愿非礼而不做豺狼。必须指出,在非礼和豺狼之中做一选择是痛苦的,但这要怪嫂子干吗要掉进水里。这个答案有不能令人满意的地方,但不是最坏,因为他没有说戴上了手套再去拉嫂子,或者拉过了以后再把手臂剁下来。他也没有回答假如落水的不是嫂子而是别的女人,是不是该去救。但是你不能对孟子说,在生活里,人命是最重要的,犯不着为了些虚礼牺牲它--说了孟夫子准要和你翻脸。另一个例子是舜曾经不通知父亲就结了婚。孟子认为,他们父子关系很坏,假如请示的话,可能一辈子结不了婚;他还扯上了一些不孝有三无后为大的话,结论是舜只好从权了。这个结论同样不能令人满意,因为假如舜的父亲稍稍宽容,许可舜和一个极为恶毒的女人结婚,不知孟子的答案是怎样的。假如让舜这样一位圣贤娶上一个恶毒的妇人,从此在痛苦中生活,我以为不够恰当。倘若你说,在由活里,幸福是最重要的,孟老夫子也肯定要和你翻脸。但不管怎么说,一个理论里只要有了"从权"这种说法,总是有点欠严谨。好在孟子又有些补充说明,听上去更有道理。
14 |
15 |
16 |
17 | 有关礼与色孰重的问题,孟子说,礼比色重,正如金比草重。虽然一车草能比一小块金重,但是按我的估计,金子和草的比重大致是一百比一--搞精确是不可能的,因为草和草还不一样。这样我们就有了一个换算关系,可以作为生活的指南,虽然怎么使用还是个问题。不管怎么说,孟子的意思是明白的,生活里有些东西重,有些东西轻。正如我们现在说,有些事格调高,有些事格调低。假如我们重视格调高的东西,轻视格调低的东西,自己的格调就能提升。
18 |
19 | 作为一个前理科学生,我有些混账想法,可能会让真正的人文知识分子看了身上长鸡皮疙瘩。对于"礼"和"色",大致可以有三到四种不同的说法。其一,它们是不同质的东西,没有可比性;其二,礼重色轻,但是它们没有共同的度量;最后是有这种度量,礼比色重若干,或者一单位的礼相当于若干单位的色;以上的分类恰恰就是科学上说的定类(nominal)、定序(ordinal)、定距(interval)和定比(ratio)这四种尺度(定距和定比的区别不太重要)。这四种尺度越靠后的越精密、格调既然有高低之分,显然属于定序以后的尺度。然而,说格调仅仅是定序的尺度还不能令人满意--按定序的尺度,礼比色重,顺序既定,不可更改,舜就该打一辈子光棍。如果再想引入事急从权的说法,那就只能把格调定为更加精密的尺度,以便回答什么时候从权,什么时候不可从权的问题--如果没个尺度,想从权就从权,礼重色轻就成了一句空话。于是,孟子的格调之说应视为定比的尺度,以格调来度量,一份礼大致等于一百份色。假如有一份礼,九十九份色,我们不可从权;遇到了一百零一份色就该从权了。前一种情形是在一百和九十九中选了一百,后者是从一百和一百零一中选了一百零一。在生活中,作出正确的选择,就能使自己的总格调得以提高。
20 |
21 | 对于作品来说,提升格调也是要紧的事。改革开放之初有部电影,还得过奖的,是个爱情故事。男女主角在热恋之中,不说"我爱你",而是大喊"I love my motherland!"场景是在庐山上,喊起来地动山摇,格调就很高雅,但是离题太远。国外的电影拍到这类情节,必然是男女主角拥抱热吻一番,这样格调虽低,但比较切题。就爱情电影而言,显然有两种表达方式,一种格调高雅,但是晦涩难解。另一种较为直接,但是格调低下。按照前一种方式,逻辑是这样的:当男主角立于庐山之上对着女主角时,心中有各种感情:爱祖国、爱人民、爱领袖、爱父母,等等。最后,并非完全不重要,他也爱女主角。而这最后一点,他正急于使女主角知道。但是经过权衡,前面那些爱变得很重,必须首先表达之,爱她这件事就很难提到。而女主角的格调也很高雅,她知道提到爱祖国、爱人民等等,正是说到爱她的前奏,所以她耐心地等待着。我记得电影里没有演到说出"I love you",按照这种节奏,拍上十几个钟头就可以演到。改革开放之初没有几十集的连续剧,所以真正的爱情场面很难看到。外国人在这方面缺少训练,所以对这部影片的评价是:虽然女主角很迷人,但不知拍了些啥。
22 |
23 | 按照后一种方式,男主角在女主角面前时,心里也爱祖国、爱上帝,等等。但是此时此地,他觉得爱女主角最为急迫,于是说,我爱你,并且开始带有性爱意味的身体接触。不言而喻,这种格调甚为低下。这两种方式的区别只在于有无经过格调方面的加权运算,这种运算本身就极复杂,导致的行为就更加复杂。后一种方式没有这个步骤,显得特别简捷,用现时流行的一个名词,就是较为"直露"。这两种方式的区别在于前者以爱对方为契机,把祖国人民等等-一爱到,得到了最高的总格调。而后者径直去爱对方,故而损失很大,只得到了最低的总格调。
24 |
25 | 说到了作品,大家都知道,提升格调要受到某种制约。"文革"里有一类作品只顾提升格调,结果产生了高大全的人物和高大全的故事,使人望之生厌。因为这个原故,领导上也说,要做到政治性与艺术性的统一--作品里假如只有格调,就不成个东西。这就是说,格调不是评价作品唯一的尺度。由此就产生了一个问题,另外那种东西和格调是个什么关系?这个问题孟子肯定会这么回答:艺术与格调,犹色与礼也。作品里的艺术性,或则按事急从权的原则,最低限度地出现;或则按得到最高格调的原则,合理地搭配。比如说,径直去写男女之爱,得分为一,搭配成革命的爱情故事,就可以得到一百零一分。不管怎么说,最后总要得到高大全。
26 |
27 | 我反对把一切统一到格调上,这是因为它会把整个生活变成一种得分游戏。一个得分游戏不管多么引人入胜,总不能包容全部生活,包容艺术,何况它根本就没什么意思。假如我要写什么。我就根本不管它格调不格调;正如谈恋爱时我决不从爱祖国谈起。
28 |
29 | 现在可以谈谈为什么别人说我的作品格调低--这是因为其中写到了性。因为书中人物不是按顺序干完了格调高的事才来干这件格调低的事,所以它得分就不高。好在评论界没有按礼与色一百比一的比例来算它的格调,所以在真正的文学圈子里对它的评价不低,在海外还得过奖。假如说,这些人数学不好,不会算格调,我是不能承认的。不说别人,我自己的数学相当好,任何一种格调公式我都能掌握、我写这些作品是有所追求的,但这些追求在格调之外。除此之外,我还怀疑,人得到太多的格调分,除了使别人诧异之外,没有实际的用处。
30 |
31 | 坦白地说,我对色情文学的历史有一点了解。任何年代都有些不争气的家伙写些丫丫乌的黄色东西,但是真正有分量的色情文学都是出在"格调最高"的时代。这是因为食色性也,只要还没把小命根一刀割掉,格调不可能完全高。比方说,英国维多利亚时期出了一大批色情小说,作者可以说有相当的文学素质;再比方说,"文化革命"里流传的手抄小说,作者的素质在当时也算不错。要使一个社会中一流的作者去写色情文学,必须有极严酷的社会环境和最不正常的性心理。在这种情况下,色情文学是对假正经的反击。我认为目前自己尚写不出真正的色情文学,也许是因为对环境感觉鲁钝。前些时候我国的一位知名作者写了《废都》,我还没有看。有人说它是色情文学,但愿它不是的,否则就有说明意义了。
32 |
33 | 维多利亚时期的英国人和"文革"时的中国人一样,性心理都不正常。正常的性心理是把性当作生活中一件重要的事,但不是全部。不正常则要么不承认有这么回事,要么除此什么都不想。假如一个社会的性心理不正常,那就会两样全占。这是因为这个社会里有这样一种格调,使一部分人不肯提到此事,另一部分人则事急从权,总而言之,没有一个人有平常心。作为作者,我知道怎么把作品写得格调极高,但是不肯写。**对于一件愚蠢的事,你只能唱唱反调**。
--------------------------------------------------------------------------------
/_posts/life/2018-03-31-一只特立独行的猪.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 一只特立独行的猪-王小波
4 | date: 2018-03-31 17:50:20 +0800
5 | categories: 生活
6 | tags: 人生
7 | keywords: 一只特立独行的猪 王小波
8 | description: 王小波《一只特立独行的猪》
9 | ---
10 |
11 | 插队的时候,我喂过猪、也放过牛。假如没有人来管,这两种动物也完全知道该怎样生活。它们会自由自在地闲逛,饥则食渴则饮,春天来临时还要谈谈爱情;这样一来,它们的生活层次很低,完全乏善可陈。人来了以后,给它们的生活做出了安排:每一头牛和每一口猪的生活都有了主题。就它们中的大多数而言,这种生活主题是很悲惨的:前者的主题是干活,后者的主题是长肉。我不认为这有什么可抱怨的,因为我当时的生活也不见得丰富了多少,除了八个样板戏,也没有什么消遣。有极少数的猪和牛,它们的生活另有安排。以猪为例,种猪和母猪除了吃,还有别的事可干。就我所见,它们对这些安排也不大喜欢。种猪的任务是交配,换言之,我们的政策准许它当个花花公子。但是疲惫的种猪往往摆出一种肉猪(肉猪是阉过的)才有的正人君子架势,死活不肯跳到母猪背上去。母猪的任务是生崽儿,但有些母猪却要把猪崽儿吃掉。总的来说,人的安排使猪痛苦不堪。但它们还是接受了:猪总是猪啊。
12 |
13 |
14 |
15 | 对生活做种种设置是人特有的品性。不光是设置动物,也设置自己。我们知道,在古希腊有个斯巴达,那里的生活被设置得了无生趣,其目的就是要使男人成为亡命战士,使女人成为生育机器,前者像些斗鸡,后者像些母猪。这两类动物是很特别的,但我以为,它们肯定不喜欢自己的生活。但不喜欢又能怎么样?人也好,动物也罢,都很难改变自己的命运。
16 |
17 | 以下谈到的一只猪有些与众不同。我喂猪时,它已经有四五岁了,从名分上说,它是肉猪,但长得又黑又瘦,两眼炯炯有光。这家伙像山羊一样敏捷,一米高的猪栏一跳就过;它还能跳上猪圈的房顶,这一点又像是猫——所以它总是到处游逛,根本就不在圈里呆着。所有喂过猪的知青都把它当宠儿来对待,它也是我的宠儿——因为它只对知青好,容许他们走到三米之内,要是别的人,它早就跑了。它是公的,原本该劁掉。不过你去试试看,哪怕你把劁猪刀藏在身后,它也能嗅出来,朝你瞪大眼睛,噢噢地吼起来。我总是用细米糠熬的粥喂它,等它吃够了以后,才把糠对到野草里喂别的猪。其他猪看了嫉妒,一起嚷起来。这时候整个猪场一片鬼哭狼嚎,但我和它都不在乎。吃饱了以后,它就跳上房顶去晒太阳,或者模仿各种声音。它会学汽车响、拖拉机响,学得都很像;有时整天不见踪影,我估计它到附近的村寨里找母猪去了。我们这里也有母猪,都关在圈里,被过度的生育搞得走了形,又脏又臭,它对它们不感兴趣;村寨里的母猪好看一些。它有很多精彩的事迹,但我喂猪的时间短,知道得有限,索性就不写了。总而言之,所有喂过猪的知青都喜欢它,喜欢它特立独行的派头儿,还说它活得潇洒。但老乡们就不这么浪漫,他们说,这猪不正经。领导则痛恨它,这一点以后还要谈到。我对它则不止是喜欢——我尊敬它,常常不顾自己虚长十几岁这一现实,把它叫做“猪兄”。如前所述,这位猪兄会模仿各种声音。我想它也学过人说话,但没有学会——假如学会了,我们就可以做倾心之谈。但这不能怪它。人和猪的音色差得太远了。
18 |
19 | 后来,猪兄学会了汽笛叫,这个本领给它招来了麻烦。我们那里有座糖厂,中午要鸣一次汽笛,让工人换班。我们队下地干活时,听见这次汽笛响就收工回来。我的猪兄每天上午十点钟总要跳到房上学汽笛,地里的人听见它叫就回来——这可比糖厂鸣笛早了一个半小时。坦白地说,这不能全怪猪兄,它毕竟不是锅炉,叫起来和汽笛还有些区别,但老乡们却硬说听不出来。领导上因此开了一个会,把它定成了破坏春耕的坏分子,要对它采取专政手段——会议的精神我已经知道了,但我不为它担忧——因为假如专政是指绳索和杀猪刀的话,那是一点门都没有的。以前的领导也不是没试过,一百人也这不住它。狗也没用:猪兄跑起来像颗鱼雷,能把狗撞出一丈开外。谁知这回是动了真格的,指导员带了二十几个人,手拿五四式手枪;副指导员带了十几人,手持看青的火枪,分两路在猪场外的空地上兜捕它。这就使我陷入了内心的矛盾:按我和它的交情,我该舞起两把杀猪刀冲出去,和它并肩战斗,但我又觉得这样做太过惊世骇俗——它毕竟是只猪啊;还有一个理由,我不敢对抗领导,我怀疑这才是问题之所在。总之,我在一边看着。猪兄的镇定使我佩服之极:它很冷静地躲在手枪和火枪的连线之内,任凭人喊狗咬,不离那条线。这样,拿手枪的人开火就会把拿火枪的打死,反之亦然;两头同时开火,两头都会被打死。至于它,因为目标小,多半没事。就这样连兜了几个圈子,它找到了一个空子,一头撞出去了;跑得潇洒之极。以后我在甘蔗地里还见过它一次,它长出了獠牙,还认识我,但已不容我走近了。这种冷淡使我痛心,但我也赞成它对心怀叵测的人保持距离。
20 |
21 | 我已经四十岁了,除了这只猪,还没见过谁敢于如此无视对生活的设置。相反,我倒见过很多想要设置别人生活的人,还有对被设置的生活安之若素的人。因为这个原故,我一直怀念这只特立独行的猪。
22 |
--------------------------------------------------------------------------------
/_posts/life/2018-04-01-工作与人生.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 工作与人生-王小波
4 | date: 2018-03-31 17:50:20 +0800
5 | categories: 生活
6 | tags: 人生
7 | keywords: 工作与人生 王小波
8 | description: 王小波《工作与人生》
9 | ---
10 |
11 | 我现在已经活到了人生的中途,拿一日来比喻人的一生,现在正是中午。人在童年时从朦胧中醒来,需要一些时间来克服清晨的软弱,然后就要投入工作;在正午时分,他的精力最为充沛,但已隐隐感到疲惫;到了黄昏时节,就要总结一日的工作,准备沉入永恒的休息。按我这种说法,工作是人一生的主题。这个想法不是人人都能同意的。我知道在中国,农村的人把生儿育女看作是一生的主题。把儿女养大,自己就死掉,给他们空出地方来——这是很流行的想法。在城市里则另有一种想法,但不知是不是很流行:它把取得社会地位看作一生的主题。站在北京八宝山的骨灰墙前,可以体会到这种想法。我在那里看到一位已故的大叔墓上写着:副系主任、支部副书记、副教授、某某教研室副主任,等等。假如能把这些“副”字去掉个把,对这位大叔当然更好一些,但这些“副”字最能证明有这样一种想法。顺便说一句,我到美国的公墓里看过,发现他们的墓碑上只写两件事:一是生卒年月,二是某年至某年服兵役;这就是说,他们以为人的一生只有这两件事值得记述:这位上帝的子民曾经来到尘世,以及这位公民曾去为国尽忠,写别的都是多余的,我觉得这种想法比较质朴……恐怕在一份青年刊物上写这些墓前的景物是太过伤感,还是及早回到正题上来罢。
12 |
13 |
14 |
15 | 我想要把自己对人生的看法推荐给青年朋友们:人从工作中可以得到乐趣,这是一种巨大的好处。相比之下,从金钱、权力、生育子女方面可以得到的快乐,总要受到制约。举例来说,现在把生育作为生活的主题,首先是不合时宜;其次,人在生育力方面比兔子大为不如,更不要说和黄花鱼相比较;在这方面很难取得无穷无尽的成就。我对权力没有兴趣,对钱有一些兴趣,但也不愿为它去受罪——做我想做的事(这件事对我来说,就是写小说),并且把它做好,这就是我的目标。我想,和我志趣相投的人总不会是一个都没有。
16 |
17 | 根据我的经验,人在年轻时,最头疼的一件事就是决定自己这一生要做什么。在这方面,我倒没有什么具体的建议:干什么都可以,但最好不要写小说,这是和我抢饭碗。当然,假如你执意要写,我也没理由反对。总而言之,干什么都是好的;但要干出个样子来,这才是人的价值和尊严所在。人在工作时,不单要用到手、腿和腰,还要用脑子和自己的心胸。我总觉得国人对这后一方面不够重视,这样就会把工作看成是受罪。失掉了快乐最主要的源泉,对生活的态度也会因之变得灰暗……
18 |
19 | 人活在世上,不但有身体,还有头脑和心胸——对此请勿从解剖学上理解。人脑是怎样的一种东西,科学还不能说清楚。心胸是怎么回事就更难说清。对我自己来说,心胸是我在生活中想要达到的最低目标。某件事有悖于我的心胸,我就认为它不值得一做;某个人有悖于我的心胸,我就觉得他不值得一交;某种生活有悖于我的心胸,我就会以为它不值得一过。罗素先生曾言,对人来说,不加检点的生活,确实不值得一过。我同意他的意见:不加检点的生活,属于不能接受的生活之一种。人必须过他可以接受的生活,这恰恰是他改变一切的动力。人有了心胸,就可以用它来改变自己的生活。
20 |
21 | 中国人喜欢接受这样的想法:只要能活着就是好的,活成什么样子无所谓。从一些电影的名字就可以看出来:《活着》、《找乐》……我对这种想法是断然地不赞成,因为抱有这种想法的人就可能活成任何一种糟糕的样子,从而使生活本身失去意义。高尚、清洁、充满乐趣的生活是好的,人们很容易得到共识。卑下、肮脏、贫乏的生活是不好的,这也能得到共识。但只有这两条远远不够。我以写作为生,我知道某种文章好,也知道某种文章坏。仅知道这两条尚不足以开始写作。还有更加重要的一条,那就是:某种样子的文章对我来说不可取,绝不能让它从我笔下写出来,冠以我的名字登在报刊上。以小喻大,这也是我对生活的态度。
22 |
--------------------------------------------------------------------------------
/_posts/life/2018-06-02-般若波罗蜜多心经.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 般若波罗蜜多心经
4 | date: 2018-06-02 00:21:21 +0800
5 | categories: 生活
6 | tags: 心经
7 | keywords: 般若波罗蜜多 心经 色不异空 空不异色
8 | description: 舍利子,色不异空,空不异色,色即是空,空即是色,受想行识,亦复如是。舍利子,是诸法空相,不生不灭,不垢不净,不增不减。是故空中无色,无受想行识,无眼耳鼻舌身意,无色声香味触法,无眼界,乃至无意识界。
9 | ---
10 |
11 | [《般若波罗蜜多心经》](https://zh.wikipedia.org/wiki/%E8%88%AC%E8%8B%A5%E6%B3%A2%E7%BE%85%E8%9C%9C%E5%A4%9A%E5%BF%83%E7%B6%93)梵语:प्रज्ञापारमिताहृदयसूत्र Prajñāpāramitā Hṛdaya sūtra)是阐述大乘佛教的空相和般若思想的经典,又称《佛说摩诃般若波罗蜜多心经》、《摩诃般若波罗密多心经》,简称《般若心经》、《心经》。本经是大品般若及小品般若为一切法实相教理,是[《大般若波罗蜜多经》](https://zh.wikipedia.org/wiki/%E5%A4%A7%E8%88%AC%E8%8B%A5%E6%B3%A2%E7%BD%97%E8%9C%9C%E5%A4%9A%E7%BB%8F)加以浓缩后成为二百余字的极精简经典,因此是般若经系列中一部极为重要的经典,常被认为是可以与[般若经](https://zh.wikipedia.org/wiki/%E8%88%AC%E8%8B%A5%E7%BB%8F)类的《金刚经》相互诠释。
12 |
13 | 
14 |
15 | ### 梵文本
16 |
17 | आर्यावलोकितेश्वरो बोधिसत्त्वो गंभीरायां प्रज्ञापारमितायां चर्यां चरमाणो व्यवलोकयति स्म । पंचस्कन्धाः । तांश्च स्वभावशून्यान्पश्यति स्म । इह शारिपुत्र रूपं शून्यता शून्यतैव रूपं रूपान्न पृथक्शून्यता शून्यताया न पृथग्रूपं यद्रूपं सा शून्यता या शून्यता तद्रूपं । एवमेव वेदनासंज्ञासंस्कारविज्ञानानि । इह शारिपुत्र सर्वधर्माः शून्यतालक्षणा अनुत्पन्ना अनिरुद्धा अमला न विमला नोना न परिपूर्णाः । तस्माच्छारिपुत्र शून्यतायां न रूपं न वेदना न संज्ञा न संस्कारा न विज्ञानानि । न चक्षुःश्रोत्रघ्राणजिह्वाकायमनांसी । न रूपशब्दगंधरसस्प्रष्टव्यधर्माः । न चक्षुर्धातुर्यावन्न मनोविज्ञानधातुः । न विद्या नाविद्या न विद्याक्षयो नाविद्याक्षयो यावन्न जरामरणं न जरामरणक्षयो न दुःखसमुदयनिरोधमार्गा न ज्ञानं न प्राप्तिः ॥ तस्मादप्राप्तित्वाद्बोधिसत्त्वाणां प्रज्ञापारमितामाश्रित्य विहरत्यचित्तावरणः । चित्तावरणनास्तित्वादत्रस्तो विपर्यासातिक्रान्तो निष्ठनिर्वाणः ।। त्र्यध्वव्यवस्थिताः सर्वबुद्धाः प्रज्ञापारमितामाश्रित्यानुत्तरां सम्यक्सम्बोधिमभिसंबुद्धाः ।। तस्माज्ज्ञातव्यं प्रज्ञापारमिता महामन्त्रो महाविद्यामन्त्रो ऽनुत्तरमन्त्रो ऽसमसममन्त्रः सर्वदुःखप्रशमनः । सत्यममिथ्यत्वात् । प्रज्ञपारमितायामुक्तो मन्त्रः । तद्यथा गते गते पारगते पारसंगते बोधि स्वाहा ।। इति प्रज्ञापारमिताहृदयं समाप्तम्
18 |
19 | ### 中文本
20 |
21 | 观自在菩萨,行深般若波罗蜜多时。照见五蕴皆空,渡一切苦厄。舍利子,色不异空,空不异色,色即是空,空即是色,受想行识,亦复如是。舍利子,是诸法空相,不生不灭,不垢不净,不增不减。是故空中无色,无受想行识,无眼耳鼻舌身意,无色声香味触法,无眼界,乃至无意识界。无无明,亦无无明尽,乃至无老死,亦无老死尽。无苦集灭道,无智亦无得。以无所得故,菩提萨埵,依般若波罗蜜多故,心无罣碍,无罣碍故,无有恐怖,远离顚倒梦想,究竟涅槃。三世诸佛,依般若波罗蜜多故,得阿耨多罗三藐三菩提。故知般若波罗蜜多,是大神咒,是大明咒,是无上咒,是无等等咒,能除一切苦,真实不虚。故说般若波罗蜜多咒,即说咒曰:揭谛揭谛,波罗揭谛,波罗僧揭谛,菩提萨婆诃。
22 |
--------------------------------------------------------------------------------
/_posts/resource/2013-04-23-general-bootstrap-resources.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Bootstrap常用资源
4 | category: 资源
5 | tags: Bootstrap
6 | description: 列举自己搜集的Bootstrap资源,给像我这样前端不太行的WEB开发者
7 | ---
8 |
9 | ### 官方资源
10 |
11 | - [官方首页](http://twitter.github.io/bootstrap/)
12 |
13 | ### 字体图标
14 |
15 | - [Font Awesome](http://fortawesome.github.io/Font-Awesome/)
16 |
17 | 扩展bootstrap的图标,是基于css的,非常漂亮,而且还支持视网膜屏,但是貌似手机上没法支持(测试过UC)
18 |
19 | ### 下拉按钮
20 |
21 | - [Bootstrap Mutiselect](http://davidstutz.github.io/bootstrap-multiselect/)
22 |
23 | 多选下拉列表插件
24 |
25 | ### 表单扩展
26 |
27 | - [Bootstrap Form Helpers](http://vincentlamanna.com/BootstrapFormHelpers/index.html)
28 |
29 | 扩展常用的表单功能,包括日期选择、时间选择等
30 |
31 |
--------------------------------------------------------------------------------
/_posts/resource/2014-01-15-general-git-resources.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Git 常用资源
4 | category: 资源
5 | tags: Git
6 | keywords: Git
7 | ---
8 |
9 | ## 库管理
10 |
11 | ### 克隆库
12 |
13 | ```bash
14 | git clone https://github.com/php/php-src.git
15 | git clone --depth=1 https://github.com/php/php-src.git # 只抓取最近的一次 commit
16 | ```
17 |
18 | ## 历史管理
19 |
20 | ### 查看历史
21 |
22 | ```bash
23 | git log --pretty=oneline filename # 一行显示
24 | git show xxxx # 查看某次修改
25 | ```
26 |
27 | ### 标签功能
28 |
29 | ```bash
30 | git tag # 显示所有标签
31 | git tag -l 'v1.4.2.*' # 显示 1.4.2 开头标签
32 | git tag v1.3 # 简单打标签
33 | git tag -a v1.2 9fceb02 # 后期加注标签
34 | git tag -a v1.4 -m 'my version 1.4' # 增加标签并注释, -a 为 annotated 缩写
35 | git show v1.4 # 看某一标签详情
36 | git push origin v1.5 # 分享某个标签
37 | git push origin --tags # 分享所有标签
38 | ```
39 |
40 | ### 回滚操作
41 |
42 | ```bash
43 | git reset 9fceb02 # 保留修改
44 | git reset 9fceb02 --hard # 删除之后的修改
45 | ```
46 |
47 | ### 取消文件的修改
48 |
49 | ```bash
50 | git checkout -- a.php # 取消单个文件
51 | git checkout -- # 取消所有文件的修改
52 | ```
53 |
54 | ### 删除文件
55 |
56 | ```bash
57 | git rm a.php # 直接删除文件
58 | git rm --cached a.php # 删除文件暂存状态
59 | ```
60 |
61 | ### 移动文件
62 |
63 | ```bash
64 | git mv a.php ./test/a.php
65 | ```
66 |
67 | ### 查看文件修改
68 |
69 | ```bash
70 | git diff # 查看未暂存的文件更新
71 | git diff --cached # 查看已暂存文件的更新
72 | ```
73 |
74 | ### 暂存和恢复当前staging
75 |
76 | ```bash
77 | git stash # 暂存当前分支的修改
78 | git stash apply # 恢复最近一次暂存
79 | git stash list # 查看暂存内容
80 | git stash apply stash@{2} # 指定恢复某次暂存内容
81 | git stash drop stash@{0} # 删除某次暂存内容
82 | ```
83 |
84 | ### 修改 commit 历史纪录
85 |
86 | ```bash
87 | git rebase -i 0580eab8
88 | ```
89 |
90 | ## 分支管理
91 |
92 | ### 创建分支
93 |
94 | ```bash
95 | git branch develop # 只创建分支
96 | git checkout -b master develop # 创建并切换到 develop 分支
97 | ```
98 |
99 | ### 合并分支
100 |
101 | ```bash
102 | git checkout master # 切换到 master 分支
103 | git merge --no-ff develop # 把 develop 合并到 master 分支,no-ff 选项的作用是保留原分支记录
104 | git rebase develop # rebase 当前分支到 develop
105 | git branch -d develop # 删除 develop 分支
106 | ```
107 |
108 | ### 克隆远程分支
109 |
110 | ```bash
111 | git branch -r # 显示所有分支,包含远程分支
112 | git checkout origin/android
113 | ```
114 |
115 | ### 修复develop上的合并错误
116 |
117 | 1. 将merge前的commit创建一个分之,保留merge后代码
118 | 2. 将develop `reset --force`到merge前,然后`push --force`
119 | 3. 在分支中rebase develop
120 | 4. 将分支push到服务器上重新merge
121 |
122 | ### 强制更新到远程分支最新版本
123 |
124 | ```bash
125 | git reset --hard origin/master
126 | git submodule update --remote -f
127 | ```
128 |
129 | ## Submodule使用
130 |
131 | ### 克隆带submodule的库
132 |
133 | ```bash
134 | git clone --recursive https://github.com/chaconinc/MainProject
135 | ```
136 |
137 | ### clone主库后再去clone submodule
138 |
139 | ```bash
140 | git clone https://github.com/chaconinc/MainProject
141 | git submodule init
142 | git submodule update
143 | ```
144 |
145 | ## Git设置
146 |
147 | Git的全局设置在`~/.gitconfig`中,单独设置在`project/.git/config`下。
148 |
149 | 忽略设置全局在`~/.gitignore_global`中,单独设置在`project/.gitignore`下。
150 |
151 | ### 设置 commit 的用户和邮箱
152 |
153 | ```bash
154 | git config user.name "xx"
155 | git config user.email "xx@xx.com"
156 | ```
157 |
158 | 或者直接修改config文件
159 |
160 | ```bash
161 | [user]
162 | name = xxx
163 | email = xxx@xxx.com
164 | ```
165 |
166 | ### 查看设置项
167 |
168 | ```bash
169 | git config --list
170 | ```
171 |
172 | ### 设置git终端颜色
173 |
174 | ```bash
175 | git config --global color.diff auto
176 | git config --global color.status auto
177 | git config --global color.branch auto
178 | ```
--------------------------------------------------------------------------------
/_posts/resource/2014-01-15-general-html-resources.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: HTML 常用资源
4 | category: 资源
5 | tags: HTML
6 | keywords: HTML
7 | description:
8 | ---
9 |
10 | ## 常用属性
11 |
12 | ### 在link中可能会出现media=screen的情况
13 | 这个属性是确定在哪种情况下使用这个link的css文件,screen是指输出到屏幕,而print用于打印
14 |
15 | ### 在meta中增加viewport选项
16 | viewport的作用是告诉浏览器,目前的装置情况。
17 |
18 |
19 |
20 | - width:数字或device-width 设置宽度
21 | - height:数字或device-width 设置高度
22 | - initial-scale:最小0.25,最大5 初始缩放
23 | - minimum-scale:最小0.25,最大5 最小缩放
24 | - maximum-scale:最小0.25,最大5 最大缩放
25 | - user-scalable:1或0(yes or no) 是否允许用户缩放
--------------------------------------------------------------------------------
/_posts/resource/2014-01-15-general-javascript-resources.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: JavaScript 常用资源
4 | category: 资源
5 | tags: JavaScript
6 | keywords: JavaScript
7 | description:
8 | ---
9 |
10 | ## 常用代码
11 |
12 | ### 字符串截取
13 | substr(start [, length ])
14 | 返回一个从指定位置开始的指定长度的子字符串
15 | substring(start, end)
16 | 返回位于 String 对象中指定位置的子字符串。
17 |
18 |
19 | ### 页面跳转
20 | window.navigate("top.jsp");
21 | window.history.back(-1);
22 | window.location.href="login.jsp?backurl="+window.location.href;
23 | self.location='top.htm';
24 | top.location='xx.jsp';
25 |
26 | ### 加载完成
27 | window.onload
28 | 必须等页面内包括图片的所有元素加载完成后才能执行。
29 | 不能同时编写多个,只执行一个
30 | $(document).ready()
31 | 是DOM结构绘制完毕后就可以执行
32 | 可以编写多个
33 | 简写$(function(){});
34 | $(window).load()等同与window.onload
35 |
36 | ### 刷新页面
37 | history.go(0)
38 | location.reload()
39 | location=location
40 | location.assign(location)
41 | document.execCommand('Refresh')
42 | window.navigate(location)
43 | location.replace(location)
44 | document.URL=location.href
45 |
46 | ### json转化和解析
47 |
48 | JSON.parse("{a:'111',b:'ccc'}"); //解析
49 | eval("("+"{{ cpu_data }}"+")"); //解析
50 |
51 | ### 时间转换
52 |
53 | var day1 = parseInt(new Date().valueOf()/1000); //获得当前时间时间戳
54 | day2 = new Date(day1*1000);
55 | alert(day2.getFullYear()+"-"+(day2.getMonth()+1)+"-"+day2.getDate()+" "+day2.getHours()+":"+day2.getMinutes()+":"+day2.getSeconds())
56 | d = new Date();
57 | s = d.getFullYear() + "-";
58 | s += ("0"+(d.getMonth()+1)).slice(-2) + "-";
59 | s += ("0"+d.getDate()).slice(-2) + " ";
60 | s += ("0"+d.getHours()).slice(-2) + ":";
61 | s += ("0"+d.getMinutes()).slice(-2) + ":";
62 | s += ("0"+d.getSeconds()).slice(-2) + ".";
63 | s += ("00"+d.getMilliseconds()).slice(-3);
64 |
65 | ### URI编码转换
66 |
67 | var a="':'";
68 | en = encodeURI(a); //编码
69 | a = decodeURI(en); //解码
70 |
71 | ### HTML编码转换
72 |
73 | function htmlEncode(value){
74 | return $('
').text(value).html();
75 | }
76 |
77 | function htmlDecode(value){
78 | return $('
').html(value).text();
79 | }
80 |
--------------------------------------------------------------------------------
/_posts/resource/2014-01-15-general-jquery-resources.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: jQuery 常用资源
4 | category: 资源
5 | tags: jQuery
6 | keywords: jQuery
7 | description:
8 | ---
9 |
10 | ## 官方资源
11 |
12 | - [官方首页](http://jquery.com/)
13 | - [官方插件](http://plugins.jquery.com/)
14 |
15 | ## 下拉框扩展
16 |
17 | - [Select 2](http://ivaynberg.github.io/select2/)
18 |
19 | 功能强大的下拉列表插件,基本包含了所有可能的需求……
20 |
21 | - [OptionTree](http://kotowicz.net/jquery-option-tree/demo/demo.html)
22 |
23 | 联动下拉列表插件,可以动态生成下拉列表,而且支持ajax获取数据
24 |
25 | ## 常用代码
26 |
27 | ### 禁用a的链接
28 |
29 | href="return false;"或href="javascript;"
30 | $().live('click',function(e){
31 | e.preventDefault();
32 | });
33 |
34 | ### 清空file的内容
35 |
36 | var cfile = $('#id').clone();
37 | $('#id').replaceWith(cfile);
38 |
39 | ### jquery.form.js 和 jquery.validate.js配合使用
40 | 这两个脚本搭配在表单验证和提交是非常的好用,顺便增加了对bootstrap表单的支持
41 | $("#page_form").validate({
42 | highlight: function(element) {
43 | $(element).closest('.control-group').removeClass('success').addClass('error');
44 | },
45 | success: function(element) {
46 | element.text('OK!').addClass('valid').closest('.control-group').removeClass('error').addClass('success');
47 | },
48 | submitHandler:function(form) {
49 | $(form).ajaxSubmit(options);
50 | }});
51 |
52 | ### 选择父节点
53 | 使用$(this)来将dom对象转为jquery对象
54 | $(this).parents('tr');
55 |
56 | ### 多重操作
57 | $(this).parents('tr').remove();
58 | 因为jquery函数返回jquery节点
--------------------------------------------------------------------------------
/_posts/resource/2014-01-15-general-php-resources.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: PHP 常用资源
4 | category: 资源
5 | tags: PHP
6 | keywords: PHP
7 | description:
8 | ---
9 |
10 | ## 常用资源
11 |
12 | ### 常用扩展
13 |
14 | 1. [phpDocumentor](http://www.phpdoc.org)
15 | 2. [PHPUnit](https://phpunit.de)
16 | 3. [Guzzle](https://github.com/guzzle/guzzle)
17 |
18 | ### 好文
19 | 1. [PHP之道](http://wulijun.github.io/php-the-right-way/)
20 | 2. [Cookie/Session机制详解](http://blog.csdn.net/fangaoxin/article/details/6952954)
21 |
22 | ### 优秀的类库
23 | 1. [PHP中文分词: 自动打标签功能](http://jingwentian.com/t-145)
24 |
25 | ### 判断是否为空
26 | ```
27 | +--------------+-----------+---------+-----------+---------+--------+
28 | | 真值表 | gettype() | empty() | is_null() | isset() | (bool) |
29 | +--------------+-----------+---------+-----------+---------+--------+
30 | | $x = "" | string | true | false | true | false |
31 | | $x=null | NULL | true | true | false | false |
32 | | var $x | NULL | true | true | false | false |
33 | | $x = array() | array | true | false | true | false |
34 | | $x = false | boolean | true | false | true | false |
35 | | $x = 15 | integer | false | false | true | true |
36 | | $x = 1 | integer | false | false | true | true |
37 | | $x = 0 | integer | true | false | true | false |
38 | | $x = -1 | integer | false | false | true | true |
39 | | $x = '15' | string | false | false | true | true |
40 | | $x = '1' | string | false | false | true | true |
41 | | $x = '0' | string | true | false | true | false |
42 | | $x = '-1' | string | false | false | true | true |
43 | | $x = 'foo' | string | false | false | true | true |
44 | | $x = 'true' | string | false | false | true | true |
45 | | $x = 'false' | string | false | false | true | true |
46 | +--------------+-----------+---------+-----------+---------+--------+
47 | ```
48 |
49 | ## 常用命令
50 |
51 | ### 修改phpunit内存限制
52 |
53 | phpunit -d memory_limit=512M
54 |
55 |
56 | ## PHPStorm 常用快捷键
57 |
58 | - Quick Command
59 |
60 | `Command + Shift + A`
61 |
62 | - Quick File
63 |
64 | `Command + Shift + O`
65 |
66 | - Quick Class
67 |
68 | `Command + O`
69 |
70 | - Quick Symbol
71 |
72 | `Command + Option + O`
--------------------------------------------------------------------------------
/_posts/resource/2014-01-15-general-python-resources.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Python 常用资源
4 | category: 资源
5 | tags: Python
6 | keywords: Python
7 | description:
8 | ---
9 |
10 | ## 常用代码
11 |
12 | ### 遍历对象
13 | for key in a.__dict__:
14 | print key,':',a.__dict__[key]
15 |
16 | ### 调试方法
17 | assert False //引发异常,观察错误界面
18 | import logging
19 | logging.info('') //写日志
20 |
21 | ### 获得当前时间
22 | #时间戳
23 | time.time()
24 | #日期时间
25 | time.ctime()
26 | #iso时间
27 | datetime.fromtimestamp(time.time()).isoformat()
28 | #固定格式
29 | time.strftime('%Y-%m-%d',time.localtime(time.time()))
30 | ### 日期到时间戳
31 | dateC=datetime.datetime(2010,6,6,8,14,59)
32 | timestamp=time.mktime(dateC.timetuple())
33 | ### 时间戳到日期
34 | ltime=time.localtime(1237515355.0)
35 | timeStr=time.strftime("%Y-%m-%d %H:%M:%S", ltime)
36 | ### 之后的包从绝对位置导入
37 | from __future__ import absolute_import
38 |
39 |
--------------------------------------------------------------------------------
/_posts/resource/2014-01-15-general-shell-resources.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Shell 常用资源
4 | category: 资源
5 | tags: Shell
6 | keywords: Shell
7 | description:
8 | ---
9 |
10 |
11 | ## 常用指令
12 |
13 | ### 文本内容搜索
14 |
15 | grep aaa *
16 |
17 | ### 文件夹操作
18 |
19 | 查看文件夹大小 du -h --max-depth=1 /home/ys
20 | 查看驱动器空间 df -h
21 |
22 | ### 压缩命令
23 |
24 | tar zxvf aaa.tar.gz
25 | tar zcvf aaa.tar.gz aaa
26 |
27 | ### 登陆到其他用户
28 |
29 | login
30 |
31 | ### 查看端口的占用
32 |
33 | lsof -i:8087 查看8087端口的使用
34 |
35 | ### 批量杀死进程
36 |
37 | ps -aux|grep name|grep -v grep|cut -c 9-15|xargs kill -9
38 |
39 | ### 查看当前时间
40 |
41 | date 时间
42 | date +%s 时间戳
43 | date -d "2010-07-20 10:25:30" +%s 指定时间时间戳
44 | date -d "@1279592730" 时间戳转时间
45 | date -d "1970-01-01 14781 days" "+%Y/%m/%d %H:%M:%S"
46 |
47 | ### 查看进程内存使用情况
48 |
49 | top -d 1 -p pid [,pid ...]
50 | pmap pid
51 | ps aux|grep process_name
52 | 查看/proc/process_id/文件夹下的status文件
53 |
54 | ### 查看Linux内核版本或发布版本
55 |
56 | lsb_release -a
57 | uname -a
58 |
59 | ### 一句话实现一个HTTP服务,把当前文件夹作为根目录
60 |
61 | python -m SimpleHTTPServer
62 |
63 | ### 查看本地网络服务活动状态
64 |
65 | lsof -i
66 |
67 | ### 查看自己的外网ip
68 |
69 | curl ifconfig.me
70 |
71 | ### 下载整个网站
72 |
73 | wget --random-wait -r -p -e robots=off -U mozilla http://www.example.com
74 |
75 | ### 后台运行一段不中止的程序,并可随时查看它的状态
76 |
77 | screen -d -m -S some_ name ping my_router
78 |
79 | ### 查看进程执行的时间
80 |
81 | ps -A -opid,stime,etime,args | grep python
82 |
83 | ### 创建守护进程
84 |
85 | nohup python /var/www/a.py &
86 |
87 | ### 查看当前文件夹下文件(文件夹)大小
88 |
89 | du -h --max-depth=1 .
90 |
91 | ### 查看所有磁盘大小
92 |
93 | df -h
94 |
95 | ### 诊断网络
96 |
97 | mtr
98 | ping
99 | traceroute
100 | dig
101 |
102 | ### 列出本机监听的端口号
103 |
104 | netstat –tlnp
105 | netstat -anop
106 |
107 | ### 在远程机器上运行一段脚本
108 |
109 | ssh user@server bash < /path/to/local/script.sh
110 |
111 | ### 端口扫描
112 |
113 | nc -z -v -n 127.0.0.1 20-100
114 |
115 | ### 负载测试,30秒内向Google发起20个并发连接
116 |
117 | siege -c20 www.google.co.uk -b -t30s
--------------------------------------------------------------------------------
/_posts/resource/2014-01-15-general-svn-resources.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: SVN 常用资源
4 | category: 资源
5 | tags: SVN
6 | keywords: SVN
7 | description:
8 | ---
9 |
10 | ## 常用指令
11 |
12 | ### 将文件checkout到本地目录
13 |
14 | svn checkout path(path是服务器上的目录)
15 | svn checkout svn://192.168.1.1/pro/domain
16 | svn co
17 |
18 | ### 往版本库中添加新的文件
19 |
20 | svn add file
21 | svn add test.php(添加test.php)
22 | svn add *.php(添加当前目录下所有的php文件)
23 | svn add *.php --force(增加所有文件)
24 |
25 | ### 将改动的文件提交到版本库
26 |
27 | svn commit -m “LogMessage“ [-N] [--no-unlock] PATH(如果选择了保持锁,就使用–no-unlock开关)
28 | svn commit -m “add test file for my test“ test.php
29 | svn ci
30 |
31 | ### 加锁/解锁
32 |
33 | svn lock -m “LockMessage“ [--force] PATH
34 | svn lock -m “lock test file“ test.php
35 | svn unlock PATH
36 |
37 | ### 更新到某个版本
38 |
39 | svn update -r m path
40 | svn update 如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。
41 | svn update -r 200 test.php(将版本库中的文件test.php还原到版本200)
42 |
43 | svn update test.php(更新,于版本库同步。如果在提交的时候提示过期的话,是因为冲突,需要先update,修改文件,然后清除svn resolved,最后再提交commit)
44 |
45 | svn up
46 |
47 | ### 查看文件或者目录状态
48 |
49 | svn status path(目录下的文件和子目录的状态,正常状态不显示)
50 | 【?:不在svn的控制中;M:内容被修改;C:发生冲突;A:预定加入到版本库;K:被锁定】
51 |
52 | svn status -v path(显示文件和子目录状态)
53 | 第一列保持相同,第二列显示工作版本号,第三和第四列显示最后一次修改的版本号和修改人。
54 |
55 | 注:svn status、svn diff和 svn revert这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。
56 |
57 | svn st
58 |
59 | ### 删除文件
60 |
61 | svn delete path -m “delete test fle“
62 | svn delete svn://192.168.1.1/pro/domain/test.php -m “delete test file”
63 | 或者直接svn delete test.php 然后再svn ci -m ‘delete test file‘,推荐使用这种
64 | svn (del, remove, rm)
65 |
66 | ### 查看日志
67 |
68 | svn log path
69 | svn log test.php 显示这个文件的所有修改记录,及其版本号的变化
70 |
71 | ### 查看文件详细信息
72 |
73 | svn info path
74 | svn info test.php
75 |
76 | ### 比较差异
77 |
78 | svn diff path(将修改的文件与基础版本比较)
79 | svn diff test.php
80 | svn diff -r m:n path(对版本m和版本n比较差异)
81 | svn diff -r 200:201 test.php
82 | svn di
83 |
84 | ### 将两个版本之间的差异合并到当前文件
85 |
86 | svn merge -r m:n path
87 | svn merge -r 200:205 test.php(将版本200与205之间的差异合并到当前文件,但是一般都会产生冲突,需要处理一下)
88 |
89 | ### SVN 帮助
90 |
91 | svn help
92 | svn help ci
93 |
94 | ### 版本库下的文件和目录列表
95 |
96 | svn list path
97 | svn ls
98 |
99 | ### 创建纳入版本控制下的新目录
100 |
101 | svn mkdir: 创建纳入版本控制下的新目录。
102 | mkdir PATH…
103 | mkdir URL…
104 |
105 | 创建版本控制的目录。
106 |
107 | 1、每一个以工作副本 PATH 指定的目录,都会创建在本地端,并且加入新增调度,以待下一次的提交。
108 | 2、每个以URL指定的目录,都会透过立即提交于仓库中创建.在这两个情况下,所有的中间目录都必须事先存在。
109 |
110 | ### 恢复本地修改
111 |
112 | svn revert: 恢复原始未改变的工作副本文件 (恢复大部份的本地修改)。revert:
113 | 用法: revert PATH…
114 | 注意: 本子命令不会存取网络,并且会解除冲突的状况。但是它不会恢复被删除的目录
115 |
116 | ### 代码库URL变更
117 |
118 | svn switch (sw): 更新工作副本至不同的URL。
119 |
120 | 1、switch URL [PATH]
121 | 2、switch –relocate FROM TO [PATH...]
122 | 1、更新你的工作副本,映射到一个新的URL,其行为跟“svn update”很像,也会将服务器上文件与本地文件合并。这是将工作副本对应到同一仓库中某个分支或者标记的方法。
123 |
124 | 2、改写工作副本的URL元数据,以反映单纯的URL上的改变。当仓库的根URL变动(比如方案名或是主机名称变动),但是工作副本仍旧对映到同一仓库的同一目录时使用这个命令更新工作副本与仓库的对应关系。
125 |
126 | ### 解决冲突
127 |
128 | svn resolved: 移除工作副本的目录或文件的“冲突”状态。 java设计模式之——策略模式
129 | 用法: resolved PATH…
130 | 注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的相关文件,然后让 PATH 可以再次提交。
131 |
132 | ### 输出指定文件或URL的内容。
133 |
134 | svn cat 目标[@版本]…如果指定了版本,将从指定的版本开始查找。
135 | svn cat -r PREV filename > filename (PREV 是上一版本,也可以写具体版本号,这样输出结果是可以提交的)
136 |
137 |
--------------------------------------------------------------------------------
/_posts/resource/2014-05-11-general-mysql-resources.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: MySQL常用资源
4 | category: 资源
5 | tags: MySQL
6 | keywords: MySQL
7 | description:
8 | ---
9 |
10 | ## 常用命令
11 |
12 | ### 登录数据库
13 |
14 | mysql -h localhost -uroot -p
15 |
16 | ### 导出数据库
17 |
18 | mysqldump -uroot -p db > db.sql
19 |
20 | ### 导入数据库
21 |
22 | mysql -uroot -p db < db.sql
23 | // or
24 | mysql -uroot -p db -e "source /path/to/db.sql"
25 |
26 | ### 开启远程登录
27 |
28 | grant all privileges on ss.* to 'root'@'%' indentified by 'passoword' with grant option;
29 | // or
30 | update user set Host="%" and User="root"
31 | // 注意%是不包含localhost的
32 | flush privileges;
33 |
34 | ### 创建用户
35 |
36 | CREATE USER 'test'@'localhost' IDENTIFIED BY 'password';
37 | grant all privileges on *.* to test@'localhost' identified by 'test';
38 |
39 | ### 创建表
40 |
41 | CREATE SCHEMA testdb DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
42 |
43 | ### 赋予数据库权限
44 |
45 | GRANT ALL ON testdb.* TO 'test'@'localhost';
46 |
47 |
--------------------------------------------------------------------------------
/_posts/resource/2014-08-03-general-mac-resources.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Mac 常用资源
4 | category: 资源
5 | tags: Mac
6 | keywords: Mac
7 | description:
8 | ---
9 |
10 | ## 常用软件
11 |
12 | ### Alfred
13 |
14 | #### Alfred常用Workflow
15 |
16 | - [Dash](http://kapeli.com/dash)
17 | - [Dict - Lookup Word](https://github.com/liberize/alfred-dict-workflow)
18 | - [Reminders](http://www.alfredforum.com/topic/917-reminders/)
19 | - [Evernote](http://support.alfredapp.com/evernote)
20 | - [Notes](http://www.alfredforum.com/topic/1009-notes/)
21 |
22 | ## 常用命令
23 |
24 | ### 开启关闭dashboard
25 |
26 | 关闭
27 |
28 | defaults write com.apple.dashboard mcx-disabled -boolean YES
29 | killall Dock
30 |
31 | 开启
32 |
33 | defaults write com.apple.dashboard mcx-disabled -boolean NO
34 | killall Dock
35 |
36 | ### 剪贴板操作
37 | 写入剪切板
38 |
39 | echo 'test' > pbcopy
40 | cat testfile > pbcopy
41 |
42 | 读取剪贴板
43 |
44 | pbpaste > testfile
45 | pbpaste | cat
46 |
47 | ### 开启关闭Hidpi
48 | 开启
49 |
50 | sudo defaults write /Library/Preferences/com.apple.windowserver DisplayResolutionEnabled -bool YES
51 |
52 | 关闭
53 |
54 | sudo defaults delete /Library/Preferences/com.apple.windowserver DisplayResolutionDisabled
55 |
56 | ### 修改Dock隐藏和出现时间
57 |
58 | ```bash
59 | defaults write com.apple.dock autohide-delay -int 0
60 | defaults write com.apple.dock autohide-time-modifier -float 0.4
61 | killall Dock
62 | ```
63 |
64 |
65 | ### 设置iterm中option为alt(meta)键
66 |
67 | 
68 |
69 | ### 删除dropbox冲突文件
70 |
71 | find . -type f -name "* conflicted *" -exec rm -f {} \;
72 |
73 | ### 清空Launchpad(删除掉)
74 |
75 | sqlite3 ~/Library/Application\ Support/Dock/*.db 'DELETE FROM apps;' && killall Dock
76 |
77 | ### 重置Launchpad
78 |
79 | rm -f ~/Library/Application\ Support/Dock/*.db && killall Dock
80 |
81 | ### 修改Finder中文件夹显示语言
82 |
83 | # 以Desktop为例
84 | touch ~/Desktop/.localized
85 | chmod 600 ~/Desktop/.localized
86 |
87 | ## 常用快捷键
88 |
89 | ### Chrome
90 |
91 | - 切换用户 `Command + shift + M`
92 |
--------------------------------------------------------------------------------
/_posts/resource/2015-02-13-general-seo-resources.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: SEO 常用资源
4 | category: 资源
5 | tags: SEO
6 | keywords: SEO
7 | ---
8 |
9 | ## 小技巧
10 |
11 | ### URL中用`-`分割单词,用`_`关联单词
12 |
13 | Google 会把 `a-good_reource-of-seo.html` 拆分成关键字:`a`, `good_resource`, `of` 和 `seo`。
--------------------------------------------------------------------------------
/_posts/resource/2015-10-04-general-vim-resources.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Vim 常用资源
4 | category: 资源
5 | tags: Vim
6 | keywords: Vim
7 | ---
8 |
9 | ## 在粘贴代码时不启动自动缩进
10 |
11 | 粘贴之前输入 `:set paste`
12 | 粘贴完后恢复 `:set nopaste`
13 |
14 | ## 关闭和开启行号
15 |
16 | 关闭 `:set nonu`
17 | 开启 `:set number`
18 |
19 |
--------------------------------------------------------------------------------
/_posts/resource/2016-03-06-write-about-hexo.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Hexo使用纪实
4 | category: 资源
5 | tags: Hexo
6 | keywords: Hexo
7 | description: 纪录下Hexo搭建书写Blog时,遇到的问题以及解决方案等。
8 | ---
9 |
10 | 自15年初开始采用 `Hexo` 写Blog([www.jeffjade.com](http://www.jeffjade.com)),异常的方便简洁。但是偶尔也会遇到一些问题。本着学以致用的原则,也没专门去对 `Hexo`作更深入的了解;所以这里记载下使用 `Hexo`时遇到的一些问题以及解决办法。
11 |
12 | ## Hexo解决:fatal: multiple stage entries for merged file "xxx"
13 | 近期在使用Hexo发布一篇 [新编码神器Atom使用纪要](http://www.jeffjade.com/2016/03/03/2016-03-02-how-to-use-atom/#) 文章时,遇到一个问题:
14 |
15 | >fatal: multiple stage entries for merged file "xxx"
16 |
17 | 对于这个问题,网上得出的答案,是关于 `git`提交时的。一般解决办法是:
18 |
19 | ```shell
20 | rm .git/index
21 | git add -A
22 | git commit -a
23 | ```
24 | 而 `Hexo` 的方便之处,在于将Git操作封装在Hexo中了,比如:
25 |
26 | ```shell
27 | Hexo s(server)
28 | Hexo g(generate)
29 | Hexo d(deploy)
30 | ```
31 |
32 | 折腾一番发现,这个相比原生 `Git`,是将向仓库提交的东西,放在了 `.deploy_git`隐藏文件下了,所以只需要如下这样即可:
33 |
34 | ```shell
35 | rm .git/index
36 | hexo clean
37 | hexo g
38 | hexo d
39 | ```
40 |
--------------------------------------------------------------------------------
/_posts/resource/2017-10-22-online-website-for-hacking-techniques.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 练习黑客技术的在线网站大全
4 | category: 资源
5 | tags: web
6 | keywords: website web-security hacking techniques
7 | description: 进攻即是最好的防御,这句话同样适用于信息安全的世界。这里罗列了19个合法的来练习黑客技术的网站,不管你是一名开发人员、安全工程师、代码审计师、渗透测试人员,通过不断的练习才能让你成为一个优秀安全研究人员。以下网站希望能给各位安全小伙伴带来帮助!若有其他的补充和推荐,欢迎给小编留言(排名不分先后)
8 | ---
9 |
10 | ## [练习黑客技术的在线网站大全](https://blog.lovejade.cn/2017/10/22/online-website-for-hacking-techniques.html "进攻即是最好的防御!练习黑客技术的在线网站")
11 |
12 | **进攻即是最好的防御**,这句话同样适用于信息安全的世界。这里罗列了很多合法的来练习黑客技术的网站,不管你是一名开发人员、安全工程师、代码审计师、渗透测试人员,通过不断的练习才能让你成为一个优秀安全研究人员。以下网站希望能给各位安全小伙伴带来帮助!若有其他的补充和推荐,欢迎给留言(排名不分先后)。
13 |
14 | 
15 |
16 | ## **国外**
17 |
18 | **1. bWAPP**
19 | 免费和开源的web应用程序安全项目。它有助于安全爱好者及研究人员发现和防止web漏洞。
20 |
21 | 地址:[http://www.itsecgames.com/](http://www.itsecgames.com/)
22 |
23 | **2. Damn Vulnerable iOS App (DVIA)**
24 |
25 | DVIA是一个iOS安全的应用。它的主要目标给移动安全爱好者学习iOS的渗透测试技巧提供一个合法的平台。APP涵盖了所有常见的iOS安全漏洞,它免费并开放源码,漏洞测试和解决方案覆盖到iOS 10版本。
26 |
27 | 地址:[http://damnvulnerableiosapp.com/](http://damnvulnerableiosapp.com/)
28 |
29 | **3. ****Damn Vulnerable Web Application (DVWA)**
30 |
31 | 基于 php 和 mysql 的虚拟 Web 应用,“内置”常见的 Web 漏洞,如 SQL 注入、xss 之类,可以搭建在自己的电脑上
32 |
33 | 地址:[http://www.dvwa.co.uk/](http://www.dvwa.co.uk/)
34 |
35 | **4. Game of Hacks**
36 | 基于游戏的方式来测试你的安全技术,每个任务题目提供了大量的代码,其中可能有也可能没有安全漏洞!
37 |
38 | 地址:[http://www.gameofhacks.com/](http://www.gameofhacks.com/)
39 |
40 | **5. Google Gruyere**
41 | 一个看起来很low的网址,但充满了漏洞,目的是为了帮助那些刚开始学习应用程序安全性的人员。
42 |
43 | 地址:[http://google-gruyere.appspot.com/](http://google-gruyere.appspot.com/)
44 |
45 | **6. HackThis!!**
46 | 旨在教你如何破解、转储和涂改,以及保护网站的黑客技巧,提供超过50种不同的难度水平。
47 |
48 | 地址:[https://www.hackthis.co.uk/](https://www.hackthis.co.uk/)
49 |
50 | **7. Hack This Site**
51 | 是一个合法和安全的测试黑客技能的网站,并包含黑客资讯. 文章、论坛和教程,旨在帮助你学习黑客技术。
52 |
53 | 地址:[https://www.hackthissite.org/](https://www.hackthissite.org/)
54 |
55 | **8. Hellbound Hackers**
56 | 提供了各种各样的安全实践方法和挑战,目的是教你如何识别攻击和代码的补丁建议。主题包含应用程序加密和破解,社工和rooting。社区有接近10万的注册会员,也是最大的一个黑客社区之一。
57 |
58 | 地址:[https://www.hellboundhackers.org/](https://www.hellboundhackers.org/)
59 |
60 | **9. McAfee HacMe Sites**
61 |
62 | 迈克菲提供的各类黑客及安全测试工具
63 |
64 | 地址:[http://www.mcafee.com/us/downloads/free-tools/index.aspx](http://www.mcafee.com/us/downloads/free-tools/index.aspx)
65 |
66 | **10. Mutillidae**
67 | mutillidaemutillidae是一个免费,开源的Web应用程序,提供专门被允许的安全测试和入侵的Web应用程序。其中包含了丰富的渗透测试项目,如SQL注入、跨站脚本、clickjacking、本地文件包含、远程代码执行等.
68 |
69 | 地址:[https://sourceforge.net/projects/mutillidae/](https://sourceforge.net/projects/mutillidae/)
70 |
71 | **11. OverTheWire**
72 | 基于游戏的让你学习安全技术和概念的黑客网站
73 |
74 | 地址:[http://overthewire.org/wargames/](http://overthewire.org/wargames/)
75 |
76 | **12. Peruggia**
77 | 一个提供安全、合法攻击的黑客网站
78 |
79 | 地址:[https://sourceforge.net/projects/peruggia/](https://sourceforge.net/projects/peruggia/)
80 |
81 | **13. Root Me**
82 | 通过超过200名黑客的挑战和50个虚拟环境来提高你黑客技巧和网络安全知识的网站
83 |
84 | 地址:[https://www.root-me.org/](https://www.root-me.org/)
85 |
86 | **14. Try2Hack**
87 | 最古老的黑客网站之一,提供多种安全挑战。
88 |
89 | 地址:[http://www.try2hack.nl/](http://www.try2hack.nl/)
90 |
91 | **15. Vicnum**
92 | OWASP项目之一,简单框架,针对不同的需求,并基于游戏的方式来引导安全开发者学习安全技术。
93 |
94 | 地址:[http://vicnum.ciphertechs.com/](http://vicnum.ciphertechs.com/)
95 |
96 | **16. WebGoat**
97 | 最受欢迎的OWASP项目,提供了一个真实的安全教学环境,指导用户设计复杂的应用程序安全问题
98 |
99 | 地址:[http://webappsecmovies.sourceforge.net/webgoat/](http://webappsecmovies.sourceforge.net/webgoat/)
100 |
101 | ## **国内**
102 |
103 | **1. i春秋**
104 |
105 | 国内比较好的安全知识在线学习平台,把复杂的操作系统、工具和网络环境完整的在网页进行重现,为学习者提供完全贴近实际环境的实验平台,
106 |
107 | 地址:[http://www.ichunqiu.com/main](http://www.ichunqiu.com/main)
108 |
109 | **2. XCTF_OJ 练习平台**
110 |
111 | XCTF-OJ (X Capture The Flag Online Judge)是由XCTF组委会组织开发并面向XCTF联赛参赛者提供的网络安全技术对抗赛练习平台。XCTF-OJ平台将汇集国内外CTF网络安全竞赛的真题题库,并支持对部分可获取在线题目交互环境的重现恢复,XCTF联赛后续赛事在赛后也会把赛题离线文件和在线交互环境汇总至XCTF-OJ平台,形成目前全球CTF社区唯一一个提供赛题重现复盘练习环境的站点资源。
112 |
113 | 地址:[http://oj.xctf.org.cn/](http://oj.xctf.org.cn/)
114 |
115 | **3. 网络信息安全攻防学习平台**
116 |
117 | 提供基础知识考查、漏洞实战演练、教程等资料。实战演练以 Web 题为主,包含基础关、脚本关、注入关、上传关、解密关、综合关等。
118 |
119 | 地址:[http://hackinglab.cn/index.php](http://hackinglab.cn/index.php)
120 |
121 | **参考来源:**
122 |
123 | - http://list.ly/list/euz-15-vulnerable-sites-to-legally-practice-your-hacking-skills-2016-update
124 | - http://www.freebuf.com/sectool/4708.html
125 | - https://www.zhihu.com/question/24740239
126 |
127 | ---
128 |
129 | >**备注:作者:Douglas@阿里聚安全,转载请注明来自阿里聚安全,更多安全类文章,请访问[阿里聚安全博客](https://jaq.alibaba.com/community/index.htm)**
130 |
--------------------------------------------------------------------------------
/_posts/tech/2014-12-22-lua-weaktable.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Lua table之弱引用
4 | category: 技术
5 | tags: 程序
6 | keywords: Lua之Table
7 | ---
8 |
9 | Lua采用了基于垃圾收集的内存管理机制,因此对于程序员来说,在很多时候内存问题都将不再困扰他们。然而任何垃圾收集器都不是万能的,在有些特殊情况下,垃圾收集器是无法准确的判断是否应该将当前对象清理。这样就极有可能导致很多垃圾对象无法被释放。为了解决这一问题,就需要Lua的开发者予以一定程度上的配合。比如,当某个table对象被存放在容器中,而容器的外部不再有任何变量引用该对象,对于这样的对象,Lua的垃圾收集器是不会清理的,因为容器对象仍然引用着他。如果此时针对该容器的应用仅限于查找,而不是遍历的话,那么该对象将永远不会被用到。事实上,对于这样的对象我们是希望Lua的垃圾收集器可以将其清理掉的。见如下代码:
10 |
11 | ```lua
12 | a = {}
13 | key = {}
14 | a[key] = 1
15 | key = {}
16 | a[key] = 2
17 | collectgarbage()
18 | for k,v in pairs(a) do
19 | print(v)
20 | end
21 | ```
22 |
23 | --输出1和2
24 |
25 | 在执行垃圾收集之后,table a中的两个key都无法被清理,但是对value等于1的key而言,如果后面的逻辑不会遍历table a的话,那么我们就可以认为该对象内存泄露了。在Lua中提供了一种被称为弱引用table的机制,可以提示垃圾收集器,如果某个对象,如上面代码中的第一个table key,只是被弱引用table引用,那么在执行垃圾收集时可以将其清理。
26 |
27 |
28 | Lua是具备自动内存管理的,我们可以只管创建对象,无须删除对象(当然,对于不要的对象你需要设置一下nil值),Lua会自动删除那些被认为是垃圾的对象。
29 | 问题就出现在,什么对象才是垃圾对象,有些时候,我们很清楚某个对象是垃圾,但是,Lua却无法发现。正如上面所述,就需要Lua的开发者予以一定程度上的配合;再比如下面这个例子:
30 |
31 | ```lua
32 | t = {};
33 |
34 | -- 使用一个table作为t的key值
35 | key1 = {name = "key1"};
36 | t[key1] = 1;
37 | key1 = nil;
38 |
39 | -- 又使用一个table作为t的key值
40 | key2 = {name = "key2"};
41 | t[key2] = 1;
42 | key2 = nil;
43 |
44 | -- 强制进行一次垃圾收集
45 | collectgarbage();
46 |
47 | for key, value in pairs(t) do
48 | print(key.name .. ":" .. value);
49 | end
50 | ```
51 |
52 | -- 其结果输出是:
53 | >key1:1
54 | >key2:1
55 |
56 | 这很符合常理,也在我们的预计当中,虽然我们在给t赋值之后,将key1和key2都赋值为nil了。
57 | 但是,因为存在table对key1,key2的引用,已经添加到table中的key值是不会因此而被当做垃圾的。
58 | 换句话说,key1本身已经是nil值,但它曾经所指向的`内容`依然存放在t中。key2也是一样的情况。
59 | 所以我们最后还是能输出key1和key2的name字段。
60 |
61 | 那么,如果我们把某个table作为另一个table的key值后,希望当table设为nil值时,另一个table的那一条字段也被删除。
62 | 应该如何实现?这时候就要用到弱引用table了,弱引用table的实现也是利用了元表。
63 |
64 | Lua中的弱引用表提供了3中弱引用模式,即key是弱引用、value是弱引用,以及key和value均是弱引用。不论是哪种类型的弱引用table,只要有一个key或value被回收,那么它们所在的整个条目都会从table中删除。
65 |
66 | 一个table的弱引用类型是通过其元表的__mode字段来决定的。如果该值为包含字符"k",那么table就是key弱引用,如果包含"v",则是value若引用,如果两个字符均存在,就是key value弱引用。见如下代码:
67 |
68 | ```lua
69 | a = {}
70 | b = {__mode = "k"}
71 | setmetatable(a,b)
72 | key = {}
73 | a[key] = 1
74 | key = {}
75 | a[key] = 2
76 | collectgarbage()
77 | for k,v in pairs(a) do
78 | print(v)
79 | end
80 | ```
81 | --仅仅输出2
82 |
83 | 在上面的代码示例中,第一个key在被存放到table a之后,就被第二个key的定义所覆盖,因此它的唯一引用来自key弱引用表。事实上,这种机制在Java中也同样存在,Java在1.5之后的版本中也提供了一组弱引用容器,其语义和Lua的弱引用table相似。
84 | 最后需要说明的是,Lua中的弱引用表只是作用于table类型的变量,对于其他类型的变量,如数值和字符串等,弱引用表并不起任何作用。
85 |
86 | ##备忘录(memoize)函数:
87 | 用“空间换时间”是一种通用的程序运行效率优化手段,比如:对于一个普通的Server,它接受到的请求中包含Lua代码,每当其收到请求后都会调用Lua的loadstring函数来动态解析请求中的Lua代码,如果这种操作过于频率,就会导致Server的执行效率下降。要解决该问题,我们可以将每次解析的结果缓存到一个table中,下次如果接收到相同的Lua代码,就不需要调用loadstirng来动态解析了,而是直接从table中获取解析后的函数直接执行即可。这样在有大量重复Lua代码的情况下,可以极大的提高Server的执行效率。反之,如果有相当一部分的Lua代码只是出现一次,那么再使用这种机制,就将会导致大量的内存资源被占用而得不到有效的释放。在这种情况下,如果使用弱引用表,不仅可以在一定程度上提升程序的运行效率,内存资源也会得到有效的释放。见如下代码:
88 |
89 |
90 | ```lua
91 | local results = {}
92 | setmetatable(results,{__mode = "v"}) --results表中的key是字符串形式的Lua代码
93 | function mem_loadstring(s)
94 | local res = results[s]
95 | if res == nil then
96 | res = assert(loadstring(s))
97 | results[s] = res
98 | end
99 | return res
100 | end
101 | ```
--------------------------------------------------------------------------------
/_posts/tech/2015-09-02-js-string-compare.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: JavaScript 字符串比较
4 | category: 技术
5 | tags: javascript,JavaScript
6 | keywords: javascript,字符串
7 | ---
8 |
9 | ## 字符串和其他对象比较大小 ##
10 |
11 |
12 |
JavaScript String Comparison
13 |
This is A question worthy of discussion and attention.
14 |
15 |
16 | [JavaScript中的字符串操作](http://www.cnblogs.com/xuebin/articles/1296837.html)
17 | 字符串和其他对象进行比较,大体要遵循下面的一些考量:
18 |
19 | 1. 两个操作数都是数值,则进行数值比较
20 | 2. 两个操作数都是字符串,则比较两个字符串对应的字符编码值
21 | 3. 两个操作数有一个是数值,则将另一个转换为数值,再进行数值比较
22 | 4. 两个操作数有一个是对象,则先调用valueOf()方法或toString()方法,再用结果比较
23 |
24 | 除此之外还有些特殊的地方需要注意:
25 |
26 |
27 |
53 |
54 | ## 判断两个字符串(/对象)是否相等 ##
55 | 1. 如果一个操作值为布尔值,则在比较之前先将其转换为数值,false转成0,true为1;
56 | 2. 如果一个操作值为字符串,另一个操作值为数值,则通过Number()函数将字符串转换为数值
57 | 3. 如果一个操作值是对象,另一个不是,则调用对象的valueOf()方法,得到的结果按照前面的规则进行比较
58 | 4. null与undefined是相等的
59 | 5. 如果一个操作值为NaN,则相等比较返回false(**NaN 与包括其本身在内的任何值都不相等**).
60 | 6. 如果两个操作值都是对象,则比较它们是不是指向同一个对象。如果两个操作数都指向同一个对象,则相等操作符返回true,否则,返回false
61 | 7. 在全等和不全等的判断上,只有值和类型都相等,才返回true,否则返回false;
62 |
63 | 看下面的实例:
64 | var num =2==2; //true
65 | var num = '2'==2; //true,'2'会转成数值2
66 | var num = false == 0; //true,false转成数值就是0
67 | var num = false == "0"; //true,false转成数值就是0,"0"会转化成0
68 | var num = 'a'=='A'; //false,转换后的编码不一样
69 | var num = 2==NaN; //false,只要有NaN,都是false
70 | var num = {}=={}; //false,比较的是他们的地址,每个新创建对象的引用地址都不同
71 |
72 | var age = {};
73 | var height = age;
74 | var box = age == height;//true,引用地址一样,所以相等
75 |
76 | JavaScript有两种相等运算符。一种是完全向后兼容的,标准的"==",如果两个操作数类型不一致,它会在某些时候自动对操作数进行类型转换,考虑下面的赋值语句:
77 |
78 | var strA = "i love you!";
79 | var strB = new String("i love you!");
80 |
81 | 这两个变量含有相同的字符序列,但数据类型却不同,前者为string,后者为object,在使用"=="操作符时,JavaScript会尝试各种求值,以检测两者是否会在某种情况下相等。所以下面的表达式结果为true: strA == strB。
82 | 第二种操作符是"严格"的"===",它在求值时不会这么宽容,不会进行类型转换。所以表达式strA === strB的值为false,虽然两个变量持有的值相同。
83 | 有时代码的逻辑要求你判断两个值是否不相等,这里也有两个选择:"!="和严格的"!==",它们的关系就类似于"=="和"==="。
84 |
85 | 讨论:
86 |
87 | "=="和"!="在求值时会尽可能地寻找值的匹配性,但你可能还是想在比较前进行显式的类型转换,以"帮助"它们完成工作。比如,如果想判断一个用户的输入值(字符串)是否等于一个数字,你可以让"=="帮你完成类型转换:
88 | if(document.form1.txtAge.value == someNumericVar) { ... }
89 | 也可以提前转换:
90 | if(parseInt(document.form1.txtAge.value) == someNumericVar) { ... }
91 | 如果你比较习惯于强类型的编程语言(比如C#,Java等),那么这里你可以延续你的习惯(类型转换),这样也会增强程序的可读性。
92 |
93 | 有一种情况需要注意,就是计算机的区域设置。如果用"<"和">"来比较字符串,那么JavaScript把它们作为Unicode来比较, 但显然,人们在浏览网页时不会把文本当作Unicode来阅读:) 比如在西班牙语中,按照传统的排序,"ch"将作为一个字符排在"c"和"d"之间。localeCompare()提供了一种方式,可以帮助你使用默认 区域设置下的字符排序规则。
94 |
95 | var strings; // 要排序的字符串数组,假设已经得到初始化
96 | strings.sort(function(a,b) { return a.localeCompare(b) }); // 调用sort()方法进行排序
97 |
98 |
99 | 参考文章:
100 |
101 | [详解js运算符](http://segmentfault.com/a/1190000002423935 "详解js运算符")
102 |
103 | [js如何比较数字字符串之间大小](http://www.esnsc.com/news655.html)
104 |
--------------------------------------------------------------------------------
/_posts/tech/2016-01-20-principle-of-dry-shy.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: DRY原则和Shy原则
4 | category: 技术
5 | tags: 编码
6 | keywords: DRY原则,Shy原则
7 | ---
8 |
9 | 保障可维护性的主要诀窍是遵循**DRY原则和Shy原则**。
10 | 在一个系统的整个生命周期里,理解和改动这类维护工作的比例一般非常之高。为了维护的方便,要尽量将系统划分为可以独立理解与改动的模块。这就要在设计的时候注重DRY原则与Shy原则。不过,这两条原则有一定的冲突,并不总能兼得,于是在追求的时候要重视分寸。
11 |
12 | ### **维护者的两大困扰**
13 | 有两种情况会给维护者增添很大的麻烦:一种是为了调整一个效果,要改动无数个地方;一种是只改动了一个地方,却影响了很多效果。
14 |
15 | 在前一种情况下,非常容易出现漏改的问题——因为需要改动的地方太多,有些应该改动的地方没有改动;在后一种情况下,非常容易出现误改的情况——因为被影响的效果太多,有些不该改动的地方跟着变了。
16 |
17 | 无论出现那种情形,都会使得理解和改动设计变得困难。不过,只要在设计的时候秉持一些原则,这两种事情都可以得到有效的遏制。
18 |
19 | ### **DRY原则**
20 | DRY是“Don't Repeat Yourself”的缩写。意思是说,在一个设计里,对于任何东西,都应该有且只有一个表示,其它的地方都应该引用这一处。这样需要改动的时候,只需调整这一处,所有的地方就都变更过来了。
21 |
22 | 运用DRY原则的时候,有一个很微妙的事情是要认真判别两样东西是否是一回事。有时候也有“两样东西现在碰巧看起来是一样的,但是并不能保证将来始终都一样”的情况。这种时候,很可能就有制造一点表面上的重复的必要了。
23 |
24 | ### **Shy原则**
25 | Shy不是任何东西的缩写。这里是取其字面意思,说系统的每个部分都应该害羞一点,不要把只和自己有关的信息暴露给其它部分,同时也不要毫不客气的依赖太多的其它部分。这样一来,日后便可以放心的修改这些没变暴露的东西,也不用太过担心自己依赖的东西发生了变化。
26 |
27 | 运用Shy原则的时候的主要挑战在于厘清哪些东西适合被做成系统里的独立单元。特别是确定独立单元的大小。
28 |
29 | ### **两条原则的平衡**
30 | DRY原则和Shy原则的目标是相同的,都是为了增强系统的可维护性。一个很好的遵循了DRY原则和Shy原则的系统,被称为具有“正交性”的系统。
31 |
32 | DRY原则和Shy原则在某种程度上是不能兼得的:想要一个系统够DRY,就得尽量把各部分里相同的东西分离出去放在一起,这难免就会导致很多部分都和分离出来的这些东西存在一些关系,从而不够Shy;想要一个系统够Shy,就得努力让各部分都做得和其它部分没有什么暧昧,这难免就会致使每个部分里面都有一些本来可以共同使用的内容,从而不够DRY。
33 |
34 | 但是,实际需要的是能兼顾两条原则的设计。这就需要追求每条原则的时候都注意保持一定的分寸。
35 |
--------------------------------------------------------------------------------
/_posts/tech/2016-06-18-toss-highlight-javascript-code.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 处理高亮JavaScript代码随记
4 | date: 2016-06-18 17:33:33 +0800
5 | categories: 技术
6 | tags: JavaScript
7 | keywords: highlight,JavaScript
8 | description: 记录下给 //blog.lovejade.cn/jade/vue-jade-components-demo.html#/ 折腾给JavaScript高亮历程;
9 | ---
10 |
11 | 在尝试开源 `Vue Common Components` 时候,同时也为其做相关 **Demo** 以及 **Instructions** ————[Vue Common Components Desc and Example](//blog.lovejade.cn/jade/vue-jade-components-demo.html#/) 这个本身采用 **vue** 以及 **vue-router** 实现之。这其中必然涉及到代码示例,因此有特写了一个组件以承载 **Demo** 中js代码。仅仅能承载,必然是需要将其高亮处理的;鉴于时间问题,自然就会选择使用固有的轮子;这里就记录下使用轮子中得一些心得。
12 |
13 | 网络上充盈着各种 “高性能JavaScript代码高亮插件”;搜索过程中有首先选取了[Highlight](https://highlightjs.org/) (PS: 用的是[Bootstrap中文网开源项目免费 CDN 服务](http://www.bootcdn.cn/)),故此使用之Like This:
14 |
15 | ```
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 | ```
25 |
26 | 这样本没有什么问题的;可所用到的页面本就一个,只是用了 **vue-router** 来切换页面显示。而 highlight 对于页面代码高亮的处理方式,目测没有监听到Url地址hash部分变化;如此,当切换到新页面时候,新页面的代码就不会高亮;找了其相关APi,并未能,找见类似处理方案;只能采取如此如下办法:
27 |
28 | ```
29 |
35 | ```
36 | 这其中使用了 **onhashchange**,这是一个HTML 5新增的事件,当#值发生变化时,就会触发这个事件。IE8+、Firefox 3.6+、Chrome 5+、Safari 4.0+支持该事件。如此,虽然可以了,可是也每次切换路由,就得刷新下这个url地址,十分破坏体验。又是一番搜索之后,找见了[SyntaxHighlighter](http://alexgorbatchev.com/SyntaxHighlighter/),只因为从搜索情况来看,它提供了处理类似需求的API,所以就有了如下用法:
37 |
38 | ```
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
55 | ```
56 |
57 | 不过使用它的时候,略有点麻烦,需要为承载代码的dom节点添加对应的 class(brush: js),因此所写的代码高亮组件 template 部分就是这样的了;不过这也不麻烦,就暂且如此处理了。
58 |
59 | ```
60 |
61 | pre#pre-wrapper(class="brush: js") { { { codeString }} }
62 | hr
63 |
64 | ```
65 |
--------------------------------------------------------------------------------
/_posts/tech/2016-09-14-solve-vue-common-problems.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Vue 常见问题解决方案记录
4 | date: 2016-09-14 18:51:01 +0800
5 | categories: 技术
6 | tags: Vue
7 | keywords: Vue,Http,Post
8 | description: Vue 常见问题解决方案记录
9 | ---
10 |
11 | ## Vue-resource 使用记录
12 | **[Vue-resource](https://github.com/vuejs/vue-resource)**, 她作为 Vue 家族一部分,可替代掉 jQuery-ajax; 使用起来也是蛮愉悦; 但初用起来却也需踩些小坑;
13 | 这部分就用来记录使用她过程中所学到的那些知识;
14 |
15 | ### 使用 post 请求
16 |
17 | 在[Vue-resource HTTP](https://github.com/vuejs/vue-resource/blob/master/docs/http.md), 已经蛮清楚的给出了 Post 请求使用示例,如下:
18 |
19 | ```
20 | // global Vue object
21 | Vue.http.get('/someUrl', [options]).then(successCallback, errorCallback);
22 | Vue.http.post('/someUrl', [body], [options]).then(successCallback, errorCallback);
23 |
24 | // in a Vue instance
25 | this.$http.get('/someUrl', [options]).then(successCallback, errorCallback);
26 | this.$http.post('/someUrl', [body], [options]).then(successCallback, errorCallback);
27 | ```
28 |
29 | 然而,这并不代表使用过程中不会遇到问题:(比如使用时遇到这样的报错:XMLHttpRequest cannot load XXX. Response for preflight has invalid HTTP status code 405);这个$http请求和jquery的ajax还是有点区别,这里的post的data默认不是以form data的形式,而是request payload。解决起来倒也很简单:在vue实例中添加headers字段:
30 |
31 | ```
32 | http: {
33 | headers: {'Content-Type': 'application/x-www-form-urlencoded'}
34 | }
35 | ```
36 |
37 | 或者使用 vue 方面提供的更加简单做法:
38 |
39 | ```
40 | Vue.http.options.emulateJSON = true;
41 | ```
42 |
43 | 以上参考了 [vue.js 快速入门]([https://segmentfault.com/a/1190000003968020#articleHeader10]) 一文中写道的分享[这也得了解下form data和request payload的区别,才是彻底解决问题之道]; 另外还需注意的是,参数传递方面也跟 get 请求有些区别, 例如下面使用示例:
44 |
45 | ```
46 | if (model === 'POST'){
47 | this.$http.post(apiUrl, params)
48 | .then((response) => {
49 | callback(response.data)
50 | })
51 | .catch(function (response) {
52 | console.log(response)
53 | })
54 | } else {
55 | this.$http.get(apiUrl, {params: params})
56 | .then((response) => {
57 | callback(response.data)
58 | })
59 | .catch(function (response) {
60 | console.log(response)
61 | })
62 | }
63 | ```
64 |
65 | ### vue-resource设置timeout回调?
66 | 在文档 [vue-resource | Interceptors](https://github.com/vuejs/vue-resource/blob/master/docs/http.md) 中,已经阐明了`Interceptors`(拦截器)的作用:
67 |
68 | >Interceptors can be defined globally and are used for pre- and postprocessing of a request.
69 |
70 | 所以可以自己实现一个 `timeout interceptor` 的流程,据此实现你想要的需求;比如像这样:
71 |
72 | ```
73 | Vue.http.interceptors.push((request, next) => {
74 | var timeout;
75 | // 這裡改用 _timeout ,就不會觸發原本的
76 | if (request._timeout) {
77 | // 一樣綁定一個定時器,但是這裡是只要觸發了,就立即返回 response , 並且這邊自定義了 status 和 statusText
78 | timeout = setTimeout(() => {
79 | next(request.respondWith(request.body, {
80 | status: 408,
81 | statusText: 'Request Timeout'
82 | }));
83 | }, request._timeout);
84 | }
85 |
86 | next((response) => {
87 | clearTimeout(timeout);
88 | });
89 | })
90 | ```
91 |
92 | 具体可参见 [如何用vue-resource设置timeout回调?](https://segmentfault.com/q/1010000005800495)。
93 |
94 |
95 | ### 使用 Plugin 问题
96 |
97 | 使用 `vue` 各路好手提供的插件之时,在享受其便捷性同时,也许会被些许意想不到的问题困扰;毕竟那么丰富的功能中,多少引入了很多你还未想到的玩意儿;譬如:使用 [vue-tables](https://github.com/matfish2/vue-tables) 这个插件有一段时间了,但今日还是被如下一个报错给耽搁了不少时间(需要补充的是,经验有时候会帮倒忙)
98 |
99 | ```
100 | Module parse failed: D:\xxx\yyyy\node_modules\vue-tables\lib\table-template.html Unexpected token (1:0)
101 | You may need an appropriate loader to handle this file type.
102 | SyntaxError: Unexpected token (1:0)
103 | ```
104 |
105 | 连续的工作,已经使得思维能力下降;其实造成这个问题,在于 `vue-tables` 插件中使用了 html 做的模板,因此在书写 webpack 只是就需要,引入对 html 文件的解析器;只需要如此操作即可,在 module 中添加
106 | `vue-html` 来 *.html* 为后缀的文件即可:
107 |
108 | ```
109 | module: {
110 | preLoaders: [{
111 | test: /\.vue$/,
112 | loader: 'eslint',
113 | include: projectRoot,
114 | exclude: /node_modules/
115 | }, {
116 | test: /\.js$/,
117 | loader: 'eslint',
118 | include: projectRoot,
119 | exclude: /node_modules/
120 | }],
121 | loaders: [{
122 | test: /\.vue$/,
123 | loader: 'vue'
124 | }, {
125 | test: /\.js$/,
126 | loader: 'babel',
127 | include: projectRoot,
128 | exclude: /node_modules/
129 | }, {
130 | test: /\.json$/,
131 | loader: 'json'
132 | }, {
133 | test: /\.html$/,
134 | loader: 'vue-html'
135 | }, {
136 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
137 | loader: 'url',
138 | query: {
139 | limit: 13140,
140 | name: utils.assetsPath('img/[name].[hash:7].[ext]')
141 | }
142 | }, {
143 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
144 | loader: 'url',
145 | query: {
146 | limit: 10000,
147 | name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
148 | }
149 | }]
150 | }
151 | ```
152 |
153 | 未完待续...
154 |
155 | LastModify: 2016-09-26 19:18
156 |
--------------------------------------------------------------------------------
/_posts/tech/2016-10-21-what-is-nodejs.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: What is Node.js And What it can do
4 | date: 2016-10-21 17:30:00 +0800
5 | categories: 技术
6 | tags: Node.js
7 | keywords: Node.js,Http
8 | description: What is Node.js(什么是Node.js)What Node.js Can do(Node.js可以作什么);
9 | ---
10 |
11 | **Node.js**,或者 **Node**,是一个可以让 JavaScript 运行在服务器端的平台。它可以让JavaScript 脱离浏览器的束缚运行在一般的服务器环境下,就像运行 Python、Perl、PHP、Ruby程序一样。你可以用 Node.js 轻松地进行服务器端应用开发,Python、Perl、PHP、Ruby 能做的事情 Node.js 几乎都能做,而且可以做得更好。
12 |
13 |
22 |
23 | Node.js
24 |
25 | Node.js 是一个为实时Web(Real-time Web)应用开发而诞生的平台,它从诞生之初就充分考虑了在实时响应、超大规模数据要求下架构的可扩展性。这使得它摒弃了传统平台依靠多线程来实现高并发的设计思路,而采用单线程、异步式I/O、事件驱动式的程序设计模型。这些特性不仅带来了巨大的性能提升,还减少了多线程程序设计的复杂性,进而提高了开发效率。Node.js 最初是由 `Ryan Dahl` 发起的开源项目,后来被 `Joyent` 公司注意到。Joyent 公司将 `Ryan Dahl` 招入旗下,因此现在的 Node.js 由 Joyent 公司管理并维护。尽管它诞生的时间(2009年)还不长,但它的周围已经形成了一个庞大的生态系统。Node.js 有着强大而灵活的包管
26 | 理器(node package manager,npm),目前已经有上万个第三方模块,其中有网站开发框架,有 MySQL、PostgreSQL、MongoDB 数据库接口,有模板语言解析、CSS 生成工具、邮件、加密、图形、调试支持,甚至还有图形用户界面和操作系统 API工具。由 VMware 公司建立的云计算平台 Cloud Foundry 率先支持了 Node.js。2011年6月,微软宣布与 Joyent 公司合作,将 Node.js 移植到 Windows,同时 Windows Azure 云计算平台也支持 Node.js。Node.js 目前还处在迅速发展阶段,相信在不久的未来它一定会成为流行的Web应用开发平台。让我们从现在开始,一同探索 **Node.js** 的美妙世界吧!
27 |
28 | ## 1.1 Node.js 是什么
29 |
30 | Node.js 不是一种独立的语言,与 PHP、Python、Perl、Ruby 的“既是语言也是平台”
31 | 不同。Node.js 也不是一个 JavaScript 框架,不同于 CakePHP、Django、Rails。Node.js 更不
32 | 是浏览器端的库,不能与 jQuery、ExtJS 相提并论。Node.js 是一个让 JavaScript 运行在服务
33 | 端的开发平台,它让 JavaScript 成为脚本语言世界的一等公民,在服务端堪与 PHP、Python、
34 | Perl、Ruby 平起平坐。
35 |
36 | **Node.js** 是一个划时代的技术,它在原有的 Web 前端和后端技术的基础上总结并提炼出
37 | 了许多新的概念和方法,堪称是十多年来 Web 开发经验的集大成者。Node.js 可以作为服务
38 | 器向用户提供服务,与 PHP、Python、Ruby on Rails 相比,它跳过了 Apache、Nginx 等 HTTP
39 | 服务器,直接面向前端开发。Node.js 的许多设计理念与经典架构(如 LAMP)有着很大的
40 | 不同,可提供强大的伸缩能力,以适应21世纪10年代以后规模越来越庞大的互联网环境。
41 | Node.js 与 JavaScript 说起 JavaScript,不得不让人想到浏览器。传统意义上,JavaScript 是由 ECMAScript、文档对象模型(DOM)和浏览器对象模型(BOM)组成的,而 Mozilla 则指出 JavaScript 由
42 | Core JavaScript 和 Client JavaScript 组成。之所以会有这种分歧,是因为 JavaScript 和浏览器
43 | 之间复杂的历史渊源,以及其命途多舛的发展历程所共同造成的,我们会在后面详述。我们
44 | 可以认为,Node.js 中所谓的 JavaScript 只是 Core JavaScript,或者说是 ECMAScript 的一个
45 | 实现,不包含 DOM、BOM 或者 Client JavaScript。这是因为 Node.js 不运行在浏览器中,所
46 | 以不需要使用浏览器中的许多特性。
47 |
48 |
49 | **Node.js** 是一个让 JavaScript 运行在浏览器之外的平台。它实现了诸如文件系统、模块、
50 | 包、操作系统 API、网络通信等 Core JavaScript 没有或者不完善的功能。历史上将 JavaScript
51 | 移植到浏览器外的计划不止一个,但Node.js 是最出色的一个。随着 Node.js 的成功,各种浏
52 | 览器外的 JavaScript 实现逐步兴起,因此产生了 CommonJS 规范。CommonJS 试图拟定一套
53 | 完整的 JavaScript 规范,以弥补普通应用程序所需的 API,譬如文件系统访问、命令行、模
54 | 块管理、函数库集成等功能。CommonJS 制定者希望众多服务端 JavaScript 实现遵循
55 | CommonJS 规范,以便相互兼容和代码复用。Node.js 的部份实现遵循了CommonJS规范,但
56 | 由于两者还都处于诞生之初的快速变化期,也会有不一致的地方。
57 |
58 |
59 | **Node.js** 的 JavaScript 引擎是 V8,来自 Google Chrome 项目。V8 号称是目前世界上最快
60 | 的 JavaScript 引擎,经历了数次引擎革命,它的 JIT(Just-in-time Compilation,即时编译)
61 | 执行速度已经快到了接近本地代码的执行速度。Node.js 不运行在浏览器中,所以也就不存
62 | 在 JavaScript 的浏览器兼容性问题,你可以放心地使用 JavaScript 语言的所有特性。
63 |
64 | ## 1.2 Node.js 能做什么
65 |
66 | 正如 JavaScript 为客户端而生,Node.js 为网络而生。Node.js 能做的远不止开发一个网
67 | 站那么简单,使用 **Node.js**,你可以轻松地开发:
68 |
69 | 具有复杂逻辑的网站;
70 | 基于社交网络的大规模 Web 应用;
71 | Web Socket 服务器;
72 | TCP/UDP 套接字应用程序;
73 | 命令行工具;
74 | 交互式终端程序;
75 | 带有图形用户界面的本地应用程序;
76 | 单元测试工具;
77 | 客户端 JavaScript 编译器。
78 |
79 | **Node.js** 内建了 HTTP 服务器支持,也就是说你可以轻而易举地实现一个网站和服务器
80 | 的组合。这和 PHP、Perl 不一样,因为在使用 PHP 的时候,必须先搭建一个 Apache 之类的HTTP 服务器,然后通过 HTTP 服务器的模块加载或 CGI 调用,才能将 PHP 脚本的执行结
81 | 果呈现给用户。而当你使用 Node.js 时,不用额外搭建一个 HTTP 服务器,因为 Node.js 本身
82 | 就内建了一个。这个服务器不仅可以用来调试代码,而且它本身就可以部署到产品环境,它
83 | 的性能足以满足要求。**Node.js** 还可以部署到非网络应用的环境下,比如一个命令行工具。Node.js 还可以调用
84 | C/C++ 的代码,这样可以充分利用已有的诸多函数库,也可以将对性能要求非常高的部分用
85 | C/C++ 来实现。
86 |
87 | ## 1.3 Node.js 核心模块
88 |
89 | 如果只是在服务器运行JavaScript代码,用处并不大,因为服务器脚本语言已经有很多种了。Node.js的用处在于,它本身还提供了一系列功能模块,与操作系统互动。这些核心的功能模块,不用安装就可以使用,下面是它们的清单。
90 |
91 | >**http**:提供HTTP服务器功能。
92 | **url**:解析URL。
93 | **fs**:与文件系统交互。
94 | **querystring**:解析URL的查询字符串。
95 | **child_process**:新建子进程。
96 | **util**:提供一系列实用小工具。
97 | **path**:处理文件路径。
98 | **crypto**:提供加密和解密功能,基本上是对OpenSSL的包装。
99 |
100 | 上面这些核心模块,源码都在Node的lib子目录中。为了提高运行速度,它们安装时都会被编译成二进制文件。核心模块总是最优先加载的。如果你自己写了一个HTTP模块,require('http')加载的还是核心模块。
101 |
--------------------------------------------------------------------------------
/_posts/tech/2018-04-16-深度工作以充分利用脑力.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 深度工作以充分利用脑力
4 | date: 2018-04-16 00:10:20 +0800
5 | categories: 技术
6 | tags: 工作
7 | keywords: 深度学习 高效
8 | description: 深度学习是人工智能(AI)中很重要的概念,意指结构够深,容量够大的模型才能完成复杂任务。借鉴这个概念,对人来说,深度工作就是高质量,有深度广度的工作和思考。虽然我们拥有如此强大的大脑,并不是每个人都擅长有深度的工作。
9 | ---
10 |
11 | 今读到一篇文章:[深度工作:充分使用每一份脑力](https://www.cnblogs.com/buptzym/p/8059121.html);对其中所提及的观点,深表赞同。坦白讲,个人目前也深处浮躁之中,经常在寻求安静中,饱受着与各种焦虑所导致的病态做斗争(自身与外部因素皆有)。对于文章中提及的`深度工作`,`专注思考`,`健康`等方面的看法出奇的一致,故特转载此文与诸君分享,以下是原文内容。
12 |
13 | ---
14 |
15 | 
16 |
17 | 浮躁已经成了普遍的社会现象。判断一个人是否浮躁非常容易,看他一天主动拿起手机的次数就可以了。据TED的演讲者说,这个值一般是50次,除了8小时的睡觉之外,基本上每20分钟就要去翻翻手机。
18 |
19 | 你会去用手机做什么?看微信,票圈,微博,知乎,淘宝,或只是来回刷首页。我们不是名人,没人关心你在社交网络上的行动。然而在这短短几分钟,破坏了大脑辛苦构建的情境,放下手机后很可能忘记之前在做什么,然后很久都难以进入状态。碎片化阅读盛行,可是当你放下手机,还能记得些什么呢?
20 |
21 | 我们还发现,几乎同时毕业的同学,在工作几年后会产生巨大的差距,有的人已经能够管理上百人的大团队,而有的人甚至连自己都无法管理,唯命是从,没有主动性。看似每个人都在工作,为何几年后职业发展,专业性和影响力方面都相差巨大呢?
22 |
23 | 深度学习是人工智能(AI)中很重要的概念,意指结构够深,容量够大的模型才能完成复杂任务。借鉴这个概念,对人来说,深度工作就是高质量,有深度广度的工作和思考。虽然我们拥有如此强大的大脑,并不是每个人都擅长有深度的工作。
24 |
25 | ### **浮躁和焦虑**
26 |
27 | 浮躁的人,往往不能坚持阅读较长较难的文字,在独处的环境中坐立不安,不停地翻手机,经常追求短期价值而非长期收益。大脑不得不反复切换情境,越来越浮躁,进而恶性循环,且很容易疲劳:比如试着同时与10个人聊天,半小时就疲惫不堪了。
28 |
29 | 不少同学调试代码的习惯并不好,沙漠君也一样,举个栗子:写代码很可能一次性写不对,出错后修改,再运行,再修改。每次运行都需要花一两分钟时间,那么就会习惯性地拿起手机,之后低头一看怎么又出错了。几经折腾,一上午倒是刷了不少知乎,却没干多少正经事情。大神是怎么写代码的呢?他们会专注地在大脑里模拟运行一遍,提前把发现的错误改掉,调试时非常专注。但两者效率差异大得令人咋舌。
30 |
31 | 我们发现,懒惰的人难以生存。但不懒惰却浮躁也不见得好到哪里。我曾经把要做的事情做成列表,清理完列表即完成任务。之后郁闷地发现,越来越沉迷于完成列表的感觉,定的目标越来越琐碎,而不去深究任务的细节和高度。浮躁虽不是懒惰,看似很忙,实则质量低下。战术上的忙碌改变不了战略的懒惰。没想清楚问题就匆忙上路,瞎忙活。
32 |
33 | 质量远比数量重要,成功从来不是依赖于足够多的事,改变取决于关键的几个要素。“一个人的命运啊,当然要靠自我奋斗,但是也要考虑到历史的进程。" 长者完成了三件小事足以名垂千古,对大部分人来说,完成1件重要的事情就够了。
34 |
35 | ### **深度工作的状态**
36 |
37 | 深度工作时,大脑是非常专注而高效的,有能力处理复杂问题。想象一种状态:在无人打断的长时间思考下,大脑会创建精密的立体信息网络,各种想法和创意会不断涌现,发现问题后去吸收信息的效率会非常高。
38 |
39 | 一个看似简单的问题,背后实则有丰富的内涵,是否能想到足够的深度。举个数学的例子:对贝叶斯公式,它的概念简单,被很多理工科同学熟知。它最初用于解决什么问题,有什么条件,需要哪些背景知识,进一步,它的本质,有哪些推论和扩展,在哪些领域被成功应用。能把这些问题都讲清楚,足够去应聘顶级的算法工程师。
40 |
41 | 专注是一种习惯,当你能在乏味或费解的问题上(比如看这篇文章)保持专注时,大脑会自然地习得这种技能,并逐渐适应。专注工作非常高效,虽然财富相差巨大,但人人时间平等,节约了工作时间就有更多空闲去浪。
42 |
43 | 除了高质量地工作,深度思考还可以扩展到平时的空闲时间,当然并不是鼓励成为工作狂。很多好想法,并非来源于书桌前的正襟危坐,而是来自于生活中不经意的思维火花。当你对一个问题很感兴趣时,就会不自觉地在潜意识中思考它。不刻意的状态反而能促使它们浮上真正的意识。
44 |
45 | 散步中思考非常有效,当然要保证安全。在冗长的通勤途中,让自己尽量不玩手机,想想有哪些问题还没有解决,原本抓狂无聊的等待反而进入了平静。想象周六傍晚,一个人安静地坐在西湖边的长椅上,周边空无一人,只有几只小猫在身边玩耍。望着平静的湖面陷入沉思:最近要完成的任务,有几种方案,优劣如何,资源是否能到位,会遇到的问题和解决方案,哪个妹子比较好看(又乱入了),进一步地,制定关键节点,任务产出和产生的影响。在半小时之内,不借助笔和纸,让大脑对问题的解决路径做完整的模拟。说不定能一下子想通困扰很久的问题。
46 |
47 | 城市本来是无趣的,是人与人之间的生活,交流和竞争带来了趣味。你可以和大脑做朋友,它会为你构造漂亮的场景,创建记忆宫殿,记住令人惊讶的海量信息。大脑还可以模仿几个朋友帮你出谋划策,但千万不要陷入多重人格的陷阱啊(这个太酷了)。
48 |
49 | ### **一次只做一件事**
50 |
51 | 不少知识和技能是很难在不同领域迁移的,但专注和深度却是任何领域都必备的素质。培养这种底层能力,便能对自身各方面都产生深远影响。问题是,如何才能保持专注?
52 |
53 | 有人认为专注需要刻意锻炼。其实只要培养离开手机和不轻易走神的习惯,就能跨出有价值的一步: 想拿起手机了,忍住;难题想不通,淡定,画张图给自己再讲一遍。这样起码能保证以半小时为单位的专注工作。多数人的大脑并不擅长并行,因此保持专注串行完成反而会更有成效。引用XBOX游戏《光环》里的士官长经常讲的一句话:“一次只做一件事”。
54 |
55 | 当然,如果要创造巨大的成果,则需要数以天计甚至以月为单位的艰辛劳动,如证明精妙的数学命题,这就需要天赋和兴趣,以及对专注度的刻苦锻炼。比尔盖茨曾抛弃所有,在8个星期里设计了BASIC语言,奠定了微软帝国的基础。他在这两个月内如此努力工作,极其疲惫时就睡一两个小时,被保罗艾伦称赞为“专注力的惊人之举”。对比看看,我们两个月能干什么呢?
56 |
57 | 可以主动创造仪式感和环境,迫使自己进入专注状态。如果可能则关掉微信和钉钉;请健身教练,因为肉疼的价钱而训练地格外起劲;经常去心仪的咖啡馆读书写作,比在家里晃悠好得多。一家企业的办公环境也很大程度上决定了员工的做事风格,互联网公司的超大开间极大地促进了信息的交流,也一定程度上导致员工难以静下心来思考问题,比如我司。而充满小隔间的笼子虽然利于个人研究,但也会降低信息流通的效率。微软的办公区设计很值得借鉴,他们有宽敞的公共空间供开放讨论,每人也有独立的办公室供深度工作,因此微软学术研究产出颇丰。
58 |
59 | 如果依然无法让自己静心和专注,那么可能就是身体的原因了。笔者最近晚上研读《黄帝内经》(有机会写篇读后感,做大数据算命),其中上古天真论中的16字令人深思:“恬淡虚无,真气从之,精神内守,病安从来”。城市产生了太多的欲望和浮躁:很多人不顺应天地之气,手机电脑一天挂在眼前,各类辐射充斥周围,夏天空调巨冷冬天又很热,平日不锻炼吃得又油腻,导致虚火过旺,不能静心,更谈不上专注和深度了。反而处在田园农舍时,听着夜半知了的声音,很容易就能静下心来,然后就困得要睡觉了...
60 |
61 | 也许你不相信中医,没关系,但是培养良好的生活习惯却是必需的。不得不说,深度工作非常消耗脑力,一两个小时的思考足够让大脑有燃烧的感觉。毕竟身体是革命的本钱。
62 |
63 | ### **深度工作的意义**
64 |
65 | 深度工作不是成功学,更不是走向人生巅峰的灵丹妙药。它是认真对待生活,有效利用时间的态度。它并不意味着要与世隔绝不与外界交流。你可以按自己的习惯配置闭关和沟通的节奏,沟通的效率反而更高。对方会因为你之前的深度思考而感到惊喜,没有人会喜欢脱口而出的无意义观点。
66 |
67 | 深度和专注会带来巨大的不同:一般环境下,只要认真工作,就足够成为佼佼者。然而在强手如林的竞争环境下,要想出人头地,就需要对业务,产品和算法有一穿到底的体系化理解,以及深度的工作,主动地行动。虽然大公司人才济济,我们却很容易发现大家有时忙过了头,最根本的细节被忽视的现象比比皆是。再回答前面的问题,因为强者能够想清楚并规划未来,专注导致主动,主动反哺专注。因此起点相同的人几年后会有巨大的差距。
68 |
69 | 更何况,由于人力成本越来越高,AI发展日新月异,速度快成本低,且几乎不会出错,未来大量对脑力要求不高的工作将会被AI取代,尤其入门级的会计,程序员,美工等办公室白领,反而对需要与环境复杂交互的服务业冲击较小。要想在新的竞争形态中取得优势,不仅要与人竞争,还需要拥有AI不具备的模糊决策的深度思考能力。
70 |
71 | 当然,道理谁都懂,能不能身体力行则是另外一回事了,这才是竞争的分水岭。比如发完这篇文章后,我一小时就能主动拿起手机50回,哎。
72 |
73 | ---
74 |
75 | 当然,每个人对于专注的保持度,是所有不同的;长时间压制性保持的专注,也许并不是一件值得倡导的事情;我们不妨借助[蕃茄工作法](https://nicelinks.site/post/5ad21715cbf8b27043e5e9cb),让大脑和身心、可以一个固定间隔性休息时间(而不是以微信来信息、收到新邮件来界定),从而促进思维的阶段性流畅,以此保证一整天的高效和平衡。很多时候呢,看到不少程序届朋友,忙起来连续几个小时,内急都会憋着,如此一天下来也不见得会产出更多;保持专注的同时,还是建议也要**劳逸结合**。
76 |
--------------------------------------------------------------------------------
/_posts/tool/2012-12-30-share-windows-and-linux.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Windows和Linux切换最终解决方案
4 | category: 工具
5 | tags: [Windows , Linux]
6 | description: 如果你也像我一样经常工作于Windows和Linux,那么这篇文章值得一看
7 | ---
8 |
9 | ## 尝试和选择
10 |
11 | 一台机器使用Windows和Linux一般有以下几个方式:
12 |
13 | - Windows和Linux真正的双系统,开机两个引导
14 | - Linux下虚拟Windows(一般是xp)
15 | - Windows下虚拟Linux
16 |
17 | 除了以上几个,还有一些其他方法,都没啥映像,在此不讨论。
18 |
19 | 选择两个系统无非是因为工作原因,Linux下开发,Windows下娱乐或者Word等。出现这种矛盾实在是纠结,在尝试过上述三种方案以后,我选择了在Windows下虚拟一个Linux,原因如下:
20 |
21 | - 使用Vmware虚拟实在是比Virtual Box好用(主要是功能)
22 | - Windows下的软件体验真的不错,而且是越来越好。虽然Linux下有各种开源软件功能一点都不差,但是你无法逃避的现实就是,用户体验真的不够。
23 | - 双系统经常切换非常麻烦
24 | - Windows系统问题,虚拟出来的真的不好用
25 | - Linux真正需要的,字符界面就够用,所以一般不需要占太大资源
26 |
27 | 根据这几点,结果就定了,那么Windows下虚拟Linux怎样做最好呢?
28 |
29 | ## 配置
30 |
31 | 1. 安装vmware
32 | 安装过程不多说,提醒一点就是,记得在配置中设置,关闭vmware后不关闭运行的虚拟机,原因待会说。
33 | 2. 安装ubuntu server
34 | 我选择了ubuntu server最小化安装,不安装x window,结果就是512内存和1cpu就顺畅运行,做各种开发木有问题
35 | 3. 安装securecrt或者putty
36 | vmware下直接用字符界面很蛋疼,没有全屏,所以使用securecrt来连接linux,这就是为啥第一步关闭vmware后还留下虚拟机。这么做可以让资源尽可能充足应用。
37 | 4. 给Linux共享文件
38 | 在字符界面下安装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上运行
39 |
40 | ## 总结
41 |
42 | 我是个实用主义,怎么顺手怎么来,如果你希望使用Windows下的软件,又无法离开Linux开发(有自己的服务器除外),那么这样的方式挺好。
--------------------------------------------------------------------------------
/_posts/tool/2013-01-09-remote-access-of-mysql.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: MySQL远程访问
4 | category: 工具
5 | tags: MySQL
6 | description: 做开发的时候一直要ssh到服务器,然后再命令行敲各种mysql命令实在是太蛋疼了,有navicat这么好的工具干嘛不用~但是Linux默认情况下数据库是不支持远程访问,所以可以用一下方式增加可访问权限
7 | ---
8 |
9 | ## 增加可访问权限
10 |
11 | 格式:grant 权限 on 数据库名.表名 to 用户@登录主机 identified by "用户密码";
12 | grant select,update,insert,delete on *.* to root@192.168.1.12 identified by "root";
13 |
14 | grant all privileges on *.* to root@'%' identified by "root";
15 |
16 | 这样就给账号密码都是root的用户再每一台计算机上登录的权限,其中"%"就是所有的意思
17 |
18 | 如果这个不行的话直接将%改为你的ip即可
19 |
20 | ## 开放3306端口
21 |
22 | mysql使用的是3306端口,为了防止防火墙将其关闭,可以使用下面方式
23 |
24 | 在linux下要开启防火墙 打开3306 端口
25 | 编辑这个文件vim /etc/sysconfig/iptables
26 | 输入
27 | -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
28 | 保存后输入service iptables restart 重启防火墙
29 |
30 | 上面这个方法是别人说的,但是我没有试成功
31 |
32 | /etc/rc.d/init.d/iptables stop
33 |
34 | 直接关闭防火墙……这个实在有点直接,但是绝对好使
35 |
36 | ## MySQL自身设置
37 | 在Ubuntu下执行上述步骤还是不能访问,这个时候修改/etc/mysql/my.conf文件,注释掉下面这句:
38 |
39 | bind-address = 127.0.0.1
--------------------------------------------------------------------------------
/_posts/tool/2013-01-16-create-remote-resp.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: git创建远程库
4 | category: 工具
5 | tags: Git
6 | description: git创建远程库
7 | ---
8 |
9 | # git创建远程库
10 |
11 | >git中一般使用 git init 创建的库不允许同一分支多个work tree直接提交,如果这么做有可能会出现以下问题:
12 |
13 | >remote: error: refusing to update checked out branch: refs/heads/master
14 |
15 | >要解决这个问题可以有以下四种方式
16 |
17 | ## 创建共享库(推荐)
18 |
19 | # 创建共享库(bare)
20 | $ mkdir /git/repo.git && cd /git/repo.git && git init --bare
21 |
22 | # 本地库
23 | $ mkdir ~/repo && cd ~/repo && git init
24 | # 创建一个文件
25 | $ vi foo
26 | # 增加新增文件到库管理
27 | $ git add .
28 | # 提交
29 | $ git commit
30 | # 增加共享库位置
31 | $ git remote add origin file:///git/repo.git
32 | # 提交更改
33 | $ git push origin master
34 |
35 | ## 不工作在同一库下(推荐)
36 |
37 | # 创建库
38 | $ mkdir /git/repo && cd /git/repo && git init
39 | # 创建一个文件
40 | $ vi foo
41 | # 增加新增文件到库管理
42 | $ git add .
43 | # 提交
44 | $ git commit
45 | # 新建一个分支
46 | $ git branch test
47 |
48 | # 本地库
49 | $ git clone file:///git/repo && cd repo
50 | # 切换到分支test
51 | $ git checkout test
52 | # 修改文件
53 | $ echo "foo">foo
54 | # 提交
55 | $ git commit
56 | # 增加远程库位置
57 | $ git remote add origin flie:///git/repo
58 | # 提交更改
59 | $ git push origin test
60 |
61 | ## 忽略冲突1
62 | 修改远程库.git/config添加下面代码
63 |
64 | [receive]
65 | denyCurrentBranch = ignore
66 |
67 | 这种方式不能直接显示在结果的work tree上,如果要显示,需要使用
68 |
69 | git reset --hard才能看到
70 |
71 | ## 忽略冲突2
72 | 在远程库上
73 |
74 | git config -bool core.bare true
--------------------------------------------------------------------------------
/_posts/tool/2013-02-25-quick-open-in-windows.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: win7快速打开应用程序或文件
4 | category: 工具
5 | tags: Windows
6 | description: windows下打开文件或应用程序经常需要手点,作为键盘控肯定是不能忍受的。之前试过一些软件,设置各个程序的快捷键,但是快捷键可能会有冲突,而且记性不好实在不好用,所以选择使用Win自带的“运行”来加快打开速度
7 | ---
8 |
9 | Win7下打开“运行”的快捷键是 Win+R
10 |
11 | ## 打开系统命令
12 | windows的“运行”功能本来就是帮助用户快速打开程序的,不过其支持的主要是系统的一些程序,大致如下(来自网络,有一部分失效或无法打开):
13 |
14 | 1、cleanmgr: 打开磁盘清理工具
15 | 2、compmgmt.msc: 计算机管理
16 | 3、conf: 启动系统配置实用程序
17 | 4、charmap: 启动字符映射表
18 | 5、calc: 启动计算器
19 | 6、chkdsk.exe: Chkdsk磁盘检查
20 | 7、cmd.exe: CMD命令提示符
21 | 8、certmgr.msc: 证书管理实用程序
22 | 9、Clipbrd: 剪贴板查看器
23 | 10、dvdplay: DVD播放器
24 | 11、diskmgmt.msc: 磁盘管理实用程序
25 | 12、dfrg.msc: 磁盘碎片整理程序
26 | 13、devmgmt.msc: 设备管理器
27 | 14、dxdiag: 检查DirectX信息
28 | 15、dcomcnfg: 打开系统组件服务
29 | 16、explorer: 打开资源管理器
30 | 17、eventvwr: 事件查看器
31 | 18、eudcedit: 造字程序
32 | 19、fsmgmt.msc: 共享文件夹管理器
33 | 20、gpedit.msc: 组策略
34 | 21、iexpress: 工具,系统自带
35 | 22、logoff: 注销命令
36 | 23、lusrmgr.msc: 本机用户和组
37 | 24、MdSched:来启动Windows内存诊断程序
38 | 25、mstsc: 远程桌面连接
39 | 26、Msconfig.exe: 系统配置实用程序
40 | 27、mplayer2: 简易widnows media player
41 | 28、mspaint: 画图板
42 | 29、magnify: 放大镜实用程序
43 | 30、mmc: 打开控制台
44 | 31、mobsync: 同步命令
45 | 32、notepad: 打开记事本
46 | 33、nslookup: 网络管理的工具向导
47 | 34、narrator: 屏幕“讲述人”
48 | 35、netstat : an(TC)命令检查接口
49 | 36、OptionalFeatures:打开“打开或关闭Windows功能”对话框
50 | 37、osk: 打开屏幕键盘
51 | 38、perfmon.msc: 计算机性能监测程序
52 | 39、regedt32: 注册表编辑器
53 | 40、rsop.msc: 组策略结果集
54 | 41、regedit.exe: 注册表
55 | 42、services.msc: 本地服务设置
56 | 43、sysedit: 系统配置编辑器
57 | 44、sigverif: 文件签名验证程序
58 | 45、shrpubw: 创建共享文件夹
59 | 46、secpol.msc: 本地安全策略
60 | 47、syskey: 系统加密
61 | 48、Sndvol: 音量控制程序
62 | 49、sfc.exe: 系统文件检查器
63 | 50、sfc /scannow: windows文件保护(扫描错误并复原)
64 | 51、taskmgr: 任务管理器
65 | 52、utilman: 辅助工具管理器
66 | 53、winver: 检查Windows版本
67 | 54、wmimgmt.msc: 打开windows管理体系结构(WMI)
68 | 55、Wscript.exe: windows脚本宿主设置
69 | 56、write: 写字板
70 | 57、wiaacmgr: 扫描仪和照相机向导
71 | 58、psr:问题步骤记录器
72 | 59、PowerShell:提供强大远程处理能力
73 | 60、colorcpl:颜色管理,配置显示器和打印机等中的色彩。
74 | 61、credwiz:备份或还原储存的用户名和密码
75 | 62、eventvwr:事件查看器管理单元(MMC) ,主要用于查看系统日志等信息。
76 | 63、wuapp:Windows更新管理器,建议设置为更新提醒模式
77 | 64、wf.msc:高级安全Windows防火墙
78 | 65、soundrecorder:录音机,没有录音时间的限制
79 | 66、snippingtool:截图工具,支持无规则截图
80 | 67、slui:Windows激活,查看系统激活信息
81 | 68、sdclt:备份状态与配置,就是查看系统是否已备份
82 | 69、Netplwiz:高级用户帐户控制面板,设置登陆安全相关的选项
83 | 70、msdt:微软支持诊断工具
84 | 71、lpksetup:语言包安装/删除向导,安装向导会提示下载语言包
85 |
86 | 系统自带的很多已经够用了,例如其中的notepad命令,想要直接修改hosts文件(常用)可以直接输入
87 |
88 | notepad %systemroot%\system32\drivers\etc\hosts
89 |
90 | %systemroot%是window内自带的变量,即指向了C:\Windows,其他一些常用变量如:
91 |
92 | %HOMEDRIVE% = C:\ 当前启动的系统的所在分区
93 | %SystemRoot% = C:\WINDOWS 当前启动的系统的所在目录
94 | %windir% = %SystemRoot% = C:\WINDOWS 当前启动的系统的所在目录
95 | %USERPROFILE% = C:\Documents and Settings\sihochina 当前用户数据变量
96 | %HOMEPATH% = C:\Documents and Settings\sihochina 当前用户环境变量
97 | %temp% = %USERPROFILE%\Local Settings\Temp = C:\Documents and Settings\sihochina\Local Settings\Temp 当前用户TEMP缓存变量
98 |
99 | 另外输入盘符可直达相应盘符,文件也是
100 |
101 | d:
102 | d:\application
103 |
104 | ## 自定义命令
105 |
106 | 只有系统的应用程序是不够我们用的,要想增加自己另外安装的程序,可以通过其他手段实现
107 |
108 | ### 方法一:修改环境变量(不推荐)
109 |
110 | 经常使用cmd命令的同学应该明白,放在环境变量中的文件夹下的应用程序,可以在任何位置直接运行,因为环境变量是windows搜索应用程序的路径,直接放在环境变量下文件夹中的应用程序可以直接运行。
111 |
112 | 1. 计算机(右键)-》属性-》高级系统设置-》环境变量
113 | 2. 修改PATH值,在其后增加相应路径,用‘;’隔开
114 |
115 | 之所以不推荐是因为环境变量如果设太多,一是管理不便,二又会拖慢应用程序打开速度。
116 |
117 | ### 方式二:快捷方式(推荐)
118 |
119 | 这种方式和第一种类似,但是不是修改环境变量,而是往已有的环境变量中增加应用程序的快捷方式
120 |
121 | 1. 右键应用程序-》发送到桌面快捷方式
122 | 2. 修改名字为想要打开的命令
123 | 3. 移动快捷方式到已有环境变量中,如C:\windows下
124 |
125 | ### 方式三:注册表方式(不推荐)
126 |
127 | 修改注册表实现,太繁琐,不容易控制
128 |
129 | ### 方式四:软件方式(推荐)
130 |
131 | 有一些软件可以帮助建立这样的命令,具体方式因软件而异,但是它们会把功能做的比较人性化,如可以实现增加、更新、删除等
132 |
133 | 魔方有这个功能,我用的就是这个
134 |
135 | 打开魔方-》优化设置大师-》系统设置-》快捷命令
136 |
--------------------------------------------------------------------------------
/_posts/tool/2013-03-25-open-tcp-port-of-libvirt.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Linux下开启Libvirtd的tcp监控
4 | category: 工具
5 | tags: Linux
6 | description: 在开发OpenStack时,涉及到远程操作Libvirt,这个时候必须打开远程TCP端口才能正常操作
7 | ---
8 |
9 | 使用virsh连接到别的服务器时,使用的是tcp连接
10 |
11 | virsh -c qemu+tcp://host/system
12 |
13 | 如果目标服务器没有开启libvirtd的tcp端口监听时,会出现
14 |
15 | error: unable to connect to server at 'host:16509': Connection refused
16 | error: failed to connect to the hypervisor
17 |
18 | ## ubuntu下解决方法
19 |
20 | sed -i 's/#listen_tls = 0/listen_tls = 0/g' /etc/libvirt/libvirtd.conf
21 | sed -i 's/#listen_tcp = 1/listen_tcp = 1/g' /etc/libvirt/libvirtd.conf
22 | sed -i 's/#auth_tcp = "sasl"/auth_tcp = "none"/g' /etc/libvirt/libvirtd.conf
23 |
24 | vi /etc/default/libvirt-bin
25 | 修改为libvirt_opts = "-d -l"
26 | 增加-l监听tcp
27 |
28 | service libvirt-bin restart
29 |
30 | ## centos下解决方法
31 |
32 | sed -i 's/#listen_tls = 0/listen_tls = 0/g' /etc/libvirt/libvirtd.conf
33 | sed -i 's/#listen_tcp = 1/listen_tcp = 1/g' /etc/libvirt/libvirtd.conf
34 | sed -i 's/#auth_tcp = "sasl"/auth_tcp = "none"/g' /etc/libvirt/libvirtd.conf
35 | sed -i 's/#LIBVIRTD_ARGS="--listen"/LIBVIRTD_ARGS="--listen"/g' /etc/sysconfig/libvirtd
36 |
37 | service libvirtd restart
--------------------------------------------------------------------------------
/_posts/tool/2013-03-25-tools-of-sever-deployment.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 服务器自动化部署及运维常见工具
4 | category: 工具
5 | tags: Linux
6 | description: 服务器自动化部署时,应用适当的工具,可以大大减轻工作量
7 | ---
8 |
9 | ## Cobbler
10 |
11 | Cobbler是一个Linux的安装服务,它可以在网络环境下迅速安装。它可以将众多Linux任务关连在一起,这样在你安装或修改系统时,就可以不必在众多命令和应用程序之间切换了。
12 |
13 | 随着一系列简单的命令,可以配置网络安装PXE(Preboot Execute Environment)、重新安装、基于媒体的网络安装和虚拟化安装(支持Xen、qemu、KVM、和一些类型的VMware)。Cobbler使用一个叫做'koan'(和Cobbler交互)的程序来重新安装及虚拟化支持。
14 |
15 | Cobbler是一个轻量级的应用程序(只有1.5万行Python代码)。它试图在小型和大型安装时都非常简单易用,而且容易工作、扩展和阅读。它避免成为"企业级"(像那么复杂),但是它又拥有众多优秀的功能,非常适合在各种企业环境中使用,在重复性工作中节省大量的时间。
16 |
17 | Cobbler可以选择性的帮助管理DHCP、DNS和yum包镜像基础设施,再者方面,它是一个更广义的自动化应用程序,而不仅仅只是处理配置。它还有一个轻量级的内置配置管理系统,以及整合与配置管理系统,像Puppet一样。Cobbler有一个命令行界面,一个网络界面,和许多用来访问配置的API。
18 |
19 | ## Puppet
20 |
21 | puppet是一种Linux、Unix平台的集中配置管理系统,使用ruby语言,可管理配置文件、用户、cron任务、软件包、系统服务等。puppet把这些系统实体称之为资源,puppet的设计目标是简化对这些资源的管理以及妥善处理资源间的依赖关系。
22 |
23 | Puppet是一个C/S架构的配置管理工具,在中央服务器上安装puppet-server软件包(被称作Puppet master)。在需要管理的目标主机上安装puppet客户端软件(被称作Puppet Client)。当客户端连接上Puppet master后,定义在Puppet master上的配置文件会被编译,然后在客户端上运行。每个客户端默认每半个小时和服务器进行一次通信,确认配置信息的更新情况。如果有新的配置信息或者配置信息已经改变,配置将会被重新编译并发布到各客户端执行。也可以在服务器上主动触发一个配置信息的更新,强制各客户端进行配置。如果客户端的配置信息被改变了,它可以从服务器获得原始配置进行校正。
24 |
25 | ## FUNC
26 |
27 | func全称 Fedora Unified Network Controller ,主要用在Radhat, Fedora,OpenSuse,Centos系列系统上由一个server管理任意台服务器的工具,建立了Master-Slaves 主从SSL证书管控体系,可以将证书自动分发到所有受控服务.func直接发送远程命令或者远程获取数据,但是只适用于一些常用功能的模块的操作,实现其它功能需要自己写Python API,个人认为没有使用比较适当的”for do done”循环程序效果明确和方便.
--------------------------------------------------------------------------------
/_posts/tool/2013-04-21-add-snippet.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 给sublime增加snippet
4 | category: 工具
5 | tags: Sublime
6 | description: 总有时候有一些不是很大的代码段需要重复输入,利用sublime中的snippet可以方便很多
7 | ---
8 |
9 | ### 创建
10 | 点击菜单栏Tools ==> New Snippet打开一个snippet模板文件
11 |
12 | - ` `部分是片段输入内容
13 |
14 | - `p `部分是触发此片段的字符,此处为`p`触发
15 |
16 | - `text.html `部分是此片段可用范围,此处为html文件中可用
17 |
18 | 完整例子:
19 |
20 |
21 |
23 | $1
24 |
25 | ]]>
26 | p
27 | text.html
28 |
29 |
30 | ### 保存
31 |
32 | 最后保存文件为.sublime-snippet格式,保存在用户配置目录下
33 |
34 | Mac OS X:/Users/yourname/Library/Application Support/Sublime Text 2/Packages/User
35 |
36 | 另外,`source.css `是css文件可用
37 |
38 | ### 参考
39 | [参考](http://www.granneman.com/webdev/editors/sublime-text/top-features-of-sublime-text/quickly-insert-text-and-code-with-sublime-text-snippets/)
--------------------------------------------------------------------------------
/_posts/tool/2013-04-22-add-svn-ignore-file.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 给SVN控制的项目添加忽略文件/文件夹
4 | category: 工具
5 | tags: SVN
6 | description: 因为使用SAE,所以有些项目用SVN来控制,使用时难免有些临时文件生成,每次提交时都得先删除临时文件再提交,设置一下忽略目录就可以方便很多
7 | ---
8 |
9 | 忽略目录其实有些像建立一个文件夹,但却不放入版本控制。如果不加入版本控制又会在`svn status`命令中显示出来,很不方便,所以可以设置本文件夹属性,让它既加入版本控制,又忽略其变化
10 |
11 | ### 未加入控制的文件夹
12 |
13 | svn propset svn:ignore 'test' .
14 | svn update
15 | svn commit -m "add a ignore dir"
16 |
17 | ### 已经加入版本控制的文件夹
18 |
19 | svn export test test_bak
20 | svn rm test
21 | svn commit -m "delete test"
22 | mv test_bak test
23 | svn propset svn:ignore 'test' .
24 | svn update
25 | svn commit -m "add a ignore dir"
26 |
27 | 如果想要忽略一个目录下多个文件夹的话,需要有一点点技巧,如下
28 |
29 | svn propset svn:ignore 'test
30 | test1
31 | test2' .
32 |
33 | 即每一个文件夹要单独另起一行
--------------------------------------------------------------------------------
/_posts/tool/2013-04-22-highlight-of-jekyll.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Jekyll的中的代码高亮
4 | category: 工具
5 | tags: Jekyll
6 | description: 在这个博客里,我使用了bootstrap作为前端框架,另外通过比较选择了一个还算满意的代码高亮方式
7 | ---
8 |
9 | ### 代码高亮方式选择
10 |
11 | #### 1.小片段
12 |
13 | 直接使用“ \` ”符号包含起来,或者使用一个tab直接利用markdown来做高亮
14 |
15 | #### 2.Pygments渲染
16 |
17 | Jekyll通过[Pygments](http://pygments.org/)可以直接处理代码高亮
18 |
19 | 在Github Pages的[文档](https://github.com/mojombo/jekyll/wiki/Liquid-Extensions)里,也提到了这个方式,但是总觉得这样有点不是很舒服,打破了markdown的格式
20 |
21 | #### 3.gist嵌入方式
22 |
23 | 这个[方式](https://gist.github.com/imathis/1027674)使用了一个插件,而且gist也得管理,增大了开销……
24 |
25 | #### 4.js和css处理
26 |
27 | 这个方式使用了[google-code-prettify](https://code.google.com/p/google-code-prettify/)来渲染代码高亮,本身库并不是很大,使用方便,最后我也选择了这个
28 |
29 | ### Prettify使用
30 |
31 | #### 1.下载代码
32 |
33 | 直接到[google-code-prettify](https://code.google.com/p/google-code-prettify/)官网下载代码,然后将它们放到项目下
34 |
35 | #### 2.包含css和js
36 |
37 | 官网提到了可以直接包含run_prettify.js的方式,这个会导入远程库,我选择了自己导入,如下
38 |
39 |
40 |
41 |
47 |
48 | 这里导入了css和js后,就可以直接用markdown的tab的方式来导入代码段了
49 |
50 | #### 3.更换主题
51 | 默认主题不是很好看,只要更换prettify.css即可更换样式,可以到[这里](http://google-code-prettify.googlecode.com/svn/trunk/styles/index.html)下载自己喜欢的主题css即可
--------------------------------------------------------------------------------
/_posts/tool/2013-04-22-ignore-password-in-git-push.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 让git push命令不再需要密码
4 | category: 工具
5 | tags: Git
6 | description: 使用git push命令远程提交库时,总是要输入帐号和密码,这样特别麻烦,找了一个方法解决掉
7 | ---
8 |
9 | 最近利用jekyll写博客,为的就是博客管理方便,但是在上传博客的时候使用`git push`命令每次都得输入github帐号和密码特别的不方便,于是就搜了一下。
10 |
11 | 在[这篇](https://blog.lowstz.org/posts/2011/11/23/why-git-push-require-username-password-github/)文章里提到,GitHub获得远程库时,有ssh方式和https方式。
12 |
13 | 
14 | 
15 |
16 | 两个方式的url地址不同,认证方式也不同。使用ssh时保存密钥对以后可以不再输入帐号密码,而https却不能。所以如果想要不再输入帐号密码,一种方式就是在git clone的时候使用ssh方式,另一种方式就是去修改已有项目.git目录下的config文件中的url,如下:
17 |
18 | [remote "origin"]
19 | url = git@github.com:suyan/suyan.github.io.git
20 | fetch = +refs/heads/*:refs/remotes/origin/*
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/_posts/tool/2013-05-20-set-proxy-for-git-or-apt.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 给Git或者APT设置goagent代理
4 | category: 工具
5 | tags: Git
6 | description: 最近使用git从github上clone代码,总是失败,奔溃了快。还有ubuntu连apt-get update都执行不了,有的时候都装不了git,就快骂娘了。可惜在这样一个环境下,只能靠自己搞定了,设置代理是比较好的方式
7 | ---
8 |
9 | ## 安装goagent
10 | 这个教程网上很多,放狗一搜即可。
11 |
12 | 不过网上goagent教程里讲的大部分是给浏览器用的。其实goagent是监听了本地的8087端口,其实任何程序都可以利用这个端口,只要设置好即可。
13 |
14 | ## 设置git代理
15 | 直接在终端输入
16 |
17 | export https_proxy="127.0.0.1:8087"
18 | export http_proxy="127.0.0.1:8087"
19 | git config --global http.sslVerify false
20 |
21 | 这样`git clone`就是走代理了,其实这个设置完以后apt-get的操作也是通过代理的了
22 |
23 | ## 设置apt-get代理
24 | 上面的方法也可以直接使apt代理,如果不想设置环境变量,可以使用下面命令
25 |
26 | sudo apt-get -o Acquire::http::proxy="http://127.0.0.1:8087/" update
27 |
28 |
--------------------------------------------------------------------------------
/_posts/tool/2013-05-22-change-to-zsh.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 从Bash切换到Zsh
4 | category: 工具
5 | tags: Mac
6 | description: Zsh在使用一段时间以后,确实是不错,这个过程逐渐完善吧
7 | ---
8 |
9 | ## 安装Zsh
10 | 我在mac下,使用`port install zsh`就好了,因为mac自带的Zsh比较老,然后使用`chsh -s /opt/local/bin/zsh`搞定
11 |
12 | ## 安装Zsh配置文件
13 | 克隆配置
14 |
15 | git clone git://github.com/sjl/oh-my-zsh.git ~/.oh-my-zsh
16 |
17 | 移动到根目录
18 |
19 | cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc
20 |
21 | ## 使用Zsh
22 | [使用Zsh的九个理由](http://lostjs.com/2012/09/27/zsh/)写了Zsh最令人激动的理由
23 |
--------------------------------------------------------------------------------
/_posts/tool/2013-05-23-install-mysql-and-mongo-web-admin.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 安装MySQL和MongoDB的WEB管理界面
4 | category: 工具
5 | tags: [Linux , MySQL , MongoDB]
6 | keywords: Linux,MySQL,MongoDB
7 | description: 在服务器上操作mysql和mongo时,还是有个界面比较直观,对自己的手好一点
8 | ---
9 | ## MySQL管理界面
10 | 这个没多少选择,大部分人都安装的是phpmyadmin,而且简单方便,在ubuntu下,只要
11 |
12 | apt-get install phpmyadmin
13 |
14 | 设置也不需要,只要在安装过程中输入mysql密码即可,访问`http://localhost/phpmyadmin`即可
15 |
16 | ## MongoDB管理界面
17 | MongoDB的工具还比较多,没有一个能够统一全部工具的,不过推荐使用RockMongo,这个工具确实速度很快,而且很顺手,支持中文
18 |
19 | 到[RockMongo](http://rockmongo.com/wiki/introduction?lang=zh_cn)下载安装包
20 |
21 | 如果Apache有根目录,移动到根目录下,否则自己建立一个`/etc/apache2/conf.d/rockmongo.conf`,写入
22 |
23 | Alias /rockmongo /var/www/rockmongo
24 |
25 | Options FollowSymLinks
26 | DirectoryIndex index.php
27 |
28 |
29 | 然后要安装php-mongo模块
30 |
31 | apt-get install php5-mongo
32 |
33 | 修改php配置文件
34 |
35 | echo "extension=mongo.so" >> /etc/php5/apache2/php.ini
36 |
37 | 然后访问`http://localhost/rockmongo`即可,帐号密码都是admin
--------------------------------------------------------------------------------
/_posts/tool/2013-08-04-something-about-tools-i-used.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 我与工具
4 | category: 工具
5 | tags: Tool
6 | keywords: 工具,Tool
7 | description: 总喜欢折腾各种各样的工具来找到最适合自己的,最后发现好工具是不需要折腾的
8 | ---
9 |
10 | “工欲善其事,必先利其器”---XXX
11 |
12 | 作为一个标准的工科男,我对于自己使用的工具的追求还是比较严格的,一直都希望自己使用的工具按自己的标准去工作,并且是最顺手的
13 |
14 | 编辑器作为一个IT男的标配,从Vim,Emacs到各种IDE,一直有着持续不断的月经战
15 |
16 | 自己也曾经捣鼓过Vim和Emacs,可以说过程是心酸的,结果更是心酸的
17 |
18 | 喜欢Vim即开即用的速度,又喜欢Emacs灵便的快捷键,速度和功能似乎从来都是背向而行的,而且都有个共性问题,配置复杂(追求各种自定义),而且还不能同步在不同的机器上
19 |
20 | 直到我遇到了Sublime,我惊讶于它不仅简单易用,而且各个部分都特别的人性化。它就如它的名字那样绚丽
21 |
22 | 我把它的快捷键改成了类emacs的(本来在mac上编辑器快捷键就挺像emacs),也没多花多大功夫,而且直接从以前win平台把setting-user拷贝过来就可以了。它统一使用json格式来配置功能,非常易用。
23 |
24 | 除了编辑器外,还有各种各样的软件和工具,我都曾自己折腾过。直到最后出来一个对的上口味的软件,终结了我之前所有做过的自定义
25 |
26 | 工具本身是用来提升自己工作的效率的,更多的精力应该放在工作上。好的工具不需要太多修改就可以方便使用,当一个工具难用到爆的时候,绝对会有颠覆着出现
27 |
28 | 这个话题似乎能写不少东西,把我折腾过的软件都一一列举一下
--------------------------------------------------------------------------------
/_posts/tool/2013-08-06-tools-of-reading.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 我与工具--阅读和知识管理
4 | category: 工具
5 | tags: Tool
6 | keywords: 阅读,知识管理,工具
7 | description: 每天都会花很多时间用来处理订阅的RSS、微博、微信等消息,选择合适的工具可以帮助提升阅读效率
8 | ---
9 |
10 | ## 1. 信息来源
11 | 在这个信息爆炸的时代,我们阅读的来源实在太多了,以至于超过了我们能处理的极限。很好的筛选信息是很重要的,只阅读对自己当前最重要的文章。
12 |
13 | ### Feedly
14 | Feedly 不用多说,作为 Google Reader 的替代者,功能上来说基本都满足了订阅RSS阅读的需求。为了筛选内容,可以考虑只读阅读人数多的文章。
15 |
16 | RSS订阅包括了一些个人博客、媒体,比如:
17 |
18 | - V2EX
19 | - Hacker News 50
20 | - Techmeme
21 | - 36Kr
22 | - 虎嗅
23 |
24 | ### Twitter
25 | Twitter 上关注了挺多开发者和科技媒体,偶尔关注一下最新动态。
26 |
27 | ### 知乎日报
28 | 每天一些精选内容,挑感兴趣的读一下。
29 |
30 | ### 微信
31 | 微信上公众帐号经常有不错的文章,值得阅读。
32 |
33 | 微信公众帐号虽然关注了挺多,但是其实最后也只看这么几个人的:
34 |
35 | - 小道消息
36 | - 道哥的黑板报
37 | - MacTalk By 池建强
38 | - 人生如戏
39 | - 鬼脚七
40 |
41 | ## 2. 稍后读
42 | 稍后读工具之前还在用信息源的收藏,后来发现那些收藏既不容易翻阅,又不容易搜索,所以后来统一到了一个软件下。
43 |
44 | ### Pocket
45 | Pocket 拥有比较广的支持,例如 Feedly, Twitter 和知乎日报都支持了 Pocket 收藏。只有微信不支持,不过没有关系,微信里点在 Safari 中打开,然后分享到 Pocket 即可。
46 |
47 | ## 3. 信息归档
48 | 稍后读的最大问题就是 Read It Never。不过这个没有问题,本来我们要做的也是阅读 or 归档。由于信息实在太多,有些内容又不是想现在读,合理的归档可以有助于以后再搜索。不过我们必须保证 Pocket 的尽量简洁,每天晚上尽量将今天收藏的文章归档。
49 |
50 | ### Evernote
51 | Evernote 是我发现当前的最佳归档工具。它的检索非常快,而且网页版插件也非常好用。
52 |
53 |
--------------------------------------------------------------------------------
/_posts/tool/2013-08-28-change-bootstrap-to-3.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 更新前端框架到Bootstrap3
4 | category: 工具
5 | tags: Blog
6 | keywords: Bootstrap
7 | description: Bootstrap3正式版出来几天了,考虑更新完全没影响,就抽空升级一下
8 | ---
9 |
10 | Bootstrap3出来大概有几天时间了,据说他们宣称这个版本是移动优先,而且还把控件给排扁了。
11 |
12 | 前几天稍微看了一下他们的[新文档](http://getbootstrap.com),感觉确实变化挺多,但是对于熟悉第二版的开发这者来说,稍微看一下基本就了解了。这个框架使用的人真的是奇多,正式版刚发布的那天就有人提醒我,我github上头一个基于Bootstrap的自动提醒控件应该升级成v3的了,而且还给我发来了代码,这效率……
13 |
14 | 这个博客当初是决定了以后常用的,所以代码和文件布置的还算合理,从v2升级到v3基本不费什么功夫。就是换一下css和js,改改class的事情。总共时间1个小时吧,加上写这个总结,接下来说说主要关心修改什么内容。
15 |
16 | ### 1.bootstrap文件更新
17 |
18 | 看一下新的bootstrap文件
19 |
20 | .
21 | ├── css
22 | │ ├── bootstrap.css
23 | │ └── bootstrap.min.css
24 | ├── fonts
25 | │ ├── glyphicons-halflings-regular.eot
26 | │ ├── glyphicons-halflings-regular.svg
27 | │ ├── glyphicons-halflings-regular.ttf
28 | │ └── glyphicons-halflings-regular.woff
29 | └── js
30 | ├── bootstrap.js
31 | └── bootstrap.min.js
32 |
33 | css和js还是老样子,只要覆盖原来的就行了,这里关键说一下fonts里头的东西。
34 |
35 | 以前版本里面,图标都是真的图片做成的,他们都被集合在之前的glyphicon-halflings.png里头,用哪个根据图片位置相对显示哪个。这种方式导致的问题就是在分辨率变法的时候,图片要么失真要么显示有问题,尤其是retina屏下头。
36 |
37 | 这个问题在v2阶段就有解决办法,只不过不是官方发布的,而是由[Font Awesome](http://fortawesome.github.io/Font-Awesome/)提供了基于字体的图标,这样形成的图标是矢量图,可以面对各种各样的分辨率。我找到一个对它进行分析的文章,链接[在此](http://www.cnblogs.com/zhengenru2008/archive/2013/04/12/3016659.html)。
38 |
39 | 现在v3版本里面也有了类似的解决方案,对我来说用原来的就行,没有影响。
40 |
41 | ### 2.网格布局修改
42 |
43 | 网格布局由原来的`span`变成了现在超级难看的`col-xx-xx`,而且看起来不那么简约时尚国际范了。不过稍微细读一下文档会发现,这种略微复杂的控制方式,反而对响应式布局的控制变得非常精细,妈妈再也不用担心分辨率改了以后还得修改css文件了!
44 |
45 | 通过``类似这样的并列方式,就可以控制不同分辨率下控件的现实形式。对我来说没啥作用,因为默认的布局方式就够用了,直接把`span`都换成`col-md`,搞定!
46 |
47 | 这里我用md是因为我这个博客页面不是很丰富,太宽不好看,而且我还把bootstrap.css下1200那个最大值给调成了2000。也就是说,你想看到col-lg的布局,得屏幕分辨率达到2000xXXX以上了……
48 |
49 | ### 3.控件修改
50 |
51 | 这里大概用了一些简单的控件,比如右边的affix,以及顶上的navbar,还有下面的pagination,还有分类页面的collapse。变化仅仅是改了一下class的名字,逐个击破就好了
52 |
53 | ### 4.一些想法
54 |
55 | Bootstrap的出现,一定程度上统一了前端杂乱的氛围,简化了开发流程,降低了开发难度,简直就是老少皆宜。对于不是做前端,却要偶尔写前端的孩纸,指明了一条道路。对于做前端的开发者来说,又有了一个较为标准化的学习对象,可以加快学习速度,少走一些弯路。
56 |
57 | 现在阅读字体和风格都不怎么舒服,待优化,下次再弄吧。
58 |
59 |
60 |
61 |
62 |
63 |
--------------------------------------------------------------------------------
/_posts/tool/2013-12-08-linux-command-continue.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Linux下多个命令连续执行方法
4 | category: 工具
5 | tags: Linux
6 | keywords: Linux,连续,命令
7 | description:
8 | ---
9 |
10 | >有的时候执行一些简单指令的时候总不想分好几次输入,利用以下方法可以方便的一次执行多个命令
11 |
12 | ### 连续不中断执行
13 |
14 | 用`;`可以让多个命令连续知行,中间出现错误并不会中断后面命令,如
15 |
16 | mkdir test; mkdir test; rmdir test;
17 |
18 | 虽然第二条指令会报错,但是不会影响后面的指令,最后test目录不存在
19 |
20 | ### 出错停止后面指令
21 |
22 | 用`&&`分割的命令,如果没有错误会一直执行下去,出现错误立即中止,如
23 |
24 | mkdir test && mkdir test && rmdir test
25 |
26 | 这回在第二个指令处就中止了
27 |
28 | ### 一次正确即停止
29 |
30 | 用`||`分割的命令,如果有错误就一直执行下去,直到一次正确立即中止,如
31 |
32 | mkdir test || mkdir test || rmdir test
33 | mkdir test || mkdir test || rmdir test || mkdir test
34 |
35 | 第一次执行第一条指令就正确,后面的不执行
36 |
37 | 第二次执行前两条都错误,直到最后一条才正确,最后一条不再执行
--------------------------------------------------------------------------------
/_posts/tool/2013-12-11-deploy-pptp-vpn-in-ubuntu.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 在ubuntu下搭建pptp vpn服务器
4 | category: 工具
5 | tags: Linux
6 | keywords: Linux,pptp,vpn
7 | ---
8 |
9 | >最近弄了digitalocean的vps,研究了一下搭建一个vpn自己用,因为有些系统代理goagent还是搞不定。但是事实证明digitalocean线路还是很不稳,基本上没啥帮助=0=
10 |
11 | ## pptp配置
12 |
13 | ### 安装pptp
14 | 用ubuntu就是安装东西快
15 |
16 | sudo apt-get -y update
17 | sudo apt-get -y install pptpd
18 |
19 | ### 修改配置脚本
20 | 配置一下dns
21 |
22 | cat >/etc/ppp/options.pptpd <
/etc/pptpd.conf <> /etc/sysctl.conf < /etc/iptables.down.rules
76 |
77 | 修改iptable NAT转发
78 |
79 | iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth0 -j MASQUERADE
80 |
81 | 设置MTU
82 |
83 | iptables -I FORWARD -s 192.168.2.0/24 -p tcp --syn -i ppp+ -j TCPMSS --set-mss 1300
84 |
85 | 保存新iptables
86 |
87 | iptables-save > /etc/iptables.up.rules
88 |
89 | 重启后继续有效
90 |
91 | cat >>/etc/ppp/pptpd-options</etc/ppp/chap-secrets < xdebug是php调试的好帮手,sublime是php编写的好帮手。这里只说如何配置,默认读者会用sublime和xdebug
11 |
12 | ## 安装xdebug
13 | 在mac下非常方便:
14 |
15 | brew install php55-xdebug
16 |
17 | 然后进行配置,在`/usr/local/etc/php/5.5/conf.d/ext-xdebug.ini`中添加
18 |
19 | xdebug.remote_enable=1
20 | xdebug.remote_handler=dbgp
21 | xdebug.remote_host=127.0.0.1
22 | xdebug.remote_port=9000
23 | xdebug.remote_log="/var/log/xdebug/xdebug.log"
24 |
25 | 重启apache
26 |
27 | sudo apachectl restart
28 |
29 | ## 配置sublime
30 | 要调试某一个项目,首先得把这个项目在sublime下保存成一个project
31 |
32 | sublime->project->save project as ...
33 |
34 | 然后用[package control](https://sublime.wbond.net/installation)安装`xdebug client`
35 |
36 | 接下来配置项目
37 |
38 | sublime->project->edit poject
39 |
40 | 配置文件类似以下内容:
41 |
42 | {
43 | "folders":
44 | [
45 | {
46 | "follow_symlinks": true,
47 | "path": "."
48 | }
49 | ],
50 | "settings": {
51 | "xdebug": {
52 | "url": "http://my.local.website/",
53 | }
54 | }
55 | }
56 |
57 | 其中url是项目所在url,记得在hosts里头将这个url指向127.0.0.1,还有在apache的virtualhost里将其指向项目根目录
58 |
59 | 这样就OK了,准备开启调试吧
60 |
61 | ## 开启调试
62 | 开启调试方式也比较简单,在想要加断点的地方右键
63 |
64 | xdebug->Add/Remove breakpoint
65 |
66 | 这样项目在运行到本行的时候就会停止下来
67 |
68 | 然后开始调试,在菜单栏选择
69 |
70 | tools->xdebug->start debugging(launch browser)
71 |
72 | sublime会自动打开浏览器,进入配置时写的网站链接,进行调试
73 |
74 | 调试中所用的功能可以在调试文件中右键查看之
75 |
76 | ## 可能问题
77 |
78 | ### 无法跟踪断点
79 | 这可能是xdebug端口被占用,按Ctrl+`或者菜单栏View->show Console查看错误信息,有可能是xdebug端口已经被占用的缘故。
80 |
81 | 在sublime xdebug中关闭调试,或者重启sublime可以解决这个问题。
82 |
83 | ## 参考
84 | 1. [Debugging with Xdebug and Sublime Text 3](http://www.sitepoint.com/debugging-xdebug-sublime-text-3/)
85 |
86 |
87 |
88 |
--------------------------------------------------------------------------------
/_posts/tool/2014-04-10-install-docker-in-mac.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 在Mac下安装使用Docker
4 | category: 工具
5 | tags: [Mac, Docker]
6 | keywords: Mac,Docker
7 | description:
8 | ---
9 |
10 | ## 安装
11 | Docker暂时并不支持原生的Mac系统,所以Mac下的Docker实际上是依赖一个很小的linux虚拟机来实现的。
12 |
13 | ### 安装Virtualbox
14 | Vagrant依赖现有的虚拟机软件来管理虚拟机,如Virtualbox, Vmware Fusion, Parallel Desktop等,其中最方便的是VirtualBox,所以我选择了Virtualbox。
15 |
16 | 下载地址在[https://www.virtualbox.org/wiki/Downloads](https://www.virtualbox.org/wiki/Downloads)。下载好后直接安装。
17 |
18 | ### 安装Boot2Docker
19 | [Boot2Docker](https://github.com/boot2docker/boot2docker)是帮助控制虚拟机中Docker的工具,它会下载一个安装好docker的虚拟机,并控制其实现docker功能。
20 |
21 | 在mac下安装boot2docker只要执行
22 |
23 | brew install boot2docker
24 |
25 | 即可。
26 |
27 | ### 安装docker client
28 | 要想在mac下直接执行docker命令,需要安装一个适合mac的docker client,安装方法如下
29 |
30 | # Get the docker client file
31 | DIR=$(mktemp -d ${TMPDIR:-/tmp}/dockerdl.XXXXXXX) && \
32 | curl -f -o $DIR/ld.tgz https://get.docker.io/builds/Darwin/x86_64/docker-latest.tgz && \
33 | gunzip $DIR/ld.tgz && \
34 | tar xvf $DIR/ld.tar -C $DIR/ && \
35 | cp $DIR/usr/local/bin/docker ./docker
36 |
37 | # Set the environment variable for the docker daemon
38 | export DOCKER_HOST=tcp://127.0.0.1:4243
39 |
40 | # Copy the executable file
41 | sudo cp docker /usr/local/bin/
42 |
43 | 这样就有一个docker命令了
44 |
45 | ## 使用
46 | 使用docker安装需要先启动boot2docker虚拟机
47 |
48 | # Initiate the VM
49 | boot2docker init
50 |
51 | # Run the VM (the docker daemon)
52 | boot2docker up
53 |
54 | # To see all available commands:
55 | boot2docker
56 |
57 | 之后就可以使用docker命令了
58 |
59 | docker version
60 |
61 | ## 参考
62 |
63 | 1. [How To Install Docker On Mac OS X](http://docs.docker.io/en/latest/installation/mac/)
64 | 2. [boot2docker](https://github.com/boot2docker/boot2docker)
--------------------------------------------------------------------------------
/_posts/tool/2014-04-10-install-vagrant-in-mac.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 在Mac下安装使用Vagrant
4 | category: 工具
5 | tags: [Mac, Vagrant]
6 | keywords: Mac,Vagrant
7 | description:
8 | ---
9 |
10 | > Vagrant是一款用来构建虚拟开发环境的工具,它其实算是一个跨平台的虚拟机管理工具。
11 |
12 | ## 安装
13 |
14 | ### 安装Vagrant
15 | Vagrant的旧版本是可以通过gem来安装的,但是由于依赖实在太多,官方放弃了这种安装方式,建议下载官方安装包来安装。
16 |
17 | 下载地址在[http://www.vagrantup.com/downloads](http://www.vagrantup.com/downloads)。下载好pkg包后,点击安装即可。
18 |
19 | ### 安装Virtualbox
20 | Vagrant依赖现有的虚拟机软件来管理虚拟机,如Virtualbox, Vmware Fusion, Parallel Desktop等,其中最方便的是VirtualBox,所以我选择了Virtualbox。
21 |
22 | 下载地址在[https://www.virtualbox.org/wiki/Downloads](https://www.virtualbox.org/wiki/Downloads)。同样下载好后直接安装。
23 |
24 | ## 使用
25 |
26 | ### 下载启动Box
27 | 在Vagrant中,box是一种打包好的镜像,通过这个镜像,可以生成相应的虚拟机。box可以通过[官方网站](http://www.vagrantbox.es/)下载,也可以自己制作,在团队内分享。
28 |
29 | 官方的Box可以在创建时自动下载。例如以下步骤
30 |
31 | cd ~/Documents/Vagrant/Ubuntu # 进入一个vagrant虚拟机目录,一个目录管理一个虚拟机
32 | vagrant init hashicorp/precise32 # 创建一个ubuntu的虚拟机
33 | vagrant up # 启动这个虚拟机
34 |
35 | 通过这个步骤,vagrant会去box列表中找`hashicorp/precise32`这个镜像,如果没有就去官方下载。Box被保存在`~/.vagrant`下。通过命令
36 |
37 | vagrant box list
38 |
39 | 可以查看已经下载的box。如果想以这个box再建立一个虚拟机,只要再创建一个目录,例如`~/Documents/Vagrant/Ubuntu32`,然后执行
40 |
41 | vagrant init hashicorp/precise32
42 |
43 | 即可。
44 |
45 | ### 操作虚拟机
46 | 操作虚拟机时,必须进入刚刚建立的目录中去,这个目录中必须含有`init`命令建立的Vagrantfile文件。常用命令有
47 |
48 | $ vagrant init # 初始化
49 | $ vagrant up # 启动虚拟机
50 | $ vagrant halt # 关闭虚拟机
51 | $ vagrant reload # 重启虚拟机
52 | $ vagrant ssh # SSH 至虚拟机
53 | $ vagrant status # 查看虚拟机运行状态
54 | $ vagrant destroy # 销毁当前虚拟机
55 |
56 | ### 共享文件夹
57 | 通过Vagrant建立的虚拟机和Mac共享文件非常容易,虚拟机中`/vagrant`目录会映射到我们本地虚拟机目录中。例如
58 |
59 | cd ~/Documents/Vagrant/Ubuntu
60 | vagrant up
61 | vagrant ssh
62 | cd /vagrant
63 | ls
64 |
65 | 这个时候,我们会看到,这里显示的文件和`~/Documents/Vagrant/Ubuntu`下是一样的。
66 |
67 | ### 共享Box
68 | 如果只有上述功能的话,那么Vagrant的作用就不是那么`杀手级`了。通过命令
69 |
70 | vagrant package
71 |
72 | 可以将一个虚拟机打包成Box,供别人使用。别人只要用打包的box来创建一个虚拟机即可,例如
73 |
74 | vagrant box add myubuntu ~/Documents/Vagrant/Ubunutu/ubunut.box
75 |
76 | ## 参考
77 |
78 | 1. [Vagrant Docs](http://docs.vagrantup.com/v2/)
79 | 2. [使用 Vagrant 打造跨平台开发环境](http://blog.segmentfault.com/fenbox/1190000000264347)
80 |
--------------------------------------------------------------------------------
/_posts/tool/2016-01-27-ssh-mac.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 在Mac下使用多个SSH key
4 | category: 工具
5 | tags: [Mac, SSH]
6 | keywords: Mac,SSH
7 | description: Mac多个github帐号的SSH key切换
8 | ---
9 |
10 | 如今克隆Github上项目,可以使用`Https` `SSH`两种方式。使用https url克隆对初学者来说会比较方便,复制https url 然后到 git Bash 里面直接用clone命令克隆到本地就好了。而使用 SSH url 克隆却需要在克隆之前先配置和添加好 SSH key 。因此,如果你想要使用 SSH url 克隆的话,你必须是这个项目的拥有者。否则你是无法添加 SSH key 的。以下是两者的区别:
11 |
12 | 1. 前者可以随意克隆github上的项目,而不管是谁的;而后者则是你必须是你要克隆的项目的拥有者或管理员,且需要先添加 **SSH key** ,否则无法克隆。
13 |
14 | 2. https url 在push的时候是需要验证用户名和密码的;而 SSH 在push的时候,是不需要输入用户名的,如果配置SSH key的时候设置了密码,则需要输入密码的,否则直接是不需要输入密码的。
15 |
16 | 对于如何添加SSH key,早前在[如何设置添加SSH](http://www.jeffjade.com/2015/06/26/2015-06-26-ssh-setting/)有过记载。
17 |
18 | 但我们需要更改的Github项目肯定不止于仅在一个账号上,这就需要在机器上另外生成**SSH key**以满足需求,这需要以下几个步骤:
19 |
20 | 1. **生成并添加第N(N>=2)个ssh key**: 运行代码如下:
21 | ```shell
22 | ssh-keygen -t rsa -C "youremail@xxx.com"
23 | ```
24 | 第一次运行(即 本机上还没有SSH key时),在Git Bash中执行命令一路回车,会在~/.ssh/目录下生成id_rsa和id_rsa.pub两个文件。但第二次及以后添加**SSH key**,切记不要一路回车,在Bash中提醒你给这key取一个名字的时候,就依她的, 不然默认的话就覆盖了之前生成的第一个。如果生成的第二个ssh key不在.ssh/下,可移动到此目录。
25 |
26 | 2. 将生成的**SSH key**添加到Github处。
27 |
28 | 3. 在.ssh/下创建(/修改)config文件 内容如下:
29 |
30 | Host github.com
31 | HostName github.com
32 | PreferredAuthentications publickey
33 | IdentityFile ~/.ssh/id_rsa
34 | Host my.github.com
35 | HostName github.com
36 | PreferredAuthentications publickey
37 | IdentityFile ~/.ssh/my
38 |
39 | Host名字随意(当与之前的有区别),接下来会用到。
40 |
41 | 4. **测试下是否配置正确**
42 | 运行`ssh -T git@my.github.com`,**my.github.com** 为你所取的Host Name
43 | ➜ .ssh ssh -T git@my.github.com
44 | Saving password to keychain failed
45 | Identity added: /Users/yunjeff/.ssh/id_rsa_nicejade_1601 (/Users/yunjeff/.ssh/id_rsa_nicejade_1601)
46 | Hi ! You've successfully authenticated, but GitHub does not provide shell access.
47 |
48 | 如果出现Hi xxx!You've successfully authenticated 就说明连接成功了。
49 |
50 | 5. 修改Github项目配置文件
51 |
52 | 如果本地已经创建或已经clone到本地:有如下两种解决方法:
53 |
54 | 一: 打开.git/config文件
55 |
56 | #更改[remote "origin"]项中的url中的
57 | #my.github.com 对应上面配置的host
58 | [remote "origin"]
59 | url = git@my.github.com:nicejade/nicejade.github.io.git
60 | fetch = +refs/heads/*:refs/remotes/origin/*
61 |
62 | 二: Git Bash中提交的时候修改remote
63 |
64 | $ git remote rm origin
65 | $ git remote add origin git@my.github.com:nicejade/nicejade.github.io.git
66 |
67 | 如果还没Clone到本地,clone仓库时修改对应配置host对应的账户即可:
68 |
69 | #my.github.com对应一个账号
70 | git clone git@my.github.com:username/repo.git
71 |
72 | 如此,即可在一台机器上欢乐的玩不在同一个Github帐号的多项目了,干,折腾完了就是爽。
73 |
74 | 参考文章:[ 多个github帐号的SSH key切换](http://blog.csdn.net/itmyhome1990/article/details/42643233?utm_source=tuicool&utm_medium=referral)
75 |
--------------------------------------------------------------------------------
/_posts/tool/2016-03-31-solve-svn-cleanup-fail.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 解决 svn 清理失败(Cleanup Fail)问题
4 | date: 2016-03-31 17:09:41 +0800
5 | categories: 工具
6 | tags: svn
7 | keywords: Svn Cleanup Fail
8 | description: svn 清理失败 (clean up 失败) 的解决方法
9 | ---
10 |
11 | 在被迫使用 **SVN** 的日子里,不时会遇到,某个文件被 **Lock** 的情形。任你是 Revert,Resolvd,还是别的,就是不行,无法 **Cleanup**。那叫一个凄凄惨惨,花费不少时间折腾这个,除了重新 **Checkout** 外,就如下办法是能够很好工作的,特此怒记载一笔。 **Git !Git !Git !**
12 |
13 | 
14 |
15 | ### **svn无法Cleanup解决方法:**
16 |
17 | * **Step1:** 到 sqlite官网 (http://www.sqlite.org/download.html) 下载 sqlite3.exe;找到 **Precompiled Binaries for Windows**,点击 sqlite-tools-win32-x86-xxxxxxx.zip 下载。
18 |
19 | * **Step2:** 将下载到的 **sqlite3.exe** 文件复制到 本地磁盘的某个临时目录下(当然也可以不用)。
20 |
21 | * **Step3:** 然后 设置 svn源代码 文件夹 及文件 显示 所有文件(包括隐藏文件),会发现 `.svn/wc.db` 文件, 将 其复* Step2 的临时目录下(sqlite3.exe 所在目录下)。
22 |
23 | * **Step4:** 打开 wc.db(开始 -> 运行 -> 打开 cmd命令; 或者直接将wc.db拖入sqlite3.exe); 执行 **delete from work_queue**;
24 |
25 |
26 | * **Step5:** 将 wc.db 覆盖到 svn源代码目录的 .svn目录下。
27 |
28 | * **Step6:** 对 svn源代码目录 右键, clean up, 稍等1至5分钟左右,然后会提示 清理成功。
29 |
--------------------------------------------------------------------------------
/assets/.sass-cache/5677a2e6f4a5b1ce0617ce671b92878bdd488938/_animation.scssc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/assets/.sass-cache/5677a2e6f4a5b1ce0617ce671b92878bdd488938/_animation.scssc
--------------------------------------------------------------------------------
/assets/.sass-cache/5677a2e6f4a5b1ce0617ce671b92878bdd488938/_nprogress.scssc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/assets/.sass-cache/5677a2e6f4a5b1ce0617ce671b92878bdd488938/_nprogress.scssc
--------------------------------------------------------------------------------
/assets/.sass-cache/5677a2e6f4a5b1ce0617ce671b92878bdd488938/_pygments.scssc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/assets/.sass-cache/5677a2e6f4a5b1ce0617ce671b92878bdd488938/_pygments.scssc
--------------------------------------------------------------------------------
/assets/.sass-cache/5677a2e6f4a5b1ce0617ce671b92878bdd488938/style.scssc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/assets/.sass-cache/5677a2e6f4a5b1ce0617ce671b92878bdd488938/style.scssc
--------------------------------------------------------------------------------
/assets/_sass/.sass-cache/5677a2e6f4a5b1ce0617ce671b92878bdd488938/_animation.scssc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/assets/_sass/.sass-cache/5677a2e6f4a5b1ce0617ce671b92878bdd488938/_animation.scssc
--------------------------------------------------------------------------------
/assets/_sass/.sass-cache/5677a2e6f4a5b1ce0617ce671b92878bdd488938/_nprogress.scssc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/assets/_sass/.sass-cache/5677a2e6f4a5b1ce0617ce671b92878bdd488938/_nprogress.scssc
--------------------------------------------------------------------------------
/assets/_sass/.sass-cache/5677a2e6f4a5b1ce0617ce671b92878bdd488938/_pygments.scssc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/assets/_sass/.sass-cache/5677a2e6f4a5b1ce0617ce671b92878bdd488938/_pygments.scssc
--------------------------------------------------------------------------------
/assets/_sass/.sass-cache/5677a2e6f4a5b1ce0617ce671b92878bdd488938/style.scssc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/assets/_sass/.sass-cache/5677a2e6f4a5b1ce0617ce671b92878bdd488938/style.scssc
--------------------------------------------------------------------------------
/assets/_sass/_animation.scss:
--------------------------------------------------------------------------------
1 |
2 | //------- {{ animation__fadeIn }} -------//
3 |
4 | @-webkit-keyframes fadeIn {
5 | from {
6 | -webkit-transform: translateY(30px);
7 | opacity: 0
8 | }
9 | to {
10 | -webkit-transform: translateY(0);
11 | opacity: 1
12 | }
13 | }
14 | @-moz-keyframes fadeIn {
15 | from {
16 | -moz-transform: translateY(30px);
17 | opacity: 0
18 | }
19 | to {
20 | -moz-transform: translateY(0);
21 | opacity: 1
22 | }
23 | }
24 | @-ms-keyframes fadeIn {
25 | from {
26 | -ms-transform: translateY(30px);
27 | opacity: 0
28 | }
29 | to {
30 | -ms-transform: translateY(0);
31 | opacity: 1
32 | }
33 | }
34 | @-o-keyframes fadeIn {
35 | from {
36 | -o-transform: translateY(30px);
37 | opacity: 0
38 | }
39 | to {
40 | -o-transform: translateY(0);
41 | opacity: 1
42 | }
43 | }
44 | @keyframes fadeIn {
45 | from {
46 | transform: translateY(30px);
47 | opacity: 0
48 | }
49 | to {
50 | transform: translateY(0);
51 | opacity: 1
52 | }
53 | }
54 |
55 | //------- {{ animation__fadeOut }} -------//
56 |
57 | @-webkit-keyframes fadeOut {
58 | from {
59 | -webkit-transform: translateY(0);
60 | opacity: 1
61 | }
62 | to {
63 | -webkit-transform: translateY(-30px);
64 | opacity: 0
65 | }
66 | }
67 | @-moz-keyframes fadeOut {
68 | from {
69 | -moz-transform: translateY(0);
70 | opacity: 1
71 | }
72 | to {
73 | -moz-transform: translateY(-30px);
74 | opacity: 0
75 | }
76 | }
77 | @-ms-keyframes fadeOut {
78 | from {
79 | -ms-transform: translateY(0);
80 | opacity: 1
81 | }
82 | to {
83 | -ms-transform: translateY(-30px);
84 | opacity: 0
85 | }
86 | }
87 | @-o-keyframes fadeOut {
88 | from {
89 | -o-transform: translateY(0);
90 | opacity: 1
91 | }
92 | to {
93 | -o-transform: translateY(-30px);
94 | opacity: 0
95 | }
96 | }
97 | @keyframes fadeOut {
98 | from {
99 | transform: translateY(0);
100 | opacity: 1
101 | }
102 | to {
103 | transform: translateY(-30px);
104 | opacity: 0
105 | }
106 | }
107 |
108 | //------- {{ animation__flash }} -------//
109 |
110 | @-webkit-keyframes flash {
111 | from, to {
112 | color: inherit;
113 | -webkit-transform: translateX(0);
114 | }
115 | 35% {
116 | color: $flash;
117 | -webkit-transform: translateX(-.75em);
118 | }
119 | }
120 | @-moz-keyframes flash {
121 | from, to {
122 | color: inherit;
123 | -moz-transform: translateX(0);
124 | }
125 | 35% {
126 | color: $flash;
127 | -moz-transform: translateX(-.75em);
128 | }
129 | }
130 | @-ms-keyframes flash {
131 | from, to {
132 | color: inherit;
133 | -ms-transform: translateX(0);
134 | }
135 | 35% {
136 | color: $flash;
137 | -ms-transform: translateX(-.75em);
138 | }
139 | }
140 | @-o-keyframes flash {
141 | from, to {
142 | color: inherit;
143 | -o-transform: translateX(0);
144 | }
145 | 35% {
146 | color: $flash;
147 | -o-transform: translateX(-.75em);
148 | }
149 | }
150 | @keyframes flash {
151 | from, to {
152 | color: inherit;
153 | transform: translateX(0);;
154 | }
155 | 35% {
156 | color: $flash;
157 | transform: translateX(-.75em);
158 | }
159 | }
160 |
161 | //------- {{ animation__spin }} -------//
162 |
163 | @-webkit-keyframes spin {
164 | from {
165 | -webkit-transform: rotate(0deg);
166 | }
167 | to {
168 | -webkit-transform: rotate(359deg);
169 | }
170 | }
171 | @-moz-keyframes spin {
172 | from {
173 | -moz-transform: rotate(0deg);
174 | }
175 | to {
176 | -moz-transform: rotate(359deg);
177 | }
178 | }
179 | @-o-keyframes spin {
180 | from {
181 | -o-transform: rotate(0deg);
182 | }
183 | to {
184 | -o-transform: rotate(359deg);
185 | }
186 | }
187 | @-ms-keyframes spin {
188 | from {
189 | -ms-transform: rotate(0deg);
190 | }
191 | to {
192 | -ms-transform: rotate(359deg);
193 | }
194 | }
195 | @keyframes spin {
196 | from {
197 | transform: rotate(0deg);
198 | }
199 | to {
200 | transform: rotate(359deg);
201 | }
202 | }
203 |
204 |
205 |
--------------------------------------------------------------------------------
/assets/_sass/_nprogress.scss:
--------------------------------------------------------------------------------
1 | /* Make clicks pass-through */
2 | /* Modified by Peiwen Lu @ 06 Nov 2013 */
3 |
4 | #nprogress {
5 | pointer-events: none;
6 | -webkit-pointer-events: none;
7 | }
8 |
9 | #nprogress .bar {
10 | background: $nprogress;
11 |
12 | position: fixed;
13 | z-index: 100;
14 | top: 0;
15 | left: 0;
16 |
17 | width: 100%;
18 | height: 2px;
19 | }
20 |
21 | /* Fancy blur effect */
22 | #nprogress .peg {
23 | display: block;
24 | position: absolute;
25 | right: 0px;
26 | width: 100px;
27 | height: 100%;
28 | box-shadow: 0 0 10px $nprogress, 0 0 5px $nprogress;
29 | opacity: 1.0;
30 |
31 | -webkit-transform: rotate(3deg) translate(0px, -4px);
32 | -moz-transform: rotate(3deg) translate(0px, -4px);
33 | -ms-transform: rotate(3deg) translate(0px, -4px);
34 | -o-transform: rotate(3deg) translate(0px, -4px);
35 | transform: rotate(3deg) translate(0px, -4px);
36 | }
37 |
38 | /* Remove these to get rid of the spinner */
39 | #nprogress .spinner {
40 | display: block;
41 | position: fixed;
42 | z-index: 100;
43 | @extend %fixed-btn-positon;
44 | @media screen and (max-width: $sidebar-width) {
45 | top: 5px;
46 | right: 5px;
47 | }
48 | }
49 |
50 | #nprogress .spinner-icon {
51 | @extend %fixed-btn-size;
52 |
53 | border: solid 2px transparent;
54 | border-top-color: $nprogress;
55 | border-left-color: $nprogress;
56 | border-radius: 50%;
57 |
58 | -webkit-animation: spin 400ms linear infinite;
59 | -moz-animation: spin 400ms linear infinite;
60 | -ms-animation: spin 400ms linear infinite;
61 | -o-animation: spin 400ms linear infinite;
62 | animation: spin 400ms linear infinite;
63 | }
64 |
65 |
66 | // @-webkit-keyframes nprogress-spinner {
67 | // 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); }
68 | // 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); }
69 | // }
70 | // @-moz-keyframes nprogress-spinner {
71 | // 0% { -moz-transform: rotate(0deg); transform: rotate(0deg); }
72 | // 100% { -moz-transform: rotate(360deg); transform: rotate(360deg); }
73 | // }
74 | // @-o-keyframes nprogress-spinner {
75 | // 0% { -o-transform: rotate(0deg); transform: rotate(0deg); }
76 | // 100% { -o-transform: rotate(360deg); transform: rotate(360deg); }
77 | // }
78 | // @-ms-keyframes nprogress-spinner {
79 | // 0% { -ms-transform: rotate(0deg); transform: rotate(0deg); }
80 | // 100% { -ms-transform: rotate(360deg); transform: rotate(360deg); }
81 | // }
82 | // @keyframes nprogress-spinner {
83 | // 0% { transform: rotate(0deg); transform: rotate(0deg); }
84 | // 100% { transform: rotate(360deg); transform: rotate(360deg); }
85 | // }
86 |
--------------------------------------------------------------------------------
/assets/_sass/picture_bg.scss:
--------------------------------------------------------------------------------
1 | .picture-bg{
2 | width: 100%;
3 | min-height: 500px;
4 | line-height: 66px;
5 | text-align: center;
6 | padding-top: 100px;
7 | background-color: #cccccc;
8 | background: url('//blog.lovejade.cn/assets/images/noise.png'), -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e0e0e0), color-stop(50%, #cccccc), color-stop(100%, #b0b0b0));
9 | background: url('//blog.lovejade.cn/assets/images/noise.png'), -webkit-linear-gradient(#e0e0e0, #cccccc, #b0b0b0);
10 | background: url('//blog.lovejade.cn/assets/images/noise.png'), -moz-linear-gradient(#e0e0e0, #cccccc, #b0b0b0);
11 | background: url('//blog.lovejade.cn/assets/images/noise.png'), -o-linear-gradient(#e0e0e0, #cccccc, #b0b0b0);
12 | background: url('//blog.lovejade.cn/assets/images/noise.png'), linear-gradient(#e0e0e0, #cccccc, #b0b0b0);
13 | border-top: 1px solid #f2f2f2;
14 | border-bottom: 1px solid #8c8c8c;
15 | font-size: 64px;
16 | font-weight: 100;
17 | }
18 | @media (max-width: 768px) {
19 | .picture-bg{
20 | font-size: 22px;
21 | min-height: 200px;
22 | padding-top: 20px;
23 | }
24 | }
25 | .change-color{
26 | color: #f35626;
27 | background-image: -webkit-linear-gradient(92deg,#f35626,#feab3a);
28 | -webkit-background-clip: text;
29 | -webkit-text-fill-color: transparent;
30 | -webkit-animation: hue 11s infinite linear;
31 | }
32 | @-webkit-keyframes hue {
33 | from {
34 | -webkit-filter: hue-rotate(0deg);
35 | }
36 | to {
37 | -webkit-filter: hue-rotate(-360deg);
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/assets/css/default.css:
--------------------------------------------------------------------------------
1 | body{margin:0;padding:0;background:#111111;font-size:12px;overflow:auto}
2 | #mainDiv{width:100%;height:100%}
3 | #loveHeart{float:left;width:670px;height:625px}
4 | #garden{width:100%;height:100%}
5 | #elapseClock{text-align:right;font-size:18px;margin-top:10px;margin-bottom:10px}
6 | #words{font-family:"sxslRegularTh";width:500px;font-size:24px;color:#666}
7 | #messages{display:none}
8 | #elapseClock .digit{font-family:"rougescript";font-size:36px}
9 | #loveu{padding:5px;font-size:22px;margin-top:80px;margin-right:120px;text-align:right;display:none}
10 | #loveu .signature{margin-top:10px;font-size:20px;font-style:italic}
11 | #clickSound{display:none}
12 | #code{float:left;width:440px;height:400px;color:#333;font-family:"Consolas","Monaco","Bitstream Vera Sans Mono","Courier New","sans-serif";font-size:12px}
13 | #code .string{color:#2a36ff}
14 | #code .keyword{color:#7f0055;font-weight:bold}
15 | #code .placeholder{margin-left:15px}#code .space{margin-left:7px}
16 | #code .comments{color:#3f7f5f}
17 | #copyright{margin-top:10px;text-align:center;width:100%;color:#666}
18 | #errorMsg{width:100%;text-align:center;font-size:24px;position:absolute;top:100px;left:0}
19 | #copyright a{color:#666}
20 | .moonback{width: 3em;height: 3em;background-color:#111;margin: 0 auto;position: absolute;;top: 7%;right: 2%;}
21 | .moonback::before{content: "";display: block;position: absolute;top: .5em;right: .1em;width: 2em;height: 2em;background-color: #fffe99;border-radius: 1em;}
22 | .moonback::after{content: " ";display: block;position: absolute;right: .7em;top: .4em;width: 2em;height: 2em;background-color: #111;border-radius: 1em;}
23 | .changeColorClass::after{background-color: #2e9999};
24 |
--------------------------------------------------------------------------------
/assets/favicons/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/assets/favicons/android-chrome-192x192.png
--------------------------------------------------------------------------------
/assets/favicons/android-chrome-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/assets/favicons/android-chrome-512x512.png
--------------------------------------------------------------------------------
/assets/favicons/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/assets/favicons/apple-touch-icon.png
--------------------------------------------------------------------------------
/assets/favicons/browserconfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | #ffc40d
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/assets/favicons/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/assets/favicons/favicon-16x16.png
--------------------------------------------------------------------------------
/assets/favicons/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/assets/favicons/favicon-32x32.png
--------------------------------------------------------------------------------
/assets/favicons/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/assets/favicons/favicon.ico
--------------------------------------------------------------------------------
/assets/favicons/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "\u5929\u610f\u4eba\u95f4\u822b",
3 | "short_name": "nicejade blog",
4 | "icons": [
5 | {
6 | "src": "/assets/favicons/android-chrome-192x192.png",
7 | "sizes": "192x192",
8 | "type": "image/png"
9 | },
10 | {
11 | "src": "/assets/favicons/android-chrome-512x512.png",
12 | "sizes": "512x512",
13 | "type": "image/png"
14 | }
15 | ],
16 | "start_url": "/index.html",
17 | "theme_color": "#ffffff",
18 | "background_color": "#ffffff",
19 | "display": "standalone"
20 | }
--------------------------------------------------------------------------------
/assets/favicons/mstile-144x144.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/assets/favicons/mstile-144x144.png
--------------------------------------------------------------------------------
/assets/favicons/mstile-150x150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/assets/favicons/mstile-150x150.png
--------------------------------------------------------------------------------
/assets/favicons/mstile-310x150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/assets/favicons/mstile-310x150.png
--------------------------------------------------------------------------------
/assets/favicons/mstile-310x310.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/assets/favicons/mstile-310x310.png
--------------------------------------------------------------------------------
/assets/favicons/mstile-70x70.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/assets/favicons/mstile-70x70.png
--------------------------------------------------------------------------------
/assets/favicons/safari-pinned-tab.svg:
--------------------------------------------------------------------------------
1 |
2 |
4 |
7 |
8 | Created by potrace 1.11, written by Peter Selinger 2001-2013
9 |
10 |
12 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/assets/font/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "fontello",
3 | "css_prefix_text": "icon-",
4 | "css_use_suffix": false,
5 | "hinting": true,
6 | "units_per_em": 1000,
7 | "ascent": 850,
8 | "glyphs": [
9 | {
10 | "uid": "bf882b30900da12fca090d9796bc3030",
11 | "css": "mail",
12 | "code": 59392,
13 | "src": "fontawesome"
14 | },
15 | {
16 | "uid": "72b1277834cba5b7944b0a6cac7ddb0d",
17 | "css": "rss",
18 | "code": 59394,
19 | "src": "fontawesome"
20 | },
21 | {
22 | "uid": "37f6cfbb4062ed0d01b351ec35c334ff",
23 | "css": "right-open-mini",
24 | "code": 59398,
25 | "src": "entypo"
26 | },
27 | {
28 | "uid": "884cfc3e6e2d456dd2a2ca0dbb9e6337",
29 | "css": "left-open-big",
30 | "code": 59393,
31 | "src": "entypo"
32 | },
33 | {
34 | "uid": "4a413ef43c364dafa42766e74c31bbca",
35 | "css": "cc",
36 | "code": 59395,
37 | "src": "entypo"
38 | },
39 | {
40 | "uid": "d090355c31f497b61d676416c1fd39fb",
41 | "css": "twitter",
42 | "code": 59397,
43 | "src": "entypo"
44 | },
45 | {
46 | "uid": "d1945696d6bbbf84e388df9961f26a37",
47 | "css": "sina-weibo",
48 | "code": 59396,
49 | "src": "entypo"
50 | }
51 | ]
52 | }
--------------------------------------------------------------------------------
/assets/font/fontello.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/assets/font/fontello.eot
--------------------------------------------------------------------------------
/assets/font/fontello.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Copyright (C) 2013 by original authors @ fontello.com
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/assets/font/fontello.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/assets/font/fontello.ttf
--------------------------------------------------------------------------------
/assets/font/fontello.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/assets/font/fontello.woff
--------------------------------------------------------------------------------
/assets/font/rougescript-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/assets/font/rougescript-regular.ttf
--------------------------------------------------------------------------------
/assets/font/sxslRegularTh.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/assets/font/sxslRegularTh.woff
--------------------------------------------------------------------------------
/assets/images/728x90-copy.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/assets/images/728x90-copy.jpg
--------------------------------------------------------------------------------
/assets/images/dji-mavic2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/assets/images/dji-mavic2.jpg
--------------------------------------------------------------------------------
/assets/images/domineering-tiger.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/assets/images/domineering-tiger.jpg
--------------------------------------------------------------------------------
/assets/images/er-ci-yuan.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/assets/images/er-ci-yuan.jpg
--------------------------------------------------------------------------------
/assets/images/jeffjade-nicejade.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/assets/images/jeffjade-nicejade.jpg
--------------------------------------------------------------------------------
/assets/images/nicejade-icon.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/assets/images/nicejade-icon.jpg
--------------------------------------------------------------------------------
/assets/images/noise.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/assets/images/noise.png
--------------------------------------------------------------------------------
/assets/images/steve-jobs-feet-toilet.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/assets/images/steve-jobs-feet-toilet.jpg
--------------------------------------------------------------------------------
/assets/images/王小波.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/assets/images/王小波.jpg
--------------------------------------------------------------------------------
/assets/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | LoveTime
6 |
7 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 | Boy name = Mr Yang
35 | Girl name = Mrs Li
36 |
37 | The boy love the girl;
38 |
39 | The girl loved the boy;
40 |
41 | The boy can not be separated the girl;
42 |
43 | The girl can not be separated the boy;
44 |
45 |
46 | The boy very happy ;
47 | The girl is also very happy ;
48 |
49 |
50 | The boy has but one dream;
51 |
52 |
53 |
54 | I want to say:
55 | Baby, I love you forever !
56 |
57 |
58 |
59 |
60 |
61 | 亲爱的,这是我们相爱在一起的时光。
62 |
63 |
64 |
65 | 爱你直到永永远远。
66 |
——静儿轩
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
110 |
111 |
112 |
--------------------------------------------------------------------------------
/assets/js/counter.js:
--------------------------------------------------------------------------------
1 | if (location.host === "nicejade.github.io") {
2 | // 总数
3 | var jeffjade_firebase = new Firebase("https://nicejade.firebaseIO.com");
4 | jeffjade_firebase.child("sum").on("value", function(data) {
5 | var current_counter = data.val();
6 | if($("#counter").length > 0 && current_counter > 1){
7 | $("#counter").html(" 本站热度:"+ current_counter +" (℃)");
8 | };
9 | });
10 |
11 | jeffjade_firebase.child("sum").transaction(function (current_counter) {
12 | return (current_counter || 0) + 1;
13 | });
14 |
15 | // 明细
16 | var current_url = window.location.pathname.replace(new RegExp('\\/|\\.', 'g'),"_");
17 |
18 | jeffjade_firebase.child("detail/"+current_url).transaction(function (current_counter) {
19 | return (current_counter || 0) + 1;
20 | });
21 |
22 | // 获取明细,并将明细也展示在页面上
23 | jeffjade_firebase.child("detail/"+current_url).on("value", function(data){
24 | var detail_counter = data.val();
25 | if($("#detail_counter").length > 0 && detail_counter > 1){
26 | $("#detail_counter").html(
27 | " 本页热度:"+ detail_counter +" (℃)"
28 | );
29 | }
30 | });
31 |
32 | var n = new Date();
33 | var time = n.getFullYear()+'-'+(n.getMonth()+1)+'-'+n.getDate()+'_'+n.getHours()+':'+n.getMinutes()+':'+n.getSeconds()+' '+n.getMilliseconds();
34 | jeffjade_firebase.child("lastupdatetime").set({ timer: time, url: current_url });
35 | }
36 |
--------------------------------------------------------------------------------
/assets/js/functions.js:
--------------------------------------------------------------------------------
1 |
2 | var $window = $(window), gardenCtx, gardenCanvas, $garden, garden;
3 | var clientWidth = $(window).width();
4 | var clientHeight = $(window).height();
5 |
6 | $(function () {
7 | // setup garden
8 | $loveHeart = $("#loveHeart");
9 | var offsetX = $loveHeart.width() / 2;
10 | var offsetY = $loveHeart.height() / 2 - 55;
11 | $garden = $("#garden");
12 | gardenCanvas = $garden[0];
13 | gardenCanvas.width = $("#loveHeart").width();
14 | gardenCanvas.height = $("#loveHeart").height()
15 | gardenCtx = gardenCanvas.getContext("2d");
16 | gardenCtx.globalCompositeOperation = "lighter";
17 | garden = new Garden(gardenCtx, gardenCanvas);
18 |
19 | $("#content").css("width", $loveHeart.width() + $("#code").width());
20 | $("#content").css("height", Math.max($loveHeart.height(), $("#code").height()));
21 | $("#content").css("margin-top", Math.max(($window.height() - $("#content").height()) / 2, 10));
22 | $("#content").css("margin-left", Math.max(($window.width() - $("#content").width()) / 2, 10));
23 |
24 | // renderLoop
25 | setInterval(function () {
26 | garden.render();
27 | }, Garden.options.growSpeed);
28 | });
29 |
30 | $(window).resize(function() {
31 | var newWidth = $(window).width();
32 | var newHeight = $(window).height();
33 | if (newWidth != clientWidth && newHeight != clientHeight) {
34 | location.replace(location);
35 | }
36 | });
37 |
38 | function getHeartPoint(angle) {
39 | var t = angle / Math.PI;
40 | var x = 19.5 * (16 * Math.pow(Math.sin(t), 3));
41 | var y = - 20 * (13 * Math.cos(t) - 5 * Math.cos(2 * t) - 2 * Math.cos(3 * t) - Math.cos(4 * t));
42 | return new Array(offsetX + x, offsetY + y);
43 | }
44 |
45 | function startHeartAnimation() {
46 | var interval = 50;
47 | var angle = 10;
48 | var heart = new Array();
49 | var animationTimer = setInterval(function () {
50 | var bloom = getHeartPoint(angle);
51 | var draw = true;
52 | for (var i = 0; i < heart.length; i++) {
53 | var p = heart[i];
54 | var distance = Math.sqrt(Math.pow(p[0] - bloom[0], 2) + Math.pow(p[1] - bloom[1], 2));
55 | if (distance < Garden.options.bloomRadius.max * 1.3) {
56 | draw = false;
57 | break;
58 | }
59 | }
60 | if (draw) {
61 | heart.push(bloom);
62 | garden.createRandomBloom(bloom[0], bloom[1]);
63 | }
64 | if (angle >= 30) {
65 | clearInterval(animationTimer);
66 | showMessages();
67 | } else {
68 | angle += 0.2;
69 | }
70 | }, interval);
71 | }
72 |
73 | (function($) {
74 | $.fn.typewriter = function() {
75 | this.each(function() {
76 | var $ele = $(this), str = $ele.html(), progress = 0;
77 | $ele.html('');
78 | var timer = setInterval(function() {
79 | var current = str.substr(progress, 1);
80 | if (current == '<') {
81 | progress = str.indexOf('>', progress) + 1;
82 | } else {
83 | progress++;
84 | }
85 | $ele.html(str.substring(0, progress) + (progress & 1 ? '_' : ''));
86 | if (progress >= str.length) {
87 | clearInterval(timer);
88 | }
89 | }, 75);
90 | });
91 | return this;
92 | };
93 | })(jQuery);
94 |
95 | function timeElapse(initTime){
96 | var oneDaySeconds = 86400,
97 | oneHourSeconds = 3600;
98 |
99 | var current = Date();
100 | var seconds = (Date.parse(current) - initTime) / 1000;
101 | var days = Math.floor(seconds / oneDaySeconds);
102 |
103 | seconds = seconds % oneDaySeconds;
104 | var hours = Math.floor(seconds / oneHourSeconds);
105 | if (hours < 10) {
106 | hours = "0" + hours;
107 | }
108 | seconds = seconds % oneHourSeconds;
109 | var minutes = Math.floor(seconds / 60);
110 | if (minutes < 10) {
111 | minutes = "0" + minutes;
112 | }
113 | seconds = seconds % 60;
114 | if (seconds < 10) {
115 | seconds = "0" + seconds;
116 | }
117 | var result = "" + days + " days " + hours + " hours " + minutes + " minutes " + seconds + " seconds";
118 | $("#elapseClock").html(result);
119 | }
120 |
121 | function showMessages() {
122 | adjustWordsPosition();
123 | $('#messages').fadeIn(5000, function() {
124 | showLoveU();
125 | });
126 | }
127 |
128 | function adjustWordsPosition() {
129 | $('#words').css("position", "absolute");
130 | $('#words').css("top", $("#garden").position().top + 195);
131 | $('#words').css("left", $("#garden").position().left + 70);
132 | }
133 |
134 | function adjustCodePosition() {
135 | $('#code').css("margin-top", ($("#garden").height() - $("#code").height()) / 2);
136 | }
137 |
138 | function showLoveU() {
139 | $('#loveu').fadeIn(3000);
140 | }
141 |
--------------------------------------------------------------------------------
/clear-commit-msg.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 |
3 | set -e
4 |
5 | git checkout --orphan latest_branch
6 |
7 | git add -A
8 |
9 | git commit -am "✨ clear message & recommit"
10 |
11 | git branch -D master
12 |
13 | git branch -m master
14 |
15 | git push -f origin master
16 |
--------------------------------------------------------------------------------
/ie.html:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 | Not support IE9 and below
6 |
7 |
8 |
29 |
30 |
31 | !
32 | Not support IE9 and below
33 | Recommend to use Chrome or Firefox as your primary browser.
34 |
35 |
--------------------------------------------------------------------------------
/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: 天意人间舫
4 | ---
5 |
6 | ## **[晚晴幽草轩](https://www.jeffjade.com)**,**[天意人间舫](nicejade.github.io)**
7 |
8 |
18 |
19 |
20 |
21 |
22 | 深居俯夹城,春去夏犹清。
23 | 天意怜幽草,人间重晚晴。
24 | 并添高阁迥,微注小窗明。
25 | 越鸟巢干后,归飞体更轻。
26 | ———李商隐《晚晴》
27 |
28 |
29 |
30 |
31 | 对于此博客,视其为辅助`晚晴幽草轩`の华丽存在;至于命其名为`天意人间舫`,这有在个人主博 **[晚晴幽草轩](http://www.jeffjade.com)** 中有专写一篇以述之。
32 |
33 |
34 |
35 | ## 对博客的理解
36 |
37 | 我们每个人的在网络上产生的数据越来越多,这些信息是我们在互联网上存在过的痕迹,值得我们认真对待。但是它们被分散分布在各个网站上。很多时候我们很难将它们聚合在一起,而且各个网站的信息排布方式也没有办法自由控制,所以我们需要一个可以由自己主宰的空间——博客。
38 |
39 | 通过博客,我们可以记录自己的生活和成长的轨迹。它不像 Twitter 那样碎片化,也不像 Facebook 那样关系化,它是私人的空间。
40 |
41 | 分类有助于我们对信息的隔离,例如我把自己的记录分成这几类:技术、工具、资源、生活、读书和旅游。这是我生活重中最重要的几个类别,我希望把自己的一些心得和尝试写在相应分类中。
42 |
43 | 以上是此博客[原主](http://yansu.org)所解,`Fork`后读来颇为共鸣,就仍保留至此。个人对于博客理解在[写于2015年末的总结](http://www.jeffjade.com/2015/12/26/2015-12-26-sum_up-in-the-end-of-year/)有过详述,这里按下不表。对于博客内容,对原主`资源`,`工具`部分作了保留;一方面,个人也对资源工具颇感兴趣;另一方面也觉这些心得分享,尚有很大补充完善的空间。而此博客初衷也是作为支持 **[晚晴幽草轩](http://www.jeffjade.com)** 的存在,也无意渴求原创,分享解注,唯用是从。
44 |
45 | ## 博客平台
46 |
47 | 这个博客通过 [Jekyll](http://jekyllrb.com/) 生成,部署在 [Github](https://pages.github.com),主题基于 [3-Jekyll](https://github.com/P233/3-Jekyll) 修改生成,Fork自[yansu.org](https://github.com/suyan/suyan.github.io) ,同时也感谢 [Peiwen Lu](https://github.com/P233) 开发出这漂亮的主题。此博客的源码现托管于[Github](https://github.com/nicejade/nicejade.github.io)上,如果有任何改进意见,欢迎讨论。
48 |
49 | 关于这风格,这还处在一个不断刷新的过程;主博以灰白彩为主,那这里就酷黑色定调,个人也很欢喜这一点。出于方便阅读之舒爽,有刻意隐去左侧导航栏,以右上角按钮作呼出入口;大体如是,复待闲修。下面这注解,即是这不断修正的记录:
50 |
51 | >1. 为便捷 PC/MAC 端阅读,有增添对`Enter`监听,焦点于此页,触发之可有右上角按钮点击之效;
52 | 2. 为使搜索变得便捷,监听`Ctrl+Enter`,在呼出侧边栏后,将焦点置于搜索框,即控即搜;
53 | 3. 便捷您键盘操纵,特意推荐此文 [Vimium~让您的Chrome起飞](http://www.jeffjade.com/2015/10/19/2015-10-18-chrome-vimium/),熟之以用,如乎神助;
54 |
--------------------------------------------------------------------------------
/jade/black-background.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/jade/black-background.jpg
--------------------------------------------------------------------------------
/jade/cover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/jade/cover.png
--------------------------------------------------------------------------------
/jade/love.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | ShowLoveTime
6 |
7 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 | Boy name = Mr Yang
35 | Girl name = Mrs Li
36 |
37 | The boy love the girl;
38 |
39 | The girl loved the boy;
40 |
41 | The boy can not be separated the girl;
42 |
43 | The girl can not be separated the boy;
44 |
45 |
46 | The boy very happy ;
47 | The girl is also very happy ;
48 |
49 |
50 | The boy has but one dream;
51 |
52 |
53 |
54 | I want to say:
55 | Baby, I love you forever !
56 |
57 |
58 |
59 |
60 |
61 | 亲爱的,这是我们相爱在一起的时光。
62 |
63 |
64 |
65 | 爱你直到永永远远。
66 |
——静儿轩
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
110 |
111 |
112 |
--------------------------------------------------------------------------------
/jade/point.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/jade/point.png
--------------------------------------------------------------------------------
/jade/table.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/jade/table.png
--------------------------------------------------------------------------------
/jade/vue-jade-components-demo.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Vue Components Demo
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
25 |
26 |
--------------------------------------------------------------------------------
/pages/rss.xml:
--------------------------------------------------------------------------------
1 | ---
2 | layout: null
3 | ---
4 |
5 |
6 |
7 | {{ site.title }}
8 | {{ site.url }}
9 | {{ site.description }}
10 | {% for post in site.posts limit:20 %}
11 | -
12 |
{{ post.title }}
13 | {{ site.url }}{{ post.url }}
14 | {{ site.url }}{{ post.url }}
15 | {{ post.date | date_to_rfc822 }}
16 | {{ post.content | xml_escape }}
17 |
18 | {% endfor %}
19 |
20 |
--------------------------------------------------------------------------------
/service-worker.js:
--------------------------------------------------------------------------------
1 | const HTMLToCache = '/';
2 | const version = 'blog.lovejade.cn';
3 |
4 | self.addEventListener('install', (event) => {
5 | event.waitUntil(caches.open(version).then((cache) => {
6 | cache.add(HTMLToCache).then(self.skipWaiting());
7 | }));
8 | });
9 |
10 | self.addEventListener('activate', (event) => {
11 | event.waitUntil(
12 | caches.keys().then(cacheNames => Promise.all(cacheNames.map((cacheName) => {
13 | if (version !== cacheName) return caches.delete(cacheName);
14 | }))).then(self.clients.claim())
15 | );
16 | });
17 |
18 | self.addEventListener('fetch', (event) => {
19 | const requestToFetch = event.request.clone();
20 | event.respondWith(
21 | caches.match(event.request.clone()).then((cached) => {
22 | // We don't return cached HTML (except if fetch failed)
23 | if (cached) {
24 | const resourceType = cached.headers.get('content-type');
25 | // We only return non css/js/html cached response e.g images
26 | if (!hasHash(event.request.url) && !/text\/html/.test(resourceType)) {
27 | return cached;
28 | }
29 |
30 | // If the CSS/JS didn't change since it's been cached, return the cached version
31 | if (hasHash(event.request.url) && hasSameHash(event.request.url, cached.url)) {
32 | return cached;
33 | }
34 | }
35 | return fetch(requestToFetch).then((response) => {
36 | const clonedResponse = response.clone();
37 | const contentType = clonedResponse.headers.get('content-type');
38 |
39 | if (!clonedResponse || clonedResponse.status !== 200 || clonedResponse.type !== 'basic'
40 | || /\/sockjs\//.test(event.request.url)) {
41 | return response;
42 | }
43 |
44 | if (/html/.test(contentType)) {
45 | caches.open(version).then(cache => cache.put(HTMLToCache, clonedResponse));
46 | } else {
47 | // Delete old version of a file
48 | if (hasHash(event.request.url)) {
49 | caches.open(version).then(cache => cache.keys().then(keys => keys.forEach((asset) => {
50 | if (new RegExp(removeHash(event.request.url)).test(removeHash(asset.url))) {
51 | cache.delete(asset);
52 | }
53 | })));
54 | }
55 |
56 | caches.open(version).then(cache => cache.put(event.request, clonedResponse));
57 | }
58 | return response;
59 | }).catch(() => {
60 | if (hasHash(event.request.url)) return caches.match(event.request.url);
61 | // If the request URL hasn't been served from cache and isn't sockjs we suppose it's HTML
62 | else if (!/\/sockjs\//.test(event.request.url)) return caches.match(HTMLToCache);
63 | // Only for sockjs
64 | return new Response('No connection to the server', {
65 | status: 503,
66 | statusText: 'No connection to the server',
67 | headers: new Headers({ 'Content-Type': 'text/plain' }),
68 | });
69 | });
70 | })
71 | );
72 | });
73 |
74 | function removeHash(element) {
75 | if (typeof element === 'string') return element.split('?hash=')[0];
76 | }
77 |
78 | function hasHash(element) {
79 | if (typeof element === 'string') return /\?hash=.*/.test(element);
80 | }
81 |
82 | function hasSameHash(firstUrl, secondUrl) {
83 | if (typeof firstUrl === 'string' && typeof secondUrl === 'string') {
84 | return /\?hash=(.*)/.exec(firstUrl)[1] === /\?hash=(.*)/.exec(secondUrl)[1];
85 | }
86 | }
--------------------------------------------------------------------------------
/sitemap.txt:
--------------------------------------------------------------------------------
1 | ---
2 | title : Sitemap
3 | ---
4 |
5 | {% for page in site.pages %}
6 | {{site.address}}{{ page.url }}
7 | {% endfor %}
8 |
9 | {% for post in site.posts %}
10 | {{site.address}}{{ post.url }}
11 | {% endfor %}
--------------------------------------------------------------------------------
/vue-boilerplate-template/index.html:
--------------------------------------------------------------------------------
1 | Vue-Boilerplate-Template This is your fallback content in case JavaScript fails to load.
--------------------------------------------------------------------------------
/vue-boilerplate-template/service-worker.js:
--------------------------------------------------------------------------------
1 | "use strict";var precacheConfig=[["index.html","66720eb902a1841403942e0a40858f1e"],["service-worker.js","5d4141c125f1cbdfdae274e66314fab8"],["static/css/app.6feb7c8d57faaab5835a.css","8f71142d9943fdb77684237385d513d6"],["static/css/element.87666b76720ff5f2fa74.css","48e587f65609b500e0f8630e9d8f8cde"],["static/js/1.5721be49ae799cc3eee3.js","54e573d686b19531310ccc3a93648609"],["static/js/app.8e548f7325ba9a1c6b4f.js","36acf6f09dd9e6abd3bc35b8ca857607"],["static/js/vendor.dll.js","4e1e16057615b72cad2459a0fea17cc9"]],cacheName="sw-precache-v3-your-app-name-"+(self.registration?self.registration.scope:""),ignoreUrlParametersMatching=[/^utm_/],addDirectoryIndex=function(e,t){var n=new URL(e);return"/"===n.pathname.slice(-1)&&(n.pathname+=t),n.toString()},cleanResponse=function(e){return e.redirected?("body"in e?Promise.resolve(e.body):e.blob()).then(function(t){return new Response(t,{headers:e.headers,status:e.status,statusText:e.statusText})}):Promise.resolve(e)},createCacheKey=function(e,t,n,r){var a=new URL(e);return r&&a.pathname.match(r)||(a.search+=(a.search?"&":"")+encodeURIComponent(t)+"="+encodeURIComponent(n)),a.toString()},isPathWhitelisted=function(e,t){if(0===e.length)return!0;var n=new URL(t).pathname;return e.some(function(e){return n.match(e)})},stripIgnoredUrlParameters=function(e,t){var n=new URL(e);return n.hash="",n.search=n.search.slice(1).split("&").map(function(e){return e.split("=")}).filter(function(e){return t.every(function(t){return!t.test(e[0])})}).map(function(e){return e.join("=")}).join("&"),n.toString()},hashParamName="_sw-precache",urlsToCacheKeys=new Map(precacheConfig.map(function(e){var t=e[0],n=e[1],r=new URL(t,self.location),a=createCacheKey(r,hashParamName,n,!1);return[r.toString(),a]}));function setOfCachedUrls(e){return e.keys().then(function(e){return e.map(function(e){return e.url})}).then(function(e){return new Set(e)})}self.addEventListener("install",function(e){e.waitUntil(caches.open(cacheName).then(function(e){return setOfCachedUrls(e).then(function(t){return Promise.all(Array.from(urlsToCacheKeys.values()).map(function(n){if(!t.has(n)){var r=new Request(n,{credentials:"same-origin"});return fetch(r).then(function(t){if(!t.ok)throw new Error("Request for "+n+" returned a response with status "+t.status);return cleanResponse(t).then(function(t){return e.put(n,t)})})}}))})}).then(function(){return self.skipWaiting()}))}),self.addEventListener("activate",function(e){var t=new Set(urlsToCacheKeys.values());e.waitUntil(caches.open(cacheName).then(function(e){return e.keys().then(function(n){return Promise.all(n.map(function(n){if(!t.has(n.url))return e.delete(n)}))})}).then(function(){return self.clients.claim()}))}),self.addEventListener("fetch",function(e){if("GET"===e.request.method){var t,n=stripIgnoredUrlParameters(e.request.url,ignoreUrlParametersMatching);(t=urlsToCacheKeys.has(n))||(n=addDirectoryIndex(n,"index.html"),t=urlsToCacheKeys.has(n));0,t&&e.respondWith(caches.open(cacheName).then(function(e){return e.match(urlsToCacheKeys.get(n)).then(function(e){if(e)return e;throw Error("The cached response that was expected is missing.")})}).catch(function(t){return console.warn('Couldn\'t serve response for "%s" from cache: %O',e.request.url,t),fetch(e.request)}))}});
--------------------------------------------------------------------------------
/vue-boilerplate-template/static/fonts/element-icons.6f0a763.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/vue-boilerplate-template/static/fonts/element-icons.6f0a763.ttf
--------------------------------------------------------------------------------
/vue-boilerplate-template/static/img/JARVIS for Webpack.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/vue-boilerplate-template/static/img/JARVIS for Webpack.png
--------------------------------------------------------------------------------
/vue-boilerplate-template/static/img/icons/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/vue-boilerplate-template/static/img/icons/android-chrome-192x192.png
--------------------------------------------------------------------------------
/vue-boilerplate-template/static/img/icons/android-chrome-256x256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/vue-boilerplate-template/static/img/icons/android-chrome-256x256.png
--------------------------------------------------------------------------------
/vue-boilerplate-template/static/img/icons/android-chrome-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/vue-boilerplate-template/static/img/icons/android-chrome-512x512.png
--------------------------------------------------------------------------------
/vue-boilerplate-template/static/img/icons/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/vue-boilerplate-template/static/img/icons/apple-touch-icon.png
--------------------------------------------------------------------------------
/vue-boilerplate-template/static/img/icons/browserconfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | #603cba
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/vue-boilerplate-template/static/img/icons/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/vue-boilerplate-template/static/img/icons/favicon-16x16.png
--------------------------------------------------------------------------------
/vue-boilerplate-template/static/img/icons/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/vue-boilerplate-template/static/img/icons/favicon-32x32.png
--------------------------------------------------------------------------------
/vue-boilerplate-template/static/img/icons/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/vue-boilerplate-template/static/img/icons/favicon.ico
--------------------------------------------------------------------------------
/vue-boilerplate-template/static/img/icons/mstile-150x150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nicejade/nicejade.github.io/3bbfd4011039c6eb5ebda5ed32e698808b0420f4/vue-boilerplate-template/static/img/icons/mstile-150x150.png
--------------------------------------------------------------------------------
/vue-boilerplate-template/static/img/icons/safari-pinned-tab.svg:
--------------------------------------------------------------------------------
1 |
2 |
4 |
7 |
8 | Created by potrace 1.11, written by Peter Selinger 2001-2013
9 |
10 |
12 |
39 |
41 |
43 |
45 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/vue-boilerplate-template/static/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Vue-Boilerplate-Template",
3 | "short_name": "V B T",
4 | "icons": [
5 | {
6 | "src": "/static/img/icons/android-chrome-192x192.png",
7 | "sizes": "192x192",
8 | "type": "image/png"
9 | },
10 | {
11 | "src": "/static/img/icons/android-chrome-512x512.png",
12 | "sizes": "512x512",
13 | "type": "image/png"
14 | }
15 | ],
16 | "start_url": "/index.html",
17 | "display": "standalone",
18 | "background_color": "#000000",
19 | "theme_color": "#f52929"
20 | }
21 |
--------------------------------------------------------------------------------