起因

其实是被阿里云搞得不太爽,学生机续费的时候不让一口气再续一年了,而且直接续费也没有优惠获得,貌似得通过他们的客户端进行续费才可以。想想,咬咬牙,一口气扔掉坑爹的阿里云机器,然后转向一家合适的主机商。

我的要求其实也很简单,并非一定要求要用到 VPS 之类的,只要有能够自动部署 Hexo 的手段,当我把 Markdown 格式的文章 Push 到仓库的时候,有东西能够帮我直接调用 Hexo 去生成,然后把结果自动扔到指定的地方就可以了。

于是呢,找了半天,终于敲定下来用 GitHub 做源码仓库,Travis CI 做构建工具,HostKer 做内容仓库的方案。

为什么选择这套方案?

其实还是懒啊,平时也没时间去折腾各种玩意了,每天有一堆烦人的事情要处理,肯定要节省发布 Blog 的时间才好。

去网上找了半天,发现很多人用 Travis CI 推东西到 gh-pages 站点服务,gh-pages 虽然支持自定义域名,但是如果用自定义域名的话,你就不要再想着上 SSL 了,这对于一个强迫症而言是不能忍的。

后面想到了很早之前的 Hostker,记得很早之前小新和我提过,他们家支持 Git 直推作为文件更新方式。于是抱着这个想法顺便再问问小新童鞋,看看他们家支不支持 SSL,得到了肯定的回答,而且还支持 Let’s Encrypt It 的证书自动获取+部署服务。这简直好顶赞,解决了我等懒癌患者的一大困扰。

那么借着 这篇放狗搜来的 Travis CI 自动部署 Hexo 教程,再耐心花上半个小时做测试,就成功搞定了全部问题。

结论

CI 工具可以这样用,真是佩服各位同行们的脑洞,我也借着这份脑洞去犯犯懒,果然懒才是最大的生产力?

评论

概况

前几天帮一个兄弟重写了一整套系统,从 ASP 成功迁移到了 PHP。

不过呢,在填这种奇怪搭配坑的路上总能够碰到一些神坑,掉进去之后半天也爬不出来。

遇到的坑

刚开始是直接装的 FreeTDS 然后再安装 PHP 的 pdo-dblib 扩展实现的连接,配置完 FreeTDS 再连接 SQL Server 的时候,一开始看起来还是挺正常的,能够直接连上,然后也能正常写。

开发到一半发现了不对劲的情况,在 参数带中文 的情况下, pdo 绑定参数之后带入查询,竟然查不到任何的结果(实际是存在匹配的记录,且在不使用绑定,然后直接用原始 SQL 语句写的情况下,能够查出来),就连写入也是有问题的。

更蹊跷的是,假如查询的时候 pdo 绑定参数值只带英文,能查到结果,且结果又不会有乱码,这我整个人就不好了。

查了半天的资料,然后结合自己的情况进行分析,排查,最后发现是 pdo-dblib 和 SQL Server 的 nvarchar 字段结合查询时,多字节字符无法正常工作,Stackoverflow上也有踩坑的同行

解决办法更是瞠目结舌,要先把字符转码成 UTF-16LE 然后再带入查询,这样就神奇的查出来了。

这个解决办法是我不能接受的,我总不能在每个 Model 对这些异类字段做标记,然后修改底层其他 composer 包里封装的处理方法吧,这样下来万一哪天又掉新坑里也不足为奇了。

最后没办法,只能转到用 pdo-odbc 去连接了。

正确的连接姿势

首先就是在类 Unix 环境(比如我用 OSX)下面怎么远程连接到 SQL Server 上呢?

要连接,首先你得有一个连接媒介,在类 Unix 环境下面有一个工具叫做 FreeTDS,提供一个桥梁让系统和远端 SQL Server 之间进行通信。

OSX 借助 Brew 需要以下一条命令进行安装

1
brew install freetds --with-unixodbc

最后一个 with 参数必须要带,要不然就不会产生 tds 的 so 文件,后面 unixodbc 设置 driver 的时候就无法下手了,安装完之后,先配置 ODBC:

编辑 ~/.odbc.ini (大家请根据自己的实际情况编辑对应的文件),并在最后加上如下内容

1
2
3
4
5
6
[服务源名称,比如test]
Driver=/usr/local/lib/libtdsodbc.so
Description= #随便写
Trace=No
Servername=dataSourceName #和后面freetds.conf中的名称对应
Database= #数据库名

