正在加载...

近千本Dropbox分享的Kindle中文电子书,持续更新中

一月 31st, 2012

这个不知道之前有没有人发过,如果已经看到过请忽略。Dropbox中的内容由网友scomper提供。

Dropbox电子书共享页面的地址是http://db.tt/rNe0wXl

没有Dropbox帐号的同学可以通过邀请链接http://db.tt/T8Prpbx注册,这样还可以为彼此增加250MB的存储空间。

有Dropbox帐号可以点页面中的"Copy to my Dropbox"将文件夹整个拷贝到自己的Dropbox中。

外国文学
1984.mobi
1Q84.mobi
X的悲剧.txt
一个人的好天气.pdf
一个陌生女人的来信.mobi
万物有灵且美.mobi
三口棺材.mobi
三杯茶.mobi
不去会死!.mobi
不抱怨的世界.mobi
不抱怨的世界2.mobi
且听风吟.mobi
世界十大禁书完美合集.mobi
东霓.mobi
丹布朗作品集.mobi
人性的弱点.mobi
优雅一生的装扮课.mobi
伯恩的身份.mobi
假若明天来临.mobi
傲慢与偏见.mobi
剑与禅:宫本武藏.pdf
动物庄园.mobi
十一种孤独.mobi
博尔赫斯小说集.mobi
双城记.pdf
吸血鬼日记1:觉醒.mobi
吸血鬼日记2:斗争.mobi
吸血鬼日记3:狂怒.mobi
吸血鬼日记4:黑暗重汇.mobi
告别天堂.mobi
呼啸山庄.mobi
哈利波特全集.mobi
哈尔罗杰历险记.mobi
国富论.-.亚当斯密斯.mobi
在路上.mobi
基地.mobi
基督山伯爵.mobi
复杂-米歇尔沃尔德罗普.mobi
失控.pdf
失落的秘符.mobi
安娜·卡列尼娜.mobi
安徒生童话.mobi
少有人走的路.mobi
岁月的泡沫.mobi
巴黎圣母院.mobi
希区柯克悬念故事(全八册).mobi
希腊神话故事.mobi
幽灵男.pdf
当我们谈论爱情时我们在谈论什么.mobi
彼得·潘.mobi
德川家康(全集1-13).mobi
心是孤独的猎手.mobi
忏悔录-奥古斯丁.mobi
悲惨世界.mobi
情人.mobi
我的前妻们.mobi
扫起落叶好过冬.txt
挪威的森林.mobi
教父.mobi
敦煌.mobi
斯蒂芬·金_经典系列.mobi
日本四大推理奇书之黑死馆杀人事件.mobi
时间回旋.mobi
时间旅行者的妻子.mobi.pdf
暮光之城(全集1-5).mobi
最初的爱情,最后的仪式.mobi
月亮和六便士.mobi
朗读者.pdf
末日逼近(上下).mobi
村上春树三大杰作(合集).mobi
查太莱夫人的情人.mobi
格林童话集.mobi
森村诚一作品集.mobi
橙.mobi
欧亨利短篇小说集.mobi
汤姆叔叔的小屋.mobi
沙丘三部曲.mobi
海伯利安-[美]丹·西蒙斯.mobi
海边的卡夫卡.mobi
灿烂千阳.mobi
牧羊少年奇幻之旅.mobi
猎杀红色十月号.pdf
猫与鼠.prc
瓦尔登湖-梭罗.pdf
生命中不能承受之轻.mobi
男人一本书.mobi
男人这东西.mobi
百年孤独.mobi
看不见的城市.mobi
看得见的与看不见的.txt
硅谷禁书.mobi
福尔摩斯探案全集.mobi
窗边的小豆豆.mobi
第一次一个人旅行.mobi
第二十二条军规.mobi
简·爱.mobi
简爱.pdf
约翰克利斯多夫.pdf
纳尼亚传奇(全集).mobi
罪与罚.mobi
肖申克的救赎.mobi.pdf
舞!舞!舞!.mobi
荆棘鸟.mobi
莎士比亚全集.mobi
莫泊桑短篇小说精选集.mobi
菊与刀.mobi
蜘蛛女之吻.mobi
蝴蝶梦.mobi
达摩流浪者.mobi
达芬奇密码.mobi
追忆似水年华.mobi
追风筝的人.mobi
银河系漫游指南.mobi
银河英雄传说.mobi
阿狸·梦之城堡.mobi
阿狸·永远站.mobi
阿甘正传.mobi.pdf
阿甘正传续集.mobi
雪国.mobi
青春咖啡馆.mobi
静静的顿河.mobi
香水—个谋杀犯的故事.mobi
魔戒(全集).mobi
麦田里的守望者.mobi
鼠疫.mobi
龙纹身的女孩.mobi
银孔雀.mobi
遥远的野玫瑰村.mobi
黄昏海的故事.mobi
风与树的歌.mobi
白鹦鹉的森林.mobi
人骨拼图.mobi
老人与海.mobi
吉檀迦利.mobi
青鸟.mobi
尼尔斯骑鹅历险记.mobi
商道.mobi
石猴子.mobi
消失的人.mobi
空椅子.mobi
棺材舞者.mobi
挪威的森林(林少华译).mobi
人性的弱点.mobi
探索奇迹.pdf
珍珠.pdf
基地系列:基地后传2-基地与地球.pdf
基地系列:基地前传1-基地前奏.pdf
基地系列:基地后传1-基地边缘.pdf
基地系列:基地三部曲3-第二基地.pdf
基地系列:基地三部曲2-基地与帝国.pdf
基地系列:基地三部曲1-基地.pdf
光晕5:丰饶星战役.pdf
光晕4:奥星的幽灵.pdf
光晕3:初次反击.pdf
光晕2:洪魔.pdf
光晕1:致远星的沦陷.pdf
楼兰.mobi
冰与火之歌(1-4).mobi
神经浪游者-威廉吉布森.mobi
失控_机器、社会与经济的新生物学.mobi
日本沉没.mobi
基地系列(1-7).mobi
马耳他黑鹰.mobi
爱的艺术.mobi
日本沉没.mobi
西德尼·谢尔顿作品集.mobi(1003)
[日]东野圭吾《伽利略的苦恼》.mobi
[日]东野圭吾《使命与心的极限》.mobi
[日]东野圭吾《侦探伽利略》.mobi
[日]东野圭吾《侦探俱乐部》.mobi
[日]东野圭吾《信(手纸)》.mobi
[日]东野圭吾《再生魔术之女》.mobi
[日]东野圭吾《分身》.mobi
[日]东野圭吾《十一字杀人》.mobi
[日]东野圭吾《单恋》.mobi
[日]东野圭吾《变身》.mobi
[日]东野圭吾《同级生》.mobi
[日]东野圭吾《名侦探的守则》.mobi
[日]东野圭吾《名侦探的诅咒》.mobi
[日]东野圭吾《回廊亭杀人事件》.mobi
[日]东野圭吾《圣女的救济》.mobi
[日]东野圭吾《嫌疑人X的献身》.mobi
[日]东野圭吾《宿命》.mobi
[日]东野圭吾《布鲁特斯的心脏》.mobi
[日]东野圭吾《平行世界的爱情故事》.mobi
[日]东野圭吾《幻夜》.mobi
[日]东野圭吾《彷徨之刃》.mobi
[日]东野圭吾《恶意》.mobi
[日]东野圭吾《我杀了他》.mobi
[日]东野圭吾《放学后》.mobi
[日]东野圭吾《时生》.mobi
[日]东野圭吾《杀人之门》.mobi
[日]东野圭吾《毒笑小说》.mobi
[日]东野圭吾《毕业前的杀人游戏》.mobi
[日]东野圭吾《沉睡的森林》.mobi
[日]东野圭吾《没有凶手的杀人夜》.mobi
[日]东野圭吾《流星之绊》.mobi
[日]东野圭吾《湖边凶杀案》.mobi
[日]东野圭吾《濒死之眼》.mobi
[日]东野圭吾《白夜行》.mobi
[日]东野圭吾《秘密》.mobi
[日]东野圭吾《红手指》.mobi
[日]东野圭吾《美丽的凶器》.mobi
[日]东野圭吾《超·杀人事件》.mobi
[日]东野圭吾《过去我死去的家》.mobi
[日]东野圭吾《雪地杀机》.mobi
[日]东野圭吾《预知梦》.mobi
[日]东野圭吾《黑笑小说》.mobi
阿加莎.克里斯蒂\ABC谋杀案.mobi
阿加莎.克里斯蒂\万圣节前夜的谋杀案.mobi
阿加莎.克里斯蒂\三幕悲剧.mobi
阿加莎.克里斯蒂\东方快车谋杀案.mobi
阿加莎.克里斯蒂\云中命案.mobi
阿加莎.克里斯蒂\人性记录.mobi
阿加莎.克里斯蒂\借镜杀人.mobi
阿加莎.克里斯蒂\古墓之谜.mobi
阿加莎.克里斯蒂\命案目睹记.mobi
阿加莎.克里斯蒂\啤酒谋杀案.mobi
阿加莎.克里斯蒂\四魔头.mobi
阿加莎.克里斯蒂\圣诞奇案.mobi
阿加莎.克里斯蒂\地狱之旅.mobi
阿加莎.克里斯蒂\复仇女神.mobi
阿加莎.克里斯蒂\大象的证词.mobi
阿加莎.克里斯蒂\奉命谋杀.mobi
阿加莎.克里斯蒂\尼罗河上的惨案.mobi
阿加莎.克里斯蒂\幕后凶手.mobi
阿加莎.克里斯蒂\底牌.mobi
阿加莎.克里斯蒂\怪屋.mobi
阿加莎.克里斯蒂\怪钟疑案.mobi
阿加莎.克里斯蒂\悬崖山庄奇案.mobi
阿加莎.克里斯蒂\斯塔福特疑案.mobi
阿加莎.克里斯蒂\斯泰尔斯庄园奇案.mobi
阿加莎.克里斯蒂\无人生还.mobi
阿加莎.克里斯蒂\无尽长夜.mobi
阿加莎.克里斯蒂\暗藏杀机.mobi
阿加莎.克里斯蒂\杀人不难.mobi
阿加莎.克里斯蒂\柏棺.mobi
阿加莎.克里斯蒂\死亡约会.mobi
阿加莎.克里斯蒂\死人的殿堂.mobi
阿加莎.克里斯蒂\沉睡的谋杀案.mobi
阿加莎.克里斯蒂\沉默的证人.mobi
阿加莎.克里斯蒂\清洁女工之死.mobi
阿加莎.克里斯蒂\牙医谋杀案.mobi
阿加莎.克里斯蒂\破镜谋杀案.mobi
阿加莎.克里斯蒂\空谷幽魂.mobi
阿加莎.克里斯蒂\第三个女郎.mobi
阿加莎.克里斯蒂\罗杰疑案.mobi
阿加莎.克里斯蒂\致命遗产.mobi
阿加莎.克里斯蒂\蓝色列车之谜.mobi
阿加莎.克里斯蒂\藏书室女尸之谜.mobi
阿加莎.克里斯蒂\褐衣男子.mobi
阿加莎.克里斯蒂\闪光的氰化物.mobi
阿加莎.克里斯蒂\阳光下的罪恶.mobi
阿加莎.克里斯蒂\零时.mobi
阿加莎.克里斯蒂\高尔夫球场命案.mobi
阿加莎.克里斯蒂\魔手.mobi
阿加莎.克里斯蒂\鸽群中的猫.mobi

