清空Chrome缓存的301重定向

可能是之前测试短域名生成服务的时候,添加了 http://localhost:8080 的跳转,导致了此后所有对该地址的访问都被重定向到了另一个网址,即使我在 8080 端口的服务已经停止,并且已经更换了其他测试的服务,Chrome 依然缓存了 301 重定向。

而由因为跳转的时间非常快,所以我无法使用以前经常使用的 Ctrl+Shift+R 来强行刷新页面清除缓存。所以只能求助 Google,幸而操作并不复杂,不过让我学到了一些 Chrome 的小 tips,因此记录下来。

强制刷新

之前提到的 Ctrl + Shift + R 就能够强制刷新,但其实还有一种UI上面的操作,如果打开 DevTools 的情况下,点击刷新按钮,并长按,会弹出如下的菜单,选择 Empty Cache and Hard Reload 即可。

hard reload

针对我的情况,直接打开 http://localhost 然后强行刷新即可。

开启 Devtools 中的停止缓存

开启 Developer Tools,一般的快捷键是 Ctrl + Shift + I ,如果从菜单上开启是Chrome的点点点 -> 工具 -> 开发者工具;或者任意的页面点击 Inspect 审查当前页面,就能打开。

然后再打开的开发者调试工具集中,打开 Settings,快捷键 F1,在工具集的右上角,点点点-> Settings。

在 Perferences -> Network 标签下 有一个 Disable Cache(while Devtools is open) ,选中即可。

最暴力清除数据

当然最暴力的就是清除数据了,不建议这么做。

reference

  • https://superuser.com/a/869739/298782

2018-04-18 chrome , linux , redirect , browser , devtools

Linux 下的防火墙 ufw

UFW,全称 Uncomplicated Firewall,是通过 iptables 实现的防火墙工具。ufw 是对 iptables 的封装,iptables 的规则太过于复杂,不适合新手。这篇文章也是如何增强VPS安全性的扩展篇,在修改了SSH端口,登录用户之后,最好清楚自己开放了VPS的哪些端口访问,把他们用 ufw 管理起来,防止被滥用。

安装

Ubuntu 默认已经安装如果没有安装,使用一行命令即可:

sudo apt update && sudo apt install ufw

配置及使用