然后编辑 /usr/local/etc/freetds.conf 并在最后加上如下内容

1
2
3
4
5
[dataSourceName]#和前面odbc.ini文件里的Servername保持一致
host = #主机名
port = #SQL Server 开放的端口号
tds version = #这个根据你的 SQL Server 的版本号去填,比如我是 SQL Server 2005,就填7.2,其他情况自己 Google 吧。
client charset = UTF-8 #设置对应的字符集,要不然查出来就要乱码啦。

保存之后,在确保 PHP 的 pdo-odbc 扩展是开启的状态下,直接用 pdo 的 odbc 方式去连 SQL Server 就好了。

PDO-ODBC 有坑么?

回答当然是,有!

无法多条同时批量插入(不知道是不是我姿势问题,反正我这边一次批量插入就出错,单条能够成功插入)

有时候查出来的部分结果的字段值是 null,而且不同的开发机器上相同的环境下,空的字段还不太一样,这就十分尴尬了。

究极解决方案

换 Windows 开发,然后用 pdo-sqlsrv 去连接(毕竟微软的数据库,得配套微软自己写的扩展去连才不会出事。。。)

不过你换 pdo-sqlsrv 的话,又得装其他库,也是蛮繁琐的。

如果服务器是 Windows Server 2003 的话,pdo-sqlsrv 最高还只能使用官方 2.0 的版本,2.0版本最高只支持 PHP 5.3。

民间有一个支持 Server 2003 的 3.0 版本

假如你 SQL Server 是 2005 的话,pdo-sqlsrv也只支持到 3.0(最高支持到 PHP 5.4)。3.1 版本开始只有 SQL Server 2008+ 能享用了,所以 PHP 5.5+ 你就无望啦,于是 Laravel 你最高就只能用到 5.0 啦。

Laravel 5.0 的话自带的 DB 类支持的 sqlsrv 连接方式是没有 odbc 的,对于 odbc 连接 SQL Server 的支持也是在最近的 5.2.31 才加上的。

于是,想问各位客官,有没有一种想死的感觉?

要不是客户还有其他端的东西还得跑,我想整套给他转成 PHP + MySQL 了。

我的故事讲完啦。

总结

还是希望后面的兄弟可以少踩点坑,要不然我浪费的一下午时间就没有太大意义了。

以后少接这种奇怪搭配的活,要不然光搞定这些环境问题就要浪费你一大把时间。

最后,我还活着,打算开始写点 PHP 和 Laravel 入门教程了,希望可以让后人少走弯路 :)

评论

概况

这几天改变了部署策略,放弃了家庭部署生产环境的计划,又拆下部分零件凑了一台 1U 机器。
这台机器用的是 Intel Intel S1200V3RPS 的板子,BIOS 里面集成了两种 RAID MODE,一种是 Intel RST,还有一种是 Intel ESRT II(由 LSI 提供)。
进 RAID 卡设定把盘子格掉之后,当顺其自然地插上 U 盘来一发系统的时候,发现了一个严重的问题,竟然不认刚出分出来的 RAID 盘!
话说这也不是我第一次出现这个问题,上次给别的机器装的时候,出现这个问题的时候,店家告诉我 CentOS7 不支持,得到 CentOS6 才行,当时比较急最后就直接上 CentOS6 了。这次强迫症爆发且时间充足决定花点时间研究下。
找了英特尔的官网,发现给了 Linux 版本的驱动,且要自己去安装驱动,又臭又长的说明书讲的是关于他的驱动 RPM 包的用法,然而,我都不能装系统了还要你 RPM 干甚啊。
然后去找了一大圈资料,大部分资料也都没什么卵用,正当我放弃的时候,发现了一篇不错的资料给了我启发,原文在这里

解决方案

首先到英特尔官方下驱动,地址在这里
下载完解压之后找到里面 ISO 的文件夹,文件夹里面有两个 RHEL 7系的 ISO 文件,分别是 7.0 / 7.1,因为是 CentOS 7.1 就选择 RHEL 7.1 的那个 ISO 了,解压出来把所有文件放到你的安装 U 盘根目录。
启动到 U 盘(Legency 模式)之后,在 Install CentOS 7 那个选项上按 tab 键,在 vmlinuz 后面跟上 dd modprobe.blacklist=ahci,isci nodmraid 左右两边空格隔开,敲回车。
然后会进入一个命令行选项让你选驱动文件,按实际情况选就好了,先输入 r 刷新,然后敲 1 回车选 U 盘,然后敲 1 回车选文件,最后敲 C 继续。
终于,又进入了正常的图形化安装界面,然后就和你平常一样的办法安装就是了。