二十四史
01史记–24明史.pdf

历史人文
一口气读完世界历史.mobi
万历十五年.pdf
中国历史通俗演义.mobi
中国大历史.mobi
中国最美的100风情小镇.mobi
中国近代史.prc
乾隆皇帝.mobi
二月河帝王系列.mobi
剑桥中华民国史(上卷).mobi
剑桥中华民国史(下卷).mobi
剑桥中国史(全集).mobi
剑桥中国晚清史(上卷).mobi
剑桥中国晚清史(下卷).mobi
北洋裂变:军阀与五四.mobi
大秦帝国.mobi
如果这是宋史(1-4全集).azw
康熙大帝.mobi
张居正.mobi
我们台湾这些年_讲述台湾老百姓自己的故事.mobi
战天京.mobi
明朝那些事儿.mobi
春秋左传.mobi
曾国藩文集.mobi
曾國藩第一部血祭.mobi
曾國藩第三部黑雨.mobi
曾國藩第二部野焚.mobi
最寒冷的冬天-美国人眼中的朝鲜战争(节选).mobi
朱鎔基傳.mobi
李开复自传:世界因你不同.mobi
武则天正传.mobi.pdf
毛泽东鲜为人知的故事.prc
毛泽东传(含图版).mobi
毛泽东传(文字版).mobi
毛泽东最后七年风雨路.mobi
民主的细节.mobi
活着就为改变世界.mobi
流血的仕途.mobi
真相与自白.mobi
第二次世界大战回忆录.mobi
细说三国.mobi
细说两晋南北朝.mobi
细说元朝.mobi
细说宋朝.mobi
细说明朝.mobi
细说民国创立.mobi
细说清朝.mobi
细说秦汉.mobi
细说隋唐.mobi
胡雪岩1:胡雪岩.mobi
胡雪岩2:红顶商人.mobi
胡雪岩3:灯火楼台.mobi
蒋介石传.mobi
蒋氏家族全传.mobi
袁氏當國.mobi
货币战争.mobi
货币战争2:金权天下.mobi
货币战争3:金融高边疆.mobi
趣读史记:不可不知的49个史记人物.mobi
近距离看美国(全集).mobi
雍正皇帝.mobi
李鴻章.mobi
易中天:先秦诸子百家争鸣.mobi
曾国藩的正面与侧面.pdf
吕氏春秋.pdf
和珅传.pdf
拿破仑传.pdf
美国宪政历程-影响美国宪政的25个司法大案.mobi
改变中国.pdf
张学良口述历史.pdf
赫逊河畔谈中国历史.mobi
西潮.mobi
晋朝那些事儿.mobi
中国文明的反思.mobi
陈布雷回忆录简体版.mobi
瞿秋白多余的话及其他.mobi
细说清人社会生活.mobi
日本史.mobi
唐朝那些事儿(趣话隋唐).mobi (0916)
西洋世界军事史.mobi(0923)

古典文学
三国演义.mobi
三字经-全文-解释.mobi
世说新语译注.mobi
乐府诗集.mobi
二刻拍案惊奇.mobi
仓央嘉措诗集.mobi
传习录.pdf
全宋词.mobi
初刻拍案惊奇.mobi
史记(文白对照版).mobi
唐诗三百首.mobi
唐诗三百首补注.mobi
喻世明言.mobi
四书五经.mobi
四大名著.mobi
围炉夜话.mobi
太平广记.mobi
子不语.mobi
孙子兵法.prc
孟子.mobi
小窗幽记.mobi
庄子.pdf
战国策.mobi
桃花扇.mobi
水浒传.mobi
王阳明全集.mobi
红楼梦.mobi
纳兰词笺注.mobi
老子白话今译.mobi
脂砚斋重批红楼梦.mobi
西游记.mobi
警世通言.mobi
论语.mobi
论语全解.mobi
论语新解.pdf
资治通鉴(柏杨版).mobi
道德经古今正解.mobi
醒世恒言.mobi
钱锺书.宋诗选注.mobi
随园食单_袁枚.mobi
增广贤文.pdf
三国志.pdf
黄帝内经.pdf
源氏物语.mobi

哲学宗教
一个或所有问题.mobi
与神对话(1-5).mobi
中国哲学简史.pdf
乌合之众.mobi
人生中不可不想的事.mobi
古兰经.mobi
哲学与人生.mobi
圣经.mobi
小逻辑.mobi
庄子现代版.mobi
新世纪中的哲学.mobi
苏菲的世界.mobi
西方哲学史.pdf
资本论.mobi
佛陀的启示.pdf
正见 佛陀的证悟.mobi
幸福之路.pdf
自我与本我_.mobi
新世界:灵性的觉醒.mobi

天天向上
35岁前要上的33堂理财课.mobi
35岁前要做的33件事.mobi
facebook效应.mobi
FBI教你破解身体语言(插图版).mobi
一课经济学.pdf
万物简史.mobi
上帝掷骰子吗.mobi
上班族必懂的office天择定律.mobi
不上火的生活.mobi
为什么中国人勤劳而不富有.mobi
乔布斯的魔力演讲.mobi
书读完了.mobi
人件.mobi
优势谈判.mobi
别为小事抓狂.mobi
十亿消费者.mobi
华尔街.mobi
天才在左疯子在右.mobi
好妈妈胜过好老师.mobi
如何阅读一本书.mobi
富爸爸穷爸爸.mobi
小王子(插图版).mobi
尽管去做——无压工作的艺术.mobi
幸福了吗.mobi
当我谈跑步时,我谈些什么.mobi
影响力.mobi
心理控制术.mobi
怎样说话才打动人.mobi
成就你一生的100个哲理.mobi
我不是教你诈(1-5合集).mobi
把时间当朋友.mobi
拆掉思维里的墙.mobi
早期教育与天才.pdf
时间简史.mobi
朱镕基答记者问.mobi
每天懂一点色彩心理学.mobi
气场.mobi
潜规则.mobi
牛奶可乐经济学.mobi
王尔德童话.mobi
生命是什么.mobi
童年的秘密.pdf
给一个未出生孩子的信.mobi
论美国的民主.mobi
谷歌吴军:数学之美.mobi
货币战争.pdf
跳出盒子-领导与自欺的管理寓言.mobi
金字塔原理.mobi
金融的逻辑.mobi
食品真相大揭秘.mobi
战略历程.pdf
上帝掷骰子吗——量子物理史话.mobi
犹太智慧枕边书.mobi
怪诞行为学1_2.mobi
犹太智慧枕边书.mobi
人一生要掌握的_60个生活法则.mobi
生活中的经济学.mobi
上帝掷骰子吗——量子物理史话.mobi
Getting Real – 37signals.mobi
Rework_-_David_Heinemeier_Hanss_Jason_Fried.mobi