默认情况下,ufw 的配置文件在 /etc/default/ufw ,然后用户定义的防火墙规则文件会存在 /etc/ufw/*.rules/lib/ufw/*.rules

UFW 默认允许所哟出站连接,拒绝所有入站连接

sudo ufw default deny incoming
sudo ufw default allow outgoing

允许管理IPv6

sudo vim /etc/defaulf/ufw

然后修改

IPV6=yes

允许SSH连接

sudo ufw allow ssh
# 等价于
sudo ufw allow 22

如果修改了SSH连接端口,记住相应的允许端口连接。

允许HTTP/HTTPS

sudo ufw allow http
# 等价于
sudo ufw allow 80

sudo ufw allow https
sudo ufw allow 443

默认情况下 ufw allow 不加 in 是指允许入站连接,如果要允许出站,加上 out

sudo ufw allow in port
sudo ufw allow out port

允许指定端口的协议

sudo ufw allow ftp
# 等价于
sudo ufw allow 21/tcp

允许指定范围的端口连接和协议

sudo ufw allow 6000:6005/tcp
sudo ufw allow 7000:7005/udp

允许指定的IP连接

默认情况下相应的端口允许所有IP连接,通过from指定允许某IP的连接

sudo ufw allow from 123.45.67.89
sudo ufw allow from 123.45.67.89 to any port 22

如果要允许子网的连接

sudo ufw allow from 15.15.15.0/24
sudo ufw allow from 15.15.15.0/24 to any port 22

拒绝连接

和允许连接一样,只要将相应的allow换成 deny 即可

删除规则

首先查看当前的规则,并且打印出规则号

sudo ufw status numbered

每条规则前都有一个序号

sudo ufw delete [number]

也可以通过协议删除

sudo ufw delete allow http
# 等价于
sudo ufw delete allow 80

查看UFW状态

sudo ufw status verbose
sudo ufw show added

启用禁用UFW

sudo ufw enable
sudo ufw disable

ufw 默认会开机启动,如果没有,手动设置

sudo systemctl start ufw
sudo systemctl enable ufw

启用日志

sudo ufw logging on
sudo ufw logging off
sudo ufw logging low|medium|high    # 指定日志级别 日志文件在 /var/log/ufw.log

日志的格式

其中前面列出了主机防火墙日志的日期、时间、主机名,后面的内容意思是:

[UFW BLOCK]:表示事件描述的开始以及是何种事件。在此例中,它表示阻止了连接。 IN:如果它包含一个值,那么代表该事件是传入事件 OUT:如果它包含一个值,那么代表事件是传出事件 MAC:目的地和源 MAC 地址的组合 SRC:IP数据包的源IP DST:目的地的IP LEN:数据包长度 TTL:数据 TTL,或称为time to live。 PROTO:数据包的协议 SPT:数据包的源端口 DPT:目标端口 WINDOW:发送方可以接收的数据包的大小 SYN URGP:指示是否需要三次握手。 0 表示不需要。

重置防火墙

这条命令将禁用 ufw,并删除所有定义的规则

sudo ufw reset

默认情况下, ufw 会备份规则。


2018-04-16 linux , firewall , ufw , iptables , ports

威联通折腾篇三:Virtualization Station 安装虚拟机

这里主要是介绍威联通 NAS 上面的 Virtualization Station (虚拟机工作站),这个应用能够在 NAS 上运行虚拟机,支持 Windows, Linux,Android 等等系统。威联通的虚拟机功能可以让用户在一台机器上同时运行多个系统。

Virtualization Station 支持通过 .ova, ovf, .qvm 或者 .ios 文件来安装虚拟化系统。

安装

使用这个虚拟机非常容易,直接在应用中安装 Virtualization Station 即可,然后在桌面上点击打开,就能够见到基本的界面,如下图

Screenshot from 2018-04-15 15-55-29

安装虚拟系统的方法也很简单,只要有系统 ova, ovf, qvm, 或者 iso 镜像就可以。

虚拟机的使用

和绝大部分虚拟机的需求一样,你可以在 NAS 的虚拟机上做任何事情,包括测试,备份,恢复等等。对于一个 7*24 小时都开着的机器来说,比如可以安装一个 Windows 虚拟机,将百度网盘的文件拖下来,使用 BT 软件挂机等等功能都可以被开发出来。

下面放一张图,可以解释为什么威联通里面有三个类似功能的 APP(Virtualization Station, Container Station, Linus Station) 他们的区别

虚拟 container vs vm

总结来说 Virtualization Station 是一个虚拟机,在 NAS 上跑虚拟化的系统,虽然利用率,不错,但是可能比不上 Linus Station。而如果更加愿意使用单独的服务,比如跑 Docker ,那么 Container Station 其实更加适合。

因为威联通现在已经不支持百度云,所以在威联通上使用百度云非常的难受,只能够通过虚拟化 Windows 在 Windows 上跑百度云再将文件拉下来存到 NAS 上。

reference


2018-04-15 qnap , qnap-tutorial , nas , virtualization , hypervisor , vm , container , docker , virtualization-station

威联通折腾篇零:威联通 Qnap TS-453B mini 初体验

如今各种设备各种数据日益增多,当越来越多的私人数据需要存储时,NAS 进入了我的视线。早之前我以为云端存储可以涵盖我的一切,而我多年的数据也都安稳的存在互联网的各个领域,我的文件在 Dropbox,我的照片在 Google Photos,我的音乐原来在 Google Play Music,现在转移到了网易云音乐,我的书籍大部分都在 Kindle 上,也就是亚马逊的云上,我的文章、代码大都在 GitHub,我的笔记都在 WizNote,我的书签 Chrome 保存着,我的密码 LastPass 保存着。其实说实话原本这一切都是非常完美的,直到这两年网络越来越不稳定,互联网各种环境越来越糟糕,各种数据泄露让我原本一切都在云端的幻想破灭了,于是才有了这篇私有云储存。

为什么买这个 TS-453B mini,主要是便宜,4Bay 的 NAS 是最低,如果以后因为要升级可能会更加麻烦,至少 4Bay 的 NAS 我觉得近 5 年或者更远来说应该能够满足我个人的需求了。并且写下这篇文章的主要原因也是在初次使用 NAS 的时候需要解决的几个重要的问题,也就是我的主要需求。

从开始硬盘系统安装,到摸清楚其中的主要功能,也花了不少时间,写这篇文章的时候对这个威联通的 QTS 系统有并没有很深入的了解,唯一曾经看测评的时候就了解的功能就是他对虚拟化技术的使用,这是群晖所不拥有的。而其他同步文件,备份系统等等功能我以为应该是必须的功能,在威联通这边竟然有一丝丝的麻烦,我以为只需要安装一个同步软件或者工具就能够实现的功能而竟然还要稍微复杂一些些。不过这都不是什么问题,充分利用起他的硬件才是这篇文章想要探讨的事情。

在写这篇文章的时候 QNAP 发生了不知名错误,导致我无法登录 admin 页面,只能 reset,以至于丢失了我所有的设置和配置。只能从头再来,很麻烦。

QTS 系统

首先用 admin - admin 登录进去,第一步就是修改密码,添加二步验证,然后切换语言。

启用 myQNAPcloud 这样可以外网访问,不过也别抱太高期望,这个连接速度真的很慢。

然后去 App Center 中安装各种需要的应用。

然后可以去添加 QNAP Club 这个第三方应用商店,地址是这个 https://www.qnapclub.eu/en/repo.xml

更多关于 QTS 4.3.x 系统的使用可以查看官方的用户文档

存储空间总管

NAS 中非常重要的就是数据了,威联通在存储时引入了一些新概念。QNAP 引入了弹性磁盘区架构作为基础,包括了这些功能:

  • 存储池和多个 RAID 群组
  • 动态配置磁盘区和空间回收
  • 快照和快照同步复制
  • 在线扩充容量

威联通的弹性磁盘区架构从底层到上层,分别是磁盘管理、存储池管理、磁盘区管理及共享文件夹管理

qnap-flexible-volume-architecture

基本存储管理架构

basic-storage-management-architecture

  • RAID 群组:RAID 群组将多个实体硬盘组成一个逻辑单元,以提供数据备份、提升性能或两者
  • 存储池:存储池将实体硬盘或 RAID 群组合并成大型存储空间。存储池可以藉由在其中新增 RAID 群组,或将磁盘新增至当前 RAID 群组来进行扩充
  • 热备份:热备份是 NAS 的备用硬盘,只会载 RAID 群组中的硬盘故障时使用。热备份会自动取代故障硬盘,数据也会在热备份中重建。
  • 磁盘区:磁盘区是 NAS 上的存储空间。磁盘区为一存储单位,并可被格式化成文件系统来存储分享文件夹及文件。磁盘区有三种类型:完整配置、精简和静态。完整配置/精简磁盘区必须在存储池中创建,一个存储池可有多个完整配置/精简磁盘区。如果存储池的可用空间足够,完整配置/精简磁盘区可以调整至更大的容量。而静态磁盘区则是从 RAID 群组(而不是存储池)中创建的。静态磁盘区可以藉由在其中新增 RAID 群组,或将磁盘新增至当前 RAID 群组来进行扩充。
  • iSCSI LUN:iSCSI LUN 是挂载到 iSCSI 目标的逻辑磁盘,LUN 的类型有两种:文件类型 LUN 和区块类型 LUN。区块类型 LUN 通常优先于文件类型 LUN。如需了解区块类型 LUN 和文件类型 LUN 的差异,请参阅 此处。
  • 共享文件夹:共享文件夹会创建在磁盘区中,用于存储文件并将文件与拥有访问权限的用户或群组共享。

威联通还提供了一种 Qtier 存储池(自动分层存储解决方案),由不同类型的硬盘(机械或 SSD)所组成而形成一个多硬盘磁盘区,在低负载期间或是根据您的计划, 将常用数据搬移到高性能硬盘(即 SSD)以达成高可用性或高 I/O 高速缓存吞吐量。将不常用的数据搬移到低成本的高容量硬盘(即 SATA 硬盘)以提高成本效益。

同步手机照片及文件

这其实是一个非常简单的需求了,不论是现在通过网络备份到 Google Photos 和 Flickr,还是说备份到小米的路由器上,都是一个非常容易实现的需求。在威联通的 QTS 上可以通过 Qfile 和 Qphoto 来实现。设置倒也简单。

自动备份照片的目的地址,千万不要选择 Qsync 的文件夹,选择 multimedia 或者其他文件夹,这样在 Linux SMB 访问的时候才能访问到。 QSync 文件夹内的内容是不支持 SAMBA,FTP,AFP 访问的。

SQL 服务

QNAP 自带 MySQL Server 设置中启用即可,用的是 MariaDB ,这是 MySQL 开源社区维护的一个分支。然后可以安装 phpMyAdmin 来管理 MySQL,默认的用户名和密码是 root 和 admin(如果设置过 NAS 密码,可以尝试 NAS 密码),如果要修改密码,可以再 phpMyAdmin 安装完成之后在 phpMyAdmin 后台 -> 权限中,编辑 root 在 localhost 的密码。参考官网.

SMB 挂载文件夹

在“控制台” - “网络与文件服务” 中开启 Samba,然后在局域网中就能够通过 SMB 来挂载 NAS 中的文件夹。

reference


2018-04-14 nas , linux , home-server , qnap , qnap-tutorial

使用 git bisect 来快速定位出错版本

在整理之前那篇 [Git 分支管理]1 的时候接触了 git bisect ,用了那么长时间的 git 竟然又出现了一个不曾用过的命令,于是就看了下文档学习下使用。

git bisect 使用二分查找来快速定位出错的 commit,举个例子来说,假设线上正常运行的一个版本,之后进行了大量的开发,提交了成百上千次提交,而导致了线上其中一个小功能的失效。为了定位问题,你可能需要查看过去的提交。

  • 如果你知道这个功能具体在那个文件,那其实很好办,git blame 找出修改的部分,修正即可
  • 而如果提交实在太多,无法定位问题文件的话,那么就需要使用 git bisect

git bisect 使用

在使用之前你需要知道两个前提,一个是已知的正常运行的版本,一个是出问题的版本,git bisect 会在两个版本之间使用二分查找,然后根据定位的 commit id 创建新的分支,然后在此分支上可以进行检查,是否有问题。

假设这个中间版本依然可以运行,那么通过 git bisect good 命令告诉 git,然后进行剩下一半的查找,以此类推,最终会快速的定位到问题所在 commit。因为每次都把提交历史切为两半,所以非常快,时间复杂度 log(n)

运行 git bisect 的整个过程

git bisect start         # 告诉 git 开始二分查找
git bisect good [good-commit-id] # 告诉 git 该版本无问题
git bisect bad [bad-commit-id]   # 告诉 git 出问题版本 git bisect bad HEAD
# 此时 git 就会检出中间版本,然后就可以去测试该版本
git bisect good/bad      # 此时就会遇到两种可能,有问题或者无问题,使用 good/bad 来告诉 git
# 当找到第一个问题版本后,git 会告诉你 bisect 结束
git bisect reset         # 返回到 git bisect 初始的版本
git bisect log           # 显示最后一次完全成功的 git bisect 日志

git branching

看完整个过程就知道了为什么在 [Git 分支管理]1 那篇文章中要提到这个 bisect 了,因为如果在 master 上的提交每次都 rebase ,而不是使用 merge ,就会让 master 分支非常干净,而 bisect 去查找的时候就不会那么的费力,而如果 master 分支非常多的分叉,查找过程就会非常费力了。


2018-04-12 linux , git , version-control

使用 yourls 专属自己的短域名服务

YOURLS是Your Own URL Shortener,是一个非常强大的短链接平台。

官网地址:http://yourls.org

  • 基于 PHP 的免费开源短链接平台
  • 点击历史和频次统计、推介跟踪、访客地理位置等等
  • 有丰富的插件架构,可以更好地拓展功能
  • 方便的 API
  • 支持跨域访问
  • 安装配置方便

安装

手动安装

  • 从 Yourls 的 GitHub 主页 https://github.com/YOURLS/YOURLS/releases下载最新版包;
  • 复制 /user/config-sample.php 到同目录下并改名为 config.php;
  • 打开 config.php,根据个人情况进行数据库、管理员账户等配置;
  • 将所有文件上传到网站的根目录,可能是 public_html 或者 wwwroot 等等;
  • 访问 http://your-own-domain.com/admin/ 来进行安装。

yourls 的用户名和密码是以字符串形式存放在配置文件中的,需要在设置时指定。

Docker

推荐使用 Docker 安装

配置

基本的配置可以分为三个部分

数据库设置

配置文件在目录下 /user/config.php

/** MySQL 数据库用户名 */
define( 'YOURLS_DB_USER', 'your db user name' );
/** MySQL 数据库密码 */
define( 'YOURLS_DB_PASS', 'your db password' );
/** 用来存储 Yourls 数据的数据库 */
define( 'YOURLS_DB_NAME', 'yourls' );
** 如果你不是用的标准 hostname 端口, 请用'hostname:port'这种格式配置,例如 'localhost:8888' 或者 '127.0.0.1:666' */
define( 'YOURLS_DB_HOST', 'localhost' );
/** MySQL 表前缀字符 */
define( 'YOURLS_DB_PREFIX', 'yourls_' );

