今天在google reader上无意中看到了twitter开源出来的RPC框架Finagle项目。简单看了介绍,立刻引起了我的兴趣,一是Finagle提供了RPC服务器端和客户端所需的众多成熟的功能,另外则是Finagle是用我所喜欢的scala语言写的。
Finagle基于Netty,支持众多rpc调用方式,包括request-response, streaming 和 pipelining;同时也提供对于保持状态的支持。
客户端特性
- Connection Pooling
- Load Balancing
- Failure Detection
- Failover/Retry
- Distributed Tracing (a la Dapper)
- Service Discovery (e.g., via Zookeeper)
- Rich Statistics
- Native OpenSSL bindings
- Sharding
服务器端特性
- Backpressure (to defend against abusive clients)
- Service Registration (e.g., via Zookeeper)
- Native OpenSSL bindings
支持的协议
- HTTP
- Streaming HTTP (Comet)
- Thrift
- Memcached/Kestrel
很多中国人的习惯是按照农历过生日的,但是在Google Calendar里添加农历生日只能一年一年的添加,而不能一次添加多年,这样就很不方便。为了避免这个麻烦,在几个月前写了一个程序,用来生成按年重复的农历生日的ICS文件,导入Google Calendar里,避免一年一年的添加带来的麻烦。程序是一个Web应用,运行在GAE(Google App Endine)之上,地址在这里: http://spur.appspot.com
前几天有网友给我发信说他在用这个工具,问我能不能开源,因为appspot随时可能会被封掉,这样就用不了了。如果开源的话别人拿到源代码至少可以自己部署起来使用。我想这也是个不错的主意,本来这只是我个人写着玩的东西,能对人有帮助还是很高兴的。
于是在Google Code上建了个项目,把源代码放了上去,地址: http://code.google.com/p/lunar-cal-ics-gen/ 。
简单说明一下:
- 程序使用python语言编写,运行于GAE平台, 要想在本机运行,需要下载GAE SDK。当然,也可以修改代码改造成不依于GAE的Web应用。
- Web框架使用了从friendfeed开源出来的tornado,具体介绍可见这里 。
- 生成日历使用的是icalendar 库,计算农历的代码取自pyzh 项目。
目前添加日历的方式是以ics文件做为中介,最初曾设想通过GData API直接将日历添加到Google Calendar,不过由于时间关系,一直没来得及做这件事,也不确定这个想法是否可行。
程序截图