学习资料
08版GRE红宝书.mobi
Excel函数辞典.mobi
smart考研单词.pdf
五天学会绘画.mobi
五线谱入门.mobi
别对我撒谎第一季(剧本).mobi
古代汉语(第一册).mobi
古代汉语(第三册).mobi
古代汉语(第二册).mobi
古代汉语(第四册).mobi
听音入门.mobi
夏洛特的网(双语).mobi
成长的烦恼(剧本).mobi
新东方GRE词汇精选.mobi
新东方英语900句(生活篇).mobi
新东方词根词缀大全.mobi
新概念英语(1-4).mobi
曼昆经济学原理.mobi
标准日本语笔记.mobi
牛津书虫英汉对照(儿童篇).mobi
牛津书虫英汉对照(名著篇).mobi
现代汉语词典.mobi
生而为赢·新东方英语背诵美文30篇.mobi
穿普拉达的女王(剧本).mobi
绯闻女孩1-4季(剧本).mobi
美国习惯用语.mobi
老友记1-10季(剧本).mobi
育儿百科.mobi
营销管理(第13版).mobi
走遍美国.mobi
阿西莫夫最新科学指南(上下册).mobi
默克家庭诊疗手册(插图版).mobi

现代文学
1988:我想和这个世界谈谈.mobi
30而励.mobi
一个都不正经.mobi
一只特立独行的猪.mobi
万水千山走遍.mobi
万物生长.mobi
三体全集.mobi
三毛流浪记(全集).mobi
上学记.mobi
京华烟云.mobi
亮剑.mobi
亲爱的安德烈.mobi
人生若只如初见.mobi
他的国.mobi
令人战栗的格林童话.mobi
何以笙箫默.mobi
佛祖在一号线.mobi
倪匡全集[精校版].mobi
偷书贼.mobi
兄弟(上).mobi
兄弟(下).mobi
兰晓龙精选集.mobi
再穷也要去旅行.mobi
冯唐小说集.mobi
前朝梦忆.mobi
匆匆那年(上下).mobi
北京,北京.mobi
十八岁给我一个姑娘.mobi
半生缘.mobi
历史的先声.pdf
厚黑学.mobi
原来你非不快乐.mobi
受戒.mobi
古都.mobi
台北人.mobi
史铁生文集第一卷.mobi
史铁生文集第三卷.mobi
史铁生文集第二卷.mobi
向左走,向右走.mobi
哥伦比亚的倒影.mobi
哭泣的骆驼.mobi
围城.mobi
在细雨中呼喊.mobi
城南旧事.mobi
城邦暴力团.mobi
城门开.mobi
夜谭十记.mobi
大唐狄公案.mobi
大江大海1949(插图版).mobi
女心理师(上下).mobi
婚姻即景.mobi
婚姻是一场华丽冒险.mobi
孩子你慢慢来.mobi
宝贝,宝贝.mobi
山楂树之恋.mobi
巨流河.mobi
巴黎没有摩天轮.mobi
干掉一切对手-看高盛如何算赢世界.mobi
平凡的世界.mobi
张爱玲作品集.mobi
张爱玲文集(1)-(4).pdf
往事并不如烟.mobi
微微一笑很倾城.mobi
思维的乐趣.mobi
我与地坛.mobi
我们仨.mobi
我把青春献给你.mobi
我的奋斗.mobi
我终究是爱你的.mobi
撒哈拉的故事.mobi
文化苦旅.mobi
易中天品三国.mobi
曾有一个人,爱我如生命.mobi
最好的女子.mobi
杜拉拉升职记.mobi
杨小凯文集.mobi
棋王.mobi
橘子不是唯一的水果.mobi
欢喜.mobi
此时此地(IOC).mobi
此间的少年.mobi
民国的身影(全文,有图片).mobi
水煮三国.mobi
沉默的大多数.mobi
沙僧日记.mobi
泡沫之夏.mobi
洗澡.mobi
活着活着就老了.mobi
潜伏.mobi
灵山.mobi
爱与痛的边缘.mobi
爱你就像爱生命.mobi
牛天赐传.mobi
独唱团(第一辑).mobi
狼图腾.mobi
狼群(全集).mobi
玉米.mobi
王小波全集(修订版).mobi
王朔-玩的就是心跳.pdf
王朔文集(典藏版).mobi
目送.mobi
穆斯林的葬礼.mobi
穆時英全集.mobi
窗外.mobi
绿化树.mobi
背包十年.mobi
致我们终将逝去的青春.mobi
舒克和贝塔全传.mobi
色眼识人.mobi
英雄志.mobi
茶人三部曲.mobi
草房子.mobi
草样年华.mobi
藏地密码(1-10).mobi
西潮.mobi
西窗随笔.mobi
覆雨翻云.mobi
走吧,张小砚.mobi
边城.mobi
追寻现代中国.mobi
送你一颗子弹.mobi
郭德纲话说北京.mobi
野火集.mobi
钟鼓楼-刘心武.mobi
隐权力:中国历史弈局的幕后推力.mobi
青春.mobi
韩寒作品集.mobi
韩寒五年文集.mobi
风语.mobi
鲁迅作品全集.mobi
鲸鱼女孩·池塘男孩.mobi
牛奶可乐经济学.mobi
武侠,从牛A到牛C.pdf
呼蘭河傳.mobi
一路走来一路读.mobi
十个词汇里的中国.mobi
时代三部曲.mobi
活着.mobi
八大胡同.mobi
三体.pdf
三体2-黑暗森林.pdf
三体3-死神永生.pdf
我执.pdf
亭长小武.mobi
赤壁.mobi
赌徒陈汤.mobi
北京镜鉴记.mobi
人在欧洲.mobi
美国也荒唐.mobi
秦腔.mobi
天行者.mobi
推拿.mobi
历史的天空.mobi
人生不过如此.mobi
别跟我说你懂日本.mobi
歌舞伎町案内人.mobi
蛙.mobi
亦舒文集\一千零一妙方.mobi
亦舒文集\一把青云.mobi
亦舒文集\一段云.mobi
亦舒文集\一点旧,一点新.mobi
亦舒文集\七姐妹.mobi
亦舒文集\不易居.mobi
亦舒文集\不羁的风.mobi
亦舒文集\人淡如菊.mobi
亦舒文集\伤城记.mobi
亦舒文集\假如苏西堕落.mobi
亦舒文集\假梦真泪.mobi
亦舒文集\剪刀替针做媒人.mobi
亦舒文集\十天.mobi
亦舒文集\印度墨.mobi
亦舒文集\变形记.mobi
亦舒文集\吃南瓜的人.mobi
亦舒文集\同门.mobi
亦舒文集\喜宝.mobi
亦舒文集\嘘.mobi
亦舒文集\在那遥远的地方.mobi
亦舒文集\城市故事.mobi
亦舒文集\大君.mobi
亦舒文集\天上所有的星星.mobi
亦舒文集\天枰座的故事.mobi
亦舒文集\天若有情.mobi
亦舒文集\她比烟花寂寞.mobi
亦舒文集\她的二三事.mobi
亦舒文集\如今都是错.mobi
亦舒文集\如何说再见.mobi
亦舒文集\如果墙会说话.mobi
亦舒文集\寂寞的心俱乐部.mobi
亦舒文集\小玩意.mobi
亦舒文集\开到荼蘼.mobi
亦舒文集\心扉的信.mobi
亦舒文集\忽而今夏.mobi
亦舒文集\我们不是天使.mobi
亦舒文集\我情愿跳舞.mobi
亦舒文集\我的前半生.mobi
亦舒文集\我这样的爱她.mobi
亦舒文集\承欢记.mobi
亦舒文集\故园.mobi
亦舒文集\曼陀罗.mobi
亦舒文集\曾经深爱过.mobi
亦舒文集\没有季节的都会.mobi
亦舒文集\没有月亮的晚上.mobi
亦舒文集\流金岁月.mobi
亦舒文集\灯火阑珊处.mobi
亦舒文集\烈火.mobi
亦舒文集\特首小姐你早.mobi
亦舒文集\电光幻影.mobi
亦舒文集\痴情司.mobi
亦舒文集\直至海枯石烂.mobi
亦舒文集\真男人不哭泣.mobi
亦舒文集\紫薇愿.mobi
亦舒文集\红尘.mobi
亦舒文集\纵横四海.mobi
亦舒文集\绝对是个梦.mobi
亦舒文集\美丽新世界.mobi
亦舒文集\美娇袅.mobi
亦舒文集\胭脂.mobi
亦舒文集\艳阳天.mobi
亦舒文集\花常好月常圆人长久.mobi
亦舒文集\花解语.mobi
亦舒文集\莫失莫忘.mobi
亦舒文集\葡萄成熟的时候.mobi
亦舒文集\蔷薇泡沫.mobi
亦舒文集\蝉.mobi
亦舒文集\西岸阳光充沛.mobi
亦舒文集\要多美丽就多美丽.mobi
亦舒文集\这双手虽然小.mobi
亦舒文集\连环.mobi
亦舒文集\迷迭香.mobi
亦舒文集\邻室的音乐.mobi
亦舒文集\邻居太太的情人.mobi
亦舒文集\野孩子.mobi
亦舒文集\银女.mobi
亦舒文集\镜花缘.mobi
亦舒文集\阿修罗.mobi
亦舒文集\阿玉和阿瓦.mobi
亦舒文集\预言.mobi
亦舒文集\风信子.mobi
亦舒文集\风满楼.mobi
亦舒文集\香雪海.mobi
武侠小说\jy.书剑恩仇录.pdf
武侠小说\jy.侠客行.pdf
武侠小说\jy.倚天屠龙记.pdf
武侠小说\jy.天龙八部.pdf
武侠小说\jy.射雕英雄传.pdf
武侠小说\jy.碧血剑.pdf
武侠小说\jy.神雕侠侶.pdf
武侠小说\jy.笑傲江湖.pdf
武侠小说\jy.连城诀.pdf
武侠小说\jy.雪山飞狐.pdf
武侠小说\jy.飞狐外传.pdf
武侠小说\jy.鹿鼎记.pdf
武侠小说\七种武器.mobi
武侠小说\三少爷的剑.mobi
武侠小说\九月鹰飞.mobi
武侠小说\名剑风流.mobi
武侠小说\圆月弯刀.mobi
武侠小说\多情剑客无情剑.mobi
武侠小说\大人物.mobi
武侠小说\大唐双龙传.mobi
武侠小说\大地飞鹰.mobi
武侠小说\大旗英雄传.mobi
武侠小说\天涯明月刀.mobi
武侠小说\小李飞刀系列合集.mobi
武侠小说\梁羽生武侠全集.mobi
武侠小说\楚留香.mobi
武侠小说\楚留香传奇.mobi
武侠小说\欢乐英雄.mobi
武侠小说\武林外史.mobi
武侠小说\流星蝴蝶剑.mobi
武侠小说\浣花洗剑录.mobi
武侠小说\白玉老虎.mobi
武侠小说\白马啸西风.mobi
武侠小说\绝代双骄.mobi
武侠小说\英雄无泪.mobi
武侠小说\萧十一郎.mobi
武侠小说\边城浪子.mobi
武侠小说\金庸全集.mobi
武侠小说\陆小凤传奇.mobi
武侠小说\鹿鼎记.mobi