站点设置

/** YOURLS 安装 URL -- 字母小写,并且结尾不带斜线
** 如果你想配置到 "http://sho.rt", 就不要在浏览器中用 "http://www.sho.rt"(反之亦然) */
define( 'YOURLS_SITE', 'https://your-own-domain.com' );
/** 服务器时区 GMT 值,北京时间 +8 */
define( 'YOURLS_HOURS_OFFSET', 0 ); 
/** YOURLS 语言
** 更改此项设置来使用你优先的语言翻译文件,默认语言为英语
** 翻译文件 (a .mo file) 需要提前放在 /user/language 目录下
** 通过查看 http://yourls.org/translations 获取更多翻译信息 */
define( 'YOURLS_LANG', '' ); 
/** 允许多个短链接对应同一原链接
** 设置为 true 则表示短链接和原链接一一对应(默认 Yourls 设置)
** 设置为 false 则允许多个短链接对应同一原链接(类似 bit.ly 表现) */
define( 'YOURLS_UNIQUE_URLS', true );
/** Private 表示后台管理需要密码登陆作为默认手段来实现管理
** 设置为 false 意味着对公众开放模式(例如在内网配置或者测试安装)
** 查看 http://yourls.org/privatepublic 获取更多细节 */
define( 'YOURLS_PRIVATE', true );
/** 用来加密 cookies 的一串随机哈希值,并不需要记住这个,要让它尽量长而复杂,可以从 http://yourls.org/cookie 来获取随机哈希值 **/
define( 'YOURLS_COOKIEKEY', 'modify this text with something random' );
/** 登陆管理站点的用户和密码,密码可以是纯文本或者加密的哈希值
** YOURLS 将会自动加密本文件中的纯文本密码
** 查看 http://yourls.org/userpassword 获取更多信息 */
$yourls_user_passwords = array(
'username' => 'password',
// 'username2' => 'password2',
// 你可以利用'login'=>'password'这种格式来添加更多行
);
/** 调试模式,用来输出一些内部信息
** 对于运行中的站点默认是 false,在编码或者获取提交信息时才会启用 */
define( 'YOURLS_DEBUG', false );

