kindle manager

This commit is contained in:
gavin
2020-05-30 21:32:48 +08:00
parent dffae936d8
commit 87d661fcb6
3 changed files with 198 additions and 429 deletions

View File

@@ -9,7 +9,7 @@
## 1.0.1 (20200528)
### feature
- add search clip
- add search clip and some functions
## learn lesson
- assign value to a not exist key, will throw KeyError, too inflexible!!! perl much better
@@ -33,6 +33,21 @@ b['1']['2'] = {'3':1} # OK
suff = {'MD':'.md','CSV':'.csv','JSON':'.json'}
198 op = OUTPREF+suff[ft]
```
- assign value style is pithiness
```
(authinfo, dateinfo, content) = (s[0], s[1], s[2] if len(s)==3 else None)
```
## 1.0.1 (20200530)
### feature
- remove duplication
- refactor some code
## learn lesson
- change dict keys between iteration, will throw RuntimeError:
dictionary changed size during iteration
- reference - http://www.cocoachina.com/articles/89748
# feature plan
## 20200528
@@ -40,3 +55,4 @@ b['1']['2'] = {'3':1} # OK
- first abstract from kindle hard / local directory for different OS
- add GUI use QT

212
kman.py
View File

@@ -2,7 +2,7 @@
#########################################################
## @file : kman.py
## @desc : kindle note managerment tool
## @create : 20200526
## @create : 2020/05/26
## @author : Chengan
## @email : douboer@gmail.com
#########################################################
@@ -63,6 +63,7 @@ CLIPPATH = './My Clippings.txt' # /Volumes/Kindle/documents/My\ Clippings.txt
OUTPREF = './clip'
DEBUG = 1 # 0 - INFO; 1 - DEBUG
LOG2FILE = 1 # 0 - to stdio; 1 - to file
DELIMITER= '|'
# log info
logger = logging.getLogger()
@@ -125,8 +126,6 @@ def parse_section(s,i):
'time':'10:26:31'
'content':content }}}
"""
# 1. highlight over the picture, the content(#3 line) is empty, only two lines
# 2. bookmark section only two lines
# 3. other not correct format < 2
@@ -135,9 +134,13 @@ def parse_section(s,i):
# parse #2 line
section = defaultdict(dict)
"""
authinfo = sec[0]
dateinfo = sec[1]
content = sec[2] if len(sec)==3 else None
"""
(authinfo, dateinfo, content) = \
(s[0], s[1], s[2] if len(s)==3 else None)
das = da.search(dateinfo)
# type of section
@@ -150,11 +153,14 @@ def parse_section(s,i):
'''
tpy = ('HL' if das.group(2)=='标注' else \
('NT' if das.group(2)=='笔记' else 'BM'))
"""
pos = das.group(1)
day = das.group(3)
week = das.group(4)
pmam = das.group(5)
time = das.group(6)
"""
(pos, x, day, week, pmam, time) = das.groups()[0:6]
# parse #1 line
aus = au.search(authinfo)
@@ -174,9 +180,52 @@ def parse_section(s,i):
return section
def format_out(bks, ft='MD'):
def format_time(ds):
""" format date
Args:
ds: 2020年1月13日 星期一 上午 8:11:05
Return:
2020/1/13 20:11:05
"""
d = ds.split(' ')
res = re.search(r'(\d{4}).(\d{1,2}).(\d{1,2})',d[0])
ymd = '/'.join(res.groups())
res = re.search(r'(\d{1,2})(:\d{1,2}:\d{1,2})',d[3])
tm = ' '+str(int(res.group(1)) + (0 if d[2]=='上午' else 12))+res.group(2)
return ymd+tm
def format_data(bks, ft='MD'):
""" format data for MD & CSV
Args:
bks: books dict
f: can be 'MD'/'CSV'
Return:
list [header, sections]
header and sections are lists
"""
hd =[] # header
secs =[] # content
DELIMITER = '|' if ft=='MD' else ','
hd.append(DELIMITER.join(['TYPE','BOOKNAME','AUTHOR','MARKTIME','CONTENT']))
if ft=='MD':
hd.append(DELIMITER.join(['--' for i in range(5)]))
for kb,vb in bks.items():
author = vb['author']
for ks, vs in vb.items():
if ks in ['author', 'lines']: continue
secs.append(DELIMITER.join([vs['type'],kb,author, \
format_time(' '.join([vs['day'],vs['week'],vs['meridiem'],vs['time']])),vs['content']]))
return hd+secs
def format_out(bks, fnpref, ft='MD'):
"""format output and write to file
MARKDOWN format:
markdown format:
TYPE | bookname | author | marktime | content
--|--|--|--|--
xx|xx|xx|xx|xx
@@ -195,15 +244,107 @@ def format_out(bks, ft='MD'):
"""
suff = {'MD':'.md','CSV':'.csv','JSON':'.json'}
op = OUTPREF+suff[ft]
op = fnpref+suff[ft]
with open(op, 'w', encoding='gbk', errors='ignore') as fw:
with open(op, 'w', encoding='utf8', errors='ignore') as fw:
if ft=='JSON':
ft.write(json.dumps(bks, indent=4, sort_keys=True, ensure_ascii=False))
elif ft=='MD':
pass
fw.write(json.dumps(bks, indent=4, sort_keys=True, ensure_ascii=False))
elif ft in ['MD','CSV']:
for s in format_data(bks, ft):
fw.write(s)
fw.write('\n')
else:
ft.write(json.dumps(bks)) # only for load back
fw.write(json.dumps(bks)) # only for load back
def drop_duplicate(bks):
""" drop duplicated section
If I mark second time in same place, kindle will create two note,
so I need to remove the duplication record
Args:
bks: books dict
Return:
books remove duplicate sections
"""
[preks,prevs] = ['',{'content':'!#$%^&$%','type':'xx'}]
for kb,vb in bks.items():
bks[kb]['lines'] = 0
# add copy() or throw RuntimeError: dictionary changed size during iteration
# reference - http://www.cocoachina.com/articles/89748
for ks, vs in vb.copy().items():
if ks in ['author', 'lines']: continue
bks[kb]['lines'] += 1
if (vs['content'] in prevs['content'] or \
prevs['content'] in vs['content']) and \
prevs['type'] == vs['type']:
bks[kb].pop(preks)
if vs['content'] != prevs['content']:
print('prevs',prevs['type'],prevs['content'])
print(' vs', vs['type'], vs['content'])
preks = ks
prevs = vs
return bks
def add_note_to_highlight(bks):
""" append note content to corresponding highlight
and remove NT sections
Args:
bks: books dict
Return:
changed books
"""
[preks,prevs] = ['',{'content':'!#$%^&$%','type':'xx'}]
for kb,vb in bks.items():
for ks,vs in vb.copy().items():
if ks in ['author', 'lines']: continue
if [prevs['type'], vs['type']] == ['HL','NT']:
bks[kb][preks]['content'] += str(NTPREF+vs['content'])
bks[kb].pop(ks)
preks = ks
prevs = vs
return bks
def search_clip(bks, s, t='ALL', p='ALL'):
"""search clip, searching scope may be title/author/content
Args:
input: bks: books dict
s: key word
t: 'ALL'
'HL'
'BM'
'NT'
p: 'ALL'
'TITLE'
'AUTHOR'
'CONTENT'
Return: search clipping content
"""
nbks = defaultdict(dict)
nu = 0
for kb,vb in bks.items():
nbks[kb]['lines'] = 0
for ks,vs in vb.copy().items():
if ks in ['author', 'lines']:
nbks[kb][ks] = vs
continue
if t in ['ALL', vs['type']]:
scopestr = {'ALL':''.join([kb,vb['author'],vs['content']]), \
'TITLE':kb, 'AUTHOR':vb['author'], 'CONTENT':vs['content']}
found = re.search(s, scopestr[p])
if found:
nbks[kb][ks] = vs
nbks[kb]['lines'] += 1
nu += 1
if nbks[kb]['lines']==0:
nbks.pop(kb)
return [nu,nbks]
def statistic(bks):
pass
@@ -226,26 +367,11 @@ def json2dict(jf):
d=json.load(f)
return d
def search_clip(bks, s, t='ALL', p='ALL'):
"""search clip, searching scope may be title/author/content
Args:
input: bks: books dict
s: key word
t: 'ALL'
'HL'
'BM'
'NT'
p: 'ALL'
'TITLE'
'AUTHOR'
'CONTENT'
Return: search clipping content
"""
pass
if __name__=='__main__':
# 4 lines for each section seperated with '======='
# so read 4 lines before '======='
# loop to fill books dict
with open(CLIPPATH, 'r', encoding='utf8', errors='ignore') as f:
books = defaultdict(dict)
secd = defaultdict(dict)
@@ -261,10 +387,10 @@ if __name__=='__main__':
# content more than 1 line
if idx>3:
sec[2] += str(' '+line)
logger.debug('idx {} {}'.format(idx, sec[2]))
#logger.debug('idx {} {}'.format(idx, sec[2]))
else:
sec.append(line)
logger.debug('idx {} {}'.format(idx, sec[idx-1]))
#logger.debug('idx {} {}'.format(idx, sec[idx-1]))
else:
idx = 0
sidx += 1
@@ -279,19 +405,41 @@ if __name__=='__main__':
books[bn]['author'] = secd[bn]['author']
books[bn][str(sidx)] = secd[bn][str(sidx)]
# not add note to highlight content here,
# because NT maybe duplicated, we need remove duplication record before
"""
if tpy=='NT' and books[bn][str(sidx-1)]['type']=='HL':
books[bn][str(sidx-1)]['content'] += str(NTPREF+sec[2])
"""
else: # BM or not correct format section
sidx -= 1
# initial section for next section loop
sec = []
# remove duplication
drop_duplicate(books)
# test search note function
searchnote = search_clip(books, '三大都市圈', 'ALL', 'CONTENT')
if searchnote[0] > 0: format_out(searchnote[1], 'searchcontent', ft='MD')
searchnote = search_clip(books, '经济', 'ALL', 'TITLE')
if searchnote[0] > 0: format_out(searchnote[1], 'searchtitle', ft='MD')
searchnote = search_clip(books, '巴曙松', 'ALL', 'AUTHOR')
if searchnote[0] > 0: format_out(searchnote[1], 'searchauthor', ft='MD')
# add note content to hightlight, then delete note
add_note_to_highlight(books)
# test dict json convert
with open('./xx', 'w', encoding='utf8', errors='ignore') as fw:
fw.write(dict2json(books))
if json2dict('./xx')==books: print( 'test OK')
# print data with json format
logger.debug(json.dumps(books, indent=4, sort_keys=True, ensure_ascii=False))
format_out(books, OUTPREF, ft='MD')
# print data with json format
logger.debug(json.dumps(books, indent=4, sort_keys=True, ensure_ascii=False))

397
tclip.txt
View File

@@ -1,9 +1,4 @@
庆余年(精校版) (猫腻)
- 您在位置 #33260 的书签 | 添加于 2020年1月12日星期日 下午10:37:10
另一半中国史 (高洪雷)
- 您在位置 #2468 的书签 | 添加于 2020年1月12日星期日 下午11:09:06
@@ -13,393 +8,3 @@
==========
==========
薛兆丰经济学讲义 (薛兆丰)
- 您在位置 #1408-1410的标注 | 添加于 2020年1月13日星期一 上午8:11:05
么到底什么叫边际?边际就是“新增”带来的“新增”。 例如,边际成本就是每新增一个单位产品所需要付出的新增成本;边际收入是每多卖一个产品能够带来的新增收入;边际产量是每新增一份投入所带来的新增产量;边际效用是每消耗一个单位的商品所能带来的新增享受。
==========
薛兆丰经济学讲义 (薛兆丰)
- 您在位置 #1419-1421的标注 | 添加于 2020年1月13日星期一 上午8:12:44
这就是边际效用递减的规律,它指的是每多消耗一个单位的商品,所能带来的新增的享受在递减。例如我们吃东西的时候,食物带给我们的边际效用,通常都是递减的。 边际效
==========
薛兆丰经济学讲义 (薛兆丰)
- 您在位置 #1419-1420的标注 | 添加于 2020年1月13日星期一 上午8:12:49
这就是边际效用递减的规律,它指的是每多消耗一个单位的商品,所能带来的新增的享受在递减。例如我们吃东西的时候,食物带给我们的边际效用,通常都是递减的。
==========
庆余年(精校版) (猫腻)
- 您在位置 #43335-43336的标注 | 添加于 2020年1月17日星期五 下午6:05:22
“身为帝者,不可无情,不可多情。”皇帝将脸转了过去,“对身周无情者,对天下无情,天下必乱;对身周多情者,必受其害,天下丧其主,亦乱。”
==========
庆余年(精校版) (猫腻)
- 您在位置 #48484-48484的标注 | 添加于 2020年1月19日星期日 下午8:00:29
:“园子里的护卫能掺多少人就掺多少人,我会派人盯着,
==========
庆余年(精校版) (猫腻)
- 您在位置 #49901-49901的标注 | 添加于 2020年1月20日星期一 下午7:57:10
叶灵儿叹了口
==========
庆余年(精校版) (猫腻)
- 您在位置 #63955 的书签 | 添加于 2020年1月25日星期六 下午12:15:00
==========
庆余年(精校版) (猫腻)
- 您在位置 #70589-70589的标注 | 添加于 2020年1月27日星期一 下午6:32:55
书生造反,十年不成,
==========
枪炮、病菌与钢铁 : 人类社会的命运 (世纪人文系列丛书·开放人文) (贾雷德·戴蒙德)
- 您在位置 #2971-2975的标注 | 添加于 2020年1月28日星期二 下午4:30:12
关于病菌的历史作用的最令人生畏的例子来自随同哥伦布1492年的航行而开始的欧洲人对美洲的征服。虽然被那些杀人不眨眼的西班牙征服者杀死的印第安人不计其数但凶恶的西班牙病菌杀死的印第安人却要多得多。为什么在欧洲和美洲之间这种可怕的病菌的交流是这样不对等为什么印第安人的疾病没有大批杀死西班牙入侵者并传回欧洲消灭掉欧洲95%的人口?
==========
枪炮、病菌与钢铁 : 人类社会的命运 (世纪人文系列丛书·开放人文) (贾雷德·戴蒙德)
- 您在位置 #2990-2992的标注 | 添加于 2020年1月28日星期二 下午4:32:56
可以从数学上把病菌的传播定义为:由每一个原发病人传染的新的受害者的数目。这个数目的大小取决于每一个受害者能够传染给新的受害者的持续时间的长短,以及这种病菌从一个受害者转移到下一个受害者的效率的高低。
==========
枪炮、病菌与钢铁 : 人类社会的命运 (世纪人文系列丛书·开放人文) (贾雷德·戴蒙德)
- 您在位置 #2987-2988的标注 | 添加于 2020年1月28日星期二 下午4:33:12
病菌以各种稀奇古怪的方式使我们生病,如使我们得生殖器溃疡或腹泻。它这样做会得到什么样的演化利益呢?这似乎是特别令人费解而又自拆台脚的事,因为病菌杀死了它的宿主也就杀死了它自己。
==========
枪炮、病菌与钢铁 : 人类社会的命运 (世纪人文系列丛书·开放人文) (贾雷德·戴蒙德)
- 您在位置 #2994-2995的标注 | 添加于 2020年1月28日星期二 下午4:33:47
我们的疾病的许多“症状”,实际上不过是某种非常聪明的病菌在改变我们的身体或行为以便使我们帮助传播病菌时所表现出来的一些方式而已。
==========
枪炮、病菌与钢铁 : 人类社会的命运 (世纪人文系列丛书·开放人文) (贾雷德·戴蒙德)
- 您在位置 #3018-3019的标注 | 添加于 2020年1月28日星期二 下午4:43:11
这就是为什么“使我们生病”是符合病菌的利益的
==========
枪炮、病菌与钢铁 : 人类社会的命运 (世纪人文系列丛书·开放人文) (贾雷德·戴蒙德)
- 您在位置 #3019-3019的标注 | 添加于 2020年1月28日星期二 下午4:43:17
但是,为什么病菌会演化出杀死宿主这种明显自拆台脚的策略呢?
==========
枪炮、病菌与钢铁 : 人类社会的命运 (世纪人文系列丛书·开放人文) (贾雷德·戴蒙德)
- 您在位置 #3062-3065的标注 | 添加于 2020年1月28日星期二 下午5:05:35
人类历史上最大的一次流行病是在第一次世界大战结束时杀死2100万人的流行性感冒。黑死病(腺鼠疫)在1346年到1352年间杀死了欧洲四分之一的人口在有些城市里死亡人数高达70%。19世纪80年代初当加拿大太平洋铁路修经萨斯喀彻温时该省以前很少接触过白人及其病菌的印第安人死于肺结核的人数每年竟达到惊人的9%。
==========
枪炮、病菌与钢铁 : 人类社会的命运 (世纪人文系列丛书·开放人文) (贾雷德·戴蒙德)
- 您在位置 #3073-3074的标注 | 添加于 2020年1月28日星期二 下午5:08:40
但由于这种病菌除了在活人体内是不可能生存的,所以人死了这种病也就消失了,直到又一批后代达到易受感染的年代——直到一个受到感染的外来人使一场流行病重新开始。
==========
枪炮、病菌与钢铁 : 人类社会的命运 (世纪人文系列丛书·开放人文) (贾雷德·戴蒙德)
- 您在位置 #3183-3185的标注 | 添加于 2020年1月28日星期二 下午5:38:20
在第一年,黏液病毒在受到感染的兔子中造成了令人满意的(对澳大利亚农民来说)998%的死亡率。令这些农民感到失望的是第二年兔子的死亡率下降到90%最后下降到25%,使得要在澳大利亚完全消灭兔子的希望落空了
==========
枪炮、病菌与钢铁 : 人类社会的命运 (世纪人文系列丛书·开放人文) (贾雷德·戴蒙德)
- 您在位置 #3189-3191的标注 | 添加于 2020年1月28日星期二 下午5:40:07
一提起梅毒我们立刻会联想到两种情况生殖器溃疡和病情发展的十分缓慢许多得不到治疗的患者要过好多年才会死去。然而当梅毒于1495年首次在欧洲明确见诸记录时它的脓疱通常从头部到膝部遍布全身使脸上的肉一块块脱落不消几个月就使人一命呜呼。
==========
枪炮、病菌与钢铁 : 人类社会的命运 (世纪人文系列丛书·开放人文) (贾雷德·戴蒙德)
- 您在位置 #3189-3193的标注 | 添加于 2020年1月28日星期二 下午5:40:17
一提起梅毒我们立刻会联想到两种情况生殖器溃疡和病情发展的十分缓慢许多得不到治疗的患者要过好多年才会死去。然而当梅毒于1495年首次在欧洲明确见诸记录时它的脓疱通常从头部到膝部遍布全身使脸上的肉一块块脱落不消几个月就使人一命呜呼。到1546年梅毒已演化成具有我们今天所熟悉的那些症状的疾病。显然同多发性黏液瘤病一样为使患者活得长些而进行演化的那些梅毒螺旋体因此就能够把它们的螺旋体后代传染给更多的患者
==========
枪炮、病菌与钢铁 : 人类社会的命运 (世纪人文系列丛书·开放人文) (贾雷德·戴蒙德)
- 您在位置 #3196-3197的标注 | 添加于 2020年1月28日星期二 下午5:42:57
1519年科尔特斯率领600个西班牙人在墨西哥海岸登陆去征服拥有好几百万人口的勇猛好战的阿兹特克帝国
==========
枪炮、病菌与钢铁 : 人类社会的命运 (世纪人文系列丛书·开放人文) (贾雷德·戴蒙德)
- 您在位置 #3203-3230的标注 | 添加于 2020年1月28日星期二 下午5:43:38
到1618年墨西哥原来2000万左右的人口急剧减少到160万左右。 皮萨罗于1531年率领168个人在秘鲁海岸登陆去征服有几百万人口的印加帝国时同样带来了一场浩劫。对皮萨罗来说幸运的而对印加人来说不幸的是天花已在1526年由陆路到达杀死了印加的很大一部分人口包括瓦伊纳·卡帕克皇帝和他的指定继承人。我们已在第三章中看到皇位空缺的结果是使瓦伊纳·卡帕克的另两个儿子阿塔瓦尔帕和瓦斯卡尔卷入了一场内战使皮萨罗在征服这个分裂的帝国中坐收渔人之利。 当我们美国人想到存在于1492年的新大陆人口最多的社会时出现在我们心头的往往只是阿兹特克人和印加人的那些社会。我们忘记了北美洲也曾在那最合逻辑的地方——密西西比河流域养活了人口众多的印第安人社会我们今天的一些最好的农田就在这个地方。然而在这种情况下西班牙征服者对于摧毁这些社会并未起到直接的作用一切都是由事先已经传播的欧亚大陆的病菌来完成的。当埃尔南多·德索托成为第一个欧洲征服者于1540年在美国东南部行军时他碰到了两年前因当地居民死于流行病而被放弃的一些城镇旧址。这些流行病是从沿海地区印第安人那儿传来的而这些印第安人又是被到沿海地区来的西班牙人感染的。西班牙人的这些病菌赶在这些西班牙人之前向内陆传播。 德索托仍然看得到密西西比河下游沿岸的一些人口稠密的印第安城镇。在这次远征结束后又过了很久欧洲人才又一次到达密西西比河河谷但这时欧亚大陆的病菌已在北美洲安家落户并不断向四处传播。到欧洲人下一次在密西西比河下游出现即17世纪初法国的移民出现时所有这些印第安人的大城镇已经消失殆尽。它们的遗迹就是密西西比河河谷的那些大土堆。直到最近我们才知道构筑这种大土堆的社会有许多在哥伦布到达新大陆时仍然大部分完好无损它们的瓦解(可能是疾病造成的结果)是从1492年到欧洲人对密西西比河进行系统勘探这一段时间里发生的。 在我年轻的时候美国小学生所受到的教育是北美洲本来只有大约100万印第安人居住。把人数说得这样少对于为白人的征服行为辩解是有用的因为他们所征服的只不过是一个可以认为几乎是空无所有的大陆。然而考古发掘和对最早的欧洲探险者所留下的关于我们海岸地区的描写的仔细研究现已表明印第安人原来的人数在2000万左右。就整个新大陆来说据估计在哥伦布来到后的一两个世纪中印第安人口减少了95%。 主要的杀手是旧大陆来的病菌。印第安人以前从来没有接触过这些病菌因此对它们既没有免疫能力也没有遗传抵抗能力。天花、麻疹、流行性感冒和斑疹伤寒争先恐后地要做杀手的头把交椅。好像这些病还嫌不够似的紧随其后的还有白喉、疟疾、流行性腮腺炎、百日咳、瘟疫、肺结核和黄热病。在无数情况下白人实际上在当地亲眼目睹了病菌来到时所产生的破坏。例如1837年具有我们大平原最精致的文化之一的曼丹族印第安部落从一艘自圣路易沿密苏里河逆流而上的轮船上感染了天花。一个曼丹人村庄里的人口在几个星期之内就从2000人急剧减少到不足40人。 虽然有十几种来自旧大陆的主要传染病在新大陆安家落户,但也许还没有一种主要的致命疾病从美洲来到欧洲。
==========
枪炮、病菌与钢铁 : 人类社会的命运 (世纪人文系列丛书·开放人文) (贾雷德·戴蒙德)
- 您在位置 #3207-3208的标注 | 添加于 2020年1月28日星期二 下午5:46:47
当我们美国人想到存在于1492年的新大陆人口最多的社会时出现在我们心头的往往只是阿兹特克人和印加人的那些社会。
==========
枪炮、病菌与钢铁 : 人类社会的命运 (世纪人文系列丛书·开放人文) (贾雷德·戴蒙德)
- 您在位置 #3203-3203的标注 | 添加于 2020年1月28日星期二 下午5:49:23
到1618年墨西哥原来2000万左右的人口急剧减少到160万左右。
==========
枪炮、病菌与钢铁 : 人类社会的命运 (世纪人文系列丛书·开放人文) (贾雷德·戴蒙德)
- 您在位置 #3219-3223的标注 | 添加于 2020年1月28日星期二 下午5:50:17
在我年轻的时候美国小学生所受到的教育是北美洲本来只有大约100万印第安人居住。把人数说得这样少对于为白人的征服行为辩解是有用的因为他们所征服的只不过是一个可以认为几乎是空无所有的大陆。然而考古发掘和对最早的欧洲探险者所留下的关于我们海岸地区的描写的仔细研究现已表明印第安人原来的人数在2000万左右。就整个新大陆来说据估计在哥伦布来到后的一两个世纪中印第安人口减少了95%。
==========
枪炮、病菌与钢铁 : 人类社会的命运 (世纪人文系列丛书·开放人文) (贾雷德·戴蒙德)
- 您在位置 #3223-3225的标注 | 添加于 2020年1月28日星期二 下午5:50:50
主要的杀手是旧大陆来的病菌。印第安人以前从来没有接触过这些病菌,因此对它们既没有免疫能力,也没有遗传抵抗能力。天花、麻疹、流行性感冒和斑疹伤寒争先恐后地要做杀手的头把交椅
==========
枪炮、病菌与钢铁 : 人类社会的命运 (世纪人文系列丛书·开放人文) (贾雷德·戴蒙德)
- 您在位置 #3225-3226的标注 | 添加于 2020年1月28日星期二 下午5:50:58
好像这些病还嫌不够似的,紧随其后的还有白喉、疟疾、流行性腮腺炎、百日咳、瘟疫、肺结核和黄热病
==========
枪炮、病菌与钢铁 : 人类社会的命运 (世纪人文系列丛书·开放人文) (贾雷德·戴蒙德)
- 您在位置 #3259-3261的标注 | 添加于 2020年1月28日星期二 下午5:54:00
梅毒、淋病、肺结核和流行性感冒于1779年随库克船长[5]到来接着于1804年又发生了一场斑疹伤寒大流行以及后来的许多“较小的”流行病把夏威夷的人口从1779年的50万左右减少到1853年的84000人。
==========
枪炮、病菌与钢铁 : 人类社会的命运 (世纪人文系列丛书·开放人文) (贾雷德·戴蒙德)
- 您在位置 #3577-3578的标注 | 添加于 2020年1月28日星期二 下午6:47:19
正如人类学家克劳德·莱维-斯特劳斯所说的那样,古代文字的主要功能是“方便对别人的奴役”。非专职人员个人使用文字只是很久以后的事,因为那时书写系统变得比较简单同时也更富于表现力。
==========
枪炮、病菌与钢铁 : 人类社会的命运 (世纪人文系列丛书·开放人文) (贾雷德·戴蒙德)
- 您在位置 #3597-3598的标注 | 添加于 2020年1月28日星期二 下午8:59:22
文字只在新月沃地、墨西哥、可能还有中国独立出现,完全是因为这几个地方是粮食生产在它们各自的半球范围内出现的最早地区
==========
枪炮、病菌与钢铁 : 人类社会的命运 (世纪人文系列丛书·开放人文) (贾雷德·戴蒙德)
- 您在位置 #3687-3688的标注 | 添加于 2020年1月28日星期二 下午9:36:29
问题似乎在他们的社会。否则又怎样来解释澳大利亚东北部的土著为什么没有采用弓箭?而他们见过与他们进行贸易的托雷斯海峡的岛上居民在使用弓箭。
==========
枪炮、病菌与钢铁 : 人类社会的命运 (世纪人文系列丛书·开放人文) (贾雷德·戴蒙德)
- 您在位置 #3695-3697的标注 | 添加于 2020年1月28日星期二 下午9:38:01
1942年当第二次世界大战仍在进行时美国政府制定了曼哈顿计划其显而易见的目的就是抢在纳粹之前发明出为制造原子弹所需要的技术。3年后这个计划成功了共花去20亿美元相当于今天的200多亿美元
==========
枪炮、病菌与钢铁 : 人类社会的命运 (世纪人文系列丛书·开放人文) (贾雷德·戴蒙德)
- 您在位置 #3716-3717的标注 | 添加于 2020年1月28日星期二 下午9:43:39
特利布·戴姆勒得以在一辆自行车上安装了一台发动机从而制造了第一辆摩托车
==========
枪炮、病菌与钢铁 : 人类社会的命运 (世纪人文系列丛书·开放人文) (贾雷德·戴蒙德)
- 您在位置 #3730-3732的标注 | 添加于 2020年1月28日星期二 下午9:45:48
从专利法律师观点看,最佳的发明就是全无先例的发明,就像雅典娜整个地从宙斯的前额跳出来一样[3]。
==========
枪炮、病菌与钢铁 : 人类社会的命运 (世纪人文系列丛书·开放人文) (贾雷德·戴蒙德)
- 您在位置 #3750-3751的标注 | 添加于 2020年1月28日星期二 下午9:50:58
从来就没有这样的人。所有公认的著名发明家都有一些有本领的前人和后人,而且他们是在社会有可能使用他们的成果的时候对原来的发明作出改进的
==========
枪炮、病菌与钢铁 : 人类社会的命运 (世纪人文系列丛书·开放人文) (贾雷德·戴蒙德)
- 您在位置 #3827-3828的标注 | 添加于 2020年1月28日星期二 下午11:58:58
在现代的西方,保护发明者的所有权的专利权和其他财产法奖励发明,而在现代的中国,缺乏这种保护妨碍了发明
==========
枪炮、病菌与钢铁 : 人类社会的命运 (世纪人文系列丛书·开放人文) (贾雷德·戴蒙德)
- 您在位置 #3834-3835的标注 | 添加于 2020年1月28日星期二 下午11:59:42
对各种观点和异端观点的宽容促进了创新,而浓厚的传统观点(如中国强调中国古代的经典)则扼杀了创新
==========
枪炮、病菌与钢铁 : 人类社会的命运 (世纪人文系列丛书·开放人文) (贾雷德·戴蒙德)
- 您在位置 #3841-3841的标注 | 添加于 2020年1月29日星期三 上午12:01:16
在整个历史上,战争常常是促进技术革新的主要因素
==========
枪炮、病菌与钢铁 : 人类社会的命运 (世纪人文系列丛书·开放人文) (贾雷德·戴蒙德)
- 您在位置 #3843-3844的标注 | 添加于 2020年1月29日星期三 上午12:02:15
强有力的集中统一的政府在19世纪后期的德国和日本对技术起了推动作用而在公元1500年后的中国则对技术起了抑制作用。
==========
枪炮、病菌与钢铁 : 人类社会的命运 (世纪人文系列丛书·开放人文) (贾雷德·戴蒙德)
- 您在位置 #3844-3846的标注 | 添加于 2020年1月29日星期三 上午12:04:24