for循环中的++i和i++有什么区别

i++和++i是C系语言的经典课题, 我们知道i++和++i的表面区别为++i的返回值为i+1,而i++则为i,而它们的底层实现分别为: ++i实现: int operator ++ () { return i+1; } i++实现: int operator ++ (int flag) { int j = i; i += 1; return »

月杪 月杪 on Code

我眼中程序员简历

为开源项目贡献过代码 +10 接触过3种以上编程语言 +10 有业余编程项目 +10 有持续维护的开源项目 +10 简历为PDF格式或独立HTML页面 +5 有独立域名的技术博客 +5 有自己的Github地址 +5 同时接触过编译语言和脚本语言 +5 只接触过一种编程语言 -5 屡次强调自己的Master/Doctor学历 -5 简历格式为docx -5 简历中提到熟悉Microsoft Office -5 Github中全是Markdown项目 »

月杪 月杪 on Other

利用Github的Webhook功能进行持续集成

Webhook,也就是人们常说的钩子,是一个很有用的工具.你可以通过定制Webhook来监测你在Github.com上的各种事件,最常见的莫过于push事件.如果你设置了一个监测push事件的Webhook,那么每当你的这个项目有了任何提交,这个Webhook都会被触发,这时Github就会发送一个POST请求到你配置好的地址. 这样你就可以通过这种方式去自动完成一些重复性工作.比如:你可以用Webhook来自动触发一些持续集成(CI)工具的运作. Github开发者平台的文档中对Webhook的所能做的事是这样描述的: You’re only limited by your imagination. Github Webhook和以前写过的通过travis自动将Jekyll持续部署到服务器上相比: 不需要暴露(经过travis加密的)服务器私钥 不需要通过travis的虚拟机中转(那玩意儿的带宽实在是....) 当然和travis相比也有缺点: 需要有一台属于自己的外网服务器 自己的Webhook响应服务. 开始 要利用webhook进行持续集成工作至少需要以下几个条件: 可以外网访问的服务器 接收并响应GitHub Webhook的服务 GitHub Webhook的配置 服务器 还有什么好说的... 如何选购VPS »

如何选购VPS

什么是VPS VPS全称Virtual Private Server(虚拟专用服务器).其实就是物理机上开出的虚拟机. 很多IDC服务商都喜欢给自己的VPS起一个听起来一脸懵逼的名字比如阿里云的ECS,比如腾讯云的CVM等等. 直接说主机或者直接说实例感觉在他们的企业文化里很难接受似的,一定要起个名字. 其实我想原因是AWS这个云服务的鼻祖把他们的机器取名EC2. 有些人不管什么时候都说ECS,就是典型的只用过阿里云的傻缺. VPS虚拟化的分类 目前市场上的虚拟化技术主要分为4类: 1.XEN XEN的典型代表是早期的AWS和老牌VPS服务商Linode,不过这两家都迁移到了KVM.目前主流服务商已经全面放弃XEN. 2.KVM 目前的主流全虚拟化技术,全面替代了XEN.XEN算是Linux的一个应用,而KVM是Linux的一个模块. 下面提到的服务商除了微软以外都是使用的KVM. 3.Hyper-V 微软自家虚拟技术,Windows专享.(不然你以为Azure的母鸡是一堆Linux?) 本来Hyper-V在这个领域没什么存在感,但耐不住Azure这玩意市场占有率高啊 4.OpenVZ OpenVZ本质上并不是虚拟化,而是容器.相对于XEN和KVM而言它的性能损失是最小的(几乎可以忽略不计),并且内存/CPU/硬盘伸缩不用重启(XEN和KVM是需要重启后才能正确配置的). 而OpenVZ最大的缺点在于虚拟隔离化非常低,并且硬件层面权限较低甚至不能拥有自己的独立Linux内核. 同时OpenVZ最大的问题并不在于技术层面,而在于绝大部分服务商使用OpenVZ的目的是内存可以超售.超售是什么概念呢?简单说一台32G内存的物理机可以开出64台内存1G的VPS. 其他 除了上面说到的以外还有一些非主流的虚拟技术,比如VMWare这种商业解决方案(当然价格嘛...).不过各种其他虚拟技术加起来份额不到1%. VPS的网络 网络也分几个考虑方向,延迟 »

利用Guetzli压缩jpg图片

Guetzli is a JPEG encoder that aims for excellent compression density at high visual quality. Guetzli-generated images are typically 20-30% smaller than images of equivalent quality »

月杪 月杪 on Other

在Nginx中配置Google-Analytics

原因 在Nginx端配置Google-Analytics和在HTML中加载Google-Analytics有几个显著的有点, 杜绝用户到Google Analytics之间的网络问题,特别是国内(尽管已经解析到Google在北京的服务器) 防止adblock这样的软件屏蔽 提升页面加载速度 配置方法 nginx 配置 server 块内加入以下内容 userid on; userid_name cid; userid_domain moonagic.com; userid_path /; userid_expires max; if ($http_accept_language ~* '^(.+?),') { »

月杪 月杪 on Nginx

利用OpenSSL加解密文件

openssl包括了大量的对称,非对称,摘要等加密算法,我们可以选用对称算法对文件进行加密,比如3DES,AES. 比如我们要对ocserv-0.11.11.tar.xz进行加密,那么我们可以使用下面的方法 openssl des3 -salt -in ocserv-0.11.11.tar.xz -out ocserv-0.11.11.tar.xz.des3 其中-in是输入文件,-out是加密后输出的文件 之后会提示你输入一个用于加密的密钥,输入一个自己能记住的密码 enter des-ede3-cbc encryption password: Verifying - enter des-ede3-cbc encryption password: 然后我们可以试试加密后的文件是否可以打开 tar Jxf ocserv-0.11.11.tar.xz.des3 tar: »

月杪 月杪 on OpenSSL

使用certbot工具签发泛域名证书

Letsencrypt的泛域名证书计划2月27日正式发布,结果临近的时候突然宣布延期了.本以为会像ECC中间证书延期一样等不到了,结果今天一大早就看到了正式发布的消息. 看到了acme.sh已经正式支持泛域名证书签发的消息,结果acme.sh支持的dns验证暂时并不支持我所使用的Google Cloud DNS. 于是尝试使用certbot(这也是一直以来我使用的签发工具). 其实和签发单域名的方法差不多,只是需要多一个--server参数 ./certbot-auto \ --server https://acme-v02.api.letsencrypt.org/directory \ --manual \ --preferred-challenges dns-01 certonly 接着会让你填入需要签发的域名,直接输入类似*.example.com就好. 后面的dns认证就和单域名一样了. 当然上一步你可以选择传入csr文件: ./certbot-auto \ --server https://acme-v02.api.letsencrypt.org/directory \ --manual \ »

使用CURL请求HTTPS页面时指定IP

一般在使用CURL请求自定义IP地址并且指定HOST的话可以这样 curl http://127.0.0.1/ -H 'Host: moonagic.com' 但是如果你需要请求的地址是HTTPS的就不行了, curl [IP]:443 -H 'Host:moonagic.com' curl: (52) Empty reply from server curl https://[IP]:443 -H 'Host:moonagic.com' curl: (60) SSL certificate problem: »

月杪 月杪 on CURL, HTTPS

删除通过pkg安装的程序

Mac下安装程序是非常便捷的. 但是这仅仅是局限于dmg/App安装,当你使用pkg安装了程序而开发者又没有提供卸载工具而你又需要卸载的话就完全摸不着头脑了. 不过我们可以通过pkgutil这个工具来搞定. 我们以mtr这个软件为例,我们并不知道mtr.pkg到底安装了什么文件,那么可以先执行pkgutil --pkgs pkgutil --pkgs com.apple.pkg.OSX_10_13_IncompatibleAppList.16U1254 com.apple.pkg.CustomVoice_en_US_nora.16U1181 com.apple.pkg.update.os.10.13.1Supplemental.17B1003 com.apple.pkg.DevSDK_macOS1013_Public com.apple.pkg.XProtectPlistConfigData.16U4027 com.apple.pkg.MRTConfigData.16U4028 com.apple.pkg.CLTools_Executables com.apple.pkg.GatekeeperConfigData.16U1300 org.rudix.pkg.mtr # 这就是我们要找的pkg com.apple.pkg.XProtectPlistConfigData.16U4024 com.apple.pkg.update.os.10.13.2SupplementalPatch.17C205 com.apple.pkg.MRTConfigData.16U4017 com.apple.pkg.MRTConfigData.16U4013 com.apple.pkg.GatekeeperConfigData.16U1259 com.apple.pkg.GatekeeperConfigData.16U1265 com.apple.pkg.CLTools_SDK_OSX1012 com.apple.update.fullbundleupdate.17D47 »

月杪 月杪 on Mac

Nginx 1.13.9 HTTP/2 server push 介绍

2018年2月20日发布的NGINX 1.13.9开始支持HTTP/2服务器推送功能. HTTP/2规范中定义的服务器推送允许服务器抢先将资源推送到远程客户端,预计客户端可能很快会请求这些资源.通过这样做,您可以在页面加载操作中将RTT(往返时间 - 请求和响应所需的时间)减少一个RTT或更多,从而为用户提供更快的响应. 配置HTTP/2 server push server { # Ensure that HTTP/2 is enabled for the server listen 443 ssl http2; ssl_certificate ssl/certificate.pem; ssl_certificate_key »

月杪 月杪 on Nginx

用于查看git代码库的终端界面工具

我们查看一个复杂项目Git提交记录的时候通常都需要借助GUI程序才能比较方便,因为直接使用终端查看的话难度会随着项目复杂度的提高而指数级提升. 所以诞生了git-fork, Sourcetree等GUI工具. 但目前有了GRV这样的终端查看工具,比git自带的查看方法方便了很多甚至不输上面的GUI工具. »

月杪 月杪 on Git

Git配置非22端口访问

有时候我们需要通过非22端口连接git(比如你遇到了一个以为更换了ssh端口就会给服务器安全带来突飞猛进提升的CTO),同时又不想使用GitHub的时候因为更改了默认端口带来麻烦. 其实很简单,通过.ssh下的config文件就可以搞定. 很简单的通过config做一个映射(一般不会存在这个文件,自己新建一个就行) # 映射一个别名 host git.example.com hostname git.example.com port 2222 像上面这样就成功的在使用类似 git clone git@git.example.com:xxx/xxx.git 命令的时候走2222端口,而当你使用类似 git clone git@github.com:moonagic/Jekyll.git 命令的时候走默认的22端口. »

月杪 月杪 on Git

年终总结

去年忘了写年终总结,今年都到2月了还是写一下. 今年算是搬进新家的第一年 第一次拥有了一个属于自己的书房.自己在网上买了书架和书桌送到家然后自己看着说明书来安装,感觉挺不一样的. 给自己买了垂涎已久的P2415Q显示器 体验了一番24寸4k虽然比不上MacBook Pro原装显示器但依然远远比普通显示器的显示效果好很多.只是玩游戏的话完全带不动. 心水了一段时间的Amplifi,最终还是买了 买Amplifi以前是用的网件的WNDR4300和去年比较火的斐讯,都自己刷成了OpenWRT.不过使用了Amplifi以后再也不想使用其他的路由器了. 路由器是放在书房的,由于位置的问题在客厅和阳台几乎就没有什么型号了.在更换了Amplifi加上配套的扩展器以后客厅和阳台也能一直跑满100M带宽了.(实际内网可以跑到接近1000M,不过目前使用的宽带是100M) 去了台湾 十一长假提前请了3天假,去台湾放松了8天.不得不说在不同的文化下差距真的好大. 买了一块树莓派 当作国内的DNS缓存服务器.很庆幸并没有像其他人那样买来最后只能吃灰. 卖掉了旧房子 算了算差价,比了比毕业后拿的工资感觉不想上班了. 将使用了快3年的iPhone 6换成了iPhone 8+ 去年的iPhone7买给了老婆,今年打算还是犒劳自己. 有点后悔没有买iPhone X,不过已经足够了. 买iPhone6的时候感觉如果不是一定要续航或者一定要大屏那么直接买4.7寸的,现在感觉如果不是一定要小屏那么直接买5.5寸的. 用惯了5.5寸以后再也回不到4.7寸了. »

月杪 月杪 on 心情

通过travis自动将Jekyll持续部署到服务器上

迁移回Jekyll以后更新博客就成了比较麻烦的事情,Jekyll处于本地每次发布就需要在本地生成静态文件以后上传到服务器上. 在很久以前这一系列的工作只能手动完成,不过travis-ci给了我们提供了更方便高效的持续集成解决方案. 首先 我们到travis-ci使用Github帐号登录,授权完成后进入个人页面开启你需要进行持续集成的项目,就像下图中 添加.travis.yml文件 在项目中新建.travis.yml, language: ruby rvm: - 2.3.3 before_install: script: after_success: 由于Jekyll是ruby环境下的框架所以language项填写的ruby, before_install可以视为正式执行前的准备工作, script则为正式执行阶段, after_success为执行成功后的处理. 执行 在travis启用相应项目并且在添加.travis.yml文件提交推送到Github后travis-ci会很快开始运行. 并且可以看到类似下图中这样的控制台执行过程, 成功后的部署 执行成功后可以通过ssh以及scp将生成好的静态文件部署到服务器上.不过不管是直接在.travis.yml中写服务器密码还是上传私钥都相当危险. travis-ci专门为私钥的加密准备了一套方案. ssh-keygen -t »

月杪 月杪 on Jekyll

博客从Ghost切换到Jekyll

快4年前开始用Ghost写博客,当时觉得Ghost最大的优势就是支持Markdown格式.相比Wordpress来说不需要安装mysql和php同时和Hexo以及Jekyll相比也有强大的后台. 然而在发展了几年以后Ghost迭代到了1.0版本, 在1.0版本中出现了以下几个特点: 开始推荐使用mysql数据库,仍然能够指定为sqlite但是支持肯定越来越薄弱. 改进了编辑器,虽然在一定程度上仍然兼容Markdown但是还是给人一种不舒服的感觉. 开始推广自己的CL工具,不能像1.0版本以前那样直接通过npm安装和运行.并且这玩意还没做好,运行和更新非常容易报错. Ghost默认主题是一款杂志主题而非博客,也从侧面反应出他们的着重发展方向.marketplace中也没几个支持1.0的博客主题,并且90%为收费主题. 所以一直坚持使用0.11.12长期支持版, 然而长期支持版其实就是长期没支持慢慢就淘汰版本.. 斟酌再三决定换回Jekyll. 并且很幸运还找到了和Ghost 0.11.12默认主题几乎一致的Jekyll主题jekyll-casper. »

月杪 月杪 on Jekyll

AmpliFi

家里的路由器从网件的WNDR4300换成UBNT的AmpliFi HD已经过去3个月了,它拥有着你这辈子买的路由器加起来都没它贵的价格以及绝对对得起这个价格的品质. AmpliFi HD是企业级网络设备供应商UBNT在2016年10月推出的Mesh Wifi系统.也是该厂推出的第一款家用路由设备,并为之创立了一个新的品牌AmpliFi. 主要参数 1 个千兆 WAN 接口 4 个千兆 LAN 接口 1 个 USB-A 接口 IEEE 802.11n IEEE 802.11g IEEE 802.11b IEEE 802.11.ac »

月杪 月杪 on 心情

利用iodine为Ocserv提供本地DNS服务

起因 尝试在同一台Linux上同时安装Ocserv和Dnsmasq,并将Ocserv的DNS配置指向Dnsmasq,然而不管是走内网IP还是外网IP都完全不工作.发邮件询问Ocserv作者本人收到的回复也是建议我检查Dnsmasq的配置.鬼都知道Dnsmasq配置不可能有问题啦! 后来猜测是虚拟网卡的原因,于是尝试自己建立内网DNS隧道来搞定它. 安装及配置 # 安装 apt-get install iodine # 启动 nohup iodined -f 10.10.10.10 gov.com & 启动后通过ifconfig能查看到已经生成了名为dnsx的虚拟网卡,地址为10.10.10.10. dns0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1130 inet 10.10.10.10 netmask 255.255.255.224 »

月杪 月杪 on Ocserv, SSL

使用LetsEncrypt签发多域名ECC证书

克隆certbot cd /opt git clone https://github.com/certbot/certbot.git 配置openssl.cnf cp /etc/ssl/openssl.cnf /opt/certbot/ vi openssl.cnf # 在[ v3_req ]标签下添加 subjectAltName = @alt_names [ alt_names ] DNS.1 = example.com DNS.2 »

月杪 月杪 on SSL

为Nginx添加TLS1.3支持

Nginx主线分支从1.13.0版本开始支持TLS1.3,只需要在编译的时候选择使用OpenSSL支持TLS1.3的分支进行编译即可. 使用对应的OpenSSL分支进行编译 # OpenSSL对TLS1.3的支持已经到了draft19,不过Chrome和Firefox对TLS1.3的支持还在draft18 git clone -b tls1.3-draft-18 --single-branch https://github.com/openssl/openssl.git openssl 然后在预编译的时候选择该分支,并添加额外选项--with-openssl-opt=enable-tls1_3. 其他操作参考手动编译Nginx支持ALPN,以在最新版Chrome中支持HTTP/2. 浏览器设定 Firefox目前最新版已经默认开启TLS1.3支持(如果不是新安装的Firefox那么可能依然需要检查about:config中的对应设定). Chrome需要在chrome:flags中将TLS 1.3选项调整为Enabled (Draft) 测试 Firefox: Chrome: 已知问题 由于nginx-ct目前并不支持TLS1.3,所以如果Certificate Transparency是靠该方案实现的话那么开启TLS1.3后无法继续显示Certificate Transparency信息. »

月杪 月杪 on Nginx

利用Haproxy使Ocserv和HTTPS工作在同一端口

#/etc/haproxy/haproxy.cfg frontend https-in bind *:443 tcp-request inspect-delay 3s tcp-request content accept if { req.ssl_hello_type 1 } acl tls req.ssl_hello_type 1 acl has_sni req.ssl_sni -m found use_backend »

月杪 月杪 on Haproxy

Git忽略证书错误

在尝试使用源码编译很多陈旧开源软件的时候会遇到该软件的源地址SSL证书失效(比如iftop). 网上流传的很多都是直接修改git全局设置: git config --global http.sslVerify false 但会造成更大的安全问题. 正确方法需要在克隆的时候手动忽略证书错误: env GIT_SSL_NO_VERIFY=true git clone https://code.blinkace.com/pdw/iftop.git cd iftop git config http.sslVerify "false" 使用env命令保证了忽略证书错误只应用于此次克隆,http.sslVerify保证设置只应用于该仓库. »

月杪 月杪 on Git

快速统计项目代码行数

$ find . -name "*.swift" -or -name "*.h" | xargs wc -l 59 ./mas-cli/AppStore/Downloader.swift 62 ./mas-cli/AppStore/ISStoreAccount.swift 114 ./mas-cli/AppStore/PurchaseDownloadObserver.swift 29 ./mas-cli/AppStore/SSPurchase.swift 24 ./mas-cli/Commands/Account.swift 58 ./mas-cli/Commands/Install.swift 25 ./mas-cli/Commands/List.swift »

月杪 月杪 on 技巧

从源码编译安装GIt

编译依赖 apt-get install libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev 下载 到Github下载需要的版本 安装 autoconf ./configure prefix=/usr/local all make make install »

在服务器上创建自己的远程Git仓库

创建git用户 创建git用户并设定好密码 adduser git 限制git用户登录 修改文件/etc/passwd 找到对应git用户的列然后将/bin/bash修改为/usr/local/bin/git-shell 添加公钥 #vi /path/to/gituser/.ssh/authorized_keys #...添加公钥 创建仓库 git init --bare simple.git chown -R git:git simple.git 使用 git clone git@serveripordomainname:/path/to/sample.git »

对exe文件添加管理员执行权限

起因 临时使用QT开发了一套类似启动器的程序,开发完毕发布给同事使用以后才发现如果安装到程序目录以后很多操作都无效了. 由于以前从未从事过win32开发(我只是个跑龙套的),只能手动排除故障.. 最终发现应该是该编译出的exe文件缺少管理员权限的问题. 手动创建uac文件 <!-- uac.manifest --> <?xml version='1.0' encoding='UTF-8' standalone='yes'?> <assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level='requireAdministrator' uiAccess='false' /> </requestedPrivileges> </security> </trustInfo> »

月杪 月杪 on 其他

修改Git已提交的Email和Name

由于在Windows上使用Git的千奇百怪解决方案造成中途需要从babun更换到cygwin..结果更换的时候将Git配置中的Email输入错误,于是寻找了一下修改多个commit中的信息. 最后在changing-author-info中看到了解决方案. 保存脚本 #!/bin/sh git filter-branch --env-filter ' OLD_EMAIL="your-old-email@example.com" CORRECT_NAME="Your Correct Name" CORRECT_EMAIL="your-correct-email@example.com" if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ] then export GIT_COMMITTER_NAME="$CORRECT_NAME" export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL" fi if »

Swift进行后端开发

自从Swift开源以后就出现了一些可以进行后端开发的框架,主要的几个有:Perfect,Vapor,Kitura和Zewo.其中Perfect最为著名,于是就打算从它入手. 环境 先跟着https://swift.org上的文档在服务器上安装好Swift环境. 官方示例 git clone https://github.com/PerfectlySoft/PerfectTemplate.git cd PerfectTemplate swift build .build/debug/PerfectTemplate 一切正常的话就会看到类似 Starting HTTP server on 127.0.0.1:8181 这样的提示,表示服务已经开启 选择数据库 作为一个后端小白,想选一款非MySQL的数据库,在搜索了各种介绍以后决定先从PostgreSQL入手. 在服务器上配置好PostgreSQL即可,其间过程不表. 尝试添加注册登录 # Sources/main.swift routes.add(method: »

月杪 月杪 on Swift

利用strongSwan搭建IKEv2

编译安装 strongSwan.使用了5.5.1版本,最新是5.6.1不过不知道为什么无法连接 wget https://download.strongswan.org/strongswan-5.5.1.tar.gz tar zxvf strongswan-5.5.1tar.gz cd strongswan-5.5.1 ./configure \ --prefix=/usr \ --sysconfdir=/etc \ --enable-openssl \ --enable-nat-transport \ --disable-mysql \ --disable-ldap \ --disable-static \ --enable-shared »

月杪 月杪 on VPN

Google的新TCP拥塞算法BBR

更新:Debian9都发布好久了,用Debian9吧不需要折腾内核才能开启BBR 上个月网友发现Google在GitHub上的项目Google/BBR. 前几天发现在几个Linux发行版中的候选版内核已经实装,而里面刚好也有Debian. 在看了Telegram群组里的说明后自己试着新开一台机器用上了BBR. 对比测试后发现提升确实非常大,gce美西在试用默认算法的情况下重庆电信HTTP下载大概在100~200K/s左右,而切换到BBR以后HTTP下载速率可以达到3000~4000K/s. Debian系统具体步骤: 添加experimental源 bash deb http://httpredir.debian.org/debian experimental main 安装新内核 目前最新4.9内核预选版为rc8 apt -t experimental install linux-image-4.9.0-rc8-amd64-unsigned 目前的版本 apt -t experimental install linux-image-4.9.0-trunk-amd64-unsigned 目前已经进入unstable源 »

月杪 月杪 on Linux

利用nghttpx 搭建HTTP/2代理

利用nghttpx 搭建HTTP/2代理,配合了Squid.Squid相关配置可以参考在Debian上搭建适用于Surge的HTTPS代理 先安装必要的依赖 apt-get install \ g++ \ make \ binutils \ autoconf \ automake \ autotools-dev \ libtool \ pkg-config \ zlib1g-dev \ libcunit1-dev \ »

月杪 月杪 on Proxy

生成申请 ECC 证书所需的 CSR 文件

# 生成rsa证书csr openssl genrsa -out moonagic.com.key 2048 openssl req -new -key moonagic.com.key -out moonagic.com.csr # 生成ecc证书key # -name 参数可以自己选择 secp521r1, prime256v1 或者是下面所用的 secp384r1 openssl ecparam -genkey »

月杪 月杪 on SSL

手动编译Nginx支持ALPN,以在最新版Chrome中支持HTTP/2

安装一些必要的工具 apt-get install build-essential libpcre3 libpcre3-dev zlib1g-dev 下载需要的源代码 # Openssl版本需要1.0.2才能支持ALPN,而后者是新版Chrome支持HTTP/2的必要条件 wget -O openssl.zip -c https://github.com/openssl/openssl/archive/OpenSSL_1_1_0h.zip unzip openssl.zip mv openssl-OpenSSL_1_1_0h/ openssl wget -O nginx-ct.zip -c https://github.com/grahamedgecombe/nginx-ct/archive/v1.3.2.zip unzip »

月杪 月杪 on Nginx

在Mac上为Git配置代理

Mac上为iTerm2设置代理可以直接用 export http_proxy=http://127.0.0.1:6152/ export https_proxy=http://127.0.0.1:6152/ 但是对git并不那么奏效,因为git除了走https外还需要走ssh. 试了网上很多办法都不行,最后找到了这个办法: 先将connect(我自己clone到了github)克隆到本地 git clone https://github.com/moonagic/connect.git cd connect # 直接gcc编译 make # 然后将编译得到的文件connect拷贝到bin目录 cp connect /usr/local/bin 修改ssh配置文件(没有的话新建一个) vi ~/.ssh/config # 全局 »

月杪 月杪 on Proxy, Mac, Git

shadowsocks-libev在Debian下新编译安装方法

很久没有升级服务器上的shadowsocks-libev,结果今天发现以前的编译方法已经无法成功编译.(以前的编译方法已经修正) 又不行了,还是看下面吧 必要的更新 apt-get update && apt-get upgrade 安装必要组件 # Debian8可能需要添加jessie-backports apt-get install --no-install-recommends \ gettext \ build-essential \ autoconf \ libtool \ libpcre3-dev \ asciidoc »

月杪 月杪 on Shadowsocks

Setup LetsEncrypt on Debian

Install LetsEncrypt Client git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt Obtain a Certificate Inside the nginx config, add this location block: nginx location ~ /\.well-known/acme-challenge { root /var/www/html; } »

月杪 月杪 on SSL, Nginx

为Linux手动添加swap空间

GCE建立的实例默认是没有swap的,所以如果需要swap的话就必须自己添加. 以下的操作都需要root权限 首先先建立一个分区 dd if=/dev/zero of=/var/swap bs=1024 count=1024000 这样就会创建/var/swap这么一个分区文件. 把这个分区变成swap分区。 mkswap /var/swap 使用这个swap分区。使其成为有效状态。 swapon /var/swap 如果需要取消的话 swapoff /var/swap rm /var/swap 现在查看一下 → free -h total used »

月杪 月杪 on Linux

Mac开发环境配置笔记

Xcode 安装 直接Mac App Store搞定. Command Line Tools 直接在终端输入 xcode-select --install 其他的会自动帮你完成 Sublime 很好用的跨平台编辑器,直接安装就好.然后按照[[Package Control] https://packagecontrol.io ]中的提示配置好Package Control(Sublime上的包管理工具) iTerm2+zsh 安装iTerm2 先下载iTerm2,用来替代系统默认的终端. 配色可以使用Solarized 如果下面使用agnoster主题的话可能需要安装字体PowerlineFonts 将zsh设为默认的shell 在终端输入 chsh »

微软注销了我使用多年的@msn.com邮箱

起因 一项服务(以下简称服务A)在多年前由于一些原因使用了一个不太常用的邮箱注册.服务A一直到现在都使用正常,而注册的邮箱因为基本不使用的原因很少登录. 结果 但是在今天打算登录服务A的时候突然提示我登录前必须重置密码,而显示唯一重置密码的途径就是通过邮箱接收重置链接. 小问题而已,于是输入邮箱点击重置,提示我重置链接已经发送到邮箱. 我和以前重置各种密码一样娴熟的打开outlook.com输入账号密码登录...结果提示我That Microsoft account doesn't exist. Enter a different account or get a new one. WTF..难道我记错了?不可能啊,才6个字母而且我在 1Password 以及iCloud Keychain 和 Chrome中记录的账号都显示我的记忆是没有出问题的.. 那么唯一的原因就是我这个邮箱真的被微软注销了!而且由于邮箱后缀为msn.com所以想要重新注册也并不是件容易的事情. »

月杪 月杪 on Microsoft

How to Uninstall JDK on Mac OS X

Remove the Java Runtime sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin sudo rm -fr /Library/PreferencePanes/JavaControlPanel.prefpane Removing the Java JDK cd /Library/Java/JavaVirtualMachines sudo rm -rf jdk*.jdk »

在Debian上搭建Gitlab,并禁用内嵌Nginx

最近需要为公司搭建git代码仓库,结束后决定将过程记录. 首先获取gitlab安装包 打开 https://about.gitlab.com/downloads/ 选择自己的系统,按照提示安装.当执行完 gitlab-ctl reconfigure 后其实已经可以在浏览器中打开了,但是默认的是运行在gitlab内嵌的Nginx中,对于强迫症来说还是挺难受的.(其实内嵌的Nginx是不会影响到独立安装的Nginx的) 于是决定使用独立安装的Nginx代替内嵌的来运行gitlab. 先禁用内嵌的Nginx 编辑/etc/gitlab/gitlab.rb在Nginx部分添加一行 nginx['enable'] = false 然后再执行 gitlab-ctl reconfigure # 每当修改了gitlab的配置文件都需要执行 现在已经禁用掉内嵌的Nginx了. 配置独立安装的Nginx 在Nginx配置目录中新建一个配置文件git.conf # gitlab socket 文件地址 »

月杪 月杪 on Gitlab

解决OS X 10.11源码编译的时候找不到openssl的问题

搭建某环境的时候需要编译一个Nginx的衍生版,由于在Linux上编译Nginx已经非常熟悉于是以为在Mac上应该也是顺手拈来.. 结果make的时候直接一个大大的 fatal error: 'openssl/ssl.h' file not found 怎么回事呢?原来苹果sdk中不再提供openssl,在 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include 路径下已经没有了原有的openssl目录.. 怎么办呢? 我以前用brew升级过openssl,先找到openssl目录,我的在 /usr/local/Cellar/openssl/1.0.2g 先在sdk中建立openssl文件夹 然后将/usr/local/Cellar/openssl/1.0.2g/include/openssl中的头文件拷贝进去 然后编译就能通过了. »

在Debian上搭建适用于Surge的HTTPS代理

今天在推上偶然看到推友说到Surge等工具其实是可以支持HTTPS代理的.而HTTPS代理实际上比shadowsocks等方式更加安全,于是就尝试着自己在服务器上搭建了HTTPS代理. 首先确定使用的工具: squid3 以及 stunnel4, 都可以直接使用apt包管理安装 squid其实可以通过添加编译参数来达到支持SSL的,但由于我的CPU不够强劲编译时间实在太长了,于是选择使用stunnel4来支持SSL加密. apt-get install squid3 stunnel4 添加http认证文件 sh -c "echo -n '[帐号]:' >> /etc/squid3/squid.passwd" sh -c "openssl passwd -apr1 >> /etc/squid3/squid.passwd" »

月杪 月杪 on Proxy

Lightsword-一个和Shadowsocks类似的工具

Lightsword是一个和Shadowsocks类似的代理工具,目前作者提供了iOS以及Mac客户端 而安装过程要比Shadowsocks更加简单,只是需要提前安装好nodejs. 如果你已经安装好nodejs的话只需要 npm install lightsword -g 就能完成安装,然后通过 lsserver --password [密码] --port [端口号] --method [加密类型] --fork --cluster 就可以运行起来了.只是目前加密类型可能还没有Shadowsocks那么丰富. 目前观察内存占用比我平时使用的shadowsocks-libev要高很多. iOS上使用起来除了App Store上的版本还不支持国内分流(TestFlight上的测试版已经可以分流,目前从作者的推文来看可能还不够稳定)外感觉和Surge跑Shadowsocks没有什么区别 »

月杪 月杪 on 其他

Linode编译hybla htcp模块

查看vps内核版本: uname -a Linux magic 4.4.0-x86_64-linode63 #2 SMP Tue Jan 19 12:43:53 EST 2016 x86_64 GNU/Linux 下载相同版本的内核源码 可以去 https://www.kernel.org/pub/linux/kernel/ 下载对应版本的内核源码 mkdir kernel cd kernel wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.4.tar.gz »

月杪 月杪 on VPS

2015年终总结

今年本来计划存钱的,结果因为发生了一些事情到了年底什么钱都没存下. 果然包工头老板还是信不过,能玩到这种程度我也是服.我也是一个希望能有始有终的人,但是我找不到坚持下去的理由. 年末的时候被迫重新找工作,对我这个从一开始工作到现在都属于保送的人第一次体验到靠自己一个人找工作的艰辛.目前来说结果是好的,也终于进入自己更感兴趣的发展方向.还好最困难的时候都有老婆一直陪伴.希望下一年能走上正轨. 去年年末买房本来计划明年9月接房的,结果这个月就通知接房了...一点都没准备好,不过至少不算一件坏事. 居然跑到Apple Store原价买了一台MBP..既然我不是土豪那当时一定是个土鳖 年初的时候和老婆一起办了健身卡,目前看来基本算是给那家健身房做贡献了...所以目前体重还是一年前的样子. 今年WOW,COC基本荒废了. 还是没有养成早睡的习惯,本来没什么事情但就是不知不觉就很晚了. 来年的一些计划 跟进一切对抗墙的技术. 自学一门脚本语言 Python/Ruby/Perl等等皆可. 坚持锻炼身体. 有一款完全属于自己的作品. »

月杪 月杪 on 心情

Mac安装mtr

在Linux上诊断路由最好用的莫过于mtr了,而到了OS X上却没有提供内置(Linux也没内置,但是只需要一个简单的命令就能安装了).于是需要我们自己来安装. 其实Mac上安装mtr也很简单,不过需要用到brew,如果你没有安装brew的话需要先安装一下: ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 然后通过brew来直接安装 brew install mtr 安装结束后尝试使用的话会提示你command not found... 解决办法是在你的shell配置中通过alias将路径映射到mtr命令上 如果你的shell是zsh的话直接打开.zshrc加入一行 alias mtr=/usr/local/sbin/mtr /usr/local/sbin/mtr是mtr的安装路径,可能不同的机器路径不同,比如我的rMBP和iMac的安装路径就只有rMBP是这个路径.不过安装的时候会告诉你相关路径的. 现在再执行mtr结果提示unable to get raw sockets 这时候需要添加权限 »

月杪 月杪 on Mac

Debian下搭建Shadowvpn服务端

Shadowvpn衍生自libsodium,主要是为低端硬件编写的,比如一些路由器. 但是也能当做vps之间的传输工具(比如国内跳板?) 而Github上的项目更新到2.0后安装说明没有得到及时更新...前几天按照旧的说明始终不行 目前的安装流程是这样的: 安装编译依赖 apt-get install build-essential automake libtool git 从github得到源码并安装 git clone https://github.com/moonagic/ShadowVPN.git cd ShadowVPN git submodule update --init --recursive ./autogen.sh ./configure --enable-static --sysconfdir=/etc »

月杪 月杪 on VPN

Debian下搭建Ocserv(openconnect server),并启用证书验证

安装编译依赖: apt-get install build-essential autogen pkg-config apt-get install libtalloc-dev libreadline-dev libpam0g-dev libhttp-parser-dev libpcl1-dev apt-get install libgnutls28-dev libev-dev apt-get install libprotobuf-c-dev libhttp-parser-dev gnutls-bin # 0.11.8版本后如果系统也为Debian8可能需要 apt-get install »

月杪 月杪 on Ocserv

解决Chrome系统菜单字体无法禁用DirectWrite的问题

Chrome从37开始支持DirectWrite,但是在低分屏下显示效果反而更差,并且与mactype冲突. 当时的解决办法为在flags中禁用DirectWrite,也确实解决了问题,但是似乎从Chrome42以后这个方法不再适用于Chrome的系统菜单部分. 在忍受了很久之后终于得知解决办法,添加Chrome启动参数 --disable-directwrite-for-ui »

月杪 月杪 on Chrome

一直无法新建 linode 日本,可能是设置出了问题

蹲守linode一个多月,一台都没碰到,并且在这几天大家都说有货的情况下也是一样. 昨晚在推友的帮助下确认了在他可以新建的情况下我始终无法新建日本节点. tk沟通后结果是因为我Hypervisor Preference设置成了KVM(不然新建其他地区的node还需要手动从Xen转到KVM) 而东京只有Xen..但是和以前无货是一样的提示. 最基本的缺省逻辑都没做好,也不给明确提示,也是服了. 并且他们并没有在tk中正面回复我有关这方面应该做明确提示的建议.. 在他们告诉我真相的时候我当时内心是崩溃的..估计肯定也有和我一样情况的人,而且他们可能还都不知道是设置出了问题 »

月杪 月杪 on Linode

Debian下通过racoon搭建Cisco Ipsec VPN

apt-ge install racoon 安装好后编辑/etc/racoon/racoon.conf log info; path include "/etc/racoon"; path pre_shared_key "/etc/racoon/psk.txt"; listen { isakmp 9.9.9.9 [500]; #监听的端口和地址 isakmp_natt 9.9.9.9 [4500]; #监听的端口和地址 } remote anonymous { »

2014年终总结

又到年底了,总该总结一下今年发生的事情. 今年换了新公司,几个目标一致的人一起打拼.从毕业到现在,工作方面状态最好的就是今年了. 当然项目上使用的技术其实自己从最开始就不是太感冒. 和老婆一整年都在计划假期出游,但一直到今天都没实现. WOW进入第十个年头,不过他依然是最棒的. COC,满防!并且进入冠军联赛.除了贪玩外,只是觉得总要坚持一件事情. 一整年都在使用Android,计划最近就会换回iOS再也不会回来. 想做一些真正自己心目中的游戏,计划了一整年,始终还是没实现,甚至是没上路,不过相信来年还是能实现的^ ^ 今年基本把所有翻墙方式都试了一遍,还是老老实实VPN吧. 在离现在很近的地方买了房子,压力又大了一点,不过还好. 总是想象自己回到球场,老婆认识我后我从没再打过球. Twitter过3万推,2千fo.. »

月杪 月杪 on 心情

Command line only on linux servers

First you’ll need to find out the URL of the latest Ghost version. It should be something like http://ghost.org/zip/ghost-latest.zip. Fetch the zip file with wget http://ghost.org/zip/ghost-latest.zip »

月杪 月杪 on Ghost

Debian安装Ghost时提示glibc_2.14 not found的解决办法

在linode上安装Ghost的时候提示了glibc_2.14 not found,尝试过下载源码编译,但是比较麻烦. 后来Google到一种比较简单的办法. 添加源: deb http://ftp.debian.org/debian sid main 注意:这是unstable源,执行结束最好将该源从列表中删除 更新源后安装包: apt-get update apt-get -t sid install libc6 libc6-dev libc6-dbg complete! »

月杪 月杪 on Ghost

Yosemite黑苹果折腾笔记

前天Yosemite发布正式版,于是就想着把台式机装上全新的Yosemite. 走的还是习惯的U盘安装路线, 1.一个8GB以上的U盘 2.MAS下载的原生系统安装盘 3.Clover的安装程式 折腾开始: 首先从原生安装程序里取出createinstallmedia(路径在/Contents/Resources/createinstallmedia),放到桌面上即可 然后将准备好的U盘重新分区, 再然后将原版的安装app写入U盘的Mac分区,在终端中输入如下命令: sudo /Users/你的用户名/Desktop/createinstallmedia --volume /Volumes/格式化时U盘的名称 --applicationpath /Applications/Install\ OS\ X\ Yosemite.app [--force] 确认后就会开始将安装程序移动到U盘中.(如果是白苹果的话到这一步就已经可以开始安装了) 在移动完成后开始在U盘上安装Clover引导, 在终端输入: mkdir /Volumes/EFI 然后打开Clover安装程序,在更改安装位置中选择U盘,然后选择自定义安装如图:(图片遗失了) 安装完成后在Finder中的EFI挂载盘里放入自己修改好的config.plist,以及在/CLOVER/kexts/中的10.10文件夹中放入FakeSMC(版本需要大于6.9.1315) »

月杪 月杪 on Mac

魔兽点卡涨价了

快十年了,终于是涨价了. 高中的时候30块的点卡要勒紧裤腰带一个星期才能买上, 大学的时候一张点卡经常用不过一个星期, 到了现在已为人夫几个月都不一定用用完一张点卡... 其实我不关心它多少钱,我在意的,是它从来没变过 房价从两千多到两万多,它没变过 一碗牛肉面从五块一碗到十几二十块一碗,它没变过 刘翔从运动员变成手机评测,它没变过 18岁到26岁,它也没变过. 但是现在它变了,就像那时候的青春,再也回不去了 我们已经花了快十年来热爱魔兽世界,现在让我们向热爱魔兽世界一样热爱生活吧 »

月杪 月杪 on World of Warcraft

将博客迁移到Ghost

受够了Jekyll需要手动同步的折磨,终于还是选择在vps上搭建Ghost. 经过几天折腾就换过来了,比起以前在sublime上写markdown确实是要好太多了. »

月杪 月杪 on Ghost

iPhone 6 成本只要 1200 元?

最近流传的「iPhone 6 成本只要 1200 人民币」靠谱吗? 为什么会流传出这样的文章? 苹果 6 在美国价 1200 元,郭台铬 25 元加工费,只要中国人 1 个月不买 iPhone 6 立马掉价。是中国人就拒绝 iphone6(求扩散): 苹果公司又一次对中国玩饥饿营销,全世界 iphone6 首发,独缺中国内地!苹果公司认为中国人人傻又钱多!把中国人都当傻子,黑你中国人,中国内地无 iphone6,傻瓜们就会通过各渠道买水货!从而制造产品供不应求假象!!所以,中国人坚决不要做傻瓜!是中国人就一起转了吧! 普京训得对[酷]一部烂苹果 6,只是一个通迅工具而已,连首发资格都没有的全球最大苹果市场——中国。这简直就是侮辱,如此歧视中国大陆,却让无数国人为之疯狂,膜拜!真是让人痛心!让人鄙视!一件商品,成功的让无数人洗脑一样的追宠。一部 iPhone6 »

月杪 月杪 on iPhone

中国手游没有未来

为什么中国游戏无法风靡世界?前几天在网上看到这么一篇文章,作者把一切的一切都归咎到了抄上.甚至没有提哪怕一点其他的方面 诚然,抄袭的的确确就是国内游戏业一大毒瘤.从毕业到现在我待过的三家游戏公司都是属于严重的抄属性公司.甚至在第二家公司的时候明确告诉我们寻找有抄袭价值的游戏也是我们的工作内容之一. 在第二家公司的工作内容相当枯燥,近乎使人崩溃.没有idea没有创意,策划的工作就是别人的游戏有1个角色我们就做5个,别人的游戏有2个技能我们就做10个,别人的游戏有20个关卡我们就做50个...最后做出的东西与其说是游戏还不如说是代谢产物 我恨抄.但,真的一切的一切都是因为抄袭吗?或者说抄真的是因为游戏公司吗? 国内游戏市场是扭曲的,绝大部分玩家需要的是快餐,是免费,是本地化 于是工厂开动了,几乎任何一个国外知名游戏都会有一个或者多个所谓的中国版. 当然,其中也不乏高质量的抄袭者,但更多的是低质量渣体验的货色,而国人玩着这些渣滓却乐此不疲. 纯抄袭的不少,借鉴的就更是数不胜数了. 渐渐的,在玩家需求的驱动下大量的借鉴作甚至抄袭作诞生,并免费推给玩家.借助着freemium模式从愿意付钱的玩家中榨取利润. 在国内,这是成功的商业模式.但却和游戏毫无关系 除了抄袭和该死的扭曲需求,还有什么?是技术 我要说的并非是说国内技术不如国外,虽然这也是普遍的客观事实.我想说的是技术的选择. 为了能比竞争对手更快的抄袭完同一个类型的游戏,就必须在技术选择上无条件倾向于开发效率,从而和游戏质量有关的东西都必须为开发效率让路. 因为在国内因为很少有自己的创意所以大家同一时间段基本是跟风在抄同一类型的游戏,成败的关键几乎就是你先抄完还是别人先抄完. 所以选择了无条件满足开发效率后问题接踵而至:引擎不够成熟,几乎没有第三方开源库,底层组件需要自己从头编写和维护...等等等等 最终,对游戏的要求慢慢的几乎无底限的降低,一直到最后能跑出来就行了 除了开发技术,策划技术也是最严重的瓶颈. 那句玩笑怎么开的来着? 会写代码的当程序,会玩ps的做美术,两样都不会的干策划 玩笑归玩笑,但确实是国内策划界的真实写照. 除了上面说的,策划的另外两个来源一个是玩过很多年游戏对游戏至少有一定见解的,一个就是文案写的好的 刚好上一家公司合作过的两位策划就各占其一 第一位 玩了十几年游戏,差点就赶上我了(呵呵).但给人的感觉永远是其实还行,但总还差点什么感觉. 并且很多细节经常是拍脑门决定,等明天再问的时候自己居然忘了或者说的和昨天又不一样 而且每当有人对idea提出质疑的时候他反驳的理由永远是: »

月杪 月杪 on Game

解决pptp下无法打开twimg.com等链接

前几天把OAH上专用做代理的vps从centos换成了自己更熟悉的debian,结果直接搭的pptp速度不错但是twimg这样的连接打开会超时. 在尝试了更换DNS重启vps等一系列方式后还是无法解决,后来Google到应该是因为pptpd中预设MTU值的问题导致了某些链接打开超时.解决办法直接假如iptables规则 # 192.168.0.0 应为config中对应的ip段 iptables -A FORWARD -p tcp --syn -s 192.168.0.0/24 -j TCPMSS --set-mss 1356 问题解决 »

月杪 月杪 on pptp

iPhone6发布了

终于等到新iPhone发布了. 嗯,其实发布会持续了几个月,并且在最后一刻被我国的逗逼们一波带走了,发布会几乎成了过场. 4.7寸和5.5寸,iPhone再一次被世界改变. 分辨率实在是太奇葩了,4.7寸保持比例放大到1334x750,而5.5寸虽然设备分辨率是标准的1080p但渲染分辨率居然是1242x2208..苹果你赢了 各路爆料者口中板上钉钉的蓝宝石屏连影子也没见到,当然我也不在乎这个,但出乎意料的是弧面玻璃屏幕,Nice! 摄像头凸起...好吧,看来苹果是觉得发布会上大家看到设备厚度的时候wow!一声远远比用起来的舒适度更重要 后置摄像头还是800万,其实没什么感冒的,反正拍的不多 没有我特别希望支持的防水功能,看来夏天机器烫手的时候直接洗澡降温是不能实现了... 没有了32G,取而代之的是原32G位置上的64G和原64G位置上的128G,反正就是除了16G版本其他的都免费升一档.估计买64G的人会很多. 首发没有大陆.. 等吧 反正买买买...64G iPhone6我来了 »

月杪 月杪 on iPhone

写垃圾代码的唯一理由

我很久很久以前曾经经历的一个公司特别傻比,人力资源和svn管理员不懂程序。 作为服务端的主程序,一直以来都是代码精简,效率最优,没有冗余为毕生追求。 突然我无意中发现了一个秘密,我的绩效居然不如几个公司刚招进来的新手。 我每天刻苦努力,优化代码,让公司的服务端7*24稳稳跑在服务器上,还一心研究各种热切换,换来绩效考核好久没有优秀了。 这究竟是为什么呢,后来好心人告诉我,人力资源说了,他们看了svn的日志记录,其他人工作很努力,每天提交很多代码,每天新编写很多很多代码文件,贡献了好多好多的劳动成果。 而看看你这个号称技术排第一的家伙,根本就没干活嘛,3个月下来,你一共就写了这么十来个cpp和.h,每天改来改去就这么几个文件,还好多天差不多行数的位置回改,根本就一直在偷懒。 我听完以后以后直接口吐鲜血,无语至极了。 然后我就申请离职了,在那个公司剩下不多的日子了,我为了心安理得的拿最后2个月的工资,为了让老板知道其实我一直很努力,我在最后一个月更新了几千个文件,让服务端的内核稳定度下降了好几个档次,内存消耗上涨了好多个数量级,并且把容易读,容易后续扩展的部分,全部用c++最高级的模版进行扩展,同时删掉了我以前用汇编写的优化代码。 嗯,我想以后这个公司估计会倒闭,我走了以后,再也没有人能维护这份代码了,估计3个月以后,我自己也搞不定了。 然后我就离职了,离职之前老板大夸我厚道,最后一个月还给公司做了这么多的事情,别人走都是删代码,我居然还毫无保留的为公司做出贡献。 然后我走了不到半年,公司就呵呵了。 我想那是我此生唯一写垃圾代码写的心安理得的一次机会了。 来源 »

月杪 月杪 on 心情, 程序员

L2TP搭建日志

重装了下linode,结果发现居然没有debian6了... 于是选了7.4 在搭L2TP的时候发现了问题,win和android都可以正常连接,但iPhone, OS X就是连不上 由于从6换到7,下意识以为是debian的问题 折腾了好久才发现是apt自带的openswan的bug 后来手动将openswan版本从apt自带的最新版1:2.6.37-3+deb7u1换到了1:2.6.37-3 apt-get install openswan=1:2.6.37-3 问题解除 »

月杪 月杪 on l2tp

ipsec verify时的错误

Checking your system to see if IPsec got installed and started correctly: Version check and ipsec on-path [OK] Linux Openswan U2.6.37-g955aaafb-dirty/K3.13.7-x86_64-linode38 (netkey) Checking for IPsec support »

月杪 月杪 on ipsec

如何调整Mac系统通知显示时间

OSX的通知可以分为两种一种是Alert,一种是banner 区别是Alert需要用户执行动作才能消失(典型的例如更新通知) 而Banner会在桌面顶部显示数秒自动消失,本文所说的通知针对的就是Banner 操作方法: 打开终端窗口,用命令:defaults write com.apple.notificationcenterui bannerTime [time in seconds] 修改,比如把显示时间调整为25秒钟,则输入: defaults write com.apple.notificationcenterui bannerTime 25 确认后需要重启系统或者注销 恢复默认设置方法: defaults delete com.apple.notificationcenterui bannerTime »

月杪 月杪 on Mac, 心得

在vps上使用btsync

btsync是个好东西,不限流量不限容量,并且安全,私有. 不过有个缺点,必须要有一台设备在线 如果你有一台稳定的vps的话就能一定程度弥补这个缺点了 btsync的下载地址:btsync 选择下载对应版本上传到vps或者直接vps拉下来 解压得到btsync文件,直接运行 现在就可以在ip:8888/gui看到同步界面直接操作了 »

月杪 月杪 on 心得

存钱计划

余额宝出来一段时间了,听说也还不错就估摸着自己也往里面放点 暂时计划每天丢十块钱进去,坚持一年看看收益怎么样 昨天貌似微信版余额宝也推出了,那就一并每天十块好了... »

月杪 月杪 on 心情

年终总结

第一次写给自己的年终总结 这一年因为cocos2dx把丢掉了几年的C++重新捡了起来,前后做了几个小项目算是基本熟悉了. 除了年初网游要赶进度上线那一段时间在加班外已经恢复了正常作息 经过已经被折磨了几年的脚趾头基本算是痊愈了 WOW老兵在休闲.非常庆幸,依然有几个快9年的战友携手并肩..刷着坐骑 这年大概玩了2个手游,coc和mt 属性依然是宅,除了公司组织出去过一次以外就只出过一次门,而且还是带着疼的快走不动路的脚 体重似乎比一年前又有略增 年底在纠结要不要换个环境,毕竟重庆的行业环境只能算三线城市水平 依然关注NBA,但已经不像以前一看比赛就热血沸腾 这一年夏天特别热 这一年冬天特别冷 »

月杪 月杪 on 其他

如何用各种语言杀死一条龙

这篇有趣的文章编译自一篇西班牙博客。有一位美丽的公主,被关押在一个城堡中最高的塔上,一条凶恶的巨龙看守着她,需要有一位勇士营救她… 下面是各种语言如何想办法将公主从巨龙手中营救出来的。 Java 赶到那里,找到巨龙,开发出一套由多个功能层组成的恶龙歼灭框架,写几篇关于这种框架的文章…但巨龙并没有被消灭掉。 .NET 赶到哪里,看到了Java程序员的做法,完全拷贝过来,试图去杀掉巨龙,但巨龙把他吃掉了。 C 赶到那里,对巨龙不屑一顾,举起剑,砍掉巨龙的头,找到公主…把公主晾在一边,去看看有没有最新提交的linux内核代码。 C++ 先打造出一根针,然后在上面添加各种功能特征,直到最后汇聚成一把复杂的剑,这把剑复杂到只有他能理解其中的功能…杀死龙,但他过桥时遇到了麻烦,因为内存溢出了。 COBOL 赶到那里,看到巨龙,认为自己太老了,杀不死这条巨龙,营救不出公主,于是离开了。 Pascal 他花10年时间开发出一套巨龙歼灭系统…当战斗开始时,他发现这套系统只能关住蜥蜴。 VB 使用各种组件开发出一套巨龙毁灭武器,他跳到巨龙的后面,在最关键的时刻,他发现这种武器只能在雨夜里工作… PL/SQL 分析其它屠龙者的数据,创建出具有多维数据、n向关系的数据表模型、OLAP,花15年时间分析这些数据…当结果出来时,公主已经变成了同性恋者。 Ruby 盛大出征,号称自己不管做什么都是最强的,当面对巨龙,他亮出了一张画有他杀死一条瘸腿的巨龙的图片…巨龙懒洋洋的吃掉了他。 Smalltalk 赶到那里,分析巨龙和公主,转身走了,它们是次要问题。 shell 创造一个超级强大的灭龙武器…但当面对龙的时刻,他忘了如何使用它。 Assembler 他认为他的方法是正确的,而且是最高效的…但他把D写成了A,杀死了公主。 »

月杪 月杪 on 其他

后台的朋友

后台的朋友 是心灵的休息地 在他面前 不必化妆 不必穿戏服 不必做事情 不必端架子 可以说真话 可以说泄气话 可以说没出息的话 可以让他知道你很脆弱 很懦弱 很害怕 每次要走入前台时都很紧张 很厌恶 因为你确知后台朋友只会安慰你 不会耻笑你 不会奚落你 在他面前你早已没有形象可言了 也乐得继续没形象下去 人生有一个地方 有一个人 在这人面前 可以不必有出息 可以不必有形象 可以暴露弱点 »

月杪 月杪 on 心情

HTC one 入手感受

前段时间心血来潮买了部htc one one一推出的时候就被她的外形吸引了,这绝对是android阵营中工业设计水平最棒的 这段时间价格也到了自己的心理价位,刚好也对iOS7不是那么感冒 于是就入了一台 手机使用了一段时间后的感受 铝合金机身并没有我想象中那么有质感,感觉有点薄. 磨砂背壳感觉有点滑...给人不握紧就会掉的感觉.本来买了个壳子,但那么美的背壳包起来太2了 机身某些结合处特别是侧边金属和塑料接触的地方确实有不紧密的现象(必须的,不是做工问题而是设计问题,再牛逼的代工也无法对抗物理法则) 网上多被诟病的按键问题感觉还行.就算一开始不习惯,等你用熟以后也不会再注意到了 binkfeed zoe ...这俩货真的有用么?拿到手机没过几天就解锁刷了cm,后来刷了gpe,这俩对我没用的货就永远滚走了 相机,概念玩的不错不过400万永远是400万,跟ip4的500万比或许各有千秋,但如果你是4s用户换了one的话我保证你绝对没有再打开one相机的理由了,脑袋咔翔了才大晚上跑出门试one的夜景 boomsound,带来了手机中最好的外放音效,但最好的外放音效对一部手机意义有多大呢?(嗯,我还是为了boomsound用着gpe而没用cm) 虚拟按键组合对于iOS用户来说学习成本差不多的,对android用户来说可能需要一点时间适应 海带条,gpe4.4貌似还是有海带条,但低版本应用也就那几个 屏幕,非常细腻,对肉眼来说接近470的ppi绝对够用了.比ip的屏幕要艳一些,但远远没到A屏那种闪瞎眼的程度 续航感觉还算不错,或许因为4s用的有点旧了.充电速度很难受,特别是我习惯用电脑usb插孔充电...不过好在就算是1%的电量也是实打实的 从iOS换到android的感受 屏幕尺寸大了.这个是最直观的.你难以想象用ip玩COC和用one玩COC有多大的差距 硬件.或许是2.x时代的android给用户噩梦一样的回忆,现在android都玩命堆硬件,每一代旗舰出来都宣传硬件多么多么高端再也不卡神马神马.但android卡顿的根本原因并不在硬件,双核800MHz降频A5能秒多少代的旗舰了?根本不用那么关注硬件数据,能保证大型游戏流畅运行就可以了,和别人比跑分的任务就留给发烧用户吧 分辨率,今年开始主流分辨率都是1080,明年甚至能到1440甚至2k.技术的突飞猛进是值得庆祝的,但你一部顶满天6寸多绝大部分在4.5~5寸的设备有必要玩那么高的分辨率?你说就算肉眼察觉不出来越来越高的ppi也总是好的?那你觉得有多少app支持高分辨率了?我们先别说第三方app,就算是很多android自己的细节都是不支持1080p的,甚至不支持720p.不支持1080p的资源跑在1080p的设备上是什么感觉呢?用ip跑一跑陈旧的非Retina应用你就明白了.步子迈太大了肯定要扯着蛋 各种依依赖于开放的功能强大界面土鳖的神器.嗯,android用户早已登上神坛 开放在很多时候确实是好事,客观来说android比iOS在操作上方便很多 应用市场生态环境.第三方的太不放心了,本来想Google »

月杪 月杪 on 心情

Nginx配置HTTPS加密

# 建立保存目录 mkdir /etc/cert cd /etc/cert # 生成1024位加密的服务器私钥 openssl genrsa -out decode.li.key 1024 # 制作CSR证书申请文件 openssl req -new -key decode.li.key -out decode.li.csr You are about to »

月杪 月杪 on Nginx,, SSL

Twitter官方consumer key/secret

Twitter for Andriod key: 3nVuSoBZnx6U4vzUxf5w secret: Bcs59EFbbsdF6Sl9Ng71smgStWEGwXXKSjYvPVt7qys Twitter for iPhone key: IQKbtAYlXLripLGPWd0HUA secret: GgDYlkSvaPxGxC4X8liwpUoqKwwr3lCADbz8A7ADU Echofon key: yqoymTNrS9ZDGsBnlFhIuw secret: OMai1whT3sT3XMskI7DZ7xiju5i5rAYJnxSEHaKYvEs Twitter for iPad key: CjulERsDeqhhjSme66ECg secret: IQWdVyqFxghAtURHGeGiWAsmCAGmdW3WmbEx6Hck »

月杪 月杪 on Twitter

傻逼一样坚持,总会看见牛逼的结果

如果一件事成功率是1%,那反复100次至少成功1次概率是多少?备选答案:10%,23%,38%,63%——正确答案是63%.计算方法: 成功率1%,失败率99%,尝试100次,全部失败概率为99%的100次方约37%,至少成功一次即63%.看似不可能的事在反复尝试中成功率会不断提高——傻逼一样坚持,总会看见牛逼的结果. 这是今天同事在RTX群里分享的每日一则,咋看之下,觉得没什么问题.因为单单从数学概率角度去计算,上面问题的答案是完全正确.但考虑到实际的操作过程会存在一些干扰因素,可能会影响到每一次尝试的成功率,我们可以深层次的讨论. 如果这件事情存在完全不可操控因素,即:这件事情尝试了一次或者多次,即便都失败了,所获取的经验并不能让你在下一次尝试过程中减少一些失败的可能.那么上述问题中的思路和答案都是正确的.但是结论的表达是有一些问题:因为事件本身的单次成功率是没有提高的,还是1%.所以,这个结论前半句并不可取.如果有人能把所有的错误尝试一遍之后,对于当事人而言,下一次的尝试自然是成功.所以后半句倒是可取:傻逼一样坚持,总会看见牛逼的结果. 现在考虑第二种假设,如果这件事情是一件固定的事务,不存在随机改变的因素.可以看做是在做一道有100个选项的选择题,那么每失败一次,下一次仍然失败的概率就会减少一些.如果对自己每一次的失败都做记录,那么最糟糕的情况是,前面99次每一次都选错了,那么最后一次必然是会正确的.其实这个 过程中,每一次失败之后的下一次选择的正确率也在提高,从第一次开始分别是:1/100,1/99,1/98… 这样的话,反复去重复100次,至少成功一次的概率就是100%.最糟糕的情况就是第100次的时候成功了. 这种情况下,第n次仍然失败的概率是: (99/100)(98/99)*…*(101-n+/102-n)*(100-n/101-n)=(100-n)/100 可以看出,随着n的增加,也就是尝试次数的增加,失败的概率会越来越小.直到第一百次失败的概率减小为0. 这种情况,完全可以得到上述结论:看似不可能的事在反复尝试中成功率会不断提高——傻逼一样坚持,总会看见牛逼的结果. 另外一种情况,也是现实生活最常见的情况. 如果这件事情是存在一些不可控因素,但并不是完全无规律可循.比如创业,或者远距离的投篮.不同的人在失败的过程中所获取的信息是不同的,多数人而言,每一次尝试,如果没成功,也可以获知到对成功存在障碍的因素,下一次尝试的时候,尽量避免在同一个地方跌倒,哪怕是换一个地方跌倒. 这个概率是无法用具体的数字来度量,但是显然,在我们每个人身边,我们可以看到,几乎所有人都会有一两个比较擅长的领域,还有些人是解决问题的高 手,总是很容易成功.因为我们生活中遇到的问题往往并不是完全随机.很多事情,比如投篮命中率,比如限时回答问题,通过不断地练习,更好的掌握力度,方向,弧度等技巧,这个不断练习,不断尝试的过程中无疑是提高了单次尝试的成功率. 同样,一个人在一个领域有一定经验之后,换一个领域也会比较容易成功.因为问题多半会有相通的部分,掌握了学习的能力和解决问题的能力,即便在不同的领域也一样. 同时,即便是同一件事情,不同人的表现是不一样的.在失败的过程中,有些人自信心受到打击,选择放弃,下一次如果不得不去做这件事情的时候,反而有了阴影,克服不了自己的障碍,成功率反而会更低.另外一部分人,越挫越勇并且善于总结失败的教训.分析事情之间的关联,那么这些人做事的成功率无疑是会越来越高的. 看似不可能的事在反复尝试中成功率会不断提高——傻逼一样坚持,总会看见牛逼的结果. 这种情况是很容易得出这个结论的. 但上面三种情况并不能足以证明“傻逼一样坚持,总会看见牛逼的结果”这一个结论,因为还存在一个问题. 反复做一件事的问题中的前提条件是:看似不可能的事件.这种事件可以分为两种的:小概率事件和不可能事件.上面三种情况分析的都是小概率事件.对于后者——不可能事件,反复尝试的结果是徒劳的.虽然都是傻逼一样的坚持,但是有些人最后牛逼了,有些人傻逼了.所以,在这个过程中,如何判断一件事情是小 概率事件还是不可能事件,就很重要. 爱因斯坦说:疯狂就是重复做一件事,但期待不同的结果. 所以有些人疯狂之后成功了,有些人就真的疯了.个中缘由,见仁见智吧. »

月杪 月杪 on 其他