MENU

其他

阿里云静态站点OSS和CDN配置

1.创建OSS桶(Bucket)

在【资源包管理】下购买资源包后(区域最好选择中国大陆通用);点击【+】创建 Bucket,填写名称,选择区域,读写权限选择公共读

Read More

FreeMarker格式化数字的坑

周一下午群里有运营反馈导出的单据中总金额和每项目金额加起来对上,差了一毛钱;目测是我的问题,赶紧回了句“稍等,正在看。。。”就去看代码了,心想着这块应该不涉及四舍五入的问题,当时产品和各业务线约定的是一位小数,理论上不会出现问题;万万没想到,返回数据中有些是两位小数。

当时为了快速上线,代码写的不严谨,肯定是没保留一位小数先累加导致的;比如,三个100.04求和后变成了300.1,但每项都是100,就差了0.1。不过看了实际数据后,发现不是这个问题导致的;实际数据总共有三条100200.5100.05,页面显示的是100.0200.5100.0,总金额400.6

Read More

HTTP 代理池实现

首先,使用付费代理的用户可以忽略本文;如果经常使用免费代理又觉得不稳定的用户可以尝试下,尤其适合爬虫这类需要频繁换代理IP的场景。

该项目fork自 https://github.com/henson/ProxyPool;原项目使用了mongodb作为代理的存储,返回json类型数据,大概是这样:

{
    "ip": "27.4.70.129:53281",
    "type": "http"
}

改造之后,将mongodb换成了redis,加入了cron任务,返回文本数据:27.4.70.129:53281

项目由四个功能构成,api、getter、storage和tasks。

api

//程序版本
const VERSION = "/v1"

// 提供api服务
func Serve() {
    mux := http.NewServeMux()
    mux.HandleFunc(VERSION+"/ip", ProxyHandler)
    log.Println("Starting server", util.NewConfig().Host)
    http.ListenAndServe(util.NewConfig().Host, mux)
}

//代理处理器
func ProxyHandler(w http.ResponseWriter, r *http.Request) {
    if r.Method == "GET" {
        w.Header().Set("content-type", "text/html")
        ip := storage.ProxyGet()
        w.Write([]byte(ip))
    }
}

提供http服务,GET http://127.0.0.1:8080/v1/ip返回代理ip

Read More

常用 LaTex 数学符号表

Greek Letters

符号命令符号命令符号命令符号命令
(alpha)alpha(beta)beta(gamma)gamma(delta)delta
(epsilon)epsilon(zeta)zeta(eta)eta(theta)theta
(iota)iota(kappa)kappa(lambda)lambda(mu)mu
(nu)nu(xi)xi(omicron)omicron(pi)pi
(rho)rho(sigma)sigma(tau)tau(upsilon)upsilon
(phi)phi(chi)chi(psi)psi(omega)omega
(Gamma)Gamma(Lambda)Lambda(Sigma)Sigma(Psi)Psi
(Delta)Delta(Xi)Xi(Upsilon)Upsilon(Omega)Omega
(Theta)Theta(Pi)Pi(Phi)Phi

Binary Operation Symbols

符号命令符号命令符号命令符号命令
(pm)pm(cap)cap(diamond)diamond(oplus)oplus
(mp)mp(cup)cup(bigtriangleup)bigtriangleup(ominus)ominus
(times)times(uplus)uplus(bigtriangledown)bigtriangledown(otimes)otimes
(div)div(sqcap)sqcap(triangleleft)triangleleft(oslash)oslash
(ast)ast(sqcup)sqcup(triangleright)triangleright(odot)odot
(star)star(vee)vee(+)+(bigcirc)bigcirc
(circ)circ(wedge)wedge(-)-(dagger)dagger
(bullet)bullet(setminus)setminus(amalg)amalg(ddagger)ddagger
(cdot)cdot(wr)wr

Read More