铁路订票系统的平民技术思路

虽然今年不打算春节走铁路回家,但看了12306.cn的种种传奇还真是感觉很震撼,证实自己一贯的看法,电子商务的关键是商务(商品、服务、供需关系),电子只是配角。

又读了几篇很有意思的技术文章

值得记录我自己的粗浅想法(没有海量处理、排队异步啥的高档技术,都是平民思路)。

基本的数据量是这样估算的

  • 2012年春运客流量预计将达到31.58亿人次,比2011年增长9.1%,创历史新高。全国铁路将发送旅客2.35亿人次,同比增加1352万人次,增长6.1%,日均588万人次,同比增加34万人次。
  • 600万人/天/(1000人/车次/天)= 6000车次
  • 经过北京共有635列列车通过[ctrip.com],与前面的总车次估算基本没有大矛盾。

这样的话,解决查票、订票的流程中的数据层的资源抢占的瓶颈,以我理解的业务场景去设计是这样的

  • 不考虑一个客户同时买很多不同车次的情况,除非黄牛。那就没啥购物车、订购清单之类的汇总计算。所以不同车次的数据随便拆分。这样就可以直接将不同车次的数据服务水平拆分到100到1000台服务器上,这些服务器之间没啥数据同步的需要,崩了一两个也没关系不影响大局。
  • 也没有“查全国所有车次剩余票数清单”之类的对车次进行实时汇总计算需求,也没有什么“买T16/Z13组合优惠”之类的车此间将官关系,所以按上面的划分方式问题不大。做到最土,各个铁路局自己搞个几个服务器随便咋做,要求给个统一的web service接口对单独的车次进行访问和操作也完事了。土鳖局做得烂也不影响全国大局。
  • 每个车次每一天的一趟,都可以抽象成一个独立的产品,卖光了就完事。用分区表、分区视图区分开没个车次的每一趟,土一点每天自动生成一个新表也无所谓。1000个人的车次算10万人抢票,关系数据库的锁定和资源抢占也不算啥大事,至少不影响其他车次和本车次不是这一趟的业务。

前端的HTTP服务,搞一些CDN和分布式,搞搞优化,用平民级别的手段,再大的PV也不会死到哪去。

总之还是觉得火车票还是很简单的电子商务模型,没什么复杂型号、组合销售、协议折扣之类的幺蛾子;每个客户都是盯准目标直接来拿货的;每个货(车次当天的一趟)有效期都有固定的区间,固定的数量。总之给我这种善于糊弄客户和老板的民企专家很大的想象空间去琢磨各种大胆的tradeoff。欢迎铁道部采用我的方案,再出问题的时候你们再来找我去编一套骗人的嗑儿,我经验更丰富,保证不像你们自己整的那么欠揍。

北京空气质量真的很次

看了http://songshuhui.net/archives/58387这个文章,意思理解了但是原理一点儿没看懂。尤其是下面的图,很悲观的一张图,我的感觉不知道为什么不是那么悲观,突然感觉到如果北京是空气这么恶劣的一个地方,说明还有很多空气新鲜的地方可去,很有希望。总比北京已经很次了,结果还是世界上最好的地方,那样才真悲观呢。

用Google Spreadsheet批量生成化学信息和结构图片

 手里有一串CAS或者化学名列表(十有八九是存在Excel里的),想补全其他化学基本信息包括结构式图片,现在已经有一些Excel的插件能用了,不过在Google Spreadsheet里做这件事真是格外感到荡气回肠…

所有的原理、代码、操作指南都是从 http://metamolecular.com/gchem/ 这里学来的。

实验过程全程翻墙。

基本的原理是

  • 有一个Web Service能完成化学方面的事情。这里用的是著名的 http://cactus.nci.nih.gov/chemical/structure
  • Google Spreadsheet能执行自定义的脚本(javascript);而且脚本里还能用UrlFetchApp.fetch(url)这种去访问网页或Web Service!

脚本安装和使用的过程 http://metamolecular.com/blog/2011/02/22/gchem-easily-convert-names-and-cas-numbers-to-chemical-structures-in-google-spreadsheets/

效果

其他

  • 表格导出Excel文件时自定义脚本都失效了;保存成PDF图都没了。
  • 再加上现在国内墙越弄越nb,恐怕没法作为常用工具去用。
  • 比较容易可以更换成自己写的Web Service,比之现在查到的内容更精准有效。

 

MIOSS 2011资料下载

多谢chemhack同学给的链接,下载到了的所有演讲资料。

https://registration.hinxton.wellcome.ac.uk/display_info.asp?id=246

必须得说,资料里面很有料;也必须得说,大部分都没看懂。

大致有感觉的是,开源的意思就是开放,开放的意思就是融合,所以一干工具的组合很有意思

  化学信息软件 数据处理/数据挖掘/流程控制 关系数据库
Gregory Landrum RDKit Knime PostgreSQL
Rajarshi Guha CDK R  
Kevin Lawson, LICSS System CDK MS Excel  
Dr Katy Wolstencroft CDK Taverna  
Thorsten Meinl RDKit, Indigo Knime  

事实上现在存在的工具的组合远不止于此,比如历史悠久的mychem=openbabel+mysql。搞开源的人耻于鼓捣微软的平台(鼓捣苹果就高雅了?),所以自己还是需要再做功课,争取能做一点贡献。

Evernote VS. TiddlyWiki

 电子笔记是我深度依赖的工具,Evernote和TiddlyWiki各有千秋,不好抉择啊。

  TW EN 对Charlie重要
