Bochun Bai
Bochun Bai
52 posts
0 followers
  • SSLCertificateChainFile

    我使用StartCom提供的免费SSL证书已经好几年了,今天偶然用Firefox打开发现报错。 查了一圈,还是在stackoverflow找到了答案,添加SSLCertificateChainFile这个参数以后就恢复正常了。 期间发现一个SiteCheck工具,提供了证书过期的重要信息给我。  

  • Practices of using MySQL and DBPool

    给公司写的文档草稿,稍后会写成中文的。 Summary In large cluster environment, it is always challenge of manage hundreds MySQL databases. Planed down time of database server maintenance Scalability Change of data structures Ideally, these all handled by proper development process and you have enough software engineers to support. But in real world, it is more urgent of solving problems. Here…

  • Free Website Hosting (PaaS)

    自从AppFog的免费主机取消了,剩下免费账号也越来越慢。对比了各种云主机,OpenShift是目前最好的选择了。 Update 2015-Mar-06: Appfog的环境里有一个旧版的DBCP包,非常头疼。 OpenShift的免费账号功能亮点很多: 支持3个512M节点 可以建立2个App,1个MySQL; 两个App可以AutoScaleUp 可以ssh登录; 负载均衡采用HAProxy,不计费; 支持自定义域名; 默认域名rhcloud.com支持SSL; 填个信用卡注册了Bronze账号,控制好用量,也可以免费,但是可以支持自定义域名的SSL了。 试用了一下,性能比AppFog高不少,对个人网站来说,是奢侈配置。做开发的功能测试用,也很方便。

  • OpenSSL and cURL for iOS

    昨天升级iOS程序,顺便升级了依赖到的两个库,OpenSSL和cURL。 升级了版本,增加了新的iPhone5s的64位CPU的支持。 I have updated the dependency libraries of my iPhone app, OpenSSL and cURL. Added support of iPhone5s new 64bit arm64 CPU. Upgraded to latest version. Approach 交叉编译这两个库的关键是两个参数:-isysroot和-miphoneos-version-min cURL是拼上不同的参数实现的,OpenSSL已经内建有iphoneos-cross支持,修改一些参数来支持arm64和模拟器。 The key of cross compiling are two parameters: -isysroot and -miphoneos-version-min cURL is configured using parameters. While OpenSSL has a build-in target called iphoneos-cross, I…

  • new Life(location)

    有好久没有更新Blog了,在这一年忙着工作,忙着结婚,就在上个月到了加拿大开始全新的生活。 这里的工作文档写的很多,所以有更多可能把工作中可以公开的部分,写成文档放在这里分享。 最近正在修改simplecaptcha(http://simplecaptcha.sourceforge.net/)项目,增加和整理一些功能,修改后的代码发布在GitHub上叫ownCAPTCHA(https://github.com/sinofool/ownCAPTCHA)。 下一个版本完成的时候,会写一些例子在这里。

  • iCoupon黑名单

    我从2013年5月27日起,连续收到通过iMessage的垃圾短信。垃圾也就罢了,也不是一天两天了,但是这个iCoupon妄图洗白自己,所谓退订链接甚至要留下手机号码,还谎称系统故障骗人退订留下更多信息。 因为暂时没有办法屏蔽,更不想越狱引入更大的流氓。唯一的办法就是抵制这些手段宣传过的产品了。 以下是通过iCoupon推广过的各种品牌,罗列在此,列入黑名单。 2013年5月 甜风集,蛋糕; 蓝色动力,汽车养护; 2013年6月 臆蜜坊,丰胸; 吾爱吾庐连锁公寓,酒店; 狗屎咖啡,咖啡; 2013年7月 火宫殿,餐饮; DHC,化妆品; 世纪奥桥花卉园艺超市,花卉; 羽丹纤美,瘦身; 皙荷美道,丰胸; ******持续更新******

  • 6月17日改用AmazonRoute53解析本域名

    记录备下周对比

  • Build Google protobuf 2.4.1 for iOS development

    Although iOS5 shipped with a private version of protobuf but it is too old for me. Here is the script I used to build protobuf. 1. Download the newest protobuf(2.4.1 at the moment) and unpack. 2. Run this in the unpacked directory. It will create a folder named “protobuf_dist” on desktop. 3. Copy or add…

  • 使用Hive做数据分析

    在大规模推广streaming方式的数据分析后,我们发现这个模式虽然入门成本低,但是执行效率也一样低。 每一个map task都要在TaskTracker上启动两个进程,一个java和一个perl/bash/python。 输入输出都多复制一次。 经过了一系列调研后,我们开始将部分streaming任务改写为Hive。 Hive是什么? Hive是单机运行的SQL解析引擎,本身并不运行在Hadoop上。 SQL经过Hive解析为MapReduce任务,在Hadoop上运行。 使用Hive可以降低沟通成本,因为SQL语法的普及度较高。 Hive翻译的任务效率不错,但是依然不如优化过的纯MapReduce任务。 数据准备 原始日志文件是这样的: 1323431269786 202911262 RE_223500512 AT_BLOG_788514510 REPLY BLOG_788514510_202911262 分别对应的字段是 <时间> <操作人> [[说明] [说明]……] <操作> <实体> 上面的例子对应的含义是: <时间>: 1323431269786 <操作人>: 202911262 [说明]: RE_223500512 [说明]: AT_BLOG_788514510 <操作>: REPLY <实体>: BLOG_788514510_202911262 扩展Hive的Deserializer 要用SQL分析数据,Hive必须知道如何切分整行的日志。Hive提供了一个接口,留给我们扩展自己的序列化和反序列化方法。 import java.util.Properties; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hive.serde2.Deserializer; import org.apache.hadoop.hive.serde2.SerDeException; import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector; import org.apache.hadoop.io.Writable; public class RawActionDeserializer…

  • 技术和故障

    这是写给内部同事的日志,也有部分概念有通用意义,就不加密了。 做技术开发的人知道,只要写代码就一定会出错,叫bug。 有的错误在上线之前没有检查出来,直到被用户使用了我们才知道。这种bug就是故障。 出现故障是再正常不过的事了,我认为处理过程,可以让故障成为宝贵的财富。 我设计的故障处理流程,分为三个阶段:反馈、处理、反思。 1 反馈阶段 说实话,大部分的故障是类似的。反馈阶段就是要把各种用户描述归一成为同一个技术问题。 这个阶段具体还要分成“用户反馈”,“已沟通”,“技术已确认”,三个状态。分别由“客服”和“技术经理”操作。 2 处理阶段 这个阶段就是写代码的阶段,把造成故障的bug修复。技术都懂得怎么做。 这个阶段具体还要分成“已分派”和“线上已修复”两个状态。这两个状态的执行者分别是“技术经理”和“测试经理”。 换句话说,一线的工程师编码的工作,是在“已分派”状态进行的。然后交给OP和QA。 3 反思阶段 这个阶段是最核心,同时是最欠缺的阶段。 这个阶段具体分成“已确认解决方案”和“已完成解决方案”两个状态。 所谓“解决方案”,一定是切中要害的解决,并且可以保证类似问题可以避免再次发生。 “解决方案”和“修复BUG”的区别在于有没有反思发生的根源。 整个流程的设计,核心目的是自我进化。只要持续犯错,再避免重复犯错,最终一定是伟大的团队。