链接设置

/** 链接缩短方式: 36 或者 62 */
define( 'YOURLS_URL_CONVERT', 36 );
/*
* 36: 生成数字和小写字母组成的短链接关键字(例如: 13jkm)
* 62: 生成数字大小写混合的短链接关键字(例如: 13jKm 或者 13JKm)
* 选择一个来设置,你开始创建连接之后最好别再更改
*/
/** 
* 保留关键字(这样子在创建链接时就会屏蔽这些关键字)
* 这里会填上负面、潜在误导性的词语
*/
$yourls_reserved_URL = array(
'porn', 'faggot', 'sex', 'nigger', 'fuck', 'cunt', 'dick',
);

主页设置

默认情况下如果安装了 yourls,那么 https://sho.rt 根目录是空的,如果不想要展示一个空空的根,可以在根目录下新建 vim index.php 加入以下内容

<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://yourdomain.com");
?>

修改用户名密码

yourls 中的密码可以直接修改 /user/config.php 文件中

<?php
$yourls_user_passwords = array(
    'name' => 'md5:71688:0ce43474167f743b7b92d046ae970801',
);

直接修改后面密码hash部分,再下一次启动时 yourls 会自动加密该密码

如果使用之前我的Docker方式安装的,需要在 docker-compose.yml 中设定好密码,这样重新启用 docker-compose 即可。

