我这辈子遇到的聪明人(来自各行各业的聪明人)没有不每天阅读的——没有,一个都没有。——《穷查理宝典》查理·芒格

In the field of pedagogy(教育学), learning by teaching is a method of teaching in which students are made to learn material and prepare lessons to teach it to the other students. There is a strong emphasis on acquisition of life skills along with the subject matter. This method was originally defined by Jean-Pol Martin in the 1980s.

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.

就像这篇博文的作者一样,最早在接触互联网的时候就开始养成写博客的习惯,因为上中学的时候对化学老师的好记性不如烂笔头一句话铭记于心。当时互联网还没有微博,微信,逛论坛和博客是那时的主流。最早写博文是在沪江英语的博客上,因为经常逛沪江论坛,后来由于沪江英语转型博客服务已经不再提供,之前写的一些文章也找不到了。后来又经常逛CSDN论坛,就改为在CSDN的博客上继续写博客,因为是免费的服务,天下没有免费的午餐,博客上的广告投放越来越多,有时还经常显示网站在维护不能访问,故而觉得有必要搭建一个自己的博客。目前是在DigitalOcean上购买的VPS服务,主要用于公众号和博客。其中博客选择的jekyll,因为它的哲学思想就是注重内容,界面简单,可以像hacker一样写文章,正如你看到的样子。工作和生活中难免存在很多琐碎的事情,维护博客目的是将一些有价值的事情记录下来,让自己多一些思考。

VPS的选取

通过我为什么选择DigitalOcean VPS来做开发一文的介绍,在DigitalOcean上创建了一个VPS。体验后有以下感受:

优点:

  • 下载速度快,由于是国外的服务器没有GFW的问题。在下载Dokcer官方镜像的时候可以体会到。
  • Tutorials丰富,很多分享经验的文章,简单易懂。
  • 官方的客服服务响应迅速。如果遇到问题可以向官方提issue获得帮助。
  • 环境自由,可以各种折腾,为程序员而生。
Simple cloud hosting, built for developers. A droplet is a KVM VPS which you get full root access to so you can install anything you like.

缺点:

  • 需要承担一些费用。比如,每月10美元(1GB Mem/1 Core processor/30GB SSD的配置)。使用我的推荐码注册,你可以得到100美元的奖励金额用于购买VPS,如果以后继续付费的话,我也可能得到一些奖励。
  • 暂时没想到第二条。
Give $100, Get $25
Everyone you refer gets $100 in credit over 60 days. Once they’ve spent $25 with us, you'll get $25. There is no limit to the amount of credit you can earn through referrals.

DigitalOcean

完成下面三步,就可以创建和体验自己的VPS服务了。

  1. 完成注册
  2. 更新账单(可以使用DO赠送的金额)
  3. 创建Droplet(有多种image可以选择,比如Ubuntu)

创建完,就可以通过SSH的方式登陆到自己的云服务器了,DigitalOcean会把外网的IP和root密码通过邮件的方式通知我们。可以直接使用root和密码来登录,但更安全便捷(不用每次都输入密码)的方式是使用SSH keys的方式来登录(How to Add SSH Keys to Droplets)。

注意,DO创建完droplet就开始收费,即使你把它power off(sudo poweroff),它也同样在计费,因为droplet使用的资源没有释放。在Billing的选项里可以查看自己的balance和usage情况。如果不希望继续付费可以把droplet删除(destroy),但是会把这个droplet上的数据全部清除(scrub up)。

Note that when you power off your droplet you are still billed for it. This is because your diskspace, CPU, RAM, and IP address are all reserved while it is powered off.

检查环境:

cat /etc/issue
Ubuntu 14.04.1 LTS GNU Linux 3.13.0 37 generic x86_64

查看droplet的public ip:

ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
curl http://icanhazip.com

Linode

Linode也是一种选择,目前还没有使用过。

VPS设置