百家讲坛
不生病的智慧.mobi
中国企业没戏吗I.mobi
历史是个什么玩意儿.mobi
原来这才是春秋.mobi
易中天:先秦诸子百家争鸣.mobi
百家讲坛-二战风云.mobi
百家讲坛-刘心武谈红楼.mobi
百家讲坛-动物世界.mobi
百家讲坛-历史与文化篇.mobi
百家讲坛-名家谈文学.mobi
百家讲坛-和珅.mobi
百家讲坛-外国文艺欣赏.mobi
百家讲坛-多尔衮.mobi
百家讲坛-大师语录.mobi
百家讲坛-教育与成功.mobi
百家讲坛-明十七帝.mobi
百家讲坛-水浒.mobi
百家讲坛-清十二帝.mobi
百家讲坛-生活保健.mobi
百家讲坛-科技之光.mobi
百家讲坛-笑书神侠.mobi
百家讲坛-经济与社会.mobi
百家讲坛-老子.mobi
百家讲坛-艺术漫谈.mobi
百家讲坛-讲聊斋.mobi
百家讲坛-读史记.mobi
百家讲坛-道德与法律.mobi
百家讲坛-金正昆谈礼仪.mobi
蔡康永的说话之道.mobi
郎咸平说:我们的日子为什么这么难.mobi
郎咸平说:新帝国主义在中国(2).mobi
郎咸平说:谁在拯救中国经济.mobi
吴大师讲西游.mobi
博弈三国(插图版).mobi

网络小说
七夜雪.mobi
三生三世十里桃花.mobi
不负如来不负卿.mobi
九州缥缈录.mobi
人间.mobi
仙楚.mobi
佣兵天下.mobi
佳期如梦.mobi
华音流韶.mobi
史上最全的冷笑话集锦.mobi
史上第一混乱-张小花.mobi
后宫甄嬛传(全集).mobi
回到明朝当王爷.mobi
大漠苍狼1(绝地勘探).mobi
大漠苍狼2(绝密飞行).mobi
天行健第一部奔掠如火.mobi
天行健第七部旭日如血.mobi
天行健第三部激荡风雷.mobi
天行健第二部水无常形.mobi
天行健第五部星汉灿烂.mobi
天行健第六部心如明月.mobi
天行健第四部天崩地裂.mobi
家园_-_隋乱.mobi
寻秦记.mobi
尘曲完整版.mobi
尘缘.mobi
庆余年(精校版).mobi
弱水三千.mobi
怒江之战(全_大结局).mobi
悟空传.mobi
惟我独仙.mobi
搜神记.mobi
斗罗大陆.mobi
昆仑.mobi
朱雀.mobi
杀手系列_九把刀.mobi
梦回大清.mobi
沧海.mobi
猎命师传奇.mobi
盗墓笔记(1-7).mobi
神墓.mobi
窃明.mobi
紫川.mobi
罗德斯岛系列.mobi
茅山后裔.mobi
蛮荒记.mobi
蜀山剑侠传.mobi
诛仙.mobi
谜踪之国.mobi
边荒传说-黄易.mobi
酒神.mobi
锦衣卫秘事.mobi
镜.mobi
青囊尸衣.mobi
鬼吹灯全集.mobi
鬼打墙全集.mobi
黄河鬼棺.mobi
星辰变.mobi
九鼎记.mobi
神游.mobi
斗破苍穹.mobi
灵山.mobi
地师.mobi
天意.mobi
人欲.mobi
异闻录.mobi
冒死记录 中国神秘事件.mobi
青囊尸衣.mobi
步步惊心(修订版).mobi (0916)
大漠谣.mobi(0921)
云中歌.mobi(0921)
橙红年代(精校).mobi(0921)
武林帝国.mobi(0929)

Update & Fix —-2011.10.10

Rework_-_David_Heinemeier_Hanss_Jason_Fried.mobi
十亿消费者.mobi
物理世界奇遇记-伽莫夫.mobi
昨日的世界[奥]斯蒂芬·茨威格.mobi
有一种爱情叫兄弟-十八子墨.mobi
西德尼·谢尔顿作品集.mobi
铁器时代(精校).mobi
朗读者(钱定平译).mobi
沙郡年记录.mobi
出非洲记:人类祖先的迁徙史诗.mobi
江户日本.mobi
漫长的战斗:美国人眼中的朝鲜战争.mobi
兄弟(上)-余华.mobi
兄弟(下)-余华.mobi
牛鬼蛇神录.mobi
百年中国经济史笔记.mobi
烟雨江南-尘缘.mobi
失控:机器、社会与经济的新生物学.mobi
光晕4:奥星的幽灵-Eric_Nylund.mobi
光晕3:初次反击-尼仑德.mobi
光晕2:洪魔-尼仑德.mobi
光晕1:致远星的沦陷-尼仑德.mobi