插件

官方在 GitHub 上总结了非常多的插件,可以根据自己的需求找到想使用的插件。

使用插件的基本流程如下,所有的插件都可以使用这样的方式安装启用:

  • 将插件拷贝到 /user/plugins/插件名/ 目录下
  • 然后在管理页面激活插件

Allow Hyphens in Short URLs

官方默认插件,允许在短域名中加入 - 短横线,有些时候为了易读性加上字符分割还是非常易识别的。

Random Keywords

默认 yourls 的短链接是数字递增的,随机短链接插件将短链接变成随机字符串。

YAPCache

将点击缓存,减少数据库读

YAPCache 是 Ian Barber’s YOURLS APC Cache 插件的fork版本,增加了缓存等等功能,不要同时安装这两个版本。

Conditional Toolbar

可以修改短域名的模式,比如将 https://sho.rt/abc 变为 https://sho.rt/m/abc 这样的模式,那么可以在 /m/ 下显示一个工具栏,不推荐使用,影响用户体验。

Qr code

在短链接后面添加 .qr 显示二维码

Public Prefix ‘n’ Shorten

处理 http://sho.rt/https://google.com 这样的链接不指向 admin

google-analytics-for-yourls

在admin中可以添加track变量,这个插件会添加一些 Google Analysis 的参数 GA campaign info,对于需要大量追踪信息的商家来说很好的插件。

google-analytics-yourls-plugin

给stats & admin page 添加 GA 分析,只有当访问 https://gtk.pw/ins+ 这样带 + 号的短链接才会被追踪到 Google Analytics

在将 plugin.php 放到 user/plugin/ganalytics 目录下之后,需要在 config 文件中定义

define(GANALYTICS_ACCOUNT, "UA-XXXXXX-UU");

YOURLS-GA-MP-Tracking

另一个 GA track

什么时候使用短链接

短域名服务或许是兴起于 Twitter 只能写140个字开始,因为有限的文字数量,所以必须要非常有效的传递每一个信息,所有不能把文字浪费在长链接上,自从 t.co 开始就源源不断的开始涌现出各种各样的短链接服务,所以应该在什么时候使用这个服务呢,我总结了一下我个人用的几个情况

  • 需要追踪链接点击情况,虽然用 Google Analysis 也能够做,但是短链接明显更加简单
  • 需要隐藏掉长链接的尾巴,一方面是为了链接美观,一方面也是隐藏真实的长链接

reference


2018-04-11 linux , docker , url-shorten , url , domain

域名相关网站及价格整理