Ubuntu为例,在申请到一个VPS后我们需要做哪些事情。

账户初始化配置

initial-server-setup-with-ubuntu-14-04

系统安全配置

  • HTTPS证书设置

参考证书安装指引

开发工具配置

  • apache/nginx
apt-get install apache2
apt-get install nginx

how-to-install-nginx-on-ubuntu-14-04-lts

反向代理设置:

NGINX Reverse Proxy nginx配置二级域名

  • mysql
apt-get install mysql-server php5-mysql
  • php
# for apache
apt-get install php5 libapache2-mod-php5 php5-mcrypt
# web root is /var/www/html

# for nginx
apt-get install php5-fpm php5-mysql
# web root /usr/share/nginx/html
  • phpMyAdmin
apt-get install phpmyadmin apache2-utils
http://104.131.173.242/phpmyadmin/

常用设置

.bashrc

设置命令行提示符显示格式

# Ex. [gerryyang ~ 09:31:21]
PS1="\[\e[1;35m\][\[\e[1;33m\]\u \[\e[1;31m\]\w \[\e[1;33m\]\t\[\e[1;35m\]]\[\e[1;36m\]\$\[\e[0m\] "

PS1='\u@\h \W\$'
PS1='\[\e[0;31m\]\u@\h\[\e[0;33m\]:\[\e[1;34m\]\w\[\e[1;37m\]$\[\e[m\]'
PS1='\[\e[1;34m\]\w\[\e[1;37m\]$\[\e[m\]'

设置编码

export LC_ALL="zh_CN.UTF-8"
export LANG="zh_CN.UTF-8"

设置别名

alias grep='grep --color'
alias his='history | tail -n 10'

dotfiles

  • https://github.com/MaskRay/Config
  • https://github.com/ppwwyyxx/dotfiles

Jekyll

如何通过jekyll发表blog,基本的用法可参考官方文档Posts章节

Usage

  • 目录索引(TOC)

How I Add a Table of Contents to my Jekyll Blog Written in Markdown

kramdown

  • 主题

参考Overriding theme defaultsPermalink实现如何修改主题。

第三方主题:

  • long-haul - A minimal, type-focused Jekyll theme. http://brianmaierjr.com/long-haul
  • jekyll-theme-chirpy - A minimal, responsive, and powerful Jekyll theme for presenting professional writing

More:

https://jekyllrb.com/

参考博客:

Q&A

To prevent an error, you’ll need to wrap the JSON in Liquid raw tags, like this:


{ {3478, udp}, ejabberd_stun, [] },

工具

建站工具

The world’s fastest framework for building websites. Hugo is one of the most popular open-source static site generators. With its amazing speed and flexibility, Hugo makes building websites fun again.

refer:

  1. https://gohugo.io/getting-started/quick-start/
  2. https://gohugo.io/installation/linux/
  • NodeJS
  1. https://github.com/nodejs/help/wiki/Installation
  2. https://github.com/nodejs/Release

MacOS 环境

常用设置

  • Mac触控板三指拖移功能

系统偏好设置 -> 辅助功能 -> 指针控制 -> 触控板选项 -> 启用拖移 -> 三指拖移

  • 触发角

桌面与屏幕保护程序 -> 触发角,可设置屏幕四个角触发事件。例如,左上角启动屏幕保护程序

  • 系统截屏或录像

Shift+Command+5

  • 切换中英文输入法的快捷键

如果使用的是 Mac 自带的输入法,有两个方法:

  1. 使用大写锁定键 Caps 来切换中英文,想输入大写英文字母时,可以长按 Caps 切换大小写,或者使用 Shift 组合键
  2. 使用 control + space 切换中英文

系统

