GoDaddy域名续费优惠码

域名快要到期了,续费的时候,搜索了一下GoDaddy的域名续费优惠码,大多是购买新产品才能使用的,续费可以用的基本上没有。

后来在网上找到了一个方法,是把支付货币切换为INR₹(印度卢比)。在页面底部将续费货币从CNY¥(人民币)切换到INR₹之后,购物车会重新刷新价格。

以下是两种货币续费2年的价格对比:

  • CNY:域名费用:¥202.00,税费和费用:¥2.28,总计:¥204.28。

  • INR:域名费用:₹1,658.00,税费和费用:₹24.00,总计:₹1,682.00。

最后通过银联支付,支付¥163.99,相当于优惠了20%

使用Let's Encrypt生成通配符SSL证书

Let’s Encrypt宣布从2018-03-13起开始支持通配符证书

必备条件

不过想要生成通配符证书,有两个条件:

  1. 使用ACME v2协议
  2. 使用DNS验证域名所属权

实现了ACME v2协议的工具有很多,官方依然推荐使用Certbot,版本号>= 0.22.0。

通配符证书必须通过DNS进行域名所属权验证:DNS需要添加TXT记录。

生成证书

安装Certbot,选择相应的WebServer和操作系统,按照说明安装Certbot。

然后通过dns验证的方式生成证书:可以手动添加dns TXT记录,也可以通过插件自动添加dns TXT记录。文中特别指出,如果想要生成通配符证书,可以安装Certbot's DNS plugins。手动和自动都可以生成SSL证书,但是通配符的证书有效期也是3个月,使用插件自动生成、续期十分方便。

针对那些没有在列表中DNS服务商,可以去自行搜索。

本站域名解析使用的是DNSPod,可以使用certbot-dns-dnspod,使用pip安装。

安装完成后,到DNSPod控制台生成API Token,并保存在配置文件/path/credentials.ini

sudo certbot certonly -a certbot-dns-dnspod:dns-dnspod --certbot-dns-dnspod:dns-dnspod-credentials /path/credentials.ini -d latlonworld.com -d "*.latlonworld.com" --server https://acme-v02.api.letsencrypt.org/directory

# -a:指定使用的插件
# --certbot-dns-dnspod:指定dnspod使用的token文件
# -d:指定要生成证书的域名
# --server:指定ACME的版本

其他DNS plugins的使用也是类似的。

运行命令后,根据向导输入邮箱,同意条款,选择是否与EFF共享个人邮箱信息,然后DNS plugin创建DNS TXT记录,进行域名验证,然后生成SSL证书,然后删除DNS TXT记录。最后提示证书生成成功!

PS:生成证书时指定的域名*.latlonworld.com是通配符域名,但是并不包括latlonworld.com祼域名。

我第一次生成的证书只指定了*.latlonworld.com域名,出现了下面的尴尬。。。

letsencrypt-wildcard-without-naked

而同时包含通配符域名和祼域名的证书如下:

letsencrypt-wildcard-with-naked

本文只记录一些核心过程,其他可以参考以前的文章使用Let's Encrypt生成免费SSL证书

npm

安装

npm install <pkg>,安装pkg包到当前目录/node_modules下。

可以通过别名:npm i <pkg>快速安装。

通过npm -g install <pkg>可以安装到全局。

npm install,不指定包名,默认安装当前目录下的package.json中的所有依赖。

卸载

npm uninstall <pkg>,卸载当前目录安装的包。

可以通过别名:npm un, unlink, remove, rm, r快速卸载。

npm -g uninstall <pkg> --save,-g将全局卸载。

参考:http://stackoverflow.com/questions/13066532/how-to-uninstall-npm-modules-in-node-js

其他参数

--save和--save-dev参数

install和uninstall都可以使用--save和--save-dev参数,会将当前的依赖改动更新到package.json中。

--save会添加/移除package.json文件dependencies节点下的包名及版本号。

--save-dev会添加/移除package.json文件devDependencies节点下的包名及版本号。