前段时间关注了一下域名生意,然后自己也是因为腾讯的优惠券买了一个 club 的域名,看了这么多天的域名,而现在顶级域名又原来越多,虽然 .com 域名依然占据着互联网的绝对位置,但随着未来大家对互联网的认识加深,应该会普及开其他通用顶级域名,所以我感觉其实也没有必要屯一些特殊的域名,除非真的能够买到 a.liveyoutube.tv 这样的域名,其他的域名真的已经不重要了,前两年可能还有千万的域名价格成交,这两年都已经听不到了。如果真的有域名的需求,不妨考虑下品牌的名字,能够有 .com 域名最好,不然 youtu.be 不是也挺好。

域名注册局

腾讯云

垃圾腾讯云要不是有优惠券才不会使他。

https://buy.cloud.tencent.com/domain?price=1

Google Domains

这是Google域名的价格,大部分都是非常统一的,续费和转入都非常方便,提供免费的隐私包含和免费的域名邮箱转发

https://support.google.com/domains/answer/6010092?hl=en

namecheap

另一个比较著名的域名贩卖商

https://www.namecheap.com/domains.aspx#domain_tab_pricing

name.com

网址

https://name.com

namesilo

网址

https://www.namesilo.com/

域名价格对比

tld-list

网站地址

https://tld-list.com/

可以查看一千多个顶级域名在各个网站上的价格。

domcomp.com

网站地址

https://www.domcomp.com/

另一个域名比价网站,不管是新购还是renew都可以先上这两个网站看一眼,然后再选择转入到哪一家。

域名注册量统计

通用顶级域名注册信息

地址

https://ntldstats.com/

该网站上能看到全世界的域名注册量信息,包括注册局信息,顶级域名注册量信息。比如这里 就能看到Google刚开放的 .app 顶级域名的单日注册量。

域名是否被注册

特色后缀

fm

fm 是密克罗尼西亚国家顶级域名,当然fm也可以是调频广播,fm域名后缀非常适合拿来做广播网站,音乐广播网站。

dianying.fm
douban.fm
lizhi.fm
last.fm
yuedu.fm
987.fm
tingshuo.fm
qingting.fm
360.fm

fm 域名相对较贵,基础年费 60 刀以上

tv

.tv为吐瓦鲁国家及地区顶级域的域名,很容易让人联想到电视,视频等等,因此经常被用来做视频相关的站点。

pw

也是一个国家的顶级域名,不过有些废,因为 pw 啥都沾不上,所以也就便宜。


2018-04-10 domain , price , collection , registry , gtld , google , godaddy , namecheap

git 分支管理

提高分支管理,就不得不提Vincent Driessen很早之前提出的策略,他提出来几点

  • 唯一主分支
  • 开发分支,日常开发,发布 nightly
  • 临时分支,功能分支从 develop 分支拉,预览版分支从最新 develop 拉,bug修补分支从 master 拉及时修复合并到master和develop

下面沿着经典的 master 和 dev 分支模型,讲两点保证 history 干净的方法。

小型feature使用 squash merge

小型 feature,or bug,能够在几小时内解决的 branch,可以使用 squash merge

# under master
git merge --squash private_feature_branch

大型 feature 使用 rebase 整理 history

对于大型分支,大型功能,可能需要花费长时间 working,需要提交数百次commit的分支,那么使用 squash 可能会导致一次提交有成千上万行代码,非常不利于 code review。那么这个时候就需要使用 rebase 的交互模式。可以参考之前的文章 来学习一下rebase基本的使用。

rebase 的交互模式非常强大,可以用来修改过去的提交,分割提交,合并提交,甚至重新排序提交。

# on feature branch
git rebase --interactive master
git rebase -i master

当使用交互式rebase时,会显示一个编辑器,其中包含了一系列的命令和提交,比如下面三次提交,默认都为 pick,表示不修改该 commit,

pick 9c422c5 Fix bug
pick 8821164 Change html
pick 89e9f73 Update

将第二次提交修改为 s, squash,并保存

pick 9c422c5 Fix bug
s 8821164 Change html
pick 89e9f73 Update

那么第二次提交就会合并到第一次提交,最下面的提交为最新的提交,从上到下为旧->新,当保存退出时会弹出新的编辑器,可以在该编辑器中,书写新的提交信息,然后保存。

不过需要注意的是,永远不要改写 public 或者 master 已经发布的分支

经典分支模型的问题

这几点都是老生常谈的要点了,经典的分支模型理论上除了 master 和 develop 分支外,其他分支都不应该存在于远程仓库中。当然理论和实际总是有出入的。Vincent Driessen 的分支模型固然合理,但是并不能满足所有的开发需求。

  • 当大型 feature 的合并,可能导致 master 分支 build 失败,这个过程也就违背了如今的软件开发持续集成的思路,经常将修改集成到现有的系统中,可以尽早的发现错误
  • 如果使用 --no-ff 来合并分支,会出现额外的 Merge branch xxx of git@github.com 这样的无意义的 commit 出现,导致 master 线非常杂乱

解决经典分支模型的问题

考虑所有开发都在 master 进行