工具 功能
Adobe Reader Adobe Reader 为免费版 PDF 阅读软件,无需授权。如需编辑 PDF 文件的内容,请申请专业版使用
有数 补充 MacOS 计算器的功能
Cleaner One 磁盘清理(免费) refer: Mac 存储空间里面的“其他”怎么清理
Homebrew 软件包管理,第二个AppStore
Alfred 4 for Mac 查找文件,搜索web等,默认通过快捷键option + Space来唤起,例如,open xxx打开一个目录或文件
ITerm2 相比系统默认的Terminal提供了更多高级的功能
Oh My ZSH 兼容bash,并集成了很多插件,使用Terminal更加高效。bashzsh之间的切换方法,通过chsh命令,然后重启session即可生效:$chsh -s /bin/zsh或则$chsh -s /bin/bash。常用插件:autojump用于目录跳转(brew install autojump
Easy New File 添加右键新建文件
Itsycal 比系统默认日期显示更全,同时可以添加事件通知,与系统的日历是打通的
Spectacle 窗口管理工具
Cheatsheet 通过长按command键显示当前应用的快捷键,并可将其保存为PDF文档
Keka 解压缩工具
IINA The modern media player for macOS,比苹果自带quicktime player播放器功能强大
Amphetamine 可以保持系统一直处于awake状态,方便网络下载等不中断场景使用,点击它可以开启一个session来阻止系统进入休眠,同时可以设置这个session的生命周期,比系统默认的节能配置使用方便
Snip 默认mac可以通过shift+command+5来截图或录制屏幕。而Snip的优点是可以滚动截屏(从 Mac App Store 下载的 Snip 不支持滚动截屏)
Aerial Apple TV Aerial Screensaver for Mac
Dozer Hide status bar icons on macOS,用于隐藏状态栏上不必要的图标,通过command + drag将范围内的图标隐藏
LICEcap LICEcap simple animated screen capture tool for Windows and OS X,用于屏幕录制并支持导出GIF
超级右键 iRightMouse MacOS 上右键的扩展
MacVim Vim - the text editor - for macOS
VS Code For Windows, macOS and Linux, 扩展丰富
泼辣修图 Mac上的美图秀秀

More: https://github.com/hzlzh/Best-App

效率

工具 功能
Trello 多终端使用,记录日常工作的TODO
欧陆词典 相对有道词典的优点是没有广告,支持微信账户同步

Google Chrome

使用Google账户登录,方便同步书签信息,便于多终端使用,并且有丰富的扩展程序。

扩展程序 功能
Tampermonkey 油猴 https://www.zhihu.com/question/382845649
印象笔记剪裁 保存网页
FeHelper WEB前端助手。1. JSON自动格式化(或命令行工具jq) 2. 二维码生成器
Vimium 可以使用Vim快捷键浏览网页
Video DownloadHelper 下载页面上的多媒体资源,当检测到有可下载的资源图标会变为彩色,否则为灰色
Adblock Plus 浏览器广告拦截
替换字体的中文部分为雅黑 将页面中文显示雅黑字体
类似的网站 发现相关网站
Grammarly for Chrome 英语写作纠正
高效网页截图编辑插件 支持长截图
CLEAN crxMouse Gestures 手势,支持各种设置

开发

代码管理

工具 功能
Sourcetree Mac Git客户端
Cornerstone 4 Mac SVN客户端
cloc Count Lines of Code
  • cloc --show-lang 显示支持的语言
  • cloc ./ --exclude-dir=node_modules 排除某个目录分析
  • cloc --quiet -by-file ./ --exclude-dir=node_modules --include-lang=Go | grep ".go" | sort -rn -k 4 | head -n 10 统计代码行数(排除注释)排名前10的go文件

首先 –quiet 是把输出结果精简化了,一些总计的结果给过滤了。然后使用 -by-file 代表统计的时候按照文件统计,而不是按照默认的语言统计, –exclude-dir 表示省略 node_modules 文件夹。 –include-lang 这里直接标记将 Golang 的文件统计出来。上面这些 cloc 的命令就把 ./ 下有哪些 go 文件,每个文件的空格多少行,注释多少行,真正代码多少行都列出来了。然后使用 grep “.go” 把一些噪音输出过滤掉,只留下“文件名\t空格行数\t注释行数\t代码行数”,后面的 sort -rn -k 4 按照第四列(代码行数)倒序排列,并且 head -n 10 显示前10个文件。

Vim

一些总结和用法,另见

常用操作

操作 快捷键
使用大写的O参数来垂直分屏 vim -On file1 file2 ...
使用小写的o参数来水平分屏 vim -on file1 file2 ...
左右分割当前打开的文件 Ctrl+W v
上下分割当前打开的文件 Ctrl+W s
左右分割,并打开一个新的文件 :vsp filename
上下分割,并打开一个新的文件 :sp filename
关闭当前窗口 Ctrl+W c
把光标移到右边的屏 Ctrl+W l
把光标移到左边的屏 Ctrl+W h
把光标移到上边的屏 Ctrl+W k
把光标移到下边的屏 Ctrl+W j
把光标移到下一个的屏 Ctrl+W w
  • 查找
    • 精确匹配:通过 <word> 查找,例如,精确查找 the 则为 /\<the\>
  • 粘贴功能
# To turn off autoindent when you paste code
:set paste

# After you pasted your code, turn off the paste-mode, so that auto-indenting when you type works correctly again
:set nopaste

常用插件

refer:

Sublime

一些总结和用法,另见

插件名称 用途 获取地址
MarkdownPreview Markdown文档预览 https://packagecontrol.io/packages/MarkdownPreview https://facelessuser.github.io/MarkdownPreview/usage/
AlignTab 对齐,The most flexible alignment plugin for Sublime Text 3. This plugin is inspired by the excellent VIM plugin, tabular https://github.com/randy3k/AlignTab
Sublime​AStyle​Formatter C/C++/C#/Java code formatter/beautifier with AStyle, For OSX, control + option + f to format current file https://packagecontrol.io/packages/SublimeAStyleFormatter
GoSublime (x) GoLang配置 https://packagecontrol.io/packages/GoSublime
ConvertToUTF8 字符编码转换 https://packagecontrol.io/packages/ConvertToUTF8
SyncedSideBar   https://packagecontrol.io/packages/SyncedSideBar
URLEncode url编解码 https://packagecontrol.io/packages/URLEncode
  • AlignTab 使用说明

安装完AlignTab后,对选择的内容在右键菜单中可以进行常见的格式化,或者根据自己的需求将常用的格式化命令配置为快捷键。(Custom User Bindings for using AlignTab with =’s, =>’s, and :’s in Sublime Text )

“Preferences” -> “Key Bindings”,配置以下快捷键,之后即可通过super+ctrl+=来格式化=的语句。

[
  {
    "keys": ["super+ctrl+;"], "command": "align_tab",
    "args" : {
      "user_input" : ":/f"
    }
  },
  {
    "keys": ["super+ctrl+="], "command": "align_tab",
    "args" : {
      "user_input" : "=/f"
    }
  },
  {
    "keys": ["super+ctrl+."], "command": "align_tab",
    "args" : {
      "user_input" : "=>/f"
    }
  }
]
  • Sublime​AStyle​Formatter 使用说明

用于对代码文件进行格式化配置。在User->SublimeAStyleFormatter.sublime-settings配置中添加个性化配置:

  1. 保存文件时自动格式化。
  2. 配置缩进格式为4个空格。
  3. 配置bracket style。
{
    // Auto format on file save
    "autoformat_on_save": true,

    "options_default":
    {
        // Default bracket style
        // Can be one of "allman", "bsd", "break", "java", "attach", "kr", "k&r",
        // "k/r" "stroustrup", "whitesmith", "banner", "gnu", "linux", "horstmann",
        // "1tbs", "otbs ", "google", "pico", "lisp", "python", "vtk", or null
        // for default.
        "style": "stroustrup",

        // Use x spaces for indentation
        "indent": "spaces",
        "indent-spaces": 4,

    }
}

详细用法:http://astyle.sourceforge.net/astyle.html

VSCode

VSCode是微软推出的一款IDE开发工具,拥有丰富的插件,支持Windows,OS X和Linux,此外内置JavaScript,TypeScript和Node.js支持。VSCode定位于编辑器与IDE之间,但是更像一个编辑器。

Markdown

代码对比

  • Beyond Compare,是一套由Scooter Software推出的內容比较工具软件,提供Win、Mac、Linux等多平台下载。

代码查看

  • Source Insight,是一款功能强大的面向项目的编程编辑器,代码浏览器和分析器,可帮助您在工作和计划时更好的理解代码。

JetBrains全家桶

IDE 功能
CLion JetBrains的CLion,是一个跨平台的C/C++ IDE开发工具,支持C++11 、C++14、libc++以及Boost。
GoLand GoLand是JetBrains的IDE,旨在为Go开发提供符合人体工程学的环境。
IntelliJ IDEA 2001年发布,一套智能的Java集成开发环境,特别专注与强调程序师的开发撰写效率提升。
PyCharm PyCharm是一种Python IDE,可以帮助用户在使用Python语言开发时提高其效率的工具。
PhpStorm PhpStorm是JetBrains公司开发的一款商业的PHP集成开发工具,旨在提高用户效率,可深刻理解用户的编码,提供智能代码补全,快速导航以及即时错误检查。
WebStorm WebStorm是jetbrains公司旗下一款JavaScript 开发工具,被誉为Web前端开发神器。
Rider JetBrains Rider是一款快速强大的C#编辑器,用于在Windows、Mac和Linux上进行Unity开发。

画图

  • Graphviz
    • Graphviz is open source graph visualization software. Graph visualization is a way of representing structural information as diagrams of abstract graphs and networks. It has important applications in networking, bioinformatics, software engineering, database and web design, machine learning, and in visual interfaces for other technical domains.
  • canva
    • 在线图形设计平台
  • websequencediagrams
    • 通过脚本语言生成时序图
  • excalidraw
    • 在线手绘风格
    • 素材丰富
    • 支持 vscode
  • flowchart.js
    • 通过脚本语言生成流程图
    • 使用diagrams工具可以生成各种图形,包括flowchart
  • Viz.js
    • 借助VizWeb平台使用GraphvizDOT语言在浏览器中生成广义的图形
  • Evolus Pencil
    • An open-source GUI prototyping tool that’s available for ALL platforms
  • MacOS - OmniGraffle
    • MacOS 画图工具
  • MacOS - StarUML3
    • MacOS UML建模工具
  • UML-The Unified Modeling Language

  • sketch

  • Dia Diagram Editor

refer:

云同步

  • 印象笔记
  • 马克飞象,web工具,可以结合印象笔记使用。
  • 微云,文件备份。

数学

算法

Tech Website

Books

技术书籍

  • 编程知识:《重构-改善既有代码的设计》
  • 软件工程:《Google软件工程》《持续交付2.0》
  • 沟通表达:《金字塔原理》《一本小小的红色写作书》
  • 时间管理:《高效能人士的七个习惯》《卓有成效的管理者》
  • 元知识:《程序员修炼之道:通向务实的最高境界》《程序员的职业素养》《黑客与画家》

其他

财富就是知识,增长就是学习,信息就是意外,⾦钱就是时间

推动增长的不是人们更努力地工作,更不是剥削工人或者压榨地球,而是人们更聪明地工作,是总有人创造新的突破,引入新的知识,才让增长延续

Developer Roadmaps

roadmap.sh is a community effort to create roadmaps, guides and other educational content to help guide the developers in picking up the path and guide their learnings.

golang

https://roadmap.sh/golang


END - Enjoy!