-verbose

可以输出详细日志。

--registry

当使用install安装包的时候,是从官方的注册中心https://registry.npmjs.org/进行下载。

npm install --registry=https://registry.npm.taobao.org,将改为从淘宝的镜像中心下载。

JavaScript ES7 async/await

JavaScript中的异步编程解决方案一直在发展,从ES5的Callback到ES6的PromiseGenerator,再到ES7的async/await。对于开发人员越来越友好、直观,写法越来越符合人们的直觉。

async/await

Node.js 7.6以上版本才支持async/await。

async/await的目的是在Promise的基础上进一步简化异步的同步调用。

调用async函数时会返回一个Promise对象。当这个async函数返回一个值时,Promise的resolve方法会负责传递这个值;当async函数抛出异常时,Promise的reject方法也会传递这个异常值。

await“等待”的是一个Promise对象或其他任意value。如果await后面跟的不是一个Promise,它被转化为Promise.resolve(value)。

await只能在async内部使用。

例子

阅读剩余部分 -

nvm

nvm是Node Version Manager。当在一台机器上同时使用几个不同版本的Node.js时,使用nvm来切换非常方便。

  1. 安装方法

    参考:https://github.com/creationix/nvm#install-script

    通过cURL安装或更新:

     #这里安装的是0.33.2版本
     curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash
    
  2. 使用

    参考:https://github.com/creationix/nvm#usage

     #查看帮助
     nvm --help
    
     #查看nvm版本
     nvm --version
    
     #查看远程Node.js版本
     nvm ls-remote
    
     #安装相应版本的Node.js
     nvm install v7.9.0
    
  3. 设置默认node版本

     nvm alias default v7.9.0
    
  4. npm包安装位置

    使用nvm后,不同版本Node.js全局安装的npm包,在当前版本的子目录下:

    # node v7.10.0
    /home/user/.nvm/versions/node/v7.10.0/bin/pm2
    # node v8.1.0
    /home/user/.nvm/versions/node/v8.1.0/bin/pm2
    

使用Let's Encrypt生成免费SSL证书

官网:Let's Encrypt

Let's Encrypt是由互联网安全研究小组(ISRG,一个公益组织)提供的服务。提供免费、自动化、开放的证书签发服务。

Let's Encrypt颁发的证书有期是90天,需要在过期前进行续期,好在Let's Encrypt已经提供了自动续期的脚本。

官网推荐使用Certbot工具来部署Https证书。在Certbot首页上选择Web服务器及服务器OS类型,我们在这里以Nginx + CentOS 6为例来说明。