Update —-2011.10.28
留德十年.mobi
C语言程序设计.mobi
编程精粹_编写高质量C语言代码.mobi
大师与玛格丽特.mobi
一个瑜伽行者的自传.mobi
不二.mobi

Update —-2011.11.01
异类:不一样的成功启示录.pdf
引爆点.pdf
无价:洞悉大众心理玩转价格游戏.pdf
美国种族简史.pdf
埃勒里·奎因现代侦探小说合集.mobi
史蒂夫·乔布斯传.pdf

Update —-2011.11.07
甲骨文(游走在中国与西方之间).mobi
剑桥中国辽西夏金元史.mobi
剑桥中国明代史.mobi
剑桥中国秦汉史.mobi
剑桥中国隋唐史.mobi
剑桥中华人民共和国史.mobi
夏多布里昂《幕后回忆录》(全三册).pdf
论美国的民主.mobi
浪潮之巅-吴军.mobi

Update —-2011.11.28
美国种族简史 – [美]托马斯·索威尔.mobi

Update —-2012.01.30
盗墓笔记 8.mobi
间客.mobi
金陵十三钗.mobi
上品寒士.mobi
史蒂夫·乔布斯传.mobi
天下.mobi
天珠变.mobi
拖延心理学.mobi
晚清七十年.mobi
巫颂【上】.mobi
巫颂【下】.mobi
西夏死书①死书里的神秘活人坟.mobi
西夏死书②遗失的1964.mobi
西夏死书③中蒙边界无人区.mobi
新中国三十年.mobi
仙逆.mobi

Oracle SQL*Loader Segmentation Fault (core dumped)

七月 5th, 2011

调试代码时在一个关于SQL*Loader的错误上折腾了好一阵,记录一下备忘:

错误信息:

$> sqlldr user_id/passwd@db_name control=control_file.ctl

SQL*Loader: Release 10.2.0.4.0 - Production on Tue Jul 5 01:20:09 2011
Copyright (c) 1982, 2007, Oracle.  All rights reserved.
Segmentation Fault (core dumped)

其他类似的程序并没有发现这种错误。在进行了N种尝试后,发现问题存在于数据文件的文件名上:

LOAD DATA
INFILE 0701.T0.csv
APPEND INTO TABLE SAMPLE_TABLE
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
COLUMN DEF ...
)

经测试,只要控制文件中INFILE选项后跟的文件名以数字开头,就会发生"Segmentation Fault (core dumped)"的错误。(Oracle的Bug?)

解决方法:

方法1. 最简单的方法,避免数据文件名以数字开头

方法2. 数据文件名加双引号:

LOAD DATA
INFILE “0701.T0.csv”
APPEND INTO TABLE SAMPLE_TABLE
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
COLUMN DEF ...
)

方法3. CTL文件中不使用INFILE选项,在命令行中用data选项代替:

$> sqlldr user_id/passwd@db_name control=control_file.ctl data=0701.T0.csv

Oracle官方文档库支持Kindle和iPad格式了

六月 16th, 2011

用Kindle看书确实很不错,屏幕效果和重量都比捧着iPad看书要舒服,只不过用它来看技术书籍并不是很方便。记得刚开始用Kindle的时候,心想如果能把Oracle的官方文档也拷进去看多方便啊,我特地在Oracle的网站上找了一番,结果很失望的发现只有PDF的格式,放在Kindle的6寸屏上实在没法看。

今天浏览Oracle文档网页的时候,意外发现网站上除了PDF外多出了Mobi和ePub格式的下载链接,前者是Kindle通用的格式,后者则对应用于iPad. 这下可以很方便的把Oracle文档放到Kindle上随时查阅了:

http://download.oracle.com/docs/cd/E11882_01/appdev.112/e17126/composites.htm

推荐一本Oracle性能优化的好书

六月 14th, 2011

推荐一本关于Oracle性能优化的好书: 《Oracle性能诊断艺术》

以下是China-Pub上的简介:

前端业务应用炙手可热之日,便是优化后端数据库性能之时。当此之际,身怀数据库优化的绝技,可以让你平步职场,傲视群英。.
本书是oracle数据库优化专家christian antognini的一部继往开来的里程碑式著作。书中的最佳实践和诸多建议全部来源于作者在实战一线的丰富积累。不仅简单实用,而且发人深省,堪称一座“宝库”,适合各层次读者研读和发掘。..
与其他同类图书不同,本书不仅涵盖了市面上常见的各种oracle版本,还指明了各个版本独有的性能优化特性。全书以崭新的视角开篇立论,围绕查明问题真相和搜寻有效方略,透彻讲解了查询优化器的配置,表访问、连接和物理表布局的优化,以及加速sql执行计划等重要主题,被读者誉为“最透彻,但又最通俗的性能优化好书”。

 

Oracle性能诊断艺术

Java 开发 2.0: 使用 Amazon SQS 进行基于云计算的消息传送

六月 14th, 2011

本文转载自IBM developworks

消息传送队列在一系列软件架构和域中是常见的,包括金融系统、医疗保健和旅游业。然而面向消息的中间件(MOM)— 分布式系统的主导消息传送范例 — 需要特别安装和维护一个队列系统。本月我对这种劳动密集型消息传送引入了一种基于云计算的替代方案:Amazon 的 Simple Queue Service (SQS)。

就像在 Google App Engine 或 Amazon Elastic Beanstalk(参见 参考资料)上托管 web 应用程序很合乎常理一样,利用一个云消息传送系统也合乎常理。不管怎样,您都能够将更多的时间用于编写应用程序,而非安装和维护其底层基础架构。

在本文中,您将了解 Amazon SQS 如何减轻安装和维护一个消息队列系统的负担。您还有机会亲手创建 SQS 消息队列,然后删除和检索上面的消息。最后,我要向您展示在我添加消息到 Magnus 时会发生什么,这是我在上个月的 Amazon Elastic Beanstalk 简介 中使用的移动 web 应用程序。

是哪一位?是 MOM。

面向消息的中间件 或 MOM 是一个描述通过消息队列通信的松耦合系统的术语。系统组件没有进行紧耦合(例如通过编译时依赖项),而是被分布在整个网络中。这个分布式效果以消息队列 为通信媒介,能够让消息系统进行扩展。

传统上,架构师决定了面向消息的系统中哪些组件将互相通信。尽管所有通信通过消息传递发生,消息本身通常是一个通用的跨平台格式。消息可以是简单的字符串或甚至使用 XML 或 JSON 编码的文档。

由于 MOM 架构对组件去耦且支持它们之间的跨平台通信,单个原件可以是异构的。也就是说,分布式架构中的组件可通过不同的语言编写,比如 Java 语言、C# 和 Ruby。组件也可以存在于不同的平台上,比如 UNIX® 和 Windows®。更重要的是,MOMs 使系统集成更加容易。作为中间件,MOMs 可以连接旧有系统以及新系统。这是因为组件之间的 API 仅仅是一条消息,可以是从 XML 文档到序列化对象再到简单 String 的任意内容。

GAE 是您的 MOM!

MOM 系统中的消息队列是 web 的管道:它们连接各种系统组件以允许消息在它们之间自由流动。事实证明,GAE 是面向消息中间件系统的一个很好的例子。

如同任何好的 MOM,Google App Engine 使用消息队列分离系统流程。特别地,GAE 队列使我们可以通过 Web 请求卸载长期运行的流程。您可以使用 GAE 将指向 servlets 或 JSPs 的 URLs 转储到消息队列上,然后由 GAE 服务选取和处理。Servlets 被根据 web 应用程序的主逻辑顺序异步调用。(参见 参考资料 进一步了解 GAE。)

但是排列长期运行的流程来管理主流程的持续时间不仅仅是一个 GAE 工作。这个类似 MOM 的特性随 Heroku 等其他 PaaS 实现一同提供。然而使用 Amazon SQS,您可以轻松在任何 web 应用中进行,而不管平台是什么。

Amazon SQS 简介

如果您在 JMS 中使用了消息队列,Amazon SQS 提供大量您应当很熟悉的功能。

Amazon SQS 不是 JMS

Java 平台上的消息队列不是什么新鲜事,以 JMS 规范为范例。JMS 已经有 10 多年的历史了,包含令人印象深刻的一组实现,包括 RabbitMQ、Apache 的 ActiveMQ,甚至 IBM 的 Websphere® MQ。但是 Amazon SQS API 不实现任何 JMS 接口。事实上,可以说它比 JMS 更简单,且更易于上线运行。

