kindle manager
This commit is contained in:
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
12
changelog.md
12
changelog.md
@@ -112,15 +112,15 @@ b['1']['2'] = {'3':1} # OK
|
||||
|
||||
---
|
||||
|
||||
# feature list
|
||||
# feature list (keep update)
|
||||
- [x] first abstract from kindle hard / local directory for different OS
|
||||
- [x] add GUI use QT
|
||||
- [x] use thread to check kindle connection status
|
||||
- import function:
|
||||
- [x] local
|
||||
- [x] kindle
|
||||
- [ ] duokan
|
||||
- [ ] amazon
|
||||
- [x] duokan
|
||||
- [x] amazon **not test**
|
||||
- [x] link to douban and amazon
|
||||
- export function:
|
||||
- [ ] to [evernote](https://github.com/benhorvath/kindle2evernote/blob/master/kindle2evernote.py)
|
||||
@@ -129,7 +129,6 @@ b['1']['2'] = {'3':1} # OK
|
||||
- [ ] onenote
|
||||
- [x] txt
|
||||
- [x] markdown
|
||||
- [ ] easily copy filter notes to clipboard
|
||||
- [ ] implement command line based on [argparse](https://www.jianshu.com/p/a41fbd4919f8)
|
||||
- :x: mobi / epub reader
|
||||
- [ ] import .azw3/.epub/.mobi file to kindle
|
||||
@@ -144,5 +143,10 @@ b['1']['2'] = {'3':1} # OK
|
||||
- [ ] clean (sdr)
|
||||
- [ ] sync modify to kindle device
|
||||
- [ ] compare parse html info with xpath & beautisoap & regex
|
||||
- [ ] save export markdown file name with book name(treeview's item name),<br>
|
||||
such as **<<印度漂浮的次大陆.md>>**
|
||||
- [ ] easily copy filter notes to clipboard
|
||||
- [ ] add right click menu for book info treeview item, so I can copy book info by select menu
|
||||
format: 1| :book: | [存在主义咖啡馆](href) | 作者/出版社/出版时间/阅读时间 书评
|
||||
|
||||
|
||||
|
||||
BIN
downimg/s29675043.jpg
Normal file
BIN
downimg/s29675043.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 22 KiB |
135
export.md
135
export.md
@@ -1,122 +1,17 @@
|
||||
TYPE|BOOKNAME|AUTHOR|MARKTIME|CONTENT
|
||||
--|--|--|--|--
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/13 8:11:05|么到底什么叫边际?边际就是“新增”带来的“新增”。 例如,边际成本就是每新增一个单位产品所需要付出的新增成本;边际收入是每多卖一个产品能够带来的新增收入;边际产量是每新增一份投入所带来的新增产量;边际效用是每消耗一个单位的商品所能带来的新增享受。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/13 8:12:49|这就是边际效用递减的规律,它指的是每多消耗一个单位的商品,所能带来的新增的享受在递减。例如我们吃东西的时候,食物带给我们的边际效用,通常都是递减的。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 12:33:44|的是,在新闻里,我们不仅会听到抱怨贸易逆差,还会听到抱怨贸易顺差。当人们抱怨贸易逆差时,说我们国家的钱都被外国人赚走了。这时,他们没有提到,由于进口了许多外国商品,他们国家的人享受了许多优质商品。当人们抱怨贸易顺差时,他们会说,我们国家的资源都被外国人给买走了。但这时他们没有提,我们赚了不少外国人的钱,从而获取了将来进一步享受外国人提供的商品和服务的机会。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 9:42:07|要成功实施价格歧视,最重要的就是要防止消费者之间对同样的产品进行转售。越是难以阻止消费者转售的产品,就越难实施价格歧视。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 9:42:36|但对于那些不能转售的商品或者服务,商人就会进行大量价格歧视,比如在餐厅里喝的水和饮料,和餐厅以外的便利店比,它们的价格差距就非常大。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 9:42:49|人们对一种产品趋之若鹜的地区,价格就定得高一点;
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 9:43:35|价格歧视的三种方法
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 9:44:23|实名制的飞机票,也是大量实施价格歧视的典型案例。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 9:47:00|如果演唱会门票价格过低,歌迷就不得不展开价格以外的竞争,那就是排队等候。什么人更愿意排队等候呢?是那些时间成本比较低的人,通常是年轻人。这样做的结果,是能够把那些更年轻、更热情、更奔放的歌迷吸引到演唱会现场,这样演唱会的现场就会更加火爆。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 9:47:06|还有一种非常有趣的价格歧视:歌星在发售演唱会门票时,有时会刻意把门票的价格降低。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 10:22:51|弗里德曼强调的就是我们这里所说的优质的第二层含义。对消费者来说,并不是质量越高越好,也不是价格越低越好,而是价格和品质要相当,成本和收益要相当。这才是他们最看中的品质。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 10:23:14|好几年前,一辆校车发生意外,造成了严重的伤亡,社会各界人士出来说,应该制定校车的安全标准。我的一个朋友也参与了这一标准的制定,但后来他放弃了。因为他发现,如果不计成本凭空制定校车的安全标准,最后校车的标准快要接近坦克车的标准了。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 10:23:58|一个国家很大,贫富有差距,并非每个学校和家长都能负担得起这样标准的校车。标准太高,就会逼着很多学校,尤其是农村的学校放弃提供校车,家长们就只能使用安全性能更低的交通工具,比如自己骑自行车或雇用黑车等,结果是孩子们享受到的安全保障反而降低了。
|
||||
NT|薛兆丰经济学讲义|薛兆丰|2020/1/30 10:26:31|山寨 假货 问题
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 10:29:41|为了克服信息不对称,建立互信,人类社会构想出了各种各样有趣的解决方案,从重复交易到第三方背书,从质保、延保,再到收益共享。此外,还有三种非常接近的建立信任的办法:付出沉没成本、给出人质或者给出抵押。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 10:32:11|银行是一个很难取信于人的行业。因为客户把钱交给银行,万一哪天银行把钱卷走了,客户就会血本无归。为了建立信任,好银行往往把总部设在城市最繁华的地段,而且不是租的,是买的,或者是自己盖的。这能让人相信,它们打算一直在这里,不会搬走,它们要做50年、100年。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 10:33:44|越是愿意自残的人,越是容易取信于人,所以中国人才有所谓“感情深一口闷”之类酒桌上的谚语。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 10:35:02|可以推测,当我们这个社会信任机制建立得越来越健全,人与人之间可以通过其他各种各样的方式来建立信任时,通过喝酒等自残的方式来建立信任的办法就会用得越来越少,而喝酒就变得纯粹是娱乐了。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 10:35:45|跟付出沉没成本相似的另外一个办法,是给出人质。一个大国的国王跟小国的国王说:“你放心吧,我不会侵略你,你们不要搞军备、不要武装起来了。”小国相信吗?小国不相信。但如果大国国王把自己的女儿嫁到小国去做人质,小国就比较容易相信了。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 10:35:51|当然,除了交出人质以外,付出抵押也是同样的办法。如果既没有人质,又没有抵押,那该怎么办?还有一些比较便宜的办法,就是互相分享一点秘密,互相交个底,说点自己以前见不得光的事情,那也算是一种无形的抵押。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 10:38:28|厂商用实际行动告诉消费者,我已经花掉了一个亿,将来只有一个办法才能把这一个亿收回来:那就是在未来若干年里,持续地卖出10亿瓶水,每瓶水都保证质量,每瓶水都多收一毛钱。在出售这10亿瓶水的销售期内,如果被发现质量问题,消费者就会减少甚至停止购买,厂商前面付出的那一个亿就打水漂了。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 10:50:02|这时,有意思的结论就来了。从斯密和李嘉图开始,我们就知道分工能够提高生产效率,分工越细,人们就越能够集中生产自己擅长的东西,然后进行交换,这样人们的整体福利就能得以提高。 但是我们这里讲品质管理时是反其道而行的,我们要做的是垂直整合:加工厂不仅要有自己的奶牛,还要有自己的饲料来源。从种草、割草、送草,到养牛、挤奶、检验、加工,全是一家企业内部完成的工序。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 10:58:49|如果半成品或者成品的检验成本比较低,换手的次数就可以多些,就可以进行更细的分工;相反,如果品质检验的成本比较高,就需要更多地进行垂直整合,减少中间环节。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 11:00:09|损失掉一部分品牌的多样性,换来的是稳定性和可靠性,这么做可能是现代社会提高产品质量可靠性的一种趋势。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 11:18:55|他的理由是,在这种产品发生意外对顾客造成伤害的案件中,要让顾客提出证据证明厂商存在疏忽是非常困难的,顾客必须是专家才有可能提出证据。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 11:19:26|他认为只要产品出现明显的质量问题,无需证据就可以判企业疏忽,企业应该对自己的产品负有严格的责任,顾客不需要提供关于疏忽的证据就能够获得赔偿。这种无条件的责任叫“严格责任”
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 11:20:16|这样的做法有其合理之处。因为一件产品销售给千家万户,每一位顾客都有不同的使用场景,如果用玻璃瓶装的可口可乐,在一些比较正常的状态下也会发生爆炸,那就要求每一位顾客都成为专家,对气温、压强、搬动的程序等,都有比较深入的了解,否则意外就难以避免。这样,整个社会避免意外发生的成本也太高了。反过来,只要可口可乐公司能够把瓶子做得更结实一点,就能够一劳永逸地解决问题,所有顾客都不需要担心了。因此让商家承担严格责任,是有必要的。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 11:21:53|如果他的责任还是太大,既没有办法通过买保险来分摊,也没有办法通过提高商品的价格来分摊,那么他就会面临两个选择:一个是铤而走险,继续生产,一旦出了事就破产、坐牢;如果他小心谨慎一点,会做第二个选择,那就是不再生产,完全退出市场。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 11:22:08|但是如果责任人事实上是没有能力解决问题、避免意外的,他会怎么办?他的一个合理做法是去买保险,将风险分摊给其他人。与此同时,他也可以提高产品的售价,把自己所要承担的风险重新分摊给所有顾客,让所有顾客一起来承担。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 11:24:00|大家会说提高食品和药品的质量总是好的,但经济学的分析告诉我们,凡事都有成本。与销售利润没有任何牵连的审批官员,他们确实不会像商家那样追求利润,但他们追求产品的极致安全,而追求产品的极致安全,本身是有成本的。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 11:25:45|美国食品药品监督管理局(Food and Drug Administration, FDA)为例
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 11:26:02|1962年,当时的美国总统约翰·肯尼迪还专门给FDA的局长颁发了一枚勋章,以表彰FDA的贡献。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 11:43:33|奥地利学派认为,要避免经济周期最根本的办法就是政府抑制住乱印钞票的冲动。关于如何抑制政府乱印钞票,奥地利学派提出了两个基本的主张:第一是要回到金本位,第二是实施自由发钞制度。
|
||||
NT|薛兆丰经济学讲义|薛兆丰|2020/1/30 11:46:00|超超发 —>利率下降—>投资增加—>信心增加—>虚假繁荣
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 24:21:10|没有哪个社会能忍受日益恶化的通货膨胀,政府迟早会采取行动,收缩货币的发行量。这时,当初人们制订的那些长远规划就找不到足够的资金来维持,资金链断裂、泡沫破灭了。这就是奥地利学派理解的经济周期发生的过程。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 24:46:37|凯恩斯主义学派的基本主张是,政府应该逆经济周期而行,人们都在消费时政府就少采取动作;人们都不消费时,政府就应该积极消费、积极投资、积极生产。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 24:46:59|这里要说明的是,凯恩斯本人其实是深信市场自行调节功能的,他指出一旦社会回到正常的状态,政府就应该停止干预,让市场机制自己发挥作用。换句话说凯恩斯主义者关心的是要解决短期内出现的问题,尤其是短期内出现的失业问题,这时创造需求、制造就业机会就是政府的责任
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 24:48:31|货币政策是通过发钞的办法影响人们的预期,使得就业得以增加。当然发钞会引起通货膨胀,但早期的凯恩斯主义者相信在通货膨胀和失业率之间存在着替代关系,多发钞失业率就会降低,但后来发现这一招不管用了,市场出现了通货膨胀率和失业率同时高涨——滞胀——的情况。
|
||||
NT|薛兆丰经济学讲义|薛兆丰|2020/1/30 24:50:33|超发 通胀 刺激经济 提高就业 . 滞涨破坏这个逻辑
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 24:59:05|把今天的责任推给将来的人,这么做可行吗?这个国家长远该怎么办?凯恩斯的经典回答是:“从长远而言,我们都将一命呜呼。”他的意思是,情况很特殊,这次不一样,管不了那么远的事了。当然,人们随时都可以把“这次不一样”作为违反原则的理由
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 13:03:09|弗里德曼的名言是:“通货膨胀到处以及永远都是一种货币现象。”(Inflation is everywhere and always a monetary phenomenon.)
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 13:10:04|货市主义者认为,当新增的货币流动到社会每一个角落以后,除了物价水平上涨,其他任何事情都不会改变。长期而言,政府通过货币政策来干预经济的努力是无效的。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 13:17:31|既然通货膨胀无论何时何地都是一种货币现象,那怎样才能抑制政府乱发钞票的冲动呢? 奥地利学派认为,要回到金本位或者要实施自由发钞制度。而弗里德曼提出的办法是要盯死货币发行增量。哪个政府都会忍不住乱发钞票,所以解决的办法是把货币增长比例写到宪法里去,谁也改不了。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 13:23:36|如果社会上的失业率高涨,政府就去制造通货膨胀来对付失业率,那么第一次、第二次人们会真的以为经济变好了,开始增加投资多雇人,但试过一两次以后,人们就会形成更明确的预期,知道这只不过是政府对付眼前问题的花招,他们再做投资和雇人决策时,就会格外小心。社会上这样的人多了,政府的政策就会失效。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 13:23:53|同样的道理,当政府看到社会上消费不足,发钱让人们消费时,人们就会逐渐明白,“政府发的钱不是白给的,迟早会通过增加税收的方式要回去,所以哪怕是拿了政府的钱也不能乱花”。这时政府的政策又失效了。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 13:24:14|政府的政策赖以形成的经济模型,其中的参数是会随着人们预期的改变而改变的。当人们一旦形成预期,那些模型就不起作用了
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 13:26:09|但真实经济周期理论却认为,经济学家所说的外生变量、冲击,其实是无所不在的,发生意外的冲击是我们真实生活里的常态。 干旱、地震、飓风、洪水,当然是一种冲击;新的科技发明、新的技术创新、新的市场营销手段、新的支付和结算方式,也是一种冲击;新的观念、风尚、潮流,也是冲击。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 13:27:55|如果在这以前,政府觉得出现了闲置的劳动力、出现了失业,应该管一管,从而刻意制造一些本来市场不需要的岗位让人们去做,让多余的劳动力去填充,这实际上是造成了浪费,妨碍了人们去寻找真正有价值的工作机会。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 13:28:55|生活中到处都是冲击,要应付这些冲击,人们的反应不是即时的,而是滞后的,不是全面的,而是渐进的。这本身就是合理的。额外的干预不会解决问题,而只会产生新的问题。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 13:29:16|一个人得了病,去住院是正常的,住院当然是劳动力的一种浪费,但产生这种浪费的根源——得病——早就已经发生了,再阻止这个人去住院是于事无补的。所以不让那些本来应该失业的人失业,那也是错的,错上加错并不能变成对。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 13:32:49|凯恩斯不是职业经济学家,而是英国上流社会的名人、记者、政府官员和投资家。他在1936年出版了《就业、利息和货币通论》,从此开创了宏观经济学这个学术分支。这本书到今天,已经有80多年的历史了,但是你到美国的书店去看,不管书店有多大,不管经济学的书架有多小,里面一定还放着凯恩斯的这本《就业、利息和货币通论》
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 13:33:57|凯恩斯的直觉非常准,他看到了这一点,于是就用他独特的语言来描述这种现象。在他的著作里,这种难以名状、难以刻画、难以衡量的不确定性被称之为“动物精神”。他说正是由于这些莫名其妙的原因,人们的需求忽然下降了,经济不发展了,而解决问题的办法就是要鼓励人们去消费
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 13:34:11|当人们面对不确定性的冲击,当他们发现用精准的数学根本无力招架、无法应对的时候,他们就只能诉诸直觉、比喻、经验、自信以及勇气。这是宏观经济学真正深不可测的原因。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 13:37:08|从长期看,通货膨胀和失业之间并不存在稳定的替代关系,也就是说不可能通过制造通货膨胀来降低失业率。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 13:37:23|从长期看,货币增长率决定了通货膨胀率,滥印钞票迟早会造成通货膨胀
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 14:25:39|到了1992年,联邦储备局波士顿分行发布了一份所谓的科学统计报告,声称经过严密的计算,美国商业银行肯定是对弱势群体进行了歧视。 实际上,商业银行迫于竞争,并不会随便歧视弱势群体。如果真的还得起房贷,而银行不给贷款,这岂不是银行的损失?但是大众并不相信。这份报告出来以后,整个社会掀起了一场要求对弱势群体发放更多贷款的运动。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 14:26:48|成本是放弃了的最大代价
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 14:27:16|沉没成本不是成本
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 14:27:28|一块地不仅可以用来建采石场或者建住宅小区,它还有好多其他用途:A、B、C、D、E……当一个资源有若干个选项时,被选中的那个选项,它的成本就是所有放弃了的选项当中价值最高的那个。简言之,成本就是放弃了的最大代价。(Cost is the best opportunity foregone.)
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 14:28:33|沉没成本,就是指那些已经发生但不可收回的支出。当我们没办法再收回、没办法再放弃时,就不存在成本。凡是提到成本,我们一定是向前(未来)看,而不是向后(过去)看的。所以,沉没成本不是成本。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 14:30:19|负面的感受不是成本
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 14:30:28|比如我们要在自家院子里修一个游泳池,修游泳池的过程,有许多负面感受:辛苦、劳累、一段时间的脏乱差等,但这些都不是修游泳池的成本,因为没有放弃什么东西。修了游泳池,这个地方就不能搭帐篷,那个放弃了的帐篷才是我们修游泳池的成本。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 14:30:48|你的成本由别人决定
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 14:31:23|如果有人愿意出2万元钱租这个铺位,那么坚持卖茶叶蛋的成本就是2万元;如果有人愿意出3万元,那么成本就是3万元,跟这房子是谁的没有关系。坚持卖茶叶蛋的成本,只跟一个因素有关系,那就是放弃了的最大收入。 你
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 14:33:07|一个青年,被征去当兵以后,就不能从事他原来的职业了。这时虽然多了一个廉价的士兵,但可能少了一位化学家、一个小提琴手,或是一位企业家。总的来说,义务兵制的成本是非常高的,因为它放弃的代价是不可估量的。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 14:33:21|义务征兵时,政府付出的货币成本确实比较低,但是他没有看到另外一个重要成本,就是放弃了的最大代价。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 14:33:37|给士兵发薪水比免费征兵更便宜
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 14:35:21|经济学家米尔顿·弗里德曼曾经给美国政府提过不少建议,大多数都没被接受。但是这一条,建议将征兵制改为志愿兵制,就被美国政府接受了。这对于减少美国的国防总成本,提高征兵效率,提高兵员质量,有极大的帮助。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 14:36:23|在大多数情况下,中间商在帮助我们减少总成本,而不是增加总成本,而中间商之间的竞争,会使物流的总成本降到最低。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 14:40:39|亏损会降低资源未来使用的成本
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 14:40:45|盈利提高了资源未来使用的成本
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 14:41:16|无论是盈利还是亏损,在经济学里,都是意外发生的。每当发生意外,我们就重新调整资源的未来估值,而资源使用的成本,就要按照这个新的估值来计算。所以,一旦出现盈利,资源的使用成本就会提高;一旦出现亏损,资源的使用成本就会下降。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 14:41:57|供需关系决定商品价格,商品价格决定资源成本
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 14:42:24|把钱赚到手以后,再把赚到的钱倒过来归结到前面每一个环节的生产要素里面去,从而给这些生产要素定价,决定它们的价值。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 14:45:11|政府无论是免费把土地送出去,还是高价拍卖土地,对最终的房价都不会造成影响。
|
||||
NT|薛兆丰经济学讲义|薛兆丰|2020/1/30 14:46:51|不对 供需决定价格 土地供给充裕意味着房子供给充裕 怎么不导致房价降低?
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 14:47:08|经济学里有一个非常重要的概念,叫“租”。所谓租,就是对资产的付费
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 14:47:18|只要能够带来收入的资源都叫资产,而对资产的付费就叫租。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 14:48:31|他当歌星的收入减10万元,减20万元,减500万元,减900万元,他都照样当歌星。这990万元是他白赚的,这就叫租。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 14:49:09|赚多赚少都是白得的,这就叫租。当然,有时候我们也把它叫“垄断租”,因为它是在数量管制的保护之下从事的一种垄断经营。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 14:51:04|只要能够带来收入的资源都叫资产,而对资产的付费就叫租
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 14:53:40|科斯的看法则别具一格,他说所有的伤害都是相互的,我们得用新的眼光来看待这些案例:不是一方在伤害另外一方,而是双方为了不同的用途,在争夺相同的稀缺的资源:牛跟小麦争的是那块地,如果让牛吃小麦,那牛就伤害了小麦;但如果禁止牛吃小麦,小麦就伤害了牛。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 14:54:09|关于科斯理论的争论,法律经济学者、芝加哥大学法学院教授理查德·爱泼斯坦(Richard Epstein)曾提出过一个观点。他说,如果争夺资源的双方是同一个人,那会发生什么情况?以这样的角度来重新审视前面提到的案子,可能就会豁然开朗了。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 14:54:15|例如牛跟小麦之争,假设牛跟小麦同属一人,这时,牛能不能吃小麦,就取决于牛肉能卖多少钱,小麦能卖多少钱。如果小麦价格高,牛肯定不能随便吃小麦;但如果牛肉价格足够高,牛当然可以吃小麦,不仅可以吃小麦,还要给它听莫扎特的音乐,给它按摩呢。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 14:55:16|谁避免意外成本最低,谁的责任就最大
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 14:55:46|这个想法非常重要。正是基于这个想法,科斯的意思是说,火星烧着了亚麻,但是责任可能在农夫,虽然农夫并未招惹铁路公司。谁付出的成本更低,谁就应该承担更大的责任。那既然农夫避免意外所要付出的成本,比铁路公司避免意外所要付出的成本低得多,那挪开亚麻的责任,就要落到农夫身上了
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 14:57:03|科斯定律最流行的版本是:在交易费用为零或足够低的情况下,不管资源最初的主人是谁,资源都同样会流到价值最高的用途上去。用大白话来说,就是“谁用得好就归谁”。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 14:57:23|钻石归矿工还是白富美
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 14:59:13|这就引发了一场关于狼的争论。最后人们从科斯定律的角度找到了解决办法,那就是养牲口的人,如果能证明自己的牲口被狼咬死了,那么养狼的人就需要向他提供一定数目的赔偿。从此,养狼的人就知道养狼是有代价的,他们必须把狼群的数目控制在一个合理的范围内,我们通常把这个价叫作“科斯对价”(Coasian payment)。就这样,一个是否应该养狼的问题,一个非黑即白的问题,就转变为应该养多少狼、谁来监控、谁来负责的问题,也就是一个关于如何分配和使用资源的问题。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 15:01:09|我们说科斯定律最流行的一个版本是:在交易费用为零或足够低的情况下,不管产权归谁,资源都会落到最有价值的用途上。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 15:02:42|但现实生活中交易费用很高,很多资源是没有办法落到使用价值更高的人手里的。因此,初始的产权分配、制度法规、风俗习惯,乃至道德规范,就都变得很重要了。我们可以把社会上通行的制度、习俗和道德规范,都看成为了减少重复商议的成本而逐渐固定下来的解决纠纷的办法。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 15:03:07|而这就是所有的制度、风俗、习惯,以至政府、法院存在的根本理由——对资源、责任、权利进行初始的界定。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 15:04:36|另外一个问题就是不合作的所有者,也就是所谓的“钉子户”。根据《强制销售条例》,只要不可分割的物业的90%以上的所有者同意出售,那么剩下的10%的业主,就必须出售他的土地和相应的物业。2010年,这个条例又做了修改,比例从90%下降到80%。当然,里面还加了一条,要进行这种征地,必须经过特区行政长官的批准。 到底是90%合理还是80%更合理呢?我们不可能有一个科学的界定。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 15:07:10|这是我们寻求合作解,“不讲理,只讲数”的一个很好的例子。我们应当充分领会科斯定律的精神,在现实生活的各种冲突中积极地寻找合作解。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 15:25:11|当我们把口袋里有限的钱,按“边际效用等于边际成本”的原则,分别用来购买不同的产品时,我们从这些不同的产品那里获得的总收益,就会达到最大。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 15:33:40|我们怎么能知道不存在“价格上升需求量也上升”的例子呢?的确有过一些记载,但它们几乎全都可以理解为价格以外的某些因素发生了变化
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 15:37:31|一件商品是奢侈品还是必需品,完全取决于价格
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 15:37:51|需求曲线上的弹性处处不等,价格越高弹性越大
|
||||
NT|薛兆丰经济学讲义|薛兆丰|2020/1/30 15:39:17|古董价格 vs 水电煤
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 15:39:47|掌握了商品的需求弹性会随着商品价格的变化而变化的规律,我们就容易明白一个道理:任何商品都既可以是奢侈品,也可以是必需品,这完全取决于价格的高低。当商品足够便宜的时候,它自然就成为必需品;当它贵到一定程度,它就自然变成奢侈品。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 15:40:16|例如,水到底是奢侈品还是必需品?一般人会说,水当然是必需品。但想想看,在水资源特别匮乏的地方,人们使用水的数量,跟水资源非常丰富的地方,是完全不一样的。水资源特别匮乏时,人们不会随便浇花、洗车、洗澡。少量的水会先洗脸再洗脚,洗完脚又刷鞋,刷完鞋还要拿来冲厕所。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 15:42:12|这种变化趋势就是需求第二定律所说的:随着时间的推移,需求对价格的弹性会变得越来越高,也就是说替代品将会越来越多、应变的空间会越来越大。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 15:45:02|这就是需求第三定律的含义:每当消费者必须支付一笔附加费时,高品质的产品相对低品质的产品就变得便宜了,这笔附加费越高,高品质产品相对就越便宜。正因为这样,我们也把这个定律叫作“好东西运到远方去定律”。
|
||||
NT|薛兆丰经济学讲义|薛兆丰|2020/1/30 15:46:14|包装费用
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 15:48:56|大家都批评发国难财的行为。但我们想想,国难是那个发国难财的人造成的吗?如果不是,那么借机发财的人,其实就只是给别人多提供了一个选择罢了。发国难财的人可能确实利用了别人,但是这种利用,对另一方来说也是有好处的。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 15:49:25|生活中乘人之危来利用他人的现实,其实很多。比如,医生不就利用了病人生病吗?老师不就利用了学生无知吗?但是医生对病人来说是有帮助的,老师对学生来说也是有帮助的。但这个道理很多人都不明白,不管是中国人还是外国人
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 15:54:33|这三位经济学家,一位是1992年获得诺贝尔奖的加里·贝克尔(Gary Becker),他说发国难财是增加供给的最好办法,当然应该鼓励。第二位经济学家是2002年诺奖得主弗农·史密斯(Vernon Smith),他说发国难财是好事。第三位经济学家是大家熟悉的1976年的诺奖得主米尔顿·弗里德曼,他说:“这些发国难财的人,是在救别人的命,他们应该得到一个奖章,而不是得到惩罚。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 15:54:56|阻止发国难财的直接后果,就是剥夺了遭受灾害的人的选择。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 15:56:04|我们在经济学中学到的最重要的教训之一,就是把愿望和结果分开来看。愿望是一回事,但愿望造成的结果是另外一回事。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 15:56:30|一个人想要买最便宜的苹果,但是当他进入市场寻找最便宜的苹果时,他的寻找行为本身就使得苹果的价格上升了。一个人想要卖最贵的苹果,但是当他进入市场,想要把自己的苹果以最高价卖出去时,他的行为本身就已经使得苹果的价格下跌了。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 15:56:45|那些乘人之危发财的人,他们自己本身的行为就增加了供给,使商品的价格下降,缓解了供需之间的矛盾。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 16:00:43|回顾中国的经济改革,如果只用一句话来概括,我会说,它是有关竞争规则改变的改革:从过去看排队的时间,看出身,看政治面貌,变成另外一个规则,那就是看出价的高低。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 16:01:23|短缺是因为价格受到了抑制
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 16:01:48|春节期间买不到火车票,人们要找黄牛党才能买到,这叫短缺
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 16:02:46|同样的道理,我们也没有听说奔驰汽车短缺过。它只是稀缺,但不会短缺,它永远在商店里等着我们。哪怕是暂时缺货,也不会成为一个新闻,不会成为一个社会现象。蒂芙尼的钻石也一样,它永远待在商店里等待着顾客。人们只要把钱放下,就可以带它回家。我们从未看哪个媒体说,蒂芙尼的钻石短缺了
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 16:02:58|过剩是价格被人为拔高的结果
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 16:04:46|不难看出,价格管制越严重,价值耗散就越大,人们设法绕过政府管制的积极性也越大;而政府围堵的力度越大,人们采用的对策就越迂回,其中白白浪费掉的竞争成本也越大。从这个角度看,价格管制之下,形形色色的违法活动以及它们出场的次序,也都是可以理解的。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 16:05:49|人们常有这样的鸵鸟心态,在讨论价格的时候,会说那些正在触动神经的商品非常特殊,不是商品,所以价格规律不起作用。谈水费的时候,说水不是商品;谈学费的时候,教育不是商品;谈药费的时候,健康不是商品;谈旅费的时候,回家过年不是商品。然而,抱着这样的心态,只能让人脱离现实,而无法正视问题和寻求对策。毕竟经济规律是不以人的意志为转移的
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 16:06:32|反对的第二个理由是,回家过年是刚需。意思是不管价格多高,人们还是要回家过年,因此提价只会让铁路系统多赚钱,而不能降低人们回家过年的愿望。
|
||||
HL|薛兆丰经济学讲义|薛兆丰|2020/1/30 16:17:24|他们说:帮穷人的最好办法,就是以金钱的方式给穷人补贴,同时让市场发挥它自身应有的功能,而不是直接去干预商品的价格。
|
||||
HL|大教堂与集市(开源运动的《圣经》,中文版首次出版)|(美)EricS.Raymond著|2020/5/30 23:59:28|Linus定律道出了大教堂模式和集市模式最关键的区别:在大教堂建筑者看来,bug是棘手的、难以发现的、隐藏在深处的,要经过几个人数月的全心投入和仔细检查,才能有点信心说已经剔除了所有错误。而发布间隔越长,倘若等待已久的发布版本并不完美,人们的失望就越发不可避免
|
||||
HL|大教堂与集市(开源运动的《圣经》,中文版首次出版)|(美)EricS.Raymond著|2020/5/30 23:59:52|对集市模式而言则完全不同,在上千名合作开发者热切钻研每个新发布版本的情况下,你可以假定bug是浅显易找的,或者至少可以很快变得浅显易找。所以你会频繁发布以获取更多的修正,其副作用是良性的:即便发布中有些小问题,你也不会损失太多。
|
||||
HL|大教堂与集市(开源运动的《圣经》,中文版首次出版)|(美)EricS.Raymond著|2020/5/31 12:06:07|聪明的数据结构配上愚笨的代码,远比反过来要好得多。 Brooks在《人月神话》的第9章里说:“让我看你的流程图但不让我看表,我会仍然搞不明白。给我看你的表,一般我就不再需要你的流程图了,表能让人一目了然。”历经30年的术语/文化变迁,这个道理依旧没变
|
||||
HL|大教堂与集市(开源运动的《圣经》,中文版首次出版)|(美)EricS.Raymond著|2020/5/31 22:25:31|有一群人高调声称自己是黑客,但他们并不是。这些人(大多是些毛头小子)的主要目的是攻入他人计算机或者破解电话系统。真正的黑客称他们为“骇客”(cracker),而且完全不想搭理他们。多数真正的黑客认为,骇客懒惰,缺乏责任感,而且不是很聪明,如果你的目标是能够攻破安全系统,那不会让你成为黑客,就好比学会热线(hotwire)发动汽车并不会让你成为汽车工程师一样。遗憾的是,很多记者和作者错误地使用“黑客”一词来描述骇客,这使得真正的黑客极为不满。 两者最根本的区别是:黑客搞建设,骇客搞破坏。
|
||||
HL|大教堂与集市(开源运动的《圣经》,中文版首次出版)|(美)EricS.Raymond著|2020/5/31 22:27:30|(你还必须要培养出一种对自己学习能力的信心——你要相信,即便你没有掌握解决某个问题所需的全部知识,如果你成功处理了其中一小部分而且从中学到东西,你将会学到足够多的知识去解决下一小部分——如此往复,最终你会解决整个问题。
|
||||
HL|大教堂与集市(开源运动的《圣经》,中文版首次出版)|(美)EricS.Raymond著|2020/5/31 22:29:36|黑客天生是反权威的。如果有人能命令你,他就能让你做不成你特别想做的事——而且,如果探究权威者的思维,你会发现其理由往往愚蠢得令人发指。所以无论什么地方出现权威主义倾向,你都要与之抗争,以免他们压迫你和其他黑客。
|
||||
HL|大教堂与集市(开源运动的《圣经》,中文版首次出版)|(美)EricS.Raymond著|2020/5/31 22:30:23|滥用权威者靠审查和保密而强大,他们不信任自愿合作和信息共享——他们只喜欢他们控制之下的“合作”。若要做得像一名黑客,对审查、保密以及使用武力或欺骗这类行为,你必须要有一种直觉上的反感,而且你必须愿意与之抗争。
|
||||
HL|大教堂与集市(开源运动的《圣经》,中文版首次出版)|(美)EricS.Raymond著|2020/5/31 22:33:53|学习编程就像学习如何写好自然语言。最好的方式是阅读大师们写的东西,然后写你自己的东西,多读一些,多写一些,再多读些,再多写些……如此循环往复,直到你写的东西开始发展出你在经典中所体会到的力量和简洁。
|
||||
HL|大教堂与集市(开源运动的《圣经》,中文版首次出版)|(美)EricS.Raymond著|2020/5/31 22:39:58|·学习很好地使用你的母语写作。尽管有一种陈旧的看法认为程序员写作不行,但很多黑客(包括我所知道的那些最优秀的黑客们)写得一手好文章,而且其数量多得让人吃惊。 ·阅读科幻小说,参加科幻小说集会(这是认识黑客和潜在黑客的好方法)。 ·研习禅修,并且/或者学习武术。(心智训练似乎在很多重要方面都是类似的。) ·培养起对音乐的鉴赏力。学会欣赏一些独特类型的音乐。学习很好地演奏乐器,或者学习如何唱歌。 ·培养出你对双关语和俏皮话的欣赏能力。
|
||||
HL|大教堂与集市(开源运动的《圣经》,中文版首次出版)|(美)EricS.Raymond著|2020/5/31 22:42:30|关于网名的问题值得着重说一下。将真实身份隐藏在虚假名字后面是骇客、warez d00dz以及其他不入流家伙们幼稚而愚蠢的行为。黑客不会这么做,黑客以自己的作为为荣,并愿意把自己的作品与真名相联系。所以,如果你有假名的话,扔掉它。在黑客文化中,假名是失败者的标识。
|
||||
HL|大教堂与集市(开源运动的《圣经》,中文版首次出版)|(美)EricS.Raymond著|2020/5/31 22:50:06|有种错误的观点认为教堂模式(或集市模式,或任何其他形式的管理结构)在一定程度上能可靠地产出创意,这完全是无稽之谈。一帮人在一起,不会有什么突破性的创见——即便是集市中那些无政府主义者组成的志愿者团体,通常也不能有真正的创见,更不要说公司委员会中那些为生计着想的还活在过去年代的人了。远见源自个人,其周遭社会机器的最好做法,就是响应这些有突破性的远见——滋养、奖赏并严格测试它们,而不是压制它们。
|
||||
HL|大教堂与集市(开源运动的《圣经》,中文版首次出版)|(美)EricS.Raymond著|2020/5/31 22:51:24|因此创新的根本问题(在软件中,或任何其他领域)是:如何不压制创意。但是,更为根本的是,如何先产生出一批有创见的人。 如果有人认为大教堂模式能够做到这点,而集市模式由于进入门槛低和过程流动性强不能做到这点,那就大错特错了。如果我们需要的是一个人和他的创意,那怎样的社会环境会更有利于这个创意的实现?一个能凭借创意迅速吸引成百上千合作者的环境,必然要好过任何这样的环境:这个人在着手实现他的创意前,不得不向领导层推销他的创意,否则就有被炒掉的风险。
|
||||
HL|大教堂与集市(开源运动的《圣经》,中文版首次出版)|(美)EricS.Raymond著|2020/5/31 22:52:28|事实上,如果查一下有多少软件创新是因为使用大教堂模型导致的,就很快会发现它非常罕见。大公司靠大学研究提供新创意(所以万圣节文件的作者们对Linux能更快吸收这些研究感到不安),或者靠收购小公司来收购创意,这些都不是大教堂文化的原生创新。事实上,用这种方式移植的许多创新,都在万圣节文件作者们大力颂扬的“强有力管理”下悄然窒息了。
|
||||
HL|大教堂与集市(开源运动的《圣经》,中文版首次出版)|(美)EricS.Raymond著|2020/5/31 22:55:50|点到点结构是开源社区出现惊人生产力的关键。Kropotkin曾经对权力关系做出的评价被“SNAFU原则” [1]进一步阐明:“只有平等个体之间才有真正的交流,因为下级向上级讲好听的谎话会比讲真话更能得到持续的奖励。”真正的交流是创造型团队必不可少的,而权力关系将极大制约这点。开源社区有效避免了这种权力关系,并通过对比告诉我们权力关系会带来多么糟糕的代价:大量的bug、低下的生产力和机会的丧失。
|
||||
HL|大教堂与集市(开源运动的《圣经》,中文版首次出版)|(美)EricS.Raymond著|2020/6/1 8:07:04|首先,也是最明显的一点,在同侪中拥有好名声是一种最基本的激励,出于前面提到的进化上的原因,我们都渴望体验它。(一些人试着将这种对声誉的内驱力做各种升华,使其看起来和同侪没有那么明显的关联性,比如“荣誉”、“道德操守”、“虔诚”等等,但这并不能改变其内在本质。)
|
||||
|
||||
2
kman.py
2
kman.py
@@ -582,7 +582,7 @@ class kMan:
|
||||
#serr = str(stream_stderr.read())
|
||||
#if sout: print('stdout {}'.format(sout))
|
||||
#if serr: print('stderr {}'.format(serr))
|
||||
print('os.name {} sout {}'.format(os.name,sout))
|
||||
#print('os.name {} sout {}'.format(os.name,sout))
|
||||
if os.name == 'nt': # windows
|
||||
for d in sout.split('\n'):
|
||||
if 'Kindle' in d:
|
||||
|
||||
115
kmanapp.py
115
kmanapp.py
@@ -19,7 +19,7 @@ import threading
|
||||
# os.environ['PATH'] = sys._MEIPASS + ";" + os.environ['PATH']
|
||||
|
||||
from PySide2.QtWidgets import (QMainWindow, QApplication, QMessageBox,
|
||||
QFileDialog, QLabel, QAbstractItemView, QHeaderView)
|
||||
QFileDialog, QLabel, QAbstractItemView, QHeaderView, QMenu)
|
||||
from PySide2.QtCore import (QAbstractTableModel, Signal, QSize, QTimer, Qt)
|
||||
from PySide2.QtGui import (QPalette, QStandardItemModel, QStandardItem, QIcon)
|
||||
|
||||
@@ -75,6 +75,8 @@ class kmanWindow(QMainWindow):
|
||||
def __init__(self, parent=None):
|
||||
super(kmanWindow, self).__init__(parent)
|
||||
|
||||
self.copyinfo = ''
|
||||
|
||||
# create ui and initial it
|
||||
ui = Ui_MainWindow()
|
||||
ui.setupUi(self)
|
||||
@@ -92,6 +94,7 @@ class kmanWindow(QMainWindow):
|
||||
### substitute pandas table with mTable
|
||||
self.mt = mTable()
|
||||
|
||||
self.books_info = defaultdict(dict)
|
||||
# initial check order:
|
||||
# 1. backup file bk.data ->
|
||||
# 2. kindle(My Clippings.txt) ->
|
||||
@@ -118,7 +121,6 @@ class kmanWindow(QMainWindow):
|
||||
# if the information exist in backup file, initial with this file,
|
||||
# and grap new book's information from douban
|
||||
# else grap all book information from douban
|
||||
self.books_info = defaultdict(dict)
|
||||
try:
|
||||
if os.path.exists(BACKUPINFOFN):
|
||||
self.books_info = self.km.json2dict(BACKUPINFOFN)
|
||||
@@ -158,7 +160,8 @@ class kmanWindow(QMainWindow):
|
||||
#ui.searchLineEdit.returnPressed.connect(self.search_return_press())
|
||||
ui.searchComboBox.currentIndexChanged.connect(self.search_scope_change)
|
||||
ui.searchToolButton.clicked.connect(self.search_button_clicked)
|
||||
ui.treeView.clicked.connect(self.tree_item_clicked)
|
||||
#ui.treeView.clicked.connect(self.tree_item_clicked)
|
||||
ui.treeView.selectionModel().selectionChanged.connect(self.tree_item_selectionchanged)
|
||||
ui.tableView.clicked.connect(self.table_item_clicked)
|
||||
ui.tableView.horizontalHeader().setStretchLastSection(True)
|
||||
#ui.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeToContents)
|
||||
@@ -174,7 +177,10 @@ class kmanWindow(QMainWindow):
|
||||
ui.tableView.verticalHeader().hide()
|
||||
ui.tableView.setModel(self.ui.tablemodel)
|
||||
ui.tableView.setSortingEnabled(True)
|
||||
ui.tableView.selectionModel().selectionChanged.connect(self.table_item_selectionchanged)
|
||||
#ui.tableView.contextMenuEvent().selectionChanged.connect(self.table_item_selectionchanged)
|
||||
|
||||
# XXXX
|
||||
self.ui.textEdit.installEventFilter(self)
|
||||
|
||||
# XXXX
|
||||
@@ -194,21 +200,6 @@ class kmanWindow(QMainWindow):
|
||||
else:
|
||||
super(kmanWindow, self).eventFilter(source, event)
|
||||
|
||||
"""
|
||||
app = QApplication(sys.argv)
|
||||
editor = MyWidget()
|
||||
cursor = editor.textCursor()
|
||||
fmt = cursor.charFormat()
|
||||
fmt.setForeground(QColor('blue'))
|
||||
address = 'http://example.com'
|
||||
fmt.setAnchor(True)
|
||||
fmt.setAnchorHref(address)
|
||||
fmt.setToolTip(address)
|
||||
cursor.insertText("Hello world again", fmt)
|
||||
editor.show()
|
||||
app.exec_()
|
||||
"""
|
||||
|
||||
def check_increase_books(self, bks, bksinfo):
|
||||
new_list = list(bks.keys()) # kindle's books with note
|
||||
new_list = [re.split(r'[\((\-\::_\s]',nn.strip())[0] for nn in new_list]
|
||||
@@ -256,6 +247,7 @@ class kmanWindow(QMainWindow):
|
||||
self.ui.tableView.verticalHeader().hide()
|
||||
self.ui.tableView.setModel(self.ui.tablemodel)
|
||||
#self.ui.tablemodel.tabledata_update.connect(self.tabledata_update_slot)
|
||||
self.ui.tableView.selectionModel().selectionChanged.connect(self.table_item_selectionchanged)
|
||||
|
||||
# refresh textedit content
|
||||
if comp in [1,2]:
|
||||
@@ -265,6 +257,11 @@ class kmanWindow(QMainWindow):
|
||||
note=stype, content=scontent, position=sposition)
|
||||
print(re.split(r'[\((\-\::_\s]',sbookname.strip())[0])
|
||||
self.ui.textEdit.setHtml(tt)
|
||||
|
||||
self.copyinfo = \
|
||||
""" {content} \n\n--《{bookname}》{author} ({time}) 【{note} P{position}】""". \
|
||||
format( content=scontent, bookname=sbookname, author=sauthor, time=stime,
|
||||
note=stype, position=sposition )
|
||||
elif comp in [3,4]:
|
||||
self.render_textedit_words(self.words_data)
|
||||
elif comp == 5:
|
||||
@@ -282,6 +279,7 @@ class kmanWindow(QMainWindow):
|
||||
word = index.sibling(index.row(), 0).data()
|
||||
|
||||
txt = ""
|
||||
self.copyinfo = ''
|
||||
for row in lookups:
|
||||
if words[row[1]]['word'] == word:
|
||||
[susage, stimestamp, sbookname, sauthor, scategory, sposition] = \
|
||||
@@ -293,6 +291,12 @@ class kmanWindow(QMainWindow):
|
||||
author=sauthor,category=scategory,
|
||||
timestamp=stimestamp,position=sposition)
|
||||
|
||||
self.copyinfo += \
|
||||
"""{usage} \n\n-- {bookname} {author} {category} {timestamp} {position} \n """ \
|
||||
.format( usage=susage,bookname=sbookname, \
|
||||
author=sauthor,category=scategory, \
|
||||
timestamp=stimestamp,position=sposition)
|
||||
|
||||
self.ui.textEdit.setHtml(txt)
|
||||
|
||||
'''
|
||||
@@ -321,10 +325,24 @@ class kmanWindow(QMainWindow):
|
||||
self.ui.textEdit.setOpenExternalLinks(True)
|
||||
self.ui.textEdit.setHtml(infos_temp.format(link=vv['link'],
|
||||
bookname=vv['bookname'],
|
||||
author=vv['author'], ratenum=vv['ratenum'],
|
||||
score=vv['score'], publisher=vv['publisher'],
|
||||
publishing=vv['publishing'],description=vv['description'],
|
||||
author=vv['author'],
|
||||
ratenum=vv['ratenum'],
|
||||
score=vv['score'],
|
||||
publisher=vv['publisher'],
|
||||
publishing=vv['publishing'],
|
||||
description=vv['description'],
|
||||
img=vv['img'].split('/')[-1]))
|
||||
|
||||
self.copyinfo = """ 1 | :green_book: | [{bookname}]({link}) | """ \
|
||||
"""{author}/{score}/{publisher}/{publishing} {description}""" \
|
||||
.format( bookname=vv['bookname'], \
|
||||
link=vv['link'],
|
||||
author=vv['author'],
|
||||
score=vv['score'],
|
||||
publisher=vv['publisher'],
|
||||
publishing=vv['publishing'],
|
||||
description=vv['description'],)
|
||||
|
||||
else: pass
|
||||
|
||||
|
||||
@@ -345,7 +363,15 @@ class kmanWindow(QMainWindow):
|
||||
def tabledata_update_slot(self, s):
|
||||
print('call tabledata_update_slot() {}'.format(s))
|
||||
|
||||
def tree_item_selectionchanged(self, selected, deselected):
|
||||
# selected, deselected are QItemSelection objects
|
||||
model_index_list = selected.indexes() # QModelIndexList
|
||||
if not model_index_list: return 0
|
||||
model_index = model_index_list[0] # QModelIndex
|
||||
self.tree_item_clicked(model_index)
|
||||
|
||||
def tree_item_clicked(self, modelidx):
|
||||
# modelidx is a QModelIndex object
|
||||
model_index_list = self.ui.treeView.selectedIndexes() # QModelIndexList
|
||||
model_index = model_index_list[0] # QModelIndex
|
||||
itemmodel = model_index.model() #QAbstractItemModel/QStandardItemModel
|
||||
@@ -360,6 +386,7 @@ class kmanWindow(QMainWindow):
|
||||
comp = 0
|
||||
if self.tree_selected.split('_')[0] == 'info':
|
||||
self.ui.tableView.setVisible(False)
|
||||
self.ui.tableView.clearSelection()
|
||||
self.render_textedit_infos(self.books_info, item.text())
|
||||
comp = 5
|
||||
else:
|
||||
@@ -398,6 +425,13 @@ class kmanWindow(QMainWindow):
|
||||
|
||||
self.refresh_ui_component(comp)
|
||||
|
||||
def table_item_selectionchanged(self, selected, deselected):
|
||||
# selected, deselected are QItemSelection objects
|
||||
model_index_list = selected.indexes() # QModelIndexList
|
||||
if not model_index_list: return 0
|
||||
model_index = model_index_list[0] # QModelIndex
|
||||
self.table_item_clicked(model_index)
|
||||
|
||||
def table_item_clicked(self, index):
|
||||
"""
|
||||
print('tableView.currentIndex().row() {} tableView.currentIndex().column() {}'
|
||||
@@ -419,7 +453,11 @@ class kmanWindow(QMainWindow):
|
||||
self.ui.textEdit.setHtml(notes_temp.format(
|
||||
bookname=sbookname, author=sauthor, time=stime,
|
||||
note=stype, content=scontent, position=sposition))
|
||||
elif ss=='note':
|
||||
self.copyinfo = \
|
||||
""" {content} \n\n-- 《{bookname}》{author} ({time}) 【{note} P{position}】""". \
|
||||
format( content=scontent, bookname=sbookname, author=sauthor, time=stime,
|
||||
note=stype, position=sposition )
|
||||
elif ss=='word':
|
||||
self.render_textedit_words(self.words_data)
|
||||
|
||||
def search_button_clicked(self):
|
||||
@@ -443,6 +481,39 @@ class kmanWindow(QMainWindow):
|
||||
print('call keyPressEvent() {} '.format(event.key()))
|
||||
self.search_button_clicked()
|
||||
|
||||
def contextMenuEvent(self, event):
|
||||
|
||||
# do not work!?
|
||||
#if(self.ui.tableView.geometry().contains(event.pos())):
|
||||
# print('contextMenuEvent pos {}'.format(event.globalPos()))
|
||||
tree_index_list = self.ui.treeView.selectedIndexes() # QModelIndexList
|
||||
table_index_list = self.ui.tableView.selectedIndexes()
|
||||
# tableview item selected
|
||||
if table_index_list:
|
||||
model_index = table_index_list[0] # QModelIndex
|
||||
print('contextMenuEvent pos {}'.format(event.globalPos()))
|
||||
|
||||
menu = QMenu()
|
||||
copyAction = menu.addAction("Copy")
|
||||
action = menu.exec_(self.mapToGlobal(event.pos()))
|
||||
if action ==copyAction:
|
||||
self.copyAction(model_index.row(), model_index.column())
|
||||
elif tree_index_list and self.tree_selected.split('_')[0]=='info':
|
||||
model_index = tree_index_list[0] # QModelIndex
|
||||
print('contextMenuEvent pos {}'.format(event.globalPos()))
|
||||
|
||||
menu = QMenu()
|
||||
copyAction = menu.addAction("Copy")
|
||||
action = menu.exec_(self.mapToGlobal(event.pos()))
|
||||
if action ==copyAction:
|
||||
self.copyAction(model_index.row(), model_index.column())
|
||||
|
||||
def copyAction(self, row, column):
|
||||
import clipboard
|
||||
clipboard.copy(self.copyinfo)
|
||||
|
||||
print('copyAction row {} column {}'.format(row, column))
|
||||
|
||||
def search_return_press(self):
|
||||
self.search_button_clicked()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user