开始新的学习和写作
我这辈子遇到的聪明人(来自各行各业的聪明人)没有不每天阅读的——没有,一个都没有。——《穷查理宝典》查理·芒格
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服务了。
- 完成注册
- 更新账单(可以使用DO赠送的金额)
- 创建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
脚注
这是我的博客文章。这里有一个带有脚注的句子[^1]。
[^1]: 这是脚注的内容。
https://kramdown.gettalong.org/syntax.html#footnotes
主题
参考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:
参考博客:
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:
- https://gohugo.io/getting-started/quick-start/
- https://gohugo.io/installation/linux/
- NodeJS
- https://github.com/nodejs/help/wiki/Installation
- https://github.com/nodejs/Release
MacOS 环境
常用设置
- Mac触控板三指拖移功能
系统偏好设置 -> 辅助功能 -> 指针控制 -> 触控板选项 -> 启用拖移 -> 三指拖移
- 触发角
桌面与屏幕保护程序 -> 触发角,可设置屏幕四个角触发事件。例如,左上角启动屏幕保护程序
- 系统截屏或录像
Shift+Command+5
- 切换中英文输入法的快捷键
如果使用的是 Mac 自带的输入法,有两个方法:
- 使用大写锁定键 Caps 来切换中英文,想输入大写英文字母时,可以长按 Caps 切换大小写,或者使用 Shift 组合键
- 使用 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更加高效。bash 和zsh 之间的切换方法,通过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个文件。
ohmyzsh
Oh My Zsh is an open source, community-driven framework for managing your zsh configuration.
A delightful community-driven (with 2,300+ contributors) framework for managing your zsh configuration. Includes 300+ optional plugins (rails, git, macOS, hub, docker, homebrew, node, php, python, etc), 140+ themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.
#!/usr/bin/zsh
# Powerlevel10k
if [ -d ~/tools/zsh/powerlevel10k ]; then
rm -rf ~/tools/zsh/powerlevel10k
fi
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/tools/zsh/powerlevel10k
echo 'source ~/tools/zsh/powerlevel10k/powerlevel10k.zsh-theme' >~/.zshrc
# zsh-z
if [ -d ~/.zsh/zsh-z ]; then
rm -rf ~/.zsh/zsh-z
fi
git clone https://github.com/agkozak/zsh-z.git ~/.zsh/zsh-z
echo 'source ~/.zsh/zsh-z/zsh-z.plugin.zsh' >>~/.zshrc
# zsh-autosuggestions
if [ -d ~/.zsh/zsh-autosuggestions ]; then
rm -rf ~/.zsh/zsh-autosuggestions
fi
git clone https://github.com/zsh-users/zsh-autosuggestions ~/.zsh/zsh-autosuggestions
echo 'source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh' >>~/.zshrc
# zsh-syntax-highlighting
if [ -d ~/.zsh/zsh-syntax-highlighting ]; then
rm -rf ~/.zsh/zsh-syntax-highlighting
fi
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ~/.zsh/zsh-syntax-highlighting
echo 'source ~/.zsh/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh' >>~/.zshrc
# switch bash to zsh
zsh
source ~/.zshrc
通过 chsh -s $(which zsh) 可以将默认 shell 更改为 zsh
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
常用插件
- YouCompleteMe - A code-completion engine for Vim
- ccls - C/C++/ObjC language server supporting cross references, hierarchies, completion and semantic highlighting
refer:
- Configure coc.nvim for C/C++ Development
- my vim configuration, based on amix’s project
- Turning off auto indent when pasting text into vim
- How to reset Visual Studio Code key bindings
- http://vim-adventures.com/
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 |
SublimeAStyleFormatter | 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"
}
}
]
- SublimeAStyleFormatter 使用说明
用于对代码文件进行格式化配置。在User->SublimeAStyleFormatter.sublime-settings
配置中添加个性化配置:
- 保存文件时自动格式化。
- 配置缩进格式为4个空格。
- 配置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
- Typora用于Markdown编辑和可视化。
- 如何用markdown写复杂公式?
- Changing image size in 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平台使用
Graphviz
的DOT
语言在浏览器中生成广义的图形
- 借助VizWeb平台使用
- Evolus Pencil
- An open-source GUI prototyping tool that’s available for ALL platforms
- MacOS - OmniGraffle
- MacOS 画图工具
- MacOS - StarUML3
- MacOS UML建模工具
- Dia Diagram Editor
refer:
云同步
AI 工具
Kindle 电子书
如何从 Kindle 电子内容中删除 DRM,以方便将 Kindle 的电子书放在其他设备上查看?参考方案:删除亚马逊 Kindle 电子书的 DRM,将 AZW 转为 PDF 格式文档,主要步骤如下:
- 下载并安装 Calibre e-book management 软件。Calibre 是一个免费的开源软件,主要用于对电子书、电子文档进行管理,支持各种辅助插件的安装,是一款功能十分强大的管理软件。
calibre is a powerful and easy to use e-book manager. Users say it’s outstanding and a must-have. It’ll allow you to do nearly everything and it takes things a step beyond normal e-book software. It’s also completely free and open source and great for both casual users and computer experts.
- 下载 DRM 解除插件。下载下来之后是一个 zip 压缩包,解压找到 DeDRM_calibre_plugin 即可,其中的 DeDRM_plugin.zip 文件作为安装插件,不用进行解压缩。
DRM Removal Tools for eBooks. This blog is intended to help anyone looking for free and simple software for removing DRM from their Kindle ebooks, stripping DRM from their Adobe Digital Editions ebooks, getting rid of DRM from their Barnes and Noble ebooks, freeing their Kobo ebooks of DRM, or decrypting their Fictionwise eReader ebooks. If you want to find out more about ebooks, DRM and why you will probably want to remove the DRM from your ebooks, see this post: Ebook Formats, DRM and You — A Guide for the Perplexed. If you already know that you want to strip the DRM from your ebooks, you’ve found the right place.
- 启动 Calibre,安装插件。Kindle 的 DRM 是基于设备串号的,选择 “Customize plugin”,添加 Kindle 授权设备的串号(可在设备上查看,16 位序列号)。至此,Kindle 的 AZW 电子书已经能被正常解密打开了。
- 导入 AZW 文件,可转换成 PDF 格式导出。
数学
- WolframAlpha,一个在线数学工具。
算法
- Algorithm Visualizer,Interactive Online Platform that Visualizes Algorithms from Code https://algorithm-visualizer.org/
- 数据结构和算法必知必会的50个代码实现
Tech Website
- ncona.com - Learning about computers
- John Washam - software engineering and computer science
- I’m talking dev
- Better Programming
- 云图
- http://coolshell.cn/
Books
技术书籍
- 编程知识:《重构-改善既有代码的设计》
- 软件工程:《Google软件工程》《持续交付2.0》
- 沟通表达:《金字塔原理》《一本小小的红色写作书》
- 时间管理:《高效能人士的七个习惯》《卓有成效的管理者》
- 元知识:《程序员修炼之道:通向务实的最高境界》《程序员的职业素养》《黑客与画家》
其他
- awesome-programming-books.github.io
- The Art of Doing Science and Engineering (Richard Wesley Hamming)
- Probability and Computing
-
No Silver Bullet - Essence and Accident in Software Engineering
- Life after Capitalism: The Meaning of Wealth, the Future of the Economy, and the Time Theory of Money - George Gilder
财富就是知识,增长就是学习,信息就是意外,⾦钱就是时间
推动增长的不是人们更努力地工作,更不是剥削工人或者压榨地球,而是人们更聪明地工作,是总有人创造新的突破,引入新的知识,才让增长延续
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!