Amazon SQS:

  • 允许多个进程从同一队列同时进行读取操作。它还在处理期间锁定消息,确保一条消息仅由一个读取器处理,即使多个进程在从单一队列进行读取操作。
  • 利用 Amazon 的大量冗余架构在并发访问时提供极高的可用性。它还保证消息的交付(至少一次)。
  • 需要您仅根据使用量进行支付。对于 Amazon SQS,这表示每条消息您支付 $0.000001。AWS 当前提供一个免费的层级,其中每个月前 100,000 条消息是免费的。记住有按千兆字节定价的带宽费用,这对所有 AWS 产品都是通用的。

SQS 入门就如同 AWS 中一切别的东西一样简单。如果您还没有一个 AWS 帐户,首先 创建一个。其次,启用 Amazon SQS。最后,使用 AWS 接口 Java SDK 发布和阅读基于云的消息!(下面将详细介绍如何实际编写 它们。)

编写 SQS 消息

与 Amazon SQS 名称相一致,读写到队列背后的逻辑本身很简单。首先,使用有效访问密匙和机密建立 AWS 连接,如清单 1 所示:


清单 1. 建立 AWS 连接

				
AmazonSQS sqs = new AmazonSQSClient(new BasicAWSCredentials(AWS_KEY, AWS_SECRET));

 

下一步,您需要一个队列。在 AWS API 中,对 createQueue 的调用,如清单 2 所示,不一定每次创建一个新队列 。如果队列已经存在,返回其句柄。在 SQS 中,队列仅仅是 URLs;因此,队列处理也只是一个 URL。注意在 AWS SDK API 中,Queue URL 是一个 String 类型,而不是 Java URL 类型。


清单 2. 获取一个队列句柄

				
String url = sqs.createQueue(new CreateQueueRequest("a_queue")).getQueueUrl();

 

有了队列之后,您可以向其写入一条消息。SQS 的消息格式类似于 SimpleDB 的(参见 参考资料),在于消息是 Strings。不过要记住,一条 String 是可以轻松结构化的,因此易于解析,即使其格式为有效的 JSON 或 XML。


清单 3. 通过 SQS 发送消息

				
sqs.sendMessage(new SendMessageRequest(url, "It's a wonderful life!"));

 

SQS 保持简单性

请记住 Amazon SQS 首要的一点是很简单,意味着它缺少您过去可能习惯的一些额外项目。例如,SQS 不做预先通知,因此 SQS 队列的读取器必须定期轮询以查看它是否包含新消息。虽然并不可怕,但这确实增加了应用程序开销,可能在某些情况下无法接受。Amazon Simple Notification Service (SNS) 解决这个问题,但这是另一篇文章的一个主题。

消息长度是有限的。默认情况下,一条消息不能超过 8KB。如果您需要使用较长的消息,总是可以将它们分成小块,使用序列 IDs 识别单个部分。然后可以在接收方重新组合消息。

就这么简单 — 将一条消息放到 SQS 队列仅需要那三行代码。

关于 AWS SDK

您可能会注意到 AWS SDK 中的一个熟悉模式,特别是如果您阅读了我的 SimpleDB 简介(参见 参考资料)。由于 AWS 中的一切就是一个 web 服务,所有通信通过 HTTP 发生。因此,API 通过与 Request 类似的对象模拟逻辑请求,比如 SendMessageRequestCreateQueueRequest。在两种情况下,名称描述对象的意图。

另外要注意的是,放在 SQS 上的消息是持久的:在删除之前它们一直在那里。(如果您不删除它们,消息最终不会消失;自动过期的默认值为 4 天。)当获取消息来阅读时,Amazon SQS 采用简单的锁定策略 — 用于阅读事件,消息在一个时期内不可用于其他并发读取进程,这被称为消息的可视性超时。该值被默认设置为 30 秒,不过您可以随需自由改变持续时间。

位于 Amazon 架构的消息的持久性是可靠的。如同 SimpleDB 甚至 S3,AWS 中的组件是大量冗余的。如果您的读取器进程在消息处理期间意外终止,很有可能消息还在。而且,如果 AWS 网络中的一些资产也决定被销毁,您可以确信您的任务关键型消息不会被丢失 — 它们将继续存在于任意数量的其他机器上。最后,所有其他 AWS 产品通常都是这样,您可以按地区设置您的消息基础架构的物理位置:美国,欧盟等。

读取 SQS 消息

向一个 SQS 队列写一条消息需要三行代码。读取消息稍微多一点。事实上,前两行是一样的,鉴于您需要一个 AWS 连接和同一队列的句柄。Amazon SQS 不提供任何回调功能或消息到达的预先通知。您必须定期轮询一个 SQS 队列,看看它是否有什么可提供的。因此,读取一个 SQS 队列需要这些额外的代码行。

在实现轮询策略时要稍微注意一下:您必须检查并确保在处理一条消息之前实际接收了一条有效消息。如果您不检查,最终一定会看到这个可恶的 NullPointerException

例如,假设我获取一个有效的 AWS 连接和包含消息的队列的句柄,我可以如清单 4 所示检索消息:


清单 4. 通过 SQS 检索消息

				
 while (true) {
  List<Message> msgs = sqs.receiveMessage(
     new ReceiveMessageRequest(url).withMaxNumberOfMessages(1)).getMessages();

  if (msgs.size() > 0) {
   Message message = msgs.get(0);
   System.out.println("The message is " + message.getBody());
   sqs.deleteMessage(new DeleteMessageRequest(url, message.getReceiptHandle()));
  } else {
    System.out.println("nothing found, trying again in 30 seconds");
    Thread.sleep(3000); 
  }
}

 

在清单 4 中,对 sqs 的引用是一个 AmazonSQS 类,如 清单 1 所示。该对象提供一个 receiveMessage 方法,该方法接受一个 ReceiveMessageRequest。可以配置 ReceiveMessageRequests 来请求队列中的一组消息。在我的例子中,我将其配置为一次仅获取一条消息。不管我请求多少条消息,receiveMessage 方法都返回 Message 类型的一个 List

实现一个轮询策略

正如我前面提到的,SQS 读取是通过轮询方式完成的;而且 receiveMessage 方法是非阻塞的。因此,我必须检查确保相应的 Listmsgs)确实包含什么东西。如果从队列上未检索到任何东西,对 ReceiveMessageRequestgetMessages 的调用会返回一个空的 List,而非 null

只要我检索了有效消息,我就可以通过 getBody 调用获取其负载或主体。请记住,在有了有效消息句柄之后,SQS 会锁定它。默认情况下我有 30 秒的时间对消息做一些事情。如果我希望永久地从处理中移除消息,我必须删除它。因此,我发出一个 deleteMessage 调用,该调用需要一个 DeleteMessageRequest

一个 Message 实例的特点是它的接收句柄,如同 id。句柄不直接与消息相关,但是与读取它的事件 相关。读取过多次的一条消息(比如如果它没有被删除或则读取过程失败)可以有多个不同的接收句柄,最终当您希望删除一条消息时,您必须通过 getReceiptHandle 调用提供其接收句柄。

我没有不断检查看我的队列是否有消息,我提供了一个休眠函数,如没有检索到消息就等待 30 秒。显然在有些情况下,休眠可能不是一个好主意,或者一个较长时间的停顿会很合适。

有了这几行代码,我就将 Amazon SQS 介绍得差不多了。虽然 AWS SDK 提供大量其他功能和特性,目前为止的代码是您读写消息到 SQS 队列所需的一切。

现在我们来看看真正使用它时会发生什么。

Magnus 满足 Amazon SQS

上个月,我创建了一个简单的移动 web 应用程序 Magnus,我使用它来展示 Amazon Elastic Beanstalk 的一些特性(参见 参考资料)。Magnus 有一个不错的功能,可以存储接收自帐户持有人的移动设备的位置信息 — 就是很多人希望提供且其他人希望使用的那种信息。

捕捉某些人的行踪是好的,但是人们真正喜欢的是图形(以及闪亮的圆角按钮)。当您有大量数据要移动时,从处理角度来看图形化和分析会很昂贵。(Hadoop 适用于任何人?)行之有效的提取、转换和加载 或 ETL 技术是管理这个的一种方式。ETL 是包含大量东西的一个相当大的术语。(人们围绕这个缩写打造职业生涯,公司围绕这个建立业务!)在本例中,ETL 仅表示我要分析一些 MongoDB 数据并基于该数据创建新文档。

ETL 与 Amazon SQS

谈及数据分析时,对于我们对数据的要求以及我们可以提供的答案有多种可能性。Magnus web 应用程序呈现了这种可能性的一小部分:它提取并呈现与地理坐标、时间和用户帐户相关的数据。从技术上讲,Magnus 关注位置经纬度、用户帐户 ID、时间戳和这些特定数据之间的关系。

