godaddy的.app域名申请一年的免费SSL

.app域名是谷歌推出的自带免费SSL证书的域名, 如果你在Godaddy购买了.app域名, 那么你的域名会自动带有一年的免费SSL证书(需要在Godaddy申请), 本文简单写一下申请方法.

假设你申请到的域名是example.app

1, 生成csr
参考Godaddy帮助文档里的这篇文章

$ DOMAIN=example.app
$ openssl req -new -newkey rsa:2048 -nodes -keyout $DOMAIN.key -out $DOMAIN.csr

回车以后会问你一些信息,例如国家,城市等,在询问到Common Name (e.g. server FQDN or YOUR name)时建议填写你的域名信息,例如example.app

然后就会生成下面2个文件
example.app.csr
example.app.key

去Godaddy页面上申请SSL证书, 当然, 需要.csr文件中的内容

只需要几分钟, Godaddy会为你准备好证书, Download之. Download的时候, 由于”Server type”没有”Nginx”, 因此我选择了”Other”

2, 准备SSL证书
参考Godaddy帮助文档里的这篇文章

$ unzip example.app.zip

$ ls    #会解压出来2个文件
8a982df92de94106.crt  gd_bundle-g2-g1.crt  example.app.zip

生成example.app.crt文件

cat 8a982df92de94106.crt gd_bundle-g2-g1.crt >> example.app.crt

(more…)

Read More

VMware性能优化

VMware Player里安装的虚拟机一般都特别卡(即使你的物理机配置很高), 原因是VMware默认设定在本地生成一个swap文件来当作虚拟机的内存(这能不卡吗??), 本文介绍一些优化参数.

将以下选择写入到你的.vmx文件中(仅适用Windows物理机)

MemTrimRate = "0" 
mainMem.useNamedFile = "FALSE"
sched.mem.pshare.enable = "FALSE" 
prefvmx.useRecommendedLockedMemSize = "TRUE"
prefvmx.minVmMemPct = "100"

如果你的 Host 是 Linux 而不是 Windows 则需要用如下选项代替上面的 mainMem.useNamedFile = “FALSE”

mainmem.backing = "swap"

参考文档
Windows 7 kills VMWare performance by disk caching?


2024.10.30 补充:

对于 Windows 11 系统, 建议关闭 Virtualization-based security 功能.

查看 Virtualization-based security 功能开启状态: Win + R, 运行 msinfo32, 即可看到下图

关闭 Virtualization-based security: 打开Windows SecurityDevice SecurityCore isolation, Disable Memory integrity.


2025.02.19补充:

Disable Side Channel Mitigations: https://knowledge.broadcom.com/external/article?legacyId=79832

Read More

交叉编译golang程序

本文演示了在ubuntu16.04上交叉编译golang程序的过程

配置本地golang环境

$ wget https://dl.google.com/go/go1.10.2.linux-amd64.tar.gz

$ tar zxvf go1.10.2.linux-amd64.tar.gz

$ sudo mv go /usr/local/

$ echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.profile
$ echo 'export GOROOT=/usr/local/go' >> ~/.profile
$ echo 'export GOPATH=~/go' >> ~/.profile      #v2ray的工作目录,down下来的源码和编译生成的文件均在这里

$ source ~/.profile && echo $GOPATH

$ go version
go version go1.10.2 linux/amd64

交叉编译golang程序

$ go get -u v2ray.com/core/...
$ go get -u v2ray.com/ext/...

$ go install v2ray.com/ext/tools/build/vbuild

$ $GOPATH/bin/vbuild -os=linux -arch=arm

编译完成的程序位于$GOPATH目录下. (more…)

Read More

我要出家当和尚去………

我要出家当和尚去
某个大雨倾盆的夜晚
你会偷偷来看我吗
唉,还是别来吧
我会拒绝与你相认

不要在山门静坐
不要和方丈软磨硬泡
不要伪装虔诚的香客
我拒绝与你相认
我在禅房看竖排繁体的肉蒲团

我再也不相信爱情了
猪肉都吃不起
还留在滚滚红尘干啥
如果你非要找我再续前缘
那就——带上一斤绝味鸭脖吧

鸳鸯偎,蝴蝶双飞
小雨在烟雾里盘着腿
你知道在哪里能找到我
女道观的隔壁,墙根下面

——南无阿弥陀佛,在吗?
——急急如律令,快进来!

Read More

Django parse a json/dictionary reminder on template

如果想在一个Django template里引入json, 正确的template写法为

python的views.py的写法

# -*- coding: utf-8 -*-
from django.shortcuts import render
from django.http import Http404, HttpResponse

def get_product(request):
context1 = {}
context1[‘env’] = ‘production’
context1[‘mydict’] = {"key1":"value1", "key2":"value2", "key3":"value3", "key4":"value4"}
context1[‘days’] = [1,2,3]

if request.GET.get("item") == "ec2" or not request.GET.get("item"):
return render(request, ‘main_content.html’, context1)
else:
raise Http404()

main_content.html使用extends引入index.html

{% extends 'index.html' %}
{% block content %}
{% for day in days %}
<li>day: {{ day }}</li>
{% endfor %}
{% endblock %}

index.html使用include引入sidebar.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div class="header">My page</div>
<div class="content">
<div class="sidebar">

<ul>
{% if env == 'production' %}
{% include 'production.sidebar.html' %}
{% elif env == 'development %}
{% include 'development.sidebar.html' %}
{% elif env == 'staging' %}
{% include 'staging.sidebar.html' %}
{% elif env == 'legacy' %}
{% include 'legacy.sidebar.html' %}
{% endif %}
</ul>

</div>
<div class="maincontent">

{% block content %} {% endblock %}

</div>
</div>
</body>
</html>

(more…)

Read More