首页
归档
友情链接
关于
Search
1
在wsl2中安装archlinux
172 阅读
2
nvim番外之将配置的插件管理器更新为lazy
115 阅读
3
从零开始配置 vim(15)——状态栏配置
87 阅读
4
2018总结与2019规划
80 阅读
5
PDF标准详解(五)——图形状态
61 阅读
软件与环境配置
读书笔记
编程
Thinking
FIRE
菜谱
翻译
登录
Search
标签搜索
c++
c
学习笔记
windows
文本操作术
编辑器
NeoVim
Vim
win32
emacs
VimScript
linux
elisp
读书笔记
文本编辑器
Java
反汇编
OLEDB
数据库编程
数据结构
Masimaro
累计撰写
345
篇文章
累计收到
32
条评论
首页
栏目
软件与环境配置
读书笔记
编程
Thinking
FIRE
菜谱
翻译
页面
归档
友情链接
关于
搜索到
345
篇与
的结果
2025-12-06
读《饥饿的盛世》
乾隆朝是中国古代封建王朝的又一个顶峰,在乾隆朝,GDP达到世界的三分之一,比今天美国占世界GDP的比重都要高。人口达到封建王朝的历史之最。封建集权达到顶峰。另外乾隆朝的疆域是中国历史之最。但是就是这个从文治武功的角度看都到达顶峰的国家,与西方世界存在着巨大的差距:乾隆十三年(1748年),孟德斯鸠发表了名著《论法的精神》。乾隆四十一年(1776年),美国宣布独立。乾隆五十四年(1789年),法国爆发资产阶级大革命,提出了“主权在民原则”。乾隆皇帝退位后的第二年(1797年),华盛顿宣布拒绝担任第三任总统,完善了美国的民主政体。18世纪,世界文明大潮的主流是通过立宪制和代议制“实现了对统治者的驯化,把他们关到法律的笼子里”。在英国访问团到达大清之后得出结论——这是一个饥饿的盛世。他们看清了大清的不堪一击,为最终英国下定决心与1840年发动鸦片战争埋下了伏笔。光鲜的面子中国式皇权,一言以蔽之,就是剥削天下的权力,其自私性决定了它终日处于被觊觎和窥伺之中。贯穿乾隆政治生涯的第一条原则是大权独揽。纵观中国古代政治,秩序的崩塌一般源于外戚干政、宦官专权、党争、农名起义。乾隆朝对外戚,皇族的防范也达到严苛的程度,在上任做皇帝之后,乾隆皇帝自己在心中已经没了兄弟之情,与兄弟之间只有君臣之分。乾隆多次下旨敲打亲兄弟弘昼。同时提前处理了庄亲王,主要是因为一些对朝廷不满的皇亲国戚时不时会到庄亲王府中谈论朝政,发泄不满。对于宦官来说,乾隆是防范太监最成功的皇帝之一。刚刚登上皇位两个月的乾隆就迫不及待地开始敲打太监。清朝初期,宫廷典制并不完备,为有效管理太监,乾隆总结了积累近百年的管理经验,下令编纂“宫廷法典”—《钦定宫中现行则例》和《国朝宫史》。除了详细规定太监的等级、职掌和待遇外,还对太监的管理及处分做了详细而严格的规定。虽然天生重感情的乾隆也与许多太监建立了不错的个人关系,但是太监一旦犯错,他决不宽假。由于时刻提防,坚持不懈,所以终乾隆朝六十年,太监们始终没有对皇权构成任何干扰和威胁。对于大臣,人很容易因为政治见解不同分成不同的党派。而清代大臣形成朋党不光是政治间接。清代的官员主要是采用科举选拔,在科举中主考官可能会将考中的人聚集形成门生。或者大臣们根据中举的时间形成同科、同窗等关系。而朝中的大臣也不断拉拢新人形成一个个利益共同体。他们不再是为了国家利益,或仅仅因为政治不同开展公开的辩论,而是在私下拉帮结派,互相攻伐,消极怠工的方式来给对方使绊子,造成政令不畅,行政机构效率低下。雍正朝开始,雍正皇帝为了刷新吏治已经开始打压一些朋党。乾隆还是在未登基之前,就已经通过史书,对朋党政治的历史和危害有了深入了解。乾隆朝期间处理鄂尔泰和张廷玉,很难想象像张廷玉那种以谨小慎微,办事兢兢业业,一生小心勤勉的人会因为礼节上的罪名被一而再再而三的斥责。虽然活着的时候被乾隆下旨取消了配享太庙的权利,不过在死后乾隆于心不忍还是恢复了这项权利,但是张廷玉是感受不到这种皇恩浩荡了。。。在文治方面,乾隆朝前期整个官僚系统高效,而且算是比较廉洁。这个廉洁主要建立在雍正时期对整个官僚体系的严厉整顿。在乾隆初期,乾隆采取的是宽仁的政策,这个时期社会风气好转,官僚百姓都觉得整个社会被松绑了,让人感觉如沐春风。在武功方面,乾隆时期彻底解决了康雍时期遗留的准格尔部,而且拼接大小金川战争整个疆域版图空前。乾隆二十四年(1759年)统一新疆后,中国疆域极盛,北起萨彦岭、额尔古纳河、外兴安岭,南至南海诸岛,西起巴尔喀什湖、帕米尔高原,东至库页岛,领土面积1453多万平方公里。黑暗的里子乾隆甚至整个清王朝都是面子上光亮,但是底色是黑的。首先由于满洲人得位不正,满汉矛盾从未真正解决,而且满人虽然表面上学习儒家得孔孟之道,但是背地里一直采用得是奴隶社会得奴才与主子的关系。整个清王朝统治的早期经历了像扬州十日、嘉定三屠这样的大屠杀。而且清朝一直盛行文字狱。整个社会都处在一种高压的社会环境下。因为统治者最热爱的是稳定,而维护稳定的最核心手段则是维护纲常。一旦纲常紊乱,则统治者必然受到威胁。乾隆对老百姓有两幅面孔:对于安分守己的“良民”,他“视如赤子”。他一直体现着爱民如子,乾隆朝对于民生的支出是整个封建王朝的历史之最。对于不守本分的“刁民”,他则视如仇敌,必欲除之而后快。对于民众自发组织的抗议和上访,乾隆第一反应不是处理贪官恶吏,保护百姓,而是恐惧。因为这种民间的自发组织很容易引起大的骚乱,甚至发展成农民起义,威胁皇权。对于这种民间百姓自发组织起来的抗税抗租行为,他更是严厉打击,决不手软。面对汹汹民情,乾隆全力以赴,高筑坝垒,将其约束在“纲纪”的河道内。另外为了防止民众聚集形成势力,乾隆朝破天荒的开始打击讲学。在中国历史上,民间讲学现象非常普遍。孔子收徒三千,就首开民间讲学之先河,也正式创立了儒家学派。到了宋代,书院大量出现,名儒大家各自以书院为据点,传授自己体悟到的圣人心法,讲学之风空前繁盛,理学由此兴起并成为儒学的主流。及至明朝,讲学之风达于极盛。大儒王阳明极重讲学,认为这是开启智慧、传播学术的最佳方式,故其一生讲学不休,甚至军旅之中也日夜不辍。王阳明的后学们光大乃师之风,或依托于书院,或约期于山水,甚至庙堂林野,寺观名胜,招朋引众,讲学辩论,宗风所及,几乎无处不讲学,无人不讲学。清初统治者反对讲学,主要是怕汉人借此进行阴谋集会。及至乾隆时期,这种威胁几乎已经不存在了。乾隆认为,讲学的最大威胁在于容易滋生朋党倾向。乾隆朝的专制政治发展到了极致,它打破一切民间自发组织的可能,把一切社会能量纳入政治控制之下。在乾隆的严厉打击下,汉人儒者过去讲究自身人格的崇高和自由,原始儒学要求其信徒能在权力面前挺起腰杆,而不做随声附和的应声虫。因此有陶渊明的不为五斗米折腰,有李白的“仰天大笑出门去,我辈岂是蓬蒿人”,有文天祥的“人生自古谁无死,留取丹心照汗青”,也有于谦的“粉身碎骨浑不怕,要留清白在人间”。他们的人格追求,在专制达到极峰的清代就成了君权的障碍。乾隆认为应该由皇帝垄断所有的伟大、光荣、正确,不给其他人留一点荣誉空间。乾隆皇帝所需要的,不是站立着的大写的人,而仅仅是工具和奴才。在乾隆的严厉打击下,清代后期士大夫道德与精神的迅速堕落,乾隆朝的大臣,虽然不乏能臣,却有一个共同的特点,那就是有才华而无思想,有能力而乏操守,除功名利禄外无所关心,他们都是被乾隆打断了脊梁骨。在皇帝明察秋毫的情况下,他们老老实实兢兢业业,以图飞黄腾达,一旦皇帝昏庸,掌控的不严,他们立马化身帝国的硕鼠,大肆贪污,尽一切可能盗窃皇帝的家产。另外为了维护这种不光彩的得位历史,整个清朝前期都盛行文字狱,并且文字狱在乾隆时期达到了高潮。文字狱不光处置了一大批藏有所谓反书得读书人,而且乾隆为了体现文治开始了修书得工程。修书主要有这么几个目的:一是为天下臣民“御制”了一部标准的历史。主要是美化进关后的历史,希望建立一种天下各族都是一家人的概念来强化身为异族统治者的合法性修改一些历史人物的评价,过去像吴三桂这种帮助清兵入关,是清王朝的大恩人,在雍正朝及以前都是正面的典型。但是在乾隆朝为了防止后人有样学样,直接将这种行为定为不忠,并列入《贰臣传》。三是大规模整理中国历史文献,营造博大恢宏的文治气象,以证盛世“文治之极隆”。在修书期间大量查获民间所谓的“反书”,将书送往京城集中销毁,而对于藏书者来说,个人落得个身首异处,家庭成员则为奴为仆。通过大量的抓典型、严惩私藏反书的藏书者,逼迫私人藏书者自查自毁。官方销毁的加上民间自行销毁的书不知道有多少,乾隆朝“文治”的本质,是中国历史上最大的一场文化浩劫。对于书籍的管控只能管理到上层能读书识字的士绅阶层。但是大量民众都是目不识丁的底层农民,如何将官方的意识型态植入最底层人们的心中呢?答案是采用戏曲的方式。清代最有威力的娱乐方式,非戏曲莫属了。作为资深戏迷,皇帝很清楚,不分青红皂白地禁戏是极不明智的作法。“禁”的力量是有限的,甚至有的时候,会导致“逆向消费”。你越禁,老百姓就越想看。官方不给推出“弘扬正气的历史正剧”,民间可能就会流行一些歪“门邪道的野史”。因此乾隆把禁戏的重点,从禁地点、禁规模、禁时间转移到审查、修改、禁止演出的内容。乾隆皇帝抓戏曲,有三方面内容,一是禁,二是改,三是创。禁止的戏目一般是有民族情绪、政治上有违碍,二是才子佳人爱情戏,三是大量水浒戏,四是某些反映宫廷政治斗争的戏,五是有凶杀暴力内容的戏。对于民族情绪的戏很好理解,毕竟清朝是少数名族当政。才子佳人的戏,乾隆认为里面充满了男女调情的情节,其眉来眼去之状,足以让未成年观众萌动不良想法,毒害他们的心灵。禁水浒戏理由更加充分,水浒本是一部宣扬造反有理的“邪书”,宋江等人是以抢劫起家的黑社会组织,而祝家庄等民团则是维护社会秩序的义民,水浒在里面“颠倒黑白”。至于宫廷戏,那个时候的百姓不太懂政治,不懂治国,不懂圣人之道,只知道故事要猎奇,因此会充分发挥想象力,将宫廷内容妖魔化,丑恶化,有损当今天子和高官的形象。乾隆并非禁戏的第一人,但是却是能想到改编戏曲创造新戏曲的第一个统治者。戏改工作按三个对头原则进行:一、思想感情对头,即对清王朝要怀拥护忠爱之情,对少数民族不得存歧视污蔑之处;二、基本情节对头,人物身份和关系应有伦次,扮演应使人信服、不可过分夸张;三、时代气息对头,不可乱用本朝服色,坚决纠正演员在着装、语言以及整体风格方面低俗媚俗现象。虽然乾隆大力扶持戏曲行业,但是乾隆朝的戏曲发展却呈现出一种怪异的走势:既繁荣,又荒芜;既热闹,又单调;既豪华排场,又内容空洞。风暴来临的前夕乾隆朝外表光鲜亮丽,创造了出色的成就。但是骨子里是一个黑暗的盛世,虚弱的盛世,是一个一潭死水没有人气的盛世,封建王朝的人吃人达到的顶峰。专制政治中,皇帝是整个国家的神经中枢,官僚体系的精神状态就是皇帝一个人精神状态的放大。早年的乾隆还算励精图治,政治上还算清明,在这一时期人口剧增达到封建王朝的历史之最。但是万年的乾隆开始沉迷享受,他开始对各种奇珍异宝感兴趣,并要求各地官员进贡。大量的官员借着给皇帝进贡的机会大肆贪赃敛财,盘剥百姓。并且开始上行下效,各地各级官员也刮起了一种贪图享乐,互相攀比的奢侈之风。各级官员不仅要给皇帝进贡,还需要给各个上级进贡,相当于逼着官员盘剥百姓,从民间搜索各种奇珍异宝供上层享乐。而且和珅还发明了议罪银制度,简单来说,官员犯罪可以交一笔罚银以减轻或者不处罚。有这种制度的支持,各级官员开始大肆敛财。历朝历代都存在着大大小小的官员贪腐事件,大部分时候,贪污之所以能被限制在一定范围之内,原因不外有二:一是在儒学价值观有效运转下人格操守的约束;再一个是从上而下的政治高压,也就是说,最高统治者的反腐决心和虎视眈眈的监视。而在乾隆后期,由于对儒者传统价值的破坏导致大大小小的官员都没有了做人的底线,没有了为民请命的使命感。而乾隆本人在后期也沉迷享受,甚至开发了议罪银制度,导致整个法律层间对贪污腐败没有处罚手段。贪腐之风自然如一匹野马肆意奔驰再也控制不住。乾隆朝中后期的贪污有这么几个特点:一是涉案数额从小到大,腐败案件由少到多。二是腐败官员由底层向高层发展,涉案高官越来越多。三是贿赂公行,窝案串案迅速增多,腐败呈集团化、公开化趋势。在这个时期横向对比东西方文明发现,西方国力经过了资产阶级革命,生产力空前发展,而且马上要进入到工业革命了;而乾隆朝时期整个社会由盛转衰,人格被压制,专制制度达到顶峰。各级管理贪污腐败。贪腐政治一个不变的规律是,个人从贪腐中所得的,与给国家造成的损失相比,往往微不足道,国家在经过各级官员的层层盘剥,慢慢的已经开始进入积贫积弱的状态。在乾隆时期,西方曾今为了与中国做生意,曾今来华访问,并亲自见到了乾隆皇帝。他们希望乾隆皇帝能满足他们的以下请求:希望能多开放几个通商口岸,当前只有一个广州希望能公开关税征收标准,并且最好能降低关税。当前只能通过广州十三行,而且洋人卸货需要经过各级官员的层层盘剥希望能有一块地准许商人长期居住并且也能接家人共同居住在英国大使马戛尔尼在来中国之前是一个中国迷,中国过去经过马可波罗的宣传以及欧洲文艺复兴和思想启蒙时被作为模范进行宣传。早期中国在外国人心目中是一个神秘,制度国力等全方面领先西方国家,对大多数西方人来说是伊甸园的存在。但是种种幻想在来华之后破灭。在英国使团来华后看到的是人民衣不蔽体,饥不择食,王权和官宦对民众的压迫达到顶峰。在这里的人只有生存权没有人权,民众见官必须下跪,官员可以随意掠夺家产,一言不合就当众扒光衣服打板子。另外英国人后面也了解到,在中国,所有的富人几乎同时都是权力的所有者。也就是说,中国人的财富积累主要是靠权力来豪夺。中国的专制是超经济的,经济永远屈居于政治之下,也就是说,财富永远受权力的支配,一旦没有权力做靠山,财富也很容易化为乌有。乾隆皇帝在得到英国将来来华时只当一个远邦的一个名为英吉利的小国又来称臣纳贡,而且对西方的奇技淫巧甚是好奇,希望能通过这次朝贡见到新奇的外国玩意。这次的访华,英国使团带来了大量的诸如最新的天体望远镜,天体运行模型,万有引力定律等自然科学的新发现,以此展示他们的大国形象并希望大清王朝能重视他们这个贸易伙伴,准许他们的请求。特别是英国人通过胡可发现的弹性定理利用弹簧发明了新型马车,这种马车比起传统马车来说更为稳当,在崎岖的路面上也不颠簸,也代表了西方科学技术的进步。但是乾隆对洋人带来的这些科学发现毫无兴趣,甚至因为英国使臣不肯下跪而大为恼火,至于那辆马车,皇帝认为在乘坐马车时车夫做前面而皇帝则在后面有失地位。最终乾隆原来打算郑重接待也变成敷衍了事。上面的皇帝是这个心态,那么地下的官员也不打算认真对待。虽然表面上客客气气,但是西方使团提出的几点请求却一点都不答应。最终西方无功而返。在这次访华之后,马戛尔尼对东方的美好幻想完全消失,他们见到的是一个愚昧无知,而且自大的黑暗的东方大国。对自己受骗上当的经历痛心疾首、恼羞成怒的欧洲人从一个极端到另一个极端”。马戛尔尼的出使使欧洲得出了这样的结论:如果不用武力,就无法打开中国的大门。最终在当初访华团队的一个孩子——小斯当东的推动下,英国通过了对华发动鸦片战争的提议。清朝的统治者完全没有重视这次访华,也没有从英国人带来的新奇玩意中意识到此时东西方已经有了巨大差距。英国带来的物品中,那几样最精美,最大的物品被放到圆明园供皇帝欣赏把玩,最终在第二次鸦片战争中又被抢劫一空。当时最高水平的军火还有那驾没法被皇帝看见的马车则被锁进仓库,最终在英军攻破北京城之后被发现,英国人很奇怪中国人为什么放着这么好的武器不用,而一直以自己那笨重过时的火绳枪与他们较量。后记本书虽然完整介绍了乾隆朝的各种历史,后面乾隆又禅让给十五子嘉庆皇帝,乾隆凭借着超高的统治时间、高压的政治统治、完美的禅让,成就了他十全老人的名号。虽然说大清朝的皇帝比起历朝历代,也算是励精图治,很少出现那种荒淫无道的离谱皇帝,但是政治制度,生产力的落后无法通过个人的努力勤政进行弥补。读这段历史时令人唏嘘不已,也让人浮想联翩,如果当初中国不采取闭关锁国的政策,而是开眼看世界,跟随世界的脚步完成思想启蒙、工业革命,那么是不是就没有近代的百年屈辱史,中国是不是也跟当前不太一样。但是历史没有假设,中国就这样在乾隆朝时期错过了世界留给它的最后机会。
2025年12月06日
2 阅读
0 评论
0 点赞
2025-11-03
读《定投十年,财务自由》
这本书是 《指数基金定投指南》的姊妹篇,书中的内容与定投指南差不多,甚至它是定投指南的子集。如果读过定投指南那么就不用读这本书了,如果没读过,那么推荐读《指数基金定投指南》。在选指数基金时有几个要点:秘诀一:基金规模小于1亿元不要选,从某种程度上选择规模在2亿元以上的品种秘诀二:挑选费用较低的基金,指数基金的费用主要是:申购费、赎回费、管理费、托管费。秘诀三:选择追踪误差较小的基金;因为指数基金只是按照指数中的成分股和对应比例进行购买,存在股票的买卖那么就不可能持股比例与指数完全一样,并且指数只是体现股价的,并不能体现股票分红的回报,所以二者之间是有误差的,一般来说指数基金的回报要稍稍高于指数。而在买卖的时候一般在高估的时候卖出,低估的时候买入,至于如何判断判断高估和低估在《指数基金定投指南》中有详细的描述,这里我觉得没必要再写一次。另外如果不太确定某个指数采用哪种估值方式可以参考作者的微信公众号——银行螺丝钉,里面每天会更新各种指数的估值表。总的来说,我之前读过《指数基金定投指南》,后来我想看看这本书对《指数基金定投指南》有没有什么补充的,发现基本没有。读下来有点浪费时间
2025年11月03日
1 阅读
0 评论
0 点赞
2025-11-01
读《史蒂夫乔布斯传》
最初知道乔布斯这个人还是我在上高中的时候,那个时候看新闻说苹果公司的创始人乔布斯因为癌症逝世。从这个时候我知道了苹果,知道了iPhone和iPad。在这段时间内我各个渠道都听到对乔布斯的各种夸赞,使我对这个人有了好奇心,我想知道被所有人成为天才,称之为神的的人到底是个什么样。我在学校对面的书店看到了好多版本的乔布斯传,那个时候也不知道到底哪一个是官方版本,我就找了一个价钱我能接受的。当时买的那本书现在来看就是某个小作坊生产的盗版书,但是书中已经给我描述了一个神一样的乔布斯形象。仿佛他生下来就是要改变这个世界的,特别是他想挖走百事的斯卡利时说的那句“你想要继续卖糖水还是跟我一起改变世界”。但是这次我读的是官方版本或者说乔布斯亲自授权版本。从这本书的开始就可以看到,这本书是乔布斯亲自请求作者为他做传,并且亲自为作者提供了大量的一手资料,这本书不管从真实性还是可读性来说是接近完美的。乔布斯本身是被父母抛弃,由养父母抚养,虽然养父母待他如亲生骨肉甚至待他比亲儿子还亲,但是自从乔布斯知道自己是被亲生父母被抛弃之后心理出现了很大的阴影,甚至后来他的同事都暗戳戳的表示他那难以与人相处的性格可能是因为这件事导致的。乔布斯在很小的时候就是一个叛逆的孩子,他从来不循规蹈矩,与那个时候的美国青年一样,他喜欢嬉皮士、喜欢致幻剂、充满叛逆精神。在上大学的时候养父母斥巨资送他去了里德学院,但是在学校上学不久他以学校的课程他不感兴趣为由退学了,但是他并没有离开学校而是花了大量时间旁听了艺术学和书法课程。这段经历养成了他独特的审美。另外乔布斯也沉迷禅宗,并且为了学习禅宗教义亲自到印度访问各种大师,乔布斯认为比起依赖专业知识的理性思维,他更相信灵机一动的直觉,并且他认为这种直觉是可以由禅宗、冥想而来的。从这一点看苹果的产品确实有很多是乔布斯灵机一动的创意,比起那种方方正正的标准工业品的计算机,苹果的计算机更加灵动,更加活泼,也更加具有人文精神。在他青年时期,美国电子计算机开始发展,他对这一新兴事物充满兴趣,这个时候他认识了另一个史蒂夫——史蒂夫沃兹尼亚克。沃兹是一个真正的黑客,一个充满理想主义的理工男。他们二人最早合作开发了蓝盒子,这是一种利用电信漏洞来免费打电话的工具,从这个时候起,乔布斯的商人特质开始显现,他们通过卖蓝盒子赚了一大笔钱。后来二人合作成立了苹果计算机公司,苹果公司的另一位创始人是马库拉,他对于乔布斯来说就像父亲般的人物,他告诉乔布斯“你永远不该怀着赚钱的目的去创办一家公司。你的目标应该是做出让你自己深信不疑的产品,创办一家生命力很强的公司。”,乔布斯与沃兹尼亚克二人合作开发了首款Apple电脑以及后面大获成功的Apple II电脑。在这个过程中乔布斯的工作模式已经初现端倪。首先乔布斯及其注重细节,这得益于他的父亲从小就教他的“追求完美意味着:即便在别人看不到的地方,对其工业也必须尽心尽力”,苹果的电脑即使在机箱内部小到每一颗螺丝、每一片区域的颜色,哪怕里面的整个电路板都必须做到接近完美。另外也体现了乔布斯的“现实扭曲力场”,乔布斯总能让别人相信他,包括他能说服你完成之前你认为不能完成的事。马库拉也教了乔布斯如何做营销:第一点是共鸣(empathy),就是紧密结合顾客的感受。第二点是专注(focus)。“为了做好我们决定做的事情,我们必须拒绝所有不重要的机会。”。第三点也是同样重要的一点原则,有一个让人困惑的措辞:灌输(impute),如果我们以创新的、专业的方式展示产品,那么优质的形象也就被灌输到顾客的思想中了。”这几点在乔布斯准备发布会、准备产品广告的时候被体现的凌厉尽致,苹果公司一个特别出名的广告就是模仿1984的场景,广告中暗示IBM就是小说中的老大哥,它控制了用户,而苹果则是破局者,苹果打破了老大哥的垄断,用苹果就是标新立异,打破传统。不墨守成规的天才都使用苹果,苹果也为这种天才提供改变世界的趁手的工具。早期的Apple II靠着乔布斯自己的对于细节的打磨以及出圈的广告获得了极大的成功乔布斯在细节的强大控制既造就的Apple II的成功,也间接的导致后续的丽萨电脑和Mac的失败,这两款产品因为乔布斯的过于精益求精导致发布时间一再延迟、成本也随之攀升,最后的销量也不及预期。Mac的研发期间,乔布斯参观了施乐研究所并且在那里见到了颠覆性的技术,GUI图形界面的操作方式,并且也见识到了使用鼠标来控制光标。在此基础之上乔布斯完善了操作逻辑。乔布斯完善了桌面的概念,完成了窗口的拖拽以及重叠的交互逻辑,可以说现代计算机的操作逻辑是从乔布斯那里演变过来的。除此之外Mac还有漂亮的字体和颜色,这得益于乔布斯在里德学院旁听的艺术课和书法课。我想乔布斯当初旁听书法课时并没有想到书法课的内容未来可以用在Mac上,当初他决定旁听书法课也仅仅是因为他喜欢、感兴趣。这对我的启示就是技多不压身,现在感兴趣深入研究的看起来无用的学问将来在某个时刻可能会发挥巨大的作用。后来比尔盖茨在为Mac开发Office套件时发现了这一操作系统大为震惊,并且在此基础上秘密开发了Windows操作系统。为此乔布斯和盖茨打了一些官司但是最终以盖茨继续为苹果电脑开发电子表格程序为条件双发达成了和解。在二人争论的过程中,盖茨打了一个形象的比喻“我们旁边住着一个有钱的邻居——施乐,一天我想去邻居那里偷点东西,当我进去时发现乔布斯已经把邻居的电视抱走了。”。虽然二人的GUI操作系统都是从施乐那里得到的灵感,但是施乐当初只有一个粗糙到完全无法商用的原型并且也不太重视这个项目,可以说是躺在金矿边上要饭。还是乔布斯让这项技术发扬光大。随着Mac和丽萨的失败,以及乔布斯刻薄的性格,苹果的高层动了赶走他的念头,而乔布斯因为无暇管理整个公司所以答应公司找人担任CEO的职责,而他专心管理Mac项目组。随后公司找到百事总裁,约翰斯卡利,希望由他接任苹果CEO。为此乔布斯专门找过他几次,刚开始斯卡利并不了解计算机,也不打算管理科技公司,他只想凭借着百事的大量股票过富足的生活,但是乔布斯的话打动了他“你是想卖一辈子糖水呢,还是想抓住机会来改变世界?”斯卡利与乔布斯也有一段蜜月期,在蜜月期内乔布斯不停的向他展示最新的技术,展示每一个新的点子,斯卡利也为乔布斯这种全身心投入工作创造奇迹的特质所吸引,但是好景不长,因为乔布斯的性格,二人最终分道扬镳,并且斯卡利在最终的斗争中成功的赶走了乔布斯。乔布斯离开苹果之后成立了新公司,新公司专注于制作高性能的工作站,它被取名为NeXT。同样的NeXT因为乔布斯精益求精的特质,以及不计成本的调整最终只有一款面向对象的操作获得了市场的认可。虽然有厂商希望授权使用NeXT的操作系统但是乔布斯不能忍受自己精心打磨的操作系统运行在被他认为是一堆电子垃圾的电脑中,所以授权的事也就作罢。 乔布斯在NeXT失败之后,看重了计算机图形技术,并且为此收购了卢卡斯电影的计算机部门并且成立了皮克斯,早期的皮克斯并没有打算制作动画,乔布斯打算做一款能够进行3D渲染的软件进行售卖并且希望利用一段电脑制作的动画短片来展示他的软件和电脑。但是公司制作的一款动画短片(也就是现在皮克斯电影开头的顽皮台灯)使乔布斯看到了计算机图形与艺术结合的可能。为此他与迪士尼合作开发了《玩具总动员》。早期的玩具总动员由迪士尼负责牵头,产出了好几版剧本但是乔布斯都不满意,主要是主角的性格令人讨厌,无法引起观众的共鸣。乔布斯多次更改主角人设最终两家差点闹掰,迪士尼早期投入的资金不够用了,被迫勒令停止了玩具总动员的制作,为了继续动画的制作乔布斯只得掏腰包完成了电影的制作。最终《玩具总动员》大火。而皮克斯也因为电影的大火而成功上市。苹果公司随着乔布斯的离开也一蹶不振,股价连续下跌,股东终于忍不了斯卡利的无能,慢慢的开始想把乔布斯请回来担任CEO。对此乔布斯因为皮克斯的成功也不太想要离开。最终随着一系列的谈判双方达成共识,苹果公司重组董事会由乔布斯挑选董事会成员,乔布斯只担任临时CEO,或者说顾问,乔布斯将它称之为iCEO。并且在担任苹果公司iCEO的同时也继续着皮克斯的事务。乔布斯回归苹果之后的第一件事就是砍掉了不重要的产品线,仅保留少数他认可的,紧接着就是裁员,将他认为是笨蛋的开出仅留下他认可的天才。每年,乔布斯都会带着他最有价值的员工进行一次“百杰”外出集思会。在每一次秘密会议结束时,乔布斯会站在一块白板前,问大家“我们下一步应该做的10件事情是什么?”。他将大家讨论的答案写在白板上,但是他最后其他7件全部画掉,然后宣布:“我们只能做前三件。”,乔布斯用这种办法保留了苹果的专注力,只做最应该做的事。在此期间,乔布斯将苹果电脑作为电子中枢围绕着苹果电脑开发了音乐制作,视频制作软件。他整合各种数字设备,包括音乐播放器、录像机,以及相机。你可以用计算机连接并同步所有这些设备,它也可以管理你的音乐、图片、视频、信息,以及乔布斯称为“数字生活方式”中包含的方方面面。不久之后乔布斯认为数字音乐将是未来的大趋势,人们可以使用计算机制作、保存属于自己的音乐,为此开发了iTunes。这是一款可以制作音乐并且可以将制作的音乐刻录到CD上的软件,这样苹果电脑就集制作、刻录、播放音乐与一体。但是带着这么大一个电脑听音乐属实有点不妥,而且日本在此时兴起随身听。乔布斯意识到可以做一个简便的音乐播放工具,iPod项目就此诞生了。iPod 同样体现了乔布斯的设计审美以及大胆的创意,他通过自己的“显示扭曲力场”将iPod做的体积特别小但是有巨大的容量,号称可以随心携带3000首歌曲。并且取消了下一首、上一首的按钮,首创随机歌单的功能。与其让用户准备歌单顺序,随机歌单更能给用户带来惊喜。为了解决盗版问题,乔布斯设计了iTunes音乐商店,并且为苹果电脑和iPod之间开通了同步音乐的通道,但是只允许电脑到iPod 的单向通道。乔布斯认为人们使用盗版不一定是因为道德感的缺失,而是正版下载渠道做的没有盗版方便。随着iTunes的推出,用户可以每首歌仅花费0.99美元就可以拥有高品质的音乐,再也不用满世界找带有杂音或者音质不纯的盗版了。iPod最终大火,甚至连美国总统都有一台。乔布斯通过iPod重新定义了数字时代的音乐市场。并且iPod也成功带动了苹果电脑的销量。乔布斯并没有趁着iPod的爆火继续推出iPod各个系列,而是通过手写屏幕再一次看到了未来。乔布斯利用最新的触摸屏技术打造出了一款能浏览照片、听音乐、看视频、打电话的机器——iPhone。iPhone相当于革了iPod的命,乔布斯认为好的公司应该以创造革命性的产品为己任,各个部门之间不应该有利益冲突而是大家团结协作。烂公司会因为各种利益关系而内部纷争不止。就像iPhone代替iPod一样,虽然iPhone会影响iPod的销量但是大家都明白iPhone又是一次颠覆,各个部门都会为了一个共同的目标而前进。在推出iPhone之后,乔布斯又推出了iPad,并且为iPad联系了多家出版社完成了图书的电子化,人们可以在iPad上看书。至此乔布斯又打造了一款封神的产品,二十几岁,他就改变了个人电脑,现在,他将同样改变音乐播放器、唱片产业的商业模式、移动电话、应用软件、平板电脑、书籍,以及新闻业。为了将这些数据管理起来,乔布斯敏锐的意识到了数据的重要性,为此他推出了iCloud云服务,苹果的用户可以通过唯一的apple id将各种设备的数据进行同步管理,iPhone上保存的图片、书籍、音乐等数据可以无缝的在ipad、mac上查看。乔布斯不光能创造产品,对于产品的营销也是专家,他在回归苹果之后开始建立线下的直营体验店,在装修体验店时他坚持将店面放到人流充足的繁荣区,并且站在顾客的角度聘用专业的销售人员耐心的为顾客介绍产品。在建立线下体验店时,乔布斯与他手下的约翰逊一起参与设计装修,在最终要装修完成时候,在深夜约翰逊被一个恐怖的念头惊醒:他们犯了一些根本性的错误。他们围绕着苹果的主要产品线把商店分成若干个区域:有Power Mac、iMac、iBook和PowerBook。但是乔布斯开始发展出一个新的概念:使计算机成为你所有数字生活的中枢。换句话说,你的计算机能够处理相机里的视频和照片,或许有一天也能用作音乐播放器来听歌,或者阅读书和杂志。黎明时分,约翰逊计上心头:商店内部不能只按照公司的四款计算机产品线进行划分,还应该考虑到顾客想做什么。他说:“比如,我想可以有一个‘电影区’,在那里我们可以用几台Mac电脑和PowerBook,运行iMovie软件,向顾客展示怎么从摄像机中导入文件并编辑。”,乔布斯在第二天得到这个想法的时候爆发了“你知道这个变化有多大吗?”他嚷道,“我他妈为这个商店玩命干了6个月,你今天才告诉我全部都要改。”然后他突然安静下来:“我累了,我不知道还能不能从零开始设计一间商店。”。但是随后乔布斯按照约翰逊的想法重新改造了线下零售店。他说:“如果你发现有些事做得不对,你不能只是忽略它,然后说‘以后再处理’,这是其他公司的做法。”。最终线下体验店爆火,正是这种精益求精的精神成就了苹果,成就了乔布斯的神话。乔布斯似乎总是走在时代前列,想用户之所想,创造用户真正需要的东西。苹果的东西总是 “诗意与工程紧密相连,艺术、创意和科技完美结合,设计风格既醒目又简洁”。乔布斯虽然早早的因为癌症离开人世,但是他给苹果留下了丰厚的遗产。他说“我的激情所在是打造一家可以传世的公司,这家公司里的人动力十足地创造伟大的产品,其他一切都是第二位的。当然,能赚钱很棒,因为那样你才能够制造伟大的产品。但是动力来自产品,而不是利润”。在乔布斯时代,苹果的产品似乎永远领先市场一步。乔布斯认为“我们的责任是提前一步搞清楚他们将来想要什么”,而不是给用户现在想要的。我记得亨利·福特曾说过,“如果我最初问消费者他们想要什么,他们应该是会告诉我,‘要一匹更快的马!”。人们不知道想要什么,直到你把它摆在他们面前。正因如此,乔布斯似乎从不依靠市场研究。他的任务是读懂还没落到纸面上的东西。乔布斯离开这么些年,苹果目前在电子产品领域虽然仍然占据大头,但是我个人感觉已经没有往日那种发布产品给人的震撼了。现在给我的感觉是iPhone出了使用iOS系统和iCloud以外,它的外观、配置已经跟安卓机没什么区别了。我了解苹果、认识乔布斯比较晚,但是我想如何他还在世,还能继续掌握苹果,我可能会见识到更加先进、更加吃惊、更加炫酷的产品。
2025年11月01日
4 阅读
0 评论
0 点赞
2025-10-12
Emacs折腾日记(三十二)——org mode的基本美化
在上一篇,已经介绍了org mode的基础知识,它与markdown非常相似,并且也十分容易上手,但是它的可扩展性比markdown要强很多。如果将来打算重度使用org mode,那么此时可以对它进行一些基本的配置和美化基本配置org mode 的配置可以通过Emacs自带的org 包来进行管理,可以配置一些标签显示的图形以及一些特殊语句块的高亮(use-package org :ensure nil :mode ("\\.org\\'" . org-mode) :hook ((org-mode . visual-line-mode) (org-mode . my/org-prettify-symbols)) :commands (org-find-exact-headline-in-buffer org-set-tags) :custom-face ;; 设置org mode标题以及美级标题行的大小 (org-document-title ((t (:height 1.75 :weight bold)))) (org-level-1 ((t (:height 1.4 :weight bold)))) (org-level-2 ((t (:height 1.35 :weight bold)))) (org-level-3 ((t (:height 1.3 :weight bold)))) (org-level-4 ((t (:height 1.25 :weight bold)))) (org-level-5 ((t (:height 1.2 :weight bold)))) (org-level-6 ((t (:height 1.15 :weight bold)))) (org-level-7 ((t (:height 1.1 :weight bold)))) (org-level-8 ((t (:height 1.05 :weight bold)))) (org-level-9 ((t (:height 1.0 :weight bold)))) ;; 设置代码块用上下边线包裹 (org-block-begin-line ((t (:underline t :background unspecified)))) (org-block-end-line ((t (:overline t :underline nil :background unspecified)))) :config ;; 设置org mode中某些标签的显示字符 (defun my/org-prettify-symbols() (setq prettify-symbols-alist '(("[ ]" . 9744) ;; ☐ ("[x]" . 9745) ;; ☑ ("[-]" . 8863) ;; ⊟ ("#+begin_src" . 9998) ;; ✎ ("#+end_src" . 9633) ;; □ ("#+results:" . 9776) ;; ☰ ("#+attr_latex:" . "🄛") ("#+attr_html:" . "🄗") ("#+attr_org:" . "🄞") ("#+name:" . "🄝") ("#+caption:" . "🄒") ("#+date:" . 128197) ;; 📅 ("#+author:" . 128100) ;; 💁 ("#+setupfile:" . 128221) ;;📝 ("#+email:" . 128231) ;;📧 ("#+startup" . 10034) ;; ✲ ("#+options:" . 9965) ;; ⛭ ("#+title:" . 10162) ;; ➲ ("#+subtitle:" . 11146) ;; ⮊ ("#+downloaded" . 8650) ;; ⇊ ("#+language:" . 128441) ;;🖹 ("#+begin_quote" . 187) ;; » ("#+end_quote" . 171) ;; « ("#+begin_results" . 8943) ;; ⋯ ("#+end_results" . 8943) ;; ⋯ )) (setq prettify-symbols-unprettify-at-point t) (prettify-symbols-mode 1)) :custom (org-fontify-whole-heading-line t) ;; 设置折叠符号 (org-ellipsis " ▾") ) 上述配置比较简单,核心部分就是我们使用 prettify-symbols-alist 来使将这些特定的 property 字符串替换成更加美观的图标。它是一个列表,列表种的每个子元素又是一个cell,用cell的两个元素来表示替换关系。配置之后,一个org文件大致的效果如下:org-modern 美化为了使文档的显示效果更好,我们需要依靠一个名为 org-modern 的插件,它是一个为Emacs Org模式提供现代化视觉美化的项目,它通过精心设计的样式和布局,能够显著的提升Org文档的可读性和美观度。我们可以使用 use-package 直接安装(use-package org-modern :ensure t :hook (after-init . (lambda () (setq org-modern-hide-stars 'leading) (global-org-modern-mode t))) :config ;; 定义各级标题行字符 (setq org-modern-star ["◉" "○" "✸" "✳" "◈" "◇" "✿" "❀" "✜"]) (setq-default line-spacing 0.1) (setq org-modern-label-border 1) (setq org-modern-table-vectical 2) (setq org-modern-table-horizontal 0) ;; 复选框美化 (setq org-modern-checkbox '((?X . #("▢✓" 0 2 (composition ((2))))) (?- . #("▢–" 0 2 (composition ((2))))) (?\s . #("▢" 0 1 (composition ((1))))))) ;; 列表符号美化 (setq org-modern-list '((?- . "•") (?+ . "◦") (?* . "▹"))) ;; 代码块左边加上一条竖边线 (setq org-modern-block-fringe t) ;; 属性标签使用上述定义的符号,不由 org-modern 定义 (setq org-modern-block-name nil) (setq org-modern-keyword nil) )现在org 文档显示的就更加漂亮了到此我们对org-mode 显示的效果进行了初步的美化,现在的文档看起来比原始的要好看多了,用org来编写文档至少也显得赏心悦目了。
2025年10月12日
6 阅读
0 评论
0 点赞
2025-10-08
读《哈利布朗永久投资组合》
作为一个普通的尝试投资的新手,我希望不用择时买入或者卖出、不用预测经济的走势,也不用看公司财报,搜集公司信息,不用尝试理解企业经营也能做到跑赢通胀?有没有一种投资方式对投资者没有什么要求只要按计划执行就可以获得不错的收益,跑赢通胀呢?还真有这种方式,这就是哈利布朗上世纪提出的永久投资组合。这部书详细介绍了永久投资组合的逻辑以及各种资产是如何应对不同的经济状况,更好的是书中也提供了具体的实践方式甚至推荐了一些投资品种,这对于想实践永久投资组合的新手小白来说是一本即介绍理论,又给出实际操作的好书永久投资组合好就好在一不用择时、二不用预测未来、三对于任何经济状况都有对应的资产来获取收益。理论简介永久投资组合简单来说就是将资产分为:25%的现金、25%的黄金、25%的债券和25%的股票。它们是怎么有机的组合以达到在各个经济状况下都能有收益呢?哈利布朗认为经济状况可以分为:繁荣期、衰退期、通货膨胀和通货紧缩这几个时期。在经济的各个时期,总有资产会上涨或者下跌,也就是我们常说的东边不亮西边亮。在各种经济状况下利好的资产如下表所示经济状况利好资产繁荣期股票+债券衰退期现金通货膨胀黄金通货紧缩现金+债券开始时按照每种25%的比例买入各种资产,随着时间的推移各种资产的涨跌幅度不同最终会偏离这个比例,当我们进行再平衡时就是在卖出高估的品种,买入低估品种,最终随着时间的推移,经济在这四种情况下不断的循环,我们也间接的不断低买高卖,最终获得不错的收益根据回测美国市场,永久投资组合在过去的40年间获得了年均9%以上的收益,书中没有提到最大回撤多少,但是比各种单一资产的回撤要低得多。购买各种资产股票对于股票来说,因为永久投资组合不对未来做预测仅仅期望获取股票市场的平均收益,那么投资股票市场就是买入能代表整个股市的指数基金。对于美国市场来说,可以购买纳斯达克指数或者标普500指数。对于国内的投资者我认为可以购买沪深300或者中证500指数。是否要购买能代表其他国家股市的指数基金呢?作者认为美国股票市场包括那些约占世界经济产值一半的公司,也就是说全球最赚钱的公司都在美国股市,所以永久投资组合不必要关注美国以外的指数。最为国内的投资者也可以考虑把国内的指数基金换成纳斯达克100指数和标普500指数。如果实在是怕美股崩盘了想要投资一下其他国家的股市可以考虑其他国家的股票指数占整个投资组合的5%~10%债券对于债券来说,作者只推荐美国的20~30年长期债券。可以在银行柜台直接买入长期国债或者直接投资于购买了长期国债的指数基金。需要注意的是,如果自己直接购买债券的话当某个债券的品种到期时间小于20年话要卖掉小于20年的债券然后再次购买25~30年到期的债券。以下是上述过程的步骤:(1)购买25~30年期的美国长期国债;(2)持有债券,直到它有20年的到期时间(意思是它在你的账户中会支付给你5~10年的利息);(3)卖出20年期债券,并在必要的时候利用该收益购买新的25~30年期债券;(4)适当地重复这一过程,以维持你的资产配置。如果购买的是拥有长期债券的指数基金,这个步骤通常由基金经理来帮你完成。作为个人投资者在国内银行柜台最长只能买到7到10年期的国债,甚至有时候还抢不到。30年期国债因为主要不是为个人投资者发行的,所以基本抢不到。而在证券交易所直接购买30年期国债会有资金要求。而场外的基金我只能找到7~10年国开债。所以如果想要实践关于持有30年期国债的投资我觉得可以考虑30年期国债指数的ETF黄金对于黄金,作者推荐直接购买实物黄金,并且推荐在全球各个国家和商业银行购买实物黄金并且分散保存到各个银行的保险柜中,用于分散风险。作者不推荐纸黄金这种基金或者合约。作为国内的投资者我们可以去银行柜台买入黄金并存储到银行的保险柜中。永久投资组合需要抵御各种风险,包括经济、政治等等因素所以对于黄金这种贵金属来说比较严谨和讲究安全,在国内来说其实我们无法实践这种方式,更多的还是购买黄金etf或者相关的基金现金现金这里指的不是真实拿在手上的纸币,而是买入一些方便变现的资产,例如活期存款、货币基金、国债逆回购。再平衡再平衡是重要的操作,是间接的实现低买高卖的一种方式。书中作者根据回测数据得出结论:根据阈值触发再平衡策略是收益最高的做法。并且在这种方式下操作频率为每2~3年一次。我们提前给每种资产设置一个涨幅的阈值,只要达到这个值就触发一次再平衡。例如书中推荐只要某一个资产通过上涨价值占比达到35%或者因为下跌占比达到15%就触发一次再平衡。一些实操的问题书中也考虑到实际操作种的一些小问题。通过回答这些问题可以更方便我们理解和操作:资金是一次买入还是分批买入?作者认为等待是预测市场时机的一种委婉的说法,于永久投资组合不做预测只做应对的理念相悖。并且在长期持有的过程中,短暂的定投摊平成本的方式可能节约的成本可以忽略不记反而因为多次操作而损失手续费。并且如果预测错误反而会错失投资机会投资股票市场获得的股息如何操作一般的投资建议是股息复投收获更多的股票份额,但是永久投资组合不建议这么做,因为有可能股票当前处于高位,这样做会被迫追高;更好的做法是将股息放入现金部分,当现金部分超过35%,触发再平衡时再来进行操作新增资金怎么办?普通的投资者一般有一个稳定的工作,他们会将收入的一部分拿来进行投资,实行定投。对于这部分资金永久投资组合建议先放入现金部分,如果现金部分超过了25%,再投资买入其中表现最差的品种如何再平衡?触发了再平衡之后如何操作呢?书中给出几条原则:尽量用现金来补充完成再平衡尽量将资金投资到目前表现最差的品种当需要卖出的时候,优先卖出持有时间最长、收益最好的品种书中还提供了各种不同国家版本的永久投资组合,但是遗憾的是作者没有提供中国大陆的投资方式。书中一些笔记划线安全、稳定和简单。他强调,永久投资组合应该能够保护你,使你能自如地应对所有的经济前景,并保证获得稳定的回报,它还很容易实现大道至简,好的投资方式一定是安全稳定并且很容易复刻的真正的现实世界总是不可预期、不可知且出人意料的。它假定没有人可以预期未来,而且你的主要目标应该是用全天候的投资策略来保护你一生的财富永久投资的主旨就是不做预测只做应对如果你对于某项投资具有怀疑,或者是对于某种做法很是紧张时,尽可能采取最保守的做法就是把回测当作一个工具来证明和反驳一个策略,而不是机械地把过去的市场业绩投射到未来的市场中去投资者应该建立分散化投资组合的想法,立足点在于把资金投入到不同的资产中,这样就没有哪个单一灾难性事件可以对整个投资组合造成巨大损失真正的分散应该是分散投资与那些非正相关,甚至是负相关的资产未来永远都是未知数,而投资者却需要建立一个投资策略来加以应对。重要的是投资者应该完全理解,没有哪个经济学者、投资系统或者专家可以告诉你市场的下一步动态是什么。这点领悟形成了投资策略的基础在实施永久投资组合时,遵循基本策略比完美地执行更重要再好的策略也需要完善的执行现实是永久投资组合是设计用来在不腐败的经济体中发挥作用的挑选能真正给投资者带来实惠的投资市场很重要
2025年10月08日
6 阅读
0 评论
0 点赞
2025-09-28
读《巴菲特致股东的信》
之前看段永平问答录的时候他推荐看投资的书就看巴菲特写的东西,而这本《巴菲特致股东的信》是巴菲特每年写给伯克希尔股东信件的一个汇总,它按照一定的主题进行了汇编,包括了巴菲特对公司、管理、投资、以及一些政策的看法和意见。这部书关于美国投资税和会计方面的东西我没太看懂,我重点关注了巴菲特对于公司管理层和投资方面的内容,下面截取一些精彩的观点列举出来, 有的我会给出我自己的理解以及批注坚持与合适的人、合适的企业打交道,与人为善、良性互动、相濡以沫、相互尊重、相得益彰、交相辉映,这是巴菲特多年一直保持成功的关键在伯克希尔公司,我们通常会换位思考,设想如果我们自己处于股东的位置,应该得到什么样的信息,我们会从这样的角度向股东披露完整的报告看公司年报也是这样,看看公司是否愿意把投资者关心的内容毫无保留的披露出来;如果公司年报上遮遮掩掩,甚至有造假嫌疑就应该坚决排除芒格格和我都认为,CEO们预测公司增长速度,是骗人的和危险的。当然,他们是被分析师和公司自己的投资者关系部门怂恿裹挟着这么做。但他们应该拒绝,因为这样预测多了会招致麻烦。因为未来不可预测,过去的业界不代表未来。有时候过于关注所谓的预测反而会导致管理层为了实现预测目标开始不择手段,甚至造假。只要是好的生意就不愁未来没有业绩给投资者三个建议: 第一,小心那些展示弱会计的公司。如果一个公司没有费用选项,或养老金假设如天马行空,对于这样的公司要小心。当公司管理层在公开的方面使用低下的手段,那么他们在背后可能采用同样的手法。厨房里如果有蟑螂,绝不可能只有一只;第二,不知所云的注脚往往意味着靠不住的管理层。如果你看不懂财务报告中的某个注释或其他管理解释,这通常是因为CEO们不想让你明白;第三,对于那些大肆鼓吹盈利成长预测的公司保持警惕董事会的三种形式:第一种情形最为常见,董事会里没有控股股东。在这种情况下,我认为董事们的行为应该像那些缺席的股东一样,想方设法着眼于公司的长期利益;第二种情形存在于伯克希尔公司中,在这里,控股股东同时也是公司高管;第三种公司治理的情形发生在控股股东没有参与公司管理的情况下董事会是由股东选出来为股东利益负责拥有实际权力的机构;而管理层是由董事会选择来具体实行管理权力的。股票早期就是用来投资探险船的。按照这个理解,股东是直接投资探险船的,最终会分的获取的宝藏,而船上的船长应该是由股东选择出来来指定航向的。管理层则是执行的水手。第一种、第二种情况下股东参与公司的日常管理为了自己的利益而指定公司政策,肯定会以股东利益为优先。而第三种股东脱离与公司管理之外,有可能会造成管理层只顾自己利益而不顾股东;这给我的启示是在分析公司时需要考虑公司的管理层是否长期持有本公司的股票;是否发生过高管大量减持股票的情况芒格非常喜欢本·富兰克林的一句话:“一盎司的预防,胜过一磅的治愈。”但是,有时候,无论多少的治愈也无法弥补犯过的错误我们着眼于公司的经济前景,负责管理的人,我们支付的价格。我们心中没有想过什么时间和以什么价格去出售就是所谓的好的生意模式、好的管理、好的价格;有这三个因素在,买入之后长期持有,只要这三个方面不变就一直持有,而不在乎当前的股价;或者说买入卖出的决定因素一定不是股价的涨跌一个投资者如果想成功,必须将两种能力结合在一起,一是判断优秀企业的能力,一是将自己的思维和行为与市场中弥漫的极易传染的情绪隔离开来的能力在自己的能力圈投资,能力圈就是能看懂的生意。并且在投资时应该忽略短期市场的涨跌,买股票买的是公司不是股票本身的涨跌甚至也有时候,我们会以平价或低于价值的价格卖出一些持有的股票,因为,我们需要资金抓住低估更多的投资机会,或买入我们认为更为了解的股票好公司、好管理、好价格;这三个条件是相对的,卖出的理由可以是当前不满足这三个条件,也可以是有更好的投资机会。我们非常愿意持有任何股票,持有的期限是永远,只要公司的资产回报前景令人满意,管理层能力优秀且为人诚实,以及市场没有高估股市是一个不断重新定位的地方,在这里,钱会从活跃者手中流向耐心者手中。我们专注于寻找那些可以跨越的1英尺[插图]跨栏,而不是我们具有了跨越7英尺跨栏的能力。认清自己的能力圈比自己拥有多大的能力圈更重要。投资可以等待自己能力圈中的机会出现,一旦出现就要下重注。一生中这样的机会很多,重要的是机会来临时有本钱参与恐惧和贪婪,这是资本市场上时不时会爆发的两种具有超级传染性的病症,而且它们会一直存在;我们的目标很简单:在别人贪婪的时候恐惧,在别人恐惧的时候贪婪这里并不是说与大众相反的心态就是对的,而是说在能力圈范围内,在自己能承受损失的范围内贪婪投资者的整体回报,随着交易频率的上升而减少。这里巴菲特说,股票买卖是一个投资者卖给另一个投资者,交易时也是一个投资出钱,另一个投资者收钱。如果将拥有这家公司股票的所有投资者看作一个整体或者说看作一个家族的成员,那么随着交易的进行在这个家族中的整体财富并没有提升,因为交易之间付出的金钱都在家族内部流转,反而会因为频繁交易产生费用从而吞噬家族财富。对于拥有这家公司股票的这个家族来说最好的办法就是停止交易并安心拿公司回馈给股东的收益公司留存的每一美元,要为股东创造至少一美元市值这里谈的是分红;巴菲特认为分红与否也是一个机会成本的问题,是将利润分红产生的收益更大还是将利润用于再投资产生的收益更大;对于高速成长的公司来说再投资产生的收益更大,但是对于那些市场规模稳定,不需要进行大量再投资的公司而言给股东分红比随意扩张,乱花钱要好相比一家掌握在自私自利的管理层手中的公司,投资者应该给那些被证明关心股东利益的管理层手中的公司出更高的价如何回馈股东,一般是股息分红或者回购公司股票,也可以进行再投资。它们是一个机会成本的问题,应该优先选择那种能最大限度利用公司利润的方式。芒格和我认为回购的发生应该满足两个条件:首先,一家公司有充足的现金以备运营和流动性之需;其次,股价远低于保守计算的内在价值对于这种情况,巴菲特举了一个反例。有些公司选择在公司股价超过内在价值时回购,甚至不惜借钱回购,然后用回购的股票给公司管理层发放股票期权,这种行为严重损害了股东利益,相当于从股东钱包里面拿钱。所以对于回购股票的行为我们应该辩证的看,不是所有回购股票的都是好公司如果一些事情不值得做,也就不值得做好。这里巴菲特做了一个很形象的比喻,对于有些热衷于在垃圾股中淘金的投资者来说,就像在癞蛤蟆堆里寻找王子,可能稳了一堆癞蛤蟆也没有一个王子,找靠谱王子最好的方式还是在王子堆里找内在价值的定义也很简单:一个公司的内在价值是其存续期间所产生现金流的折现值。警惕那些油嘴滑舌,往你脑子里灌输幻象的顾问们,他们同时在往自己的口袋里装佣金。
2025年09月28日
6 阅读
0 评论
0 点赞
2025-09-25
Emacs折腾日记(三十一)——org mode入门
之前我介绍了Emacs相关配置以及对应的知识,主要包括:vim模式、编辑的优化、补全、代码跳转、调试等等,旨在将它打造成另一个vscode、也许是我技术能力有限,不仅在使用体验上赶不上vscode,在配置的简便化以及开箱即用的程度上都比不上。如果是使用Emacs仅仅因为它复杂一般人不那么容易学会,那么就有点装x的嫌疑了。我使用Emacs的原因主要有三点:高度自由、elisp语言的魅力以及org mode。可以说没有org mode我可能不会考虑Emacs。我认为 org mode是Emacs的灵魂也是目前市面上没有任何一款软件能替代的。什么是org mode、它与markdown相比有什么优势呢?本文将对org mode做一个入门的介绍什么是org mode实际上 Org mode 是一种轻量级标记语言,它与markdown、RST类似,但是功能上要比它们强得多,不仅可以用来完成日常的文章编写,还可以进行任务管理、项目规划、笔记收集整理等各种操作。并且配合elisp编程可以千变万化。作为一门标记语言org mode实际是十分容易的,它保存的文档以 .org 作为扩展名基本使用大纲大纲可以理解为多级的标题,了解markdown的肯定知道这个意思。一个 * 代表一级大纲,两个代表二级大纲,然后依次类推。对于大纲我们可以手动输入 *,可以使用Emacs提供的快捷键快捷键功能备注在后面创建一个与光标所在位置同级的大纲如果没有大纲则默认创建一个新的一级大纲M-降低当前大纲的等级 M-升高当前大纲的等级 M-将当前大纲及其内容整体向上移动 M-将当前大纲以及内容整体向下移动 大纲这部分有点像思维导图,我们可以将某些知识点以这种大纲的形式组织起来。有些思维导图软件可以点击某个模块将它的子模块隐藏起来,与这类似的,org mode也可以在大纲上按tab键来显示或者隐藏大纲底下的内容。我们可以定义和切换整个org 文档的大纲显示样式,它主要有三种Folded: 对于当前的大纲只显示大纲本身不显示其子大纲以及内容children: 只显示当前大纲的子大纲,不显示更下一级的内容subtree: 完全展开整个大纲代码块代码块放在 #+BEGIN_SRC 和 #+END_SRC 之间,在Emacs中有一个快捷键 <s <TAB> 来快速输入这个标识. 另外也可以在 后面接上 语言类型,例如下面是一段对应的c++代码#+BEGIN_SRC c++ int main(int argc, char* argv[]) { return 0; } #+END_SRC当我们进入到代码块中编写代码时它会开启对应语言的major mode,前面我们配置了c++ lsp 补全相关的内容也可以在编辑代码块时使用超链接超链接我们可以采用 [[<link url>][<text>]] 的语法,例如 [[https://www.baidu.com][百度一下,你就知道]]图片本地图片可以使用 file:/path/to/image.png 的形式来写上本地图片的位置,然后开启 iimage-mode 显示图片字体样式字体样式主要有:粗体:我们可以使用 ** 来包裹文字以便显示为粗体斜体: 可以使用 // 来包裹文字显示斜体下划线: 可以使用 一前一后两个 _ _来包裹文字将它显示为带下划线的样式删除线: 可以使用 + 前后包裹来显示为删除线其实org mode 与markdown一样都非常简单,日常写博客或者写文档的话,我觉得这些基本知识差不多就够用了。
2025年09月25日
6 阅读
0 评论
0 点赞
2025-09-21
读《段永平投资问答录》
这本书是段永平在各种公共场合回答网友的关于投资问题的一个汇总,里面包含了段永平关于投资方方面面的知识,下面是本书中我觉得书中比较有价值的部分买股票就是买公司、就是买公司未来现金流的折现大多数人认为买股票就是买未来的涨跌,低价买入高价卖出,因此出现了许多所谓的技术流派,这部分投资者热衷于分析k线图,分析市场行情,分析热点信息,试图预测市场未来的涨跌;而这里段永平却认为买公司股票赚的是未来企业盈利的钱,是否买一家公司的股票要看你是否原因成为公司合伙人,是否愿意买下一整个公司,假设在未来公司的股票无法再进行买卖是否还愿意持有。折现率实际上是相对于投资人的机会成本而言的。最低的机会成本就是无风险回报率,比如美国国债的利率钱在每个时间段都有不同的价值,现在的100元与未来的100元价值是不一样的。假设银行定期存款利率为2%,那么现在的100在1年后可能只值98元左右,因为用现在的98元存银行就可以在1年以后获取100元。也就是说资金是有时间成本的。所谓未来的折现就是使用一个折现率来计算未来公司现金流折现到现在大概值多少钱然后判断是否需要投资。所谓的折现率每个人用的算法都不一样,可以使用无风险利率也就是国债、可以使用通胀率、或者使用待投资公司所在行业的平均回报率。做对的事情在实际中往往就变成不对的事情不要做。我对做对的事情的看法是:发现错了马上改,不管多大的代价都是最小的代价这句话的本意是,对的事情就是买股票就是买公司、就是买公司未来现金流的折现;而不对的事就是看涨跌,关注价格。但是映射到做人和做事上也可以有不一样的理解。与其考虑把事做对,幻想着找到一件能成功的事去做,不如先常识不做某事。例如不撒谎、不沉迷享乐。可以给自己准备一个 do not list 的清单,时刻提醒自己不做清单上的事,相信时间的力量。如果长期不做不对的事,那么时间的复利会带给巨大的奖励巴菲特说知道自己能力圈有多大比能力圈有多大要重要的多。在这句话前面书中说,看不懂的不买、管理层不诚实的不买、价格贵的离谱的不买。能力圈也就是自己能不能真正看懂这家公司。虽然道理看起来很简单,但是实际上很多时候我们是不知道自己不知道,一旦问题超过我们的预期或者我们无力改变,这个时候我们才知道自己原来并不知道所以在做对的事情过程当中所犯的错误和因为做错的事情而带来的结果要严格区分开来这句话的本意是说,即使买的股票涨了,也要区分是靠追涨杀跌,靠K线、关注股价得来的还是靠买优质公司自身迎来的。如果不是走在买股票就是买公司、就是买公司未来现金流折现这条正确的道路上,那么未来肯定也会因为做错误的事亏掉当初赚的钱在自己懂的东西上投资最重要的就是能看到风险在哪结合前面说的能力圈的概念,自己懂就是知道自己这笔投资赚钱在哪,有可能亏在哪。结合机会与损失来确定是否值得投资。在下注投资的那一刻起未来发生的一切不说都在预料之内,未来短期的损失在自己的承受范围。一个是“做对的事情”,就是去找好公司,关注公司长远的未来;另一个是“如何把事情做对”,就是如何找到好公司,如何看到公司的未来。好业务、好管理、好价格好公司就是这三样;好业务就是这个公司现在赚钱、未来不管发生什么重大事件也不影响它赚钱、而且它赚钱的方式方法别的公司还学不来;好的管理层就是为公司股东利益考虑、诚实守信;好价格结合上面说的“在自己懂的东西上投资最重要的就是能看到风险在哪”,即使发生风险也能将损失降低到可控范围之内。在自己估值逻辑计算的价格之下。我觉得看财报最重要的就是剔除不想投的公司,不赚钱的生意多少营业额都是没用的这与我之前看的关于公司财报的书吻合、财报是用来排除企业的。看财报最重要的就是了解当前公司是否赚钱、而未来是否赚钱、是否有其他公司和重大事件能影响该公司赚钱这个需要长期的考察,靠自己对公司的了解,也就是懂公司未来现金流的意思是扣除了再投资以后的现金增加量。长期来讲未来现金流是最说明问题的有一类重资产公司,虽然每年能赚不少钱,但是需要大量投入、实际可用于分配的资金没多少。这类公司不合适投资,它们属于那种轻微的风险就能影响未来赚钱的公司“净资产收益率”是个很好的指标,可以用来排除那些你不喜欢的公司,但不能作为“核心指标”去决定你是否要投的公司。这个指标如果好的话,你首先要看的是债务;如果没有债务问题则马上要看文化,看这种获利是否可以持续。最后还是要回到“right business, right people, right price”。收益率高的公司当然是不错的,说明公司的盈利能力强。净资产收益率低的公司一般都不太好,但成长型公司的初期可能净资产收益率会很低。关键还是看你能不能看懂公司的未来(现金流)看图看线实际上就是看目前(这个时刻或时段)别人对股票的看法。所谓的价值投资者的心中是无图无线的!巴菲特说不想持有一支股票10年就不要拥有它10分钟;靠股价涨跌赚钱实际上是靠有人接盘,从其他投资者手中挣钱。将所有此类投资者看作一个整体,那么在这个整体之外是没有资金流入流出的,也就说这类投资方式没有产生任何有效的利润,就像一个人有多个股票账号,今年将这个账号中的股票卖给那个账号,明天将那个账号中的股票卖给这个账号,这个人虽然每个账号的盈利情况各不相同,但是这个人的总资产是维持不变的,而且频繁的交易就是在给券商送手续费。靠企业获取利润是实打实的利润,是企业将赚到的钱分一部分给投资者买股就是仿若买没有上市交易的企业,2、投资要用闲钱,(不是闲钱的就不能用),3、不看到十年就不投,(4、不懂的谈不上看到十年后,所以不懂的不会投),5、投资不等于长期持有,若有更好的标的,要换股。因为投资有机会成本,失去了不知何时再有当有人非要把金子按铜的价钱卖给你的时候,你是不需要勇气的,你只要确认那真的是金就行了(有可能其实是镀金的铁块或石头)。但是我有个理解,就是无论什么时候卖都不要和买的成本联系起来。卖的理由可能有很多,唯一不该用的理由就是“我已经赚钱了”。就像很多散户说的,回本就卖或者涨到多少就卖。这实际上还是没有看懂公司的未来,或者说还是在按照价格考虑买卖,因为恐惧未来会跌导致亏损所以常常卖飞,失去了未来赚钱的机会
2025年09月21日
3 阅读
0 评论
0 点赞
2025-09-18
Emacs 折腾日记(三十)——打造C++ IDE 续
上一篇博客中,我完成了C++ IDE初步工作,包括代码的高亮、折叠、跳转以及补全等工作。但是作为IDE来说功能还有点不够,就我个人而言作为IDE来说它还需要具备一键编译运行和调试功能。这篇文章就来记录我是如何实现上述功能的编译运行我使用的演示项目比较简单,它的文件结构如下:. ├── include │ └── head.h └── src ├── add.cpp ├── div.cpp ├── main.cpp ├── mult.cpp └── sub.cpp它分为两个目录分别保存头文件和源文件。其中头文件只有一个定义各个接口函数,而接口函数的实现就放到各自定义的cpp文件中。这里使用加减乘除的四则运算的实现来作为演示。这里我分别演示一下Make文件和CMake构建的项目是如何实现一键编译运行的。Make构建的项目针对上前面介绍的简单项目,我们可以写出如下的Makefile# 编译器设置 # 定义项目根目录 ROOT_DIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) CXX := g++ CXXFLAGS := -Iinclude -Wall -Wextra -pedantic -std=c++11 -MMD -MP LDFLAGS := EXE_OUTPUT := $(ROOT_DIR)bin TARGET := $(EXE_OUTPUT)/app $(info TARGET = $(TARGET)) # 源文件和对象文件设置 SRC_DIR := src SRCS := $(wildcard $(SRC_DIR)/*.cpp) OBJ_DIR := $(ROOT_DIR)build/obj OBJS := $(patsubst $(SRC_DIR)/%.cpp,$(OBJ_DIR)/%.o,$(SRCS)) DEPS := $(OBJS:.o=.d) # 默认目标(第一个目标) all: $(TARGET) # 链接生成可执行文件 $(TARGET): $(OBJS) @mkdir -p $(@D) $(CXX) $(LDFLAGS) $^ -o $@ # 编译源文件并生成依赖 $(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp | $(OBJ_DIR) $(CXX) $(CXXFLAGS) -c $< -o $@ # 创建对象文件目录 $(OBJ_DIR): mkdir -p $@ # 包含自动生成的依赖关系 -include $(DEPS) # 清理生成的文件 clean: rm -rf $(TARGET) build .PHONY: all clean 上面我们定义了头文件路径为include 目录,并且规定了中间文件生成在 build/obj 中,最后定义了生成可执行程序在 bin/app 中对于编译来说,Emacs内置了 compile 命令,它会自动执行 make -k 命令,但是如果我在使用Emacs的过程中切换到了其他目录的话,还需要特别指定Makefile 所在的路径,对我来说我希望能在尽可能少输入参数的情况下完成同样的操作,不太希望每次都指定项目根目录,好在之前配置的projectile 插件帮助我们识别出来了项目的根目录。所以这里可以使用 projectile-compile-project 来自动指定根目录并编译。从上面的截图可以看到,flycheck 提示了几个错误,这是因为项目没有生成 compile_commands.json文件,所以lsp服务器无法跨文件分析,导致找不到头文件。原始的make 命令并不支持生成 compile_commands.json 文件,我们可以通过 bear 命令来完成这个工作,它的用法比较简单,只需要使用 bear -- <your-build-command> 即可, 对于使用make编译的项目来说 <your-build-command> 代表的就是 make 命令。我们需要考虑的一个问题是,如何将bear加入到编译命令中,也就是将它自动生成的 make -k 给替换掉,第二个问题是如果当前目录在其他目录下,如何保证 compile_commands.json 永远生成在根目录下Emacs中有一个变量 compile-command 保存了编译的命令,如果我们使用Emacs自带的compile来编译可以通过修改它来实现,而 projectile-compile-project 则是通过变量 projectile-project-compilation-cmd 来保存编译命令,默认是nil,对于使用 projectile 我们通过修改这个变量的值从而修改编译时使用的命令。另外既然 projectile 可以得到项目的根目录,我们就可以利用这个插件来获取项目的根目录,有了这些信息通过一个函数就可以重新生成一个编译命令(defun my/general-compile-command() (concat "bear --output " projectile-project-root "compile_commands.json" " -- make -k"))这个函数的代码非常简单,通过 projectile-project-root 来获取项目的根目录,然后通过字符串拼接的方式来得到编译命令生成 compile_commands.json 成功之后,我们重启 lsp 服务后可以看到错误都消失了,只有两个警告了了解了编译的一些情况,下面来看看如何在Emacs中执行生成的可执行程序。Emacs中可以使用 shell-command 来执行可执行 shell 命令。例如我们可以在项目的根目录下执行 shell-command ./bin/app。很明显如果每次都指定程序的路径是非常麻烦的事,我希望能有一个命令或者函数来自动执行可执行程序。但是Makefile构建的项目比较古老也灵活,Makefile中没有一个固定的方式或者写法来指定可执行程序的生成路径,也就是说没有一个通用的方式来根据Makefile获取可执行文件的路径。一种折中的方案就是针对每个项目都定义一个 execuable-path 的变量来指定可执行程序的路径,然后再通过elisp代码来根据这个变量执行程序(defun my/run-program() (interactive) (shell-command (concat projectile-project-root executable-path)))我们可以针对每个项目单独设置一个 executable-path 变量。Emacs会读取项目根目录中的 .dir-locals.el 文件,并且将文件中定义的变量作为项目的局部变量,所以我们只需要在该文件中定义好 executable-path 就可以了。我们可以通过命令 add-dir-local-variable 来往该文件中添加一个局部变量,也可以自己手写该文件实现这一操作添加完变量之后,项目根目录中的 .dir-locals.el 文件内容如下;;; Directory Local Variables -*- no-byte-compile: t -*- ;;; For more information see (info "(emacs) Directory Variables") ((c++-mode . ((executable-path . "bin/app"))))在重启Emacs之后,执行这个函数就可以做到一键运行了有了这些,我希望能将它们有机的组合起来,也就是说按下某个快捷键,这里我暂时定义为 <F7>。它直接同时执行编译和运行的操作。通过 C-<F7> 来完成重编译的操作。;; 重新编译 (defun my/rebuild-program () (interactive) (let ((root (file-name-as-directory (projectile-project-root)))) (shell-command (concat "make clean -C " root)) (setq compile-command (concat "bear --output " root "compile_commands.json" " -- make -k -C " root)) (compile compile-command))) ;; 绑定快捷键 (setq compilation-read-command nil) ;; 取消编译时确定命令行 (evil-define-key 'normal c++-mode-map (kbd "<f7>") #'projectile-compile-project) (evil-define-key 'normal c++-mode-map (kbd "C-<f7>") #'my/rebuild-program))) 这里的代码比较简单,对于编译来说只需要将之前执行的 projectile-compile-project 绑定到对应的快捷键;对于重编译,我通过函数 my/rebuild-program 来完成。这个函数主要操作是先执行 make clean 命令然后重新执行 make。在正式绑定快捷键之前,有一句 (setq compilation-read-command nil) 。projectile-compile-project 和 compile 命令都是交互式命令,执行时会首先显示对应的编译命令,需要用户手动执行回车确认命令,这句代码的意思是不取消它们需要确认的步骤,直接执行命令。本来我打算在重编译函数中也采用 projectile-compile-project 但是它这个交互式我一直取消不了,所以这里我直接采用 compile 指定根目录的方式来完成这个操作。如果想要绑定一键运行的操作也可以采用这个思路,将快捷键绑定到 my/run-program 函数中,这个函数也可以添加一个编译命令确保执行的是最新代码生成的可执行程序CMake工程CMakeLists.txt 文件内容如下:cmake_minimum_required(VERSION 3.15) set(CMAKE_CXX_STANDARD 11) project(test) # aux_source_directory(${PROJECT_SOURCE_DIR} source) file(GLOB source ${CMAKE_SOURCE_DIR}/src/*.cpp) include_directories(${CMAKE_SOURCE_DIR}/include) set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) add_executable(app ${source})这个CMakeLists.txt 文件中主要定义了编译使用到的源文件、头文件目录路径和生成的exe路径emacs 中有一个名为 cmake-ide 的包,它用于读取cmake配置中的各项参数并将参数传递到对应的包中,虽然用它可以很方便的针对cmake配置,但是它依赖rtags,并且没有支持lsp-mode。所以这里就淘汰它,还是想办法自己实现针对cmake来说,要生成 compile_commands.json 比较简单,我们可以在命令行中使用cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1也可以在cmake配置文件中,project命令之后添加set (CMAKE_EXPORT_COMPILE_COMMANDS ON)这里我采用将命令写到cmake文件中的方式。对于cmake 编译的过程主要由两个部分组成,首先是cmake构建项目生成Makefile,然后使用make 命令编译项目。我们要实现自动编译也需要模拟这两个命令。与上面类似,这里我只需要将 my/general-compile-command 函数做少许改动即可(defun my/cmake-general-compile-command () (concat "cmake -B " (projectile-project-root) "build -DCMAKE_BUILD_TYPE=Debug " (projectile-project-root) " && ln -sf " (projectile-project-root) "build/compile_commands.json " (projectile-project-root) "compile_commands.json" " && cmake --build " (projectile-project-root) "build --config Debug"))这个函数生成的命令主要完成三个工作,将构建编译生成的临时文件放到 build 目录下;因为生成的 compile_commands.json 文件也一起放在了 build 目录中,所以我加一个软链接到项目根目录的操作;最后就是执行编译操作了。至于重编译则于上面的步骤相似,cmake一般我习惯删除存放临时文件的build目录然后重新执行cmake构建。所以这里还是模拟这个过程(defun my/cmake-rebuild-program () (interactive) (let ((root (file-name-as-directory (projectile-project-root)))) (shell-command (concat "rm -rf " root "build")) (setq compile-command (my/cmake-general-compile-command)) (compile compile-command)))至于运行程序,我们还是可以采用上面介绍的指定程序生成路径的方式。也就是不管使用cmake或者Makefile 构建的工程都可以使用上面定义的 my/run-program 函数来运行程序调试作为IDE的一个重要或者说基础的功能,调试功能是必不可少的。emacs 自身支持使用gdb进行调试,我们可以执行 M-x gdb 来启动一个调试示例,这个时候我们一边通过gdb的调试命令来控制程序语句的执行一边观看代码的上下文。但是目前流行的方式是使用 dap 来调试程序,至于什么是dap,我在配置vim的时候已经介绍过了,这里就不再赘述了emacs 中有一个名为dap-mode 的插件通过这个插件可以实现dap相关的功能。因为在介绍vim配置的时候我使用的是vscode中的 cpptools插件,这里我打算也使用它来作为dap的调试后端,可以通过cpptools官方仓库 进行下载接着需要安装lldb-vscode,它是针对vscode的一个插件,我们可以在 官方仓库 中找到对应的下载包。下载完成之后可以直接解压到对应目录,这里我解压到 ~/.emacs.d/cpptools 目录中。此时对应的调试后端程序为 ~/.emacs.d/cpptools/extension/debugAdapters/bin/OpenDebugAD7。我们需要赋予它可执行的权限。在这些工作都做好之后,可以使用下面的代码来安装dap-mode(use-package dap-mode :ensure t :after (lsp-mode) :config (dap-auto-configure-mode) ; 可选:启用自动配置 (setq dap-cpptools-debug-program '("~/.emacs.d/cpptools/extension/debugAdapters/bin/OpenDebugAD7")) )我们可以通过命令 dap-debug-edit-template 创建一个调试的模板。对给出的模板做一些简单的修改(dap-register-debug-template "cpptools::Run Configuration" (list :type "cppdbg" :request "launch" :name "cpptools::Run Configuration" :MIMode "gdb" :program "${workspaceFolder}/bin/hello" :cwd "${workspaceFolder}" :environment [] :miDebuggerPath "/usr/bin/gdb")) 我们执行一下这个代码就会向Emacs注册一个调试的模板。接着直接调用 dap-debug 即可启动调试。虽然我们可以将上述注册的代码放到主配置文件中,但是其中的一些关键的字段,例如程序的位置,使用的环境变量,以及对应的调试参数都无法做到所有程序都统一,所以这里我觉得还是需要的时候直接修改就好了。dap-mode 的一些命令如下:dap-debug 和 dap-continue : 启动调试或者运行到下一个断点处dap-next : 执行下一句代码dap-step-in : 执行下一行代码并进入函数内部dap-step-out : 执行到函数返回dap-breakpoint-toggle : 创建或者删除端点我们可以对这些命令进行键位绑定(use-package dap-mode :ensure t :after (lsp-mode) :config (dap-auto-configure-mode) ; 可选:启用自动配置 (require 'dap-cpptools) (setq dap-cpptools-debug-program '("~/.emacs.d/cpptools/extension/debugAdapters/bin/OpenDebugAD7")) (evil-define-key 'normal dap-mode-map (kbd "<f10>") #'dap-next) (evil-define-key 'normal dap-mode-map (kbd "<f9>") #'dap-breakpoint-toggle) (evil-define-key 'normal dap-mode-map (kbd "<f5>") #'dap-debug) )这样我们可以使用上述快捷键来进行调试操作总结这篇文章花了好长时间才弄出来,主要是我对于emacs和lisp语言不太熟悉,中间在尝试编写一键运行和配置dap时耗费了大量的时候。最终我还是成功了,至少我完成我当初想要的一些ide的基本功能,当然在使用上还是比不过vscode,但是在折腾中总能找到一丝乐趣。本文中的配置仅仅经过我自己机器的检验,本来想弄的更加灵活更加接近vscode的体验,有一些我自己想要的功能还没加上,仅仅做了一个可用的玩具。但是我没有想到什么办法,而且这篇文章已经憋了好久了,再不写点东西出来我感觉马上就要放弃了,我想先弄点东西出来给自己一个激励,让我有动力继续深入学习一下Emacs的其他内容。等我多学了一点Emacs多写了一点elisp代码之后可能会对调试和编译方面的代码做一个大的更新。最后如果有读者觉得这篇文章写的有那么一点帮助,那将是我的荣幸,感谢读者在百忙之中能读完本文。
2025年09月18日
7 阅读
0 评论
0 点赞
2025-09-03
Ubuntu 20.04 安装gcc5.4 与 cmake3.16 编译环境
因为公司的编译环境使用的是Ubuntu 20.04 搭配 gcc5.4 和 cmake3.16。所以我也在自己的开发机上安装了配套的环境Ubuntu 就使用 WSL2 直接安装就行,编译环境因为Ubuntu 20.04 默认使用的是gcc 9的版本,所以配置起来还是需要稍微费点功夫的。这里记录一下有效的步骤防止后续又需要配置这套环境的时候满世界找因为gcc5.4 相对来说比较老了,这一版Ubuntu 的官方软件源仓库中没有,需要添加额外的软件源仓库我们可以选择先备份原始的软件源,然后将下列源添加到 /etc/apt/sources.list 文件的末尾deb http://archive.ubuntu.com/ubuntu xenial main universe然后执行sudo apt update && sudo apt upgrade更新软件源接着安装gcc 5.4 以及对应的32位环境支持sudo apt install -y gcc-5 g++-5 gcc-5-multilib g++-5-multilib sudo apt install -y libc6-dev-i386 lib32stdc++6 lib32gcc1默认情况下,ubuntu 20.04 中安装的gcc版本是9.0,如果我们自行安装了 gcc5.4,系统中会有多个gcc版本有时候会导致冲突,我们可以使用下面的命令来管理多个gcc版本# 配置备选版本 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 50 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 50 # 切换版本(选 5.4 对应的编号) sudo update-alternatives --config gcc sudo update-alternatives --config g++此时使用 gcc --version 将会看到当前gcc的版本是5.4Ubuntu 20.04 官方的软件源中cmake的版本就是 3.16,所以对于cmake直接使用sudo apt install cmake
2025年09月03日
9 阅读
0 评论
0 点赞
1
2
3
...
35