<淘宝技术这十年>读书笔记–好架构和好团队是随着好公司一起成长的.

粗略的翻完了子柳的<淘宝技术这十年>,非常赞同”好架构不是设计出来的”.

1.淘宝最初的lamp代码是花钱买的,此时投入产出比非常重要.

2.最初应对数量增长的思路是加机器(可以看出从webserver到DB读写分离,其实思路差不多).在前期这其实是最为划算和最简单的.

3.当加机器无法满足压力时,放弃了开源产品而转投商业产品.比如购买IBM小机,外聘Sun公司来开发支付宝,但是由于外来团队的一些理念,包括商业利益在作祟,最终还是走了一些弯路,比如EJB的使用.

4.当商业产品也无法满足时(或许还有成本考虑),果断的去IOE.这个过程也是最为关键的思路转变,因为对技术团队的要求非常高,而且意味着技术团队本身要开始摸着石头过河,面对很多商业产品也未曾涉及的领域进行研发.虽然这个转变并不容易,至少历经了三年以上的时间,但是也是奠定淘宝技术大佬地位的关键.

5.TSF,TDDL等一系列产品的出炉都是在对自身业务需求清晰的梳理后,运用强大研发团队自己开发的.可以看出,最开始出现的都是一些相对偏重应用层面,研发难度稍小的中间件和功能模块,后来逐渐深入到了存储,网络分发等更加偏底层,且研发难度更高的基础架构优化.这种高压力倒逼技术升级的场景,使得技术人员越发优秀,研发团队的自信心逐渐增强.

6.淘宝从开源到商业再到自主,是一条常规的技术升级之路.只是淘宝规模的迅速扩大,使得这种技术的升级迭代更快.可以看出,几乎淘宝前5年时间就走完了从lamp到真正的分布式计算之路,高速发展依赖于人才,我觉得这里面透露出淘宝在人才储备和培养方面工作也很出色.

从Ubuntu迁移至OS X.

前些日子把Ubuntu从1204升级至1304后,问题多多.
教训就是Ubuntu最好一直用LTS,如果实在要升级,建议重装,在原系统上Update实在不是一个好建议.

之前就一直很心仪OS X,这次就趁着机会入手了Macbook pro.

到目前用了一个礼拜,现在说说和ubuntu的区别.

1.OS X对文件的”剪切”不是特别提倡,拖动到另外一个文件夹的默认动作是拷贝.

2.OS X对于复制文件夹的目标目录中,假如存在同名文件夹的默认处理很怪异,它会删掉原文件夹,再把新的拷贝进去.而不是windows和ubuntu默认的那样是合并两者.

3.OS X默认没有类似apt-get或者yum这样的工具,可以安装ports或者homebrew,我看很多人都推荐brew,所以就跟大流了.用起来brew install XXX,除了不用sudo,其他和apt-get没什么区别.

4.mac把我们熟悉的ctrl键的功能拆成了commad和control,平时用起来command用的比较多.比如command-C,command-V,command-S,command-A,所以也没什么太大区别.但是,但是,对于我这个用惯了vim的同学来说,稍微有点分裂,因为在别的应用都是用command多,而到了vim中,又要大量的使用control,还是要适应一段时间,反正这一个礼拜了,现在用起来还得很刻意的注意一下到底是该用command还是control,没有之前用ubuntu那么行云流水.

5.OS X上软件质量都很高,远超ubuntu,对比windows也毫不逊色.对于非windows程序员来说,用这个完成日常工作问题不大.IDE,数据库管理器都有很好的软件.(虽然正版价格昂贵,但是破解版挺容易找,罪过罪过)

6.虽然OS X也是unix大家族的一员,但是有些在linux上好好的开源软件到OS X上可能会有问题,而且开源社区解决的速度远不如linux~比如今天就遇到的thrift 0.9.1在OS X最新的Mavericks上build失败的问题,社区说将留到0.9.2解决,我看了一眼bug,现在还是unresolved状态,鬼知道什么时候能搞定.

7.开发人员拿到OSX的第一件事最好是装X Code.里面集成了很多有用的东西,省的自己一个一个装,比如svn.

8.OS X默认读取的是~:.bash_profile,而不是ubuntu默认的~:.bashrc.经测试ubuntu的配置文件拷过来改个名字就能用.

———————————————————-

最后推荐一些我觉得mac上还不错的软件:

QQ,旺旺,QQ音乐,有道笔记,迅雷,有道词典,百度云同步盘.

iterm2 用来替代原生的终端.

textmate用来替代原生的文本编辑器(据说最新版已经开源).

Navicat数据库神器~

通过命令行提交bugzilla

python-bugzilla 是一个用于操作Bugzilla的命令行工具。
如何安装
以RHEL6为例

# wget ftp://rpmfind.net/linux/epel/6/x86_64/python-bugzilla-0.9.0-1.el6.noarch.rpm
# yum install python-magic
# rpm -ivh python-bugzilla-0.9.0-1.el6.noarch.rpm

除此之外还需要python的bugzilla和requests的module

解压后,到各自的目录执行:

sudo python setup.py build

sudo python setup.py install

安装好之后就有一个命令行工具 /usr/bin/bugzilla
如何使用
Bugzilla有非常多的功能,具体功能请 man bugzilla,这里仅以创建新Bug为例说明用法:

# bugzilla –bugzilla=http://bugzilla.youserver.com/xmlrpc.cgi –user=xxxx –password=xxxxx new –product=test-website –version=unspecified –component=test –summary=”test python bugzilla” –comment=”create bug for test”

JS实现无服务器交互的table表格CSV下载

工作需要提供一个表格的下载,常规的实现方式有如下2种:

一.将表格的查询排序条件重新提供给服务端,服务端重新查询数据并通过set http header的方式进行下载.缺点是1,页面需要对用户的排序行为进行记录,比较繁琐.2.服务器需要重新查询,如果查询比较复杂,效率是有问题的.

二.js将表格内容直接生成csv,然后将整个csv回推给服务端,服务端生成http头并将内容原封不动的返回.缺点是要进行一次服务器交互,且个人感觉服务端代码没有必要.

后来在网上查找更优方案的时候发现了data uri (Wiki),然后找了一些资料,最终完成了js直接通过页面的table元素生成csv并无服务端交互的下载.

主要步骤:

1.通过js构造csv

2.构造data uri并模拟a.click事件. 这里面在做的时候发现了一点问题,就是当直接对csv的string下载的时候,换行符会消失掉,考虑到data uri对base64的支持比较好.所以我就用了一个偷懒的办法-将字符串先encode为base64,然后将base64data作为参数.

firefox 25, chrome 25测试通过, safari对于a连接的download标签支持(影响下载后默认的文件名)有问题,下载内容没问题.

代码如下:

function downloadCSV(){                                                
    var data = $("#tableContent_").table2CSV({delivery:'value'})       
    var base64data =  base64encode(utf16to8(data))//if not utf16to8,chinese char will error                     
    var uri = 'data:application/csv;base64,' + base64data              
    var downloadLink = document.createElement("a");                    
    downloadLink.download = "mytabledata.csv"                         
    downloadLink.href=uri;                                             
    document.body.appendChild(downloadLink);                           
    downloadLink.click();                                              
    document.body.removeChild(downloadLink);                           
}

 

 

参考资料:

js table 2 csv

http://www.kunalbabre.com/projects/table2CSV.php

js base64 encode/decode

http://www.cnblogs.com/ricksun/archive/2012/08/27/2658654.html