网上找了半天没有相关的资料,就写下来让后面的兄弟少走点弯路吧。

评论

前言

其实,这部也是一好基友给我推荐的,抱着好奇的态度去补了一下,发现还是蛮符合胃口的。

梗概

剧透警告!
这部电影讲述了霍金从年轻到年老的时间片段的情感故事。
作为一个高智商低情商的典型理科男,霍金和简在一场聚会中偶遇,并且在交谈中意外地对上了电波。
一个理科男,碰上一个对本应是比较枯燥无味的物理话题感兴趣,并且对上电波的文科女。
这大概是霍金的情史的开端。
当别的学渣十道题目连一道都没搞定的时候,他只抽了一点点功夫就神速搞定了九道,这不能算是学神了,已经达到了学痞的境界,而且也是这个契机,他获得了教授的赏识。
可惜好景不长,霍金的身体状况越来越差,到医院的时候确诊了渐冻症,医生给的预期寿命只有两年,也算是天妒英才吧。
简不顾霍金还有其家里人的劝说,还是义无反顾选择嫁给了霍金,后面和霍金生下了一女两男。
简对霍金不离不弃二十年,把最好的青春留给了霍金,最后霍金给了简解脱,提出了离婚。
之后有了更好的行动和文字输入工具,他完成了《时间简史》。

点评

全片的 BGM 都是十分的赞,各种 BGM 和剧情都是十分贴切。
男主的演技也是十分逼真,把霍金病情恶化的细节表现演绎得十分出色,当之无愧的当年奥斯卡影帝啊。
霍金和简的颜值都是十分之高,还是十分般配的。(这也印证了一句话:丑的活该单身TAT)
霍金遇上简是他的幸运,如果没有遇上简,霍金还会有后面的成就么?这点就很难想像了(或许世界线收束后还是一样的结果,霍金还是发表了《时间简史》)
场景的镜头以及选择的拍摄角度都十分讲究,很多镜头都从侧面推进了剧情发展。
表演、拍摄、音乐都演绎的十分到位,不得不说是一部非常出色的片子。
虽然是一部 2014 年的老片,但还是不影响我对它的大赞!

评论

2015 年年度总结

发布于 gossip

完成了什么?

  • 公司和团队初步建立,积累了部分客户资源(然而只达到收支平衡)
  • 弹幕站基本写的差不多了(没上线有卵用)
  • 驾照年后就可以到手了(勉强算是今年做完的事情吧)
  • 把 Blog 从 Typecho 切换到 Hexo(顺便封印了不少黑历史)

没完成什么?

  • N2 和 软考都没去考(白白交了保护费TAT)
  • 拖延症依旧没治好
  • 弹幕站说好十月上线然而一直跳票(我先自己给自己鞭尸吧)

下一年目标

  • 扩大公司规模,净利润破 50W
  • 完成公司的业务管理平台
  • 弹幕站在春节上线,完成两次大的版本迭代
  • 开源微信公众号框架
  • 海淘代购这块挖一个大坑
  • 教程坑填掉
  • 有空把 N2 考掉?(有生之年)
  • 省钱大作战(能不剁手的坚决不剁)

自我评价

不像前年,自觉去年一年还是有进步的,学到了不少新的姿势。
从管自己到管一小队人(然而并没有管好),所以明年还是有不少提升空间。
去年一年技术发展的还是十分快的,PHP从5直接跳到了7,vue.js 从很少人知道到大家都耳熟能详。
败了一堆东西,也出了一堆东西,算是彻底解了数码瘾,看到新出的东西也没有特别想买的欲望了。
刚开始规模化接外包,不过接了一些比较失败的单子,也是因为没有按照正常的外包流程走,算是吸取了不少教训,以后的单子全部按需求文档走,不能偷懒。
如果非要问我这年过得吼不吼,还是蛮吼的吧。
就酱!明年再见!~

评论

BranchZero

一只向全栈不断努力的 Web 开发者、运维、与眼镜娘控,面向 Google 和爆栈编程,继承了大部分理科宅的特性(除了审美),可惜是个 Acer


Web Developer


HangZhou