如果考虑所有的开发都在 master 上进行,本地开发者需要经常 git rebaseorigin/master 上最新内容拉到本地,开发者推荐在本地维护小型的分支,一旦有可使用的代码立即提交到 master 中持续集成,从提交到合并中间可以加上 review 和 test 。

避免使用共享的远程分支

当所有的开发都在 origin/master 上进行时,开发者需要将所有的修改在最新的远程master上惊醒,以保证每次的开发都能够正常被合并而不会产生冲突。保证了这一点就可以避免在大量feature分支合并时产生的 integration hell

如果使用 Gerrit,或者 Phabricator 等等 code review 工具那么这些集成就更方便了

从 origin/master 发布 release

每一个发布都有自己的 tag,并且有独立于 origin/master 的分支,加入有 hotfix,那就直接添加到 release 分支,并且 cherry-pick 到 master 分支。如果使用固定的 tag 和 分支命名方法,可以使用CI自动针对 tag 发布,整个过程对开发流程透明,开发者甚至可以不关心发布,而只关心 tag,让后面的流程自动在 CI 中执行。

只使用 fast-forward merges

避免大量的无意义的 merge commits 将仓库搞的乱七八糟,只使用 git rebase 或者 git cherry-pick ,rebase 可以让历史提交线非常清晰,这样 git bisect 也能快速的定位到问题。

如果使用了 Gerrit,那就意味着提交了一组 commit 到 origin/master,你可以使用 cherry-pick 来任意调整 commit 的顺序。

reference


2018-04-09 linux , git , github , branching , svn , version-control

私人网盘 NextCloud

NextCloud 就不多介绍了,把他看成一个 Dropbox 的私人托管版本,相比于将数据交给 Dropbox ,NextCloud 则需要自己负责自己数据的安全。这里记录下使用过程中的一些问题吧。

安装

推荐使用 Docker compose 来安装 熟悉 Docker 的情况下,基本上是一键安装的。

docker-compose up -d

然后享受 NextCloud 带来的极速体验吧。

关于插件

虽然默认 NextCloud 自带的插件已经非常丰富了,但是有些功能还是需要一些插件才能完成,幸好 NextCloud 的插件库已经非常丰富,直接 admin 后台点击安装即可。我在使用过程中,发现视频,文档都可以预览,而 mp3 文件点击之后竟然直接给下载了,所以找到了 audioplayer 这样一个插件,可以让我在线预览歌曲。

而关于其他的安全的,媒体的很多插件都可以在插件库或者应用库中找到。二步验证的推荐安装。

关于使用

NextCloud 的权限管理已经非常详细了,公开分享,私密密码分享,过期时间,完全能够满足所有的分享需求,在看使用 Manual 的时候,发现 NextCloud 和 Dropbox 一样可以设置一个公开文件夹,然后别人可以通过该文件夹来给你上传文件,这个也是非常不错的了。

关于客户端

除了 Dropbox 那么良心,所有平台都提供客户端之外,我也只有见到 NextCloud 那么良心提供全平台的同步客户端了。

sudo add-apt-repository ppa:nextcloud-devs/client
sudo apt-get update
sudo apt install nextcloud-client

PPA 中安装,也可以直接下载 AppImage。其他两个平台就直接安装就行。

来最后给大家分享一首歌:https://nc.einverne.info/s/SbN7zYBKiHMeWs5

总结

因为所有的数据都需要自己来保管安全,所以一方面要做到服务器的安全,另一方面也要保证 NextCloud 的安全,到目前为止,我还是依然使用 Dropbox 作为主要个人存储同步,NextCloud 作为 backup。如果你从来没有听说过 Dropbox 那么可以使用我的邀请 https://db.tt/isyvu6ny 来注册,你我都可以多得 500M 空间。对我而言这 500M 的空间远比某盘 1T 的空间要重要的多。如果你认为 Dropbox 仅仅是一个同步盘的话,请参考下这篇 文章,你不仅能够拿 Dropbox 来托管静态文件,甚至可以借用 IFTTT 来完成很多意想不到的事情。


2018-04-08 linux , nextcloud , dropbox , file-sharing , file-syncing , self-host

关于通用顶级域名 .xyz

为什么现在这个时机突然关注了 .xyz 这个域名呢,最直接的原因是,疼讯云给了我100元的优惠券,看了一圈续费VPS似乎不太划算,算来算去也只有购买一个域名值得一些,但是看了一圈疼讯提供的顶级域名,.cn 臭名远扬是不会买的,.com 几乎已经注册不到好记的域名了,.info 我自己有了一个einverne.info 再买个似乎也不知道买什么好了,于是 .xyz 这个很显眼的域名成为了我考虑的目标。然后突然想起来字母表公司(对就是那个 alphabet 公司),他的官网是 https://abc.xyz 好记又贴合名字,顿时看到了希望。