Magnus 可以通过图形表示该数据,根据地理区域展示用户帐户(可能是一幅地图,使用标记在给定时间定位帐户持有人)。或者它可以展示如何跨给定区域(另一幅地图) 移动一个帐户持有人/用户。提供这种信息需要一个离线的 ETL 式流程。从处理角度来看,在生成数据时实时提供该数据会很昂贵。因此将这些分析看作是近实时的

为在 Magnus 中使用 Amazon SQS,我需要做一些初步设置。首先,我需要一种获取 AWS 凭据的方式。我喜欢 Play(参见 参考资料),因此我要将它作为我的应用程序开发框架。要获取凭据,我可以使用 Play 的 application.conf 文件,即一个自动读取的属性文件。


清单 5. 添加 AWS 配置数据到 Play 的 application.conf

				
#AWS configuration
aws_access_key_id=1S..........MR2
aws_secret_access_key=S3.........ZM

 

在定义了属性之后,我可以通过对 Play 的 Play 对象的一个调用来轻松获取它们,如清单 6 所示:


清单 6. 在 Play 中获取 AWS 信息

				
public class Application extends Controller {

 private static final String AWS_KEY = 
    Play.configuration.get("aws_access_key_id").toString();
 private static final String AWS_SECRET = 
    Play.configuration.get("aws_secret_access_key").toString();

//....
}

 

定义了该管道之后,我就可以开始正事了。清单 7 中的代码类似于我上个月的 Amazon Elastic Beanstalk 简介中使用的一个代码段。在本例中,我仅使用一些代码更新了 saveLocation,以将一个简单的 JSON 文档放到名为 “locations_queue” 的一个队列上。JSON 基本上是这样的:{"id":"4d6baeb52a54f1000001"}。已存位置的 ID 提供给了消息接收人,供其进行查询和分析。


清单 7. 将消息放到 SQS 上的一个 saveLocation 方法

				
public static void saveLocation(String id, JsonObject body) throws Exception {
 String eventname = body.getAsJsonPrimitive("name").getAsString();
 double latitude = body.getAsJsonPrimitive("latitude").getAsDouble();
 double longitude = body.getAsJsonPrimitive("longitude").getAsDouble();
 String when = body.getAsJsonPrimitive("timestamp").getAsString();

 SimpleDateFormat formatter =
   new SimpleDateFormat("dd-MM-yyyy HH:mm");
 Date dt = formatter.parse(when);

 ObjectId oid = new Location(id, dt, latitude, longitude).save();

 AmazonSQS sqs = new AmazonSQSClient(new BasicAWSCredentials(AWS_KEY, AWS_SECRET));

 Map mp = new HashMap<String, String>();
 mp.put("id", oid.toString());

 String url = sqs.createQueue(new CreateQueueRequest("locations_queue")).getQueueUrl();
 sqs.sendMessage(new SendMessageRequest(url, new Gson().toJson(mp)));

 renderJSON(getSuccessMessage());
}

 

与 Ruby 来个约会?

在将该消息放到 SQS 队列上之后,我需要从队列中选取它们并执行一些处理。不知您是否记得,MOM 的优势之一是它允许异构架构。为此,SQS 读取器方可使用 Java 之外的语言编写,甚至在另一个平台上运行!

因为我基本上可以用我喜欢的任何语言执行分析处理,我要用 Ruby 来执行 — 来赢得时尚年轻人的一些街头口碑。

在清单 8 中,我借助了 right_aws Ruby gem 来帮助我处理 SQS。在很多方面,您可以将 gem 看作是 jar 文件。right_aws 库很像 Amazon 的 SDK for Java,不过没那么冗长且使用起来更简单直观。


清单 8. 使用 Ruby 为 SQS 创建一个连接和队列

				
require "right_aws"
#...
sqs  = RightAws::SqsGen2.new(aws_access_key_id, aws_secret_access_key)
queue = sqs.queue('locations_queue')

 

如您所见,清单 8 中的两行相关代码建立 AWS 连接并获取我的 'locations_queue' 队列的句柄。

接下来,我建立了一个轮询机制,如清单 9 所示。对 @queue 的引用是清单 8 中的同一 queue 变量。不过在本例中,它被定义为类的一部分。因此在清单 9 中,我使用 Ruby 的 @ 语法直接引用一个实例变量。


清单 9. 从 SQS 处理消息

				
def process_messages()
  while true
    msg = @queue.pop
    if !msg.nil?
      handle_message(msg) # impl of which does neat stuff
	  msg.delete
    else
      sleep 10
    end
  end
end

 

在将消息传递给 handle_message 方法之后,我可以删除它。如果未找到任何消息,主线程休眠 10 秒钟。!msg.nil? 一行类似于 Java 代码中的 msg != null。但是在 Ruby 中,甚至 null 也是一个对象。询问一个对象是否是 nil 类型(通过 nil? 方法调用)会返回一个布尔值。

结束语

因为 AWS 是一个 web 服务产品,它为众多平台库所访问和利用。在 Magnus 中,您可以看到所产生的灵活性:我能够使用 Java 代码将消息推送到一个 SQS 队列,然后使用一个小 Ruby 程序将它们剥离下来。运用查询的架构的美妙之处在于组件的隐式解耦。

就像在 GAE 或 Amazon 的 Elastic Beanstalk 上托管一个 web 应用程序通常很合理一样,利用云消息传送系统也很合理。Amazon 的 SQS 减轻了安装和维护队列系统的负担。您仅需创建一个队列,然后在其上删除和检索消息。将其余工作留给 Amazon。

使用wget下载数据文件

五月 6th, 2011

在数据处理过程中对于一些简单的文件传输可以通过wget进行下载,基本的用法很简单:

wget $http_url

不过很多情况下可能会有更复杂的一些条件,这里例举其中两种:

1. 公司网络访问外网需要通过代理

解决方法:设定http_proxy环境变量,例如:

export http_proxy=http://server:port

 

2. 所访问的网页需要进行登录

解决方法:使用wget的cookie参数,例如:

wget --keep-session-cookies --save-cookies $cookie_file -O /dev/null --post-data="log=user&pwd=password" $login_url

wget --keep-session-cookies --save-cookies $cookie_file --load-cookies $cookie_file $http_url -O $output_file

其中,$cookie_file是用来存储cookie内容的文件名,而post-data参数的值可以通过"Live HTTP headers"等工具查看。

比较两个UNIX文本文件,找出新增内容(diff和comm命令)

三月 18th, 2011

最近项目中遇到一个奇怪的bug,仔细检查后发现是由一行简单代码引起的。这行代码要做的事情很简单:比较两个UNIX文本文件,找出并打印文本2比文本1新增加的内容。代码调用了diff命令,示例如下:

# temp1.txt文件内容
$> cat temp1.txt
20110224
20110225
20110228
20110301
20110302

# temp2.txt文件内容
$> cat temp2.txt
20110228
20110301
20110302

20110303
20110304

# diff命令输出结果
$> diff temp1.txt temp2.txt
1,2d0
< 20110224
< 20110225
5a4,5
> 20110303
> 20110304

# 只输出temp2.txt文件独有的内容
$> diff temp1.txt temp2.txt | grep "> " | sed 's/> //g'
20110303
20110304

可以看到,输出结果去掉了两个文件的共同内容,只输出了temp2.txt的新增部分,和预想的结果一样。

 

但是,随着temp1.txt文件内容的增加,diff命令出现了不同预期的结果:

$> cat temp1.txt
20101216
20101217
20101220
20101221
20101223
20101224
20101227
20101228
20101229
20101230
20101231
20110103
20110104
20110105
20110106
20110107
20110110
20110111
20110112
20110113
20110114
20110117
20110118
20110119
20110120
20110121
20110124
20110125
20110126
20110127
20110128
20110131
20110201
20110202
20110203
20110204
20110207
20110208
20110209
20110210
20110211
20110214
20110215
20110216
20110217
20110218
20110221
20110222
20110223
20110224
20110225
20110228
20110301
20110302
20110303

$> cat temp2.txt
20110228
20110301
20110302
20110303

20110304
20110307
20110308
20110309
20110310
20110311
20110314

$> diff temp1.txt temp2.txt
1,55c1,11
< 20101216
< 20101217
< 20101220
< 20101221
< 20101223
< 20101224
< 20101227
< 20101228
< 20101229
< 20101230
< 20101231
< 20110103
< 20110104
< 20110105
< 20110106
< 20110107
< 20110110
< 20110111
< 20110112
< 20110113
< 20110114
< 20110117
< 20110118
< 20110119
< 20110120
< 20110121
< 20110124
< 20110125
< 20110126
< 20110127
< 20110128
< 20110131
< 20110201
< 20110202
< 20110203
< 20110204
< 20110207
< 20110208
< 20110209
< 20110210
< 20110211
< 20110214
< 20110215
< 20110216
< 20110217
< 20110218
< 20110221
< 20110222
< 20110223
< 20110224
< 20110225
< 20110228
< 20110301
< 20110302
< 20110303

