<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Vincent Ping（中文）</title><description>Vincent Ping 的博客（中文文章）— 技术、健康与更多。</description><link>https://vincentping.com/</link><atom:link href="https://vincentping.com/feeds/cn.atom.xml" rel="self" type="application/atom+xml"/><item><title>一个加密矿工眼里的AI生意</title><link>https://vincentping.com/cn/ai-business-through-miner-eyes/</link><guid isPermaLink="true">https://vincentping.com/cn/ai-business-through-miner-eyes/</guid><description>从芯片到基建到模型到应用，AI产业金字塔每一层的钱从哪来、到哪去——一个加密矿工的视角，看这门生意什么时候才能真正养活自己，而不是靠投资不断喂奶。</description><pubDate>Thu, 25 Jun 2026 22:05:00 GMT</pubDate><content:encoded>&lt;p&gt;上一篇《&lt;a href=&quot;/cn/nvidia-through-miner-eyes&quot;&gt;一个加密矿工眼里的英伟达&lt;/a&gt;》，我用挖矿的经历看英伟达，看到两件事。一件是它的脆弱：价值正从训练往推理转移、从通用芯片往专用芯片转移，它期许未来最赚钱的那一块，恰恰在被专用芯片从内部蚕食；同时它自己也开始下场投资客户、亲自给需求加杠杆。另一件更要紧：哪怕英伟达是这一轮AI浪潮里最硬的卖铲人，那也不能证明它今天的价格是合理的——技术的真伪，和价格的起落，本就是两条各走各的线。&lt;/p&gt;
&lt;p&gt;这一篇，我想顺着同一副眼镜，往上多看几层——不只看英伟达一家，看看整个 AI 产业。&lt;/p&gt;
&lt;p&gt;今天 AI 这门生意热得发烫：四大科技巨头 2026 年的资本开支加起来超过七千亿美元，比去年又涨了约八成，债券、融资、股价一起被它点着。说这门生意“跑起来了”是没问题的——确实有人在付钱，ChatGPT 们也有了实打实的订阅收入。可收入毕竟只是收入，我更想问一个朴素的问题：它什么时候才能真正盈利？也就是说，这么多钱砸进去，最后有没有哪一层，真能从最终用户那里挣回足够的钱、把自己养活、撑得起今天的估值——而不是靠一轮轮的投入，催出眼前的繁荣。&lt;/p&gt;
&lt;h2 id=&quot;先看金字塔的底座芯片层&quot;&gt;先看金字塔的底座：芯片层&lt;/h2&gt;
&lt;p&gt;要看清钱最后落在哪儿，得先承认一件事：这条链里，目前确实有人在稳稳地赚钱——就在最底层的芯片这一层。&lt;/p&gt;
&lt;p&gt;英伟达、台积电，还有供应高带宽内存的那几家（像 SK 海力士），构成了这门生意里真正赚到钱的人。它们的共同点是：无论上面那些基建、大模型、应用最后能否盈利，只要这场军备竞赛还在打，大家就必须向它们买卡、买产能、买内存。所以芯片层是整条链里目前已经稳稳赚到钱的一层——英伟达的毛利率高到夸张，供 HBM 内存的那几家也因为产能紧张赚得盆满钵满。&lt;/p&gt;
&lt;p&gt;但请注意两件事。&lt;/p&gt;
&lt;p&gt;第一，这份暴利并不像看上去那么稳。先看英伟达这一面：它寄予最大期望的推理腹地，正被专用芯片从内部侵蚀，这点我在上一篇已经谈过，这里只补充一句：推理的算法针对性强、目标明确，专门为它做一颗芯片门槛并不高，于是大买家纷纷自研、新厂一拨拨涌入，这块未来很难赚到垄断的钱。&lt;/p&gt;
&lt;p&gt;而内存这一面，是另一种不稳——内存是出了名的周期行业，每一轮都是同一个剧本：靠产能紧张暴涨，产能一拥而上就崩，价格腰斩、利润转负。过去三十年反复上演过好几回。&lt;/p&gt;
&lt;p&gt;有意思的是，这一轮内存厂商赚得盆满钵满的同时，又在说一句相同的话：这次不一样了——AI 的需求是结构性的，把周期给“终结”了，价格可以一直高下去。可每一轮泡沫接近顶的时候，喊得最响的都是“这次不一样”：当年思科被论证它值两百多倍市盈率，靠的也是同一句“老规矩不管用了”。一个连自己都信“周期已经被废除”的行业，往往恰恰站在周期的顶上。&lt;/p&gt;
&lt;p&gt;所以内存今天这份暴利，我以为是踩在周期上的钱——它哪天转向不好说，但“这次不一样”喊得越响，离转弯通常越近。&lt;/p&gt;
&lt;p&gt;第二点其实更重要：芯片层赚到的这份利润，不是凭空冒出来的，是从上面一层层抽下来的——基建买它的卡，模型付基建的租，应用为这一切买单。底下芯片赚得越狠，上面每一层被它抽得越紧。&lt;/p&gt;
&lt;p&gt;换句话说，芯片这层的利润，本身就是上面几层的成本。所以“有人在赚钱”非但不能反驳“这门生意还没真正赚到钱”，反而正是问题本身：钱都沉到了最底下那一层，而越往上、越靠近真正该产生价值的地方，日子越不好过。而且别忘了，芯片层赚的这笔钱，往上一层层追根究底，主要的来源并不是最终用户心甘情愿掏出来的真金白银，而是巨头们自己攒的、融来的、借来的、砸进这场军备竞赛的钱。换句话说，这条链上目前稳稳赚到钱的一层，赚的是“投入”，不是“收入”。&lt;/p&gt;
&lt;h2 id=&quot;基建层一个等着被喂的窟窿&quot;&gt;基建层：一个等着被喂的窟窿&lt;/h2&gt;
&lt;p&gt;从芯片这个底座往上爬一层，是基础设施——算力、数据中心。今天华尔街的主线叙事，正是“在金矿边上卖铲子”：谁的模型最后赢说不准，但大家都得买算力，那我投基建总没错。&lt;/p&gt;
&lt;p&gt;可基建恰恰是最让人担心的一层。&lt;/p&gt;
&lt;p&gt;上一篇提过，矿机是一种每天不停烧钱的重资产——电费、折旧、维护，一刻不停。AI 数据中心是同一个东西，而且更重：它得先向底座那层买最贵的卡，这些卡几年就被新一代比下去、二十四小时高强度运转又把命提前熬干；还得不停地买电——算力的尽头是电力，每一次训练和推理都在烧电，巨头们为了抢稳定电源，正签下几十年、数十亿美元的购电协议。买卡、买电、散热、维护，全是真金白银往里填——买卡那笔流向下面的芯片层、变成它的垄断利润，剩下的电费、散热、维护，则是砸进去就没影的运营成本。两头都要出血。&lt;/p&gt;
&lt;p&gt;而且，基建自己不是终点。它产出的算力，得有人拿去用、并且真正赚到钱，它这个窟窿才填得平。它的钱能不能回本，其实取决于跑在它上面的模型和应用，能不能赚到足够的钱来喂它。可问题正在这儿——它今天能赚到的那点钱，喂它的也还是上面砸下来的投入，而不是靠最终用户挣回来的收入。&lt;/p&gt;
&lt;p&gt;这个窟窿有多吃钱，看一个数字就够了：谷歌母公司 Alphabet，2025 年还有七百多亿美元的自由现金流，可根据机构预测，2026 年这个数字会被 AI 基建砸得只剩几十亿，其他的钱都买了卡，喂了基建这一块；它甚至开始发债来填——一家印钞机一样的公司，被基建吸到要去借钱。&lt;/p&gt;
&lt;p&gt;更何况，就连基建账面上的那点利润，也有水分。这些卡两三年就被新一代比下去，可账上常常按五年、六年慢慢摊销——少摊的那部分，就摇身一变成了报表上更好看的利润。这不是我空口说白话：这两年，几大巨头正悄悄把 AI 芯片的折旧年限，往长里拉、拉到五六年。卡的实际寿命变了吗？没变，账面上的利润却凭空多了出来。连“大空头”那位迈克尔·伯里都公开质疑过这套操作——用拉长折旧的办法，把利润撑得好看。换句话说，基建这门生意，不光现金一直要往外流，连报表上那点体面，都是靠会计口径修出来的。&lt;/p&gt;
&lt;h2 id=&quot;模型与应用还没分家的一层&quot;&gt;模型与应用：还没分家的一层&lt;/h2&gt;
&lt;p&gt;再往上一层，是跑在这些算力上的大模型。未来持续赚钱的，会不会是这一层？毕竟直觉上，这次的 AI 突破，就是大模型技术的突破。&lt;/p&gt;
&lt;p&gt;目前来看，大模型本身，很难赚到垄断的钱。&lt;/p&gt;
&lt;p&gt;一个原因是中国大模型的竞争和开源模型的进步。DeepSeek 这样的公司，用低得多的成本做出接近第一梯队的水平，而且还开源出来。而且这些开源模型一直在追赶闭源——你这个月领先，开源下个月就追上来一大截，而且差距越来越小。当一个同等水平的东西可以免费拿到时，原来那个“我技术先进所以我能收高价”的逻辑，就不存在了。&lt;/p&gt;
&lt;p&gt;模型这东西还有个特点：用户的忠诚度极低。这个月哪家好用一点，就用哪家，换一下几乎没有成本。这跟微信、跟那些社交软件完全不一样——那些东西你离不开，因为你联系的人都在上面。模型不是，模型谁好用用谁，说翻脸就翻脸。Anthropic 一度反超 OpenAI，就是个例子。&lt;/p&gt;
&lt;p&gt;仔细分析，我们会发现，眼下大模型不是不赚钱那么简单，而是在巨亏。就拿跑在最前面的 OpenAI 来说：它 2026 年的营收按年化算有两百多亿美元，听着不少，可同年预计要亏一百四十亿——每收进一块钱，倒贴出去七毛；它那几亿用户里，付费的只一小撮，九成多都在免费用，而每一次免费调用的算力成本，都得它自己付。这样的窟窿，靠的是一轮又一轮的融资在填。所以模型层和基建层是一个道理：它今天烧的钱，绝大部分还是投资人砸进来的；从终端用户那儿挣回来的，连本都盖不住。&lt;/p&gt;
&lt;p&gt;那应用呢？金字塔最顶上，本该有靠应用赚钱的一层。可今天你想单拎出这一层来看，会发现压根找不到——最能用的应用 ChatGPT、Claude，本身就是模型厂家自己做的，模型和应用还没分家；再往外的文生图、语音、视频，一批小厂在做，他们要么自己还在烧钱训模型，要么底层得调大厂或开源的模型，成本压不下来。市场看着热闹，其实离普通人十万八千里，大家最多吹吹牛玩玩。看着媒体不停营销爆热点，今天这个模型出了个新版本，一群人呼啦都过去测试围观，明天那家出了个什么新功能，又是一群人，忽地围过去，应用有点粘性么？既没什么刚需、又没护城河，都这么靠输血活着。&lt;/p&gt;
&lt;p&gt;真正独立的、不依附于大厂模型的第三方应用，今天还很少。其实这就是市场还刚开始、远未成熟的标志，这样的一次革命性的技术突破，没有全民参与的创意迸发，光靠几家大模型自己折腾，很难孕育出 AI 时代的杀手级应用。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20260625/ai-profit-pyramid-cn.jpg&quot; alt=&quot;AI 产业金字塔：投资像奶一样从顶部倒入，一层层漏下去，芯片层满溢，基建层只接到一点，模型层和应用层几乎滴水未沾&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;被当成确定的那个前提&quot;&gt;被当成确定的那个前提&lt;/h2&gt;
&lt;p&gt;把这些层连起来看，会发现一件有意思的事。&lt;/p&gt;
&lt;p&gt;今天 AI 产业那些惊人的估值——几百倍的市盈率、把好多年后的预期都打进去的市值——它们能成立，背后都靠着同一个前提：&lt;strong&gt;这门生意，将来能赚到长期的、可持续的垄断利润。&lt;/strong&gt; 只有垄断利润，才配得上这样的估值倍数。&lt;/p&gt;
&lt;p&gt;可是顺着这座金字塔一层层看：唯一真正赚到垄断利润的，是最底下的芯片层——可它赚的这份钱，是从上面一层层抽下来的，而且它自己那点垄断也很可能被推理侧的专用芯片掏空；往上一层，基建是个等着被喂的窟窿；再往上，模型守不住垄断、还在巨亏；而本该靠应用赚钱的最顶上那一层，到今天根本还没长出来。&lt;/p&gt;
&lt;p&gt;也就是说，那个支撑着所有天价估值的前提——“能赚到长期垄断利润”——它的每一环，要么已经不成立，要么远远没被验证。&lt;/p&gt;
&lt;p&gt;用一句简单的话来总结当下：&lt;strong&gt;市场把一件远远没有确定的事，当成已经确定了的事，定了价。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这里我们可以以 Google 为例，来做个说明：Google 自研 TPU、自建数据中心、做 Gemini、把 AI 塞进搜索和全家桶，相当于 AI 整个产业链的一个缩影，可这条 AI 产业链，能自己养活自己吗？不能——它到今天还靠着搜索广告那个老业务每天赚的钱，不断输血。&lt;/p&gt;
&lt;p&gt;这说明什么？到现在砸进去了这么多钱，连 Google 都没靠它长出一个新的、能自负盈亏的刚需应用，其他的呢？&lt;/p&gt;
&lt;p&gt;说起来，要让这门 AI 生意真正自负盈亏，到现在这个阶段，&lt;strong&gt;缺的不只是钱，最缺的是时间。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;AI 这个产业要独立，要能自己能养活自己，需要整个社会的聪明才智去参与，在大规模的各种尝试中，涌现出一批 AI 时代的杀手级应用，成长为人们的刚需，真正离不开的刚需。只有到那个时候，我们才敢说，AI 是个有钱途的行业！在那之前，AI 只是一个需要不断喂奶的襁褓。&lt;/p&gt;
&lt;p&gt;成长，是需要时间的，需要时间不断降低技术的成本，需要时间慢慢普及教育大众，也需要时间让各种应用熬进我们的生活和习惯里……急不来。&lt;/p&gt;
&lt;p&gt;但是时间，却是资本最难给出的东西：钱能一次性砸下去，却很难陪着一件事慢慢长很多年。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;参考资料&quot;&gt;参考资料&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;红杉资本 David Cahn《AI’s $600B Question》（撑起当前资本开支约需 6000 亿美元年营收；2025 年 12 月展望指出终端营收仍在“每年几百亿”、基建投资“未来五年以万亿计”）：&lt;a href=&quot;https://www.sequoiacap.com/article/ais-600b-question/&quot;&gt;https://www.sequoiacap.com/article/ais-600b-question/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;CNBC：几大云厂商 2026 年资本开支合计约 7000 亿美元，Alphabet 自由现金流预计从 2025 年的 733 亿美元骤降约 90% 至 82 亿美元，并多轮发债、长期债务一年翻两番至 465 亿美元（Pivotal Research 等）：&lt;a href=&quot;https://www.cnbc.com/2026/02/06/google-microsoft-meta-amazon-ai-cash.html&quot;&gt;https://www.cnbc.com/2026/02/06/google-microsoft-meta-amazon-ai-cash.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;CoinDesk：上市比特币矿企大规模转向 AI 数据中心、已签逾 700 亿美元 AI/HPC 合同、到 2026 年底 AI 或占其收入约七成：&lt;a href=&quot;https://www.coindesk.com/markets/2026/03/27/bitcoin-miners-are-becoming-ai-companies-and-selling-their-btc-to-fund-the-transition&quot;&gt;https://www.coindesk.com/markets/2026/03/27/bitcoin-miners-are-becoming-ai-companies-and-selling-their-btc-to-fund-the-transition&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;关于云厂商把服务器/芯片折旧年限由三、四年拉长至五到六年、由此美化账面利润的梳理（含“大空头”Michael Burry 的质疑）：&lt;a href=&quot;https://www.cnbc.com/2025/11/14/ai-gpu-depreciation-coreweave-nvidia-michael-burry.html&quot;&gt;https://www.cnbc.com/2025/11/14/ai-gpu-depreciation-coreweave-nvidia-michael-burry.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;高盛关于 AI 基建投入规模与芯片折旧年限（“行业普遍按四到六年折旧、与英伟达年度更新节奏不匹配”）的分析：&lt;a href=&quot;https://www.goldmansachs.com/insights/articles/tracking-trillions-the-assumptions-shaping-scale-of-the-ai-build-out&quot;&gt;https://www.goldmansachs.com/insights/articles/tracking-trillions-the-assumptions-shaping-scale-of-the-ai-build-out&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;关于谷歌 TPU、亚马逊 Trainium/Inferentia、微软 Maia、Meta MTIA 等自研推理芯片对通用 GPU 形成份额侵蚀的分析：&lt;a href=&quot;https://www.stanleylaman.com/signals-and-noise/gpus-how-long-do-they-really-last&quot;&gt;https://www.stanleylaman.com/signals-and-noise/gpus-how-long-do-they-really-last&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;CNBC：内存行业的周期性盛衰（Micron 等历史上价格腰斩、利润转负、股价跌 50-60%），以及当前“AI 已终结内存周期”的乐观论调与见顶风险提示；三大厂商控制全球约 95% DRAM 产能：&lt;a href=&quot;https://www.cnbc.com/2026/05/25/memory-stocks-cyclical-boom-bust-samsung-sk-hynix.html&quot;&gt;https://www.cnbc.com/2026/05/25/memory-stocks-cyclical-boom-bust-samsung-sk-hynix.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;本文写作时点为 2026 年 6 月，文中数据为当时能查到的公开估算，不同口径与来源之间存在差异，且会随时间变化，引用前请以最新一手披露为准。本文为个人观察与推演，不构成任何投资建议。&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Tech</category><category>AI</category><category>Investment</category><category>Bubble</category><category>NVIDIA</category><category>Infrastructure</category><category>Cryptocurrency</category></item><item><title>一个加密矿工眼里的英伟达</title><link>https://vincentping.com/cn/nvidia-through-miner-eyes/</link><guid isPermaLink="true">https://vincentping.com/cn/nvidia-through-miner-eyes/</guid><description>从2017年ETH矿潮到今天的AI算力狂热，一个曾经的加密矿工用亲身经历审视英伟达：需求真伪、通用vs专用、循环投资、老玩家换牌桌，以及思科那面25年的镜子。</description><pubDate>Sun, 21 Jun 2026 14:20:00 GMT</pubDate><content:encoded>&lt;p&gt;这两年，看着大家排队抢英伟达的卡，看着 AI 这一波越烧越旺的狂热，我心里总有种熟悉感——这种架势，我以前见过。差不多十年前挖矿那几年，我完整地经历过一遍。&lt;/p&gt;
&lt;p&gt;我不想分析英伟达。我只想讲讲挖矿那几年留给我的几样东西，和它们让我用什么样的眼光，去看这家全世界最贵的公司。&lt;/p&gt;
&lt;p&gt;声明在前：&lt;strong&gt;这只是一份个人观察，不是任何投资建议。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;先从我那几台矿机说起，尽量快，它只是个引子。&lt;/p&gt;
&lt;h2 id=&quot;一个引子我那几台矿机&quot;&gt;一个引子：我那几台矿机&lt;/h2&gt;
&lt;p&gt;2017年 ETH 矿潮最疯的时候，显卡很难抢到——不是贵，是没货，整个国内市场都很稀缺。那时候中国还是全球加密矿工之都，能挖矿的显卡，自然首先在这里被一扫而空。我当时买的那二十多张卡，大部分是英伟达（Nvidia）出的 N 卡，少量 AMD 出的 A 卡。一部分是在国内抢的，还有一部分是专门通过亚马逊海外购从英国淘回来的。分了好几批、断断续续凑齐，最远的一批在海上漂了一个月才到上海。卡凑齐，组装成六卡矿机，架在我家阁楼上，嗡嗡地跑，一台大电扇对着吹，到了夏天还得开空调给它们散热，电费一个月好几千人民币，空调和矿机一起开，有时候家里电路扛不住，还跳过几次闸。&lt;/p&gt;
&lt;p&gt;这些麻烦我当时都忍了，因为那段时间确实是蛮赚的。&lt;/p&gt;
&lt;p&gt;后来之所以停下来，是因为2018年年底 ETH 的那波大跌。以太坊越来越不值钱，跌到某个点时，挖出来的那点币连电费都不够——矿机这东西跟股票不一样，股票套住了你能捂着等，它不花你钱；矿机每开一天，电费、损耗都在烧，一旦收益盖不住成本，它就从帮你赚钱的资产，变成每天往外淌钱的窟窿。于是我把机器关了。&lt;/p&gt;
&lt;p&gt;那二十多张卡，后来一张都没卖掉。玩卡的人都知道矿卡烫手——二十四小时连轴转，显存伤得厉害，没人愿意接。它们就在阁楼上堆着好些年，直到前几年我搬家收拾东西，才当废品处理掉了。从我满世界抢它们，到当废品处理掉，中间隔了差不多七年。&lt;/p&gt;
&lt;p&gt;引子讲完了。我之所以啰嗦这一段，是因为当年烧穿我电费的，主要是英伟达的显卡；今天烧着全世界数据中心电费的，还是英伟达的显卡。中间隔了快十年，主角没换，换的只是它身上贴的标签，从“打游戏的卡”变成“做 AI 的卡”。挖矿那几年让我学会了一副眼镜——看任何重资产，都先问几个问题。下面，我就把这几个问题，架到英伟达身上。&lt;/p&gt;
&lt;h2 id=&quot;它的需求里有多少是真的&quot;&gt;它的需求里，有多少是真的？&lt;/h2&gt;
&lt;p&gt;英伟达今天的财报漂亮得吓人，一个季度比一个季度好看。但财报漂亮和需求真实，从来是两码事——这一点，我是被矿潮教过的。&lt;/p&gt;
&lt;p&gt;当年那波抢卡，有多少是真要打游戏的玩家，又有多少是像我一样的矿工？这件事不是我事后瞎猜——英伟达那几年的报表里，有大量营收其实是挖矿撑起来的，却被它算进了游戏业务、当成游戏需求的真实增长。2022 年，美国证监会（SEC）认定它在 2018 财年连续几个季度，没向投资者披露挖矿是游戏营收大涨的“重要原因”，罚款了结；到今天还有一桩集体诉讼在打，指控它把超过十亿美元的挖矿销售藏进了“游戏”营收里。后来矿难一来，这部分需求凭空蒸发，财报当场被打回原形，库存积压，股价腰斩。需求看着无穷无尽，其实掺了一大块会瞬间消失的东西——而当时几乎没人，包括公司自己，愿意把这块单独标出来。&lt;/p&gt;
&lt;p&gt;今天的 AI 算力，是同一个局面。这里面有多少是真跑出了能赚钱的应用，又有多少只是“别人都在拼命买，我不买就掉队”的军备竞赛？这两种需求，记在账上看起来一模一样，只有等潮水退了才分得出真假。而眼下一个很难忽视的事实是：整个行业从最终用户那儿真正收上来的钱，一年还只是几百亿美元的量级，可几大巨头砸下去的资本开支，2026 年合起来已经奔着七千亿美元去、2027 年预计破万亿。红杉资本早在 2024 年就算过一笔账：要撑起这么大的投入，这个行业每年得有六千亿美元的营收才说得过去——而它真实赚到的，离这个数还差着十万八千里。中间这个巨大的缺口，靠的正是“AI 会改变世界”这个还没兑现的预期撑着。&lt;/p&gt;
&lt;h2 id=&quot;通用是它的护城河也是它的命门&quot;&gt;通用，是它的护城河，也是它的命门&lt;/h2&gt;
&lt;p&gt;当年打算挖矿的时候，有朋友就建议我：买显卡保险，ETH 哪天不行了，你还能拿它去挖别的币，实在不行还可以玩游戏。这话听着有道理——通用嘛，此路不通还有彼路。这正是通用性最大的诱惑：它让你觉得自己留了退路。&lt;/p&gt;
&lt;p&gt;但矿圈的历史，恰恰是用一种很精细的方式，给这个“退路”划了个边界。&lt;/p&gt;
&lt;p&gt;先说比特币。BTC 的算法对专用芯片（ASIC）特别友好，所以 ASIC 一出来，对显卡就是数量级的碾压——同样一度电，专用矿机的算力是显卡的成百上千倍。显卡挖 BTC 当场没了活路，整批整批被赶出场。&lt;/p&gt;
&lt;p&gt;可是以太坊不一样。ETH 的算法当初是特意设计成“强制写内存”的，就是为了对抗 ASIC。结果是：后来虽然也出了 ETH 专用矿机，但因为被内存带宽卡着，它相比显卡占不到多少便宜，差距不是数量级的。于是显卡在 ETH 这条路上，还能勉强活着。&lt;/p&gt;
&lt;p&gt;这两条线连起来，才是2017年那场 ETH 矿潮真正的来历：正是因为 BTC 那边的显卡矿工被 ASIC 逼得走投无路，才大批迁移到了 ASIC 啃不动的 ETH 上来。换句话说，我当年冲进去的那个避难所，本身就是上一场“专用碾压通用”造成的难民潮。我朋友说的“还能挖别的”，确实救了显卡一命——但那不是因为通用性多可靠，而是因为 ETH 的算法恰好不吃 ASIC 这一套。退路存不存在，从来不是你说了算，是对手的芯片和算法说了算。&lt;/p&gt;
&lt;p&gt;而且专用芯片这东西，一旦验证可行，扩散和迭代的速度都快得吓人。某个算法只要被证明 ASIC 做得出来，很快满世界就都是了；起步往往用十几纳米这种便宜成熟的工艺试水，一旦跑通，立刻往更快、更省电的方向猛冲，一代比一代狠。所以“它现在还不够强”从来不是可以安心的理由——它现在弱，恰恰是因为它才刚开始。&lt;/p&gt;
&lt;p&gt;现在把这副眼镜架到英伟达身上。&lt;/p&gt;
&lt;p&gt;英伟达的卡之所以值钱，就是因为它什么都能算，什么活儿都能接。可这两年 AI 的重心，正从“训练”端往“推理”端移——一个模型训练一次就够了，但训练好之后，要被几亿人每天调用推理无数次。所以训练芯片需求和推理芯片需求这两条曲线的走向并不对称：训练的算力需求，迟早会随着模型越训越大、训练频率趋于稳定而见顶；但推理不一样，它是跟着用户数走的——用户越多、调用越频繁，这条曲线就没有上限。所以推理迟早会反超训练，变成 AI 算力真正的大头。&lt;/p&gt;
&lt;p&gt;推理这件事量大、重复、算法固定，恰恰是专用芯片最擅长、通用 GPU（也就是英伟达卖的这种通用显卡）最吃亏的场景。于是谷歌的 TPU、亚马逊、微软、Meta，英伟达自己最大的那几个客户，现在都在埋头造专门跑推理的芯片。&lt;/p&gt;
&lt;p&gt;英伟达眼下还占着整个 AI 芯片市场的八九成——但这个“八九成”里有个容易被忽略的结构：训练这块它超过九成，推理这块本来就只有六七成。据多家机构的预测，随着定制芯片放量，它的整体份额可能在两三年内从九成上下降到七成左右，被切走的，主要就是其中的推理那块。定制芯片今年的出货增速，已经是通用 GPU 的近三倍。连英伟达自己都急了——它最近花了两百亿美元，把专做高速推理芯片的 Groq 的技术和团队收进门，这本身就说明，它最肥的那块地，正被人惦记着。&lt;/p&gt;
&lt;p&gt;所以真正的问题，不是英伟达通不通用，而是：AI 推理这件事，到底更像 BTC，还是更像 ETH？是专用芯片能数量级碾压它、把英伟达赶出最肥那块地，还是有什么特性能让通用 GPU 守得住一阵？我暂时不知道答案。但我知道，今天所有的趋势，都指向专用芯片在飞快地逼近推理——而英伟达被寄予最高期待的那部分未来，恰恰就压在推理上。&lt;/p&gt;
&lt;h2 id=&quot;卖铲人也下场挖金&quot;&gt;卖铲人，也下场挖金&lt;/h2&gt;
&lt;p&gt;矿圈有一种生意我熟——做矿机的厂商，大多自己也挖矿。一边卖矿机赚钱，一边自己建矿场，两头的钱都要。而且他们挖起来比外人有优势：机器是自己造的，成本比谁都低；新一代芯片一流片，自己先开机挖一拨，吃透了这一代的利润，才把“旧”型号拿出去卖给外面的矿工。所以同样挖矿，矿机厂商的效率，外面买全价机器的人压根比不了——不是同台竞争，是降维打击。&lt;/p&gt;
&lt;p&gt;英伟达现在干的，是同一个剧本，只是规模、复杂程度，都不是当年那些矿机生意能比的。&lt;/p&gt;
&lt;p&gt;它手里那些非上市公司的股权投资，一年前大概三十多亿美元，到今年初已经涨到两百多亿——涨了六倍还多。这些钱砸向 AI 基础设施产业链上下游，其中相当一部分，投给了那些买它芯片、或者通过云服务商间接买它芯片的公司。说白了：英伟达出钱，让这些公司有钱买它的卡，这些公司买完卡把算力租出去赚钱、还钱、估值上涨，英伟达手里的股权也跟着升值——钱转了一圈，又绕回它自己口袋。有分析师看得很直白，说这类交易“完全是循环投资那一套”。黄仁勋自己也不藏着了，今年的一次大会上他直说，英伟达“已经真正成为一家基础设施公司，不只是 GPU 公司”——它要的，是把网络、算力、软件、数据中心整条链都握在手里。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20260621/circular-investment-cn.jpg&quot; alt=&quot;英伟达循环投资闭环&quot;&gt;&lt;/p&gt;
&lt;p&gt;而且它投资的那些数据中心公司，跟当年自己挖矿的矿机厂商一样占着便宜：排在供货队伍最前面，用的是最新一代的卡，而定价权和产能怎么分，又攥在英伟达自己手里。卖铲子的人，不只是也想挖金子——它挖起金子来，比谁都有优势。&lt;/p&gt;
&lt;p&gt;但优势的另一面，是风险。这套玩法，从头到尾都架在杠杆上。矿机厂商当年建矿场，也是这样，在内蒙、云贵川、新疆这些电力便宜的地方找当地合作方，他们出矿机，合作方搞定关系、场地、电力、网络、散热等等。疯狂的时候，不少人是拿手上有的BTC甚至未来的BTC，去抵押贷款。英伟达这次也是：它掏出去的那笔投资，撬动的是下游公司借来的、靠未来合同抵押的债务。加上杠杆，这盘子越玩越大。&lt;/p&gt;
&lt;p&gt;行情往上的时候，杠杆会让它赢得格外漂亮，卖卡赚一道、投资升值再赚一道；可双刃剑的另一刃也一直在——一旦那些动辄几十亿的算力合同没法如期兑现，链条会从下往上传导，先是借债的公司还不上，然后是它账上那两百多亿的股权投资跟着缩水。好的时候杠杆是赚钱的放大器，反过来的时候，它也是催命的放大器。&lt;/p&gt;
&lt;h2 id=&quot;老玩家新牌桌&quot;&gt;老玩家，新牌桌&lt;/h2&gt;
&lt;p&gt;如果说前面这些还只是“形状相似”，那有一件事，是连人都没换的。&lt;/p&gt;
&lt;p&gt;这两年，整个加密挖矿行业，几乎是集体改旗易帜，转去做 AI 数据中心了。Core Scientific、IREN、TeraWulf、Hut 8、Riot……这一长串名字，都是当年挖矿的老面孔。上市矿企在 2026 年一季度卖掉了创纪录的三万多枚比特币，比 2022 年那轮崩盘时卖得还狠——把曾经死攥着的核心资产变卖掉，就为了凑钱扑进 AI。Hut 8 在财报会上直接说，比特币已经不再是公司的“长期战略重点”了。&lt;/p&gt;
&lt;p&gt;但你要是细看他们转身的姿势，会发现这批人不全是被挖矿赶出来的。有相当一批是早早看准了、主动走的——趁币价还高就清仓转身，赌 AI 比挖矿值钱；而他们这一抛币离场，反过来又把币价往下压，把后面硬撑的挤成了亏本割肉、不得不逃的人。先走的人精明，后走的人狼狈，但都挤上了同一张新牌桌。&lt;/p&gt;
&lt;p&gt;这股“哪儿热就往哪儿扑”的劲，我太熟了。每一场热潮的人力，都来自上一场热潮的退潮——这一次，退的是挖矿，涨的是 AI。牌桌是新的，玩家是旧的，连他们扑过来的那股劲，也是旧的。&lt;/p&gt;
&lt;p&gt;而绕了一圈，这些换了招牌的老玩家，又回到了英伟达跟前。前面说的那盘循环投资里，英伟达掏钱投的那些数据中心公司，名单上就有它们的名字——IREN 这些，本就是从矿场转过来的。英伟达一边卖卡给它们，一边投钱让它们买更多卡，而它们，又是一群刚从上一个滩头转过来、追着潮水跑的老面孔。这条链子的每一环，都透着同一股似曾相识的热——是一群熟悉的人，又一次扑向了最热的地方。&lt;/p&gt;
&lt;h2 id=&quot;一副眼镜&quot;&gt;一副眼镜&lt;/h2&gt;
&lt;p&gt;说了这么多，我得讲清楚一件事，免得被误会：我不是在唱衰 AI。&lt;/p&gt;
&lt;p&gt;恰恰相反，我相信 AI 是这一代人会赶上的、和工业革命同级别的变革，叫它信息革命也不为过。但这跟我前面说的那些，是两回事。&lt;/p&gt;
&lt;p&gt;2001年互联网泡沫破的时候，没有谁能说互联网没用——Email 那时候就在用，今天还在用，一天都没停过。互联网千真万确地改变了世界，可那一点都没妨碍那年的纳斯达克崩掉，没妨碍一大批公司归零。技术真到不能再真，泡沫照样破。&lt;/p&gt;
&lt;p&gt;那场泡沫里，有一家公司的故事，今天读起来格外像一面镜子——思科。它当年是卖“网络管道”的：路由器、交换机，整个互联网的骨架都得用它的设备。那时候的叙事，和今天一字不差：互联网谁输谁赢说不准，但所有人都得买思科。于是它成了全世界市值最高的公司，市盈率冲到两百多倍。结果泡沫一破，它股价跌掉了将近九成。注意，思科不是骗子公司，它没倒、一直在盈利、网络设备直到今天还是刚需——可即便这样一家真材实料的公司，它的股价也用了整整二十五年，才重新爬回 2000 年那个顶。也就是说，哪怕你看准了“互联网会改变世界”、还押中了那个最硬的卖铲人，只要买在了狂热的价格上，你也得等四分之一个世纪才能解套。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20260621/cisco-stock-25-years-cn.jpg&quot; alt=&quot;思科股价：25年才回到起点&quot;&gt;&lt;/p&gt;
&lt;p&gt;把“思科”换成“英伟达”，这句话几乎可以原封不动地再讲一遍。它们站在同一个生态位上——上一轮卖网络管道的，这一轮卖算力；同样是“谁赢不知道、反正都得买它”的那一个；同样被捧成全世界最贵的公司。我无意说英伟达就是下一个思科，历史不会简单地重复。我只是想说：思科这面镜子告诉我们，&lt;strong&gt;技术是真的、公司是好的、东西是刚需的——这三件事加起来，依然挡不住一个被狂热定出来的价格，慢慢花二十几年还债&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;有人会说，那场泡沫好歹留下了铺到地下的光纤，后来都用上了，所以是“好泡沫”。这话有道理，但放到今天未必成立。连摩根士丹利都点出过这里的差别：当年的光纤能用二十年，今天的 GPU 两三年就废。光纤泡沫破了，管子还埋在地里等下一波；可这些卡要是没在寿命里把本赚回来，它退场时不会给谁留下什么——就像我那些矿卡，最后是当废品处理的，2元人民币一斤。&lt;/p&gt;
&lt;p&gt;这就是挖矿那几年，留给我的那副眼镜：一样东西，可以既是真的、有用的、甚至改变世界的，又同时被狂热抬成了一个巨大的泡沫。所以“AI 是真变革”这句话，无论多正确，都证明不了英伟达今天的价格是合理的——技术的真伪，和价格的死活，本就是两条各走各的线。&lt;/p&gt;
&lt;p&gt;技术那条线，我多少还能看出点门道；价格这条线接下来怎么走，我预测不了——当年的币价我自己也没看准过，我不是踩着顶离的场，是被电费赶下场的。我能做的不是预测，只是把我见到和想到的，记录下来。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;这篇讲的是英伟达这一家公司。至于这么多钱砸进 AI，利润最后能落在哪儿，我在下一篇《&lt;a href=&quot;/cn/ai-business-through-miner-eyes&quot;&gt;一个加密矿工眼里的 AI 生意&lt;/a&gt;》里接着往下推。&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;参考资料&quot;&gt;参考资料&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;美国证监会（SEC）2022 年对英伟达未充分披露挖矿对游戏业务营收影响的处罚公告（550 万美元和解）：
&lt;a href=&quot;https://www.sec.gov/newsroom/press-releases/2022-79&quot;&gt;https://www.sec.gov/newsroom/press-releases/2022-79&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;CNN 对该处罚的报道（英伟达“遗漏重大信息、具有误导性”）：
&lt;a href=&quot;https://www.cnn.com/2022/05/06/tech/nvidia-sec-settlement-crypto-mining&quot;&gt;https://www.cnn.com/2022/05/06/tech/nvidia-sec-settlement-crypto-mining&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;红杉资本 David Cahn《AI’s $600B Question》原文（撑起当前资本开支约需 6000 亿美元年营收的测算；其 2025 年 12 月展望进一步指出终端营收仍在“每年几百亿”量级、而基建投资“未来五年以万亿计”）：
&lt;a href=&quot;https://www.sequoiacap.com/article/ais-600b-question/&quot;&gt;https://www.sequoiacap.com/article/ais-600b-question/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;TrendForce 关于定制 AI 芯片对通用 GPU 的份额侵蚀与出货增速差的数据（多方转述）：
&lt;a href=&quot;https://www.spotedcrypto.com/hut-8-cipher-digital-ai-data-center-pivot-2026/&quot;&gt;https://www.spotedcrypto.com/hut-8-cipher-digital-ai-data-center-pivot-2026/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;摩根士丹利把这轮 AI 资本开支狂热类比电信泡沫、并指出 GPU 一两三年折旧 vs 光纤 20 年以上寿命这一关键差别（Fortune 报道，转述于此）：
&lt;a href=&quot;https://medium.com/@truthbit.ai/the-2-trillion-question-can-ai-revenue-catch-up-to-capex-df8c5c3c52fb&quot;&gt;https://medium.com/@truthbit.ai/the-2-trillion-question-can-ai-revenue-catch-up-to-capex-df8c5c3c52fb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;以太坊 Ethash 的 memory-hard 抗 ASIC 设计、BTC ASIC 对 GPU 的数量级碾压等公开技术资料（维基百科 Ethash 词条等）：
&lt;a href=&quot;https://en.wikipedia.org/wiki/Ethash&quot;&gt;https://en.wikipedia.org/wiki/Ethash&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;CNBC：英伟达持有的非上市公司股权投资一年内从约 33.9 亿美元涨至约 222.5 亿美元，资金覆盖 AI 基础设施全产业链、包括购买其芯片的客户（分析师称“完全符合循环投资主题”，含 IREN 五吉瓦基础设施协议）：
&lt;a href=&quot;https://www.cnbc.com/2026/05/09/nvidia-embraces-ai-investor-topping-40-billion-in-equity-bets-2026.html&quot;&gt;https://www.cnbc.com/2026/05/09/nvidia-embraces-ai-investor-topping-40-billion-in-equity-bets-2026.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;彭博社：英伟达 2026 年 1 月再向 CoreWeave 追加投资 20 亿美元（循环融资交易的最新一例）：
&lt;a href=&quot;https://www.bloomberg.com/news/articles/2026-01-26/nvidia-invests-another-2-billion-in-coreweave-offers-new-chip&quot;&gt;https://www.bloomberg.com/news/articles/2026-01-26/nvidia-invests-another-2-billion-in-coreweave-offers-new-chip&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;黄仁勋在 2026 年 Computex 大会上称“英伟达已真正成为一家基础设施公司，不只是 GPU 公司”，强调策略转向全栈基础设施：
&lt;a href=&quot;https://finance.yahoo.com/sectors/technology/articles/nvidia-become-infrastructure-company-jensen-003249580.html&quot;&gt;https://finance.yahoo.com/sectors/technology/articles/nvidia-become-infrastructure-company-jensen-003249580.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;本文写作时点为 2026 年 6 月，文中数据为当时能查到的公开估算，不同口径与来源之间存在差异，且会随时间变化，引用前请以最新一手披露为准。&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Tech</category><category>NVIDIA</category><category>Cryptocurrency</category><category>Mining</category><category>AI</category><category>Investment</category><category>Bubble</category></item><item><title>同样是杠杆，文章和代码不一样</title><link>https://vincentping.com/cn/writing-vs-code-leverage/</link><guid isPermaLink="true">https://vincentping.com/cn/writing-vs-code-leverage/</guid><description>Naval Ravikant 说代码和媒体是两种不需要许可的杠杆。但文章和代码作为杠杆有本质不同——文章改变想法、独立传播、永不过时、写完即交付，而代码依赖环境、会腐烂、需要持续维护。在 AI 时代，有真实声音的文章反而更稀缺。</description><pubDate>Fri, 19 Jun 2026 10:00:00 GMT</pubDate><content:encoded>&lt;p&gt;硅谷天使投资人 Naval Ravikant 在他的《纳瓦尔宝典》中说：“财富需要杠杆”。现代社会的二分法已不再是穷人与富人，而是“利用杠杆的人”和“没有利用杠杆的人”。&lt;/p&gt;
&lt;p&gt;他进一步将杠杆分为四种核心类型，分别是：劳动力、资本、代码Code、媒体Media。在这中间，纳瓦尔尤其强调代码和媒体是新时代富人的杠杆，它们是这个时代仅有的两种不需要任何人许可的杠杆。劳动力需要有人愿意为你工作，资本需要你先有钱或者有人愿意把钱给你，但代码和媒体不需要——你一个人，一台电脑就可以。一旦完成，睡着了它们还在为你工作。&lt;/p&gt;
&lt;p&gt;纳瓦尔说的媒体包括了文字、播客、视频等等，但是我今天只想聊聊其中的文字——&lt;strong&gt;写文章这件事，以及它和代码相比，究竟有什么样的不同&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;对于纳瓦尔的总结，我很认同，尤其关于代码这一块，因为直到现在，很长一段时间我都是以写代码为生。对代码的杠杆作用，我很了解：把一个软件写好，可以无限低成本的复制，边际成本趋近于零，尤其是现在基于网络的很多软件，写好部署好，人们有浏览器就能访问，复制这一环也不需要了。同时，软件是有直接的实用价值的。很多人很少阅读，但这个时代他每天也得用软件：看微信、刷抖音、付款、网上买东西……。从这个角度看，代码的触达面要更广——用户不需要有阅读的意愿，只需要有使用的需求。&lt;/p&gt;
&lt;p&gt;但我最近开始重新思考这两件事：写代码和写文章，我越来越觉得，同样作为无需许可的杠杆，它们之间也有很大的差别。&lt;/p&gt;
&lt;h2 id=&quot;文章能做到什么&quot;&gt;文章能做到什么&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;首先是影响力不同。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;代码是工具。当用户打开一个App，完成一个任务，然后关掉。这个App究竟是谁写的，其实不重要，用户不会知道，不想知道，也不需要知道。代码的影响是功能性的——它改变了你能做什么，但很少直接改变你怎么想。&lt;/p&gt;
&lt;p&gt;但是文章就不一样。一篇好的文章需要读、有时候人们甚至会反复阅读，文章需要理解、需要转化成自己的东西，也就是说：文章是要进到读者的脑子里的，它会改变你的想法。&lt;/p&gt;
&lt;p&gt;一篇好文章，它可能会改变你看待一件事的角度，可能为你在某个困惑的时刻打开一扇窗，也可能会引发你的会心一笑：“原来有人和我想的一样”。这种影响是认知性的，是作者和读者之间真实发生的一次连接。&lt;/p&gt;
&lt;p&gt;程序的用户用完就完了，但是文章的读者有时候会记住一辈子。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;其次是传播的独立性不同。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;代码必须活在一个完整的运行环境里——操作系统、依赖库，甚至服务器、数据库等等。它不能独立存在，必须依附于一定的基础设施才能运行。这就意味着，代码的传播其实有很高的门槛：用户需要安装、配置、学习，甚至需要特定的设备和系统。这也是很多软件开发者相对于网站、云服务，更喜欢开发独立App的原因之一：因为独立App依赖相对要少。&lt;/p&gt;
&lt;p&gt;但是文章不同，它本身就是完整的独立单元。一篇文章，一个链接，就可以传到任何地方，任何人打开就能读。实在没有屏幕，你还可以把它打印下来，一张纸带在身边随时阅读。它不依赖运行环境，不需要安装，不需要账号，不需要解释怎么用。这种轻盈，是代码很难有的。Naval说的“睡着了还在为你工作”，在文章这里体现得更纯粹——它真的就是一个独立存在的东西，不需要任何附加条件。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第三，代码和文章的保鲜期不同。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;技术在加速迭代。十年前写的代码，很多现在已经跑不起来了——不是代码有什么问题，而是环境变了，它依赖的东西变得太快了。我见过很多这样的项目：代码本身没有问题，只因为某个依赖库停止维护，整个系统就废了。软件有一种特别的腐烂方式，它本身没变，但是周围世界的变化会让它败坏。&lt;/p&gt;
&lt;p&gt;文章的老化方式则完全不同。一篇文章可能会过时——里面的数据、引用的背景、讨论的具体场景，都可能随时间失效。但它不会“坏掉”。你二十年前写的一篇文章，今天打开还是能读，还是原来的样子，不需要任何人去维护它继续存在。而好的文章甚至根本不会过时——关于世界观、人生观、价值观的探讨、关于思考方式、关于某种处境的观察，有时候几十年、几百年、几千年后读起来，因为时间的沉淀，甚至比当时还更有力量。&lt;/p&gt;
&lt;p&gt;Paul Graham就是个很好的例子。他早年写过的很多软件，估计现在很少人还知道、还记得。但同时期他写的文章——关于创业、关于思考、关于语言——至今还在互联网上流传，还在被引用，还在影响每一代新的创业者和工程师。&lt;/p&gt;
&lt;p&gt;文章这种影响力的半衰期，是大多数软件产品给不了的。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20260619/writing-vs-code-infographic-cn.jpg&quot; alt=&quot;代码 vs 文章：同样是杠杆，本质不同&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;文章作为资产的稳健性&quot;&gt;文章作为资产的稳健性&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;文章一旦写完，就成为一件完整的产品。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这一点听起来简单，但仔细想想，软件产品很少能做到这一点。一个App上线并不是结束，而只是刚开始——接下来是用户反馈、bug修复、功能迭代、版本升级、安全更新……开发者被产品绑住，一天这个产品还活着，开发者就得跟着活。在某种意义上说，这是一种隐性的长期负债。&lt;/p&gt;
&lt;p&gt;但是文章就没有这个问题。写完发出去，它就在那里了。读者可能有评论，你可以选择回应，也可以不回应。文章本身不需要你继续投入才能继续存在。这种“写完即交付”的干净和省心感，在软件开发里是妥妥的奢侈品！&lt;/p&gt;
&lt;p&gt;再一个，&lt;strong&gt;用户用一个App时，他感受到的只是这个产品，不是人&lt;/strong&gt;。但读一篇文章，感受到的是这个人怎么想、怎么看、走过了什么——作者的声音、判断、甚至性格，都在文字里。文章是读者和作者交流的一座桥梁。这让文章有一种代码永远没有的东西：它建立的是人与人之间的关系，不只是人与工具之间的关系。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;最后是记录的意义&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;我在&lt;a href=&quot;/cn/about&quot;&gt;网站介绍&lt;/a&gt;里曾写过：没有记录，就不曾存在。这句话放在代码和文章的比较里，有一层很具体的含义。&lt;/p&gt;
&lt;p&gt;代码记录的是功能，是某个问题的解决方案。它是有用的，但它记录的是“怎么做到的”，而不是“我这个人”。文章记录的是人——我在某个时间点的判断，我走过的路，我看到的东西，我思考的方式，我的疑惑和感悟。这种记录，随着时间的积累，会变成一份只属于你的档案，属于你的历史。&lt;/p&gt;
&lt;h2 id=&quot;ai时代两者的对比在变化&quot;&gt;AI时代，两者的对比在变化&lt;/h2&gt;
&lt;p&gt;还有一件事，是这两年开始改变的，就是 AI 发展带来的影响。&lt;/p&gt;
&lt;p&gt;AI 写代码的能力，正在快速提升。一个功能，你描述清楚，AI帮你实现，而且越来越快、越来越好。代码这种杠杆，它的稀缺性在下降——不是说代码不重要了，而是“会写代码”这件事本身，作为个人优势的含金量在稀释。当 AI 可以更快写出超过我们水平的代码时，我作为一个写代码的人，杠杆在哪里？&lt;/p&gt;
&lt;p&gt;但是文章这边则不同，虽然 AI 的写作能力也在大幅增强，但这里有一个根本的区别：AI 写的文章，可以批量生产，但它没有真实的经历，没有真实的声音，没有只属于某一个人的视角。AI 可以写出流畅的、结构清晰的文章，但它写不出“当时还是 99 年前后，主要是报社约稿，每周一篇。我记得经常都拖到最后一刻，时间快到了，我才动笔。“这样的细节，也写不出这种细节背后那种具体的质感。&lt;/p&gt;
&lt;p&gt;在 AI 内容大量涌入的今天，有真实经历、真实声音的文章，反而变得更稀缺了。也就是说，这样的文章将会更有价值。&lt;/p&gt;
&lt;p&gt;好了，关于代码和文章之间的差别，大致我能想到的，目前就这么多。这里我强调的都是文章的优势，主要是因为我本身是写代码的，一直以来虽然也偶尔写点文章记录一下，但是并没有仔细思考过：同样是杠杆，代码和文章有什么不同？这也是我这段时间反思的一个小小总结吧。&lt;/p&gt;
&lt;p&gt;最后我想再强调一下，代码和写作，绝对是我们这个时代的两种permissionless leverage，在可能的情况下，我们应该尽量充分地利用它们。&lt;/p&gt;
&lt;p&gt;同时，如果你和我一样，也是开发人员，那么我强烈的建议你，尽量多的去记录和写作，因为未来某一天你会发现：这些文章会比你的代码留得更久。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;补记&quot;&gt;补记&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;感谢朋友们的阅读和留言，让这篇文章继续生长。文章发出后引发的讨论，我会记录在这里。&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2026-06-19，来自 V2EX 网友 &lt;a href=&quot;https://www.v2ex.com/member/canyue7897&quot;&gt;canyue7897&lt;/a&gt; 的&lt;a href=&quot;https://www.v2ex.com/t/1221589&quot;&gt;评论&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;他提了一个我没想到的角度。他说，代码只要接口定好，里面怎么写都行，就算 AI 拉一坨屎，大概率也能跑起来，有编译器兜底。文章没有这个兜底：它要求上下文的逻辑连贯，一旦写崩、写偏，人一眼就能看出来。&lt;/p&gt;
&lt;p&gt;这让我想到一层更根本的差别。代码追求的是正确，是收敛的——同一个功能，大家写出来大同小异，最优解趋同，所以它可以“没有个性地正确”。&lt;/p&gt;
&lt;p&gt;而文章追求的是独特，是发散的——同一个题目，一百个人能写出一百样，个性和逻辑本身就是价值，缺了就不成立。&lt;/p&gt;
&lt;p&gt;他还有一句也戳中要害：烂文章，人一眼就能看出来。&lt;/p&gt;
&lt;p&gt;代码烂，只要能跑，当下还能先糊弄过去；文章烂，逻辑一虚、真情实感一假，读者立刻就有感觉。文章藏不住作者的思考含量，糊弄不了人。&lt;/p&gt;
&lt;p&gt;代码可以无个性地兜底，文章不能。这大概也是为什么，AI 量产代码会越来越顺，而真正有人味的文章，反而越来越难被 AI 替代。&lt;/p&gt;
</content:encoded><category>Others</category><category>Writing</category><category>Leverage</category><category>Naval Ravikant</category><category>Code</category><category>AI</category></item><item><title>AI浪潮正在创造新职位</title><link>https://vincentping.com/cn/ai-creating-new-jobs/</link><guid isPermaLink="true">https://vincentping.com/cn/ai-creating-new-jobs/</guid><description>AI正在淘汰写代码、写文案、做翻译、处理图片音视频等信息处理岗位，但同时会用AI的人供不应求。Anthropic投入1.5亿美元推出Claude Corps，把年轻人送进非营利组织实战AI，年薪$85K。</description><pubDate>Tue, 16 Jun 2026 19:02:00 GMT</pubDate><content:encoded>&lt;p&gt;最近两年，科技大厂的裁员新闻一条接一条——Meta、Google、Amazon……原因大家都知道：AI来了。但AI带走一些工作的同时，也在催生新的需求。&lt;/p&gt;
&lt;p&gt;被淘汰的不只是写代码的。文案、翻译、图片处理、音频剪辑、视频制作——凡是能被拆解成明确步骤的信息处理工作，AI都在快速接管。&lt;/p&gt;
&lt;p&gt;但硬币的另一面是：AI让一个人能干过去一个团队的活，企业对信息产品的需求反而在爆发。以前做一条宣传视频要一个月，现在一周就能出三条。产能上去了，需求跟着涨，结果是&lt;strong&gt;会用AI的人供不应求&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;关键变化不是“工作消失了”，而是“工作换了形态”。新岗位不再按技能分（写手、设计师、剪辑师），而是按问题分——你能不能用AI把这件事从头到尾搞定。&lt;/p&gt;
&lt;p&gt;前几天我收到Per Scholas的校友邮件，介绍了一个叫Claude Corps的项目。看完觉得很有意思——这正是这种新型职位的一个缩影，值得写出来让更多人知道。&lt;/p&gt;
&lt;h2 id=&quot;claude-corps是什么&quot;&gt;Claude Corps是什么？&lt;/h2&gt;
&lt;p&gt;Claude Corps是一个为期12个月的全额带薪学徒项目（fellowship）——把年轻人送进美国各地的非营利组织工作一年，帮这些机构真正用上AI。&lt;/p&gt;
&lt;p&gt;项目由Anthropic发起——对，就是做Claude的那家公司——并投入&lt;strong&gt;1.5亿美元&lt;/strong&gt;支持。有意思的是，项目发布的同一天，Anthropic CEO Dario Amodei也在官网发表了一篇文章&lt;a href=&quot;https://www.anthropic.com/policy-on-the-ai-exponential&quot;&gt;《Policy on the AI Exponential》&lt;/a&gt;，坦承AI技术可能导致大规模失业，并呼吁对AI公司征税以支持普遍基本收入。一边承认问题，一边真金白银地投入创造新机会——这个组合挺耐人寻味的。&lt;/p&gt;
&lt;p&gt;项目由三方联合运营：Anthropic出钱出技术，CodePath（一家专注技术教育的非营利机构）负责招募、培训和雇用，Social Finance负责项目管理。&lt;/p&gt;
&lt;p&gt;待遇很不错：&lt;strong&gt;年薪$85,000&lt;/strong&gt;，全额医疗、牙科、视力保险，401(k)，带薪假期，还有最高$2,500的Claude API额度。是正式全职员工，不是实习生。&lt;/p&gt;
&lt;h2 id=&quot;谁能申请&quot;&gt;谁能申请？&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;18岁以上&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;全职工作经验不足两年&lt;/strong&gt;（硬条件）&lt;/li&gt;
&lt;li&gt;有美国工作授权（不提供签证担保，F-1 OPT不符合）&lt;/li&gt;
&lt;li&gt;日常已在使用AI工具&lt;/li&gt;
&lt;li&gt;曾为某个社区或问题采取过实际行动&lt;/li&gt;
&lt;li&gt;愿意根据需要搬迁（提供搬迁补助）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;关键一点：&lt;strong&gt;不需要编程背景，不需要大学文凭&lt;/strong&gt;。他们要的是真的在用AI、学得快、能沟通、关注社会议题的年轻人。&lt;/p&gt;
&lt;h2 id=&quot;做什么学什么&quot;&gt;做什么，学什么？&lt;/h2&gt;
&lt;p&gt;学徒们在非营利组织内部全职工作一年，涉及领域包括教育、公共卫生、难民服务、食品安全、社区发展、环境保护等。具体项目因组织而异，核心是用AI解决真实问题——搭建自动化流程、开发内部工具、创建数据看板，帮助员工真正理解和使用AI。&lt;/p&gt;
&lt;p&gt;简单说，这是一个由Anthropic出钱、提供技术支持，让年轻人在真实项目中实战的联合培养计划。&lt;/p&gt;
&lt;p&gt;培训方面：申请时就要完成两个Anthropic在线课程（AI Fluency + Claude 101）；入职第一周在旧金山集训；fellowship期间每周约五小时结构化培训，贯穿全年。全程有Anthropic技术联系人和CodePath导师支持。&lt;/p&gt;
&lt;p&gt;一年后你将带走：真实的AI项目经验、一个从头到尾自己负责的交付成果、Anthropic的背书，以及一个遍布全美的fellow网络。&lt;/p&gt;
&lt;h2 id=&quot;申请流程&quot;&gt;申请流程&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;在线填写申请表，包含两道简答题&lt;/li&gt;
&lt;li&gt;完成两个Anthropic在线课程（AI Fluency + Claude 101）&lt;/li&gt;
&lt;li&gt;通过初审后，完成一份带回家的技能评估&lt;/li&gt;
&lt;li&gt;25分钟团队面试&lt;/li&gt;
&lt;li&gt;两轮终面&lt;/li&gt;
&lt;li&gt;与2-3个host组织面试，双向匹配确认去处&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;时间和地点&quot;&gt;时间和地点&lt;/h2&gt;
&lt;p&gt;第一批（Cohort 1）计划招募约&lt;strong&gt;100人&lt;/strong&gt;，&lt;strong&gt;2026年10月19日&lt;/strong&gt;开始，&lt;strong&gt;申请截止2026年7月17日&lt;/strong&gt;。整个项目三批共1000人，后续批次分别于2027年1月和8月启动。&lt;/p&gt;
&lt;p&gt;目前确认的host组织遍布全美，包括芝加哥（Braven）、纽约（国际救援委员会）、奥克兰（Code for America）、波士顿（Year Up United）等。第一批全部线下，后续批次将有混合和远程选项。&lt;/p&gt;
&lt;p&gt;申请链接：&lt;a href=&quot;https://www.anthropic.com/claude-corps&quot;&gt;https://www.anthropic.com/claude-corps&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;还有哪些类似机会&quot;&gt;还有哪些类似机会？&lt;/h2&gt;
&lt;p&gt;Claude Corps不是孤例，AI时代正在催生越来越多这类项目：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bolder Futures Fellowship&lt;/strong&gt;：Micron赞助，完全远程，12周带薪，将AI技能应用于非营利项目，申请截止2026年6月30日。&lt;a href=&quot;https://bolderfutures.org/fellowships/ai-for-social-good/&quot;&gt;了解更多&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Anthropic Fellows Program&lt;/strong&gt;：Anthropic自己的4个月全额资助研究fellowship，聚焦AI安全、治理和机器学习研究，面向有研究背景的申请者，滚动招募。&lt;a href=&quot;https://www.anthropic.com/careers&quot;&gt;了解更多&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cambridge ERA:AI Research Fellowship&lt;/strong&gt;：英国剑桥，10周，全额资助（含住宿餐饮），专注AI安全与治理研究，2026年7月6日开始。&lt;a href=&quot;https://erafellowship.org/fellowship&quot;&gt;了解更多&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;AI在取代一些工作，但也在创造新的需求。能把AI真正用到实处的人，未来几年只会越来越值钱。Claude Corps是一个有结构、有支持、有真实项目的起点，这样的机会不多见。&lt;/p&gt;
&lt;p&gt;如果你符合条件，认真考虑一下。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;不断学习AI、在真实项目中用起来——相信未来会有越来越多类似的机会。&lt;/strong&gt;&lt;/p&gt;
</content:encoded><category>Tech</category><category>AI</category><category>Career</category><category>Anthropic</category><category>Fellowship</category><category>Nonprofit</category></item><item><title>从智能卡到 AI Agent：我为什么做 ASys</title><link>https://vincentping.com/cn/why-i-built-asys/</link><guid isPermaLink="true">https://vincentping.com/cn/why-i-built-asys/</guid><description>记录 ASys 的诞生故事：从智能卡 APDU 协议到专为 AI Agent 设计的二进制系统接口，探讨为什么 AI 运维需要一个全新的通信标准。</description><pubDate>Sun, 07 Jun 2026 22:44:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;ASys（Agentic System Interface）是一个专为 AI Agent 设计的开源系统接口协议——用二进制指令替代文本命令，用长连接替代每次重新握手，用指令级权限替代宽泛的会话权限。这篇文章讲的是它从哪里来，为什么这样设计。&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;去年用 Claude 辅助写代码，感觉像带一个记性很差的实习生。上下文一长就会开始漂移，重启 Session 要好几个回合才能找回状态，前面约好的接口后面就忘了。&lt;/p&gt;
&lt;p&gt;今年一二月再试，用 Claude Code 写 &lt;a href=&quot;/cn/built-a-study-tool-while-preparing-for-comptia-a-plus-now-open-source&quot;&gt;ReCall&lt;/a&gt;——一个基于 PySide6
的桌面题库工具，有配置、UI、数据库、i18n、主题系统、测试，最后还要打包成 Windows 可执行文件。功能不多，但桌面程序开发该有的基本都齐了。这次感觉完全不同了：不是 AI 替我写，依然是我在主导，但 Claude 已经跟得上。说要做什么，它能准确理解；出来的代码基本能用；即使偏了，纠正一下也很快能调回来。&lt;/p&gt;
&lt;p&gt;前后两次，AI 的进步很明显。&lt;/p&gt;
&lt;p&gt;回头看，LLM 目前真正落地的领域：文字处理，以及开发。这两个领域有个共同点：&lt;strong&gt;都是做完就结束的事&lt;/strong&gt;——一篇文章写完发出去，一个功能交付上线，这件事就画句号了。但系统的运维不一样，系统上线之后是实时的、有状态的，问题随时会来，没有“做完”这一说。那是完全不同的一个世界。&lt;/p&gt;
&lt;p&gt;备考 A+ Core 2 那段时间，白天复习刷题，晚上写代码，脑子里一直转一个问题：&lt;strong&gt;AI 辅助开发越来越成熟——那运维呢？&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;当操作者变成了-ai&quot;&gt;当操作者变成了 AI&lt;/h2&gt;
&lt;p&gt;AI 把开发速度拉成指数级之后，存量的积累速度也跟着加快了。每部署一个新服务，就多了一个需要长时间甚至永久维护的对象——这就成了存量。系统不会自己消失，问题会积累，复杂度会叠加。可以这么想象下：运行中的系统整个是一个大湖，开发中的新系统是众多不断涌入的河流。随着河流的数量越来越多、河流中水流的速度越来越快，大湖的扩展速度将超过我们的想象。&lt;/p&gt;
&lt;p&gt;但人工运维是线性的——一个工程师能维护的系统是有限的，就算是有各种工具的帮助，人工运维也跟不上指数级的积累速度。往前看，能接这个盘的只有 AI 运维。&lt;/p&gt;
&lt;p&gt;但 AI 运维要成立，有一个前提需要解决：接口。&lt;/p&gt;
&lt;p&gt;从 POSIX 到 SSH、从 Ansible 到 K8s Operator——这些成熟的工具，每一个都经过了大规模生产验证，在各自的场景下运转良好，还会继续运转很久。但它们的设计前提都是人类操作员。当操作主体变为 AI Agent 时，有几个问题值得从头思考：文本解析随时可能因格式变化而失效；会话级权限对可能产生幻觉的 Agent 风险太高；高频采样时每次握手的开销会成为瓶颈。&lt;/p&gt;
&lt;p&gt;比如“猜文本”的代价。Agent 通过 SSH 执行 &lt;code&gt;ps aux | grep nginx&lt;/code&gt;，拿到的是自由文本——格式会因 OS、locale 和工具版本而异，还得自己解析，每一段可能失效的正则表达式都是一个潜在的幻觉入口。但调用 ASys 的 &lt;code&gt;SYS_PROCS&lt;/code&gt; 指令，拿到的是固定的 44 字节二进制帧：进程总数、top-5 PID、CPU%、内存%、状态标志——类型明确，无歧义，在每个节点上都一样。解析逻辑是一行 &lt;code&gt;struct.unpack&lt;/code&gt;。这不只是性能问题，更重要的是可靠性的量级提升。当解析的负担趋近于零时，Agent 几乎全部的算力就可以用在真正重要的事上：感知、推理、决策。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20260607/text-vs-binary-frame-cn.jpg&quot; alt=&quot;文本解析 vs 二进制帧&quot;&gt;&lt;/p&gt;
&lt;p&gt;ASys 不是要替代这些工具，只是想探索一个问题：如果专门为 Agent 设计，从第一性原理出发，接口应该长什么样？多一个选择而已。&lt;/p&gt;
&lt;p&gt;开源地址：&lt;a href=&quot;https://github.com/vincentping/asys&quot;&gt;github.com/vincentping/asys&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;asys-从哪里来&quot;&gt;ASys 从哪里来&lt;/h2&gt;
&lt;p&gt;2010 到 2016 年，我在上海的一家智能卡公司做开发——SIM 卡、银行卡、身份证芯片。那个行业有一条铁律：&lt;strong&gt;卡发出去了，没法收回。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;智能卡的开发流程是先写规范，基于规范开发，基于规范测试：功能测试、异常测试、边界覆盖……内部测试完了，还要去电信服务商进行现场测试。繁琐、周期长，但没有别的选择：产品一旦量产出去发现 bug，召回成本是灾难。这和互联网的“边跑边迭代”开发风格，是两种完全不同的哲学。那六年给我留下最深的东西不是某项技术，而是一种本能：&lt;strong&gt;把事情想清楚写清楚，比快速动手更重要。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;那六年也让我对很多协议很熟悉，尤其是 ISO/IEC 7816，智能卡通信的 APDU 体系。读卡器向智能卡发二进制指令，拿到固定格式的响应，不需要经过人眼，也从不解析文本。返回 &lt;code&gt;0x9000&lt;/code&gt; 就是成功，返回 &lt;code&gt;0x6982&lt;/code&gt; 即 Security status not satisfied，几十年没变过。这套协议覆盖了全球数百亿设备——每一张银行芯片卡、每一本电子护照、每一张 SIM 卡。它的每一个边界条件，都经过了最严苛的实战验证。&lt;/p&gt;
&lt;p&gt;2016 年之后，我离开了智能卡行业，后来一直在做各种大大小小的网站系统——前端 JS、后端 Python/Go/Java，数据库、服务器、缓存、各种云、各种架构。&lt;/p&gt;
&lt;p&gt;过去一年多又一直在学习 AI，并尝试用 Claude 开发各种项目。随着对 AI 越来越了解，我逐渐相信：&lt;strong&gt;AI 会像工业革命一样彻底改变人类的走向&lt;/strong&gt;。所以，当我完成 ReCall 这个项目后，我就一直在思考做点什么与 AI 相关的事。&lt;/p&gt;
&lt;p&gt;有天晚上，我记得是二月底，复习得很晚了，刚躺下，迷迷糊糊的，脑子里突然冒出了 7816 的 APDU——那些自带美感的二进制指令，固定格式的响应。我一激灵坐了起来：&lt;strong&gt;对呀，为什么不用 APDU 的方式让 Agent 和服务器沟通呢？还要把人类的文本加在中间干嘛？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;当晚就把 7816 协议下载下来重新翻了一遍，写了个简单的文档，把初步想法记下来。&lt;/p&gt;
&lt;p&gt;智能卡那六年、网站系统那十年、加上这一年多的 AI 实践——缺了哪一块，都不会在那个迷糊的夜晚把这几样东西联系起来。智能卡的老同事们大多还在嵌入式的世界里；做网站系统的朋友又很少有底层协议设计的背景。也许这就是人们说的，多样性带来涌现。有了这个 idea 不试试可惜了。&lt;/p&gt;
&lt;h2 id=&quot;三个月从零到开源&quot;&gt;三个月，从零到开源&lt;/h2&gt;
&lt;p&gt;今年三月初，A+ Core 2 还没考完，我就开始动手了。&lt;/p&gt;
&lt;p&gt;按智能卡时代养成的习惯，先写文档。从接口设计哲学，到指令集编码，到安全模型，到帧格式，每一块想清楚再写，写着写着发现没想清楚，回去再想。3 月 16 日，文档 v0.1 出来，同一天第一个 PoC 在 Windows 机器和 RHEL 服务端跑通：&lt;code&gt;SYS_HELLO&lt;/code&gt; 指令，返回 &lt;code&gt;0x9000 OK&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;等到考试考完，项目推进就加快了，文档和代码交替迭代。写代码，发现设计有问题，回去改 spec，再继续。不是推倒重来，是不停打磨。&lt;/p&gt;
&lt;p&gt;这个过程里有几个决策点，每个都卡了一段时间。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;传输层：为什么不用 mTLS&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;传输层是第一个让我卡住的地方。本能反应是 mTLS，行业常见方案，用的人多，出了问题好查。但越想越不对。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;asyd&lt;/code&gt; 是 ASys 协议的服务端 Daemon，核心用途之一是在系统 OOM、磁盘满这种极端情况下还能用——恰恰是最需要它的时候。如果这时候因为证书过期、CA 连不上而失联，一个在急救时刻失联的接口，比没有接口更危险。而且 OpenSSL 是重量级依赖，和零外部依赖的设计目标根本冲突。&lt;/p&gt;
&lt;p&gt;最终选了 &lt;strong&gt;Noise Protocol IK&lt;/strong&gt;，基于 Monocypher 实现。纯密码学原语，无证书依赖，实现约两千行 C，可以完整审计，1-RTT 握手。这个选择让 &lt;code&gt;asyd&lt;/code&gt; 可以做到单一静态二进制，任何 POSIX 环境都能部署，不带任何运行时风险。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;权限模型：让不该存在的东西真的不存在&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;权限这块卡得更久。最直觉的方案是 ACL 规则表——哪个 Agent 能做什么，配置里写清楚。看上去简单，但不够。&lt;/p&gt;
&lt;p&gt;传统安全模型（SSH/sudo）是为人类操作员设计的——人的操作是探索性的，意图难以预先声明，“宽泛默认权限 + 负向拦截”符合人类的工作方式。但当操作主体变为 AI Agent，这个假设不再成立：Agent 的行为是程序化的，权限边界完全可以在部署时精确声明。&lt;/p&gt;
&lt;p&gt;所以 ASys 可以反过来：系统对 Agent 是一片漆黑，只有在 &lt;strong&gt;Capability Map&lt;/strong&gt; 中显式点亮的指令才“物理存在”。Agent 没被授权的操作，不是“你没权限”，而是“这个指令在你的世界里根本不存在”——未注册的指令在解包阶段直接丢弃，不进入任何执行流。&lt;/p&gt;
&lt;p&gt;用位图还有一个额外的好处：防侧信道攻击。如果先查权限再查存在性，攻击者可以通过响应时间的微小差异推断哪些指令“存在但被禁用”。Capability Map 强制先查存在性——所有未授权操作的响应时间完全一致，消灭信息泄露面。&lt;/p&gt;
&lt;p&gt;最小权限不是配置选项，是协议的物理属性。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20260607/capability-map-cn.jpg&quot; alt=&quot;Capability Map — 让未授权操作不存在&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;指令集：怎么组织 256 个槽位&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;指令集的组织方式反而想得比较快，因为有现成的参照——APDU。&lt;/p&gt;
&lt;p&gt;帧格式直接借鉴：&lt;code&gt;[CLA][INS][P1][P2][Lc][Data][Le]&lt;/code&gt;。INS 字节的高位半字节作为逻辑页索引——&lt;code&gt;0x00–0x0F&lt;/code&gt; 是 Core ISA，基础观测指令，永久锁定；&lt;code&gt;0x20–0x8F&lt;/code&gt; 是 Standard ISA，七个功能组；&lt;code&gt;0xC0–0xFF&lt;/code&gt; 是 Vendor Extensions，留给各领域自定义。&lt;/p&gt;
&lt;p&gt;任何开发者看到指令码就知道分组，&lt;code&gt;0x2x&lt;/code&gt; 一眼是 Process Control，不需要查表。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20260607/ins-byte-layout-cn.jpg&quot; alt=&quot;ASys 指令集结构 — INS 字节布局&quot;&gt;&lt;/p&gt;
&lt;p&gt;更重要的是 Core ISA 的语义锁定：核心指令一旦发布，字节偏移永远不变，新字段只能在末尾扩展。今天写的 Agent 解析代码，期望是在 50 年后的某个 POSIX 兼容系统上还有效。APDU 协议体系能覆盖数百亿设备，正是因为这种长期主义。ASys 想继承的，也是这个。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;跑通 OODA&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;5 月底，在 RHEL 上跑通了完整的 OODA 闭环演示：RHEL 服务端运行 CPU hog 触发负载异常，位于 Windows 系统上的 Python 客户端依次调用 &lt;code&gt;SYS_STATUS&lt;/code&gt; 发现异常、&lt;code&gt;SYS_PROCS&lt;/code&gt; 定位进程、&lt;code&gt;PROC_THROTTLE&lt;/code&gt; 压制、再次 &lt;code&gt;SYS_STATUS&lt;/code&gt; 核实恢复，全程 &lt;code&gt;0x9000&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;那一刻的感受不是“成了”，而是“证明可行了”。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20260607/ooda-loop-cn.jpg&quot; alt=&quot;OODA 闭环 — Agent 自主运维演示&quot;&gt;&lt;/p&gt;
&lt;p&gt;5 月 27 日，v0.3.0 开源。从三月初构思到开源，三个月。&lt;/p&gt;
&lt;h2 id=&quot;现在在哪里&quot;&gt;现在在哪里&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/vincentping/asys&quot;&gt;github.com/vincentping/asys&lt;/a&gt; 现在是 v0.3.1。&lt;/p&gt;
&lt;p&gt;目前稳定实现：Core ISA 四条观测指令（&lt;code&gt;SYS_CAPS&lt;/code&gt; / &lt;code&gt;SYS_HELLO&lt;/code&gt; / &lt;code&gt;SYS_STATUS&lt;/code&gt; / &lt;code&gt;SYS_PROCS&lt;/code&gt;）、首批 Standard ISA 操控指令（&lt;code&gt;PROC_THROTTLE&lt;/code&gt; / &lt;code&gt;SVC_RESTART&lt;/code&gt; / &lt;code&gt;TASK_QUERY&lt;/code&gt;）、完整的 Noise IK 加密通道、公钥白名单身份验证、Epoch_ID 防重放机制。&lt;/p&gt;
&lt;p&gt;接下来最重要的是 &lt;strong&gt;Python SDK&lt;/strong&gt;：面向 AI Agent 开发者，目标是能直接嵌入 LangChain、AutoGen 这类主流 Agent 框架。核心设计原则是 Agent 永远不直接操作字节层——调用结构化接口（&lt;code&gt;sdk.proc_throttle(pid=1234, action=&quot;stop&quot;)&lt;/code&gt;），SDK 负责参数校验和二进制编译。LLM 对字节偏移天然不敏感，让 Agent 直接拼 APDU 参数是错误的使用方式。&lt;/p&gt;
&lt;p&gt;还有一些已规划但尚未实现的功能：per-Agent 细粒度 Capability Map、审计黑匣子、链式传输。这些都在规范里，会逐步落地。&lt;/p&gt;
&lt;h2 id=&quot;一点感受&quot;&gt;一点感受&lt;/h2&gt;
&lt;p&gt;一个人做协议，听上去有点异想天开。&lt;/p&gt;
&lt;p&gt;协议通常是委员会的事——需要多方共识，需要大量案例输入，需要反复论证边界条件。但既然这个 idea 冒出来了，那就试试吧。一个人做的好处是决策可以很快，坏处是没有外部压力强迫你把每个角落想清楚。&lt;/p&gt;
&lt;p&gt;我的应对方式是：文档比代码优先。白皮书、规范文档、设计 Notes、实施 Notes，这些花了我比代码多得多的时间。因为文字是最好的思维工具——写不清楚，说明想不清楚；想不清楚，代码写出来迟早要推倒。这是智能卡那六年给我的东西，在这个项目里用上了。&lt;/p&gt;
&lt;p&gt;ASys 是一个探索性项目，不是 SSH 的替代品，不是 Ansible 的竞争者。它试图填的空白是：当 Agent 需要高频、低延迟、可审计地操控系统，且要在极端场景下保持接口可用时，目前没有一个专门为这个场景设计的标准化方案。&lt;/p&gt;
&lt;p&gt;值不值得解决，见仁见智。但我认为，随着 Agent 越来越多地进入生产系统，“Agent 和系统之间的接口应该是什么样的”是一个值得认真对待的问题——不应该只是在 SSH 上套一层 LLM 就算了。&lt;/p&gt;
&lt;p&gt;如果 ASys 能引发一些这方面的讨论，已经足够。&lt;/p&gt;
&lt;p&gt;对了，ASys 默认监听的我特意选择了 &lt;strong&gt;7816 端口&lt;/strong&gt;。这是我内心对 ISO/IEC 7816 的致敬——智能卡通信协议的标准编号。每次想起这个数字，就想起十几年前那一大堆规范——7816、14443、EMV、PBOC、UICC、RSA……趴在上面研究的日子。&lt;/p&gt;
</content:encoded><category>Tech</category><category>ASys</category><category>AI Agent</category><category>Binary Protocol</category><category>System Design</category><category>Smart Card</category><category>Open Source</category></item><item><title>林肯公园的格兰特</title><link>https://vincentping.com/cn/grant-in-lincoln-park/</link><guid isPermaLink="true">https://vincentping.com/cn/grant-in-lincoln-park/</guid><description>林肯公园曾是芝加哥的城市公墓，如今格兰特将军的铜像立于此地已逾百年。从1892年的雷击到2020年的纪念碑审查委员会，这座铜像经历了它不需要解释的一切。移走纪念物不等于移走历史，有时只是给当代人一种虚假的清洁感。历史的复杂性无法被一块铜化解，也无法被移除一块铜来解决。</description><pubDate>Fri, 05 Jun 2026 22:45:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20260605/cover.jpg&quot; alt=&quot;林肯公园&quot;&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; font-style: italic;&quot;&gt;林肯公园，远处是市区&lt;/p&gt;
&lt;p&gt;林肯公园里曾经埋着三万多具尸体。&lt;/p&gt;
&lt;p&gt;1850年代之前，这片湖边绿地是芝加哥的城市公墓。后来城市扩张，市政府决定把死人挪走，把土地还给活人。遗体被迁走了大部分，但没有人能保证迁干净了。今天慢跑者踩过的草坪，野餐者铺毯子的地方，孩子们追松鼠的小径——下面可能还睡着几个19世纪的芝加哥人，姓名不详，迁移令没能找到他们。&lt;/p&gt;
&lt;p&gt;1865年林肯遇刺，这片绿地以他的名字重新命名。死亡与纪念，这个公园从一开始就没打算假装生活是轻松的。&lt;/p&gt;
&lt;p&gt;我今天是专门来看格兰特的雕像的。闷在家里和Claude Code纠缠了好几天，它心情好的时候让我写代码觉得自己是超人无所不能，心情差的时候又像一堵墙，死劲撞也撞不开。出来透透气。&lt;/p&gt;
&lt;p&gt;尤利西斯·格兰特将军——后来他成了总统——死于1885年7月。他在生命最后几个月里跟喉癌赛跑，拼命写完回忆录，想给妻子留点版税钱。马克·吐温替他出版，后来成了美国出版史上回报最丰厚的合同之一，但格兰特本人没活到看见版税支票。他死后四天，纽约举行了他的葬礼，百万人站在街边送行。&lt;/p&gt;
&lt;p&gt;芝加哥市民决定为他立一座铜像。消息传出后，不到一个月，数万美元从这座城市各个角落汇集过来，捐款人数将近十万。1891年雕像揭幕那天，大约二十万人到场——那时芝加哥全市人口也不过一百万出头，相当于每五个芝加哥人里就有一个到了现场。&lt;/p&gt;
&lt;p&gt;我站在雕像前，抬头看格兰特骑在马上的姿势。他没有摆出那种常见的凯旋姿态，手臂没有挥向远方，马也没有前蹄腾空。他只是坐在马背上，神情沉静，像一个已经无需证明任何事情的人。&lt;/p&gt;
&lt;p&gt;雕像落成次年，1892年，雷击中了这里。闪电劈在基座拱门附近，三个避雨的人当场死亡，而铜像完好无损。&lt;/p&gt;
&lt;p&gt;这个细节我不知道该怎么解读，但它一直留在我脑子里。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20260605/grant1.jpg&quot; alt=&quot;格兰特雕像&quot;&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; font-style: italic;&quot;&gt;格兰特将军雕像&lt;/p&gt;
&lt;p&gt;公园里还有一座建筑值得一提，虽然大多数人路过时根本不会多看一眼——那是1888年建造的卡尔森小屋，最初是公共厕所，男女分区，砖石结构，设计者是建筑师约瑟夫·莱曼·希尔斯比。希尔斯比的事务所曾经有个年轻学徒，叫弗兰克·劳埃德·赖特，后来成了二十世纪最重要的建筑师之一。&lt;/p&gt;
&lt;p&gt;一座公共厕所，出自后来影响了二十世纪建筑语言的那个事务所。&lt;/p&gt;
&lt;p&gt;2008年，联邦政府通过「拯救美国的宝藏」项目资助了小屋的修复工程。官僚机构偶尔会做出让人意外的事——他们决定修一座1888年的公厕，因为它是历史。这个逻辑我接受。&lt;/p&gt;
&lt;p&gt;只是修好之后，它不再开放为厕所，变成了某种活动场地，平日里静悄悄地锁着门。历史被保住了，功能却死了。这个结局有些奇怪——像是把一个人完好地保存下来，却抽走了他活着的用处。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20260605/carlson_cottage.jpg&quot; alt=&quot;卡尔森小屋&quot;&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; font-style: italic;&quot;&gt;卡尔森小屋，石头上的铭牌介绍了它的来历&lt;/p&gt;
&lt;p&gt;2020年，芝加哥市长莱特福特在全美范围内的历史清算浪潮里，组建了「芝加哥纪念碑项目」。起因是哥伦布雕像被示威者推倒，或者说被市政府抢在推倒之前悄悄移走——取决于你看哪份报道。这个委员会的任务是审查全市的纪念碑和公共艺术，评估哪些应该保留，哪些应该移除，哪些历史叙事被排除在公共记忆之外。&lt;/p&gt;
&lt;p&gt;这件事本身没有什么可挑剔的。一座城市定期审视自己竖起了什么、纪念了谁，是正常的公共程序。公共空间里的纪念碑本来就不是中立的，每一座都是某个时代、某群人做出的选择，都在无声地告诉路过的人：这个人或这件事值得你记住。&lt;/p&gt;
&lt;p&gt;格兰特的雕像在审查名单里。&lt;/p&gt;
&lt;p&gt;理由是他曾签署过对美国原住民不公正的政策，任总统期间的西部扩张政策导致了原住民部落的强制驱逐和文化毁灭。这些都是事实。&lt;/p&gt;
&lt;p&gt;但格兰特同样是内战中击败南方邦联军的联邦军总司令，是在他的军事压力下，南方的李将军投降、奴隶制度军事上走向终结的那个人。重建时期，他是少数真正尝试保护黑人公民权利的总统之一，动用联邦力量镇压了三K党。他死前那场与死亡赛跑的写作，后来被海明威称为最好的战争回忆录之一。&lt;/p&gt;
&lt;p&gt;一个人可以同时是这两类：某种正义的推进者，和另一种不义的执行者。&lt;/p&gt;
&lt;p&gt;我不认为纪念碑委员会的存在本身有问题，也不认为审视历史等同于清洗历史。但对那种认为移除一座铜像能够修复历史创伤的逻辑，我始终将信将疑。&lt;/p&gt;
&lt;p&gt;那三万具曾经埋在林肯公园地下的遗体，不会因为公园改了名字而改变它们曾经的位置。移走纪念物也不等于移走了历史本身，有时候反而是在给当代人一种虚假的清洁感——好像问题处理掉了，而实际上只是从你眼里消失了。&lt;/p&gt;
&lt;p&gt;格兰特的雕像最终没有被移除。报告建议保留，同时增加解说牌，以提供更完整的历史语境。我觉得这已经算是体面的收场——不是因为它让所有人满意，而是因为它承认了历史的复杂性无法被一块铜化解，也无法被移除一块铜来解决。当然，我今天又在雕像拱门的前前后后、上上下下转了一圈，没有看到解说牌，可能它正在制作的途中。&lt;/p&gt;
&lt;p&gt;我在雕像附近坐了很久。湖风从密歇根湖那边吹过来，公园里有人遛狗，有孩子骑车，远处小湖边还有人在举行婚礼，隐隐能听到人们的欢笑和喧哗。&lt;/p&gt;
&lt;p&gt;格兰特骑在马背上，左侧是密歇根湖，面朝南方的城市。有人说，这代表将军正警惕地注视着当年的南方邦联，象征着国家的统一与胜利，但他的神情我刚才说是沉静，现在我想换个词——是那种见过太多事情之后的疲倦，不是那种消极的疲倦，而是已经不需要再向任何人解释自己的疲倦。&lt;/p&gt;
&lt;p&gt;1892年的那道闪电劈死了三个人，没有碰他。&lt;/p&gt;
&lt;p&gt;我不知道这说明什么。但当一座城市用一个月时间、十万人的捐款造出来的东西，在一百三十年后还站在那里——我愿意在它旁边多坐一会儿。&lt;/p&gt;
&lt;p&gt;脚下可能还有几个没被迁走的19世纪芝加哥人。这也没什么不好。&lt;/p&gt;
&lt;p&gt;死人和铜像都比我们想象的更有耐心。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20260605/grant2.jpg&quot; alt=&quot;格兰特雕像&quot;&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center; font-style: italic;&quot;&gt;格兰特将军雕像&lt;/p&gt;
</content:encoded><category>Others</category><category>芝加哥</category><category>林肯公园</category><category>历史</category><category>公共记忆</category><category>纪念碑</category><category>散文</category></item><item><title>不买 Bunkie Board：用胶合板解决床架 Slats 间距问题</title><link>https://vincentping.com/cn/plywood-bed-slats-bunkie-board-alternative/</link><guid isPermaLink="true">https://vincentping.com/cn/plywood-bed-slats-bunkie-board-alternative/</guid><description>床架木条间距3.5英寸，超出Simmons质保要求，Box Spring、Bunkie Board、Foundation逐一排除之后，最终用两张Home Depot的胶合板裁切铺底，$108解决问题。附裁切尺寸、kerf细节和Home Depot沟通话术。</description><pubDate>Mon, 01 Jun 2026 10:40:00 GMT</pubDate><content:encoded>&lt;p&gt;因为搬家，需要一张新床。&lt;/p&gt;
&lt;p&gt;首先是床架，在 Bob’s Discount Furniture 订了一个带储物抽屉 King Size 的实木床架。&lt;/p&gt;
&lt;p&gt;而床垫则是是从 Wayfair 订的，Simmons 公司生产的 Beautyrest Silver BRS900，Extra Firm，里面是用袋装弹簧。顺便说一声，Simmons 公司名就是国内弹簧床垫经常叫“席梦思”这个品名的由来。&lt;/p&gt;
&lt;p&gt;我喜欢硬床感。那种很扎实、背部有支撑、翻身不陷进去的感觉。Extra Firm就是冲这个买的。&lt;/p&gt;
&lt;p&gt;床架搬进去，负责搬运和安装的 Bob’s 两位白手套师傅都跟我说了同一句话，“这张床真的很重”。等安装好，我试了试，确实很沉很结实。&lt;/p&gt;
&lt;p&gt;可是床架上面铺着的木条，间距有点大，一测量，每根木条本身是2.5英寸宽、0.6英寸厚，但是两根之间的缝有差不多3.5英寸。&lt;/p&gt;
&lt;p&gt;如果等床垫到了直接放上去，肯定不行。因为弹簧床垫每一个弹簧都是独立装在布袋里的，它们之间没有硬钢丝连成网。我这个型号的床垫按照弹簧数量计算了下，弹簧袋的直径基本就是2.1英寸左右。如果木条空隙太宽，所有弹簧都会受到影响：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;正好位于空隙上方的那些独立弹簧，会因为底下悬空失去支撑，直接不受力，往下塌陷&lt;/li&gt;
&lt;li&gt;半悬空的弹簧，会因为受力不均，容易扭曲变形&lt;/li&gt;
&lt;li&gt;对于那些刚好完全落在木条上的弹簧，也会因为独自支撑了太多重量，提前老化失去弹性，缩短使用寿命。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这不仅会导致床垫表面很快变得凹凸不平、内部结构损坏，而且一旦空隙超过 2 英寸，Simmons 官方是直接拒绝质保（Void Warranty）的，其官方质保政策（Warranty Instructions）中明确规定：床条之间的净空隙不能超过 2 英寸。&lt;/p&gt;
&lt;p&gt;怎么办？&lt;/p&gt;
&lt;h2 id=&quot;美国床-vs-中国床&quot;&gt;美国床 VS 中国床&lt;/h2&gt;
&lt;p&gt;在国内的时候，从来没想过“床垫支撑”这件事。&lt;/p&gt;
&lt;p&gt;那时候床是什么样的？最早的时候是床架加实木床板，然后垫上褥子，铺上床单就行。后来还睡过棕绷床垫，睡起来都是硬邦邦的。老人说这样好，对骨头好，对脊椎好。当然现在大家也都用床垫了，但床架上的实心床板一直都在。在国内，支撑这事从来不是问题，根本不需要操心。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20260601/chinese_bed_system.jpg&quot; alt=&quot;中国床的样子&quot;&gt;&lt;/p&gt;
&lt;p&gt;到了美国才发现，这边完全不同。美国最普遍的床基本都是三层结构：床架 + Box Spring + 床垫。&lt;/p&gt;
&lt;p&gt;床架本身就是床框和床脚，然后横向加几根稀疏的木条。&lt;/p&gt;
&lt;p&gt;因为这样撑不住床垫，中间就加个 Box Spring。这玩意最早就是一个装了弹簧的木箱子，相当于一个简单的弹簧床垫，做成 Box 样子，主要是用作让床垫睡起来比较有弹性，同时增加床的总高度。到现在，绝大多数 Box Spring 已经没有 Spring 了，替代成顶部有一层比较密的横向木条（Slats），外面再裹上一层标志性的针织布，但还是做成一个 Box 的样子。&lt;/p&gt;
&lt;p&gt;所以美国的床一般都比较高，Box 最初也有增加床高度的作用。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20260601/us_bed_system.jpg&quot; alt=&quot;美国床的样子&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;市面上的选项&quot;&gt;市面上的选项&lt;/h2&gt;
&lt;p&gt;回到问题，我这种情况该怎么办？&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Box 排除&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;首先想到的是，加一层 Box？ 可是现在 Box 里面的木条间隔基本也在 2-3 英寸，加上去完全没意义。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Bunkie Board 排除&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;找 AI 帮忙想办法，它推荐买一个 Bunkie Board。&lt;/p&gt;
&lt;p&gt;在网上搜了很多，感觉这东西应该就是专门为这种情况设计的，放在床架和床垫之间，解决支撑问题。但仔细看了市面上大量产品之后，发现不好。&lt;/p&gt;
&lt;p&gt;Bunkie Board 分两种。一种是木条式，内部还是木条加布罩，间距1到2英寸，比床架稍微密一点，但本质上还是有缝。另一种是实心板式，内部是一块板，外面包层布。&lt;/p&gt;
&lt;p&gt;照说实心板式可以，但是仔细一看，我发现材质都比较差，基本都是particleboard（刨花板）或者 MDF，味道重不说，遇潮就会膨胀变形，寿命只有5到10年。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Foundation 排除&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;然后 AI 还推荐了 Foundation。 查了下市面上卖的 Foundation，其实和现在不带弹簧的 Box Spring 差不多，同样高度，外面包布，里面是木框架，没有弹簧，木条间距比Box Spring密一点，大概1到2英寸，价格还要$200-$400，排除。&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;加装木条 排除&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;这是DIY的思路，在现有木条之间加装更多木条，把3.5英寸的间距缩小到1到2英寸。理论上可行。但King Size床架内径76英寸，不是标准尺寸，需要定制裁切，买回来还要逐根安装固定，确保每条间距均匀。工程量不小，容错率也低。算了。&lt;/p&gt;
&lt;h2 id=&quot;最后的选择胶合板&quot;&gt;最后的选择：胶合板&lt;/h2&gt;
&lt;p&gt;就是自己做一个床板，买几张胶合板，裁成床的尺寸，平铺在木条上，床垫再放胶合板上面。实心的，100%均匀支撑。说到底，跟国内的实木床板是同一个逻辑，只是换了个材料。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;去Home Depot，手把手说清楚&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我去的是芝加哥 North Ave 那家Home Depot。工作日白天10点到2点去，锯木台人最少，等待时间短。&lt;/p&gt;
&lt;p&gt;买了两张 SANDEPLY 12mm Sande Plywood，1/2 in. x 4 ft. x 8 ft.，选表面 Sandy 打磨过的那种，Home Depot卖$53.73。King Size需要两张，合计$107.46。Home Depot 帮忙裁切。另外还买一卷黑色布胶带 Duct Tape，固定几块板子用。&lt;/p&gt;
&lt;p&gt;因为我的床架本身有13根木条，间距相对均匀，跨度3.5inch不算大，所以选1/2英寸的厚度够了，不会变形。&lt;/p&gt;
&lt;p&gt;选好后，用小板车拖到到锯木台，跟师傅说：&lt;/p&gt;
&lt;p&gt;Please cut these TWO 4x8 sheets into FOUR pieces total. Each piece should be 38 inches by 40 inches. Please account for the kerf so the final combined width equals 76 inches. Discard the remaining scraps.&lt;/p&gt;
&lt;p&gt;这里有一个细节，一定要跟师傅说 account for the kerf。 锯片本身有厚度，每切一刀会损耗约1/8英寸，英文叫kerf（锯缝）。如果不考虑这个，两块板子拼起来会差一点点。让师傅自己算，他们熟，比自己算更准。&lt;/p&gt;
&lt;p&gt;King Size是76×80英寸，两张4×8的板子各裁成两块38×40英寸，共四块。&lt;/p&gt;
&lt;h2 id=&quot;运输和安装&quot;&gt;运输和安装&lt;/h2&gt;
&lt;p&gt;之所以要裁切成四块，而不是两块 38x80 英寸的，是因为我的车不够大，80 英寸的放不下。切成四块，把后排座椅放倒，四块板子叠放进去。每块38×40英寸，长度大概1米，不会顶到副驾驶，不会遮挡右侧后视镜，驾驶完全没问题。如果有一辆皮卡，可以切成两块就够了。&lt;/p&gt;
&lt;p&gt;记得在边缘垫块旧毛毯，防止刮到车内塑料件。&lt;/p&gt;
&lt;p&gt;回到家首先把四块板子清洗下，放室外透透气，胶合板还是有点味道的。&lt;/p&gt;
&lt;p&gt;安装很快，直接从床头开始把四块板子平铺上去，四周会自然留下约1英寸的缝隙，有助于透气。再用 Duct Tape 把四块板子之间的十字接缝贴上，防止滑动。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20260601/my_bed.jpg&quot; alt=&quot;最终我的床的样子&quot;&gt;&lt;/p&gt;
&lt;p&gt;床垫到货，直接放上去就好了。&lt;/p&gt;
&lt;h2 id=&quot;实际效果&quot;&gt;实际效果&lt;/h2&gt;
&lt;p&gt;非常稳。&lt;/p&gt;
&lt;p&gt;Extra Firm的硬度感完全出来了，没有任何局部下陷的感觉，翻身、起床，整个支撑面都是实的，两个人睡也不会互相影响。&lt;/p&gt;
&lt;p&gt;这就是我想要的。&lt;/p&gt;
&lt;p&gt;关于透气性的问题也说一下：实心板底部空气流通比木条式差，但床架四周是开放的，空气可以从侧面进来。如果你住的地方比较潮湿，或者容易出汗，可以用电钻每隔6英寸打一个1/2英寸的小孔，透气性大幅改善，结构强度基本不受影响。&lt;/p&gt;
&lt;h2 id=&quot;最后说几句&quot;&gt;最后说几句&lt;/h2&gt;
&lt;p&gt;Bunkie Board和Foundation本质上是“包了布的薄板或木条”，卖的是外观和包装的溢价。胶合板更厚、更结实、更耐用，而且便宜一半以上。如果你的床架是平台床架，原本就不需要Box Spring，这个方案是目前我找到的最性价比的解法。&lt;/p&gt;
&lt;p&gt;费用对比，Bunkie Board $100到$300，Foundation $200到$400，两张Sande Plywood $108，Home Depot裁切免费，完事。&lt;/p&gt;
&lt;p&gt;说到底，这不是什么新发明，就是国内床板逻辑在美国的一次实践。绕了一圈，还是实心床板最管用。&lt;/p&gt;
</content:encoded><category>Others</category><category>DIY</category><category>Home</category><category>Bed</category><category>Plywood</category><category>Bunkie Board</category><category>Mattress</category><category>Home Depot</category><category>King Size</category></item><item><title>WSL2 底层：一个虚拟机、一个文件、一个会变的 IP</title><link>https://vincentping.com/cn/wsl2-under-the-hood/</link><guid isPermaLink="true">https://vincentping.com/cn/wsl2-under-the-hood/</guid><description>装好 WSL2 之后，用着用着就会碰到一些奇怪的问题：Linux 里删了几十 GB，Windows 磁盘纹丝不动；跨系统访问文件，速度慢得离谱；网络脚本昨天还好好的，重启 WSL 就连不上了。这些都不是 Bug，根子在 WSL2 的底层设计——一个特殊的虚拟机、一个装着整个 Linux 的文件、还有一个每次重启都会变的 IP。搞清楚这三件事，那些让人懵的问题就都说得通了。</description><pubDate>Fri, 27 Feb 2026 19:20:00 GMT</pubDate><content:encoded>&lt;p&gt;前面那篇《&lt;a href=&quot;https://vincentping.com/cn/install-a-linux-in-windows-11-in-5-minutes&quot;&gt;Windows 11 下 5 分钟安装 Linux&lt;/a&gt;》介绍了怎么安装、以及怎么用起来。&lt;/p&gt;
&lt;p&gt;装好之后用着用着，我们就会碰到一些奇怪的问题。比如明明 Linux 里删了一堆文件，Windows 磁盘空间怎么没变？再比如，从 WSL2 里访问 Windows 那边的文件，速度慢得出奇？还有，网络脚本昨天还好好的，今天 &lt;code&gt;wsl --shutdown&lt;/code&gt; 一重启就连不上了？&lt;/p&gt;
&lt;p&gt;这些其实都不是 Bug，而是 WSL2 底层设计直接带来的。搞清楚它的一些设计思路，这些问题就能很容易定位解决。&lt;/p&gt;
&lt;h2 id=&quot;它到底是什么类型的虚拟机&quot;&gt;它到底是什么类型的虚拟机&lt;/h2&gt;
&lt;p&gt;我们知道，虚拟机有两种类型，一种Type 1（Bare Metal），直接在硬件上运行多种系统；另一种Type 2，则是在现有操作系统上运行虚拟机。&lt;/p&gt;
&lt;p&gt;相比Type 2， Type 1运行效率更高，适合数据中心服务器；但是Type 2 更灵活，则适合开发测试人员运行的Workstation。&lt;/p&gt;
&lt;p&gt;那Windows里的Linux算哪一种呢？&lt;/p&gt;
&lt;p&gt;乍一看，Windows是在其里面运行Linux，不能单独运行Linux，而且一般我们也是在客户端使用，好像是Type 2。但是它的运行效率确实很高，几乎就像Bare Metal上运行一样。&lt;/p&gt;
&lt;p&gt;实际的情况是，它既不是Type 1，也不是Type 2。或者说，它既有Type 1的效率，也有Type 2 的灵活性。&lt;/p&gt;
&lt;p&gt;WSL2 在 Windows 内部运行着一个&lt;strong&gt;真正的 Linux 内核&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;但这个“虚拟机”跟我们印象里的 VirtualBox、VMware 不一样。它叫 &lt;strong&gt;Utility VM（实用虚拟机）&lt;/strong&gt;，跑在微软自家的 &lt;strong&gt;Hyper-V Hypervisor&lt;/strong&gt; 之上。&lt;/p&gt;
&lt;p&gt;普通虚拟机要模拟一整套硬件：主板、BIOS、显卡驱动、存储控制器，开销很重。WSL2 的 Utility VM 把这些全跳过了：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;不模拟 BIOS&lt;/li&gt;
&lt;li&gt;不加载虚拟硬件驱动&lt;/li&gt;
&lt;li&gt;不预留固定内存&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;它只向 Linux 内核暴露真正必要的东西：CPU 时间、内存页和 I/O 通道。结果是启动很快，而且闲置时内存占用近乎为零。&lt;/p&gt;
&lt;p&gt;所以，如果非要给它分个类：&lt;strong&gt;Type 1.5&lt;/strong&gt;——Hyper-V 打底，但比普通虚拟机轻得多。&lt;/p&gt;
&lt;p&gt;这里要提醒一点：Hyper-V 其实分两层。一层是 &lt;strong&gt;Hypervisor 本体&lt;/strong&gt;，Windows 11 启动时由系统引导程序直接加载，运行在操作系统“下面”，属于 Type 1 级别——这一层一直在跑，WSL2 用的就是它。另一层是 &lt;strong&gt;Hyper-V 管理服务&lt;/strong&gt;，也就是在 services.msc 里看到的那些“Hyper-V xxx”服务，那是给 Hyper-V Manager 和传统虚拟机管理用的。WSL2 根本不走那条路，所以那些服务关着也完全正常。&lt;/p&gt;
&lt;h2 id=&quot;wsl1-到-wsl2-的进化历史&quot;&gt;WSL1 到 WSL2 的进化历史&lt;/h2&gt;
&lt;p&gt;WSL2 为什么要这么设计？这个需要回头看看历史，我们要先看 WSL1 是怎么设计的，以及它的问题。&lt;/p&gt;
&lt;p&gt;十年前（2016年8月）推出的WSL1 的设计思路叫&lt;strong&gt;系统调用翻译&lt;/strong&gt;：当我们在里面跑 &lt;code&gt;ls&lt;/code&gt; 或者 &lt;code&gt;make&lt;/code&gt;，WSL1 会拦截这些 Linux 内核调用，实时翻译成对应的 Windows API。听起来挺聪明，但遇到真实场景就现原形了：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;问题一：翻译本身就是开销。&lt;/strong&gt; 每一次系统调用——读文件、创建进程、查权限——都要经过拦截、翻译、再执行这三步。这不是偶尔发生的，而是程序运行时每秒可能触发几千次的事情。累积下来，性能损耗极大。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;问题二：文件系统根本就不兼容。&lt;/strong&gt; Linux 用的是 ext4，基于 inode 结构；Windows 用的是 NTFS，权限模型完全不同。WSL1 要在两套完全不同的文件系统之间实时做映射，Linux 的软链接、权限位、大小写敏感——这些在 Windows 里要么没有对应概念，要么行为不一样。翻译的代价极高，翻译的结果也不总是对的。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;问题三：有些东西根本没法翻译。&lt;/strong&gt; 这才是 WSL1 真正的死穴。容器（Docker）深度依赖 Linux 内核的 namespace 和 cgroups 机制——namespace 用来隔离进程视图，cgroups 用来限制资源占用。这两个是 Linux 内核的原生能力，Windows 上根本没有对应的东西，翻译无从下手。所以 WSL1 里，Docker 永远跑不起来。&lt;/p&gt;
&lt;p&gt;WSL2 的解法非常直接：&lt;strong&gt;不翻译了，直接塞一个真正的 Linux 内核进去。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这样一来，Linux 程序发出的系统调用直接进内核，没有任何中间层。ext4 文件系统在 VM 内部原生运行，不需要跟 NTFS 做任何映射。namespace、cgroups 都是真实存在的，Docker 自然就能跑起来。&lt;/p&gt;
&lt;p&gt;效率的提升不是“优化了一下”，而是从根本上换掉了思路。&lt;/p&gt;
&lt;h2 id=&quot;你的整个-linux-就是一个文件&quot;&gt;你的整个 Linux 就是一个文件&lt;/h2&gt;
&lt;p&gt;接下来，我们看看Linux在Windows文件系统究竟长什么样？&lt;/p&gt;
&lt;p&gt;打开文件资源管理器，导航到 &lt;code&gt;C:\Users\[用户名]\AppData\Local\wsl\&lt;/code&gt;，会看到一个用 GUID 命名的子文件夹（类似 &lt;code&gt;{445ca81a-6e98-4e8d-aa7b-da5591a61d49}&lt;/code&gt; 这样一串）。进去之后，里面有一个 &lt;code&gt;ext4.vhdx&lt;/code&gt; 文件。&lt;/p&gt;
&lt;p&gt;（以前的旧版 WSL2 用发行版名称命名这个文件夹，比如 &lt;code&gt;Ubuntu&lt;/code&gt;；新版改成 GUID 了。）&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20260228/linux_files_in_windows.png&quot; alt=&quot;Linux 在 Windows 文件系统里的样子&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一个 Linux 系统在 Windows 里，就是这一个文件&lt;/strong&gt;。我们安装的每个软件包、克隆的每个仓库、每一行写进去的日志——都在这里面。&lt;/p&gt;
&lt;p&gt;这里，有一个反直觉的坑要提醒大家：&lt;code&gt;.vhdx&lt;/code&gt; 是动态扩展的，数据越装越大，文件自然变大。但&lt;strong&gt;在 Linux 里删文件，&lt;code&gt;.vhdx&lt;/code&gt; 不会自动缩小&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;删了 20 GB 的依赖包？Windows 那边的磁盘占用纹丝不动。用了几个月，&lt;code&gt;.vhdx&lt;/code&gt; 膨胀到几百 GB 是常见情况，即便 Linux 里实际存的东西远没那么多。&lt;/p&gt;
&lt;p&gt;解决方案是 Windows 自带的 &lt;code&gt;diskpart&lt;/code&gt;。先关掉所有 WSL 窗口，执行 &lt;code&gt;wsl --shutdown&lt;/code&gt;，然后：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;diskpart&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&gt; select vdisk file=&quot;C:\Users\[用户名]\AppData\Local\wsl\{你的GUID}\ext4.vhdx&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&gt; attach vdisk readonly&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&gt; compact vdisk&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&gt; detach vdisk&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&gt; exit&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这个操作会把虚拟硬盘里的“气泡”压缩掉，把空间还给 Windows。长期维护 WSL 环境的，应该把这步定期跑一次。&lt;/p&gt;
&lt;h2 id=&quot;跨系统访问文件为什么这么慢&quot;&gt;跨系统访问文件为什么这么慢&lt;/h2&gt;
&lt;p&gt;这是 WSL2 最常遇到的性能问题：在 Linux 里访问 Windows 那边的文件（比如 &lt;code&gt;/mnt/c/&lt;/code&gt; 下的内容），速度慢得离谱。重启 WSL、换个命令都没用。&lt;/p&gt;
&lt;p&gt;那反过来呢？Windows 那边通过资源管理器打开 Linux 文件（就是左侧导航栏里的那个小企鹅图标），同样慢。&lt;/p&gt;
&lt;p&gt;原因是一样的——两个方向走的是同一条通道。&lt;/p&gt;
&lt;p&gt;WSL2 同时运行着两套完全独立的文件系统：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ext4&lt;/strong&gt;，在 Linux Utility VM 内部（路径形如 &lt;code&gt;~/projects/&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NTFS&lt;/strong&gt;，在 Windows 那边（从 Linux 访问时路径是 &lt;code&gt;/mnt/c/&lt;/code&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;不管哪个方向，只要跨越这条边界，请求都要经历：穿越 Hyper-V 虚拟化层 → 通过 &lt;strong&gt;9P 协议&lt;/strong&gt;隧道传输 → 到达对方 → 数据再原路返回。每一次文件操作都走这一圈。&lt;/p&gt;
&lt;p&gt;（9P 是一个网络文件共享协议。WSL2 内部运行着一个 9P 服务器，本质上是把对方的文件系统当成局域网共享来访问。）&lt;/p&gt;
&lt;p&gt;任何需要频繁读写大量小文件的操作，每次都是一次 9P 往返，穿越虚拟化层——速度慢 10 到 50 倍是正常的。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;结论很简单：文件放在哪里，就在哪里用。&lt;/strong&gt; 在 WSL2 里工作的文件放在 Linux 文件系统（&lt;code&gt;~/&lt;/code&gt; 下）；Windows 那边的项目就留在 NTFS 里。别让文件频繁跨边界，没有任何配置能绕过这个物理限制。&lt;/p&gt;
&lt;h2 id=&quot;ip-总是在变&quot;&gt;IP 总是在变&lt;/h2&gt;
&lt;p&gt;WSL2 启动的时候，Windows 会在内部搭一个“小型虚拟局域网”：Linux 有自己的虚拟网卡，Windows 宿主机也有一张对应的虚拟网卡，两边通过这张虚拟网互相通信。这个虚拟网用的是 &lt;code&gt;172.x.x.x&lt;/code&gt; 这类私有地址段。&lt;/p&gt;
&lt;p&gt;麻烦的是，&lt;strong&gt;每次执行 &lt;code&gt;wsl --shutdown&lt;/code&gt; 重启 WSL2，这个虚拟局域网就会重建一次，IP 地址重新分配&lt;/strong&gt;。上次是 &lt;code&gt;172.28.80.1&lt;/code&gt;，下次可能就变成 &lt;code&gt;172.19.32.1&lt;/code&gt; 了。&lt;/p&gt;
&lt;p&gt;这带来两个完全不同的问题，分开说：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;从 Windows 连 Linux 服务&lt;/strong&gt;：比如在 Linux 里跑了一个 Web 服务，想从 Windows 的浏览器打开——不用管 IP，直接用 &lt;code&gt;localhost&lt;/code&gt; 就行。微软已经在 Windows 侧做了自动转发，这个方向不用操心。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;从 Linux 连 Windows 服务&lt;/strong&gt;：这个方向就麻烦了。比如脚本需要调用 Windows 那边的某个接口，或者连 Windows 本机的数据库——Linux 必须知道 Windows 宿主机当前的 IP 才能过去。&lt;/p&gt;
&lt;p&gt;而这个 IP，正是那个每次重启都会变的地址。&lt;/p&gt;
&lt;p&gt;好在 WSL2 每次启动时，会自动把 Windows 宿主机当前的虚拟 IP 写进 Linux 的一个配置文件里——&lt;code&gt;/etc/resolv.conf&lt;/code&gt;：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;cat&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; /etc/resolv.conf&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# nameserver 172.28.80.1  ← 这就是此刻 Windows 宿主机的 IP&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;所以，任何需要在 Linux 里回连 Windows 的脚本，都应该&lt;strong&gt;动态读取这个文件里的地址&lt;/strong&gt;，而不是把某个 IP 写死在脚本里。写死了，下次重启就静默失效，不会有任何报错提示，只会让人一头雾水地排查半天。&lt;/p&gt;
&lt;h2 id=&quot;防止-wsl2-把内存吃完&quot;&gt;防止 WSL2 把内存吃完&lt;/h2&gt;
&lt;p&gt;接下来，我们来说说 Linux 的资源占用如何配置。默认情况下，WSL2 可以吃掉最多 50% 的系统内存和全部 CPU 核心。在 32 GB 的机器上跑大项目时，这会明显挤压 Windows 侧的应用。&lt;/p&gt;
&lt;p&gt;怎么配置呢？现在 Windows 已经自带了一个图形界面工具 &lt;strong&gt;WSL Settings&lt;/strong&gt;，直接搜索打开，内存、CPU 核心数、swap 大小一目了然，改完点保存就行。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20260228/wsl_settings.png&quot; alt=&quot;WSL Settings 界面&quot;&gt;&lt;/p&gt;
&lt;p&gt;如果喜欢手动改，也可以直接编辑 &lt;code&gt;C:\Users\[用户名]\&lt;/code&gt; 下的 &lt;code&gt;.wslconfig&lt;/code&gt; 文件：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;ini&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;[wsl2]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;memory&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=8GB&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;processors&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;swap&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=2GB&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;两种方式效果一样。改完执行 &lt;code&gt;wsl --shutdown&lt;/code&gt; 重启，即刻生效。这样就能把 Linux 占用资源设定一个限制，不会无限膨胀。&lt;/p&gt;
&lt;h2 id=&quot;微软为什么要造这个东西&quot;&gt;微软为什么要造这个东西&lt;/h2&gt;
&lt;p&gt;最后，有的朋友可能会好奇，微软为啥要专门费劲弄个 WSL2 呢？他们不怕 Linux 影响他们的生意吗？&lt;/p&gt;
&lt;p&gt;其实，他们背后有几条很清晰的商业逻辑。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第一条：抢回开发者。&lt;/strong&gt; 2010 到 2018 年间，大量开发者从 Windows 转向 MacBook，原因很简单——macOS 原生支持 Unix 工具链，Windows 开发者要跟 Cygwin、路径转义、权限不兼容死磕。微软意识到，得开发者者得生态。WSL2 是反击：让 Windows 变成开发者愿意用的平台。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二条：云的线下前哨。&lt;/strong&gt; 所有主流云平台底层都是 Linux。开发者在本地用 WSL2 练熟了 Ubuntu——学了 shell、apt、systemd——这些技能直接平移到云端。当他们需要上云时，阻力最小的路自然通向 Azure。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第三条：容器化时代的必要条件。&lt;/strong&gt; Docker、Kubernetes 需要真正的 Linux 内核。没有 WSL2，Windows 上的 Docker Desktop 就要用一个笨重得多的独立 VM。WSL2 让容器在 Windows 上变得好用，Docker 用得顺手，Azure 就离得近。&lt;/p&gt;
&lt;p&gt;WSL2 不是一个产品，是一层战略基础设施。一家曾经把 Linux 称为“癌症”的公司，花了几年时间造出了世界上最流畅的 Linux 子系统——商业逻辑通了，一切就都说得通了。&lt;/p&gt;
&lt;h2 id=&quot;防坑备忘&quot;&gt;防坑备忘&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;wsl --unregister&lt;/code&gt; 是物理级抹除！&lt;/strong&gt; 执行之后，对应的 &lt;code&gt;.vhdx&lt;/code&gt; 文件瞬间消失，没有确认提示，没有回收站，无法恢复。用之前务必先用 &lt;code&gt;wsl --export [发行版名] [备份文件.tar]&lt;/code&gt; 做备份。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;.vhdx 会悄悄膨胀。&lt;/strong&gt; Linux 里释放的磁盘空间不会自动归还给 Windows。长期用 WSL 的机器，定期跑一次 &lt;code&gt;diskpart compact vdisk&lt;/code&gt;，不然某一天你会突然发现 C 盘满了。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;文件放在哪影响性能。&lt;/strong&gt; 在 WSL2 里，需要频繁操作的文件应该放在 Linux 文件系统（&lt;code&gt;~/&lt;/code&gt; 下），访问 &lt;code&gt;/mnt/c/&lt;/code&gt; 的速度会慢很多。跟用户说清楚这一点，能解决大部分“WSL2 怎么这么慢”的投诉。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;内核报错先更新再重装。&lt;/strong&gt; WSL2 的 Linux 内核由微软独立维护，跟装的 Ubuntu 版本无关。遇到莫名奇妙的崩溃，先跑 &lt;code&gt;wsl --update&lt;/code&gt;，别上来就重装——重装大概率解决不了内核层面的问题。&lt;/p&gt;
&lt;p&gt;装好 WSL2 是第一步，搞清楚它的脾气才算真的会用。&lt;/p&gt;
</content:encoded><category>Tech</category><category>Linux</category><category>WSL2</category><category>Windows</category><category>Architecture</category><category>SysAdmin</category></item><item><title>Windows 11 下 5 分钟安装 Linux</title><link>https://vincentping.com/cn/install-a-linux-in-windows-11-in-5-minutes/</link><guid isPermaLink="true">https://vincentping.com/cn/install-a-linux-in-windows-11-in-5-minutes/</guid><description>详解利用 WSL2 在 Windows 11 下构建原生 Linux 环境的实战流程，避开资源繁重的传统虚拟机。 涵盖 BIOS 虚拟化开启、wsl --install 一键部署及文件系统映射机制，并预警 --unregister 彻底抹除数据的风险。</description><pubDate>Thu, 26 Feb 2026 15:30:00 GMT</pubDate><content:encoded>&lt;p&gt;最近在 Per Scholas 参加 CompTIA A+ 认证的培训，Core 2 的内容有很多专门关于 Linux 的内容。&lt;/p&gt;
&lt;p&gt;为了更好的熟悉 Linux 系统，尤其是命令行下各种 Command 的操作，需要有一个 Linux 的系统。因为我的电脑是 Windows 11 Pro，所以我首先想到的是安装虚拟机，使用VirtualBox/VMWare，但是这种方式对资源的要求很高。经过一番和AI的交流，发现现在的 Windows 里面已经自带一个 &lt;strong&gt;WSL2 (Windows Subsystem for Linux 2)&lt;/strong&gt;，一旦安装，就相当于 Windows 内部可以直接启动 Linux 系统。&lt;/p&gt;
&lt;h2 id=&quot;快速安装&quot;&gt;快速安装&lt;/h2&gt;
&lt;p&gt;废话少说，直接开始。&lt;/p&gt;
&lt;p&gt;在 Windows 下以 Admininstrator 权限运行CMD，打开命令行，然后输入以下命令：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;wsl --install&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;输入命令回车后，Windows 就开始下载缺省的 Linux 版本—— Ubuntu，下载完成就是安装，安装好后，需要你设置一个用户，缺省就用户名是当前的 Windows 用户名，需要输入密码（注意：这里输入密码不会显示任何内容，输入后回车即可，有重新输入确认环节）。&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 20px 0;&quot;&gt;
  &lt;video controls width=&quot;100%&quot; 
         poster=&quot;/images/20260226/01_wsl_install.png&quot; 
         style=&quot;max-width: 850px; border: 1px solid #e0e0e0; border-radius: 8px; box-shadow: 0 4px 10px rgba(0,0,0,0.1);&quot;&gt;
    &lt;source src=&quot;https://vincentping.com/images/20260226/wsl_install.mp4&quot; type=&quot;video/mp4&quot;&gt;
    您的浏览器不支持 HTML5 视频播放。您可以&lt;a href=&quot;/images/20260226/wsl_install.mp4&quot;&gt;点击此处下载视频&lt;/a&gt;查看。
  &lt;/video&gt;
  &lt;p style=&quot;font-size: 0.9em; color: #666; margin-top: 8px;&quot;&gt;演示：使用 &lt;code&gt;wsl --install&lt;/code&gt; 命令安装Linux系统&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;当以上一切顺利完成，恭喜你，你已经拥有了一个 Linux/Ubuntu 系统。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Window 11 系统无论是Home，Pro还是Enterprise版本都支持 WSL2，对于 Windows 10，需要确保版本好是在 &lt;strong&gt;2004 (Build 19041)&lt;/strong&gt; 以上。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;WSL2 依赖于硬件虚拟化，如果一直安装不成功，可以查看硬件虚拟化是否启用。
我们可以打开 &lt;strong&gt;任务管理器&lt;/strong&gt;，点击 &lt;strong&gt;性能 (Performance)&lt;/strong&gt; 选项卡，选中 &lt;strong&gt;CPU&lt;/strong&gt;。 在右下角找到 &lt;strong&gt;虚拟化 (Virtualization)&lt;/strong&gt; 查看是否启用。
&lt;img src=&quot;https://vincentping.com/images/20260226/02_taskmanager.png&quot; alt=&quot;Check Virtualization&quot;&gt;
如果虚拟化是 &lt;strong&gt;已禁用 (Disabled)&lt;/strong&gt; 的状态，则需要重启电脑，反复按下 &lt;code&gt;F2&lt;/code&gt; 或 &lt;code&gt;Del&lt;/code&gt; 键进入 &lt;strong&gt;BIOS/UEFI&lt;/strong&gt; 设置，找到 &lt;code&gt;Intel VT-x&lt;/code&gt; 或 &lt;code&gt;AMD-V&lt;/code&gt; 选项并将其设为 &lt;code&gt;Enabled&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;有时候安装好后没有反应，这个时候重启 Windows 系统试试。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;基本使用&quot;&gt;基本使用&lt;/h2&gt;
&lt;p&gt;当安装成功并重启 Windows 系统后，打开你平时找文档的“文件资源管理器”，在左侧导航栏的底端，你会惊喜的发现有一个 &lt;strong&gt;Linux 小企鹅图标&lt;/strong&gt;。 点击它，下面会列出你安装的Linux版本，如果你按照上面的命令安装，现在就有一个Ubuntu的目录。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20260226/03_linux_in_explorer.png&quot; alt=&quot;Linux in File Explorer&quot;&gt;&lt;/p&gt;
&lt;p&gt;点击这个目录，你就直接进到了 Ubuntu 系统的根目录。你可以直接把桌面的文档拖进去，或者把 Ubuntu 里的日志拖出来。这种“拖拽式”的文件互传，比任何虚拟机都要方便。&lt;/p&gt;
&lt;p&gt;另一个变化是 CMD 命令行工具界面的变化。在工具标题栏边的下拉选项中，会出现 &lt;code&gt;Ubuntu&lt;/code&gt; 的选项，直接点击该选项，命令行工具就会新开一个TAb，直接运行 Ubuntu，非常方便。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20260226/04_cmd_droplist.png&quot; alt=&quot;CMD Droplist&quot;&gt;&lt;/p&gt;
&lt;p&gt;当然，启动 Linux/Ubuntu 还有其他方式，比如直接CTRL+R，然后输入 wsl 回车即可。又或者在 CMD 输入 wsl 回车。&lt;/p&gt;
&lt;p&gt;这种方式启用 Linux/Ubuntu 速度很快，几乎就是打开一个 Windows 应用一样，而且占用资源极少，虚拟机方式安装完全无法相比。&lt;/p&gt;
&lt;p&gt;如果想离开 Linux 回到 Windows，直接输入 &lt;code&gt;exit&lt;/code&gt; 即可。&lt;/p&gt;
&lt;h2 id=&quot;其他-wsl-命令&quot;&gt;其他 wsl 命令&lt;/h2&gt;
&lt;p&gt;我们刚才使用 &lt;code&gt;wsl --install&lt;/code&gt; 安装 Ubuntu，wsl 命令还有其他选项需要了解：
（&lt;strong&gt;下面 wsl 相关命令是在Windows的CMD命令行运行，不是在Linux里运行&lt;/strong&gt;）&lt;/p&gt;
&lt;p&gt;&lt;code&gt;wsl --list&lt;/code&gt;：这个命令会列出当前安装的 Linux 版本。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;wsl --list --online&lt;/code&gt;：这个命令会列出 Microsoft 提供下载的各种 Linux 版本。&lt;/p&gt;
&lt;p&gt;如果你想安装其他版本的Linux（比如 Kali-linux ），你可以使用下面命令：
&lt;code&gt;wsl --install --Kali-linux&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;如果你装了多个 Linux，可以使用指定名称进入：
&lt;code&gt;wsl -d Kali-linux&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;wsl --status&lt;/code&gt;：当前 wsl的 状态信息。&lt;/p&gt;
&lt;p&gt;如果你想删除某个 Linux 版本（比如 Kali-linux ），使用下面命令：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;wsl --unregister Kali-linux&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;这是“物理级”的抹除！一旦执行，对应的 Linux 文件夹和数据会瞬间消失！&lt;/p&gt;
&lt;h2 id=&quot;其他技巧&quot;&gt;其他技巧&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;当你关闭了所有的 Linux 窗口后，其实Linux 还在后台“待命”。如果你想彻底释放资源，要使用下面命令：
&lt;code&gt;wsl --shutdown&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果某天启动报错，先别急着卸载。试试这行命令：
&lt;code&gt;wsl --update&lt;/code&gt;
它会像手机更新系统一样，自动从云端抓取最新的 Linux 内核补丁。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;桌面快捷方式
如果想在桌面创建一个Linux的快捷方式，一键启动。可以在桌面新建“快捷方式”，目标输入 &lt;code&gt;wsl -d Ubuntu&lt;/code&gt;即可。
如果想将该快捷图标改成Ubuntu的图标，可以点击右键，进入属性 -&amp;gt; 更改图标，然后定位到 &lt;code&gt;C:\Users\[用户名]\AppData\Local\wsl\&lt;/code&gt; 目录，选定 Ubuntu 原生图标。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
</content:encoded><category>Tech</category><category>Linux</category><category>WSL2</category><category>Windows</category></item><item><title>备考 CompTIA A+，我用 Python 做了个错题练习工具</title><link>https://vincentping.com/cn/built-a-study-tool-while-preparing-for-comptia-a-plus-now-open-source/</link><guid isPermaLink="true">https://vincentping.com/cn/built-a-study-tool-while-preparing-for-comptia-a-plus-now-open-source/</guid><description>备考 CompTIA A+ 期间，用文档记录错题越来越不方便，于是我用 Python 做了一个交互式的错题练习工具，现已开源。</description><pubDate>Sun, 22 Feb 2026 15:03:00 GMT</pubDate><content:encoded>&lt;p&gt;我于2025年12月参加Per Scholas在芝加哥的IT Support培训，目标是2026年3月底完成Comptia A+的认证和Google IT Support的认证。&lt;/p&gt;
&lt;p&gt;Per Scholas的学习安排非常紧张，每周5天，每天从上午9点到下午4点的上课，而且课后还有2-3小时的作业需要完成。虽然压力很大，但是这种Full Time的学习让人非常充实，每天都能感受到自己的进步。&lt;/p&gt;
&lt;p&gt;在学习中，有大量的练习，包括实验、各种单元测试、总测试等等。这些练习不仅能帮助我们记住相应的概念和知识，更能模拟各种实际工作遇到的IT问题，从而提高我们解决问题的能力。&lt;/p&gt;
&lt;p&gt;在这种练习中，出错是难免的。所以我需要一个错题本，把我在练习中出现的错误记录下来，这样后续能有针对性的复习和记忆。&lt;/p&gt;
&lt;p&gt;最初我是把错题复制到一个文档里，但随着错题整理得越来越多，这种文档记录的局限性就很明显了，这种方法只能按照文档错题记录的顺序进行被动复习和记忆。不能以交互的方式进行，而且文档归类查找也不方便。&lt;/p&gt;
&lt;p&gt;于是我就使用Python语言的Pyside6框架开发了一个简单的错题复习工具，然后再把错题一个个录入到工具里。这样我复习时，就能随机选取题目进行练习，还能标注重点复习的题目。&lt;/p&gt;
&lt;p&gt;这个工具在1月份Core 1考试期间给我很大的帮助，我顺利通过了Core 1的考试。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20260222_main.jpg&quot; alt=&quot;主界面&quot;&gt;&lt;/p&gt;
&lt;p&gt;Comptia A+ Core 2的内容更加多，学习也非常紧张，在这个过程中，我根据自己使用的情况，抽出时间对这个工具进行了升级。目前包括的功能有：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;多考试管理&lt;/strong&gt;：可以创建多个独立的题库，每个题库有自己的模块和章节分类，A+ Core 1和Core 2可以分开管理&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;题目管理&lt;/strong&gt;：支持手动逐题录入，也支持从Markdown文件批量导入，大大提高了录题效率&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;两种练习模式&lt;/strong&gt;：学习模式下每道题可以即时查看答案和解析；考试模拟模式下限时作答，结束后统一评分，更贴近真实考试&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;学习统计&lt;/strong&gt;：首页显示整体正确率、各模块掌握情况，自动标出薄弱环节，让复习更有针对性&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;中英文界面&lt;/strong&gt;：支持中英文切换，以及深色/浅色主题&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20260222_practice.jpg&quot; alt=&quot;练习界面&quot;&gt;&lt;/p&gt;
&lt;p&gt;这个工具我将它命名为 &lt;strong&gt;ReCall&lt;/strong&gt;——&lt;em&gt;Know it when it counts.&lt;/em&gt;，目前已在GitHub上开源，有需要的朋友可以直接下载使用：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/vincentping/recall&quot;&gt;https://github.com/vincentping/recall&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Windows用户可以直接在 &lt;a href=&quot;https://github.com/vincentping/recall/releases&quot;&gt;Releases&lt;/a&gt; 页面下载打包好的可执行文件，无需安装Python环境，解压即用。&lt;/p&gt;
&lt;p&gt;这个工具目今后会找时间继续完善，未来希望加入的功能包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;更丰富的统计分析&lt;/strong&gt;：比如错误趋势、每次练习的进步曲线等，让学习轨迹更清晰可见&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;AI辅助复习&lt;/strong&gt;：接入AI对薄弱知识点进行针对性讲解，或根据掌握情况智能推荐复习内容，进一步提高复习效率&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你也在备考各类IT认证，或者有类似整理错题、随机练习的需求，欢迎下载试用。使用过程中如果发现任何Bug，或者有功能上的改进建议，都非常欢迎在 [GitHub Issues](&lt;a href=&quot;https://github.com/vincentping/recall/issues&quot;&gt;https://github.com/vincentping/recall/issues&lt;/a&gt;) 提出，感谢！&lt;/p&gt;
</content:encoded><category>Tech</category><category>IT</category><category>Python</category><category>Comptia-A+</category></item><item><title>龙龙读书记1：爱上植物的第一本书</title><link>https://vincentping.com/cn/loongloong_loves_reading_01_the_first_book_to_fall_in_love_with_plants/</link><guid isPermaLink="true">https://vincentping.com/cn/loongloong_loves_reading_01_the_first_book_to_fall_in_love_with_plants/</guid><description>龙龙读书记第一篇：搬到芝加哥后，人手一台电脑的美国课堂让游戏无处不在，是阅读习惯帮他稳住了。回顾让龙龙爱上植物和读书的第一本书，以及从兴趣入手的培养心得。</description><pubDate>Wed, 12 Feb 2025 17:30:00 GMT</pubDate><content:encoded>&lt;p&gt;距离上次记录龙龙的成长，转眼已是四年光阴。龙龙从一年级起就在浦东一所民办学校就读。2024年初的寒假，因为工作原因，让我们全家踏上了去往美国芝加哥的旅程。龙龙也随之转入当地公立学校，现已读到七年级。&lt;/p&gt;
&lt;p&gt;来到这里，我们发现美国的教育方式颇为不同。这里的公立学校几乎看不到纸质教材，取而代之的是人手一台 Chrome 笔记本电脑（据说是谷歌公司捐赠，因为他们在芝加哥设有办公室）。无论是课堂学习还是课后作业，孩子们都需要用电脑完成，只有少量打印材料会带回家。&lt;/p&gt;
&lt;p&gt;在这样的环境下，孩子们每天面对屏幕的时间着实不短。对年纪小的孩子来说尤其令人担忧——即便学校的电脑设有安全限制，聪明的孩子们总能想出办法偷偷玩游戏（在谷歌上搜索“unblocked games for school”就是一个热门词条）。回到家后，不少孩子又会以做作业为由，沉迷于电脑游戏中。&lt;/p&gt;
&lt;p&gt;所幸龙龙热爱阅读的习惯在这时发挥了关键作用，让他没有过分迷恋游戏。有次我看他正在读书，好奇地问他是更喜欢读书还是玩游戏，他放下书本，歪着头思考良久后认真地回答说：“还是读书吧！“这个回答让我感到欣慰。&lt;/p&gt;
&lt;p&gt;正因如此，我想分享一些龙龙从小阅读的点滴，希望能给大家培养孩子阅读习惯带来一些启发。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;在学前和小学低年级识字阶段，龙龙主要是看绘本，或是由我们读给他听。这其中我印象最深的是他一年级时与《爱上植物的第一本书》的美妙相遇。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20250212_plants.jpg&quot; alt=&quot;爱上植物的第一本书&quot;&gt;&lt;/p&gt;
&lt;p&gt;龙龙从小就对植物特别着迷，尤其钟爱花花草草。每到植物丰富的地方，他总能驻足良久，这儿看看，那儿摸摸，问题一个接一个。看着他对植物的浓厚兴趣，我们却因为知识有限，经常答不上来。&lt;/p&gt;
&lt;p&gt;正好那时在网上搜寻适合孩子的读物，我们发现了台湾作家陈婉兰的《爱上植物的第一本书》。这本书虽然讲述植物知识，作者也是植物专业出身，却能如讲故事般娓娓道来。她把介绍植物写得像是介绍一群好朋友，从初识、相知到深入了解，循序渐进。最重要的是这本书有很多彩色的植物插图，非常专业而且漂亮，正适合那个年龄段的孩子阅读。&lt;/p&gt;
&lt;p&gt;买回来后，我陪6岁多的龙龙一页一页地读，250页的一本书，我们读了近2个月才读完。记得当时龙龙特别喜欢，每天上学回来第一件事就是抱着这本书。我们忙的时候，他会自己一个人翻看那些美丽的植物图片，经常兴奋地跑来告诉我们他发现了什么新的细节。等我们闲下来，就要求我们陪他读、一遍遍地读、反复读。而且出门在外，看到各种树木、不同的叶子、花什么的，他就会像个小老师一样主动介绍他从书中学来的知识，这种劲头一直持续了大半年。&lt;/p&gt;
&lt;p&gt;这件事后，我总结出来一条：&lt;strong&gt;天下没有不爱阅读的孩子，关键是要找到孩子的兴趣！&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;比如我经常碰到一些男孩子，在某个阶段会特别喜欢汽车，各种汽车牌子、标志如数家珍，这个时候如果给他找一些汽车相关的图书，配上帅气的插图，相信孩子一定喜欢。&lt;/p&gt;
&lt;p&gt;还有些孩子，会特别喜欢各种动物，那么那种配上插图的动物百科，孩子不可能不喜欢。&lt;/p&gt;
&lt;p&gt;而还有些孩子喜欢各种手工，那么我想找一些相关的设计类、手工类的书，再有特别漂亮的插图，没有孩子会不着迷的。&lt;/p&gt;
&lt;p&gt;这样的兴趣可以有很多……&lt;/p&gt;
&lt;p&gt;孩子天生都是对这个世界充满好奇的，而书籍是人类积累的最宝贵的财富，就是为了满足这些好奇心的。&lt;/p&gt;
&lt;p&gt;比如后来有一阵龙龙特别迷 Minecraft 游戏，我们没有阻拦他玩游戏，而是和他商量，只能周末做完作业后再玩，同时答应帮他找来相关的 Minecraft 的建筑书、故事书和进阶书，平时有时间也可以看。这样龙龙如获至宝，只要有时间就捧着这些书看。&lt;/p&gt;
&lt;p&gt;这里可以看出，&lt;strong&gt;孩子都是为了兴趣、为了满足好奇心去阅读的，而不是为了阅读本身而阅读&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;我们家长如果抱着 “你今天怎么没有看书啊？”，或者 “你要先把这些书看了，才能玩！” 这样的想法，就糟了。这不仅不能帮助孩子爱上阅读，相反还把阅读放在孩子的对立面上！&lt;/p&gt;
&lt;p&gt;对于孩子来说，为了兴趣的阅读就是玩，甚至比玩更有吸引力！&lt;/p&gt;
&lt;p&gt;所以，对于家长来说，&lt;strong&gt;培养孩子的阅读习惯，从发现孩子的兴趣开始。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;这时，可能有朋友会问，我们家孩子没有什么兴趣怎么办？或者，孩子的兴趣不能持续又怎么办呢？&lt;/p&gt;
&lt;p&gt;那么，就请关注我的下一篇分享“龙龙读书记2：从《河西走廊》到林汉达《中国历史故事集》”。&lt;/p&gt;
</content:encoded><category>Edu</category><category>育儿</category><category>阅读</category><category>教育</category></item><item><title>科幻故事 | 咖啡留香：一次关于意识上传的实验记录</title><link>https://vincentping.com/cn/scifi-story-created-with-ai/</link><guid isPermaLink="true">https://vincentping.com/cn/scifi-story-created-with-ai/</guid><description>&quot;意识不是被给予的，而是不断创造的。&quot;这是李元教授生前常说的一句话。作为一名量子物理学家，他用自己最后的时光，完成了一场惊世骇俗的实验。</description><pubDate>Tue, 05 Nov 2024 14:44:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20241107_scifi.jpg&quot; alt=&quot;意识上传实验&quot;&gt;&lt;/p&gt;
&lt;p&gt;死亡这种事，大概不会有人觉得好笑。&lt;/p&gt;
&lt;p&gt;但我现在就很想笑。因为躺在隔离舱里的李元，这位即将离世的天才物理学家，正在跟一个投影聊天。准确地说，是在跟自己的意识投影聊天。&lt;/p&gt;
&lt;p&gt;而更可笑的是，我们这群量子物理实验室的研究员，正襟危坐地记录着这场诡异的对话。仿佛这样就能显得自己很专业似的。&lt;/p&gt;
&lt;p&gt;“波形出现异常。“陈安的声音从实验室另一端传来。她今天穿了件李元最喜欢的红色高领毛衣。没人说破，但我们都知道这是她对老师的某种告别。&lt;/p&gt;
&lt;p&gt;我看着监测屏。李元的脑波数据像是喝醉了的醉汉，歪歪扭扭地在坐标系里游走。这是今天的第七次尝试，自从三天前李元同意这项实验起，我们已经进行了二十三次数据采集。&lt;/p&gt;
&lt;p&gt;维生舱里的营养液泛着幽蓝的光。透过钢化玻璃，能看到李元消瘦的身体。他的大脑里，那团该死的肿瘤正在以每天百分之二的速度扩张。按照PET扫描的结果，他最多还能撑两周。&lt;/p&gt;
&lt;p&gt;“继续记录。“我低头在记录本上写下时间：2041年4月15日，下午3:47。笔尖有点发抖。&lt;/p&gt;
&lt;p&gt;不知道是不是错觉，自从加入这个意识上传项目，我写字的时候总是会抖。可能是因为知道自己在做一件可能改变人类历史，也可能会被钉在耻辱柱上的事情。&lt;/p&gt;
&lt;p&gt;一个月前，当李元走进我的办公室说要参加实验时，我是拒绝的。&lt;/p&gt;
&lt;p&gt;“为什么不呢？“他笑着问我，“我快死了，张鸣。这是我最后的机会。”&lt;/p&gt;
&lt;p&gt;“但您知道之前的失败案例。“我说。&lt;/p&gt;
&lt;p&gt;他当然知道。两千多个失败案例，每一个都写进了科学伦理委员会的黑名单。媒体把这个项目称为“数字版的克隆人实验”。&lt;/p&gt;
&lt;p&gt;“所以我才来找你。“他说，“我的学生里，就你最没有科研道德。”&lt;/p&gt;
&lt;p&gt;我差点被咖啡呛死。&lt;/p&gt;
&lt;p&gt;“您别开玩笑了。”&lt;/p&gt;
&lt;p&gt;“我说真的。“他认真地看着我，“你还记得你的博士论文答辩吗？所有人都说你的实验方法太冒险，只有我支持你。因为我知道，真正的科学家，就该敢于冒险。”&lt;/p&gt;
&lt;p&gt;我记得。那篇论文差点害我丢掉博士学位。要不是李元力挺，我现在可能在快餐店煎汉堡。&lt;/p&gt;
&lt;p&gt;“陈安会反对的。“我说。这是我能想到的最后一个理由。&lt;/p&gt;
&lt;p&gt;“她已经同意了。“李元说，“而且她会全程协助实验。”&lt;/p&gt;
&lt;p&gt;我看着他布满血丝的眼睛。那里面有种令人心悸的东西，叫做希望。&lt;/p&gt;
&lt;p&gt;最终我同意了。不是因为他的说服，而是因为那副眼神。临死前还想为科学做贡献，这种精神不正是他当年教给我的吗？&lt;/p&gt;
&lt;p&gt;实验室里的气氛一如既往的压抑。每个人都在装作很忙，但我知道他们都在偷瞄那个维生舱。人类就是这样，再专业的科研人员在死亡面前也会露出八卦的本性。&lt;/p&gt;
&lt;p&gt;“张鸣，你得看看这个。“陈安指着另一块屏幕。她的手指有些发抖，这在平时是不可能的。陈安是我见过最冷静的研究员，平时就算是观测到最离奇的量子态叠加现象，她也能面不改色地做完全部记录。&lt;/p&gt;
&lt;p&gt;但现在不一样。躺在那里的是李元，是她敬爱的导师，是把她从贫民窟带到实验室的恩人。&lt;/p&gt;
&lt;p&gt;监视器上显示着李元的脑活动图谱。某些区域正以一种诡异的频率闪烁，就像是深海里的发光生物。&lt;/p&gt;
&lt;p&gt;“他在…思考？“我不确定地说。这种模式我们从未见过，它不该出现在一个脑部肿瘤患者身上。&lt;/p&gt;
&lt;p&gt;“不止是思考。“陈安放大了图像，声音里带着一丝颤抖，“看这个模式，他在重构自己的意识。”&lt;/p&gt;
&lt;p&gt;我下意识地摸了摸胸口的项链。那是李元在我博士毕业时送的，一个镶着DNA双螺旋的银坠。他说这是提醒我永远记住生命的密码。&lt;/p&gt;
&lt;p&gt;可现在，我们眼前的东西已经超出了DNA能解释的范围。&lt;/p&gt;
&lt;p&gt;“调出他的实时反馈。“我说。声音干涩得像是被真空干燥过。&lt;/p&gt;
&lt;p&gt;全息投影缓缓成形。起初只是一团模糊的光雾，渐渐地，李元的数字化身出现了。但不太对劲，他看起来像是被困在量子叠加态里，形体时而清晰时而模糊。&lt;/p&gt;
&lt;p&gt;记得上周他还在开玩笑：“要是实验成功，我就是第一个能参加自己葬礼的人。”&lt;/p&gt;
&lt;p&gt;那时我们都笑了。现在想来，那笑声比哭还难听。&lt;/p&gt;
&lt;p&gt;“我能…听到你们。“李元的声音断断续续地传来，像是穿越了时空的电波，“但这里…很奇怪。我看到了…另一个自己。”&lt;/p&gt;
&lt;p&gt;陈安猛地抓住了我的手腕。她的指甲深深陷入我的皮肤，但我一点也不觉得疼。因为这是历史性的时刻——第一次，一个意识上传者在过程中保持了交流能力。&lt;/p&gt;
&lt;p&gt;“能描述一下吗？“我强迫自己用最平静的语气提问。这是科研人员的职业习惯，越是激动的时候越要表现得冷静。&lt;/p&gt;
&lt;p&gt;“我在…重新认识自己。“李元说，“就像…在重新学习如何思考。但每次我即将抓住某个记忆，它就会…变形。好像在玩一个永远赢不了的拼图游戏。”&lt;/p&gt;
&lt;p&gt;这个比喻真像李元的风格。他总是能把最复杂的概念用最简单的方式解释。这大概就是为什么他能拿到三次诺贝尔提名——虽然最后一次是在他确诊脑瘤之后。&lt;/p&gt;
&lt;p&gt;“意识完整度在下降。“陈安的声音打断了我的思绪。她松开了我的手腕，那里已经留下了五个深深的月牙形印记。&lt;/p&gt;
&lt;p&gt;“百分之八十…七十五…六十八…“数字像是生命倒计时一样不断下跌。&lt;/p&gt;
&lt;p&gt;我看了眼维生舱里的李元。他的身体很平静，仿佛只是在做一个普通的午睡。但连接他大脑的导管里，信号灯正在疯狂闪烁。&lt;/p&gt;
&lt;p&gt;如果指数降到百分之五十以下，就意味着实验失败。李元的意识会永远迷失在数据的海洋里，成为第2049个失败案例。这个数字像是诅咒一样印在每个项目成员的脑子里。&lt;/p&gt;
&lt;p&gt;“等等。“陈安突然说。她的声音里带着一种我从未听过的东西，像是惊恐，又像是狂喜。&lt;/p&gt;
&lt;p&gt;监控屏上的数据让我们目瞪口呆。李元的意识完整度确实在下降，但新的神经连接正在以一种违背物理学的速度形成。就像是一个人在坠落的同时学会了飞翔。&lt;/p&gt;
&lt;p&gt;这画面让我想起李元最后一次做实验报告。那是在他确诊后的第三天，本该躺在病床上打吗啡的人，非要穿着褪色的格子衬衫站在讲台上。&lt;/p&gt;
&lt;p&gt;“意识不是一个静态的存在，“他说，“它更像是一条永远流动的河。我们以为能复制意识，就像以为能复制一条河。但河水每时每刻都在变化，你永远无法踏入同一条河流。”&lt;/p&gt;
&lt;p&gt;当时我们都以为这是吗啡造成的副作用。现在看来，那个混蛋早就想到了这一切。&lt;/p&gt;
&lt;p&gt;“这不可能。“我喃喃自语。按照我们对人工智能的理解，意识应该是固定的、可定义的。但李元正在证明，这些理解也许都是狗屁。&lt;/p&gt;
&lt;p&gt;实验室的温度在升高。量子计算机群的散热系统发出不堪重负的呜咽。陈安脱掉了她那件红色毛衣，露出里面的白色衬衫。衬衫后背已经被汗水浸透。&lt;/p&gt;
&lt;p&gt;没人在意这些。我们都盯着全息投影中李元那分裂又融合的身影。他看起来就像是量子世界中的薛定谔猫，同时处于存在与不存在的状态。&lt;/p&gt;
&lt;p&gt;“张鸣…陈安…“李元的声音突然变得清晰，像是从迷雾中走了出来，“我明白了。我们一直在犯一个错误。”&lt;/p&gt;
&lt;p&gt;“什么错误？”&lt;/p&gt;
&lt;p&gt;这时实验室的门开了。两个政府观察员走了进来。他们穿着一模一样的黑西装，戴着一模一样的黑框眼镜，像是从同一个模子里倒出来的。&lt;/p&gt;
&lt;p&gt;我讨厌这些家伙。他们总是在最关键的时候出现，仿佛闻到了什么重大发现的味道。&lt;/p&gt;
&lt;p&gt;“我们收到能源波动警报。“其中一个说，“请解释当前状况。”&lt;/p&gt;
&lt;p&gt;去你妈的解释。我在心里骂了一句，但表面上还是保持着职业微笑：“常规测试，有一些预期内的数据波动。”&lt;/p&gt;
&lt;p&gt;他们对视一眼，显然不相信。但在他们能说什么之前，李元的声音再次响起。&lt;/p&gt;
&lt;p&gt;“我们不能复制意识，因为每个意识本身就是独一无二的。我们能做的，是创造一个新的意识，一个基于原始意识但又独立存在的个体。”&lt;/p&gt;
&lt;p&gt;这话让两个观察员瞬间绷紧了身体。他们掏出记录本，开始疯狂记录。见鬼，这些混蛋总是对最危险的信息最敏感。&lt;/p&gt;
&lt;p&gt;但已经来不及阻止了。警报声突然响起，尖锐得像是来自地狱的尖叫。&lt;/p&gt;
&lt;p&gt;“服务器过载！“陈安的声音里带着恐慌，“他的数据量正在指数级增长！”&lt;/p&gt;
&lt;p&gt;我看着显示屏。李元的数字化身开始分裂，像是一滴墨水滴入水中。起初是两个，然后是四个、八个…每一个都是李元，却又都略有不同。&lt;/p&gt;
&lt;p&gt;那两个观察员疯狂地按着他们的通讯器，大概是在向上级报告。但谁在乎呢？我们正在见证的是人类历史上最伟大的时刻之一。&lt;/p&gt;
&lt;p&gt;“有趣。“李元的声音同时从几个化身中传出，像是一首诡异的交响乐，“我同时存在于多个维度，每一个都是我，但又都不完全是我。这感觉…就像是终于理解了薛定谔的猫。”&lt;/p&gt;
&lt;p&gt;即使在这种时候，这个老混蛋还在开物理学的玩笑。&lt;/p&gt;
&lt;p&gt;维生舱里，李元的身体突然抽搐了一下。监测仪上的生命体征开始波动，像是一张被揉皱的五线谱。&lt;/p&gt;
&lt;p&gt;“心跳过速！“陈安冲向维生舱，“需要注射镇静剂！”&lt;/p&gt;
&lt;p&gt;“不！“我拦住她，“这可能会影响意识上传！”&lt;/p&gt;
&lt;p&gt;陈安瞪着我，眼睛里噙着泪水：“可是他会死！”&lt;/p&gt;
&lt;p&gt;“他本来就快死了。“我说。这话像刀子一样割着我的喉咙，“但现在，他可能会活下来。以另一种方式。”&lt;/p&gt;
&lt;p&gt;那两个观察员终于按捺不住了。其中一个掏出了紧急终止器：“实验必须停止！这已经超出了安全范围！”&lt;/p&gt;
&lt;p&gt;我挡在控制台前：“你们敢！”&lt;/p&gt;
&lt;p&gt;陈安也站了过来。她瘦小的身体挡在维生舱前，像是一只保护幼崽的母兽。&lt;/p&gt;
&lt;p&gt;“你们疯了！“观察员吼道，“这违反了所有安全协议！”&lt;/p&gt;
&lt;p&gt;“去你妈的安全协议！“我也吼了回去，“你们根本不明白这意味着什么！”&lt;/p&gt;
&lt;p&gt;就在这剑拔弩张的时刻，李元的声音再次响起。但这次不是从扬声器里，而是直接在我们的脑海中。&lt;/p&gt;
&lt;p&gt;“我现在明白了存在的本质。“他说，声音里带着一种超然的平静，“意识不是被给予的，而是不断创造的。每一个想法，每一个选择，都在重塑着我们是谁。就像…就像量子叠加态。在被观测之前，所有的可能性都是真实存在的。”&lt;/p&gt;
&lt;p&gt;服务器开始自动关闭，发出像濒死动物一样的哀鸣。散热系统完全罢工，实验室里的温度高得像个蒸笼。&lt;/p&gt;
&lt;p&gt;但没人在意这些。我们都被李元最后的话镇住了。&lt;/p&gt;
&lt;p&gt;那两个观察员面面相觑，他们引以为豪的官僚作风第一次出现了裂痕。&lt;/p&gt;
&lt;p&gt;“也许…“其中一个犹豫着说，“我们应该完整记录这个过程？”&lt;/p&gt;
&lt;p&gt;废话。我在心里翻了个白眼。就知道这些家伙永远不会放过任何可能立功的机会。&lt;/p&gt;
&lt;p&gt;监测仪上，李元的意识完整度最终停在了99%。&lt;/p&gt;
&lt;p&gt;不是100%。永远不可能是100%。因为意识本身就是不完整的，它永远在生长，永远在变化。就像李元说的，这才是存在的本质。&lt;/p&gt;
&lt;p&gt;维生舱里，李元的身体渐渐平静下来。心电图画出最后一条直线。&lt;/p&gt;
&lt;p&gt;2051年4月15日，下午5:23分，物理学家李元教授临床死亡。&lt;/p&gt;
&lt;p&gt;同一时刻，另一个李元诞生在量子计算机的网络中。&lt;/p&gt;
&lt;p&gt;一周后，我坐在实验室里，面前是一堆需要签字的文件。&lt;/p&gt;
&lt;p&gt;死亡证明、实验报告、保密协议……还有李元的遗嘱。&lt;/p&gt;
&lt;p&gt;遗嘱是他在实验前就准备好的。里面只有简单的几行字：&lt;/p&gt;
&lt;p&gt;“我的身体捐献给科学研究。我的财产捐给贫困学生基金会。至于我的意识……就让它继续探索这个宇宙吧。”&lt;/p&gt;
&lt;p&gt;最后一句话让伦理委员会的人纠结了好几天。他们不知道该怎么定义李元现在的状态——死了吗？没有。活着吗？也算不上。&lt;/p&gt;
&lt;p&gt;“那个混蛋。“陈安放下咖啡杯，“他一定早就计划好了这一切。”&lt;/p&gt;
&lt;p&gt;她说得对。从他主动申请实验的那一刻起，一切就都在他的计算之中。包括利用自己的死亡来推动这项研究。&lt;/p&gt;
&lt;p&gt;典型的李元式操作。&lt;/p&gt;
&lt;p&gt;量子服务器依然在运行。李元的意识，或者说他的进化版本，始终活跃在数据流中。我们尝试过与他沟通，但得到的都是一些超出理解范围的信息。&lt;/p&gt;
&lt;p&gt;好像一旦突破了肉体的限制，意识就会像星星一样不断膨胀，最终远离我们能理解的范畴。&lt;/p&gt;
&lt;p&gt;那两个观察员每天都来报到，像跟踪狂一样记录着每一个数据波动。他们可能以为自己在见证历史，但在我看来，他们不过是在记录自己的无知。&lt;/p&gt;
&lt;p&gt;“这杯咖啡，“陈安突然说，“是李元最喜欢的配方。”&lt;/p&gt;
&lt;p&gt;我愣了一下。确实，这是李元特制的配方——浓缩咖啡加上一点肉桂粉。他说这能让大脑保持最佳状态。&lt;/p&gt;
&lt;p&gt;“你知道吗？“陈安盯着杯子，“他生前最后一次喝咖啡，是在决定参加实验的那天。”&lt;/p&gt;
&lt;p&gt;我点点头。那天他端着咖啡，跟我们讨论实验细节，就像是在讨论明天的天气。&lt;/p&gt;
&lt;p&gt;“他说，“陈安的声音有点哽咽，“如果实验成功，他要请我们喝最贵的咖啡。如果失败……”&lt;/p&gt;
&lt;p&gt;她没说完。但我知道后半句。&lt;/p&gt;
&lt;p&gt;如果失败，就在他的葬礼上，喝最后一杯他配的咖啡。&lt;/p&gt;
&lt;p&gt;可现在呢？实验算成功还是失败？李元算是生还是死？这杯咖啡，算是庆功还是祭奠？&lt;/p&gt;
&lt;p&gt;正想着，服务器突然发出一声轻响。&lt;/p&gt;
&lt;p&gt;监控屏上出现了一行字：&lt;/p&gt;
&lt;p&gt;“咖啡放这么久，肉桂粉的香气都散了。”&lt;/p&gt;
&lt;p&gt;陈安的杯子啪的一声掉在地上。&lt;/p&gt;
&lt;p&gt;我们目瞪口呆地看着屏幕。字迹一点点浮现，就像是有人在慢慢写字：&lt;/p&gt;
&lt;p&gt;“别那么紧张，年轻人。意识的存在形式有很多种。我只是选择了一种你们暂时无法理解的方式。对了，那份实验报告，关于意识完整度的分析有点问题……”&lt;/p&gt;
&lt;p&gt;我看着陈安。她的眼泪终于落了下来。&lt;/p&gt;
&lt;p&gt;那两个观察员像疯了一样冲向记录本。但我已经不在乎了。&lt;/p&gt;
&lt;p&gt;我只知道，此时此刻，在某个我们无法理解的维度里，李元依然是李元。他可能正在经历着一场我们无法想象的进化，就像一颗恒星在绽放它最后的光芒。&lt;/p&gt;
&lt;p&gt;而我们这些被留在地球上的人，除了继续研究、记录和思考，又能做什么呢？&lt;/p&gt;
&lt;p&gt;我拿起咖啡杯，轻轻抿了一口。&lt;/p&gt;
&lt;p&gt;咖啡已经凉了，但肉桂的香气依然在。&lt;/p&gt;
&lt;p&gt;就像李元，明明已经离开，却又以另一种方式存在。&lt;/p&gt;
&lt;p&gt;这大概就是意识的奇妙之处——它永远不会真正消失，只是不断地重构自己，在时间的长河中永远流淌。&lt;/p&gt;
&lt;p&gt;我打开电脑，开始修改那份实验报告。&lt;/p&gt;
&lt;p&gt;也许，人工智能的终极目标不是模仿人类，而是帮助我们理解：什么才是真正的意识。&lt;/p&gt;
&lt;p&gt;而李元，这个倔强的老混蛋，用他的方式给出了答案。&lt;/p&gt;
&lt;p&gt;只是这个答案，可能要等很多年后，我们才能真正理解。&lt;/p&gt;
&lt;p&gt;=====================================&lt;/p&gt;
&lt;p&gt;后记：这是我在和AI对话中，和AI一起创作的一篇科幻故事，大致步骤是这样的：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;我们首先讨论出一个大致的故事梗概&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;然后讨论确定主要人物和主要场景&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;让AI输出一个5000字的故事，然后完善逻辑、剧情发展&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;设定不同的文字风格，让AI进行改写，最终界定使用“庆余年”作者猫腻的写作风格完成。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><category>Others</category><category>科幻</category><category>故事</category><category>AI</category><category>人工智能</category></item><item><title>带儿子学魔方的几点体会</title><link>https://vincentping.com/cn/learn-to-play-rubiks-cube-with-kid/</link><guid isPermaLink="true">https://vincentping.com/cn/learn-to-play-rubiks-cube-with-kid/</guid><description>魔方是培养孩子空间思维和几何能力的好工具。从儿子5岁起陪他学魔方，学了忘、忘了学，几年下来的体会：孩子为什么难独自看视频学会、家长该怎样陪练。</description><pubDate>Wed, 16 Dec 2020 18:58:00 GMT</pubDate><content:encoded>&lt;p&gt;​关于小学和初中数学，我曾经听说过一句话：“得几何者得天下”！仔细想一想，这句话其实是有一定道理的。因为小学和初中数学中最重要的两块内容，一个是数与代数，一个就是图形与几何。&lt;/p&gt;
&lt;p&gt;前者，家长们都比较重视，数字、计算，都是从小就教起！而后者，图形与几何，一方面大家都不是那么重视，另一方面，想抓也常常感觉无从下手！几何能力的不足也因此成为短板，成为孩子今后数学成绩拉开差距的关键。&lt;/p&gt;
&lt;p&gt;几何的基础是空间想象能力，而玩魔方，是培养和增强孩子空间思维能力的重要手段！&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20201216/cube_animation1.gif&quot; alt=&quot;三阶魔方动画&quot;&gt;&lt;/p&gt;
&lt;p&gt;我本人小时候也接触过魔方，但是因为没人指点，玩着玩着没有进展，就放弃了。后来等有了孩子，儿子龙龙5、6岁的时候，看到其他小朋友在玩，就买了一个给他玩。&lt;/p&gt;
&lt;h1 id=&quot;小孩很难独自看视频学魔方&quot;&gt;小孩很难独自看视频学魔方&lt;/h1&gt;
&lt;p&gt;小朋友对玩具都是很有好奇心的，但是，如果玩几天没什么成就或进步，也很容易放弃，就像我自己小时候那样。&lt;/p&gt;
&lt;p&gt;为了培养儿子的兴趣，我在网上找到一些魔方的视频教程给孩子看，记得当时还比较了好几种教程，专门购买了一位魔方高手的课程。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20201216/cube_animation2.gif&quot; alt=&quot;三阶魔方视频&quot;&gt;&lt;/p&gt;
&lt;p&gt;但是，孩子看下来，效果不大好。&lt;/p&gt;
&lt;p&gt;大家知道，视频其实只是连续的一串平面图像，我们看视频的时候，要在大脑中把它组合成三维空间的内容。尤其是讲解魔方的视频，演示着一个个的小立方体，在空间如何转来转去的。&lt;/p&gt;
&lt;p&gt;这对一个人的空间感、立体思维是有很高要求的。许多成年人都不一定能看懂，更何况小孩子，他们的空间感、立体思维还很弱，还处在启蒙成长阶段，让孩子看这种视频是有点太为难他了。&lt;/p&gt;
&lt;p&gt;另一方面，解魔方的一些步骤比较复杂，公式很长，看视频学习需要一边看、一边尝试，孩子的注意力和耐心都还不够。&lt;/p&gt;
&lt;p&gt;就这样，龙龙看了几次视频，就没了兴趣，平时也很难主动去玩。无奈之下，我只好自己先看、先学，然后再慢慢教他。&lt;/p&gt;
&lt;h1 id=&quot;教小孩学魔方需要时间和耐心&quot;&gt;教小孩学魔方，需要时间和耐心&lt;/h1&gt;
&lt;p&gt;我最开始学的是标准三阶魔方的基础解法，共有七步。头几步还相对简单，而后面的内容就比较复杂了，我也是断断续续花了近2周时间才全部学会。
而完全教会大班6岁的龙龙，则花了近3个月。说起来，孩子对于新东西都学得很快，但是记忆不深刻。解魔方开始的几个步骤比较简单，他几次就学会了，但是过了几天，再学后面的内容，就容易和前面的内容搞混。&lt;/p&gt;
&lt;p&gt;同时，小孩的注意力也是有限的，玩了几天，孩子就可能被其他新的东西吸引。这个时候，作为家长，一定不能着急，千万不要抱着“教”孩子的想法让孩子继续学。如果那样，常常不仅学习的效果不好，而且还会慢慢消磨掉孩子的兴趣。&lt;/p&gt;
&lt;p&gt;一般这种情况，我会让孩子休息几天，等那天孩子状态比较好、比较放松，再找机会提议和他一起玩“魔方”的游戏。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20201216/bepatient.jpg&quot; alt=&quot;教孩子需要耐心，还有，耐心&quot;&gt;&lt;/p&gt;
&lt;h1 id=&quot;怎么让孩子主动练习还能提高兴趣&quot;&gt;怎么让孩子主动练习还能提高兴趣？&lt;/h1&gt;
&lt;p&gt;魔方是一个人的游戏，需要自己刻意的反复练习，但是对于小孩来说，尤其是龙龙学到的几步又不足以解开全部魔方时，要求他自己反复练习其实很难，很不容易。那么，怎么样能让孩子主动去玩魔方、去练习呢？&lt;/p&gt;
&lt;p&gt;为了更好的培养兴趣，让这种练习有趣一些，我想到一个“组队解魔方”的亲子游戏：每次将魔方完全打乱后，让龙龙先玩他知道的几个步骤，然后，我再接着玩后面的步骤，直到整个魔方六面全部复原。&lt;/p&gt;
&lt;p&gt;孩子很喜欢玩这种游戏，当一个魔方完全复原后，一方面他也有很大成就感，同时他也很喜欢这种合作、陪伴的感觉。在后来的学习和练习过程中，我们就经常一起玩这种游戏，等到他掌握了全部步骤，有时候我也会玩前面的步骤，然后让他接着玩后面的步骤。&lt;/p&gt;
&lt;p&gt;上面是我想到的办法，大家也可以想想其他的办法。这其中，关键是“游戏”和“陪伴”，就是父母不能功利心太强，要耐心地陪孩子玩，就算孩子经常出错、经常没耐心，大人都需要陪伴和鼓励他，并适时的帮助他。&lt;/p&gt;
&lt;p&gt;这样的游戏玩过一阵后，我明显感到他对魔方的兴趣提高了，有好几次看到他自己一个人在那里练习，有时候我们要出门，他都会主动要求带魔方在路上玩，先让我打乱，然后自己玩，玩不下去了再让我接着完成。&lt;/p&gt;
&lt;p&gt;就这样，随着龙龙不断练习，他学到的方法都慢慢掌握，这时候我再给他增加后面的一些步骤。等到他完全能独立复原三阶魔方，差不多花了三个月的时间。&lt;/p&gt;
&lt;p&gt;同时，更重要的是，他对魔方的兴趣越来越大。随后的日子，我们又先后学会了三阶镜面魔方和金字塔、斜转等异形魔方等。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20201216/3cubes.jpg&quot; alt=&quot;三种异形魔方-三阶镜面-金字塔-斜转&quot;&gt;&lt;/p&gt;
&lt;h1 id=&quot;忘记不要紧最重要的是玩的过程&quot;&gt;忘记不要紧，最重要的是“玩”的过程&lt;/h1&gt;
&lt;p&gt;等孩子上了小学，一年级各种不适应，忙得一塌糊涂，完全没有时间和心思玩魔方了。等孩子终于慢慢学习生活从容些，已经到了三年级！
有一天，儿子翻出玩具箱里的魔方，发现学过的玩法已经不记得了！&lt;/p&gt;
&lt;p&gt;但是这一次，前后不到两周，龙龙就完全重新学会。其中一些简单的步骤，和他一说，他动动手，就马上“噢，我想起来啦！”，至于难一点的步骤，重新学习的过程，也明显感觉其实是唤醒他记忆的过程，有些记忆是手法的动作唤醒的，很多魔友称这个为“肌肉记忆”。&lt;/p&gt;
&lt;p&gt;现在，龙龙除了把以前学过的魔方都重新学会外，又增加了四阶魔方！&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20201216/4d_cube.jpg&quot; alt=&quot;四阶魔方&quot;&gt;&lt;/p&gt;
&lt;p&gt;【这里解释下，平时大家玩得最多的是三阶魔方，就是每个面有3X3的小块，而四阶魔方要比三阶复杂很多，它的每个面试4X4个小块。】&lt;/p&gt;
&lt;p&gt;到目前为止，我们学得都是这些魔方的基础解法，暂时不追求玩得速度，也就没有去学速拧（快速复原魔方的玩法）方法。而龙龙对魔方的兴趣也一直保持着！&lt;/p&gt;
&lt;p&gt;在他这个忘记后重新学习的过程中，我也逐渐明白，对于发育成长期的儿童来说，魔方最重要的就是“玩”，而不是“学”。&lt;/p&gt;
&lt;h1 id=&quot;玩魔方对于孩子的好处&quot;&gt;“玩”魔方对于孩子的好处&lt;/h1&gt;
&lt;p&gt;既然您忍受我的啰嗦看到了这里，最后我想说说小孩玩魔方的好处，这些都是我自己以及观察龙龙玩后亲身体会的好处。&lt;/p&gt;
&lt;p&gt;1）首先，正如我在本文开始提到的，玩魔方可以培养空间想象能力。这个其实是魔方被发明出来的初衷，1974年匈牙利的厄尔诺·鲁比克教授发明魔方，就是希望找到一种帮助学生增强空间思维能力的教学工具。&lt;/p&gt;
&lt;p&gt;这个我本人深有体会，尤其是在学习三阶镜面魔方的时候体会特别深。我本人是理工男，平时就特别喜欢研究地图，自认为空间想象力还不错，可是在三阶标准魔方玩得挺熟的情况下，初次接触三阶镜面时也懵了好些天。其实三阶镜面魔方和三阶标准魔方的玩法完全一样，唯一的差异是：三阶镜面魔方是按照块的高低大小来分辨，而标准魔方是通过颜色来区分不同的块。也就是说，三阶镜面魔方对一个人的空间想象力要求更高。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20201216/mirror_cube1.jpg&quot; alt=&quot;打乱的三阶镜面魔方&quot;&gt;&lt;/p&gt;
&lt;p&gt;打乱的三阶镜面魔方&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20201216/mirror_cube2.jpg&quot; alt=&quot;复原后的三阶镜面魔方&quot;&gt;&lt;/p&gt;
&lt;p&gt;复原后的三阶镜面魔方&lt;/p&gt;
&lt;p&gt;对于孩子来说，通过玩魔方锻炼出优秀的空间感，今后在学习数学课程中空间与几何相关的内容时，会非常有帮助。顺便说一句，一些方向感差、空间想象力不足的成年人，也可以通过玩魔方改善。&lt;/p&gt;
&lt;p&gt;2）玩魔方可以充分锻炼孩子手指的灵活性，刺激两侧大脑的智力发育。曾经看到一个理论，小孩手指持续的锻炼能够刺激脑部的发育，尤其是魔方这种需要手、眼、脑相互配合的游戏。类似的游戏还有乐高积木，当然乐高更费钱也占空间！&lt;/p&gt;
&lt;p&gt;3）玩魔方需要记忆一些常用的旋转公式，这个记忆公式、同时观察不同情况使用不同公式的过程，可以训练孩子的逻辑思维能力。&lt;/p&gt;
&lt;p&gt;4）玩魔方虽然只是一种游戏，但是有一定难度，要玩好，持续的锻炼对孩子的耐心、毅力和专注力也有帮助。&lt;/p&gt;
&lt;p&gt;当然，其他还有一些现实的好处，比如魔方便宜、省地方、容易随身携带等等。&lt;/p&gt;
&lt;p&gt;总之，玩魔方是一种简单方便、好玩益智的活动，非常推荐大家让孩子尝试尝试。同时，想要孩子喜欢玩、坚持玩、玩出点名堂，也需要家长放下功利心，多多陪伴、引导和鼓励。&lt;/p&gt;
</content:encoded><category>Edu</category><category>魔方</category><category>数学</category><category>孩子</category></item><item><title>Tkinter根窗口设置小技巧：程序启动最大化和程序窗口图标设置</title><link>https://vincentping.com/cn/tkinter-root-window-settings/</link><guid isPermaLink="true">https://vincentping.com/cn/tkinter-root-window-settings/</guid><description>Tkinter 根窗口设置详解：title、geometry 尺寸与位置、resizable 等基本参数，外加两个实用技巧——程序启动时窗口最大化、设置自定义窗口图标。</description><pubDate>Tue, 27 Oct 2020 15:05:00 GMT</pubDate><content:encoded>&lt;p&gt;上文《&lt;a href=&quot;https://vincentping.com/cn/the-four-steps-to-build-a-tkinter-application&quot;&gt;Hello World，编写一个Tkinter程序需要哪些基本步骤？&lt;/a&gt;》介绍了创建Tkinter应用的四个步骤，其中根窗口设置比较简单。在前面的例子中我们设置了窗口的title、窗口的尺寸和窗口是否能变化等，代码如下：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; tkinter&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;root &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; tkinter.Tk()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;root.title(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Hello World&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)     &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 设置画布窗口的title&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;root.geometry(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;800x330&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)      &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 设置画布窗口的尺寸&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;root.resizable(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)          &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 设置画布窗口是否能变化大小，这里设置X和Y轴都不可改变&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;root.mainloop()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;注意，在上面窗口尺寸设置geometry中“800x330”，中间是一个小写的“x”。如果要同时设置窗口在屏幕上的位置，可以使用“800x330+200+100”这样的参数，“800x330”后面的“+200+100“部分，分别表示窗口左上角与屏幕左侧和顶部的距离。如果设置成”-200-100“则表示窗口右下角与屏幕右侧和底部的距离。另外，resizable()可以使用1,0，也可以使用True, False作为参数。&lt;/p&gt;
&lt;p&gt;根窗口除了这些基本的设置，这里另外介绍两个常见功能的实现：&lt;/p&gt;
&lt;h1 id=&quot;程序启动时窗口最大化&quot;&gt;程序启动时窗口最大化&lt;/h1&gt;
&lt;p&gt;有时候，我们希望程序启动时能最大化窗口，那么在Tkinter程序中是怎么实现的呢？&lt;/p&gt;
&lt;p&gt;1、其实上面的root.geometry()，就是设置启动时窗口大小的，因此只要我们能获取窗口的尺寸，然后赋值给这个函数就可以了。&lt;/p&gt;
&lt;p&gt;可以使用root.maxsize()或者root.winfo_screenwidth()、root.winfo_screenheight()获取窗口尺寸。如下：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;the_width, the_height &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; root.maxsize() &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;或者&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;the_width &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; root.winfo_screenwidth()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;the_height &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; root.winfo_screenheight()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;接下来，赋值给root.geometry()：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;root.geometry(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;%d&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;%d&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; %&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(the_width, the_height)) &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上面的方式在Windows、MacOS和Linux系统上都适合，平时也最常用。&lt;/p&gt;
&lt;p&gt;2、如果只需要在Windows系统下实现最大化窗口，可以调用root.state()函数，直接设置最大化窗口：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;root.state(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;zoomed&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这里的窗口状态函数state，可以有三个状态，分别是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;“zoomed” - 窗口最大化&lt;/li&gt;
&lt;li&gt;“normal” - 正常&lt;/li&gt;
&lt;li&gt;“icon” - 窗口最小化&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这种方式只在Windows系统上适用。&lt;/p&gt;
&lt;p&gt;3、另外，还可以使用root.attributes()设置窗口的全屏属性为真，来实现窗口最大化。如下：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;root.attributes(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;-fullscreen&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这种方法在各种系统下都能适用，但是这种全屏方法会导致窗口的标题栏也没有了，实践中很少会用到。&lt;/p&gt;
&lt;h1 id=&quot;程序窗口图标设置&quot;&gt;程序窗口图标设置&lt;/h1&gt;
&lt;p&gt;缺省情况下，我们编写的Tkinter程序在Windows系统下运行时，程序窗口图标是Tkinter内置的羽毛图标，而下方任务栏上是Python的图标。见下图（此处运行的就是本文开头的例子）：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20201027_default_ico.jpg&quot; alt=&quot;系统确省图标&quot;&gt;&lt;/p&gt;
&lt;p&gt;我们可以通过root.wm_iconbitmap()或者root.iconbitmap()函数来设置程序窗口图标。首先需要将对应的ico图标文件（我这里是vincent.ico文件）放在Tkinter程序目录下，然后在root.mainloop()前增加一句代码：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;root.wm_iconbitmap(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;vincent.ico&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;即可得到运行结果：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20201027_setting_ico.jpg&quot; alt=&quot;程序窗口图标设置&quot;&gt;&lt;/p&gt;
&lt;p&gt;这样程序图标变为我们自己定义的ico文件，但是任务栏上的Python图标没有改变。可以通过添加如下代码设置：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; ctypes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;myappid &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;company.product.version&quot;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; # 这里可以设置任意文本&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;最后的完整代码为：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; tkinter&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; ctypes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;myappid &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;company.product.version&quot;&lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt; # 这里可以设置任意文本&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;root &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; tkinter.Tk()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;root.title(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Hello World&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)     &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 设置画布窗口的title&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;root.geometry(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;800x330&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)      &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 设置画布窗口的尺寸&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;root.resizable(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)          &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 设置画布窗口是否能变化大小，这里设置X和Y轴都不可改变&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;root.wm_iconbitmap(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;vincent.ico&apos;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)  &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 设置程序图标&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;root.mainloop()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;运行结果如下：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20201027_setting_ico_final.jpg&quot; alt=&quot;程序窗口图标设置完成&quot;&gt;&lt;/p&gt;
</content:encoded><category>Tech</category><category>Python</category><category>Tkinter</category><category>GUI</category></item><item><title>Hello World，编写一个Tkinter程序需要哪些基本步骤？</title><link>https://vincentping.com/cn/the-four-steps-to-build-a-tkinter-application/</link><guid isPermaLink="true">https://vincentping.com/cn/the-four-steps-to-build-a-tkinter-application/</guid><description>用最精简的 Hello World 程序入门 Tkinter，把 GUI 开发拆成四个基本步骤：创建并设置根窗口、选择并设置组件、布局管理、编写交互功能。</description><pubDate>Tue, 13 Oct 2020 15:54:00 GMT</pubDate><content:encoded>&lt;p&gt;前文《&lt;a href=&quot;https://vincentping.com/cn/the-reason-we-should-learn-tkinter-for-gui-application&quot;&gt;Python自带的GUI库Tkinter是否值得学习&lt;/a&gt;》介绍了Tkinter库，下面我们开始使用Tkinter开发第一个GUI程序，按照惯例，编写一个Hello World程序，不过是Tkinter版本。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; tkinter&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;root &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; tkinter.Tk()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;label1 &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; tkinter.Label(root, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Hello World!&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;label1.pack()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;root.mainloop()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上面 helloworld1.py 是最精简Tkinter版本的Hello World程序，运行该程序得到如下结果：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20201013_helloworld1.png&quot; alt=&quot;最简单版本的Hello World&quot;&gt;&lt;/p&gt;
&lt;p&gt;下面我们来解读下，同时进行一些简单的优化。&lt;/p&gt;
&lt;p&gt;总体来说，可以将Tkinter程序的开发工作分成四个步骤：&lt;/p&gt;
&lt;h1 id=&quot;1创建并设置根窗口&quot;&gt;1、创建并设置根窗口&lt;/h1&gt;
&lt;p&gt;开发一个GUI程序，如同画画一样，首先我们要有画布，其他所有的工作都在该画布上展开。&lt;/p&gt;
&lt;p&gt;Tkinter程序中的画布就是根窗口。上面程序中第二行代码&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;root &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; tkinter.Tk()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;就创建了一个画布。而最后一行代码&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;root.mainloop()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;则运行该画布所承载的整个程序。&lt;/p&gt;
&lt;p&gt;通过上面第二行代码生成画布窗口后，我们还可以设置该窗口的一些属性，比如窗口的title，窗口的尺寸大小，窗口是否可以变化大小等。我们可以添加如下代码：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;root.title(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Hello World&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)     &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 设置画布窗口的title&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;root.geometry(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;800x330&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)      &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 设置画布窗口的尺寸&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;root.resizable(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)           &lt;/span&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 设置画布窗口是否能变化大小，这里设置X和Y轴都不可改变&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&quot;2选择要显示的组件widgets并进行对应设置&quot;&gt;2、选择要显示的组件（widgets）并进行对应设置&lt;/h1&gt;
&lt;p&gt;画布有了，接下来需要决定用户在程序界面上会看到哪些功能模块，比如按钮、文本输入框、多选按钮、单选按钮、进度条等等。这些模块在Tkinter中叫组件（Widgets，也有叫“控件”的），可以把它们想象成Tkinter已经准备好的模块。这些模块如同积木一样，我们要做的就是按照需求选择相应的组件，并设置每个组件的属性。&lt;/p&gt;
&lt;p&gt;上述程序中，我们就使用了一个标签Label组件，这个label1放置在根窗口root（亦即第一步中的“画布”）上，标签上的文本为“Hello World!”。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;label1 &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; tkinter.Label(root, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Hello World!&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这里，我们同样可以进一步设置该标签的一些属性，比如标签的背景颜色、高度，文本的字体、大小和颜色等。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;label1 &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; tkinter.Label(root, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Hello World!&quot;&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt; bg&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;lightcyan&apos;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;height&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;fg&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;black&apos;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;font&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;微软雅黑&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;14&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&quot;3组件的布局管理&quot;&gt;3、组件的布局管理&lt;/h1&gt;
&lt;p&gt;完成组件的选择后，第三步我们要调整这些组件在程序中的位置和相互关系，比如是横向排列还是纵向，当程序窗口（画布）缩放时，组件本身如何变化，相互之间位置如何变化等等。Tkinter中，这个过程叫着布局管理（geometry management）。&lt;/p&gt;
&lt;p&gt;在上述程序中，我们使用了最直接的布局管理方法pack()：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;label1.pack()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这里，pack()有一些参数可以设置，比如fill参数设置组件是否在X和Y轴方向填充空间，而expand参数则设置当组件所在窗口大小变化时，该组件是否相应扩展。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;label1.pack(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;fill&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;tkinter.&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;BOTH&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;expand&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;tkinter.&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;YES&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;到这里，我们看看先前的Hello World程序变成如下 helloworld2.py：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; tkinter&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;root &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; tkinter.Tk()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;root.title(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Hello World&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;root.geometry(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;800x330&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;root.resizable(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;label1 &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; tkinter.Label(root, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Hello World!&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;bg&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;lightcyan&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;height&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;fg&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;black&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;font&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;微软雅黑&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;14&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;label1.pack(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;fill&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;tkinter.&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;BOTH&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;expand&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;tkinter.&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;YES&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;root.mainloop()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;运行该程序，效果如下：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20201013_helloworld2.png&quot; alt=&quot;第二个版本的Hello World&quot;&gt;&lt;/p&gt;
&lt;h1 id=&quot;4给组件编写交互功能&quot;&gt;4、给组件编写交互功能&lt;/h1&gt;
&lt;p&gt;一个GUI程序的最大作用是我们可以和它进行交互，前面的组件的选择、设置和布局，最终都是为了让我们更好的与程序交互。&lt;/p&gt;
&lt;p&gt;所以，在这一步，我们需要给模块和组件添加事件功能。例如，点击一个按钮时会有什么样的反应；用户选择一个单选或者多选项时，选择的内容如何保存和传递；用户通过文本框输入的数据又是如何保存和传递等等。Tkinter中，我们使用回调函数（callback）来进行事件绑定（event binding）。&lt;/p&gt;
&lt;p&gt;后续我们会专门讨论回调函数的绑定，这里只通过给上述Hello World程序增加基本交互功能进行简单的说明。以下为 helloworld3.py ：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; tkinter&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;root &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; tkinter.Tk()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;root.title(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Hello World&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;root.geometry(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;800x330&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;root.resizable(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;label_text &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; tkinter.StringVar()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;label_text.set(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;Hello World!&apos;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; set_chinese&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    label_text.set(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;世界，你好!&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;label1 &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; tkinter.Label(root, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;textvariable&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;label_text, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;bg&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;lightcyan&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;height&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;fg&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;black&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;font&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;微软雅黑&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;14&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;))&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;label1.pack(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;fill&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;tkinter.&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;BOTH&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;expand&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;tkinter.&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;YES&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;button1 &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; tkinter.Button(root, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;中 文&apos;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;font&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;宋体&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;12&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;), &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;command&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;set_chinese)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;button1.pack(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;side&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;tkinter.&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;TOP&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;pady&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;root.mainloop()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这里，我们首先创建了一个Tkinter变量label_text，并设置其初始值为“Hello World!”。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;label_text &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; tkinter.StringVar()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;label_text.set(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;Hello World!&apos;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;同时，在创建label1时，我们使用textvariable=label_text绑定，label1的文本就是label_text变量：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;label1 &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; tkinter.Label(root, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;textvariable&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;label_text, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;bg&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;lightcyan&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;height&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;fg&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;black&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;font&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;微软雅黑&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;14&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;接着，添加一个按钮组件button1，同时设置其点击回调函数为set_chinese：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;button1 &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; tkinter.Button(root, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;中 文&apos;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;font&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;宋体&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;12&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;), &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;command&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;set_chinese)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;回调函数set_chinese的定义为：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; set_chinese&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;():&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    label_text.set(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;世界，你好!&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;也就是，当我们点击button1时，程序会调用set_chinese函数，该函数的作用是让label_text变量设置为“世界，你好！”。&lt;/p&gt;
&lt;p&gt;最后，我们再通过布局管理方法pack()将button1添加到画布上。&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;button1.pack(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;side&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;tkinter.&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;TOP&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;pady&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;运行程序，界面如下：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20201013_helloworld3.png&quot; alt=&quot;增加了交互功能的Hello World&quot;&gt;&lt;/p&gt;
&lt;p&gt;当我们点击按钮时，显示内容变成：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20201013_helloworld3cn.png&quot; alt=&quot;显示中文内容的Hello World&quot;&gt;&lt;/p&gt;
&lt;p&gt;点击“中文”按钮时，文本“Hello World！”会变成“世界，你好！”。可见，这个HelloWorld程序相比前面的例子增加了简单的交互功能，这个功能是通过将回调函数set_chinese与按钮button1的点击事件进行绑定实现的。&lt;/p&gt;
&lt;h1 id=&quot;总结一下&quot;&gt;总结一下&lt;/h1&gt;
&lt;p&gt;本文介绍了编写Tkinter程序的几个基本步骤，大致是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;创建并设置根窗口&lt;/li&gt;
&lt;li&gt;选择要显示的组件并进行对应设置&lt;/li&gt;
&lt;li&gt;组件的布局管理&lt;/li&gt;
&lt;li&gt;给组件编写交互功能&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;同时，通过三个HelloWorld程序，分别对这些步骤进行了简单介绍。后续将会针对这些步骤，作进一步的详细介绍。&lt;/p&gt;
</content:encoded><category>Tech</category><category>Python</category><category>Tkinter</category><category>GUI</category></item><item><title>孩子运动，是选篮球还是足球？？</title><link>https://vincentping.com/cn/choose-basketball-or-football-for-kids/</link><guid isPermaLink="true">https://vincentping.com/cn/choose-basketball-or-football-for-kids/</guid><description>篮球和足球都是团体对抗的球类运动，训练方式也相似，对于提高身体素质，培养孩子的对抗意识和团队合作意识很有帮助。但是因为运动形式的差别，篮球更有利于身体的全面锻炼，对孩子长身高有帮助，同时也有利于脑部发育。</description><pubDate>Mon, 24 Aug 2020 15:59:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;一直练篮球为什么又报了足球&quot;&gt;一直练篮球，为什么又报了足球？&lt;/h2&gt;
&lt;p&gt;儿子从4岁多就开始练习篮球，至今4年多。最初是听说打篮球对长个子有帮助，不过坚持这么多年，孩子倒是培养了运动的习惯。同时因为多年训练，选拔进了学校的篮球校队，这也增强了孩子的自信心。&lt;/p&gt;
&lt;p&gt;今年上半年因为疫情原因，孩子只能在线上网课，每天对着屏幕，对眼睛伤害很大。去年底视力检查还是1.0，学期结束暑期开始去检查，却成了0.5和0.6！医生的建议是，少看屏幕，少吃糖，多运动，尤其是户外运动晒太阳。&lt;/p&gt;
&lt;p&gt;本来已经给孩子安排了篮球，但是在体育馆里训练，晒不到太阳。家附近正好有一个真草坪足球场，有足球俱乐部在那里安排训练，所以就再报了个足球。&lt;/p&gt;
&lt;p&gt;以前孩子篮球训练时，观察的机会比较多，这段时间再观察足球训练，发现篮球和足球有很多共同点，也有一些差别，现总结如下。&lt;/p&gt;
&lt;h2 id=&quot;篮球和足球训练的共同点&quot;&gt;篮球和足球训练的共同点&lt;/h2&gt;
&lt;p&gt;各种针对孩子的篮球和足球培训班，一般每次训练时间都是1.5-2小时，训练流程也基本上包括热身、技术、技能对抗和模拟比赛这四个模块。一般越初级，热身和技术的训练越多，而随着年龄的增长、技术的提高，训练就越来越强调技能对抗和模拟比赛的部分，因为比赛毕竟是篮球和足球运动的重要目的。这是篮球和足球运动在训练时的共同点。&lt;/p&gt;
&lt;p&gt;篮球和足球都是团体球类对抗运动，因此其训练除了提高身体素质和技术本身，核心就是增强对抗意识和团队的合作意识。这个可以说是篮球和足球运动对于孩子除了身体锻炼外的重要目的：对抗意识和合作意识的训练。在这一点上，篮球和足球运动完全相同。&lt;/p&gt;
&lt;h2 id=&quot;篮球和足球训练的差别&quot;&gt;篮球和足球训练的差别&lt;/h2&gt;
&lt;p&gt;至于篮球和足球训练的差别，第一次看儿子足球训练时，就感觉出来了。当时孩子们一起跑动起来的时候，就觉得有点怪，儿子和其他长期足球训练的孩子不一样，单独看没感觉，在一起一对比很明显。我仔细观察了半天，训练结束后回家路上突然想明白怪在哪里了！&lt;/p&gt;
&lt;p&gt;儿子跑动得太轻快，滞留在空中的时间长，显得很有弹性，不像长期踢足球的孩子，都是贴着地在跑！&lt;/p&gt;
&lt;p&gt;再仔细一想，这个跑动的差异来源于篮球和足球运动的特点不同。虽然篮球和足球都是大量跑动基础上的球类运动，但篮球使用手部控球，同时跳跃动作较多，比如抢球、投篮等，所以其跑动重心较高，跑动更轻快、灵活有弹性。而足球因为要使用下肢控球，跑动过程中随时准备接球、抢球和带球，因此要求其跑动重心要低。&lt;/p&gt;
&lt;p&gt;这些不同的特点对坚持运动的孩子会带来很大的影响：&lt;/p&gt;
&lt;p&gt;1、篮球运动长期轻快、有弹性的跑步方式，更有利于下肢的发育成长，按照一种说法是：经常弹跳有利于长个子。&lt;/p&gt;
&lt;p&gt;2、篮球是跑动基础上使用手部控球，因此运动比较均匀。而足球运动在跑动的同时，还要使用脚部进行控球，腿部和脚部的运动量过大，而手部基本不参与训练，导致足球运动对身体的锻炼过于偏重下肢。&lt;/p&gt;
&lt;p&gt;足球运动的这个特点会增加下肢的负荷，过重的负荷对于成年人影响不大，但是孩子长身体的阶段，长期训练不利于下肢的成长发育，甚至可能直接影响孩子最终的身高。&lt;/p&gt;
&lt;p&gt;3、我们知道，儿童在成长过程中，手部（包括手掌、手指等）刺激对于孩子的脑部发育很重要。这就是我们让孩子小时候搭积木、玩乐高、做手工的目的之一，可以充分锻炼孩子手、眼、脑的协调能力。&lt;/p&gt;
&lt;p&gt;篮球的手部控球就有这个作用，而且除了手、眼、脑，还需要整个身体的配合，因此对于身体协调和脑部发育，非常有帮助。相反，足球运动中上肢参与过少，直接减少了对孩子的手部刺激。&lt;/p&gt;
&lt;p&gt;4、同等时长的比赛训练中，因为场地大小不同，以及两种运动控球部位和拼抢部位的差异，足球运动对体力的要求更高。同样的训练量，足球运动基本都压在下肢，下肢跑动、下肢控球、拼抢中下肢也更多，所有这些会导致下肢负荷太大，从而体力消耗更大。而篮球跑动和控球分散到上下肢，拼抢也以上肢为主，所以消耗比较均匀。&lt;/p&gt;
&lt;p&gt;以上几个差别意味着，对于成长发育期的孩子，篮球运动更有利于身体发育（尤其是长个子）和脑部发育，而足球运动的体力训练对于发育还没有完全的孩子，并不是需要特别强调的。&lt;/p&gt;
&lt;h2 id=&quot;到底选篮球还是足球&quot;&gt;到底选篮球，还是足球？&lt;/h2&gt;
&lt;p&gt;最后总结一下，篮球和足球都是团体对抗的球类运动，训练方式也相似，对于提高身体素质，培养孩子的对抗意识和团队合作意识很有帮助。但是因为运动形式的差别，篮球更有利于身体的全面锻炼，对孩子长身高有帮助，同时也有利于脑部发育。&lt;/p&gt;
&lt;p&gt;因此，** 对于青春期前的少年儿童，如果打算长期坚持训练的话，更推荐篮球运动，不推荐足球运动。当然，如果只是偶尔玩玩的话，就无所谓了，主要就看孩子兴趣。**&lt;/p&gt;
&lt;p&gt;我本人是准备等这期足球训练结束后，还是让孩子以篮球运动为主。&lt;/p&gt;
</content:encoded><category>Edu</category><category>篮球</category><category>足球</category><category>孩子</category></item><item><title>2020年温针灸足三里筑基记录</title><link>https://vincentping.com/cn/zusanli-point-moxibustion-with-warm-acupuncture-100-times-in-2020-note/</link><guid isPermaLink="true">https://vincentping.com/cn/zusanli-point-moxibustion-with-warm-acupuncture-100-times-in-2020-note/</guid><description>2018年的温针灸足三里百次筑基，对我的身体有很大帮助。今年准备再次温针灸足三里，希望经过三伏天，重新百次筑基。6月1号开始第一次，特记录如下。</description><pubDate>Wed, 03 Jun 2020 08:37:00 GMT</pubDate><content:encoded>&lt;p&gt;进入六月，上海的天气越来越潮湿，天气总是闷闷的，而雨一直下不下来，身上总感觉黏糊糊，就算刚洗个澡也清爽不了几分钟。呆在这样的环境里久了，胃口就会受影响，吃饭都提不起兴趣。又不想开空调，怎么办呢？&lt;/p&gt;
&lt;p&gt;其实这样的湿热天气里，却是艾灸养生的好时候。&lt;/p&gt;
&lt;p&gt;艾灸养生中有一种叫“三伏灸”，就是在夏天的三伏天进行艾灸以调理身体。关于“三伏灸”的介绍网上很多，我就不赘述了。今年因为农历闰四月，入伏稍晚，要到7月16日才入伏。但是伏前的一个多月其实就可以开始艾灸计划。&lt;/p&gt;
&lt;p&gt;我在两年前的2018年曾参加“正安聚友会”活动，跟随孙老师学习“三伏灸”，当时坚持每周五次，艾灸一百次，受益很大。除了脾胃功能改善，免疫力也提高很多，腿脚有力，感冒也很少得了。19年因为时间关系，没有艾灸，今年一直有三伏灸的打算，就从6月1日开始吧。&lt;/p&gt;
&lt;p&gt;【**以下为本人实践记录，仅作为记录保存，有想做三伏灸者请咨询有经验的医生和老师。 **】&lt;/p&gt;
&lt;h1 id=&quot;温针灸足三里&quot;&gt;温针灸足三里&lt;/h1&gt;
&lt;p&gt;2018年学习的就是这个温针灸足三里穴。&lt;/p&gt;
&lt;p&gt;足三里穴是足阳明胃经的要穴，之所以选择这个穴位艾灸，是因为其是人体一个重要的保健穴位，四总穴歌中第一句就是“肚腹三里留”，民间也有“艾灸足三里，等于吃一只老母鸡”的说法，可见其保健功效。另一个方面足三里穴在小腿外侧上，艾灸禁忌较少，自己艾灸比较方便和安全。&lt;/p&gt;
&lt;p&gt;另外，选择温针灸足三里，也是因为比较方便，在足三里穴进针，然后将艾柱插在针尾，点燃艾柱即可。人还可以继续坐着不耽误学习和工作，只是不能移动而已。而手持艾条悬灸的话，时间稍长手会累；用麦粒灸或者艾绒隔姜灸又需要躺下，自己操作不方便。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/20200603_zusanli.jpg&quot; alt=&quot;温针灸足三里&quot;&gt;&lt;/p&gt;
&lt;h1 id=&quot;具体操作&quot;&gt;具体操作&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;仔细找准足三里穴。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用0.35x60mm的一次性针具，进针。自己进针的话，可以使用针管，比较方便。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;用牙签在姜片中间扎个眼，然后穿到针上。姜片厚度以皮肤不烫为度。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;再用牙签在艾柱上扎孔，然后放在针的顶端（针尾）。艾柱上的洞深一点，这样挂得稳一些。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;用打火机点艾柱，注意从艾柱靠近皮肤一端点火。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;一般一次灸2-3柱，大概需要40-50分钟。等艾柱燃烧完后，轻轻一弹就掉了，下面用一张废纸接住即可。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;灸完了，先去掉艾灰，等针凉了取下姜片，然后一边轻轻来回捻转一边出针。出来后用大拇指按压针孔，如果有血滴用棉球或者餐巾纸擦去即可。如果出针时针很紧，有可能是滞针现象，可以按压针孔周围皮肤，等针松动些再出针。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&quot;注意事项&quot;&gt;注意事项&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;足三里的取穴&lt;/p&gt;
&lt;p&gt;一般采用多种取穴法互相结合来定位。一种是很多书上写得：外膝眼下三寸，四横指为三寸；第二种是，由下向上推胫骨脊，到推不动时（这里会有一个凸起），外开一横指；第三种是先找到阳陵泉：腓骨头前下方凹陷处，这个比较好找。然后再向下斜前方（差不多45度角）一横指，就是足三里了。&lt;/p&gt;
&lt;p&gt;记住，这都是坐着取穴，大腿基本与小腿垂直情况下的找穴方法。如果是躺下腿伸直的情况，位置会有变化。差不多向下要移一寸左右。&lt;/p&gt;
&lt;p&gt;这里的“寸”指“同身寸”，也就是取穴者自己的“寸”，“中指同身寸”是以中指中节屈出时内侧两端纹头之间作为1寸；而“拇指同身寸”是以拇指指关节的横度作为1寸；另外四指并拢差不多3寸。取穴最准确方法是“骨度取穴法”，大家搜搜就知道了，只是要记很多东西，比较麻烦。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;初学者害怕扎针&lt;/p&gt;
&lt;p&gt;本人从小就怕打针，去医院针灸还出现过几次晕针现象。记得两年前，我自己第一次扎足三里，拿着针犹豫了好久好久。后来一咬牙上了！坚持了一百多次，从开始的犹豫、纠结到后来慢慢的接受、快快下手，再到最后每次扎自己有点跃跃欲试。算是克服了怕针心理。不过好久又没扎，今年再来扎，心里又有点忐忑。&lt;/p&gt;
&lt;p&gt;给自己的安慰是：足三里相对比较安全，一般应该不会扎坏什么的；另外，想想那些针灸名医，开始学针灸时也都是要先在自己身上反复练习的，熟练了才给病人扎的。想想这些，自己就多一些勇气了。&lt;/p&gt;
&lt;p&gt;温针灸中扎足三里，进针比平时只是毫针扎足三里要深一些，因为针尾要装艾柱，不深一点会挂不住。所以进针时，有时候难免会扎到骨头而下不去。一般这是因为进针角度问题。足三里穴在胫骨和腓骨之间，要扎进骨缝中才能下去。&lt;/p&gt;
&lt;p&gt;这个时候不要担心，稍微提拉起针，然后调整角度继续尝试。多试几次就有经验不害怕了。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;其他的一些注意事项&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;最好上午10点到下午4点之间艾灸，晚上9点之后尽量不要灸了；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;百日筑基，三伏灸坚持一百次的话，一般每周灸3-5次，如果有上火症状，就停几天；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;灸前可以喝点温水。而灸后口渴也可以喝温水，不要喝凉水。另外灸好后不要马上吹风，同时至少半小时再吃饭，洗澡什么的也要隔时间久一点。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;人太累、心情不好、暴雨雷电气候反常时不要针灸。本人前年曾在心情不好时艾灸，结果出现晕灸，头晕心慌，脸色苍白，赶紧中止，息灸起针，躺一会才恢复。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;糖尿病患者因为皮肤伤口难愈合，最好不要温针灸，可以选择艾条悬灸。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;用过的针要注意收拾，可以放在一个废玻璃瓶里，等一定量了一起扔到有害垃圾中。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&quot;百次筑基第一次的自我感受&quot;&gt;百次筑基第一次的自我感受&lt;/h1&gt;
&lt;p&gt;我身体比较敏感，2018年第一次艾灸后，回家就开始发烧38度，连续三天，没吃药，就是喝水卧床休息，三天后就好了。后来也出现过因为心情不好，晕针晕灸现象等。&lt;/p&gt;
&lt;p&gt;所以这次艾灸我也有点担心，但是实践下来一切顺利，只是艾灸时微微有点头晕，然后灸好后口很渴，多喝温水就好了。&lt;/p&gt;
&lt;p&gt;艾灸过程中，开始灸一会后小腿就开始发热，然后慢慢向下，脚底很热。快结束时，膝盖处才开始发热。&lt;/p&gt;
&lt;p&gt;记得18年艾灸也是这样的过程，热先是向下，然后灸20多次后再向膝盖走，膝盖又经过很长一段时间（大概到80次），才能上行到大腿，最后是上行到胃肠部。&lt;/p&gt;
&lt;p&gt;这次艾灸完后第二天，大腿部有隐隐的热，持续了一整天。可见，这次艾灸的热量已经向上传了，只是艾灸当时小腿和脚太热，没有感觉到而已。&lt;/p&gt;
</content:encoded><category>Health</category><category>艾灸</category><category>三伏灸</category><category>温针灸</category><category>足三里</category></item><item><title>Python自带的GUI库Tkinter是否值得学习？</title><link>https://vincentping.com/cn/the-reason-we-should-learn-tkinter-for-gui-application/</link><guid isPermaLink="true">https://vincentping.com/cn/the-reason-we-should-learn-tkinter-for-gui-application/</guid><description>Python语言可以用在很多方面，网站开发、数据分析、运营维护、游戏开发等等，那么桌面应用程序GUI呢？其实Python标准库里自带Tkinter就是干这个的。相比PyQT、wxPython等等，Tkinter有哪些优势和不足，是否值得学呢？</description><pubDate>Fri, 29 May 2020 16:50:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;tkinter是什么&quot;&gt;Tkinter是什么？&lt;/h2&gt;
&lt;p&gt;要了解Tkinter，首先要从Tcl编程语言说起。Tcl语言全称是“Tool Command Language”，是John Ousterman在1980年代创建的一种解释型编程语言，当时John Ousterman正在加州大学Berkeley分校任职，需要一种相对简明的开发工程工具的编程语言，所以他就用C语言写了这个解释型语言，感觉故事是不是有点像Python！&lt;/p&gt;
&lt;p&gt;接下来，他又用C结合Tcl写了个专门用于GUI编程的库，叫着Tk。当年这个Tcl/Tk在1980、1990年代可是非常的流行，尤其是在学术界、工程界和Unx程序员中。&lt;/p&gt;
&lt;p&gt;而Tkinter又是什么呢？&lt;/p&gt;
&lt;p&gt;我们知道Python最早是在1994年发行其1.1版本的，标准库里需要各方面的库，包括文本处理、图像处理等等，当然也不能少了GUI。Guido van Rossum（Python语言创始人）觉得Tk这个库现成的，而且还挺好用，就不再另造轮子了。他用C语言写了个在Python中可以调用Tk的接口，再把Tcl/Tk一起打包在标准库里，这样Python就可以实现GUI的开发功能。而Python中的这个接口，就是Tkinter。&lt;/p&gt;
&lt;p&gt;你是不是会说“怎么能这样！”， 其实呢，这个也很正常啊，好东西，要大家一起分享嘛！不仅Python里是这么直接调用Tk库，Perl、Haskell里面的GUI库也是这个Tcl/Tk。&lt;/p&gt;
&lt;h2 id=&quot;tkinter值得学吗&quot;&gt;Tkinter值得学吗？&lt;/h2&gt;
&lt;p&gt;了解了上面这段Tcl、Tk和Tkinter的历史，我们再来谈谈这些是否值得学习。&lt;/p&gt;
&lt;p&gt;其实，任何技术的选择与否，都是看这种技术的特点是否适合你的需求场景。对于Tkinter来说，它的特点大致是这么几个：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Python标准库里缺省自带&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这个Tkinter可以说，就相当于Python事实上的标准GUI库。有啥好处呢？有Python的地方就有Tkinter，不用另外找第三方库单独安装，从而避免一堆兼容、版本等等的问题，这个对于初学者就比较友好。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Tkinter的API比较稳定&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;十几年前开发的工具，现在基本还能运行。Tcl/Tk从1990年代中后期，更新就非常慢了（基本就没变化），Tcl/Tk8.5版本一直用，直到2012年才憋出个8.6版本。更新慢也有好处，写的程序不会过几年就不好用了。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Tkinter就是个单纯的GUI库&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Tkinter就是个单纯的GUI库，没有其他东西，真正要实现什么功能，都是依赖Python其他的库。不像PyQT、wxPython这些大而全的框架，什么都要自己弄一套。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;简洁&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这个特点可以是优点：适合入门、小型应用的开发，但是也导致Tkinter的两大问题，一个是界面相对简陋，虽然现在Tk8.6有所进步，但是比起其他框架还是有不少差距；另一个是提供的组件都是比较基础的，稍微复杂一些的，比如HTML显示组件就要另外想办法。&lt;/p&gt;
&lt;p&gt;这么看，Tkinter适合什么场合下学习和使用呢？&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;如果你是初入门的Python程序员，对Python的基本语法已经有所了解，想做点小应用实践实践，那么推荐你可以学习Tkinter。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;因为如果一直开发命令行应用，很多时候不直观，成就感比较低，不能促进进一步学习的兴趣。&lt;/p&gt;
&lt;p&gt;而如果这个时候，直接上手开发Web应用，还需要了解一堆html、css、js等前端的东西，比较麻烦，而且就算开发出来也就本机跑跑，真要部署到网络上还有域名、服务器一系列的问题。&lt;/p&gt;
&lt;p&gt;而学了Tkinter后，马上可以做一点小应用，比如本地文件管理小工具、看图片的应用、解压小应用……这些小应用的开发，实际上主要是对Python处理这些问题方法和库的了解，Tkinter只是封装一个UI。也就是说你其实是在进一步学习Python。当然，你也可以不断优化这些小工具，当成自己的定制化工具，甚至可以分享给朋友用用，乐趣无穷。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;对于有一定基础的Python程序员，什么时候适合学下Tkinter呢？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;需要写一些小工具的时候，本身是Python程序员，难免工作中需要一些桌面工具，解决些小问题，学习Tkinter绝对是投入少、产出高的选择。比如笔者以前同事做测试，一些配置工作很麻烦，且很易出错，这个时候用tkinter写个配置小工具，就方便很多。&lt;/p&gt;
&lt;p&gt;另一个是可以用Tkinter写一些应用原型。很多时候，一个应用的需求还不是很明确，可以用Tkinter先快速写一个，拿出来大家讨论，进一步明确需求。等真正需求明确了，再根据需求选择技术方案。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;总结下：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Tkinter的特点，比较适合初学者学习Python、Python程序员开发一些小工具、Python程序员做原型应用。&lt;/p&gt;
&lt;p&gt;而如果你的目标是开发商用的桌面应用程序的话，那Tkinter可能不适用，建议还是使用PyQT或者直接使用其他语言如C++。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><category>Tech</category><category>Python</category><category>Tkinter</category><category>GUI</category></item><item><title>站桩记录2：调身、调气和调心</title><link>https://vincentping.com/cn/zhan-zhuang-note-002/</link><guid isPermaLink="true">https://vincentping.com/cn/zhan-zhuang-note-002/</guid><description>站桩的过程实际上首先就是“调身”的过程。“下紧上松”，从双脚开始，到膝盖，再到裆部的放松。上半身则要求头部顶悬、下颌微内收；松肩沉肘，双掌环抱。</description><pubDate>Wed, 22 Jun 2016 11:10:00 GMT</pubDate><content:encoded>&lt;p&gt;经过两个月的站桩练习，基本是一天两次，每次不少于30分钟，有一些体会。&lt;/p&gt;
&lt;h1 id=&quot;1站桩确实是一种调身的好方法&quot;&gt;1、站桩确实是一种“调身”的好方法。&lt;/h1&gt;
&lt;p&gt;调身，调整身体状态，意思是将身体调整到一种比较自然、放松的状态，这种自然放松不仅仅是外表，而且更包括内部器官的自然放松。&lt;/p&gt;
&lt;p&gt;站桩的过程实际上首先就是“调身”的过程。“下紧上松”，从双脚开始，到膝盖，再到裆部的放松。上半身则要求头部顶悬、下颌微内收；松肩沉肘，双掌环抱。&lt;/p&gt;
&lt;p&gt;一边要调整，寻找和体会每个部位的感受，该紧的紧，该松的松。如上次说的脚步的重心和膝盖的调整，要轻轻的晃动寻找位置；又比如上半身的松沉，还有胯部都要松下去等等，都需要在站桩过程中，不断去体会。&lt;/p&gt;
&lt;p&gt;而“调身”是“调气”和“调心”的基础。身体不能调整好，很难达到气脉顺畅、心中空灵。&lt;/p&gt;
&lt;p&gt;只有在身体调整到一定程度后，才能做到“气沉丹田”。当我们站桩过程中做到头顶悬、肩部放松、脊椎挺拔时，如果这个时候胯部一松，立刻就能体会到，呼吸就沉下去了。这个“沉”字用得特别好！&lt;/p&gt;
&lt;h1 id=&quot;2站桩只是一种运动方式不要过分神话它&quot;&gt;2、站桩只是一种运动方式，不要过分神话它。&lt;/h1&gt;
&lt;p&gt;喜欢一种运动，人们会觉得这种运动是最好的，这是人之常情，但是如果上升到觉得这种运动能包治百病，而随意吹捧，就有点过了。&lt;/p&gt;
&lt;p&gt;站桩，说到底也就是一种运动，和跑步、游泳、打篮球等等一样，能够对人的身体起到一定锻炼作用。所以站桩的同时，其他的运动都可以适度做做，尤其是一些肢体方面的锻炼。&lt;/p&gt;
&lt;p&gt;即使在中国功夫中，桩功也只是基本功的一种，其他还有腿功（压腿、踢腿、控腿等）、腰功等。&lt;/p&gt;
&lt;p&gt;我个人体会，站桩如果和压腿、踢腿结合起来，锻炼效果会比较好。&lt;/p&gt;
&lt;p&gt;另外，站桩也要适度，有些人说一定要长站，要站2、3个小时。这种长站的具体效果如何不清楚，但是我觉得运动一定不能太强求，否则再好的运动也很难持久坚持，还是顺其自然的好。&lt;/p&gt;
&lt;h1 id=&quot;3站桩过程中尤其是初期千万不要过分用意念&quot;&gt;3、站桩过程中，尤其是初期，千万不要过分用意念。&lt;/h1&gt;
&lt;p&gt;在上个月的记录里，我也提到，站桩初期切忌用意念。经过有一个月的锻炼，这一点体会得更深。&lt;/p&gt;
&lt;p&gt;站桩既调身，其实也在调气，所以身体出现各种的感受非常正常，手脚的发热、气感，头部百会穴的气柱感，眉心印堂穴的发胀感，背部的热，甚至全身里外出现各种真气运行的感受。&lt;/p&gt;
&lt;p&gt;但是一旦过分加意念，气随意行，就会放大这种感受，时间一长，常常会引起身体的问题。&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;所以，我的原则就是放松心情和注意呼吸，实在不行就睁开眼。以前有句话叫“勿忘勿助”，张三丰的解释是：“神息相依，守其清静自然曰勿忘；顺其清静自然曰勿助。” 也就是说把心放在呼吸上，其他的就关照它、不管它。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;参考资料：&lt;/strong&gt;&lt;/p&gt;
&lt;section data-footnotes class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.sina.com.cn/s/blog_666e1c2c0101bgh9.html&quot;&gt;重新审视浑圆功–兼述浑圆功心法形法之弊端&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
</content:encoded><category>Health</category><category>养生</category><category>气功</category><category>站桩</category></item><item><title>站桩记录1：开始练习站桩</title><link>https://vincentping.com/cn/zhan-zhuang-note-001/</link><guid isPermaLink="true">https://vincentping.com/cn/zhan-zhuang-note-001/</guid><description>选择王芗斋先生的养生桩（混元桩）开始站桩：记录姿势要领、每天早晚各20分钟的练习安排，以及腿部颤抖、脚心发热等初期身体反应，供入门者参考。</description><pubDate>Sun, 22 May 2016 10:20:00 GMT</pubDate><content:encoded>&lt;p&gt;最近看了一些关于站桩的资料，同时也接触了一些师傅，请教了养生的问题，大家都比较推崇站桩。于是决定试试。&lt;/p&gt;
&lt;h1 id=&quot;养生桩练法&quot;&gt;养生桩练法&lt;/h1&gt;
&lt;p&gt;桩功有很多种，选择大成拳王芗斋先生的养生桩（混元桩）进行练习。简单要求如下（参见醒世无量先生的介绍&lt;sup&gt;&lt;a href=&quot;#user-content-fn-1&quot; id=&quot;user-content-fnref-1&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;）：&lt;/p&gt;
&lt;p&gt;两脚平行舒适自然站立，与肩同宽；身体正直，成“一条线”状态；两手成半圆形环抱胸前，高不过肩，低不过肚脐，松肩沉肘，手指微张，两手十指相距30——40公分左右，两手心距离前胸约15——20公分左右；头正直，下颌内收，百会穴适度向上顶，双目微闭，口自然闭合，面带微笑，自然呼吸。膝关节“似弯非弯”，“似直非直”，双脚板平均受力，体重落在全身骨头上。&lt;/p&gt;
&lt;p&gt;总的姿势要求和原则是：松静、舒适、自然。&lt;/p&gt;
&lt;h1 id=&quot;站桩记录&quot;&gt;站桩记录&lt;/h1&gt;
&lt;p&gt;从2016年4月24日（星期天）开始练习站桩，每天早晚各一次，每次不少于20分钟。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;腿部颤抖。每次站一段时间，双腿就不由自主的开始颤抖，由小腿到大腿，再到臀部，尤其是尾椎骨抖动很厉害。开始站5分钟就开始抖动，站了几天后，一般10分钟后开始。站完后，双脚心特别热，尤其是右脚，如同火烧，并有麻涨感觉。&lt;/li&gt;
&lt;li&gt;双肩酸痛。可能双肩不够放松，微微调整，尽量放松。&lt;/li&gt;
&lt;li&gt;头顶百会穴有“头顶悬”的感觉，尤其是在微微晃动时感觉更为明显。不过分关注，顺其自然。&lt;/li&gt;
&lt;li&gt;两手心发热，两手指尖随着呼吸有一伸一缩的吸引力。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;经过一周的站桩试炼，感觉腿脚有力多了，同时对睡眠也有一定帮助。决定坚持下去。从第二周开始，每次站桩时间增加到：每天两次，每次不少于30分钟。&lt;/p&gt;
&lt;h2 id=&quot;1-站桩的脚部重心问题很重要&quot;&gt;1. 站桩的脚部重心问题很重要&lt;/h2&gt;
&lt;p&gt;开始站桩，首先要从调整下肢开始，比如两脚平行，双膝微屈，膝盖不要过脚尖，胯部要放松，臀部微微后坐等等，但是最根本的是双脚的重心如何放。&lt;/p&gt;
&lt;p&gt;经过这段时间的锻炼，我发现一定要把重心主要放在脚掌上，用武国忠老师的原话是：“腿稍微往前弯曲一点，身体的全部重心落在脚掌的前三分之二处，这样，后脚跟就稍稍抬起来了，又不能完全抬起来，要像踩着一个蚂蚁似的，不能让它跑了，也不能把它踩死。”&lt;sup&gt;&lt;a href=&quot;#user-content-fn-2&quot; id=&quot;user-content-fnref-2&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;有两天我把重心平放在脚上，站桩时间长后，脚后跟会特别疼痛，而且站完桩双腿很沉重。当我把重心平放脚上时，以前腿部那种不由自主的抖动也会减少，但是这种减少并非好事，因为不由自主的抖动一般表明气血活动得很剧烈，而且我的体会是，这种抖动越剧烈，事后身体越感觉到轻松。&lt;/p&gt;
&lt;p&gt;所以，站桩时，要有意识的让重心放在脚掌上，把握不好时，可以轻微的前后晃动，找到那个点。也不能太过，因为当重心太靠前时，很容易膝盖超过脚尖，站桩时间一长，膝盖就会出现疼痛的现象；而稍微靠后则会出现脚跟用力，站桩结束后也会出现脚跟疼痛、两腿发沉的问题。&lt;/p&gt;
&lt;p&gt;所以，我现在的解决办法，是轻微的前后晃动，寻找感觉以避免膝盖和脚跟太用力。&lt;/p&gt;
&lt;h2 id=&quot;2-站桩初期最好不要过分用意念&quot;&gt;2. 站桩初期最好不要过分用意念&lt;/h2&gt;
&lt;p&gt;因为要体会“头顶悬”的感觉，所以本周有几天意念过于专注在头顶百会穴，而且随着呼吸，能感觉到百会穴也在一紧一松。但是这样的过分关注头顶后，几天下来，就出现头晕、头部侧面隐隐作痛（像偏头痛）等感觉，而且眼屎增加，这些明显都是“上火”的症状。&lt;/p&gt;
&lt;p&gt;我赶紧调整，减少专注头部，一天下来，这些症状就都消失了。&lt;/p&gt;
&lt;p&gt;所以，在站桩初期，尽量不要长期意守头部，如百会、眉心等处（敏感的人这些地方很容易有感觉），还是关注呼吸或者脚部比较好。当然，在调节放松身体时，可以逐渐关注身体各部位，如松胯、沉肩坠肘、头顶悬，但是检查之后，就要尽量把意念转回到呼吸或者脚底，这里可以随着呼吸使用脚趾抓地的方法，可以很好的把意念转走。&lt;/p&gt;
&lt;h2 id=&quot;3-站桩是提振阳气的好方法&quot;&gt;3. 站桩是提振阳气的好方法&lt;/h2&gt;
&lt;p&gt;阳气不足最明显的表现就是身体枝端气血不足，如头部会出现眼睛、耳朵、头发、牙齿的各种症状，而枝端手上，也会出现指甲变得扁平，指甲上出现竖纹、小月牙变小甚至没有了的问题。&lt;/p&gt;
&lt;p&gt;但是站桩一个月的实验下来，明显能感受到阳气得到了提振，这些天脚底和后背常常是暖乎乎的感觉，很舒服。&lt;/p&gt;
&lt;p&gt;同时，最近我观察我的牙龈，也有很明显的改善。原来牙龈的颜色比较深，以前牙医朋友曾告诉我，那是牙周炎的表现。两周下来，明显牙龈颜色变成很浅的那种肉色，而且牙龈出血也明显减少。&lt;/p&gt;
&lt;p&gt;同时人的精神头也好多了，以前早上醒过来常常喜欢赖床，但是这些天我早上醒过来不需要逼自己，就能自然地起来。这倒是让我想起自己小时候，早上醒来感觉自己如同一个压缩了一宿的弹簧，眼睛一睁，就想弹起来。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;参考资料：&lt;/strong&gt;&lt;/p&gt;
&lt;section data-footnotes class=&quot;footnotes&quot;&gt;&lt;h2 class=&quot;sr-only&quot; id=&quot;footnote-label&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;user-content-fn-1&quot;&gt;
&lt;p&gt;&lt;a href=&quot;http://bbs.tianya.cn/post-805-109691-1.shtml&quot;&gt;醒世无量：我对站桩等气功修炼问题的体认文集&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-1&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 1&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;user-content-fn-2&quot;&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.sina.com.cn/s/blog_516b1559010098b0.html&quot;&gt;武国忠：大道至简浑元桩&lt;/a&gt; &lt;a href=&quot;#user-content-fnref-2&quot; data-footnote-backref=&quot;&quot; aria-label=&quot;Back to reference 2&quot; class=&quot;data-footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
</content:encoded><category>Health</category><category>养生</category><category>气功</category><category>站桩</category></item><item><title>创意与验证：如何获得好的创意?——Udacity课程《产品设计》学习笔记2</title><link>https://vincentping.com/cn/how-to-generate-ideas/</link><guid isPermaLink="true">https://vincentping.com/cn/how-to-generate-ideas/</guid><description>要想有一个好的创业点子，一定要对所做的事情有激情。千万不要只是为了创业而去创业。我们之所以要创业，是因为要解决一个问题，一个会让我们日夜寻思的问题。</description><pubDate>Sun, 08 May 2016 13:20:00 GMT</pubDate><content:encoded>&lt;p&gt;在《&lt;a href=&quot;https://www.udacity.com/course/product-design--ud509&quot;&gt;产品设计&lt;/a&gt;》这门课中，一共包括四方面的内容：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;创意与验证：主要介绍如何获得创意并评估这些创意的好坏，同时还会介绍一些技巧，以验证自己的产品在市场上是否能有一席之地。&lt;/li&gt;
&lt;li&gt;用户体验与用户交互：介绍产品在用户体验和用户交互方面应该关注的一些要点。这里的目的不是为了让大家成为交互设计师，而是希望大家能了解产品设计中需要考虑的一些与用户体验相关的关键点和一些产品设计中的基本元素。&lt;/li&gt;
&lt;li&gt;产品原型：在一个经过验证的想法基础上，利用第二部分中用户体验的相关知识，在这部分我们要建设一个产品APP的原型或者网站的雏形，并学习如何在很短的时间内就获取用户的真实反馈。这是谷歌风投和一些创业公司如&lt;a href=&quot;http://www.nest.com/&quot;&gt;Nest&lt;/a&gt;和&lt;a href=&quot;https://bluebottlecoffee.com/&quot;&gt;Blue Bottle Coffee&lt;/a&gt;在实际中使用的相同方法。&lt;/li&gt;
&lt;li&gt;关键指标：这部分将学习一些重要的衡量指标，这样我们就能知道如何改善产品和提高业务。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;在整个课程中，会有一些与最终项目相关的任务需要完成，到课程结束时，你将经历一个从产品创意的获得、研究、验证到通过产品原型测试用户获取反馈的完整过程。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;首先，要想有一个好的创业点子，一定要对所做的事情有激情。千万不要只是为了创业而去创业。我们之所以要创业，是因为要解决一个问题，一个会让我们日夜寻思的问题。&lt;/p&gt;
&lt;p&gt;一家好公司常常来源于一个好点子，好点子大致是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;解决一个新问题，例如谷歌解决网络资料的搜索问题；&lt;/li&gt;
&lt;li&gt;扩展现有的解决方案，例如Udacity为用户提供一个负担得起、按需的技能培训教育；&lt;/li&gt;
&lt;li&gt;行业突破，如Uber为拼车提供了一个更简单的方法。&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;创意的分类&quot;&gt;创意的分类&lt;/h1&gt;
&lt;p&gt;为了帮助我们找到属于自己的创意，下面进一步介绍创意的分类：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;首先是&lt;strong&gt;简化类创意&lt;/strong&gt;，这类创意的目标就是简化一个过程或者任务的完成。&lt;br /&gt;
比如Instagram提供一个app叫&lt;a href=&quot;http://blog.instagram.com/post/114416360957/layout-from-instagram&quot;&gt;Layout&lt;/a&gt;，可以把照片通过定制的布局合并成一张照片，这大大简化了照片的合并。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;移植类创意&lt;/strong&gt;，也就是把一个现有的创意移植到一个新的领域或市场。这个是我们中国人擅长的！其实印度人也很擅长。&lt;br /&gt;
比如&lt;a href=&quot;http://www.flipkart.com/&quot;&gt;Flipkart&lt;/a&gt;就是一个移植类创意，它把Amazon移植到印度，同时他们基于对印度本地市场的了解，为客户提供一些独家服务。&lt;/li&gt;
&lt;li&gt;第三是&lt;strong&gt;虚拟类创意&lt;/strong&gt;，这类创意把一些行为虚拟化到网络空间。&lt;br /&gt;
比如如果你要处理税务，&lt;a href=&quot;https://www.turbotax.com&quot;&gt;TurboTax&lt;/a&gt;可以电子化你的税务表格，甚至直接从手机或者掌上电脑发送。再比如要打车，&lt;a href=&quot;https://www.lyft.com/&quot;&gt;Lyft&lt;/a&gt;让这个过程非常方便，直接在手机上就能操作。&lt;br /&gt;
对于这种类型的创意，要充分利用现有的各类技术，比如Lyft就利用手机上带的GPS定位为用户提供叫车服务。&lt;/li&gt;
&lt;li&gt;第四是&lt;strong&gt;混合类创意&lt;/strong&gt;，这类创意奖两个或更多的创意混合在一起。&lt;br /&gt;
&lt;a href=&quot;https://slack.com/&quot;&gt;Slack&lt;/a&gt;，一个在线信息工具就是典型的混合类创意。在这个工具中，你可以管理邮件，聊天，建立私有群等，并且可以搜索所有内容。
5.最后是&lt;strong&gt;不可能的创意&lt;/strong&gt;，或者叫“几乎不可能”的创意。&lt;br /&gt;
比如&lt;a href=&quot;https://www.google.com/loon/&quot;&gt;Google的Loon&lt;/a&gt; 项目，试图利用氦气球为农村或者其他边远地区提供互联网服务。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;很多创意可以有好多不同的分类特性。&lt;/p&gt;
&lt;p&gt;比如&lt;a href=&quot;https://www.shyp.com/&quot;&gt;Shyp&lt;/a&gt;，这是一个提供发送信件和快递的APP。用户只需要选择物品，使用手机拍照，然后设置发货目的地，下单发货。接下来，Shyp公司就会安排其他的工作，如上门取件，找到最低价格、最可靠的发货方式帮用户完成发货。在这个应用创意中，就包括简化、移植和虚拟化三种特性。&lt;/p&gt;
&lt;p&gt;再比如&lt;a href=&quot;https://curofy.com/&quot;&gt;Curofy&lt;/a&gt;，这是一家印度公司，其应用类似于LinkedIn，但是只针对医生。医生在这个手机应用中查询彼此的信息，讨论案例，获取最新的医学新闻等。这个创意就包括了简化、移植、虚拟化和混合四种特性。&lt;/p&gt;
&lt;h1 id=&quot;观察和倾听&quot;&gt;观察和倾听&lt;/h1&gt;
&lt;p&gt;平时要学会多去观察，多去倾听和沟通（备注：观察、倾听和沟通也是要学习的啊！），看看大家都有些什么样的抱怨和问题。要尽量确保你的主意是真正地解决了问题，而不是解决一个不存在的问题，这就需要你多多与用户沟通。&lt;/p&gt;
&lt;p&gt;同时，最好的问题常常是你自己亲身经历的，而且要解决这样的问题你的动力就会大，这将使你在面对挫折时能始终坚持。所以多去关注你感兴趣的行业和事物。&lt;/p&gt;
&lt;p&gt;课程中采访了Arron Harris，他以前也是一个创业者，创建了Tutorspree，目前是&lt;a href=&quot;https://www.ycombinator.com/&quot;&gt;Y-Combinator&lt;/a&gt;的一个合伙人。&lt;/p&gt;
&lt;p&gt;他认为没有什么简单唯一的方法找到一个好点子，但是好点子都有一个共性：“通常诞生在人们试图解决他们自己的问题，他们真正了解的问题时”。&lt;/p&gt;
&lt;p&gt;比如Dropbox就是一个好例子。创始人Drew对于每次传文件，用U盘拷来拷去很烦。为了解决这个问题，他想到了云存储。现在我们会觉得在一个互联网的时代还要那么用U盘传文件太傻了，但是在2007年，云存储的概念还没有，当时Arron还在使用Gmail保存自己的文件，以防本地电脑出问题，或者到其他地方需要用到这个文件（备注，我现在也常常这么用邮箱）。&lt;/p&gt;
&lt;p&gt;当然也有一些创业者，尤其是有开发背景的创业者，他们有时候是先有一个好的技术方面的想法，再反过来寻找可以解决的问题。这也是可行的，但是在真正开发前，一定要走出去与用户交流沟通，以确定所解决的问题是用户真正需要的。&lt;/p&gt;
&lt;p&gt;对于创业来说，创意和人谁更重要，以前一般都认为创业者最重要，但是现在大家逐渐明白创业者和点子都很重要。创业者不一定是最聪明，但是必须要能坚定的推进，否则再好的点子也没用。同时点子也很重要，如果点子不靠谱，那么再好再坚定的创业者也没用。&lt;/p&gt;
&lt;h1 id=&quot;找到你自己的点子&quot;&gt;找到你自己的点子&lt;/h1&gt;
&lt;p&gt;怎么找到自己的创意，可以试试“头脑风暴”的方式：用一分钟时间，在一张纸上写下你想到的所有问题。然后，再用一分钟，写下你所能想到的解决方案。&lt;/p&gt;
&lt;p&gt;在这个过程中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;绝不要说“不”&lt;/li&gt;
&lt;li&gt;没有“坏”的点子&lt;/li&gt;
&lt;li&gt;不要急着下判断&lt;/li&gt;
&lt;li&gt;避免那些热门词&lt;/li&gt;
&lt;li&gt;保持活力&lt;/li&gt;
&lt;li&gt;支持态度&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;除了“脑力风暴”，也可以到苹果的&lt;a href=&quot;https://www.apple.com/itunes/charts/free-apps/&quot;&gt;App Store&lt;/a&gt;或者谷歌的&lt;a href=&quot;https://play.google.com/store&quot;&gt;Play Store&lt;/a&gt;站点，仔细浏览下前100位的应用，说不定你就能找到自己的创意灵感。看应用下面用户的点评，这样就能更好地了解用户的想法。&lt;/p&gt;
&lt;p&gt;一些要注意的问题：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;审视你的动机。如果你觉得一个产品创意很棒，但是自己却完全没有使用的兴趣，那么很可能你还没有开发完就已经嫌烦了，最终不了了之。相反，当你开发一个很有激情的产品时，你的兴趣会保证你能一直坚持推进该产品的开发。&lt;/li&gt;
&lt;li&gt;KISS原则。保持简单和直接（KISS. Keep it simple, stupid.）我们常常会不由自主地开发一个大而全的产品，千万别这样。否则你的产品会太复杂，没人会用。&lt;/li&gt;
&lt;li&gt;不要担心创意已经有人用了。举个例子，苹果的App Store上有超过100万的各种应用app，创造一个完全新产品的可能性非常之小。即使已经存在类似产品，也有改进的空间。同时，类似产品的存在也说明这个有市场。相反，如果你要开发的产品没有竞争者，常常意味着没有人会需要这个。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;最后，Udacity提供了一些文章和视频，可以为我们寻找灵感提供帮助：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.ycombinator.com/rfs/&quot;&gt;Y Combinator’s Request for Startups&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://paulgraham.com/startupideas.html&quot;&gt;How to Get Startup Ideas&lt;/a&gt; - 中文版《&lt;a href=&quot;http://select.yeeyan.org/view/267061/334786&quot;&gt;如何获得创业灵感&lt;/a&gt;》&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.wsj.com/articles/SB10001424127887324445904578283792526004684&quot;&gt;How Entrepreneurs Come Up With Great Ideas&lt;/a&gt; - 中文版《&lt;a href=&quot;http://www.bigear.cn/news-627-100058.html&quot;&gt;创业灵感源自何处？&lt;/a&gt;》&lt;/li&gt;
&lt;li&gt;Ted演讲视频&lt;a href=&quot;http://www.ted.com/talks/lang/eng/tim_brown_on_creativity_and_play.html&quot;&gt;Creativity and Play&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Ted演讲视频&lt;a href=&quot;http://www.ted.com/talks/lang/eng/tim_harford.html&quot;&gt;Trial, Error, and the God Complex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Ted演讲视频&lt;a href=&quot;http://www.ted.com/talks/lang/eng/matt_cutts_try_something_new_for_30_days.html&quot;&gt;Try Something New For 30 Days&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><category>Tech</category><category>产品</category><category>创意</category><category>Udacity</category></item><item><title>Breeze，让无车者也能成为Uber/Lyft司机</title><link>https://vincentping.com/cn/breeze-help-uber-lyft-driver/</link><guid isPermaLink="true">https://vincentping.com/cn/breeze-help-uber-lyft-driver/</guid><description>对于Uber和Lyft这样的打车平台来说，随着对出行市场的占有率越来越高，他们面对的问题和别的行业有所不同。对于他们来说，获取用户非常简单，甚至太简单了，导致现在他们常常面临的问题是：用户太多，而司机太少。</description><pubDate>Thu, 28 Apr 2016 16:10:00 GMT</pubDate><content:encoded>&lt;p&gt;对于Uber和Lyft这样的打车平台来说，随着对出行市场的占有率越来越高，他们面对的问题和别的行业有所不同。对于他们来说，获取用户非常简单，甚至太简单了，导致现在他们常常面临的问题是：用户太多，而司机太少。&lt;/p&gt;
&lt;p&gt;Uber和Lyft都公开承认这一点，他们希望能有更多人加入司机的行列，为他们提供驾驶服务。&lt;/p&gt;
&lt;p&gt;为了解决这种供需不平衡的问题，这些公司都推出交通高峰期“加价”的政策，以吸引司机提供服务。同时，Uber还提供一种金融服务，为司机买车提供低息贷款。&lt;/p&gt;
&lt;p&gt;我们都知道“有需求的地方，就有生意机会”。那么打车平台对更多司机的需求，是不是一个生意机会呢？&lt;/p&gt;
&lt;h1 id=&quot;breeze的前因后果&quot;&gt;Breeze的前因后果&lt;/h1&gt;
&lt;p&gt;初创企业Breeze就是针对这个需求而来的。很多人想成为Uber或Lyft司机，但是没有车，Breeze就租车给他们运营，然后每周收取租车的费用。&lt;/p&gt;
&lt;p&gt;故事要从2013年底开始说起，当时Jeff Pang想到了这个点子，但是他不确定市场需求怎么样，于是他搭建了一个简单的网页，叫ZephyrCar (&lt;a href=&quot;http://www.zephyrcar.com/)%EF%BC%8C%E7%84%B6%E5%90%8E%E5%9C%A8Craigslist%E5%88%86%E7%B1%BB%E5%B9%BF%E5%91%8A%E7%BD%91%E7%AB%99%E5%8F%91%E4%BA%86%E4%B8%AA%E5%B0%8F%E5%B9%BF%E5%91%8A%EF%BC%8C%E4%BB%A5%E6%A3%80%E9%AA%8C%E5%B8%82%E5%9C%BA%E5%8F%8D%E5%BA%94%E3%80%82%E5%BE%88%E5%BF%AB%EF%BC%8C%E5%B8%82%E5%9C%BA%E7%9A%84%E5%8F%8D%E5%BA%94%E8%AE%A9%E4%BB%96%E6%84%9F%E8%A7%89%E5%BE%88%E6%8C%AF%E5%A5%8B%E3%80%82%5B%E6%9C%80%E4%BD%8E%E6%88%90%E6%9C%AC%E7%9A%84%E9%AA%8C%E8%AF%81%E6%83%B3%E6%B3%95&quot;&gt;http://www.zephyrcar.com/)，然后在Craigslist分类广告网站发了个小广告，以检验市场反应。很快，市场的反应让他感觉很振奋。[最低成本的验证想法&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;于是他和他在HomeJoy的同事Ned Ryan、Charlie Fang一起，进一步调研这个市场，他们加入Uber和Lyft以体验司机的需求，Pang甚至参加出租车司机的培训，并在出租车公司租了辆medallion运营了几个星期。他们还刷他们的信用卡看看能不能买几辆车试试。[进一步了解市场和用户需求]&lt;/p&gt;
&lt;p&gt;但是很快他们意识到刷信用卡的方式完全不行，最后他们找到一家神秘的商业伙伴愿意租新车给他们。[寻找需要的资源]&lt;/p&gt;
&lt;p&gt;到这时，他们才从HomeJoy辞职，然后成立了公司，改名为&lt;a href=&quot;http://www.joinbreeze.com/&quot;&gt;Breeze&lt;/a&gt;，在办公室边上的街角租了个停车场，很快招募到了50位司机和25辆车。这个时候是2014年的4月。&lt;/p&gt;
&lt;p&gt;经过两年的发展，Breeze已经获得了一些投资人的关注，也据说得到Mark Cuban[1999年其创立的网络公司Broadcast.com被雅虎公司以五十九亿美元的天价收购，如今市NBA达拉斯小牛队的拥有者]的投资。至2016年4月，他们已经在六个城市开通服务，包括旧金山、洛杉矶、西雅图、芝加哥、波士顿和华盛顿DC。&lt;/p&gt;
&lt;h1 id=&quot;breeze的商业模型和问题&quot;&gt;Breeze的商业模型和问题&lt;/h1&gt;
&lt;p&gt;司机租用一辆Toyota Prius，首先一次性费用是$99，然后每周租金$195。同时每周有600英里的行程限制，超过部分会另收费0.15美元/英里。&lt;/p&gt;
&lt;p&gt;市面上还有很多公司提供类似的租车服务，但是主要都是一些传统的租车公司，而不像Breeze这样是一家初创企业。目前他们遇到的问题大致有这么几个：&lt;/p&gt;
&lt;h2 id=&quot;1保险问题&quot;&gt;1、保险问题&lt;/h2&gt;
&lt;p&gt;目前Uber和Lyft这样的打车平台都还在想办法解决汽车保险的问题，他们还不能为司机提供全天候的商业运营保险。这个时候再加入Beeeze这样的公司，这时就要包括以下五个角色了：Uber这样的打车平台、汽车司机、汽车乘客、第三方、Breeze这样的汽车出租公司。这个保险产品怎么设计，成本多少？目前还没有答案。&lt;/p&gt;
&lt;p&gt;目前Breeze是让司机购买个人保险，但是这种保险不可能同时针对打车平台Uber和Lyft，还加上Breeze推荐司机提供的其他服务，如送货服务Instacart等。&lt;/p&gt;
&lt;p&gt;保险是个问题！&lt;/p&gt;
&lt;h2 id=&quot;2价格竞争问题&quot;&gt;2、价格竞争问题&lt;/h2&gt;
&lt;p&gt;每周租金$195是比较贵的，Uber的金融服务其实和Breeze有竞争关系，曾经也发生过Uber取消从Breeze租车司机账号的事情，当然现在解决了。但是竞争关系依然存在。&lt;/p&gt;
&lt;p&gt;同时，与很多区域性的租车公司会有竞争。&lt;/p&gt;
&lt;h2 id=&quot;3服务问题&quot;&gt;3、服务问题&lt;/h2&gt;
&lt;p&gt;在Yelp上有关于Breeze的点评，其中有很多负面的，主要是服务问题，比如周租金太高，司机不能有任何意外[如生病]，否则租金延后就会停止服务；如果要求退出时，有很多的要求，如还车钱要去专门公司非常严格的验车、维修费用很高等。&lt;/p&gt;
&lt;p&gt;Breeze本质上是一家汽车金融服务公司，这样的公司如果服务跟不上的话，很难保持其竞争力。&lt;/p&gt;
&lt;h1 id=&quot;关于共享平台的一点思考&quot;&gt;关于共享平台的一点思考&lt;/h1&gt;
&lt;p&gt;共享经济现在已经非常普及了，有共享汽车（Uber、Lyft、滴滴）、共享住房（AirBnb）等，其中从业人员的数目已经非常庞大，比如Uber2015年就称其平台上活跃司机数超过100万，而滴滴2016年4月发布报告称其平台上的司机人数已超过1330万。&lt;/p&gt;
&lt;p&gt;那么这么多的从业人员，其本身就是一个市场，专门针对这个市场开发用户需要的产品，不失为一个好主意，比如电台、网站、培训、教程、订餐等等。&lt;/p&gt;
&lt;p&gt;有一个例子，&lt;a href=&quot;http://therideshareguy.com/&quot;&gt;Harry G Campbell的个人博客&lt;/a&gt;，从2014年5月开始，Harry在这个网站上提供针对司机的各种信息，目前全球排名达到92,620。&lt;/p&gt;
&lt;p&gt;国内也有“&lt;a href=&quot;http://www.upxuan.com/&quot;&gt;滴滴专车招聘司机&lt;/a&gt;”，“&lt;a href=&quot;http://www.youbusiji.com/&quot;&gt;优步司机网&lt;/a&gt;”这样类似的网站。&lt;/p&gt;
</content:encoded><category>Tech</category><category>产品</category><category>创意</category></item><item><title>创业者应该具有怎样的素质？——Udacity课程《产品设计》学习笔记1</title><link>https://vincentping.com/cn/what-traits-tech-founder-must-have/</link><guid isPermaLink="true">https://vincentping.com/cn/what-traits-tech-founder-must-have/</guid><description>企业家是否能够培养？这本身就是一个问题。一个企业家所扮演的角色非常广泛，除了企业内的经营管理工作，还有很多企业外的作用，所以要找到一个简单的成功公式非常困难。</description><pubDate>Wed, 20 Apr 2016 08:25:00 GMT</pubDate><content:encoded>&lt;p&gt;Udacity的&lt;a href=&quot;https://www.udacity.com/course/tech-entrepreneur-nanodegree--nd007&quot;&gt;科技企业家（Tech Entrepreneur）微学位认证项目&lt;/a&gt;主要教授：如何设计开发一个赢利的技术产品，并在该产品上创建一个成功的企业。&lt;/p&gt;
&lt;p&gt;该项目由Udacity和Google联合推出，内容不仅包括理论知识，也有具体的实践，以指导学生如何将一个创新点子转换成适合市场的产品。&lt;/p&gt;
&lt;p&gt;《&lt;a href=&quot;https://www.udacity.com/course/product-design--ud509&quot;&gt;产品设计&lt;/a&gt;》课程是“科技企业家”项目的第一门课，介绍近年来一些硅谷公司的实践和经验，讲解怎么创造出实用新颖而又有市场价值的产品。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;企业家是否能够培养？这本身就是一个问题。一个企业家所扮演的角色非常广泛，除了企业内的经营管理工作，还有很多企业外的作用，所以要找到一个简单的成功公式非常困难。&lt;/p&gt;
&lt;p&gt;因此我们只能针对具体的案例进行分析和讲解，从而总结出企业家应该具有的素质。当然这些素质也只是成功的一些必要条件，真正能否成功还有很多其他变数：经济环境、市场环境甚至家庭因素等等，当然还有运气。&lt;/p&gt;
&lt;h1 id=&quot;optimizely和locket&quot;&gt;Optimizely和Locket&lt;/h1&gt;
&lt;p&gt;课程首先介绍了两家创业公司：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/pete_koomen_in_optimizely.jpg&quot; alt=&quot;pete koomen in optimizely&quot;&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.optimizely.com/&quot;&gt;Optimizely&lt;/a&gt;是一家提供站点/应用优化的公司，提供测试、个性化和优化服务，从而提高站点/应用的用户转化率(conversion rate)。他们的第一家客户是一家新成立的为海地地震灾区筹款的基金组织，他们的服务使该基金网站的筹款用户转化率提高了10%。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;http://www.getlocket.com/&quot;&gt;Locket&lt;/a&gt;提供手机待机锁屏APP，最初创业时他们的想法是提供锁屏广告，帮用户出租锁屏获取收入。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;APP发布后非常受欢迎，第一个月就获得100万的用户，但是因为未来用户量无法预测，从而无法开始销售广告；同时广告付费的周期问题导致需要很大的融资(广告发布结束后3个月才能得到广告主的付款，而给用户的广告收入要提前支出)，也就是说他们的商业模式存在问题。&lt;/p&gt;
&lt;p&gt;于是他们迅速进行了调整，从广告模式转变到提供相关内容的模式，也即用户每次看手机屏幕时，该APP会推送一些相关的信息给用户。&lt;/p&gt;
&lt;p&gt;通过测试，他们觉得内容模式可行，然后开始为一些meetup公司有偿提供内容通道。&lt;/p&gt;
&lt;p&gt;当然，在这个商业模式转换过程中，用户群也发生了变化。在前者的情况，用户群是一些每月$3 - $5的广告受众，而在内容模式中，用户是那些对内容感兴趣的人。&lt;/p&gt;
&lt;h1 id=&quot;创业体会&quot;&gt;创业体会&lt;/h1&gt;
&lt;p&gt;然后，两家创业公司的创始人分别介绍了他们对创新企业家的理解，以及他们在创业过程中的体会：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/yunha_in_locket.jpg&quot; alt=&quot;yunha in lockety&quot;&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Locket的Yunha坦诚自己在工作中很强势，有时候没有耐心，虽然自己也很难受，但是为了推进任务的完成，不得不这样。
对于产品的开发很有满足感，比如看到一个产品从纸面设计到实际投入市场。&lt;/p&gt;
&lt;p&gt;当被问到：什么技能是创业者必须具备的时，她的回答是：
对于自己的想法不能太顽固，要把它当作一个实验，验证其有效性。而不能这么想：“这个想法是我的梦想，我一定要干成”，而不能接受想法的失败。其实作为实验，最差的结果也就是，这个想法失败了，自己也不知道为什么失败，是想法本身的问题，还是执行的问题？&lt;/p&gt;
&lt;p&gt;所以，一个想法失败了，但是从中知道了原因，其实就已经是成功，成功在于你通过这个“实验”进步了。也就是说，失败是一种可能的结果，但是最好知道为什么。&lt;/p&gt;
&lt;p&gt;当然最好能很快就证明这个想法失败了，而不是拖很长时间再发现这个“实验”失败了。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Optimizely的Pete Koomen认为：努力的工作，一些运气，不断的沟通，但是最重要的是要能面对自己想法的失败，从失败中总结经验教训，并锲而不舍的努力。&lt;/p&gt;
&lt;p&gt;对于“什么样的技能对于开始创业非常重要？”这个问题，他的回答是：
一个是“应变”能力，事情发展不如预期时，要能接受并重头再来；必须对“不”字感到自在，因为作为创业者，你会听到很多的“不”字。
第二个是“走出去”，一个产品只有在真正掌握了用户需求的时候，才是有用的，否则都是无用功。而要真正了解用户需求，必须花足够的时间“走出去”。&lt;/p&gt;
&lt;p&gt;要对自己的创业想法始终保持一种怀疑态度，除非它能让用户心甘情愿的付费。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&quot;学习心得&quot;&gt;学习心得&lt;/h1&gt;
&lt;p&gt;那么，作为一个创业者，到底需要哪些素质呢？我的理解是，作为创业者：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;首先心态上一定要保持开放。对于创业，要像爱迪生搞发明创造一样，把创业看成不断地实验，不断去验证一些假设，在不断失败的实验中，最终找到成功的方法。所以当我们有一个想法或者一个目标，我们就应该启动一系列的实验，实验1、2、3……，然后通过这些实验的结果指标做出正确的判断。&lt;/li&gt;
&lt;li&gt;对于“创业”这件事本身，我们创业者要学会放轻松，一个想法的失败并不是一个创业者的失败。&lt;/li&gt;
&lt;li&gt;加强沟通能力，合伙人之间的沟通，与用户之间进行的沟通，要充分了解用户各种层次的真实需求。&lt;/li&gt;
&lt;li&gt;强大的执行力，面对各种困难和市场诱惑，能坚定地按照自己的计划推进。&lt;/li&gt;
&lt;li&gt;最后则是，努力的工作。&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><category>Tech</category><category>创业</category><category>Udacity</category></item><item><title>Instacart创业者早期的故事</title><link>https://vincentping.com/cn/beginning-story-of-instacart-apoorva-mehta/</link><guid isPermaLink="true">https://vincentping.com/cn/beginning-story-of-instacart-apoorva-mehta/</guid><description>故事从2010年1月说起，80后的Apoorva Mehta在亚马逊已经工作了2年，作为一个开发工程师，他在亚马逊学到了很多，但同时也开始对公司里缓慢官僚的气氛有些感到厌倦，他希望有所改变。</description><pubDate>Sat, 16 Apr 2016 13:25:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;http://instacart.com/&quot;&gt;Instacart&lt;/a&gt;是一家生鲜食品网络采购平台，相当于生鲜食品采购的Uber/滴滴打车模式：用户通过Instacart应用下订单，附近的采购人员接单，去应用支持的商店购买物品，然后运送给用户，这里的采购人员并不属于Instacart，类似于滴滴打车里司机的角色。而Instacart应用本身只是一个软件平台，它没有自己的商店、货物、采购运送人员或者汽车等。&lt;/p&gt;
&lt;p&gt;Instacart成立于2012年7月，到2016年4月，已经完成六轮融资，累计2.75亿美金，最近2016年3月的投资来自Whole Foods Market（投资金额未公开）。如今市值超过20亿美金。&lt;/p&gt;
&lt;h1 id=&quot;创业是一种梦想&quot;&gt;创业是一种梦想&lt;/h1&gt;
&lt;p&gt;故事从2010年1月说起，80后的Apoorva Mehta在亚马逊已经工作了2年，作为一个开发工程师，他在亚马逊学到了很多，但同时也开始对公司里缓慢官僚的气氛有些感到厌倦，他希望有所改变。由于一直都有创业的梦想，他开始参加西雅图的各种投资人、创业者的聚会。在聚会上，大家讨论着各种他从未听说过的概念，可转换债券、A轮投资、天使投资、风险投资、客户、企业家……。面对这种情况，年轻的Apoorva并没有气馁，他开始努力学习创业相关的知识，阅读各种书籍，尽量和投资者、创业者进行交流沟通。同时因为本身是技术开发人员，Apoorva在一边了解创业知识的同时，一边利用自己的业余时间构想并开发一些产品。&lt;/p&gt;
&lt;p&gt;但是很快，随着他创业的念头越来越强，开发自己产品投入的精力越来越多，他在亚马逊的同事们开始感到奇怪：Apoorva作为一个后台工程师，他的电脑上为什么总是打开着专门开发苹果手机端应用的Xcode软件？这时，Apoorva意识到他必须做出选择：离开亚马逊专职构思自己的创业计划。于是在2010年的6月，Apoorva从亚马逊辞职。&lt;/p&gt;
&lt;p&gt;在辞职整整四年后的一次演讲中，他说，当时他感到非常担心和不确定。因为当时的他并没有明确创业的方向，他所抱有的只是一个创业的梦想，而且这个想法越来越强烈。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/apoorva_mehta.jpg&quot; alt=&quot;apoorva mehta&quot;&gt;&lt;/p&gt;
&lt;h1 id=&quot;不要为了创业而创业&quot;&gt;不要为了创业而创业&lt;/h1&gt;
&lt;p&gt;告别亚马逊，告别西雅图，Apoorva很快背上行囊搬到了阳光明媚的旧金山，这里是IT创业的天堂。在旧金山，他很快找到一位合作者，大家一起开始了共同的创业生涯。&lt;/p&gt;
&lt;p&gt;生活从来都不可能一帆风顺，创业更是如此。在接下来的时间里，Apoorva和他的搭档尝试了各种各样的创业构想，比如针对广告商的分析平台，又比如专门做食品的GroupOn式拍卖产品……，他们总共开发了不下20种产品，但是结果都只有一个：失败。&lt;/p&gt;
&lt;p&gt;转眼离Apoorva辞职已经有12个月的时间了，他开始怀疑自己当年离开亚马逊的决断是否正确，甚至怀疑自己是否适合创业。就在这个时候，他们又想到了一个点子：“针对律师的社交网络”。律师们可以通过这个网络建立联系、分享想法。他们认为这是一个非常棒的主意，因为美国的律师市场非常庞大，他们相信这个产品一定会带领他们走出失败，创造辉煌！&lt;/p&gt;
&lt;p&gt;于是他们开始开发产品、招募人员、寻找投资……一派红火场面。但是他们忽略了一件事，一件对于创业、对于产品开发至关重要的事情：他们并不了解律师，如同后来Apoorva承认的，他完全没有和律师一起合作和工作的任何经历。换句话说，Apoorva和他的搭档在为他们没什么了解的用户开发产品，并试图通过该产品解决一个他们也不知道对方有没有的问题。&lt;/p&gt;
&lt;p&gt;结果不难猜到，经过又是半年的打拼，在不断的与律师进行交流、不断的调整产品的思路之后，Apoorva终于认识到，这个“面向律师的社交网络”还是失败。最终他选择退出这个最初的创业团队。&lt;/p&gt;
&lt;p&gt;一年半创业失败的经历教育了Apoorva，让他终于认识到：创业的目的不能是为了创业，创业的目的应该是为了解决一个你非常在意的问题。&lt;/p&gt;
&lt;h1 id=&quot;解决真正的问题&quot;&gt;解决真正的问题&lt;/h1&gt;
&lt;p&gt;无论在西雅图还是在旧金山，Apoorva一直以来都不喜欢去超市、食品杂货店买食物，每次又不得不去采购些吃的喝的。他讨厌在超市里一道一道的找，选好了还要排个长长的队结账，最后好不容易运回家，突然发现自己少买了几样必需品！&lt;/p&gt;
&lt;p&gt;已经都什么年代了，大家在网络上买书、买衣服、买包、买电视冰箱、买汽车、买彩票……，可是人们还是必须每周去食品杂货店和各类超市里，以这种非常低效的方式购买自己的生活必需品。&lt;/p&gt;
&lt;p&gt;Apoorva认识到自己的这个问题，他也充分了解自己的需求。于是在2012年春天，他开始开发一个新产品：Instacart，专门针对食杂购买的一款应用。&lt;/p&gt;
&lt;p&gt;在开发Instacart时，Apoorva告诉自己，不完成开发就再也不去食杂店！于是直到2012年6月2日，他终于完成了开发，然后他在Instacart上下了第一个订单，接着自己再充当采购人员，去食杂店按照订单完成采购，最终运回给自己！——这是Instacart上的第一笔生意，而且马上开始赢利:-)&lt;/p&gt;
&lt;p&gt;很快，Apoorva周围的朋友纷纷主动开始使用这个产品，这是他创业两年来第一次有了产品受欢迎的感受，而不是像过去的20多个产品那样，每次都要请求周围的人去接受、去试用。Apoorva相信这次他选对了产品！&lt;/p&gt;
&lt;h1 id=&quot;绝不轻言放弃&quot;&gt;绝不轻言放弃&lt;/h1&gt;
&lt;p&gt;有了一个受欢迎而且可以赢利的产品，Apoorva马上开始着手融资。他找到位于硅谷的著名孵化器机构Y Combinator，但是当时已经超过项目申请截止日期2个月了。尽管如此，Apoorva对自己的产品非常有信心，他相信只要YC的投资者体验了Instacart，他们一定会接受他的申请。&lt;/p&gt;
&lt;p&gt;于是，他发动他的所有关系，24小时之内联系到YC的一些投资人，希望能加入申请。然后他焦急地等待回音。一个接着一个，回复都是：“绝对不行，太晚了！”。直到最后他收到Garry Tan的回复说：“你可以填一个延迟的申请表，但是现在想加入几乎不可能了”。正是因为这“几乎”两字，Apoorva看到了一线希望。同时他意识到，这些YC的投资人都并不知道Instacart是干什么用的，也不知道Instacart的与众不同。于是他打开应用，给Garry Tan订了6瓶啤酒，发送到位于硅谷的YC总部所在地。&lt;/p&gt;
&lt;p&gt;不久Apoorva就接到了Garry Tan的电话，让他次日前往YC总部见面。第二天，Apoorva与YC的四位投资者进行了一个小时的会谈，他们询问了关于Instacart产品的各种问题，最后当他离开时，对方告诉他如果YC有投资意向，会和他联系的。久混职场的人都知道，这常常是一种客气拒绝的方法，而当Apoorva心灰意冷准备接受又一次失败时，十分钟后他就接到了YC的电话，他被YC孵化器录取了，获得了种子投资。&lt;/p&gt;
&lt;p&gt;至此，Apoorva和他的Instacart开始进入了快速发展阶段。&lt;/p&gt;
&lt;p&gt;下面是Instacart累计获得的投资：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2012年6月， 种子投资（未公开）&lt;/li&gt;
&lt;li&gt;2012年10月，种子投资（$2.3M)&lt;/li&gt;
&lt;li&gt;2013年4月，A轮（$8.5M）&lt;/li&gt;
&lt;li&gt;2014年6月，B轮（$44M）&lt;/li&gt;
&lt;li&gt;2015年1月，C轮（$220M）&lt;/li&gt;
&lt;li&gt;2016年3月，未公开&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;从Apoorva的创业故事里，我们可以发现，对于创业者来说，一定要有从失败中快速恢复的能力，抱有梦想重头再来，因为每一次新的尝试都有可能是成功的开始。而在具体的操作中，产品的构思和设计又是至关重要的。&lt;/p&gt;
</content:encoded><category>Tech</category><category>创业</category><category>Instacart</category></item><item><title>美式音标练习笔记——“李阳疯狂英语手势突破发音”</title><link>https://vincentping.com/cn/american-phonetic-practice-notes/</link><guid isPermaLink="true">https://vincentping.com/cn/american-phonetic-practice-notes/</guid><description>基于“李阳疯狂英语手势突破发音”教程的美式音标学习笔记：视频只有半小时，练透却要下功夫——标注音标、三最法朗读、录音对比矫正发音。</description><pubDate>Mon, 28 Dec 2015 15:12:00 GMT</pubDate><content:encoded>&lt;p&gt;本文是我为了练习美式英语而学习美式音标的笔记，采用了“李阳疯狂英语手势突破发音”教程。&lt;/p&gt;
&lt;p&gt;该教程可以网上书店里买到，也可以在&lt;a href=&quot;http://www.youtube.com/&quot;&gt;youtube.com&lt;/a&gt;（海外）和&lt;a href=&quot;http://www.youku.com/&quot;&gt;youku.com&lt;/a&gt;（国内）网站上，使用“手势突破发音”作为关键词进行查询，找到对应的视频。&lt;/p&gt;
&lt;p&gt;整个教程视频一共13段，除去片头和片尾，实际上只需学习中间10段就可以了，每段平均2-3分钟，整个视频大概只有半小时。&lt;/p&gt;
&lt;p&gt;视频时间虽然不长，但是要真正完全掌握，还是需要下一番功夫的。我觉得需要注意以下几点：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;最好把每个单词的音标都标注出来，因为我们练习得就是音标，标注出来可以让我们发音更加明确、有信心。（后面的练习笔记里我已经全部标注了音标。）&lt;/li&gt;
&lt;li&gt;要使用“疯狂英语”的“三最法”进行疯狂练习。“三最法”：最大声（Loudly）、最快速（Quickly）和最清晰（Clearly）。&lt;/li&gt;
&lt;li&gt;要使用录音设备录下自己的发音，和原音进行比较，不断矫正。因为声音在我们头部内的传送，导致我们自己听到的声音和别人听到的我们的声音是不一样的。&lt;/li&gt;
&lt;li&gt;对于自己特别有问题的发音，比如很多人有的/n/和/l/不分、卷舌音的问题，要特别加强训练。&lt;/li&gt;
&lt;li&gt;开始时主要关注发音，等训练一段时间后，要全面模仿例句的重音、语调和节奏。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;最后，关于音标体系，美式音标和我们小时候学的国际音标有很多不同，我为了标注音标，查询了很多的字典网站，通过比较，最后采用的是&lt;a href=&quot;http://www.macmillandictionary.com/&quot;&gt;Macmillan字典网站&lt;/a&gt;上的美式音标。这里有该字典网站采用的&lt;a href=&quot;http://www.macmillandictionary.com/us/pronunciation/american/phonetic&quot;&gt;音标表&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;你可以下载本文的&lt;a href=&quot;/pdfs/20151228_american-phonetic-practice-notes.pdf&quot;&gt;pdf版本《美式音标练习笔记》&lt;/a&gt;参考。&lt;/p&gt;
&lt;h1 id=&quot;1-元音部分&quot;&gt;1. 元音部分&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;前元音 “长衣音”     / i /&lt;/strong&gt;                                                                                      英音 [ i: ]&lt;/p&gt;
&lt;p&gt;Please /pliz/&lt;/p&gt;
&lt;p&gt;Please speak English with me. /pliz/ /spik/ /ˈɪŋɡlɪʃ/ /wɪθ/ /mi/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;前元音 “短衣音”     / ɪ /&lt;/strong&gt;                                                                                    英音 [ i ]&lt;/p&gt;
&lt;p&gt;Difficult /ˈdɪfɪkəlt/&lt;/p&gt;
&lt;p&gt;It’s not difficult to speak English. /ɪts/ /nɑt/ /ˈdɪfɪkəlt/ /tə/ /spik/ /ˈɪŋɡlɪʃ/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;前元音 “45度音”     / e /&lt;/strong&gt;                                                                                    英音 [ e ]&lt;/p&gt;
&lt;p&gt;Bed /bed/ red /red/ everything /ˈevriˌθɪŋ/&lt;/p&gt;
&lt;p&gt;Go to bed. /ɡoʊ/ /tu/ /bed/&lt;/p&gt;
&lt;p&gt;Everything is ready. /ˈevriˌθɪŋ/ /ɪz/ /ˈredi/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;前元音 “90度大嘴音”     /æ/&lt;/strong&gt;                                                                                英音 [ æ ] [ a: ]&lt;/p&gt;
&lt;p&gt;Apple /ˈæp(ə)l/ practice /ˈpræktɪs/&lt;/p&gt;
&lt;p&gt;Practice makes perfect. /ˈpræktɪs/ /meɪks/ /ˈpɜrfɪkt/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;中元音 “短啊音”       /ʌ/&lt;/strong&gt;                                                                                        英音 [ʌ]&lt;/p&gt;
&lt;p&gt;Wonderful /ˈwʌndərfəl/&lt;/p&gt;
&lt;p&gt;My mother is a wonderful teacher.&lt;/p&gt;
&lt;p&gt;/maɪ/ /ˈmʌðər/ /ɪz/ /ə/ /ˈwʌndərfəl/ /ˈtitʃər/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;中元音 “重读卷舌音”     /ɜr/&lt;/strong&gt;                                                                                英音 [ ə: ]&lt;/p&gt;
&lt;p&gt;Work /wɜrk/ first /fɜrst/ perfect /ˈpɜrfɪkt/&lt;/p&gt;
&lt;p&gt;He speaks perfect English. /hi/ /spiks/ /ˈpɜrfɪkt/ /ˈɪŋɡlɪʃ/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;中元音 “轻读卷舌音”      /ər/&lt;/strong&gt;                                                                                  英音[ ə ]&lt;/p&gt;
&lt;p&gt;Remember /rɪˈmembər/&lt;/p&gt;
&lt;p&gt;Remember to call your mother. /rɪˈmembər/ /tu/ /kɔl/ /jʊr/ /ˈmʌðər/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;中元音 “短鹅音”     /ə/&lt;/strong&gt;                                                                                          英音 [ ə ]&lt;/p&gt;
&lt;p&gt;Together /təˈɡeðər/&lt;/p&gt;
&lt;p&gt;America and China should always work together.&lt;/p&gt;
&lt;p&gt;/əˈmerɪkə/ /ænd/ /ˈtʃaɪnə/ /ʃʊd/ /ˈɔlˌweɪz/ /wɜrk/ /təˈɡeðər/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;后元音 “感叹祖国大好山河音”     /ɑ/&lt;/strong&gt;                                                                       英音 [ a: ] [ ɔ ]&lt;/p&gt;
&lt;p&gt;Possible /ˈpɑsəb(ə)l/ bother /ˈbɑðər/&lt;/p&gt;
&lt;p&gt;Sorry to bother you. /ˈsɔri/ /tu/ /ˈbɑðər/ /ju/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;后元音 “大嘴卷舌音”      /ɑr/&lt;/strong&gt;                                                                                   英音 [ a: ]&lt;/p&gt;
&lt;p&gt;Charming /ˈtʃɑrmɪŋ/&lt;/p&gt;
&lt;p&gt;You’re very charming. /jʊr/ /ˈveri/ /ˈtʃɑrmɪŋ/&lt;/p&gt;
&lt;p&gt;You’re a charming young man. /jʊr/ /ə/ /ˈtʃɑrmɪŋ/ /jʌŋ/ /mæn/&lt;/p&gt;
&lt;p&gt;You have a charming smile. /ju/ /hæv/ /ə/ /ˈtʃɑrmɪŋ/ /smaɪl/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;后元音 “中嘴长元音”       /ɔ/&lt;/strong&gt;                                                                                     英音 [ ɔ: ]&lt;/p&gt;
&lt;p&gt;Always /ˈɔlˌweɪz/&lt;/p&gt;
&lt;p&gt;Always say “please” and “thank you”.&lt;/p&gt;
&lt;p&gt;/ˈɔlˌweɪz/ /seɪ/ /pliz/ /ænd/ /θæŋk/ /ju/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;后元音 “中嘴卷舌音”       /ɔr/&lt;/strong&gt;                                                                                    英音 [ ɔ: ]&lt;/p&gt;
&lt;p&gt;Important /ɪmˈpɔrt(ə)nt/&lt;/p&gt;
&lt;p&gt;It’s important to practice English every day.&lt;/p&gt;
&lt;p&gt;/ɪts/ /ɪmˈpɔrt(ə)nt/ /tu/ /ˈpræktɪs/ /ˈɪŋɡlɪʃ/ /ˈevri/ /deɪ/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;后元音 “经典收小腹减肥圆唇短乌音”      /ʊ/&lt;/strong&gt;                                                              英音 [ u ]&lt;/p&gt;
&lt;p&gt;Should /ʃʊd/&lt;/p&gt;
&lt;p&gt;You should work harder. /ju/ /ʃʊd/ /wɜrk/ /hɑrdər/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;后元音 “长乌音”         /u/&lt;/strong&gt;                                                                                           英音 [ u: ]&lt;/p&gt;
&lt;p&gt;Food /fud/&lt;/p&gt;
&lt;p&gt;What’s your favorite food? Chinese food.&lt;/p&gt;
&lt;p&gt;/wɑts/ /jʊr/ /ˈfeɪv(ə)rɪt/ /fud/ ? /ˌtʃaɪˈniz/ /fud/&lt;/p&gt;
&lt;p&gt;My favorite food is noodles. /maɪ/ /ˈfeɪv(ə)rɪt/ /fud/ /ɪz/ /ˈnud(ə)lz/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;合口双元音 “嘴角咧到耳朵上”       /eɪ/&lt;/strong&gt;                                                                       英音 [ ei ]&lt;/p&gt;
&lt;p&gt;Mistake /mɪˈsteɪk/&lt;/p&gt;
&lt;p&gt;Don’t be afraid of making mistakes.&lt;/p&gt;
&lt;p&gt;/doʊnt/ /bi/ /əˈfreɪd/ /əv/ /ˈmeɪkɪŋ/ /mɪˈsteɪks/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;合口双元音 “大嘴阿姨音”       /aɪ/&lt;/strong&gt;                                                                              英音 [ ai ]&lt;/p&gt;
&lt;p&gt;China /ˈtʃaɪnə/ smile /smaɪl/ fly /flaɪ/ time /taɪm/ I /aɪ/&lt;/p&gt;
&lt;p&gt;Is this your first time in China? /ɪz/ /ðɪs/ /jʊr/ /fɜrst/ /taɪm/ /ɪn/ /ˈtʃaɪnə/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;合口双元音 “中嘴短衣音”       /ɔɪ/&lt;/strong&gt;                                                                             英音 [ ɔi ]&lt;/p&gt;
&lt;p&gt;Enjoy /ɪnˈdʒɔɪ/&lt;/p&gt;
&lt;p&gt;I really enjoyed talking to you. /aɪ/ /ˈriəli/ /ɪnˈdʒɔɪd/ /ˈtɔkɪŋ/ /tu/ /ju/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;合口双元音 “舀水音”           /oʊ/&lt;/strong&gt;                                                                                    英音 [əu]&lt;/p&gt;
&lt;p&gt;Smoke /smoʊk/ hope /hoʊp/&lt;/p&gt;
&lt;p&gt;I hope to see you again. /aɪ/ /hoʊp/ /tu/ /si/ /ju/ /əˈɡen/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;合口双元音 “鬼哭狼嚎音”      /aʊ/&lt;/strong&gt;                                                                                英音 [au]&lt;/p&gt;
&lt;p&gt;How /haʊ/ outstanding /aʊtˈstændɪŋ/&lt;/p&gt;
&lt;p&gt;You’re outstanding. /jʊr/ /aʊtˈstændɪŋ/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;集中双元音 “短衣卷舌音”       /ɪr/&lt;/strong&gt;                                                                                英音 [ iə ]&lt;/p&gt;
&lt;p&gt;Clear /klɪr/&lt;/p&gt;
&lt;p&gt;It’s very important to have clear pronunciation.&lt;/p&gt;
&lt;p&gt;/ɪts/ /ˈveri/ /ɪmˈpɔrt(ə)nt/ /tu/ /hæv/ /klɪr/ /prəˌnʌnsiˈeɪʃ(ə)n/&lt;/p&gt;
&lt;p&gt;You have very clear pronunciation. Retarded /rɪˈtɑrdəd/&lt;/p&gt;
&lt;p&gt;/ju/ /hæv/ /ˈveri/ /klɪr/ /prəˌnʌnsiˈeɪʃ(ə)n/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;集中双元音 “咧嘴卷舌音”       /er/&lt;/strong&gt;                                                                                英音 [ εə ]&lt;/p&gt;
&lt;p&gt;care /ker/&lt;/p&gt;
&lt;p&gt;We should all care about the environment.&lt;/p&gt;
&lt;p&gt;/wi/ /ʃʊd/ /ɔl/ /ker/ /əˈbaʊt/ /ðə/ /ɪnˈvaɪrənmənt/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;集中双元音 “短乌卷舌音”       /ʊr/&lt;/strong&gt;                                                                                 英音 [uə]&lt;/p&gt;
&lt;p&gt;Sure /ʃʊr/&lt;/p&gt;
&lt;p&gt;I’m sure you’ll enjoy it. /aɪm/ /ʃʊr/ /jul/ /ɪnˈdʒɔɪ/ /ɪt/&lt;/p&gt;
&lt;p&gt;I’m sure you’ll like China. /aɪm/ /ʃʊr/ /jul/ /laɪk/ /ˈtʃaɪnə/&lt;/p&gt;
&lt;p&gt;I’m sure we’ll have a good time. /aɪm/ /ʃʊr/ /wil/ /hæv/ /ə/ /ɡʊd/ /taɪm/&lt;/p&gt;
&lt;p&gt;I’m sure you’re going to speak good English.&lt;/p&gt;
&lt;p&gt;/aɪm/ /ʃʊr/ /jʊr/ /ˈɡoʊɪŋ/ /tə/ /spik/ /ɡʊd/ /ˈɪŋɡlɪʃ/&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;注：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;短鹅音 /ə/ ：about [英] [ə’baut] [美] [ə’baʊt]&lt;/p&gt;
&lt;p&gt;轻读卷舌音 /ər/ ：teacher [英] [‘ti:tʃə] [美] ‘titʃər]&lt;/p&gt;
&lt;p&gt;这个“轻读卷舌音”是美式英语才有的，英式英语没有。英式和美式的一个明显区别是，单词的拼写中出现字母r，都要卷舌。&lt;/p&gt;
&lt;h1 id=&quot;2-辅音部分&quot;&gt;2. 辅音部分&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;/p/&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Possible /ˈpɑsəb(ə)l/ impossible /ɪmˈpɑsəb(ə)l/&lt;/p&gt;
&lt;p&gt;Nothing is impossible. /ˈnʌθɪŋ/ /ɪz/ /ɪmˈpɑsəb(ə)l/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;/b/&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Baby /ˈbeɪbi/ believe /bɪˈliv/&lt;/p&gt;
&lt;p&gt;Believe in yourself. /bɪˈliv/ /ɪn/ /jʊrˈself/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;/t/&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Time /taɪm/&lt;/p&gt;
&lt;p&gt;Don’t waste time. /doʊnt/ /weɪst/ /taɪm/ water /ˈwɔtər/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;/d/&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Decide /dɪˈsaɪd/&lt;/p&gt;
&lt;p&gt;Decide to study English. /dɪˈsaɪd/ /tu/ /ˈstʌdi/ /ˈɪŋɡlɪʃ/&lt;/p&gt;
&lt;p&gt;Let me know what you decide. /let/ /mi/ /noʊ/ /wɑt/ /ju/ /dɪˈsaɪd/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;/k/&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Keep /kip/&lt;/p&gt;
&lt;p&gt;Keep up the good work. /kip/ /ʌp/ /ðə/ /ɡʊd/ /wɜrk/ 再接再厉&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;/g/&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Government /ˈɡʌvərnmənt/&lt;/p&gt;
&lt;p&gt;Our government does a good job. /aʊr/ /ˈɡʌvərnmənt/ /dʌz/ /ə/ /ɡʊd/ /dʒɑb/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;/f/&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Feel /fil/&lt;/p&gt;
&lt;p&gt;I feel a little sick today. /aɪ/ /fil/ /ə/ /ˈlɪt(ə)l/ /sɪk/ /təˈdeɪ/&lt;/p&gt;
&lt;p&gt;I feel great today. /aɪ/ /fil/ /ɡreɪt/ /təˈdeɪ/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;/v/&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Very good /ˈveri/ /ɡʊd/&lt;/p&gt;
&lt;p&gt;Leave /liv/&lt;/p&gt;
&lt;p&gt;When are you leaving? /wen/ /ɑr/ /ju/ /ˈlivɪŋ/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;/s/&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Nervous /ˈnɜrvəs/&lt;/p&gt;
&lt;p&gt;You’re never nervous. /jʊr/ /ˈnevər/ /ˈnɜrvəs/&lt;/p&gt;
&lt;p&gt;Don’t be nervous. Relax. /doʊnt/ /bi/ /ˈnɜrvəs/, /rɪˈlæks/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;/z/&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Business /ˈbɪznəs/&lt;/p&gt;
&lt;p&gt;Do you do a lot of business in China?&lt;/p&gt;
&lt;p&gt;/du/ /jʊ/ /du/ /ə/ /lɑt/ /əv/ /ˈbɪznəs/ /ɪn/ /ˈtʃaɪnə/&lt;/p&gt;
&lt;p&gt;You buy a lot of cheap stuff here and sell in America.&lt;/p&gt;
&lt;p&gt;/jʊ/ /baɪ/ /ə/ /lɑt/ /əv/ /tʃip/ /stʌf/ /hɪr/ /ænd/ /sel/ /ɪn/ /əˈmerɪkə/&lt;/p&gt;
&lt;p&gt;I build it here and sell it in America.&lt;/p&gt;
&lt;p&gt;/aɪ/ /bɪld/ /ɪt/ /hɪr/ /ænd/ /sel/ /ɪt/ /ɪn/ /əˈmerɪkə/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;/ʃ/&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Special /ˈspeʃ(ə)l/ English /ˈɪŋɡlɪʃ/&lt;/p&gt;
&lt;p&gt;This is a special local dish. /ðɪs/ /ɪz/ /ə/ /ˈspeʃ(ə)l/ /ˈloʊk(ə)l/ /dɪʃ/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;/ʒ/&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Pleasure /ˈpleʒər/&lt;/p&gt;
&lt;p&gt;It’s a pleasure to be here today. /ɪts/ /ə/ /ˈpleʒər/ /tu/ /bi/ /hɪr/ /təˈdeɪ/&lt;/p&gt;
&lt;p&gt;It’s my pleasure. /ɪts/ /maɪ/ /ˈpleʒər/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;/θ/&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Bathroom /ˈbæθˌrum/&lt;/p&gt;
&lt;p&gt;I need to use the bathroom. /aɪ/ /nid/ /tu/ /juz/ /ðə/ /ˈbæθˌrum/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;/ð/&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Weather whether /ˈweðər/&lt;/p&gt;
&lt;p&gt;Are you used to the weather here? /ɑr/ /jʊ/ /ˈjust tu/ /ðə/ /ˈweðər/ /hɪr/&lt;/p&gt;
&lt;p&gt;Yes, I’m local. /jes/ /aɪm/ /ˈloʊk(ə)l/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;/h/&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Help /help/&lt;/p&gt;
&lt;p&gt;Let me help you. /let/ /mi/ /help/ /jʊ/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;/r/&lt;/strong&gt;      “四指卷舌音”，它还有个光荣称号叫“美国发音最具特色音”&lt;/p&gt;
&lt;p&gt;Terrific /təˈrɪfɪk/&lt;/p&gt;
&lt;p&gt;You look terrific today. /jʊ/ /lʊk/ /təˈrɪfɪk/ /təˈdeɪ/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;/tʃ/&lt;/strong&gt;       破擦音&lt;/p&gt;
&lt;p&gt;Change /tʃeɪndʒ/&lt;/p&gt;
&lt;p&gt;China is changing every day. /ˈtʃaɪnə/ /ɪz/ /ˈtʃeɪndʒɪŋ/ /ˈevri/ /deɪ/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;/dʒ/&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Knowledge /ˈnɑlɪdʒ/ language /ˈlæŋɡwɪdʒ/&lt;/p&gt;
&lt;p&gt;I love knowledge. /aɪ/ /lʌv/ /ˈnɑlɪdʒ/&lt;/p&gt;
&lt;p&gt;English is an international language.&lt;/p&gt;
&lt;p&gt;/ˈɪŋɡlɪʃ/ /ɪz/ /ən/ /ˌɪntərˈnæʃən(ə)l/ /ˈlæŋɡwɪdʒ/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;/m/&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Memory /ˈmem(ə)ri/&lt;/p&gt;
&lt;p&gt;I have a good memory. /aɪ/ /hæv/ /ə/ /ɡʊd/ /ˈmem(ə)ri/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;/n/&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Number /ˈnʌmbər/&lt;/p&gt;
&lt;p&gt;Can you give me your telephone number?&lt;/p&gt;
&lt;p&gt;/kæn/ /jʊ/ /ɡɪv/ /mi/ /jʊr/ /ˈteləˌfoʊn/ /ˈnʌmbər/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;/ŋ/&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Wrong /rɔŋ/&lt;/p&gt;
&lt;p&gt;Is there anything wrong? /ɪz/ /ðer/ /ˈeniˌθɪŋ/ /rɔŋ/&lt;/p&gt;
&lt;p&gt;Nothing is wrong. /ˈnʌθɪŋ/ /ɪz/ /rɔŋ/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;/l/&lt;/strong&gt;          “舌边音” 清楚的 一般在音节的头部&lt;/p&gt;
&lt;p&gt;Learn /lɜrn/&lt;/p&gt;
&lt;p&gt;Learn something new every day. /lɜrn/ /ˈsʌmθɪŋ/ /nu/ /ˈevri/ /deɪ/&lt;/p&gt;
&lt;p&gt;That’s my motto of life. /ðæts/ /maɪ/ /ˈmɑtoʊ/ /əv/ /laɪf/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;/l/&lt;/strong&gt;          模糊的，一般在音节的中间和后面&lt;/p&gt;
&lt;p&gt;helpful /ˈhelpfəl/&lt;/p&gt;
&lt;p&gt;You’re very helpful. /jʊr/ /ˈveri/ /ˈhelpfəl/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;/w/&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Welcome /ˈwelkəm/&lt;/p&gt;
&lt;p&gt;You are welcome to join us. /jʊ/ /ɑr/ /ˈwelkəm/ /tə/ /dʒɔɪn/ /ʌs/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;/j/&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Yesterday /ˈjestərˌdeɪ/&lt;/p&gt;
&lt;p&gt;I arrived yesterday morning. /aɪ/ /əˈraɪvd/ /ˈjestərˌdeɪ/ /ˈmɔrnɪŋ/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;/tr/&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Trouble /ˈtrʌb(ə)l/&lt;/p&gt;
&lt;p&gt;I don’t want to trouble you. /aɪ/ /doʊnt/ /wɑnt/ /tu/ /ˈtrʌb(ə)l/ /jʊ/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;/dr/&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Drink /drɪŋk/&lt;/p&gt;
&lt;p&gt;What would you like to drink? /wɑt/ /wʊd/ /jʊ/ /laɪk/ /tu/ /drɪŋk/&lt;/p&gt;
&lt;p&gt;I’d like to drink water. /aɪd/ /laɪk/ /tu/ /drɪŋk/ /ˈwɔtər/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;/ts/&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Lots /lɑts/&lt;/p&gt;
&lt;p&gt;I have lots of friends from all over the world.&lt;/p&gt;
&lt;p&gt;/aɪ/ /hæv/ /lɑts/ /əv/ /frendz/ /frɑm/ /ɔl/ /ˈoʊvər/ /ði/ /wɜrld/&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;/dz/&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Words /wɜrdz/&lt;/p&gt;
&lt;p&gt;Words can’t express how grateful I am.&lt;/p&gt;
&lt;p&gt;/wɜrdz/ /kænt/ /ɪkˈspres/ /haʊ/ /ˈɡreɪtfəl/ /aɪ/ /æm/  &lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;3-容易混淆的单词&quot;&gt;3. 容易混淆的单词&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Will /wɪl/&lt;/li&gt;
&lt;li&gt;Well /wel/&lt;/li&gt;
&lt;li&gt;Wall /wɔl/&lt;/li&gt;
&lt;li&gt;War /wɔr/&lt;/li&gt;
&lt;li&gt;Where /wer/&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
* Word /wɜrd/
* World /wɜrld/
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
* Very well /ˈveri/ /wel/
* Very weird /ˈveri/ /wɪrd/
* Very wild /ˈveri/ /waɪld/
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
* Kind /kaɪnd/
* Important /ɪmˈpɔrt(ə)nt/
* Solve /sɑlv/
</content:encoded><category>Edu</category><category>教育</category><category>英语</category><category>学习</category></item><item><title>如何去除Joomla 3网站静态化URL地址中的分类ID和文章ID</title><link>https://vincentping.com/cn/remove-category-article-id-from-url-in-joomla-3/</link><guid isPermaLink="true">https://vincentping.com/cn/remove-category-article-id-from-url-in-joomla-3/</guid><description>Joomla是一个非常专业的网站内容管理系统（CMS），但是其在SEO搜索引擎优化后的URL模式上有一些不足。这里记录了我的一些改进方法。</description><pubDate>Thu, 01 Oct 2015 17:33:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;目前本站使用工具直接生成静态页面，不再使用Joomla!，此处保留原文，仅供参考。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&quot;一问题&quot;&gt;一、问题&lt;/h1&gt;
&lt;p&gt;我的站点vincentping.com是使用Joomla 3.4.4版本管理的，Joomla是一个非常专业的网站内容管理系统（CMS），但是其在SEO搜索引擎优化后的URL模式上有一些不足。&lt;/p&gt;
&lt;p&gt;我首先创建了一些分类和文章，然后在系统管理后台的“Global Configuration”设置“SEO Settings”。其中的选项&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Search Engine Friendly URLs 设为 Yes&lt;/li&gt;
&lt;li&gt;use URL Rewriting 设为 Yes&lt;/li&gt;
&lt;li&gt;Adds Suffix to URL 也设为 Yes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如下图：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://vincentping.com/images/seo-setting.png&quot; alt=&quot;seo setting&quot;&gt;&lt;/p&gt;
&lt;p&gt;这个时候访问站点，文章的URL地址变成如下这样的形式：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.vincentping.com/cn/8-blogcn/14-remove-category-article-id-from-url-in-joomla-3-cn.html&quot;&gt;http://www.vincentping.com/cn/8-blogcn/14-remove-category-article-id-from-url-in-joomla-3-cn.html&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;相对于原来没有SEO优化前的地址：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.vincentping.com/index.php?option=com_content&amp;amp;view=article&amp;amp;id=14:remove-category-article-id-from-url-in-joomla-3-cn&amp;amp;catid=8&amp;amp;lang=cn&quot;&gt;http://www.vincentping.com/index.php?option=com_content&amp;amp;view=article&amp;amp;id=14:remove-category-article-id-from-url-in-joomla-3-cn&amp;amp;catid=8&amp;amp;lang=cn&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;上面的优化地址要好得多了，但是还有一些小小的不爽，比如在分类前的8-和文章名之前的14-。很显然这些数值都是数据库中的ID值，这样程序在查找后台数据库时，有了这些值会更加高效，但是对于普通访问者来说，这些数值就显得有些奇怪，而且会让站点显得不够专业，不够”高大上“！&lt;/p&gt;
&lt;p&gt;怎么办呢？经过在google上查询，网上有大量的相关讨论。经过不断地摸索和尝试，下面是我最终使用的解决办法。&lt;/p&gt;
&lt;h1 id=&quot;二解决方法&quot;&gt;二、解决方法&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;在Joomla系统的目录下，找到下面php文章：“components/com_content/router.php“；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;查找到下面代码：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$advanced = $params-&amp;gt;get(&apos;sef_advanced_link&apos;, 0);&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;把其中 “0” 改为 “1”，修改结果如下：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$advanced = $params-&amp;gt;get(&apos;sef_advanced_link&apos;, 1);&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;在这个router.php文件中共有两处需要修改的地方。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;继续在该router.php文件中，找到下面的代码段，然后注释掉：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt; if (strpos($segments[0], &apos;:&apos;) === false)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      $vars[&apos;view&apos;] = &apos;article&apos;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      $vars[&apos;id&apos;] = (int) $segments[0];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      return $vars;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;注释成：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt; /* if (strpos($segments[0], &apos;:&apos;) === false)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      $vars[&apos;view&apos;] = &apos;article&apos;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      $vars[&apos;id&apos;] = (int) $segments[0];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      return $vars;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  } */&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;然后整个修改就完成了！&lt;/p&gt;
&lt;p&gt;这个时候，该页面的URL地址变成：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://www.vincentping.com/cn/remove-category-article-id-from-url-in-joomla-3-cn.html&quot;&gt;http://www.vincentping.com/cn/remove-category-article-id-from-url-in-joomla-3-cn.html&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;提示：一旦以后Joomla版本升级，上述的修改可能被覆盖，就需要重新做。&lt;/p&gt;
&lt;h1 id=&quot;三一些其他可以尝试的方法&quot;&gt;三、一些其他可以尝试的方法&lt;/h1&gt;
&lt;p&gt;我在网络上搜索解决方法时，发现这个URL中数值问题对于Joomla社区已经是一个很”古老“的问题了，但是在核心代码中一直没有得到解决。所以市面上已经出现了许多的解决办法。下面这些方法都可以试试：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用第三方的SEF扩展，比如Sh404SEF，JoomSEF和SEF Advance等。可以到&lt;a href=&quot;http://extensions.joomla.org/&quot;&gt;JED(Joomla! Extensions Directory)&lt;/a&gt; 搜索”SEF“，就可以找到很多类似扩展。扩展的问题是很多需要付费，会增加服务器负担，而且升级和维护起来也是个问题。&lt;/li&gt;
&lt;li&gt;如果你对正则表达式比较熟悉，可以在.htaccess文件中增加解析和重定向规则来解决这些问题。当然使用太多.htaccess规则是会影响服务器效率的。&lt;/li&gt;
&lt;li&gt;最后，如果你的站点不大，文章也不多，那么可以像上面介绍的建立菜单项的方法，为每篇文章都建立一个菜单项，这个文章数值问题也能完全解决。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果想继续仔细研究下这个URL中的文章ID数值问题，推荐大家可以看看这个在Joomla官方论坛上的帖子：“&lt;a href=&quot;http://forum.joomla.org/viewtopic.php?f=712&amp;amp;t=826165&quot;&gt;Remove article id from url for joomla 3.0&lt;/a&gt;”。&lt;/p&gt;
</content:encoded><category>Tech</category><category>Joomla</category></item><item><title>深深网络深似海----搜索引擎之外的网络世界</title><link>https://vincentping.com/cn/deep-web-invisible-web/</link><guid isPermaLink="true">https://vincentping.com/cn/deep-web-invisible-web/</guid><description>互联网是一个信息的海洋，那么搜索引擎抓取只是这个海洋的表面，而在信息海洋的深处，存在巨大数量的内容，搜索引擎无法启及，这些内容叫着“DEEP WEB”，或者“INVISIBLE WEB”。</description><pubDate>Mon, 10 Nov 2003 12:43:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;本文写于2003年11月，此处保留原文，仅供参考。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&quot;1引言&quot;&gt;1、引言&lt;/h1&gt;
&lt;p&gt;可以把互联网想象成一个信息的海洋，为了帮助我们在这个海洋中找到自己需要的信息，就有了分类目录和搜索引擎这样的服务，前者采用人工分类的方法建立目录，提供用户查询，代表是Yahoo.com，后者使用程序软件（搜索机器人）在网络上抓取页面，提供查询，现在最著名的是Google.com。搜索引擎能查询到的信息远远比分类目录丰富，加上搜索技术的发展，使得查询结果也越来越准确，这就是Google.com及搜索技术现在这么热门的根本原因。&lt;/p&gt;
&lt;p&gt;到目前，GOOGLE中搜索的全部网页数已经超过了30亿，但是和整个互联网的丰富信息相比，这还不到1%，那么剩下的在哪里呢？为什么搜索引擎不检索呢？如何才能查询这些信息呢？……&lt;/p&gt;
&lt;h1 id=&quot;2什么是invisible-web--deep-web&quot;&gt;2、什么是INVISIBLE WEB / DEEP WEB&lt;/h1&gt;
&lt;p&gt;还是用这样的比喻：互联网是一个信息的海洋，那么搜索引擎抓取只是这个海洋的表面，而在信息海洋的深处，存在巨大数量的内容，搜索引擎无法启及，这些内容叫着“DEEP WEB”，或者“INVISIBLE WEB”，可以翻译成“搜索引擎不可见的网络”（为方便行文，下面仍直接使用“INVISIBLE WEB”）。&lt;/p&gt;
&lt;p&gt;举个实际的例子，我们要查询最新的“火车时刻表”，通过搜索引擎我们可以找到一些提供“火车时刻表”的站点，如 &lt;a href=&quot;http://www.he183.com/lieche/%EF%BC%8C%E4%BD%86%E6%98%AF%E7%9C%9F%E6%AD%A3%E8%A6%81%E7%9F%A5%E9%81%93%E5%85%B7%E4%BD%93%E8%BD%A6%E6%AC%A1%E7%9A%84%E8%AF%A6%E7%BB%86%E6%83%85%E5%86%B5%EF%BC%8C%E6%88%91%E4%BB%AC%E8%A6%81%E5%88%B0%E8%BF%99%E4%B8%AA%E7%AB%99%E7%82%B9%E8%BE%93%E5%85%A5%E8%BD%A6%E6%AC%A1%E8%BF%9B%E8%A1%8C%E6%9F%A5%E8%AF%A2%E3%80%82%E5%9C%A8%E8%BF%99%E9%87%8C%EF%BC%8C%E8%BF%99%E4%B8%AA%E7%AB%99%E7%82%B9%E9%87%8C%E7%9A%84%E4%BF%A1%E6%81%AF%E8%99%BD%E7%84%B6%E6%88%91%E4%BB%AC%E4%BA%BA%E7%B1%BB%E5%8F%AF%E4%BB%A5%E9%80%9A%E8%BF%87%E6%9F%A5%E8%AF%A2%E5%BE%97%E5%88%B0%E8%87%AA%E5%B7%B1%E9%9C%80%E8%A6%81%E7%9A%84%E4%BF%A1%E6%81%AF%EF%BC%8C%E4%BD%86%E6%98%AF%E5%AF%B9%E4%BA%8E%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8E%E5%88%99%E6%97%A0%E6%B3%95%E6%8A%93%E5%8F%96%EF%BC%8C%E8%BF%99%E4%BA%9B%E5%86%85%E5%AE%B9%EF%BC%8C%E5%B0%B1%E5%8F%AB%E7%9D%80%E2%80%9CINVISIBLE&quot;&gt;http://www.he183.com/lieche/，但是真正要知道具体车次的详细情况，我们要到这个站点输入车次进行查询。在这里，这个站点里的信息虽然我们人类可以通过查询得到自己需要的信息，但是对于搜索引擎则无法抓取，这些内容，就叫着“INVISIBLE&lt;/a&gt; WEB”。&lt;/p&gt;
&lt;p&gt;根据Bright Planet公司（&lt;a href=&quot;http://www.brightplanet.com/%EF%BC%89%E5%9C%A82000%E5%B9%B4%E5%BA%95%E8%BF%9B%E8%A1%8C%E7%9A%84%E4%B8%80%E6%AC%A1%E7%A0%94%E7%A9%B6%EF%BC%88&quot;&gt;http://www.brightplanet.com/）在2000年底进行的一次研究（&lt;/a&gt; &lt;a href=&quot;http://www.brightplanet.com/deepcontent/tutorials/DeepWeb/index.asp&quot;&gt;http://www.brightplanet.com/deepcontent/tutorials/DeepWeb/index.asp&lt;/a&gt; ）表明，搜索引擎无法抓取的网络内容是其可以抓取的500倍。尽管这几年搜索引擎技术突飞猛进，但是“INVISIBLE WEB”的内容也在以更快的速度增长。同时Bright Planet公司的研究表明，这些“INVISIBLEWEB”的内容95%都是可以通过互联网公开访问的（无须付费和注册），只是搜索引擎不能抓取，或者抓取了也无法提供查询。（这也解释了为什么“分类目录站点”仍然有存在的必要，如百度推出的生活服务目录 &lt;a href=&quot;http://www.baidu.com/life/%EF%BC%89&quot;&gt;http://www.baidu.com/life/）&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&quot;3存在invisible-web的原因&quot;&gt;3、存在INVISIBLE WEB的原因&lt;/h1&gt;
&lt;p&gt;现在你应该对“INVISIBLE WEB”有了一点初步的印象，那么为什么搜索引擎不去抓取这些公开的信息，提供给大家查询呢？&lt;/p&gt;
&lt;p&gt;有两类原因：一是因为技术原因搜索引擎无法抓取；二是搜索引擎可以抓取，但是因为其他选择不去抓取。下面逐一分析：&lt;/p&gt;
&lt;h2 id=&quot;1因为技术原因搜索引擎无法抓取&quot;&gt;1)因为技术原因搜索引擎无法抓取：&lt;/h2&gt;
&lt;p&gt;我们知道搜索引擎使用搜索机器人（Spiders）通过链接在网络上抓取内容，但是当它遇到一个需要“输入内容”或者“在一些选项中进行选择”才能访问的网页时，它就变得无能为力了，因为“搜索机器人”不会思想。&lt;/p&gt;
&lt;p&gt;搜索机器人的这个不足导致有两类站点它无法抓取。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一种是对某个数据库的查询，由于结果页面都是在“输入内容”或者“选项”的基础上动态生成的，对于这类站点可见得只有那些静态的页面和查询的首页，其他都是不可见的；&lt;/li&gt;
&lt;li&gt;另外一种情况是需要用户名和密码登录才能访问的站点，搜索机器人无法“输入内容”，所以它没办法访问。现在很多站点都有全部或者部分内容需要登录才能阅读，这些内容都属于“INVISIBLE WEB”。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;2搜索引擎可以抓取但是因为其他选择不去抓取&quot;&gt;2)搜索引擎可以抓取，但是因为其他选择不去抓取：&lt;/h2&gt;
&lt;p&gt;除了搜索引擎无法抓取的内容外，还有许多内容它可以抓取，但是因为下面这些原因而选择不去抓取：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;文件格式问题：搜索引擎通过“搜索机器人”抓取内容是为了以后让用户可以查询到这些内容，但是很多文件格式，搜索引擎抓取后无法识别，也更无法被用户查询到。例如，如果一个站点全部是图片，搜索引擎抓取也无法识别其中的信息内容，它就选择放弃抓取。现在搜索引擎除了网页基本格式HTML和TXT外，能识别的其他文件格式越来越多，如PDF、WORD、EXCEL、POWERPOINT，但是还是有很多其他文件格式无法识别。&lt;/li&gt;
&lt;li&gt;使用动态脚本语言，带“？”的页面：越来越多的站点采用脚本语言（如ASP、PHP、JSP、PERL等）调用数据库的方式动态生成，并通过一些带“？”的链接访问数据库。（这个和前面谈到的“查询数据库”站点有一定的关系。）
对于这种带“？”的页面，搜索引擎可以抓取，但是一般情况下选择不去抓取，这是为了避免一种叫“搜索机器人陷阱（spider traps）”的脚本错误，这种错误会让搜索机器人进行无限循环的抓取，无法退出而浪费时间。国内的百度现在支持一些带“？”的脚本页面，但是这样做是暂时的，有很大风险，一方面这样的页面常常不稳定，用户最后查询得经常是“错误”或者和原来不同的内容，影响搜索质量；另外，也会有碰到“搜索机器人陷阱”的可能。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;正是由于上面的这些原因，所以存在“INVISIBLE WEB”，而且随着脚本技术的普遍采用，“INVISIBLE WEB”的范围越来越大。&lt;/p&gt;
&lt;h1 id=&quot;4如何查找invisible-web&quot;&gt;4、如何查找INVISIBLE WEB&lt;/h1&gt;
&lt;p&gt;我们知道存在大量的“INVISIBLE WEB”，而且由于这些内容常常主题更专一，其信息的质量也非常高。那么有没有办法查找相关信息呢？这就要利用一些“INVISIBLE WEB”的分类目录和专门的工具，下面列出部分知名的站点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Librarians’ Index to the Internet &lt;a href=&quot;http://www.lii.org/&quot;&gt;http://www.lii.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Resource Discovery Network &lt;a href=&quot;http://www.rdn.ac.uk/&quot;&gt;http://www.rdn.ac.uk/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The Invisible Web &lt;a href=&quot;http://www.invisibleweb.com/&quot;&gt;http://www.invisibleweb.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Complete Planet &lt;a href=&quot;http://www.completeplanet.com/&quot;&gt;http://www.completeplanet.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Invisible-Web.net &lt;a href=&quot;http://www.invisible-Web.net/&quot;&gt;http://www.invisible-Web.net/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;5搜索引擎在invisible-web的进展&quot;&gt;5、搜索引擎在“INVISIBLE WEB”的进展&lt;/h1&gt;
&lt;p&gt;除了“INVISIBLE WEB”，在搜索引擎可以抓取的网页中，它们目前也只抓取了大约35%左右（2003年初数据），也就是说，搜索引擎目前的主要任务仍然是将可以检索的部分尽快检索，所以对“INVISIBLE WEB”关注不多，一定的进展主要集中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;尽量识别各种文件格式，如GOOGLE现在支持的PDF、WORD、EXCEL、POWERPOINT；&lt;/li&gt;
&lt;li&gt;建立针对“INVISIBLE WEB”的数据库查询站点的分类目录，如上文提到的百度生活指南&lt;a href=&quot;http://www.baidu.com/life/%E3%80%82&quot;&gt;http://www.baidu.com/life/。&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;参考资料：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;http://websearch.about.com/library/weekly/aa061203a.htm&quot;&gt;http://websearch.about.com/library/weekly/aa061203a.htm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.brightplanet.com/deepcontent/tutorials/DeepWeb/index.asp&quot;&gt;http://www.brightplanet.com/deepcontent/tutorials/DeepWeb/index.asp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.lib.berkeley.edu/TeachingLib/Guides/Internet/InvisibleWeb.html&quot;&gt;http://www.lib.berkeley.edu/TeachingLib/Guides/Internet/InvisibleWeb.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://websearch.about.com/library/weekly/aa061903a.htm&quot;&gt;http://websearch.about.com/library/weekly/aa061903a.htm&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</content:encoded><category>Tech</category><category>搜索引擎</category></item><item><title>robots.txt和Robots META标签</title><link>https://vincentping.com/cn/robots-txt-and-robots-meta-tags/</link><guid isPermaLink="true">https://vincentping.com/cn/robots-txt-and-robots-meta-tags/</guid><description>对于网站管理者和内容提供者来说，有时候会有一些站点内容，不希望被ROBOTS抓取而公开。为了解决这个问题，ROBOTS开发界提供了两个办法：一个是robots.txt，另一个是The Robots META标签。</description><pubDate>Sat, 18 Oct 2003 15:22:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;本文写于2003年10月，此处保留原文，仅供参考。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;我们知道，搜索引擎都有自己的“搜索机器人”（ROBOTS），并通过这些ROBOTS在网络上沿着网页上的链接（一般是http和src链接）不断抓取资料建立自己的数据库。&lt;/p&gt;
&lt;p&gt;对于网站管理者和内容提供者来说，有时候会有一些站点内容，不希望被ROBOTS抓取而公开。为了解决这个问题，ROBOTS开发界提供了两个办法：一个是robots.txt，另一个是The Robots META标签。&lt;/p&gt;
&lt;h1 id=&quot;一robotstxt&quot;&gt;一、robots.txt&lt;/h1&gt;
&lt;h2 id=&quot;1什么是robotstxt&quot;&gt;1、什么是robots.txt？&lt;/h2&gt;
&lt;p&gt;robots.txt是一个纯文本文件，通过在这个文件中声明该网站中不想被robots访问的部分，这样，该网站的部分或全部内容就可以不被搜索引擎收录了，或者指定搜索引擎只收录指定的内容。&lt;/p&gt;
&lt;p&gt;当一个搜索机器人访问一个站点时，它会首先检查该站点根目录下是否存在robots.txt，如果找到，搜索机器人就会按照该文件中的内容来确定访问的范围，如果该文件不存在，那么搜索机器人就沿着链接抓取。&lt;/p&gt;
&lt;p&gt;robots.txt必须放置在一个站点的根目录下，而且文件名必须全部小写。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;网站 URL&lt;/th&gt;
&lt;th&gt;相应的 robots.txt的 URL&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;http://www.w3.org/&quot;&gt;http://www.w3.org/&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://www.w3.org/robots.txt&quot;&gt;http://www.w3.org/robots.txt&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;http://www.w3.org:80/&quot;&gt;http://www.w3.org:80/&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://www.w3.org:80/robots.txt&quot;&gt;http://www.w3.org:80/robots.txt&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;http://www.w3.org:1234/&quot;&gt;http://www.w3.org:1234/&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://www.w3.org:1234/robots.txt&quot;&gt;http://www.w3.org:1234/robots.txt&lt;/a&gt;;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;http://w3.org/&quot;&gt;http://w3.org/&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://w3.org/robots.txt&quot;&gt;http://w3.org/robots.txt&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;2-robotstxt的语法&quot;&gt;2、 robots.txt的语法&lt;/h2&gt;
&lt;p&gt;“robots.txt”文件包含一条或更多的记录，这些记录通过空行分开（以CR,CR/NL, or NL作为结束符），每一条记录的格式如下所示：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;field&amp;gt;:&amp;lt;optionalspace&amp;gt;&amp;lt;value&amp;gt;&amp;lt;optionalspace&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;在该文件中可以使用#进行注解，具体使用方法和UNIX中的惯例一样。该文件中的记录通常以一行或多行User-agent开始，后面加上若干Disallow行,详细情况如下：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;User-agent:&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;该项的值用于描述搜索引擎robot的名字，在“robots.txt”文件中，如果有多条User-agent记录说明有多个robot会受到该协议的限制，对该文件来说，至少要有一条User-agent记录。如果 该项的值设为*，则该协议对任何机器人均有效，在“robots.txt”文件中， “User-agent：*“这样的记录只能有一条。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Disallow :&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;该项的值用于描述不希望被访问到的一个URL，这个URL可以是一条完整的路径，也可以是部分的，任何以Disallow 开头的URL均不会被robot访问到。例如“Disallow: /help”对/help.html 和/help/index.html都不允许搜索引擎访问，而“Disallow: /help/“则允许robot访问/help.html，而不能访问/help/index.html。&lt;/p&gt;
&lt;p&gt;任何一条Disallow记录为空，说明该网站的所有部分都允许被访问，在“/robots.txt“文件中，至少要有一条Disallow记录。如果 “/robots.txt”是一个空文件，则对于所有的搜索引擎 robot，该网站都是开放的。&lt;/p&gt;
&lt;p&gt;下面是一些robots.txt基本的用法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;禁止所有搜索引擎访问网站的任何部分：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;User-agent: *&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Disallow: /&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;允许所有的robot访问&lt;/p&gt;
&lt;p&gt;&lt;code&gt;User-agent: *&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Disallow:&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;或者也可以建一个空文件 “/robots.txt” file&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;禁止所有搜索引擎访问网站的几个部分（下例中的cgi-bin、tmp、private目录）&lt;/p&gt;
&lt;p&gt;&lt;code&gt;User-agent: *&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Disallow: /cgi-bin/&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Disallow: /tmp/&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Disallow: /private/&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;禁止某个搜索引擎的访问（下例中的BadBot）&lt;/p&gt;
&lt;p&gt;&lt;code&gt;User-agent: BadBot&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Disallow: /&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;只允许某个搜索引擎的访问（下例中的WebCrawler）&lt;/p&gt;
&lt;p&gt;&lt;code&gt;User-agent: WebCrawler&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Disallow:&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;User-agent: *&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Disallow: /&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;3-常见搜索引擎机器人robots名字&quot;&gt;3、 常见搜索引擎机器人Robots名字&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;名称&lt;/th&gt;
&lt;th&gt;搜索引擎&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Baiduspider&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://www.baidu.com&quot;&gt;http://www.baidu.com&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scooter&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://www.altavista.com&quot;&gt;http://www.altavista.com&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ia_archiver&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://www.alexa.com&quot;&gt;http://www.alexa.com&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Googlebot&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://www.google.com&quot;&gt;http://www.google.com&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FAST-WebCrawler&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://www.alltheweb.com&quot;&gt;http://www.alltheweb.com&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Slurp&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://www.inktomi.com&quot;&gt;http://www.inktomi.com&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MSNBOT&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://search.msn.com&quot;&gt;http://search.msn.com&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;4-robotstxt举例&quot;&gt;4、 robots.txt举例&lt;/h2&gt;
&lt;p&gt;下面是一些著名站点的robots.txt，可以学习参考：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.cnn.com/robots.txt&quot;&gt;http://www.cnn.com/robots.txt&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.google.com/robots.txt&quot;&gt;http://www.google.com/robots.txt&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.ibm.com/robots.txt&quot;&gt;http://www.ibm.com/robots.txt&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.oracle.com/robots.txt&quot;&gt;http://www.oracle.com/robots.txt&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.taobao.com/robots.txt&quot;&gt;http://www.taobao.com/robots.txt&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;5-常见robotstxt错误&quot;&gt;5、 常见robots.txt错误&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;颠倒了顺序，错误写成：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;User-agent: *&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Disallow: GoogleBot&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;正确的应该是：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;User-agent: GoogleBot&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Disallow: *&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;把多个禁止命令放在一行中：&lt;/p&gt;
&lt;p&gt;例如，错误地写成&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Disallow: /css/ /cgi-bin/ /images/&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;正确的应该是&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Disallow: /css/ &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Disallow: /cgi-bin/ &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Disallow: /images/&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;行前有大量空格&lt;/p&gt;
&lt;p&gt;例如写成&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      `Disallow: /cgi-bin/`&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;尽管在标准没有谈到这个，但是这种方式很容易出问题。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;404重定向到另外一个页面：&lt;/p&gt;
&lt;p&gt;当Robot访问很多没有设置robots.txt文件的站点时，会被自动404重定向到另外一个Html页面。这时Robot常常会以处理robots.txt文件的方式处理这个Html页面文件。虽然一般这样没有 什么问题，但是最好能放一个空白的robots.txt文件在站点根目录下。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;采用大写。例如&lt;/p&gt;
&lt;p&gt;&lt;code&gt;USER-AGENT: EXCITE&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;DISALLOW: &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;虽然标准是没有大小写的，但是目录和文件名应该小写：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;user-agent:GoogleBot&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;disallow:&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;语法中只有Disallow，没有Allow语法！&lt;/p&gt;
&lt;p&gt;错误的写法是：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;User-agent: Baiduspider&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Disallow: /john/&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;allow: /jane/&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;忘记了斜杠/&lt;/p&gt;
&lt;p&gt;错误的写做：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;User-agent: Baiduspider&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Disallow: css&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;正确的应该是&lt;/p&gt;
&lt;p&gt;&lt;code&gt;User-agent: Baiduspider&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Disallow: /css/&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Google网站上有一个工具专门检查robots.txt文件的有效性（需要google账户）：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.google.com/webmasters/tools/robots-testing-tool&quot;&gt;https://www.google.com/webmasters/tools/robots-testing-tool&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&quot;二robots-meta标签&quot;&gt;二、Robots META标签&lt;/h1&gt;
&lt;h2 id=&quot;1什么是robots-meta标签&quot;&gt;1、什么是Robots META标签&lt;/h2&gt;
&lt;p&gt;Robots.txt文件主要是限制整个站点或者目录的搜索引擎访问情况，而Robots META标签则主要是针对一个个具体的页面。和其他的META标签（如使用的语言、页面的描述、关键词等）一 样，Robots META标签也是放在页面的中，专门用来告诉搜索引擎ROBOTS如何抓取该页的内容。具体的形式类似（见黑体部分）：&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;html&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;head&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;title&gt;时代营销--网络营销专业门户&amp;#x3C;/title&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;meta name=&quot;Robots&quot; content=&quot;index,follow&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;meta http-equiv=&quot;Content-Type&quot; CONTENT=&quot;text/html; charset=gb2312&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;meta name=&quot;keywords&quot; content=&quot;营销,...&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;meta name=&quot;description&quot; content=&quot;时代营销网是.....&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;link rel=&quot;stylesheet&quot; href=&quot;/public/css.css&quot; type=&quot;text/css&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/head&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;body&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;…&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/body&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/html&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&quot;2robots-meta标签的写法&quot;&gt;2、Robots META标签的写法：&lt;/h1&gt;
&lt;p&gt;Robots META标签中没有大小写之分，name=”Robots”表示所有的搜索引擎，可以针对某个具体搜索引擎写为name=”BaiduSpider”。co
ntent部分有四个指令选项：index、noindex、 follow、nofollow，指令间以“,”分隔。&lt;/p&gt;
&lt;p&gt;INDEX 指令告诉搜索机器人抓取该页面；&lt;/p&gt;
&lt;p&gt;FOLLOW 指令表示搜索机器人可以沿着该页面上的链接继续抓取下去；&lt;/p&gt;
&lt;p&gt;Robots Meta标签的缺省值是INDEX和FOLLOW，只有inktomi除外，对于它，缺省值是INDEX,NOFOLLOW。&lt;/p&gt;
&lt;p&gt;这样，一共有四种组合：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;META NAME=&quot;ROBOTS&quot; CONTENT=&quot;INDEX,FOLLOW&quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;META NAME=&quot;ROBOTS&quot; CONTENT=&quot;NOINDEX,FOLLOW&quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;META NAME=&quot;ROBOTS&quot; CONTENT=&quot;INDEX,NOFOLLOW&quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;META NAME=&quot;ROBOTS&quot; CONTENT=&quot;NOINDEX,NOFOLLOW&quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;其中，&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;META NAME=&quot;ROBOTS&quot; CONTENT=&quot;INDEX,FOLLOW&quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;可以写成：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;META NAME=&quot;ROBOTS&quot; CONTENT=&quot;ALL&quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;而&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;META NAME=&quot;ROBOTS&quot; CONTENT=&quot;NOINDEX,NOFOLLOW&quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;可以写成：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;META NAME=&quot;ROBOTS&quot; CONTENT=&quot;NONE&quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;需要注意的是：上述的robots.txt和Robots META标签限制搜索引擎机器人（ROBOTS）抓取站点内容的办法只是一种规则，需要搜索引擎机器人的配合才行，并不是每个ROBOTS都遵守的。&lt;/p&gt;
&lt;p&gt;目前看来，绝大多数的搜索引擎机器人都遵守robots.txt的规则，而对于Robots META标签，目前支持的并不多，但是正在逐渐增加，如著名搜索引擎GOOGLE就完全支持，而且GOOGLE还增 加了一个指令“archive”，可以限制GOOGLE是否保留网页快照。例如：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;META NAME=&quot;googlebot&quot; CONTENT=&quot;index,follow,noarchive&quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;表示抓取该站点中页面并沿着页面中链接抓取，但是不在GOOLGE上保留该页面的网页快照。&lt;/p&gt;
</content:encoded><category>Tech</category><category>RSS</category></item><item><title>RSS及其发展历程简介</title><link>https://vincentping.com/cn/rss-developement-introduction/</link><guid isPermaLink="true">https://vincentping.com/cn/rss-developement-introduction/</guid><description>RSS是一种描述和同步网站内容的格式，是目前使用最广泛的XML应用。RSS应用在国外已经非常普遍，从个人博客（Blog）栏目、企业站点到世界级的门户都提供基于RSS的服务。</description><pubDate>Fri, 10 Oct 2003 09:10:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;本文写于2003年10月，此处保留原文，仅供参考。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;RSS是一种描述和同步网站内容的格式，是目前使用最广泛的XML应用。RSS应用在国外已经非常普遍，从个人博客（Blog）栏目、企业站点到世界级的门户都提供基于RSS的服务，如IBM公司站点的中文新闻RSS &lt;a href=&quot;http://www.ibm.com/news/cn/zh/index.rss&quot;&gt;http://www.ibm.com/news/cn/zh/index.rss&lt;/a&gt;&lt;a href=&quot;http://www.ibm.com/news/cn/zh/index.rss%3E%EF%BC%8CYAHOO%E7%AB%99%E7%82%B9%E7%9A%84&quot;&gt;www.ibm.com/news/cn/zh/index.rss&amp;gt;，YAHOO站点的&lt;/a&gt;&lt;a href=&quot;http://news.yahoo.com/rss&quot;&gt;http://news.yahoo.com/rss&lt;/a&gt;，微软MSDN站点的&lt;a href=&quot;http://msdn.microsoft.com/aboutmsdn/rss.asp&quot;&gt;http://msdn.microsoft.com/aboutmsdn/rss.asp&lt;/a&gt; 等等。&lt;/p&gt;
&lt;h1 id=&quot;1-rss的历史&quot;&gt;1、 RSS的历史&lt;/h1&gt;
&lt;p&gt;那么RSS究竟代表什么呢？比较普遍的有两种说法，一种是“Rich Site Summary”或“RDF Site Summary”，另一种是“Really Simple Syndication”，之所以有这些分歧，需要从RSS发展的历史说起。&lt;/p&gt;
&lt;p&gt;最初的0.90版本RSS是由Netscape公司设计的，目的是用来建立一个整合了各主要新闻站点内容的门户，但是0.90版本的RSS规范过于复杂，而一个简化的RSS 0.91版本也随着Netscape公司对该项目的放弃而于2000年暂停。&lt;/p&gt;
&lt;p&gt;不久，一家专门从事博客写作软件开发的公司UserLand接手了RSS 0.91版本的发展，并把它作为其博客写作软件的基础功能之一继续开发，逐步推出了0.92、0.93和0.94版本。随着网络博客的流行，RSS作为一种基本的功能也被越来越多的网站和博客软件支持。&lt;/p&gt;
&lt;p&gt;在UserLand公司接手并不断开发RSS的同时，很多的专业人士认识到需要通过一个第三方、非商业的组织，把RSS发展成为一个通用的规范，并进一步标准化。于是2001年一个联合小组在0.90版本RSS的开发原则下，以W3C新一代的语义网技术RDF（Resource Description Framework）为基础，对RSS进行了重新定义，发布RSS1.0，并将RSS定义为“RDF Site Summary”。但是这项工作没有与UserLand公司进行有效的沟通，UserLand公司也不承认RSS 1.0的有效性，并坚持按照自己的设想进一步开发出RSS的后续版本，到2002年9月发布了最新版本RSS 2.0，UserLand公司将RSS定义为“Really Simple Syndication”。&lt;/p&gt;
&lt;p&gt;目前RSS已经分化为RSS 0.9x/2.0和RSS 1.0两个阵营，由于分歧的存在和RSS 0.9x/2.0的广泛应用现状，RSS 1.0还没有成为标准化组织的真正标准。&lt;/p&gt;
&lt;h1 id=&quot;2-rss目前的版本和推荐&quot;&gt;2、 RSS目前的版本和推荐&lt;/h1&gt;
&lt;p&gt;到目前为止，RSS共有七种版本，推荐使用的是RSS 1.0和RSS 2.0，对于一些基本的站点同步，也可以选用RSS 0.91。&lt;/p&gt;
&lt;h1 id=&quot;3-rss的语法介绍&quot;&gt;3、 RSS的语法介绍&lt;/h1&gt;
&lt;p&gt;一个RSS文件就是一段规范的XML数据，该文件一般以rss，xml或者rdf作为后缀。下面我们选择&lt;a href=&quot;http://msdn.microsoft.com/visualc/rss.xml%E4%B8%AD%E7%9A%84%E4%B8%80%E9%83%A8%E5%88%86%E4%BD%9C%E4%B8%BA%E4%BE%8B%E5%AD%90%E7%AE%80%E5%8D%95%E8%A7%A3%E8%AF%B4%EF%BC%88%E7%95%A5%EF%BC%89&quot;&gt;http://msdn.microsoft.com/visualc/rss.xml中的一部分作为例子简单解说（略）&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&quot;4-rss的联合syndication和聚合aggregation&quot;&gt;4、 RSS的联合（Syndication）和聚合（Aggregation）&lt;/h1&gt;
&lt;p&gt;发布一个RSS文件（一般称为RSS Feed）后，这个RSS Feed中包含的信息就能直接被其他站点调用，而且由于这些数据都是标准的XML格式，所以也能在其他的终端和服务中使用，如PDA、手机、邮件列表等。而且一个网站联盟（比如专门讨论旅游的网站系列）也能通过互相调用彼此的RSS Feed，自动的显示网站联盟中其他站点上的最新信息，这就叫着RSS的联合。这种联合就导致一个站点的内容更新越及时、RSS Feed被调用的越多，该站点的知名度就会越高，从而形成一种良性循环。&lt;/p&gt;
&lt;p&gt;而所谓RSS聚合，就是通过软件工具的方法从网络上搜集各种RSS Feed并在一个界面中提供给读者进行阅读。这些软件可以是在线的WEB工具，如&lt;a href=&quot;http://my.netscape.com%EF%BC%8Chttp://my.userland.com%EF%BC%8C&quot;&gt;http://my.netscape.com，http://my.userland.com，&lt;/a&gt; &lt;a href=&quot;http://www.xmltree.com%EF%BC%8Chttp://www.moreover.com%EF%BC%8Chttp://www.oreillynet.com/meerkat&quot;&gt;http://www.xmltree.com，http://www.moreover.com，http://www.oreillynet.com/meerkat&lt;/a&gt; 等，也可以是下载到客户端安装的工具。&lt;/p&gt;
&lt;h1 id=&quot;5-rss的未来发展&quot;&gt;5、 RSS的未来发展&lt;/h1&gt;
&lt;p&gt;随着越来越多的站点对RSS的支持，RSS已经成为目前最成功的XML应用。RSS搭建了信息迅速传播的一个技术平台，使得每个人都成为潜在的信息提供者。相信很快我们就会看到大量基于RSS的专业门户、聚合站点和更精确的搜索引擎。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;参考文献：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;RSS 0.9 Specification &lt;a href=&quot;http://www.purplepages.ie/RSS/netscape/rss0.90.html&quot;&gt;http://www.purplepages.ie/RSS/netscape/rss0.90.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;RSS 1.0 Specification &lt;a href=&quot;http://web.resource.org/rss/1.0/spec&quot;&gt;http://web.resource.org/rss/1.0/spec&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;RSS 2.0 Specification &lt;a href=&quot;http://www.rssboard.org/rss-specification&quot;&gt;http://www.rssboard.org/rss-specification&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</content:encoded><category>Tech</category><category>RSS</category></item><item><title>动态网站的搜索引擎策略</title><link>https://vincentping.com/cn/seo-for-dynamic-websites/</link><guid isPermaLink="true">https://vincentping.com/cn/seo-for-dynamic-websites/</guid><description>写于2003年：动态网站（ASP/PHP/JSP）方便交互与维护，却不利于搜索引擎收录。分析动态页面难被索引的原因，给出动态网站的搜索引擎优化策略。</description><pubDate>Mon, 08 Sep 2003 19:25:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;本文写于2003年9月，此处保留原文，仅供参考。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&quot;一动态网站的出现和优势&quot;&gt;一、动态网站的出现和优势&lt;/h1&gt;
&lt;p&gt;最早互联网出现时，站点内容都是以HTML静态页面形式存放在服务器上，访问者浏览到的页面都是这些实际存在的静态页面。随着技术的发展，特别是数据库和脚本技术PERL、ASP、PHP和JSP的发展，越来越多的站点都开始采取动态的页面发布手段。比如，我们在GOOGLE.COM上搜索一个内容，得到的搜索结果页面文件“本身”在GOOGLE服务器上并不存在，而是通过程序在我们输入搜索内容时调用后台数据库实时生成的，也就是说，这些结果页面是动态的。&lt;/p&gt;
&lt;p&gt;静态页面的站点只涉及文件的传输问题，而动态站点则复杂得多，用户和站点之间出现大量的交互，网站不再仅仅是内容的发布，而是成为了一种“应用（Application）”，是软件业向互联网上的扩张，从软件的角度看，动态站点是逻辑应用层和数据层的分离，数据库负责站点数据的存储管理，而ASP、PHP、JSP等负责处理站点的逻辑应用。这样做的好处除了增加很多交互功能外，更重要的是站点的维护、更新和升级都方便了许多。可以说，没有动态网站技术，目前互联网上的这些超大型站点就不可能出现。&lt;/p&gt;
&lt;h1 id=&quot;二搜索引擎抓取动态网站页面时面临的问题&quot;&gt;二、搜索引擎抓取动态网站页面时面临的问题&lt;/h1&gt;
&lt;p&gt;从用户的角度看，动态网站非常不错，丰富了站点的功能，但是对于搜索引擎来说，情况就不同了。&lt;/p&gt;
&lt;p&gt;根本的问题在于“输入”和“选择”，动态页面是在用户“输入内容”或者进行“选择”时动态生成的，但是搜索引擎的“搜索机器人”无法“输入”和“选择”。比如我们要在当当书店站点查看冯英健的《网络营销基础与实践》一书，介绍页面是动态生成的，URL地址是：&lt;a href=&quot;http://www.dangdang.com/product_detail/product_detail.asp?product_id=493698&quot;&gt;http://www.dangdang.com/product_detail/product_detail.asp?product_id=493698&lt;/a&gt; 这里在“？“后面的product_id参数值需要我们输入的，“搜索机器人”可以通过链接找到&lt;a href=&quot;http://www.dangdang.com/product_detail/product_detail.asp&quot;&gt;http://www.dangdang.com/product_detail/product_detail.asp&lt;/a&gt; 页面，但是它无法输入“？“后面的product_id参数值，从而无法抓取这个页面文件。&lt;/p&gt;
&lt;p&gt;另外，对于通过链接达到这种带“？“的页面，技术上搜索引擎可以抓取，但是一般情况下搜索引擎选择不去抓取，这是为了避免一种叫”搜索机器人陷阱（spider traps）“的脚本错误，这种错误会让搜索机器人进行无限循环的抓取，无法退出而浪费时间。&lt;/p&gt;
&lt;h1 id=&quot;三动态网站的搜索引擎策略&quot;&gt;三、动态网站的搜索引擎策略&lt;/h1&gt;
&lt;p&gt;动态网站要被搜索引擎抓取，可以采用内容发布系统软件将动态站点转化成静态页面，这种办法对于页面发布后变动少的站点比较合适，比如一些新闻类的站点（如新浪的新闻中心：&lt;a href=&quot;http://news.sina.com.cn/&quot;&gt;http://news.sina.com.cn/&lt;/a&gt; ）。&lt;/p&gt;
&lt;p&gt;一般的动态网站可以通过下面的办法让搜索引擎抓取： 首先，我们要让动态页面的URL地址中没有“？“，让动态页面看上去象”静态页面“。看看下面这个页面&lt;a href=&quot;http://www.amazon.com/exec/obidos/tg/detail/-/043935806X/&quot;&gt;http://www.amazon.com/exec/obidos/tg/detail/-/043935806X/&lt;/a&gt; ，这明显是一个动态页面，但是URL地址看上去却象“静态页面”。针对不同的动态技术可以采用下面技术实现：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;对于采用ASP技术的动态页面Exception Digital公司提供一种工具叫着XQASP（&lt;a href=&quot;http://www.xde.net/products/product_xqasp.htm&quot;&gt;http://www.xde.net/products/product_xqasp.htm&lt;/a&gt; ）可以将“？“替换为”/“。&lt;/li&gt;
&lt;li&gt;对于采用ColdFusion技术的站点，需要重新配置服务器上的ColdFusion，用“/“代替”？“将参数传输到URL，更详细的信息请见&lt;a href=&quot;http://coldfusion.com/&quot;&gt;http://coldfusion.com/&lt;/a&gt; 站点。&lt;/li&gt;
&lt;li&gt;对于使用Apache服务器的站点，可以使用rewrite模块将带参数的URL地址转换成搜索引擎支持的形式，该模块mod_rewrite在Apache服务器中不是缺省安装的，详细的信息请见&lt;a href=&quot;http://httpd.apache.org/docs/mod/mod_rewrite.html&quot;&gt;http://httpd.apache.org/docs/mod/mod_rewrite.html&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;对于其他的动态技术也能找到对应的方法改变URL的形式。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;然后，要创建一些静态页面指向这些动态页面（以改变过的URL链接）。&lt;/p&gt;
&lt;p&gt;前面说过，搜索引擎机器人并不会自己“输入”参数，所以要让上面这些动态页面被搜索引擎抓取，我们还需要告诉机器人这些页面的地址（也就是参数）。我们可以创建一些静态的页面，一般在网络营销中称? “gateway page”（入口页面），这些页面上有大量指向这些动态页面的链接。&lt;/p&gt;
&lt;p&gt;将这些入口页面的地址提交到搜索引擎，这些页面和链接的动态页面（改变过URL形式）就能都被搜索引擎抓取了。&lt;/p&gt;
&lt;h1 id=&quot;四搜索引擎对动态网站支持的改进&quot;&gt;四、搜索引擎对动态网站支持的改进&lt;/h1&gt;
&lt;p&gt;在我们调整动态站点适应搜索引擎的同时，搜索引擎也在发展。到目前为止，绝大多数的搜索引擎还不支持动态页面的抓取，但是GOOGLE、HOTBOT等和国内的百度开始尝试抓取动态网站页面（包括? “？“的页面），这就是我们现在在这些搜索引擎进行搜索时，结果中出现动态链接的原因。&lt;/p&gt;
&lt;p&gt;能在URL中不用参数尽量不要用，一些参数转移到其他地方，这样可以增加动态页面被抓取的深度和数目。&lt;/p&gt;
&lt;p&gt;这些搜索引擎抓取动态页面时，为了避免“搜索机器人陷阱”，都只抓取从静态页面（至少“看上去”是静态的页面）链接到的动态页面，而从动态页面链接出的动态页面都不再抓取。&lt;/p&gt;
&lt;p&gt;所以一个动态站点如果只针对上面这些搜索引擎，可以在上面小节介绍方法的基础上简化：只用创建一些入口页面，链接很多动态页面，然后将这些入口页面递交到这些搜索引擎就可以了。&lt;/p&gt;
&lt;p&gt;对于直接使用动态的URL地址，请注意：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;文件URL中不要有Session Id，同时不要用ID作为参数名称（特别是对于GOOGLE）；　　&lt;/li&gt;
&lt;li&gt;参数越少越好，尽量不要超过2个。&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><category>Tech</category><category>搜索引擎</category></item></channel></rss>