原文链接:https://certbot.eff.org/#centos6-nginx

  1. 生成证书

    1. 安装证书生成工具certbot-auto:

       wget https://dl.eff.org/certbot-auto
       chmod a+x certbot-auto
      
    2. 安装依赖

      运行./certbot-auto,安装所有依赖项。过程中可能会提示Virtualenv Command Not Found,需要安装pip、virtualenv包:pip install virtualenv

    3. 配置Nginx

      为需要配置https的站点添加以下配置,将访问/.well-known的请求指向本地目录。Let's Encrypt在生成证书的过程中,会在/var/www/www.xxx.com/.well-known目录生成一个临时文件,并且会访问类似于http://www.xxx.com/.well-known/acme-challenge/HGr8U1IeTW4kY_Z6UIyaakzOkyQgPr_7ArlLgtZE8SX的url,来检查域名配置是否有效。

      添加以下配置,并重启Nginx:nginx -s reload,如果reload不生效,可以试试restart。

       server {
      
           ...
      
           location /.well-known {
               alias /var/www/www.xxx.com/.well-known;
           }
      
           ...
      
       }
      

      即使证书生成之后,也需要保留Nginx的这一个配置,因为证书的续期还需要这一个配置。

    4. 通过向导生成证书

      运行./certbot-auto certonly,会通过向导方式一步一步来生成证书。过程中间会用到上一步在Nginx中配置的本地目录。

      对证书生成过程和原理比较熟悉的话,可以不使用向导方式,直接使用certbot-auto命令./certbot-auto certonly --webroot -w /var/www/www.xxx.com -d xxx.com -d www.xxx.com -w /var/www/thing -d thing.is -d m.thing.is可以快速高效地生成证书。

      生成的证书默认在/etc/letsencrypt/live/www.xxx.com/目录。

  2. 配置Nginx使用证书

    添加以下配置,并重启Nginx:nginx -s reload,如果reload不生效,可以试试restart。

     server {
    
         ...
         listen 443;
    
         ssl on;
         ssl_stapling_verify on;
         ssl_certificate         /etc/letsencrypt/live/www.xxx.com/fullchain.pem;
         ssl_certificate_key     /etc/letsencrypt/live/www.xxx.com/privkey.pem;
    
         ...
    
     }
    
  3. 检查证书的有效性

    打开浏览器,检查证书的有效性。

  4. 证书续期

    Let's Encrypt颁发的证书有期是90天,需要在过期前进行续期,好在Let's Encrypt已经提供了自动续期的脚本。

    官网说明,可以一天调用两次,如果检测到证书不需要更新,是什么都不做的,以减少意外造成的故障。

    先运行certbot-auto renew --dry-run命令检查证书自动续期是否正常,如果正常,将certbot-auto renew --quiet命令添加到系统的计划任务cron中,就可以实现证书自动续期了。

     01 1 * * * ./path/to/certbot-auto renew --quiet
    

    表示每天的1点1分自动执行续期脚本。

PS:更新完证书之后,需要reload nginx加载新证书,否则可能会出现提示证书过期的情况。

  • 2018-03-20更新

参考官网证书生成过程Certbot文档,中间关键的一步是验证域名的所属权,其中有两种方式,一种是通过DNS记录,一种是http方式,就是本文章写出的well-known URI方式,另外一种是tls-sni。

Let’s Encrypt宣布从2018-03-13起开始支持通配符证书,生成过程可以参考文章使用Let's Encrypt生成通配符SSL证书

在Mac上录制屏幕并制作gif

在Mac上录制屏幕超简单,只要使用自带的「QuickTime Player」+「ffmpeg」就可以了。

  1. 录制屏幕

    打开「QuickTime Player」,通过菜单「文件」->「新建屏幕录制 ⌃⌘N」弹出「屏幕录制」窗口,点击中间的红色录制按钮,这时会提示录制操作提示“点击以录制全屏幕。拖动以录制屏幕的一部分。点按菜单栏中的停止按钮以结束录制”。

    录制完成后,保存以后可以得到*.mov格式的视频文件。

  2. 将录制好的*.mov视频文件制作成gif

    ffmpeg的安装就不再赘述了。

    通过以下命令把录制好的.mov视频转为.gif图片

     /Users/user/Documents/Softwares/ffmpeg-79303-g0ffa9e6/ffmpeg -i demo.mov  -pix_fmt rgb24 -r 10 -f gif demo.gif
    

阅读剩余部分 -

解决升级到macOS Sierra后,WebStorm鼠标滚动太过灵敏的问题

刚升级到macOS Sierra 10.12正式版后,发现WebStorm的鼠标滚动非常灵敏,但其他应用却正常。

JetBrains官网上找到了解决办法:

  1. 首先下载open jdk8u112b403:http://bintray.com/jetbrains/intellij-jdk/download_file?file_path=jbsdk8u112b403_osx_x64.tar.gz

  2. 解压缩后移动到:/Library/Java/JavaVirtualMachines目录;

  3. 在WebStorm里双击"shift",输入switch jdk,选择Switch IDE boot JDK...,然后选中刚才下载的openjdk version 1.8.0_112,确定后WebStorm自动重新启动,问题就解决了。

以上解决办法应该也适用于PyCharm、IntelliJ IDEA、PhpStorm等。

后来发现,这个版本的jdk把WebStorm不能输入中文逗号的问题也解决了。