Sqaure 网站所使用的技术

从他们的网站的招聘信息,Quora问答社区获取到的信息,可以大致了解情况。

早期的3人团队:
Jack Dorsey写服务器端(Python on Google App Engine)
Tristan O’Tierney 写iPhone客户端
Jim McKelvey设计硬件。
经过一个月的努力,三个创始人做出了第一个原型。

目前跑的是:

数据库:Redis and MySQL

支付平台:Ruby on Rails, Sinatra, JRuby, MRI, and Java

web: 宣传页面使用 html5,他们使用大量的js开源框架。

服务器部署在 亚马逊 CloudFront 云服务。

目前纯开发人员有大约有50人,可以从他们的开源项目看到:https://github.com/square

他们的开源代码提供了ruby代码,iPhone、Android测试框架,Android SDK,js等。

他们开发推崇TDD, Pair programming。

他们的开发理念:Rethinking,Redefining。

Protobuf Demo

操作系统:Fedora core 16

下载安装

Go to http://code.google.com/p/protobuf/ download the latest updates version

$ wget http://protobuf.googlecode.com/files/protobuf-2.4.1.tar.bz2
$ tar xvf protobuf-2.4.1.tar.bz2
$ cd protobuf-2.4.1/
$ ./configure && make && sudo make install

一般默认安装在/usr/local 目录下,需要导入环境变量:

编辑 ~/.bashrc 在后面添加:

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig$PKG_CONFIG_PATH

编译jar包:

$ cd protobuf-2.4.1/
$ sudo yum install maven
$ mvn package

在 target/ 目下下生成 protobuf-java-2.4.1.jar, 使用的时候,导入环境变量CLASSPATH 就行了。

Ubuntu 11.10,安装也很简单:

$ sudo apt-get install libprotobuf-dev libprotobuf-java
$ export CLASSPATH=$CLASSPACH:/usr/share/java/protobuf.jar

书写 .proto 文件
一个比较好的习惯是认真对待 proto 文件的文件名。比如将命名规则定于如下:
packageName.MessageName.proto

下载 vim 编辑proto语法亮度插件: http://protobuf.googlecode.com/svn/tags/release-2.0.1/editors/proto.vim 按照里面的说明安装。或者照这个操作,https://github.com/garyharan/vim-proto

服务器端与客户端socket通讯
服务器段用C++实现,客户端 Java/C++,具体代码放在 github:https://github.com/lytsing/protobuf-demo 这里就不贴出来了。

参考: Protocol Buffers的安装使用和C++入门示例

解决电子市场 3.13版本 “您的设备与此商品不兼容”的问题

Android market: Your device is not compatible with this item


用 apktool 1.4.1 反编译Vending.apk 3.1.3版本,遇到错误,无法插入调试信息再打包重新安装。搜索反编译后的文件查找信息:

您的设备与此商品不兼容。

smali/com/android/vending/R$string.smali:.field public static final availability_restriction_hardware:I = 0x7f080191

deli@deli-laptop:~/Desktop/a/Vending$ grep 0x7f080191 * -r
smali/com/google/android/finsky/activities/DetailsAvailabilityRestrictionViewBinder.smali: const v3, 0x7f080191

猜出大概代码:

public bind(View view, Document document, int iconWidth, int iconRightMargin, DfeToc toc) {

	TextView reason = view.findViewById(R.id.restriction_reason);
	int restriction = document.getAvailabilityRestriction();

	switch (restriction) {
	case 4:
		reason.setText(R.string.availability_restriction_hardware);
		break;
	}
}

public int getAvailabilityRestriction() {
	boolean hasAvailability = mFinskyDoc.hasAvailability();
	if (hasAvailability) {
		int restriction = mFinskyDoc.getAvailability().getRestriction();
		reutrn restriction;
	}

	return -1;
}

restriction的值是通过 setRestriction 设置,读取protobuf数据,也没弄清楚,因为无法插入调试信息。发现3.1.3版本比以前版本复杂多了。

最后发现

  deli@deli-laptop:~$ diff build.prop build.prop~
  31c31
  < ro.build.fingerprint=N708_800_600/broncho_N708/N708_800_600/:2.2/FRF91/user.N708_800_600.20110917.133140:user/test-keys
  ---
  > ro.build.fingerprint=N708/broncho_N708/N708_800_600/:2.2/FRF91/user.N708_800_600.20110917.133140:user/test-keys

ro.build.fingerprint=N708,N708这个是我们的项目名,临时修改编译脚本成N708_800_600,出现下划线,导致被google过滤掉了。搞第三方ROM的,注意了,别随意修改系统参数,除非你真的明白你在干啥东东。

A simple http web service

很久没更新blog了,主要是这段时间工作太忙,刚加入一家创业公司 iboxpay,做移动支付,就是做中国版的Square :)

重新温习 socket之类的内容,翻看以前写的一些代码,整理一下,一个简单的 web server,放在 github:https://github.com/lytsing/myhttpd
这个例子很简单,但涉及到的内容都具备了:

  • 基础socket使用
  • 多路复用
  • 信号处理
  • 配置文件读取

等周末再完善,加上ipv6支持,当做一个学习的教程吧。

再见了,Broncho

进入 Broncho 不知不觉已经到了第四个年头。由于个人原因,选择在这个时候跟大家告别了,舍不得这么多年一起共事的同事,从华瀚科技到数字技术园,到方大,到照明中心,点点滴滴,见证了我们共同奋斗的岁月。

感谢 Broncho 首席架构师李先静的栽培,感谢卢芳带我进入无线通讯协议领域,感谢这一路来对我帮助、鼓励的同事(包括pre-Broncoers),最感谢的,是老魏,Broncho经营到现在,他是付出了最多的心血。曾记得,09年4月份老魏宣布放弃研发多年的Broncho 手机操作系统,转投入Android平台时的情形,我们都感到很难过。Broncho项目就像他的亲生孩子,忍心丢弃,这是需要多大的勇气与决心。值得庆幸的是,现在,Broncho已经度过了最艰难时候,也有很好的前景,我可以感到由衷的欣慰了。

很抱歉不能再跟许多朋友一起共事了;祝本公司越办越好,让我的同事们可以安居乐业。

Pages: Prev 1 2 3 4 5 6 7 8 9 10 ... 19 20 21 Next