关注域名的人应该会经常看到这个词 gTLD, 全称是 generic Top Level Domain,中文是通用顶级域名,通俗的来讲也就是我们经常遇到的 .com, .net, .org 等等域名后缀。不同国家有自己的国家顶级域名,比如中国的 .cn,还有美国的 .us,还有日本的 .co.jp 等等,不同的行业机构也都有不同的后缀,一般学校教育机构会有 .edu,政府机构会有 .gov,军事机构会有 .mil 等等。1

提到 .xyz 域名就不得不提到 Daniel Negari ,在无数的报道中,Negari 因为独到的眼光预先将 .xyz 的通用顶级域名给注册了,所以让 .xyz 变得成为 .com 之后渐渐流行的通用顶级域名。他在采访中说的最多的一句话就是字母表既然以 .xyz 结尾,那么域名也应该如此2。在 Google 重组还没有使用 abc.xyz 域名前,每天有 3000 多注册,而 Google 重组成 Alphabet 之后每天的注册量已经上升到 10000.

很多人追问的一个问题就是 .xyz 域名会不会火,其实面对着越来越多的通用顶级域名,其实原本稀缺的 .com 域名早已经成为了互联网的历史,如果说以前人们还只认识 .com, .org 那么互联网的使用者是会变的,当足够多的人认可了以顶级域名,那么自然不在会有一个 .com 的域名再能够卖几千万几百万了。

注册通用顶级域名

想必看到这里很多人会想问,与其说去买一个 .com 的域名,还不如自己去注册一个顶级域名,其实注册顶级域名是有门槛的, ICANN 每几年都会开放一次注册,比如 .xyz 就需要 $185,000 来获取。如果想要获取自己的 gTLD,那么需要提交一份完整的申请,还有准备好大约 $200,000 美金,当然还要排除掉你想要注册的顶级域名没有人来和你抢。ICANN 有一份简单的说明几乎可以涵盖经常被问到的事情。

关于起名

Paul Graham (著名初创企业投资人)在他自己的博客 写过关于初创企业命名相关的内容,他说“如果你开始了一个 X 企业,但是你拿不到 X.com,那么你就应该考虑改名字”,这一句话不仅道出了 .com 域名在互联网的地位,也让我们看到了起名对一个企业的重要程度,也才会出现天价的域名购买。

于是我就顺着这个线索,找了一些有意思的企业,找一找他们的名字的由来,Google 自然不比说,于是我先找到了 Trello ,之前 也介绍过的一个看板类应用。在 Quora 上面我找到了这样一篇文章,经历过早期创业的人提到了他们苦恼如何命名自己的产品,从内部代号 Trellis ,到他们雇一名专业起名的人给出 “lasagna” ,到全公司头脑风暴给出各种谐音,日语结合,单词拼凑, Kardboard,Hippolist,Listly,Idealist,经过无数的讨论,他们甚至想要去买 trell.is 域名,但是价格无法接受,最终在没有给注册的 .com 与域名中,他们找到了 trello.com 。那一切讨论就终止了。

还有Amazon 原来叫 Cadabra.com ,但是因为不好记,很快就被淘汰了。后来 Bezos 自己发现了 amazon.com 3

reference


2018-04-07 domain , google , alphabet , hooli , xyz , gtld

电子书

最近文章

  • MySQL 中的日志配置和管理 MySQL 中默认是没有开启日志记录的,所以需要手动修改配置文件开启日志。而在 MySQL 中我们需要关心的有三类日志:
  • Java 查漏补缺之:ThreadLocal 使用 ThreadLocal 线程本地变量,每个线程保存变量的副本,对副本的改动,对其他的线程而言是透明的。
  • 为知笔记导出和备份 WizNote 已经用了好几年,虽然也一直在续费,但总感觉将死不死,基于整理这几年近 4000 条的笔记的目的,也一方面为迁移出 WizNote 的目的,研究一下 WizNote 笔记导出和备份的方法。
  • Nginx location 匹配规则 之前的关于 Nginx Config 的文章是当时看 Nginx 书记录下来的笔记,很大略,没有实际操作,等终究用到 location 的时候发现还是有很多需要注意的问题,比如匹配的优先顺序,比如 root 和 alias 的区别等等,所以单独拿一篇文章来记录一下目前遇到的问题,并来解决一下。
  • koajs 简单使用 Koa 是一个背靠 Express 的团队设计的全新的 Web 框架,旨在使之成为一个更轻量,更丰富,更加 robust 的基础框架。通过促进异步方法的使用,Koa 允许使用者抛弃 callback 调用,并且大大简化了错误处理。Koa 并没有将中间件绑定到核心代码,而是提供了一组优雅的方法让编写服务更加快速,通过很多第三方的扩展给 Koa 提供服务,从而实现更加丰富完整的 HTTP server。