---
> 20110228
> 20110301
> 20110302
> 20110303

> 20110304
> 20110307
> 20110308
> 20110309
> 20110310
> 20110311
> 20110314

$> diff temp1.txt temp2.txt | grep "> " | sed 's/> //g'
20110228
20110301
20110302
20110303

20110304
20110307
20110308
20110309
20110310
20110311
20110314

可以看到,diff命令不但输出了temp2.txt文件的新增部分(20110304-20110314),也同时输出了两个文件的共同内容(20110228-20110303),从而导致了与预期不一致的结果。

查看diff命令的man手册发现,diff的作用是比较两个文件的内容,并输出两个文件之间的差异,产生一个能够将两个文件互相转换的列表,但这个列表并不能100%保证是最小集。于是,在上面的例子中,我们看到diff给出了temp1.txt和temp2.txt文件的比较差异结果,但其中包含了两个文件的共同部分,因此与预期不一样。

 

一个解决的方法是,可以用comm命令代替diff,示例如下:

$> comm -13 temp1.txt temp2.txt
20110304
20110307
20110308
20110309
20110310
20110311
20110314

comm命令用来比较两个文件,具体用法:

comm [-123] file1 file2
-1 过滤file1独有的内容
-2 过滤file2独有的内容
-3 过滤file1和file2重复的内容

 

PS,看了下diff的输出格式,主要有以下几种:

n1 a n3,n4
n1,n2 d n3
n1,n2 c n3,n4

例如"1,2d0" "5a4,5" "1,55c1,11"等。其中n1和n2指第一个文件的行数,n3和n4指第二个文件的行数。"a"代表add增加,"d"代表delete删除,"c"代表change整块变动。

有了diff的输出结果,可以使用patch命令将一个文件恢复成另一个,例如:

$> cat temp1.txt
20110224
20110225
20110228
20110301
20110302

$> cat temp2.txt
20110228
20110301
20110302
20110303
20110304

$> diff temp1.txt temp2.txt > temp.diff

$> cat temp.diff
1,2d0
< 20110224
< 20110225
5a4,5
> 20110303
> 20110304

# 使用temp.diff和temp1.txt恢复temp2文件
$> patch -i temp.diff -o temp2_restore.txt temp1.txt
Looks like a normal diff.
done

# 完成后temp2_restore和原temp2文件内容一致
$> cat temp2_restore.txt
20110228
20110301
20110302
20110303
20110304

一键脚本搭建基于Amazon EC2的免费Google ghs反向代理

二月 26th, 2011

相信很多试图把自己的域名和Google Apps绑定的同学都有遇到ghs被墙的烦恼,也曾到处寻找可用的ghs代理。曾经有一段时间一直在用you8g提供的ghs反向代理,不过不久前这个站点ms挂了。既然Amazon EC2提供了免费的Linux主机,那么干脆就在上面自己搭一个Nginx的反向代理用。顺手做了个一键安装并配置ghs反向代理的脚本,有需要的同学可以用来搭建自己的Nginx代理。如果没有申请过Amazon EC2, 可以参考此前的文章:Amazon AWS 漫游指南

AWS EC2搭建Nginx作为Google ghs反向代理的具体步骤如下:

1. 为域名增加一条A记录,把ghs指向你的EC2 Ip (即AWS给出的Public DNS的中间一串数字).

2. 将需要指向ghs.google.com的域名cname指向ghs.your_domain_name

3. ssh登录EC2 Linux,执行以下命令:

wget https://gist.github.com/raw/844836/ec6cfc93ae6c8330c2d1aa2c8b3e5ed45af61b60/nginx.sh
# 此处替换example.com为你自己的域名
sudo sh nginx.sh example.com

打开EC2 security group中的相应端口,如果安装过程一切正常,域名的ghs反向代理就应该可以工作了。脚本在AWS EC2 Linux 32bit中测试通过。

怎样利用你的闲置域名展示Google Adsense广告

二月 1st, 2011

不知道大家在访问一些尚未启用的域名时有没有遇到过下面这样的广告页面:

有没有想过将自己的闲置域名也设计成类似的广告页?做一个网页然后插入Google Adsense的代码?其实完全不用这么麻烦,原来Google Adsense已经提供了很便利的方法,只需要修改自己域名的DNS设置就可以。实际上,你并不需要一个完全闲置不用的域名,只要www子域名是空闲没有使用的。比如说,你可以将blog.example.com做为你的blog网址,而把暂不需要使用的www.example.com指向广告。以下是具体的方法:

1. 在Google Adsense控制面板中选择"New hosted domain", 添加你的域名

2. 按以下其中一种方法修改DNS设置:

2a). 把域名的nameserver指向Google的DNS nameserver:

    * ns1.googleghs.com
    * ns2.googleghs.com
    * ns3.googleghs.com
    * ns4.googleghs.com

或者,如果你希望更精确的控制使用子域名,那么可以:

2b). 修改别名(CNAME)和A记录如下:

修改CNAME (此处pub-xxxxxxxxx指你的Adsense帐号的唯一ID):

Host Name/Alias Record Type Value/Destination
www CNAME (alias) pub-xxxxxxxxx.afd.ghs.google.com

修改A记录:

Host Name/Alias Record Type Value/Destination
@ A (address) 216.239.32.21
@ A (address) 216.239.34.21
@ A (address) 216.239.36.21
@ A (address) 216.239.38.21

只需要按照A或B方法中的一种修改域名配置,然后等待一段时间生效(大约几小时),你的域名就会被自动指向Google的广告页。另外,这个页面所展示广告的样式、语言等等都可以登录Adsense账户修改。这个是我用自己的域名产生的结果:www.xuyuan.me 感兴趣的同学可以自己动手试试看。

Updated 2011.02.04: 发现pub-xxxxxxxxx.afd.ghs.google.com也属被墙之列,为了让网页能在墙内正常访问,可以自己使用Nginx做一个反向代理,配置如下:

	upstream adghs {
        server pub-xxxxxxxxx.afd.ghs.google.com;
    }

	server {
        listen       80;
        server_name  www.xuyuan.me;
        access_log  /var/log/nginx/ghs.xuyuan.me.log;

        location / {
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_pass http://adghs;
            proxy_set_header  X-Real-IP  $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_redirect false;
        }
    }

这样 www.xuyuan.me 的网页应该可以在墙内正常打开了。(题外话:至于运行Nginx的Server,可以利用Amazon的免费EC2服务,具体细节下文再述。)

使用Dropbox同步Eclipse项目

一月 20th, 2011

开发时难免有时会需要在几个不同的地点,比如公司和家里的PC,调试同一段代码。这时简单有效、避免人工干预的代码同步不仅可以节省时间,而且也可以帮助保持清晰一致的思维。对于一些小规模且没有使用在线代码托管的项目来说,Dropbox是一个不错的同步选择。Eclipse项目结合使用Dropbox的方法十分简单,只要把workspace建在Dropbox文件夹里的任一个目录就可以。但这样做带来的一个问题是Dropbox会不断地把即时生成的编译文件(假设是Java程序)同步到服务器,这不仅会对机器性能带来一些影响,而且如此频繁的更新也没有必要,毕竟我们只需要保证在换到一个新地点开始工作时代码完成更新就行了。

这里介绍一个方法可以把Eclipse产生的编译文件移到Dropbox目录之外,这样我们就可以只同步发生改变的源程序:

1.打开项目属性页面,在默认输出目录点击"Browse":

2.选取项目的顶层目录,然后点击新建目录:
(如果你想要使用的目录名比如"bin"已经存在,可以先将其删除)

3.在"Advanced"模式下,勾选"Link to folder in the file system",然后选择一个Dropbox之外的文件夹作为输出目录:

另外需要注意的是,不同开发机器上的JDK安装目录以及Dropbox目录的绝对路径最好保持一致,不然对一些类库文件的引用可能出错。

如果你还没有安装Dropbox,可以通过以下链接申请,这样我们都可以增加额外的免费空间:
https://www.dropbox.com/referrals/NTY2MTQwMTU5

如果你不能访问Dropbox,试着修改C:\WINDOWS\system32\drivers\etc目录下的host文件,增加一行"174.36.30.71 www.dropbox.com" (不含引号)。


google reader 抓虾
bloglines my yahoo
哪吒 鲜果
* 更多订阅本站方式请看 订阅帮助