条目间引用 Wiki风格,用[[...]]很方便 *, TW胜
TAG OK,且TAG自身也是一个条目 OK  
表格 比较复杂,用字符控制,但效果不错,表头、单元格合并等都能很好表现。不能从别处粘贴。 能粘贴,能可视化编辑,效果比较弱。  
图片和附件 文件单独存放,不方便。 能粘贴。有屏幕截图功能,非常方便。 *, EN胜
格式 强,掌握控制字符,加上CSS几乎为所欲为。 弱,连H1/H2…都不支持。 *, TW胜
筛选 OK OK,有“属性”的功能;可以使用tag组合筛选;可以保存自定义筛选条件。 *, EN胜
备份和同步 单一文件,可以通过快盘、Dropbox来同步。不能在网上编辑,必须下载到本地再上传回去。不能解决冲突。 有服务器支持,网上编辑和冲突处理都非常好。 *, EN胜
客户端 浏览器即可。 专门客户端,也在网站上直接浏览和编辑。  
平台 理论上不限平台,但不是所有的平台上的浏览器都能支持本地保存HTML。 Linux下没有官方客户端,可用Nevernote。主流智能手机操作系统有客户端,可以搞拍照上传。支持IPAD。 *, EN胜
可定制性 强。可以自己充分DIY,也有很多插件。 *, TW胜
文档版本 有,需要升级。  
GTD checkboxPlugin,挺好用了。 属性>包括>未完成待办事项条目,  
其他   * 邮件接收(充分折腾后暴强大)
* 手写,OCR
* Chrome等浏览器插件
 

 

第6千万个CAS注册的化合物

 原文:

主要的意思

  1. 第6千万个CAS注册的化合物,是一个中国的专利,CAS号是1298016-92-8。
  2. 从2009年开始,在新化合物的专利注册上,中国就超过其他国家,估计这种领先优势将一直保持下去。
  3. 第5千万个化合物是不到两年之前注册的,而且速度还在不断加快。这样算起来的话,每天平均有几万个新的CAS注册化合物,不得了,我有些怀疑Chemical Abstracts Service (CAS)的工作质量。

 

弱智的联想在线客服机器人

8月份给媳妇买的乐phone手机,昨天就翘掉了,屏幕不亮,但是听声音别的东西还没坏。更气人的是联想网站上不给维修的客服的电话,只有一个“在线客服”,然后在线客服还没人值班,只有个sb机器人,给我这样的回答

跳跃,两岁半

Fingerprint similarity and substructure filtering using Lucene

Lucene is a great tool for retrieving fragmented information even including the fragmenting process (the Analyzer). So there was an intuitional way to retrieving molecules from a cheminformation database with the Lucene engine. ChemSink’s about (http://www.chemsink.com/about/) also mentions that "The chemical search uses Open Babel, Lucene, and MySQL ". Recently I have worked it out and have deployed on production services.

How it works

The concepts is connected as blow and the implementation is not hard. I work on my cheminformation platforms based on .NET and use Lucene.NET.

  1. A Molecule is a File in Lucene.
  2. Fingerprint is a Field. That means other information or even another suite of fingerprint can be stored for being queried.
  3. A Bit in the fingerprint is a Term.
  4. Substructure search queries Lucene for all the set bit in fingerprint of the query molecule are required in the result molecules.
  5. Similarity search finds the most relevant molecules.

Similarity and Lucene

The most popular similarity algorithm being used is the Tanimato as written as

As my understanding, this coefficient is so widely used most because it’s simple and running fast for some time-critical cases such as online searching.

Lucene employs Cosin-Similarity with Vector Space Model (VSM) of Information Retrieval.

http://lucene.apache.org/java/3_0_0/api/all/org/apache/lucene/search/Similarity.html

and norm(t,d) part includes three parts to be multiplied, the lengthNorm part stands for what is effected by the length of the document (total fingerprint bits count of a molecule).

The default Similarity implementation inside Lucene is ready to be used for similar molecules retrieving.

More about the lengthNorm

In my researching phase I have found that the scores of several different target molecules are the same in value. It’s found that the lengthNorms are all the same for this several molecule while they have various number of fingerprint bits been set. The lengthNorm is not calculated while the searching phase but pre-calculated and stored at the indexing phase. Finally I have found this sentence inside the Lucene documents.

"However the resulted norm value is encoded as a single byte before being stored… comes with the price of precision loss"

So my molecules are treated as the same length documents when being queried.

Molecule ID # of bits set

lengthNorm calculated
in indexing phase

lengthNorm stored
and been
 
11096 23 0.2085 0.1875  
11578 27 0.19245 0.1875  
201736 28 0.18838 0.1875  

The formula to calculate lengthNorm is 1.0 / Math.Sqrt(bits_set)

Fortunately, the DefaultSimilarity class could be overrided including the lengthNorm function. According to Duan Lian’s diagram of distribution of number of fingerprint bit set, there exists a function to mapping this distribution to a more flat one and been using to calculate lengthNorm and take full advantage of the precision-limited value.

 Here is the distribution of fingerprint darkness of my database of 80000 commercial compounds. 

儿子两岁两个月学会了翻跟头

大概半年前,为了逗他玩儿,我示范了一下翻跟头。没想到这小子念念不忘,想起来就练习一下,昨天晚上终于熟练地进行汇报演出了。壮壮最喜欢动物和动物园,现在看潜质,以后说不定可以去马戏团工作。

Next Page »

Random posts