<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>豪翔天下</title>
  
  <subtitle>Change My World by Program</subtitle>
  <link href="/atom.xml" rel="self"/>
  
  <link href="https://haofly.net/"/>
  <updated>2026-01-16T13:38:07.882Z</updated>
  <id>https://haofly.net/</id>
  
  <author>
    <name>haofly</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>2025年总结以及2026年的计划</title>
    <link href="https://haofly.net/2025-to-2026/"/>
    <id>https://haofly.net/2025-to-2026/</id>
    <published>2026-01-06T14:36:00.000Z</published>
    <updated>2026-01-16T13:38:07.882Z</updated>
    
    <content type="html"><![CDATA[<h2 id="2025计划"><a href="#2025计划" class="headerlink" title="2025计划"></a>2025计划</h2><h3 id="技术"><a href="#技术" class="headerlink" title="技术"></a>技术</h3><ul><li><input disabled="" type="checkbox"> <del>PM工作继续提升，今年升职级吧</del><ul><li>部分完成。PM工作确实有提升，但是升职级的事情还是没有实现，公司整体情况不太好，升职级的事情被推迟了</li></ul></li><li><input disabled="" type="checkbox"> <del>加深对 AI 技术的研究，探索更适合工作和生活的 AI 工具</del><ul><li>未完成，仍然停留在使用阶段，没有深入研究</li></ul></li><li><input disabled="" type="checkbox"> <del>阅读几本书 (搬新家总算是把书籍整理完了，发现还有之前买过没有看的书)</del><ul><li>未完成，一本都没有读，书都还在书架上吃灰</li></ul></li><li><input disabled="" type="checkbox"> <del>每月一篇博客(去年居然只写了6篇文章)</del><ul><li>只写了6篇，还是没有达到每月一篇的目标</li></ul></li></ul><h3 id="理财"><a href="#理财" class="headerlink" title="理财"></a>理财</h3><ul><li><input checked="" disabled="" type="checkbox"> 目标收入超过 2024 年<ul><li>完成，虽然涨幅不大，但总算是有增长</li></ul></li><li><input checked="" disabled="" type="checkbox"> 把负债从20万减少到10万<ul><li>完成，因为发了部分期权，负债减少到了5万</li></ul></li><li><input disabled="" type="checkbox"> <del>尝试副业，哪怕只是小额收入也值得尝试，或许我应该先投入一点资金才行？</del><ul><li>未完成，今年因为没人带孩子了，几乎没有闲暇时间了，想法很多，但都没有真正执行</li></ul></li></ul><h3 id="家庭"><a href="#家庭" class="headerlink" title="家庭"></a>家庭</h3><ul><li><input disabled="" type="checkbox"> <del>🎮重拾健身，每周至少2次</del><ul><li>坚持了几个月，后来因为工作忙又中断了，不过还好健身环通关了，而且爱上了徒步</li></ul></li><li><input checked="" disabled="" type="checkbox"> 继续家庭观影计划，每周一次<ul><li>完成，已经成为家庭传统</li></ul></li><li><input disabled="" type="checkbox"> <del>每月一山，看到小红书上好多家长能带小孩儿每周一山，那才是厉害，我和老婆都是超级宅的人，出门需要特别大的勇气</del><ul><li>只完成了6次，没有达到每月一次的目标</li></ul></li><li><input disabled="" type="checkbox"> <del>🏃瘦到130斤以下(2022、2023、2024未完成的目标)</del><ul><li>这个目标已经持续了4年，还是没有完成，不过今年体重几乎是维持的没有涨</li></ul></li><li><input checked="" disabled="" type="checkbox"> 👧女儿的身高、体重能够继续达到中等线(2022、2023未完成的目标，2024达成了的)<ul><li>差一点点达到50%分位，不过还算保持得不错了，至少今年流感季节没有感冒发烧</li></ul></li><li><input disabled="" type="checkbox"> <del>尝试带家人和朋友一起露营</del><ul><li>未完成，计划了几次都因为各种原因取消了</li></ul></li><li><input disabled="" type="checkbox"> <del>将血尿酸降到正常范围</del><ul><li>未完成，因为9月份开始中途断了一两个月，之后就没养成习惯了</li></ul></li><li><input disabled="" type="checkbox"> <del>把塞尔达2和星之卡比玩通关</del><ul><li>两个游戏均未通关</li></ul></li></ul><span id="more"></span><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><h3 id="远程工作五年半"><a href="#远程工作五年半" class="headerlink" title="远程工作五年半"></a>远程工作五年半</h3><p>远程工作已经五年半了，时间过得真快。今年公司的情况不太好，丢了一些大项目，整体营收有所下降。虽然我的工作还算稳定，但是升职加薪的事情都被推迟了。并且我负责的最大的项目很有可能客户也会终止合同。不过好在没有裁员，还能继续远程工作，这对我来说很重要因为我不可能再回到坐班了。</p><p>今年在技术方面没有太大的突破，主要还是在使用AI工具提升工作效率。PM工作虽然有所提升，但是距离真正的质变还有差距。有时候感觉自己在技术深度和项目管理之间找不到平衡点。</p><p>今年在做PM工作的时候给自己太大的压力了，特别是手下的程序员做不出来的时候真的十分焦灼，在7月份左右经常拉肚子，肚子疼。后来才知道这可能是焦虑症躯体化，后来8月份去云南旅居了一个月才有所缓解。现在偶尔还是有这种情况，但是知道原因了就知道该让自己放松了。至于焦虑症躯体化我认为还影响到了我的心脏功能，去检查了心脏，还真的出问题了，反正以后尽量少熬夜，少焦虑。所以今后不仅仅有肺有问题，心脏又有问题了。</p><h3 id="AI"><a href="#AI" class="headerlink" title="AI"></a>AI</h3><p>AI工具的使用已经成为了日常工作的标配。ChatGPT已经深度融入到我的工作流程中。今年付费了Cursor，感觉很不错。今年还尝试了一些新的AI工具，比如一些代码生成工具，但是感觉都没有太大的突破。</p><p>AI生成设计方面，虽然有一些进步，但是生成出来的设计还是不够理想，很多时候还是需要人工调整。不过对于我这种没有艺术细胞的人来说，已经算是很大的帮助了。</p><p>然后今年有一件很大的事儿就是年底组装了自己的第一台台式机，一方面可以玩儿3A，另一方面可以自己跑AI尝试一下。</p><p><img src="https://haofly.net/uploads/2025-to-2026.jpg"></p><h3 id="旅游与生活"><a href="#旅游与生活" class="headerlink" title="旅游与生活"></a>旅游与生活</h3><p>今年暑假又去云南旅居了一个月，这次去了米勒、蒙自、西双版纳和抚仙湖。虽然生活成本比大理稍微高一点，但是整体还是很舒适的。数字游民的生活确实很惬意，但是每次回来都要适应一段时间。</p><p>除了暑假的旅居，今年还带女儿去了几个地方，虽然没达到每月一山的目标，但是至少比去年出门的次数多了。女儿也越来越喜欢出门了，这算是个好现象。国庆因为我值班，老婆带孩子去了北海，10月底我们三人去了上海。11月连续几周都带女儿去徒步了，不过12月到1月没出门，因为雾霾天太严重了，女儿又有鼻炎，不出门比出门更好。</p><h3 id="理财-1"><a href="#理财-1" class="headerlink" title="理财"></a>理财</h3><p>理财方面，今年开始使用一些理财工具来管理资金。年底把负债降到了5万，多亏公司还发得出来一点期权，不然到了年底都发不出来了。今年的结余比去年好一点，但是还是不够理想。</p><p>最大的支出仍然是房贷和女儿的支出。不过好在装修的债务已经还清了，压力小了一些。明年开始主要目的就是有钱就还房贷了，房贷3.2%，存银行不如还房贷。</p><h3 id="健康"><a href="#健康" class="headerlink" title="健康"></a>健康</h3><p>健康方面如前面所说，肺部、心脏、尿酸都有问题了，问题越来越多，不过还好老婆孩子非常健康。另一方面，父母也60了，身体也开始出问题了，哎。</p><h2 id="2026计划"><a href="#2026计划" class="headerlink" title="2026计划"></a>2026计划</h2><h3 id="技术-1"><a href="#技术-1" class="headerlink" title="技术"></a>技术</h3><ul><li><input disabled="" type="checkbox"> PM工作继续提升，争取今年升职级</li><li><input disabled="" type="checkbox"> 每月至少一篇博客文章，不能再偷懒了</li><li><input disabled="" type="checkbox"> 完成至少一个个人项目，哪怕是小的工具也好</li><li><input disabled="" type="checkbox"> 再学习使用不同的AI工具帮助解决自己的工作以及生活问题</li></ul><h3 id="理财-2"><a href="#理财-2" class="headerlink" title="理财"></a>理财</h3><ul><li><input disabled="" type="checkbox"> 目标收入超过 2025 年</li><li><input disabled="" type="checkbox"> 把负债从5万减少到0，争取还清所有负债</li><li><input disabled="" type="checkbox"> 真正开始尝试副业，至少要有一些实际的行动</li></ul><h3 id="家庭-1"><a href="#家庭-1" class="headerlink" title="家庭"></a>家庭</h3><ul><li><input disabled="" type="checkbox"> 继续家庭观影计划，每周一次</li><li><input disabled="" type="checkbox"> 每月一山，争取达到12次的目标</li><li><input disabled="" type="checkbox"> 🏃瘦到130斤以下(2022、2023、2024、2025未完成的目标，这次一定要完成)</li><li><input disabled="" type="checkbox"> 👧女儿的身高、体重能够继续达到中等线</li><li><input disabled="" type="checkbox"> 尝试带家人和朋友一起露营，至少完成一次</li><li><input disabled="" type="checkbox"> 将血尿酸降到正常范围，多运动是关键</li><li><input disabled="" type="checkbox"> 把塞尔达2玩通关，不能再半途而废了</li><li><input disabled="" type="checkbox"> 带女儿去更多的地方看看，至少每个月去一个不同的地方</li></ul>]]></content>
    
    <summary type="html">
    
      &lt;h2 id=&quot;2025计划&quot;&gt;&lt;a href=&quot;#2025计划&quot; class=&quot;headerlink&quot; title=&quot;2025计划&quot;&gt;&lt;/a&gt;2025计划&lt;/h2&gt;&lt;h3 id=&quot;技术&quot;&gt;&lt;a href=&quot;#技术&quot; class=&quot;headerlink&quot; title=&quot;技术&quot;&gt;&lt;/a&gt;技术&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&gt; &lt;del&gt;PM工作继续提升，今年升职级吧&lt;/del&gt;&lt;ul&gt;
&lt;li&gt;部分完成。PM工作确实有提升，但是升职级的事情还是没有实现，公司整体情况不太好，升职级的事情被推迟了&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&gt; &lt;del&gt;加深对 AI 技术的研究，探索更适合工作和生活的 AI 工具&lt;/del&gt;&lt;ul&gt;
&lt;li&gt;未完成，仍然停留在使用阶段，没有深入研究&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&gt; &lt;del&gt;阅读几本书 (搬新家总算是把书籍整理完了，发现还有之前买过没有看的书)&lt;/del&gt;&lt;ul&gt;
&lt;li&gt;未完成，一本都没有读，书都还在书架上吃灰&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&gt; &lt;del&gt;每月一篇博客(去年居然只写了6篇文章)&lt;/del&gt;&lt;ul&gt;
&lt;li&gt;只写了6篇，还是没有达到每月一篇的目标&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;理财&quot;&gt;&lt;a href=&quot;#理财&quot; class=&quot;headerlink&quot; title=&quot;理财&quot;&gt;&lt;/a&gt;理财&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;input checked=&quot;&quot; disabled=&quot;&quot; type=&quot;checkbox&quot;&gt; 目标收入超过 2024 年&lt;ul&gt;
&lt;li&gt;完成，虽然涨幅不大，但总算是有增长&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;input checked=&quot;&quot; disabled=&quot;&quot; type=&quot;checkbox&quot;&gt; 把负债从20万减少到10万&lt;ul&gt;
&lt;li&gt;完成，因为发了部分期权，负债减少到了5万&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&gt; &lt;del&gt;尝试副业，哪怕只是小额收入也值得尝试，或许我应该先投入一点资金才行？&lt;/del&gt;&lt;ul&gt;
&lt;li&gt;未完成，今年因为没人带孩子了，几乎没有闲暇时间了，想法很多，但都没有真正执行&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;家庭&quot;&gt;&lt;a href=&quot;#家庭&quot; class=&quot;headerlink&quot; title=&quot;家庭&quot;&gt;&lt;/a&gt;家庭&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&gt; &lt;del&gt;🎮重拾健身，每周至少2次&lt;/del&gt;&lt;ul&gt;
&lt;li&gt;坚持了几个月，后来因为工作忙又中断了，不过还好健身环通关了，而且爱上了徒步&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;input checked=&quot;&quot; disabled=&quot;&quot; type=&quot;checkbox&quot;&gt; 继续家庭观影计划，每周一次&lt;ul&gt;
&lt;li&gt;完成，已经成为家庭传统&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&gt; &lt;del&gt;每月一山，看到小红书上好多家长能带小孩儿每周一山，那才是厉害，我和老婆都是超级宅的人，出门需要特别大的勇气&lt;/del&gt;&lt;ul&gt;
&lt;li&gt;只完成了6次，没有达到每月一次的目标&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&gt; &lt;del&gt;🏃瘦到130斤以下(2022、2023、2024未完成的目标)&lt;/del&gt;&lt;ul&gt;
&lt;li&gt;这个目标已经持续了4年，还是没有完成，不过今年体重几乎是维持的没有涨&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;input checked=&quot;&quot; disabled=&quot;&quot; type=&quot;checkbox&quot;&gt; 👧女儿的身高、体重能够继续达到中等线(2022、2023未完成的目标，2024达成了的)&lt;ul&gt;
&lt;li&gt;差一点点达到50%分位，不过还算保持得不错了，至少今年流感季节没有感冒发烧&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&gt; &lt;del&gt;尝试带家人和朋友一起露营&lt;/del&gt;&lt;ul&gt;
&lt;li&gt;未完成，计划了几次都因为各种原因取消了&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&gt; &lt;del&gt;将血尿酸降到正常范围&lt;/del&gt;&lt;ul&gt;
&lt;li&gt;未完成，因为9月份开始中途断了一两个月，之后就没养成习惯了&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&gt; &lt;del&gt;把塞尔达2和星之卡比玩通关&lt;/del&gt;&lt;ul&gt;
&lt;li&gt;两个游戏均未通关&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
    
    </summary>
    
    
    
  </entry>
  
  <entry>
    <title>2025年上海6日游</title>
    <link href="https://haofly.net/2025-autumn/"/>
    <id>https://haofly.net/2025-autumn/</id>
    <published>2025-11-19T14:50:00.000Z</published>
    <updated>2025-11-19T14:25:38.463Z</updated>
    
    <content type="html"><![CDATA[<h2 id="临时起意的上海之行"><a href="#临时起意的上海之行" class="headerlink" title="临时起意的上海之行"></a>临时起意的上海之行</h2><p>10月下旬，老婆意外获得3天假期，突发奇想带女儿去上海迪士尼。我起初因要上班犹豫，突然想起有2天调休，加上周末凑出4天，与老婆的假期接力刚好能拼出6天，我们当即决定开启上海“接力带娃”之旅。</p><p>这样既省得女儿多折腾一趟飞机，又能连玩几天。更划算的是，当时重庆飞上海的机票均价才400多，比高铁还便宜，让这场临时出行更具性价比。</p><h2 id="Day1：老婆和女儿的上海初印象"><a href="#Day1：老婆和女儿的上海初印象" class="headerlink" title="Day1：老婆和女儿的上海初印象"></a>Day1：老婆和女儿的上海初印象</h2><p>第一天，老婆带女儿飞抵上海，直奔最大的泡泡玛特店打卡，接着逛了南京东路和外滩。</p><p>老婆特别喜欢南京东路，觉得这里的商业氛围和历史底蕴，跟我们之前逛过的步行街完全不同，很有特色。</p><h2 id="Day2：上海迪士尼的奇妙冒险"><a href="#Day2：上海迪士尼的奇妙冒险" class="headerlink" title="Day2：上海迪士尼的奇妙冒险"></a>Day2：上海迪士尼的奇妙冒险</h2><p>第二天的重头戏是上海迪士尼。我和老婆都是选择困难症，提前没敢贸然请管家，结果老婆独自带娃入园后才发现力不从心，临时找了位园区管家。</p><p>管家的帮助特别大，精准规划路线和时间，让她们高效玩了几个热门项目。不过临时请的服务只到下午两三点就结束了，老婆说下次一定要提前订一对一的，能让孩子玩得更尽兴。</p><p>那天我在公司一边工作，一边频繁刷迪士尼APP看排队时间，远程给她们出主意，也算间接参与了这场童话冒险。</p><h2 id="Day3：作者的上海奔赴与初体验"><a href="#Day3：作者的上海奔赴与初体验" class="headerlink" title="Day3：作者的上海奔赴与初体验"></a>Day3：作者的上海奔赴与初体验</h2><p>第三天老婆返程，我则赶早班机赴沪接力。6点半坐首班地铁去江北机场，9点20分的飞机完全赶得及，重庆飞上海也比预计快了1小时，2小时就落地了。</p><p>但出浦东机场花了1小时，更让我吐槽的是上海的交通标识——机场和地铁标志都不醒目，走着走着就没方向了。</p><p>而且上海几乎没有共享单车，说是为了城市整洁，可路边自行车摩托车照样乱停。地铁口离公交站常隔着几百米甚至一两公里，打车嫌近、走路嫌远，特别尴尬。</p><p>好在和女儿相聚很开心，当天我们冒雨去打卡了自由高达，巨型机甲超震撼，还看到一对情侣同框打卡，格外羡慕。</p><h2 id="Day4：乐高乐园的欢乐时光"><a href="#Day4：乐高乐园的欢乐时光" class="headerlink" title="Day4：乐高乐园的欢乐时光"></a>Day4：乐高乐园的欢乐时光</h2><p>第四天带女儿去了上海唯一的乐高乐园，这里简直是低龄宝宝的天堂，主题感拉满，各种积木搭建的场景和互动项目让她玩到停不下来，果然“乐高之外再无积木”。</p><h2 id="Day5：EVA-打卡与奈尔宝科技馆探秘"><a href="#Day5：EVA-打卡与奈尔宝科技馆探秘" class="headerlink" title="Day5：EVA 打卡与奈尔宝科技馆探秘"></a>Day5：EVA 打卡与奈尔宝科技馆探秘</h2><p>第五天先去打卡了超帅的EVA初号机模型，圆了女儿的粉丝梦。原本计划去上海科技馆，却遇上闭馆，临时改去明星常去的奈尔宝科技馆。</p><p>没想到这里意外好玩，互动科技项目丰富，工作人员还会贴心科普，女儿从早玩到晚，直到我晚上7点要开线上会才恋恋不舍离开。</p><h2 id="Day6：虹桥机场的小波折与旅行总结"><a href="#Day6：虹桥机场的小波折与旅行总结" class="headerlink" title="Day6：虹桥机场的小波折与旅行总结"></a>Day6：虹桥机场的小波折与旅行总结</h2><p>第六天返程，虹桥机场又给我们上了一课——标识依旧混乱，从2号航站楼转去1号航站楼费了好大劲，问了好几次工作人员才找对路。</p><h1 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h1><p>这次旅行有遗憾：我没去成外滩，也没体验磁悬浮。但收获更多——发现机票其实很便宜，“接力带娃”让我们既能兼顾工作又能陪孩子尽兴玩。</p><p>家人对上海的感受也很有趣：老婆还想再逛南京东路，女儿念念不忘迪士尼，而我大概不会主动再来了。唯一的共识是：假期真的太不够用了。</p><p><img src="https://haofly.net/uploads/2026-autumn1.jpg"></p><p><img src="https://haofly.net/uploads/2026-autumn2.jpg"></p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h2 id=&quot;临时起意的上海之行&quot;&gt;&lt;a href=&quot;#临时起意的上海之行&quot; class=&quot;headerlink&quot; title=&quot;临时起意的上海之行&quot;&gt;&lt;/a&gt;临时起意的上海之行&lt;/h2&gt;&lt;p&gt;10月下旬，老婆意外获得3天假期，突发奇想带女儿去上海迪士尼。我起初因要上班犹豫，突
      
    
    </summary>
    
    
      <category term="生活" scheme="https://haofly.net/categories/%E7%94%9F%E6%B4%BB/"/>
    
    
  </entry>
  
  <entry>
    <title>2025年暑假游</title>
    <link href="https://haofly.net/2025-summer/"/>
    <id>https://haofly.net/2025-summer/</id>
    <published>2025-09-16T14:50:00.000Z</published>
    <updated>2025-09-16T13:48:50.512Z</updated>
    
    <content type="html"><![CDATA[<p>2025年暑假，恰逢老婆换工作，中间有三周空闲。斟酌再三，我们决定再次前往云南旅行几周。不过这次没有选择大理，而是尝试了一条全新的路线。</p><p><img src="https://haofly.net/uploads/2025-summer.jpeg"></p><h2 id="贵州毕节草原行"><a href="#贵州毕节草原行" class="headerlink" title="贵州毕节草原行"></a>贵州毕节草原行</h2><p>从重庆自驾前往云南，贵州是必经之地，于是行程的前几天都留给了草原。原本计划去乌蒙大草原，但听说堵车严重，就临时改道。在毕节市区看完响水滩音乐节后，第二天我们去了阿西里西大草原。作为山城人第一次见识草原，我们走了一条比较冷门、路况一般的山路。窄、烂，但对重庆司机来说不算什么。起初一路穿行在山间，完全不见草原踪影，直到驶上山顶才豁然开朗——原来草原可以如此辽阔。</p><p>我们体验了网红波浪路，还把车直接开上草坪露营、放风筝，在草原上奔跑追逐，非常惬意。尽管遍地牛粪，但一点也没影响当时的快乐。</p><p>第三天去了威宁百草坪。同样是草原，但这个景区似乎已被荒废，反而收获了人少、景美、更清凉的体验。车子能一直开到山顶，开到巨大的风力发电机下面。有些地方风极大，也特别凉，刚下车我们就赶紧翻出冲锋衣穿上。还尝试了骑马，按照网上的攻略成功砍价，骑了一圈，感觉特别棒。</p><p>第四天原本计划去云南曲靖的会泽大海草山，但因为连看几天草原有些审美疲劳，加上听说不能开车进入景区，就临时放弃，只在会泽古城转了一圈，便出发前往弥勒。</p><p>值得一提的是，毕节的米线真的很好吃，随便一家小店都让人回味。</p><h2 id="云南弥勒"><a href="#云南弥勒" class="headerlink" title="云南弥勒"></a>云南弥勒</h2><p>弥像是一座专为避暑打造的度假小城，不过和大理年轻的氛围不同，这里更多是退休的叔叔阿姨。我们住在一栋别墅改造的民宿里，很安静，早餐丰富又美味。去了锦屏山看弥勒大佛，工作日老婆还带孩子去了东风韵打卡。弥勒天气还算凉爽，但儿童娱乐项目不多，人工沙滩的沙子粗糙，甚至把孩子的铲子都弄断了。总体感觉一般，可能不会再特意来了。</p><h2 id="云南蒙自"><a href="#云南蒙自" class="headerlink" title="云南蒙自"></a>云南蒙自</h2><p>原本计划从弥勒直接去西双版纳，但一位住在蒙自的朋友强烈邀请我们去玩。一看路线不算绕，就打算停留半天。结果这位大哥是个闲适的老板，特别有空，他们一家三口带着我们一家三口，在蒙自整整玩了三天。全程他来做攻略，每天从早餐开始体验不同美食，还带我们去了中越边境——可惜没带护照，没能出境。</p><p>蒙自的兔肉米线令人印象深刻，也见识了过桥米线的发源地，那家店规模惊人，吃碗米线居然也要等一个小时。</p><p>从蒙自开往西双版纳，经历了高难度的昆磨高速：长下坡加急弯，限速却高达110。我在贵州和重庆都没见过如此密集的高速弯道，开得驾驶员都晕车了。</p><h2 id="西双版纳"><a href="#西双版纳" class="headerlink" title="西双版纳"></a>西双版纳</h2><p>在西双版纳我们住在如家精选，整体不错，干净、离景点近。可惜星光夜市最出片的拍照点正在维修，有点遗憾。这里的水果特别便宜，感觉随便一家路边水果店都值得一试。当然，拍照也不能错过，老婆和孩子都留下了美美的照片。</p><p>最让人难忘的是中科植物园的夜游。下午六点多，园里剩下的几乎全是带娃体验夜游的家庭。虽然只有一个小时，但那种感受非常特别，下次来还想再带孩子参加。建议最好请一位讲解员，否则就真的只是走马观花拍拍照。</p><h2 id="抚仙湖"><a href="#抚仙湖" class="headerlink" title="抚仙湖"></a>抚仙湖</h2><p>在西双版纳的第二天，高速因塌方中断，直到我们离开时还没修好。原本8小时的车程，最终绕行国道、省道、县道甚至乡道，早上9点出发，晚上10点才抵达抚仙湖。我也刷新了个人最长连续驾驶记录：从中午12点开到晚上7点才休息。山路窄、弯道多，开到下午时心里越来越慌，因为还在乡道里打转，一心想在天黑前驶上高速。油表只剩一格，已经开始担心燃油耗尽，幸好最终找到了加油站。永远忘不了看见高速路口那一刻的激动。</p><p>在抚仙湖，我们住的是面朝湖景的酒店，但广龙小镇这边吃的选择很少，几乎全是石锅鱼和菌子火锅，连外卖都点不到，所以在吃上花了不少钱。最惬意的是租了一辆摩托车，每天傍晚带着老婆孩子在湖边骑行。这里非机动车道很宽，甚至还能停车，非常方便。不像大理，这里骑摩托很自由，哪怕骑到沙滩也没人管。天气一会儿晴一会儿雨，特别凉爽。</p><p>抚仙湖是这次旅行的最后一站，因为太累，也拍够了照片，有一半的地方没去成，但还是想再来一次。</p><p>最后从抚仙湖回重庆，导航显示9小时，我开了8小时到家，其中连续驾驶6小时。依然一点不累，不得不羡慕自己这年轻的身体。</p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;2025年暑假，恰逢老婆换工作，中间有三周空闲。斟酌再三，我们决定再次前往云南旅行几周。不过这次没有选择大理，而是尝试了一条全新的路线。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://haofly.net/uploads/2025-summer.jpeg&quot;&gt;&lt;/p&gt;
&lt;
      
    
    </summary>
    
    
      <category term="生活" scheme="https://haofly.net/categories/%E7%94%9F%E6%B4%BB/"/>
    
    
  </entry>
  
  <entry>
    <title>2025年3、4月回顾</title>
    <link href="https://haofly.net/2025-04/"/>
    <id>https://haofly.net/2025-04/</id>
    <published>2025-05-06T14:50:00.000Z</published>
    <updated>2025-05-06T14:47:44.887Z</updated>
    
    <content type="html"><![CDATA[<h3 id="重新认识「错峰出行」的快乐"><a href="#重新认识「错峰出行」的快乐" class="headerlink" title="重新认识「错峰出行」的快乐"></a>重新认识「错峰出行」的快乐</h3><p>4月因为夜班调休，趁着工作日溜出去自贡玩了两天，去了方特恐龙乐园和自贡灯会。工作日出行的体验实在太棒了，几乎享受了“包场”的待遇，全程没怎么排队，想玩什么就玩什么，效率拉满。和节假日人挤人完全是两个世界，从此我大概再也不想节假日出门了。这些地方，只有工作日才值得去呀。</p><h3 id="工作碎碎念"><a href="#工作碎碎念" class="headerlink" title="工作碎碎念"></a>工作碎碎念</h3><p>这个月，一个试用期的同事离开了。作为PM，心里还是有点不是滋味，感觉在团队搭建和人员辅导上还有很多需要提升的地方。很多时候明知道问题在哪，但真正做到却没那么容易。只能继续反思，继续进步吧。</p><h3 id="家庭生活：意外、童年与第一次徒步"><a href="#家庭生活：意外、童年与第一次徒步" class="headerlink" title="家庭生活：意外、童年与第一次徒步"></a>家庭生活：意外、童年与第一次徒步</h3><p>难得带老婆孩子去了趟歌乐山森林公园徒步。天气很好，不冷不热，路线也适中，女儿虽然走得有点累，但整体非常开心。希望以后能更多地安排这种小而美的出行，毕竟最近家人的免疫力都不行，有机会出去透口气顺便锻炼一下真的太重要了。</p><p>不过这个月也发生了一件大事——点点在玩耍时摔倒，磕到了下巴，缝了四针。是她目前为止最严重的一次受伤，好在意外险全额赔付了医药费，希望她这次能长一点教训吧。</p><p>也带她一起看了数码宝贝的展览，说实话一看就是圈钱的活动，但对我来说还是挺有意义的。让点点看了一下我们的童年，虽然她可能还看不懂，但对我来说就是一种回忆的连接。那年夏天的我们已经回不去了，她的童年由我来守护。</p><h3 id="体检：成年人的健康焦虑"><a href="#体检：成年人的健康焦虑" class="headerlink" title="体检：成年人的健康焦虑"></a>体检：成年人的健康焦虑</h3><p>一年一度的体检如期而至，结果依然让人焦虑。肺结节和上次复查差不多，医生说半年后还得继续复查，算是长期项目了，只希望不会恶化。更头疼的是查出了幽门螺杆菌阳性，具体怎么感染的不清楚，但治疗过程挺麻烦，吃药的这段时间饿得特别快。关键我也很少出去吃饭，家人也都没有被感染上，所以我到底是怎么感染上的。</p><p>好消息是尿酸控制住了，吃药终于见效了一次。不过BMI依旧肥胖，感觉自己肥头大耳的，恶心，必须赶快减肥了。</p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h3 id=&quot;重新认识「错峰出行」的快乐&quot;&gt;&lt;a href=&quot;#重新认识「错峰出行」的快乐&quot; class=&quot;headerlink&quot; title=&quot;重新认识「错峰出行」的快乐&quot;&gt;&lt;/a&gt;重新认识「错峰出行」的快乐&lt;/h3&gt;&lt;p&gt;4月因为夜班调休，趁着工作日溜出去自贡玩了两天，去了
      
    
    </summary>
    
    
      <category term="生活" scheme="https://haofly.net/categories/%E7%94%9F%E6%B4%BB/"/>
    
    
  </entry>
  
  <entry>
    <title>2025年2月回顾</title>
    <link href="https://haofly.net/2025-02/"/>
    <id>https://haofly.net/2025-02/</id>
    <published>2025-03-03T14:50:00.000Z</published>
    <updated>2025-03-03T14:44:03.715Z</updated>
    
    <content type="html"><![CDATA[<h3 id="开始使用豆包"><a href="#开始使用豆包" class="headerlink" title="开始使用豆包"></a>开始使用豆包</h3><p>2月份尝试了几次 DeepSeek，整体质量已经和 ChatGPT 相差不大。但考虑到敏感信息和响应速度，日常开发还是更依赖 ChatGPT。</p><p>不过，ChatGPT 在非技术场景下有时会受限，比如查询旅游攻略、拍照翻译、识别图片信息，甚至是快速分享内容时，使用体验就不太理想。而豆包在这方面表现得非常优秀，体验丝滑，效率极高。</p><p>更有意思的是，身边不少非技术朋友也开始用豆包，这种全民 AI 的趋势已经悄然展开。不过，对我来说，AI 仍然只是工具，目前来说还只停留在调用API上，仍然需要挖掘更多的使用场景。</p><h3 id="不完整的-2-月"><a href="#不完整的-2-月" class="headerlink" title="不完整的 2 月"></a>不完整的 2 月</h3><p>今年 2 月，最后两个周末都被夜班占据，和去年一样，累到怀疑人生。更郁闷的是，上完夜班后，本来打算好好休息，结果接下来的几个周末天气都不太给力，白白浪费了难得的周末时光。</p><p>其实一直想趁天气好的时候去露营，可每次一看天气好，重庆的露营地就已经是人挤人了，瞬间没了兴致。或许以后可以考虑收费营地，至少人少、环境好、设施齐全。</p><p>另一方面，露营还是得配电车，充电、储能都方便，连车型都选好了。可惜手里的油车才开 6 年，还有十几万的贷款没还完，只能再等等了。中年男人的无奈，这才刚刚开始。</p><h3 id="家庭生活"><a href="#家庭生活" class="headerlink" title="家庭生活"></a>家庭生活</h3><p>今年过年虽然没有怎么回老家，但过得还是挺开心的，尤其是和兄弟姐妹们聚在一起，玩得很尽兴。新的一年，希望大家都能发财！</p><p>大家还计划暑假去云南租个院子避暑，但现实可能没那么理想——毕竟还不知道老婆的假期安排。今年的春节已经试过不在老家过除夕了，明年更想玩点不一样的，比如直接旅游过年，感觉会更有趣。</p><p>至于家庭这边，婆媳矛盾还是老样子，短时间内估计难以调和，现在只能让丈母娘来帮忙带孩子了。好在丈母娘性格比较乐观，希望接下来的日子能顺利一些，少点矛盾，多点轻松吧。</p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h3 id=&quot;开始使用豆包&quot;&gt;&lt;a href=&quot;#开始使用豆包&quot; class=&quot;headerlink&quot; title=&quot;开始使用豆包&quot;&gt;&lt;/a&gt;开始使用豆包&lt;/h3&gt;&lt;p&gt;2月份尝试了几次 DeepSeek，整体质量已经和 ChatGPT 相差不大。但考虑到敏感信息和响应速度，日
      
    
    </summary>
    
    
      <category term="生活" scheme="https://haofly.net/categories/%E7%94%9F%E6%B4%BB/"/>
    
    
  </entry>
  
  <entry>
    <title>2024年总结以及2025年的计划</title>
    <link href="https://haofly.net/2024-to-2025/"/>
    <id>https://haofly.net/2024-to-2025/</id>
    <published>2025-01-06T14:36:00.000Z</published>
    <updated>2025-03-04T13:45:21.473Z</updated>
    
    <content type="html"><![CDATA[<h2 id="2024计划"><a href="#2024计划" class="headerlink" title="2024计划"></a>2024计划</h2><h3 id="技术"><a href="#技术" class="headerlink" title="技术"></a>技术</h3><ul><li><p><del>PM工作能有质的飞跃，需要系统地学习一下</del> </p><ul><li>部分完成。虽然有所进步，但仍然会出现理解需求或传达需求不到位的情况，仍需系统学习和改进</li></ul></li><li><p><del>AI方面能有更深入的研究</del> </p><ul><li>未完成，目前仍处于使用阶段，研究方向尚不清晰</li></ul></li><li><p><input checked="" disabled="" type="checkbox">  AI方面能找到更多的工具来提升工作效率</p></li></ul><h3 id="理财"><a href="#理财" class="headerlink" title="理财"></a>理财</h3><ul><li><input checked="" disabled="" type="checkbox"> 维持22年的收入，维持23年的收入恐怕是不行的<ul><li>收入虽不及 2023 年，但超过 2022 年，已达到预期</li></ul></li><li><input disabled="" type="checkbox"> <del>尽量还清今年的欠款，主要看老婆了</del><ul><li>未完成，家庭原因导致负债没有显著减少，仍需努力</li></ul></li><li><input disabled="" type="checkbox"> <del>副业收入全年怎么也得1000+吧😭</del></li></ul><h3 id="家庭"><a href="#家庭" class="headerlink" title="家庭"></a>家庭</h3><ul><li><input disabled="" type="checkbox"> <del>🎮搬家后坚持健身环大冒险，至少3天一次</del><ul><li>坚持了一段时间，但是由于女儿眼睛有一段时间不舒服不能看电视，就放弃了，放弃了就没再捡起来过</li></ul></li><li><input checked="" disabled="" type="checkbox"> 搬家后每周带老婆或女儿在家里一起看一次电影<ul><li>完成，已经成为家庭固定活动之一</li></ul></li><li><input disabled="" type="checkbox"> <del>🏃瘦到130斤以下(2022、2023未完成的目标)</del></li><li><input checked="" disabled="" type="checkbox"> 👧女儿的身高、体重能够达到中等线(2022、2023未完成的目标)</li><li><input checked="" disabled="" type="checkbox"> 带女儿去更多的地方看看(仍然坚持至少每个月去一个不同的地方)</li><li><input disabled="" type="checkbox"> <del>👧👧再生一个女儿</del><ul><li>因为老婆身体原因，两年内不可能再生了，长远了看，我也是一点也不想生二胎的</li></ul></li></ul><span id="more"></span><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><h3 id="远程工作四年半"><a href="#远程工作四年半" class="headerlink" title="远程工作四年半"></a>远程工作四年半</h3><p>第二份工作的时间已经超过第一份工作了。目前也暂时没有换工作的理由，并且我现在就是个做外包的，哪儿那么容易找工作呢。今年在工作上的状态稳中有升，PM工作比以前做得好一点了，但是仍然有明显的一些问题，所以今年的职级应该是不会有什么变化的。但是好在今年没有出什么大的事故，虽然公司丢了一些大项目，影响了一些营收，但是也还好，和去年还是能持平的。不过明年不知道川普那边会不会搞些什么大的动作影响我们的运营。</p><h3 id="AI"><a href="#AI" class="headerlink" title="AI"></a>AI</h3><p>近几年的程序员都离不开AI这两个字吧。目前工作上主要还是ChatGPT来直接解决很多问题，遇到难一点的问题会使用ChatGPT Plus，但是两者相差其实不算大，所以平时我都是用自己的免费账号的。另外，公司还提供了付费的Github Copilot，我也已经持续在用了，有时候比ChatGPT方便，但是有时候还是得找ChatGPT。</p><p>其他的AI工具，Cursor等，感觉并不是很好用，智商也不是很高。大型项目的话目前还是需要专业程序员来做一些修改的。但是还是挺有危机感的，生怕他们有一天完全不依赖程序员了。</p><p>今年最多的尝试还是用AI来生成设计。我本人没啥艺术细胞的，所以UI设计是我目前最大的难关。但是现在的一些和UI相关的网站我都不大满意，要么生成出来的设计一看就很low，要么价格太贵，并且哪怕是贵的生成出来的也不大好。唯一有用的是Figma里面的一些插件，可以直接将截图生成可用的设计文件。对了，ChatGPT上传设计图直接生成代码这个也是非常惊艳的，配合Tailwindss几乎可以达到直接用的程</p><h3 id="旅游与生活"><a href="#旅游与生活" class="headerlink" title="旅游与生活"></a>旅游与生活</h3><p>今年暑假，老婆没工作，女儿放假，这种情况简直太难得了，于是在外债还有很多的情况下，又借了点钱去云南大理旅居了一个月，当了一把数字游民。云南的生活成本还真不高，哪怕暑假的房租翻了两三倍，但是并不影响其他的支出，而且，如果呆在重庆的话8月份至少一千五的电费，不如换个凉快的地方。本来以为这是最后一次，但是没想到老婆现在的工作好像还有寒暑假，那岂不是每年都可以了。</p><h3 id="理财-1"><a href="#理财-1" class="headerlink" title="理财"></a>理财</h3><p>理财方面，仍然没有任何的投资，毕竟除去房贷外，还有20万的债务呢。今年开始使用钱记APP来记账了。今年的结余总算是正数了，翻看我每年的结余，发现几乎就是挣了多少花了多少。</p><table><thead><tr><th>年份</th><th>结余</th></tr></thead><tbody><tr><td>2016</td><td>-139827.19</td></tr><tr><td>2017</td><td>151089.98</td></tr><tr><td>2018</td><td>-8691.42</td></tr><tr><td>2019</td><td>7162.21</td></tr><tr><td>2020</td><td>47696.24</td></tr><tr><td>2021</td><td>29064.94</td></tr><tr><td>2022</td><td>-144556.09</td></tr><tr><td>2023</td><td>-104860.00</td></tr><tr><td>2024</td><td>7227.00</td></tr></tbody></table><p>最大的支出永远是固定支出和女儿的支出：</p><p><img src="https://haofly.net/uploads/2024-to-2025.jpeg"></p><p>但是翻看账单，明年至少可以不用装修钱和买电脑的钱了，这两块可是不小的数目。</p><h3 id="健康"><a href="#健康" class="headerlink" title="健康"></a>健康</h3><p>今年老婆做了个小手术，意识到她也应该每年体检了。而我今年又喜提一个新的职业病，颈椎病。应该还早初期，但是确实没时间锻炼啊。每天5点半下班，做饭吃饭，然后到6点过去接孩子放学，放学后陪孩子玩到8点，洗漱完孩子睡着就10点了，完全没有自己的时间。现在才知道之前那首《时间都去哪儿了》唱的是啥，哎。不过还是尽量在天气好的周末带孩子出门走走。</p><p>另外今年开始长期吃降尿酸药了，虽然几次复查都没有什么效果，虽然这个药吃了伤肝，但是比起通风我还是更愿意吃这个药，希望早日将下去。不过医生也说了，如果我没有不好的生活习惯，那就只剩下做运动了。</p><h2 id="2025计划"><a href="#2025计划" class="headerlink" title="2025计划"></a>2025计划</h2><h3 id="技术-1"><a href="#技术-1" class="headerlink" title="技术"></a>技术</h3><ul><li><input disabled="" type="checkbox"> PM工作继续提升，今年升职级吧</li><li><input disabled="" type="checkbox"> 加深对 AI 技术的研究，探索更适合工作和生活的 AI 工具</li><li><input disabled="" type="checkbox"> 阅读几本书 (搬新家总算是把书籍整理完了，发现还有之前买过没有看的书)</li><li><input disabled="" type="checkbox"> 每月一篇博客(去年居然只写了6篇文章)</li></ul><h3 id="理财-2"><a href="#理财-2" class="headerlink" title="理财"></a>理财</h3><ul><li><input disabled="" type="checkbox"> 目标收入超过 2024 年</li><li><input disabled="" type="checkbox"> 把负债从20万减少到10万</li><li><input disabled="" type="checkbox"> 尝试副业，哪怕只是小额收入也值得尝试，或许我应该先投入一点资金才行？</li></ul><h3 id="家庭-1"><a href="#家庭-1" class="headerlink" title="家庭"></a>家庭</h3><ul><li><input disabled="" type="checkbox"> 🎮重拾健身，每周至少2次</li><li><input checked="" disabled="" type="checkbox"> 继续家庭观影计划，每周一次</li><li><input disabled="" type="checkbox"> 每月一山，看到小红书上好多家长能带小孩儿每周一山，那才是厉害，我和老婆都是超级宅的人，出门需要特别大的勇气</li><li><input disabled="" type="checkbox"> 🏃瘦到130斤以下(2022、2023、2024未完成的目标)</li><li><input disabled="" type="checkbox"> 👧女儿的身高、体重能够继续达到中等线(2022、2023未完成的目标，2024达成了的)</li><li><input disabled="" type="checkbox"> 尝试带家人和朋友一起露营</li><li><input disabled="" type="checkbox"> 将血尿酸降到正常范围</li><li><input disabled="" type="checkbox"> 把塞尔达2和星之卡比玩通关</li></ul>]]></content>
    
    <summary type="html">
    
      &lt;h2 id=&quot;2024计划&quot;&gt;&lt;a href=&quot;#2024计划&quot; class=&quot;headerlink&quot; title=&quot;2024计划&quot;&gt;&lt;/a&gt;2024计划&lt;/h2&gt;&lt;h3 id=&quot;技术&quot;&gt;&lt;a href=&quot;#技术&quot; class=&quot;headerlink&quot; title=&quot;技术&quot;&gt;&lt;/a&gt;技术&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;del&gt;PM工作能有质的飞跃，需要系统地学习一下&lt;/del&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;部分完成。虽然有所进步，但仍然会出现理解需求或传达需求不到位的情况，仍需系统学习和改进&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;del&gt;AI方面能有更深入的研究&lt;/del&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;未完成，目前仍处于使用阶段，研究方向尚不清晰&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;input checked=&quot;&quot; disabled=&quot;&quot; type=&quot;checkbox&quot;&gt;  AI方面能找到更多的工具来提升工作效率&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;理财&quot;&gt;&lt;a href=&quot;#理财&quot; class=&quot;headerlink&quot; title=&quot;理财&quot;&gt;&lt;/a&gt;理财&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;input checked=&quot;&quot; disabled=&quot;&quot; type=&quot;checkbox&quot;&gt; 维持22年的收入，维持23年的收入恐怕是不行的&lt;ul&gt;
&lt;li&gt;收入虽不及 2023 年，但超过 2022 年，已达到预期&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&gt; &lt;del&gt;尽量还清今年的欠款，主要看老婆了&lt;/del&gt;&lt;ul&gt;
&lt;li&gt;未完成，家庭原因导致负债没有显著减少，仍需努力&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&gt; &lt;del&gt;副业收入全年怎么也得1000+吧😭&lt;/del&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;家庭&quot;&gt;&lt;a href=&quot;#家庭&quot; class=&quot;headerlink&quot; title=&quot;家庭&quot;&gt;&lt;/a&gt;家庭&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&gt; &lt;del&gt;🎮搬家后坚持健身环大冒险，至少3天一次&lt;/del&gt;&lt;ul&gt;
&lt;li&gt;坚持了一段时间，但是由于女儿眼睛有一段时间不舒服不能看电视，就放弃了，放弃了就没再捡起来过&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;input checked=&quot;&quot; disabled=&quot;&quot; type=&quot;checkbox&quot;&gt; 搬家后每周带老婆或女儿在家里一起看一次电影&lt;ul&gt;
&lt;li&gt;完成，已经成为家庭固定活动之一&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&gt; &lt;del&gt;🏃瘦到130斤以下(2022、2023未完成的目标)&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;input checked=&quot;&quot; disabled=&quot;&quot; type=&quot;checkbox&quot;&gt; 👧女儿的身高、体重能够达到中等线(2022、2023未完成的目标)&lt;/li&gt;
&lt;li&gt;&lt;input checked=&quot;&quot; disabled=&quot;&quot; type=&quot;checkbox&quot;&gt; 带女儿去更多的地方看看(仍然坚持至少每个月去一个不同的地方)&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&gt; &lt;del&gt;👧👧再生一个女儿&lt;/del&gt;&lt;ul&gt;
&lt;li&gt;因为老婆身体原因，两年内不可能再生了，长远了看，我也是一点也不想生二胎的&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
    
    </summary>
    
    
    
  </entry>
  
  <entry>
    <title>大理暑假一月游</title>
    <link href="https://haofly.net/dali/"/>
    <id>https://haofly.net/dali/</id>
    <published>2024-10-15T03:02:30.000Z</published>
    <updated>2024-10-15T14:41:29.316Z</updated>
    
    <content type="html"><![CDATA[<p>今年，我工作四年多来，第一次带着家人在外旅居，整整一个月。事情的起因很简单——妻子暂时没有工作，小孩儿放暑假没地儿去，而重庆的夏天实在太过炎热。面对40度左右的高温，如果不出去避暑，基本上就得在家宅一个月，光是电费预估就得1500元，而且那样的生活难免无聊，除了吹空调看电视，实在没有其他乐趣可言。于是，我们一咬牙，决定出去走走，甚至还借了一些钱来完成这个计划。现在回头想想，做这个决定真的是明智的，旅居的支出其实还算合理：主要费用集中在3000元民宿费用和2500元左右的交通费，而大理的日常开销竟然比在重庆还低。最近我父亲买了电动车，要是早些时候拿来用，交通费至少还能省一半。</p><p>我们住的是一个带公共厨房的民宿，由于其他人多是短住客，厨房几乎成了我们的专属。每天去村里的菜市场买菜成了我们最大的乐趣。这个小小的市场虽然不大，但很接地气，当地农民自己种的蔬菜新鲜又便宜，挑菜的过程本身就是一种解压方式。回重庆后，我还特地把家附近的几个菜市场都逛了一遍，决定以后每周都去买菜。相比超市，菜市场里的烟火气让人更有生活的实感，而且确实便宜很多。</p><p>在大理住的话，有两个选择：要么住在大理古城附近，要么住在洱海边。我个人觉得，如果是长住，洱海边更合适。古城虽然热闹，但人流量太大，游客扎堆，两三天逛逛还好，天天去就没什么新意了。我们的民宿离洱海只需要两分钟步行，所以下班之后，天还没黑，一家人吃完晚饭就可以到海边散步。洱海边的骑行也是一大乐事，不过不必天天骑，最让人着迷的还是海边那些广阔的草坪。夕阳下，微风拂面，草坪上随意奔跑，仰望大理变幻莫测的云朵，生活的惬意不过如此。</p><p>大理的美景令人陶醉，但交通却让人头疼。古城周边停车极难，常年堵车，打车也不太容易。出行最方便的方式其实是摩托车，幸好我们住的民宿老板免费提供摩托，平时去古城游玩也足够了。不过，摩托车的局限也很明显——洱海边的生态廊道只能骑自行车，电动车则需要使用共享的电动自行车，价格贵得离谱，15元一小时，这不抢钱吗。幸好我们自己带了一个小电驴，体型小到可以在廊道里行驶，虽然中途坏了几天，但它的确为我们的出行提供了很多方便。</p><p>旅居结束后，我和妻子都达成了共识——大理是我们今后还会常来的地方，甚至想每年都来一次。</p><p>大理最让人怀念的，是那每天变幻无穷的云，永远都看不腻：</p><span id="more"></span><iframe src="//player.bilibili.com/player.html?isOutside=true&aid=113311924356891&bvid=BV1582oYkEiw&cid=26305692077&p=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"></iframe>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;今年，我工作四年多来，第一次带着家人在外旅居，整整一个月。事情的起因很简单——妻子暂时没有工作，小孩儿放暑假没地儿去，而重庆的夏天实在太过炎热。面对40度左右的高温，如果不出去避暑，基本上就得在家宅一个月，光是电费预估就得1500元，而且那样的生活难免无聊，除了吹空调看电视，实在没有其他乐趣可言。于是，我们一咬牙，决定出去走走，甚至还借了一些钱来完成这个计划。现在回头想想，做这个决定真的是明智的，旅居的支出其实还算合理：主要费用集中在3000元民宿费用和2500元左右的交通费，而大理的日常开销竟然比在重庆还低。最近我父亲买了电动车，要是早些时候拿来用，交通费至少还能省一半。&lt;/p&gt;
&lt;p&gt;我们住的是一个带公共厨房的民宿，由于其他人多是短住客，厨房几乎成了我们的专属。每天去村里的菜市场买菜成了我们最大的乐趣。这个小小的市场虽然不大，但很接地气，当地农民自己种的蔬菜新鲜又便宜，挑菜的过程本身就是一种解压方式。回重庆后，我还特地把家附近的几个菜市场都逛了一遍，决定以后每周都去买菜。相比超市，菜市场里的烟火气让人更有生活的实感，而且确实便宜很多。&lt;/p&gt;
&lt;p&gt;在大理住的话，有两个选择：要么住在大理古城附近，要么住在洱海边。我个人觉得，如果是长住，洱海边更合适。古城虽然热闹，但人流量太大，游客扎堆，两三天逛逛还好，天天去就没什么新意了。我们的民宿离洱海只需要两分钟步行，所以下班之后，天还没黑，一家人吃完晚饭就可以到海边散步。洱海边的骑行也是一大乐事，不过不必天天骑，最让人着迷的还是海边那些广阔的草坪。夕阳下，微风拂面，草坪上随意奔跑，仰望大理变幻莫测的云朵，生活的惬意不过如此。&lt;/p&gt;
&lt;p&gt;大理的美景令人陶醉，但交通却让人头疼。古城周边停车极难，常年堵车，打车也不太容易。出行最方便的方式其实是摩托车，幸好我们住的民宿老板免费提供摩托，平时去古城游玩也足够了。不过，摩托车的局限也很明显——洱海边的生态廊道只能骑自行车，电动车则需要使用共享的电动自行车，价格贵得离谱，15元一小时，这不抢钱吗。幸好我们自己带了一个小电驴，体型小到可以在廊道里行驶，虽然中途坏了几天，但它的确为我们的出行提供了很多方便。&lt;/p&gt;
&lt;p&gt;旅居结束后，我和妻子都达成了共识——大理是我们今后还会常来的地方，甚至想每年都来一次。&lt;/p&gt;
&lt;p&gt;大理最让人怀念的，是那每天变幻无穷的云，永远都看不腻：&lt;/p&gt;
    
    </summary>
    
    
      <category term="life" scheme="https://haofly.net/categories/life/"/>
    
    
  </entry>
  
  <entry>
    <title>Sony ZVE-10 配置备忘</title>
    <link href="https://haofly.net/sony-zve10/"/>
    <id>https://haofly.net/sony-zve10/</id>
    <published>2024-08-09T03:02:30.000Z</published>
    <updated>2024-09-02T14:55:42.547Z</updated>
    
    <content type="html"><![CDATA[<h2 id="基本概念"><a href="#基本概念" class="headerlink" title="基本概念"></a>基本概念</h2><ul><li>照相模式<ul><li>光圈优先：调节光圈以改变对焦范围和背景模糊程度，然后拍摄静态影像。光圈值小可使前景和背景模糊，光圈值大可使背景清晰。需要自己决定感光度和和曝光补偿，相机控制快门速度</li></ul></li><li>曝光三要素<ul><li>光圈：F后面的数字越小光圈越大，进光量就越多。还有个很重要的作用，就是会影响背景虚化的程度，光圈越大背景虚化越明显，如果要突出拍摄主体，让画面更干净就可以调小F值，调大光圈。如果想拍远处的风景、合照就可以用小光圈</li><li>快门速度：1/200，这个就是快门速度，单位是秒。就是指按下拍照按钮后，镜头从打开到闭合的时间。快门速度快就适合抓拍，速度慢适合光影效果、轨迹效果</li><li>ISO感光度: 照片亮度<ul><li>太高会过曝或者模糊，但是在暗光下能捕捉更多细节，否则画面会太暗</li><li>越低，噪点越少，画质越细腻</li><li>光线充足的情况下，可以调低一点。像大白天室外就100，室内就400，晚上夜景才超过1000</li></ul></li></ul></li><li>夜景拍摄：适合较快快门、高感光度</li></ul><span id="more"></span><h2 id="常用场景"><a href="#常用场景" class="headerlink" title="常用场景"></a>常用场景</h2><h4 id="虚化效果"><a href="#虚化效果" class="headerlink" title="虚化效果"></a>虚化效果</h4><ul><li>右上角那个C1默认是产品展示，可以设置为一键虚化，其实就是把F值调整到最小</li><li>光圈越大虚化效果越好</li><li>镜头焦段越长虚化效果越好</li><li>距离拍摄主体越近虚化效果越好</li><li>拍摄主体离背景距离越远越好</li></ul><h2 id="常用操作"><a href="#常用操作" class="headerlink" title="常用操作"></a>常用操作</h2><ul><li>Fn功能按键，可以调出功能设置菜单<ul><li>拍摄模式：单张、连拍、自拍定时</li><li>对焦模式<ul><li>AF-S(单次AF，单点自动对焦)： 半按相机快门他只对焦一次，一般用来拍摄静止的人或物体，对焦准确性最高，听到滴滴声表示对焦成功</li><li>AF-C(连续AF，连续自动对焦)：抓拍运动物体，半按快门不松手，对焦点会一直跟随物体</li><li>AF-A(自动对焦)：会在上面两种对焦模式间切换，适合无法预测物体时候会动起来的情况，比如抓拍小宝宝</li><li>MF(手动对焦): 比如隔着玻璃、太暗了对焦不准确的时候</li></ul></li><li>对焦区域</li><li>曝光补偿</li><li>ISO</li><li>产品展示设定</li><li>StedyShot</li><li>美肤效果：开到中就行了，关掉也行，手机上用醒图、美图秀秀可以达到更好的效果</li><li>白平衡模式</li><li>创意风格</li><li>图片配置文件</li><li>照相模式：光圈优先</li></ul></li><li>正面波轮<ul><li>最上面DISP：切换多种拍摄设置信息</li><li>右边ISO：快速调节感光度</li><li>左上角拍摄模式：单拍、连拍、自拍定时</li><li>最下面+-：快速调节曝光补偿</li></ul></li></ul><h2 id="相机设置"><a href="#相机设置" class="headerlink" title="相机设置"></a>相机设置</h2><ul><li><p>眼部AF(眼控AF)：默认打开。能让对焦点自动落在人物眼部</p></li><li><p>多重测光时人脸优先：默认打开。相机测明暗的时候以人脸为依据</p></li><li><p>AWB优先级设置</p><ul><li><p>标准：默认</p></li><li><p>环境：暖色咖啡馆，如果想保留环境本来的颜色可以选择这个</p></li><li><p>白：拍人建议选成白色。这个操作也叫白平衡漂移，选择后白平衡调整，往左边和下变按几下，直到A-B=B1.5，G-M=M1，这样人出来的肤色会更接近一点</p></li></ul></li><li><p>DRO/自动HDR: 类似于手机的HDR</p><ul><li>DRO AUTO：默认这个就行，还可以设置左右调整等级</li><li>HDR AUTO：一般不选这个，因为会拍好几张</li></ul></li><li><p>创意风格，选啥其实都一样</p><ul><li>标准，就这个，但是下面三个(锐度、饱和度、清晰度)全都-1</li></ul></li><li><p>照片效果：没什么意义</p></li><li><p>图片配置文件：关就行</p></li><li><p>显示屏亮度</p><ul><li>手动</li><li>晴朗天气：屏幕会更亮，但是注意照片实际的亮度是会低于实际亮度的。<strong>屏幕略微过曝其实是刚好的</strong>。</li></ul></li></ul><h2 id="Vlog"><a href="#Vlog" class="headerlink" title="Vlog"></a>Vlog</h2><ul><li>没有机身防抖，但是有一个Catalyst Browse的软件可以后期处理，但是必须关闭机身防抖才能记录陀螺仪数据</li></ul>]]></content>
    
    <summary type="html">
    
      &lt;h2 id=&quot;基本概念&quot;&gt;&lt;a href=&quot;#基本概念&quot; class=&quot;headerlink&quot; title=&quot;基本概念&quot;&gt;&lt;/a&gt;基本概念&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;照相模式&lt;ul&gt;
&lt;li&gt;光圈优先：调节光圈以改变对焦范围和背景模糊程度，然后拍摄静态影像。光圈值小可使前景和背景模糊，光圈值大可使背景清晰。需要自己决定感光度和和曝光补偿，相机控制快门速度&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;曝光三要素&lt;ul&gt;
&lt;li&gt;光圈：F后面的数字越小光圈越大，进光量就越多。还有个很重要的作用，就是会影响背景虚化的程度，光圈越大背景虚化越明显，如果要突出拍摄主体，让画面更干净就可以调小F值，调大光圈。如果想拍远处的风景、合照就可以用小光圈&lt;/li&gt;
&lt;li&gt;快门速度：1/200，这个就是快门速度，单位是秒。就是指按下拍照按钮后，镜头从打开到闭合的时间。快门速度快就适合抓拍，速度慢适合光影效果、轨迹效果&lt;/li&gt;
&lt;li&gt;ISO感光度: 照片亮度&lt;ul&gt;
&lt;li&gt;太高会过曝或者模糊，但是在暗光下能捕捉更多细节，否则画面会太暗&lt;/li&gt;
&lt;li&gt;越低，噪点越少，画质越细腻&lt;/li&gt;
&lt;li&gt;光线充足的情况下，可以调低一点。像大白天室外就100，室内就400，晚上夜景才超过1000&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;夜景拍摄：适合较快快门、高感光度&lt;/li&gt;
&lt;/ul&gt;
    
    </summary>
    
    
      <category term="system" scheme="https://haofly.net/categories/system/"/>
    
    
  </entry>
  
  <entry>
    <title>proxychains 手册</title>
    <link href="https://haofly.net/proxychains/"/>
    <id>https://haofly.net/proxychains/</id>
    <published>2024-06-16T15:02:30.000Z</published>
    <updated>2024-06-16T14:43:43.201Z</updated>
    
    <content type="html"><![CDATA[<p>Proxychains是一个强大的工具，可以帮助用户在各种网络环境中实现代理访问，能够动态地将程序的套接字重定向到指定的代理。通过正确的配置和使用，能够大大提升网络操作的灵活性和便利性。clash的代理通常只能用于http或者https以及socks5，相当于设置了<code>https_proxy</code>, <code>http_proxy</code>, <code>all_proxy</code>，但不是所有的程序都会自动读取这几个环境变量，这个时候可以使用Proxychains直接更改套接字层。</p><h2 id="安装使用"><a href="#安装使用" class="headerlink" title="安装使用"></a>安装使用</h2><ul><li>Github地址: <a href="https://github.com/rofl0r/proxychains-ng">proxychains-ng</a></li></ul><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">brew install proxychains-ng# For Mac</span><br><span class="line"></span><br><span class="line">vim ~/.proxychains/proxychains.conf # 创建配置文件，内容如下：</span><br><span class="line">[ProxyList]</span><br><span class="line">socks5 127.0.0.1 7890# 这就是我实际代理的地址，clash默认就是7890端口</span><br></pre></td></tr></table></figure><h2 id="使用场景"><a href="#使用场景" class="headerlink" title="使用场景"></a>使用场景</h2><p>之前不能使用代理的很多场景现在都能通过代理了：</p><ul><li><p>Firebase</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">proxychains4 node main.js</span><br></pre></td></tr></table></figure></li><li><p>Android Studio模拟器:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">proxychains4 ~/Library/Android/sdk/emulator/emulator -avd Medium_Tablet_API_26</span><br></pre></td></tr></table></figure></li></ul>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;Proxychains是一个强大的工具，可以帮助用户在各种网络环境中实现代理访问，能够动态地将程序的套接字重定向到指定的代理。通过正确的配置和使用，能够大大提升网络操作的灵活性和便利性。clash的代理通常只能用于http或者https以及socks5，相当于设置了&lt;cod
      
    
    </summary>
    
    
      <category term="system" scheme="https://haofly.net/categories/system/"/>
    
    
  </entry>
  
  <entry>
    <title>搬新家记：新的起点</title>
    <link href="https://haofly.net/new-house/"/>
    <id>https://haofly.net/new-house/</id>
    <published>2024-06-05T14:02:30.000Z</published>
    <updated>2024-06-05T14:48:28.709Z</updated>
    
    <content type="html"><![CDATA[<p>上个月，我迎来了人生中的一个重要时刻——搬进了新家。30岁，终于搬进了我们夫妻俩共同拥有的第一套房。过去的一年里，我们的生活都被各种装修、软装和选购所填满。由于担心甲醛的问题，房子还空置了几个月，终于熬到了搬家的一天。</p><h2 id="新家是跃层呀"><a href="#新家是跃层呀" class="headerlink" title="新家是跃层呀"></a>新家是跃层呀</h2><p>很多人都保证自己买房肯定不会买跃层，我也不例外。从来没想过买复式房，不过这次因为各种难以拒绝的原因最终还是选择了它。毕竟这套房子的设计还是很合理的：一楼只有客厅、厨房和一个卫生间，二楼是休息的地方，三个大阳台，三楼则是储物间。这样安排，减少了上楼拿东西的不便，天然的动静分离。另外，经历过疫情后，突然发现家里有楼梯也蛮方便的，适合拿来锻炼。感觉每天走上走下已经可以消耗很多卡路里了。</p><h2 id="老婆心心念念的衣帽间"><a href="#老婆心心念念的衣帽间" class="headerlink" title="老婆心心念念的衣帽间"></a>老婆心心念念的衣帽间</h2><p>老婆一直梦想有个衣帽间，现在她的愿望终于实现了。我们的衣帽间和我的电竞房在同一个套房里。我很喜欢这种安排，她在一旁化妆或者看书，而我在这边写代码，彼此相伴，互不干扰。</p><span id="more"></span><p><img src="https://haofly.net/uploads/new-house_01.jpg"></p><h2 id="最大的房间做成了儿童房"><a href="#最大的房间做成了儿童房" class="headerlink" title="最大的房间做成了儿童房"></a>最大的房间做成了儿童房</h2><p>哪个小孩不想拥有一面积木墙和黑板墙呢</p><p><img src="https://haofly.net/uploads/new-house_04.jpg"></p><p><img src="https://haofly.net/uploads/new-house_05.jpg"></p><h2 id="我心心念念的电竞房"><a href="#我心心念念的电竞房" class="headerlink" title="我心心念念的电竞房"></a>我心心念念的电竞房</h2><p>目前，我的电竞房里只有一张桌子，其他设备还没有到位。RGB、海景房、洞洞板等装备还在筹备中，但我已经迫不及待地想要把它们布置好了。</p><p><img src="https://haofly.net/uploads/new-house_02.jpg"></p><h2 id="非常实用的阁楼"><a href="#非常实用的阁楼" class="headerlink" title="非常实用的阁楼"></a>非常实用的阁楼</h2><p>虽然阁楼高度只有1.2米，只能蹲着上去，但它的实用性超乎想象。我们搬家后一个多月没来得及整理的东西都暂时放在上面。夏天阁楼虽然很热，但它为二楼形成了隔热层，住在顶楼也不觉得热。不过住顶楼永远逃不过漏水的命运，其实开发商弄的本来挺好的，我们非要自己去改一下，导致这边漏了那边漏，那段时间真是心力交瘁，不过好在现在问题都解决了。</p><p><img src="https://haofly.net/uploads/new-house_03.jpg"></p><h2 id="新家好用的电器"><a href="#新家好用的电器" class="headerlink" title="新家好用的电器"></a>新家好用的电器</h2><ul><li><strong>小米洗碗机</strong>：质量一般，但延保服务很好，虽然只用了几次，但是买了快一年了，坏了后换了个新的。用了洗碗机后才发现前半辈子洗的碗可能都没洗干净。</li><li><strong>小米扫拖机器人</strong>：太棒了，虽然预算有限暂时只装了二楼，但每天自动扫拖一次，二楼总是干净的。虽然角落清理不到，还会缠头发，但整体效果非常好。然而一楼只是偶尔扫一下地，对比下来简直天壤之别。</li><li><strong>小米18L零冷水热水器</strong>：主卧离热水器约30米，不开零冷水需放3分钟才出热水，开零冷水可以实现秒出热水。我这里本来水压很小，但是它自带增压功能，即使二楼所有水龙头同时打开也不影响热水供应。</li><li><strong>小米Mesh组网</strong>：只用了3个路由器500元不到就实现了全屋5G WiFi覆盖，配置简单，扩展方便，比AC+AP好用多了，并且家庭内网可是实现万兆带宽。</li><li><strong>小米新风空调</strong>：新风功能方便且省电，无论是新风还是冷风效果都很好。</li><li><strong>小米晾衣架</strong>：再也不用手动晾衣服了，速度快而且可以升很高抵着太阳晒。</li><li><strong>小米门锁+智能门铃</strong>：虽然没买人脸识别门锁，但800多块的门锁配上200块的门铃，完全解决了不带钥匙的问题。配合小米生态，门铃一响，全屋都能听到。</li></ul><h2 id="新家的感受"><a href="#新家的感受" class="headerlink" title="新家的感受"></a>新家的感受</h2><p>其实背负那么多贷款我也是很难下决心的，而且还是在房价下行的时候，但是看着一些年纪大的人在五六十岁住进大房子感觉真的没有什么意思。等子女长大了有钱了再买，不用偿还那么多利息，可是女儿的童年是很最重要的，她长大后独自生活后没准我还要把房子卖了安心去养老呢。我也不是非要住大房子，只是之前的确实太小了，家里玩具都堆不下了，房间小就会很杂乱，杂乱的房间会让家人的心态发生不好的变化。现在的房子，南北通透，从早到晚都有阳光照进来。住在顶楼，阳光格外充足。新家位于大学城，每次出门看到的都是年轻人，感觉自己也年轻了好几岁，心态也变好了。环境对人的影响确实很大，过去半年时间窝在一间30几平米的单间配套里面真的经常性地吵架。无论怎样，感觉10年内偿还大部分贷款是可行的，也希望这是一个新的开始吧。</p><p>回头看自己在17年搬进上一套房子的博客，感慨颇深呀，哈哈!<br><a href="https://haofly.net/new-home">2017年5月13日，我们搬进了新房子</a></p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;上个月，我迎来了人生中的一个重要时刻——搬进了新家。30岁，终于搬进了我们夫妻俩共同拥有的第一套房。过去的一年里，我们的生活都被各种装修、软装和选购所填满。由于担心甲醛的问题，房子还空置了几个月，终于熬到了搬家的一天。&lt;/p&gt;
&lt;h2 id=&quot;新家是跃层呀&quot;&gt;&lt;a href=&quot;#新家是跃层呀&quot; class=&quot;headerlink&quot; title=&quot;新家是跃层呀&quot;&gt;&lt;/a&gt;新家是跃层呀&lt;/h2&gt;&lt;p&gt;很多人都保证自己买房肯定不会买跃层，我也不例外。从来没想过买复式房，不过这次因为各种难以拒绝的原因最终还是选择了它。毕竟这套房子的设计还是很合理的：一楼只有客厅、厨房和一个卫生间，二楼是休息的地方，三个大阳台，三楼则是储物间。这样安排，减少了上楼拿东西的不便，天然的动静分离。另外，经历过疫情后，突然发现家里有楼梯也蛮方便的，适合拿来锻炼。感觉每天走上走下已经可以消耗很多卡路里了。&lt;/p&gt;
&lt;h2 id=&quot;老婆心心念念的衣帽间&quot;&gt;&lt;a href=&quot;#老婆心心念念的衣帽间&quot; class=&quot;headerlink&quot; title=&quot;老婆心心念念的衣帽间&quot;&gt;&lt;/a&gt;老婆心心念念的衣帽间&lt;/h2&gt;&lt;p&gt;老婆一直梦想有个衣帽间，现在她的愿望终于实现了。我们的衣帽间和我的电竞房在同一个套房里。我很喜欢这种安排，她在一旁化妆或者看书，而我在这边写代码，彼此相伴，互不干扰。&lt;/p&gt;
    
    </summary>
    
    
      <category term="life" scheme="https://haofly.net/categories/life/"/>
    
    
  </entry>
  
  <entry>
    <title>EditorConfig: 在不同编辑器中实现一致的代码风格</title>
    <link href="https://haofly.net/editorconfig/"/>
    <id>https://haofly.net/editorconfig/</id>
    <published>2024-06-05T04:02:30.000Z</published>
    <updated>2024-06-05T06:49:35.810Z</updated>
    
    <content type="html"><![CDATA[<p>与 ESLint 不同，EditorConfig 旨在为不同的编辑器、编码语言和文件类型提供统一的配置。ESLint 是专注于 JavaScript 代码质量和规范的检测工具，而 EditorConfig 则通过配置文件为各种编辑器设定一致的代码风格和格式要求。主流的编辑器，如 VSCode、Sublime Text、Atom 等，通常会默认支持 EditorConfig，并自动加载其规范，使得跨团队协作时代码风格更加统一，减少了因编辑器差异导致的代码格式问题。建议在无论代码是否使用eslint，都添加上<code>.editorconfig</code>文件</p><h2 id="通配符说明"><a href="#通配符说明" class="headerlink" title="通配符说明"></a>通配符说明</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">说明</span><br><span class="line">*匹配除/之外的任意字符串</span><br><span class="line">**匹配任意字符串</span><br><span class="line">?匹配任意单个字符</span><br><span class="line">[name]匹配 name 字符</span><br><span class="line">[!name]匹配非 name 字符</span><br><span class="line">&#123;s1,s3,s3&#125;匹配任意给定的字符串（0.11.0 起支持）</span><br></pre></td></tr></table></figure><span id="more"></span><h2 id="详细配置"><a href="#详细配置" class="headerlink" title="详细配置"></a>详细配置</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br></pre></td><td class="code"><pre><span class="line">root = true</span><br><span class="line"></span><br><span class="line">[*]</span><br><span class="line">charset = utf-8# 编码格式</span><br><span class="line">indent_style = space</span><br><span class="line">ij_javascript_use_double_quotes = false# 默认单引号</span><br><span class="line">ij_typescript_use_double_quotes = false# 默认单引号</span><br><span class="line">ij_javascript_use_semicolon_after_statement = false# 禁用末尾分号</span><br><span class="line">ij_typescript_use_semicolon_after_statement = false</span><br><span class="line">indent_size = 2</span><br><span class="line">end_of_line = lf# 定义换行符，可选lf、cr、crlf</span><br><span class="line">trim_trailing_whitespace = true# 除去换行行首的任意空白字符</span><br><span class="line">insert_final_newline = true# 在文件末尾插入空白行</span><br><span class="line">max_line_length=150# 最大行宽</span><br><span class="line"></span><br><span class="line">[*.md]</span><br><span class="line">trim_trailing_whitespace = false</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">[**.js]</span><br><span class="line">indent_size=4</span><br><span class="line">jslint_happy=false</span><br><span class="line">space_after_anon_function=false</span><br><span class="line">brace_style=collapse,preserve-inline</span><br><span class="line">keep_array_indentation=false</span><br><span class="line">keep_function_indentation=false</span><br><span class="line">space_before_conditional=true</span><br><span class="line">break_chained_methods=false</span><br><span class="line">eval_code=false</span><br><span class="line">unescape_strings=false</span><br><span class="line">wrap_line_length=0</span><br><span class="line"></span><br><span class="line">[*.&#123;yml,yaml,js,css,scss,html,vue&#125;]</span><br><span class="line">indent_size = 2</span><br><span class="line"></span><br><span class="line">[*.blade.php]</span><br><span class="line">indent_size = 2</span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;与 ESLint 不同，EditorConfig 旨在为不同的编辑器、编码语言和文件类型提供统一的配置。ESLint 是专注于 JavaScript 代码质量和规范的检测工具，而 EditorConfig 则通过配置文件为各种编辑器设定一致的代码风格和格式要求。主流的编辑器，如 VSCode、Sublime Text、Atom 等，通常会默认支持 EditorConfig，并自动加载其规范，使得跨团队协作时代码风格更加统一，减少了因编辑器差异导致的代码格式问题。建议在无论代码是否使用eslint，都添加上&lt;code&gt;.editorconfig&lt;/code&gt;文件&lt;/p&gt;
&lt;h2 id=&quot;通配符说明&quot;&gt;&lt;a href=&quot;#通配符说明&quot; class=&quot;headerlink&quot; title=&quot;通配符说明&quot;&gt;&lt;/a&gt;通配符说明&lt;/h2&gt;&lt;figure class=&quot;highlight shell&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;	说明&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;*	匹配除/之外的任意字符串&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;**	匹配任意字符串&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;?	匹配任意单个字符&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;[name]	匹配 name 字符&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;[!name]	匹配非 name 字符&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&amp;#123;s1,s3,s3&amp;#125;	匹配任意给定的字符串（0.11.0 起支持）&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
    
    </summary>
    
    
      <category term="system" scheme="https://haofly.net/categories/system/"/>
    
    
  </entry>
  
  <entry>
    <title>2023年总结以及2024年的计划</title>
    <link href="https://haofly.net/2023-to-2024/"/>
    <id>https://haofly.net/2023-to-2024/</id>
    <published>2024-01-19T14:36:00.000Z</published>
    <updated>2024-01-19T16:00:04.000Z</updated>
    
    <content type="html"><![CDATA[<p>年终总结一年比一年早，还是新历年做年终总结最好了。</p><h2 id="2023总结"><a href="#2023总结" class="headerlink" title="2023总结"></a>2023总结</h2><p>今年仍然是一大半没有完成。</p><span id="more"></span><h3 id="技术"><a href="#技术" class="headerlink" title="技术"></a>技术</h3><ul><li><input disabled="" type="checkbox"> <del>把PM的工作做好</del>  手下居然把线上数据库给删了，全程懵逼，损失太大了</li><li><input disabled="" type="checkbox"> <del>无论什么技术栈，学习怎么做优化(2022在React Native的优化上踩了很多坑)</del> 今年的项目主要是安卓这边，并且仅仅只是简单的一些优化工作，业余时间也比较少</li></ul><h3 id="理财"><a href="#理财" class="headerlink" title="理财"></a>理财</h3><ul><li><input checked="" disabled="" type="checkbox"> 维持今年的工资收入: 稳重有升</li><li><input disabled="" type="checkbox"> <del>又可以各种薅羊毛了(2022贷款没下来连白条都不敢用)</del>: 信用卡都快还不起了</li><li><input checked="" disabled="" type="checkbox"> 年底除房贷外，负债控制在20万内吧(装修就是无底洞): 天才，写总结的今天，总负债200700.61元</li><li><input disabled="" type="checkbox"> <del>副业收入全年怎么也得1000+吧😭</del></li></ul><h3 id="家庭"><a href="#家庭" class="headerlink" title="家庭"></a>家庭</h3><ul><li><input disabled="" type="checkbox"> 🎮<del>坚持健身环大冒险，至少3天一次</del>: 坚持了大半年，直到下半年搬进了30平还没有电视的租房</li><li><input disabled="" type="checkbox"> 🏃<del>瘦到130斤以下(2022未完成的目标)</del>: 也是坚持了大半年，下半年没场地</li><li><input disabled="" type="checkbox"> 👧<del>女儿的身高、体重能够达到中等线(2022未完成的目标)</del>: 生长曲线很稳定，很健康，但是仍然只是25%的身高线</li><li><input checked="" disabled="" type="checkbox"> 带女儿去更多的地方看看(仍然坚持至少每个月去一个不同的地方): 山东日照、威海、青岛旅游</li><li><input checked="" disabled="" type="checkbox"> 🏠‼️尽力把新家装修成喜欢的样子: 还算将就吧</li><li><input checked="" disabled="" type="checkbox"> 支持老婆考公: 我支持，但她不考</li></ul><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><h3 id="远程工作三年半"><a href="#远程工作三年半" class="headerlink" title="远程工作三年半"></a>远程工作三年半</h3><p>远程工作三年半了，今年公司离职了两位同事，感觉都是因为长期的远程工作导致的一些精神情绪上的问题。目前我觉得还好，毕竟即使工作有时候很枯燥，但是每天有老婆女儿陪着，还是相当幸福的。可以说让我再远程工作几年应该都没问题的。</p><p>今年在技术方面没有多少进步，还是因为今年主要的精力都在装修房子上。其次是因为今年负责了公司一个主要营收的项目，但是恰好这个项目暂时用不到太深入的技术，虽然也是我第一次深入接触Java和Android项目。当我深入接触以后，我仍然觉得Java是非常垃圾的语言。话说Java的ORM就不能简单直接点吗，简直是我见过最差的ORM。并且用Java的公司是真有钱呀，同样规格的项目，Java的服务器配置至少两倍起步。我以前一直认为之所以很多人用Java，是因为哪怕程序员技术再差，也不会写出性能很差的项目，今年我得收回这句话了。</p><p>PM方面，在年底出了一个线上事故，一个只存在于段子里面的事故，线上数据被删了。虽然不是我做的，但毕竟我算个小领导，还是影响到年终奖了。这种操作失误的事故即使我来做也不能保证绝对不会出错，但是我也确实从来没听过谁会在线上出这样的错误。事后也不能全怪同事，毕竟也算是我们流程上有很大的漏洞，也是PM没做好，没有预料到会出这样的问题，也没有做好应急预案。</p><h3 id="AI"><a href="#AI" class="headerlink" title="AI"></a>AI</h3><p>今年虽然接触AI的时间不多，但通过使用ChatGPT解决一些技术问题，我意识到AI的潜力。获取知识的速度变得非常快，有时我都懒得写技术博客了。因此，我决定在博客中少写技术，更注重技术与生活的结合。</p><h3 id="房屋装修"><a href="#房屋装修" class="headerlink" title="房屋装修"></a>房屋装修</h3><p>房子装修真的是最废时间和精力的事情。前期因为装修公司进度慢，不知道和装修公司、和老婆吵了多少的架。但是我始终不觉得是因为找了熟人的问题，找其他装修公司多半会更慢，只是确实有时候看着他们慢慢的做，特别糟心。但是自己又不可能有那么多的精力来自己找人装，虽然进度和质量可能会好一点，但是精力和金钱肯定也是省不了的。装修到后期老婆不再参与，我这边能妥协的就妥协吧，我只想早点住进去，毕竟一个月6000多的利息，毕竟现在一间三口租在30平的单间配套里面。住得太小了，感觉真的会影响家庭和谐，影响一个人的气运。从4月到11月，总共8个月，可以说今年大部分业余时间都用在了装修上，这也是今年没有技术上的提升的原因。</p><p>加上借的钱和剩下的家具家电，预计总共是60万。还好，没有超预算，并且想要的基本上都有了。电竞房、衣帽间、中央空调、地暖、智能家居，基本上在自己控制预算下满足了一些。12月底开地暖的时候感觉幸福感飙升，虽然半个月烧了500立方的天然气了。。。</p><h3 id="旅游"><a href="#旅游" class="headerlink" title="旅游"></a>旅游</h3><p>趁着疫情结束，我和女儿有了一次难忘的旅行。虽然原计划冬天还有旅行，但由于装修欠款，只能放弃。希望来年能有更多机会去探索新的地方。</p><h2 id="2024计划"><a href="#2024计划" class="headerlink" title="2024计划"></a>2024计划</h2><h3 id="技术-1"><a href="#技术-1" class="headerlink" title="技术"></a>技术</h3><ul><li><input disabled="" type="checkbox"> PM工作能有质的飞跃，需要系统地学习一下</li><li><input disabled="" type="checkbox"> AI方面能有更深入的研究</li><li><input disabled="" type="checkbox"> AI方面能找到更多的工具来提升工作效率</li></ul><h3 id="理财-1"><a href="#理财-1" class="headerlink" title="理财"></a>理财</h3><ul><li><input disabled="" type="checkbox"> 维持22年的收入，维持23年的收入恐怕是不行的</li><li><input disabled="" type="checkbox"> 尽量还清今年的欠款，主要看老婆了</li><li><input disabled="" type="checkbox"> 副业收入全年怎么也得1000+吧😭</li></ul><h3 id="家庭-1"><a href="#家庭-1" class="headerlink" title="家庭"></a>家庭</h3><ul><li><input disabled="" type="checkbox"> 🎮搬家后坚持健身环大冒险，至少3天一次</li><li><input disabled="" type="checkbox"> 搬家后每周带老婆或女儿在家里一起看一次电影</li><li><input disabled="" type="checkbox"> 🏃瘦到130斤以下(2022、2023未完成的目标)</li><li><input disabled="" type="checkbox"> 👧女儿的身高、体重能够达到中等线(2022、2023未完成的目标)</li><li><input disabled="" type="checkbox"> 带女儿去更多的地方看看(仍然坚持至少每个月去一个不同的地方)</li><li><input disabled="" type="checkbox"> 👧👧再生一个女儿</li></ul>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;年终总结一年比一年早，还是新历年做年终总结最好了。&lt;/p&gt;
&lt;h2 id=&quot;2023总结&quot;&gt;&lt;a href=&quot;#2023总结&quot; class=&quot;headerlink&quot; title=&quot;2023总结&quot;&gt;&lt;/a&gt;2023总结&lt;/h2&gt;&lt;p&gt;今年仍然是一大半没有完成。&lt;/p&gt;
    
    </summary>
    
    
    
  </entry>
  
  <entry>
    <title>重庆-山东9日游记(日照-威海-青岛)</title>
    <link href="https://haofly.net/chongqing-shandong/"/>
    <id>https://haofly.net/chongqing-shandong/</id>
    <published>2023-08-22T02:10:10.000Z</published>
    <updated>2023-10-10T06:37:18.000Z</updated>
    
    <content type="html"><![CDATA[<p>趁着上了几天夜班，今天在工作日休息，记录一下8月份去山东旅游的一些事情。</p><p>这次的旅游主要是刚加了几天的通宵夜班，又正好公司出了个旅游补贴，8月份老婆的工作也不是很忙，所以就请假出去玩儿了。本来想着出去避暑的，但是真正能避暑的地方应该是云南和川西，这两个地方其实我们可以自驾去的，所以这次打算去远一点的地方。三亚太远太贵太热，就决定去威海，正好大学室友在日照，然后只有青岛有直达重庆的飞机，所以主要就是游览了这三个地方。</p><p><img src="https://haofly.net/uploads/chongqing-shandong_01.png"></p><span id="more"></span><h2 id="行程"><a href="#行程" class="headerlink" title="行程"></a>行程</h2><p>非特种兵，但还是走了很多的地方，山东虽然没有重庆热，但紫外线太强了，并且本身玩耍的地方也都是在没有遮挡的海边。</p><h3 id="Day1-重庆-临沂，临沂下飞机直接打车去火车站，临沂-日照"><a href="#Day1-重庆-临沂，临沂下飞机直接打车去火车站，临沂-日照" class="headerlink" title="Day1: 重庆-临沂，临沂下飞机直接打车去火车站，临沂-日照"></a>Day1: 重庆-临沂，临沂下飞机直接打车去火车站，临沂-日照</h3><p>第一天应该是在海边玩儿得最久也最好玩儿的一次了，因为大学室友是本地人，直接开车把我们从火车站接到最好吃的和最好玩的地方。</p><p>没想到第一次坐飞机就看到了云层之上的彩虹</p><p><img src="https://haofly.net/uploads/chongqing-shandong_02.JPEG"></p><p>太公岛牡蛎公园</p><p><img src="https://haofly.net/uploads/chongqing-shandong_03.JPEG"></p><p><img src="https://haofly.net/uploads/chongqing-shandong_04.JPEG"></p><h3 id="Day2-日照-威海"><a href="#Day2-日照-威海" class="headerlink" title="Day2: 日照-威海"></a>Day2: 日照-威海</h3><p>第二天上午一直在下雨，本来打算下午直接去火车站的，但是快到中午的时候雨停了，就去了一个人少的景点走走，感觉这个景区有点年代了，设施看起来有点旧，啥子也很粗。另外，日照这个城市的火车站可能之前没接到过这么多游客，规划也不够，火车站简直太挤了。</p><p>日照灯塔风景区:</p><p><img src="https://haofly.net/uploads/chongqing-shandong_05.JPEG"></p><h3 id="Day3-威海"><a href="#Day3-威海" class="headerlink" title="Day3: 威海"></a>Day3: 威海</h3><p>早上起来就打车到火炬八街，然后在国际海水浴场玩儿到中午，接着租了辆电动摩托，带着老婆孩子骑行经典的威海骑行路线，简直太美太爽了。最后在韩乐坊吃了海鲜大餐</p><p>火炬八街、国际海水浴场、猫头山2号观景台、猫头山3号观景台、半月湾沙滩，韩乐坊</p><p><img src="https://haofly.net/uploads/chongqing-shandong_06.JPEG"></p><p><img src="https://haofly.net/uploads/chongqing-shandong_07.JPEG"></p><p><img src="https://haofly.net/uploads/chongqing-shandong_08.JPEG"></p><p><img src="https://haofly.net/uploads/chongqing-shandong_09.JPEG"></p><h3 id="Day4-威海-那香海"><a href="#Day4-威海-那香海" class="headerlink" title="Day4: 威海-那香海"></a>Day4: 威海-那香海</h3><p>早上不想动了，就打车去了酒店附近的几个公园，纯粹打卡。中午就打车去了那香海。晚上在那香海沙滩附近看了最美日落。</p><p>威海公园、悦海公园、那香海最美日落</p><p><img src="https://haofly.net/uploads/chongqing-shandong_10.JPEG"></p><p><img src="https://haofly.net/uploads/chongqing-shandong_11.JPEG"></p><h3 id="Day5-那香海"><a href="#Day5-那香海" class="headerlink" title="Day5: 那香海"></a>Day5: 那香海</h3><p>布鲁威斯号沉船、海边泳池，那香海。</p><p>早上租辆电动摩托去了布鲁威斯号沉船，第一次近距离观看这么大的船，并且还坐小船去喂了海鸥。</p><p><img src="https://haofly.net/uploads/chongqing-shandong_12.JPEG"></p><p><img src="https://haofly.net/uploads/chongqing-shandong_13.JPEG"></p><h3 id="Day6-那香海-青岛"><a href="#Day6-那香海-青岛" class="headerlink" title="Day6: 那香海-青岛"></a>Day6: 那香海-青岛</h3><p>临走前还带老婆去做了一次按摩，太放松了，以后出远门玩儿都要找按摩的。</p><p>青岛第三海水浴场很美，这个沙滩就是在大城市里面的沙滩了，啥子太粗了，但是灯光很美，美归美，实在排不出来抖音上面的效果。</p><p><img src="https://haofly.net/uploads/chongqing-shandong_14.JPEG"></p><h3 id="Day7-青岛-崂山仰口风景区"><a href="#Day7-青岛-崂山仰口风景区" class="headerlink" title="Day7: 青岛-崂山仰口风景区"></a>Day7: 青岛-崂山仰口风景区</h3><p>这是玩儿的最久的一次，终于下海游了一下泳，并且终于在海边看了烟花，人少沙细，有山有海。</p><p>仰口沙滩</p><p><img src="https://haofly.net/uploads/chongqing-shandong_15.JPEG"></p><h3 id="Day8-仰口-青岛机场"><a href="#Day8-仰口-青岛机场" class="headerlink" title="Day8: 仰口-青岛机场"></a>Day8: 仰口-青岛机场</h3><p>早晨起来看了最美日出，但是实在玩儿不动了，我们三睡到中午就打车回青岛，然后去机场了</p><p><img src="https://haofly.net/uploads/chongqing-shandong_16.JPEG"></p><h3 id="Day9-回重庆休息"><a href="#Day9-回重庆休息" class="headerlink" title="Day9: 回重庆休息"></a>Day9: 回重庆休息</h3><p>以后再也不坐晚上23点的飞机了，太难等了。但是以后一定要继续去机场贵宾厅，免费的食物，安静的环境，帮忙办理值机，VIP通道，体验太好了。</p><h2 id="旅游收获"><a href="#旅游收获" class="headerlink" title="旅游收获"></a>旅游收获</h2><ul><li>见了好久没见的大学室友</li><li>我和女儿的第一次坐飞机</li><li>我和女儿第一次看大海</li><li>第一次赶海</li><li>第一次离开家这么远</li><li>工作以后第一次出去玩儿这么久 </li><li>三个人9天总共花费15k</li></ul>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;趁着上了几天夜班，今天在工作日休息，记录一下8月份去山东旅游的一些事情。&lt;/p&gt;
&lt;p&gt;这次的旅游主要是刚加了几天的通宵夜班，又正好公司出了个旅游补贴，8月份老婆的工作也不是很忙，所以就请假出去玩儿了。本来想着出去避暑的，但是真正能避暑的地方应该是云南和川西，这两个地方其实我们可以自驾去的，所以这次打算去远一点的地方。三亚太远太贵太热，就决定去威海，正好大学室友在日照，然后只有青岛有直达重庆的飞机，所以主要就是游览了这三个地方。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://haofly.net/uploads/chongqing-shandong_01.png&quot;&gt;&lt;/p&gt;
    
    </summary>
    
    
    
  </entry>
  
  <entry>
    <title>重庆-贵州3日游记</title>
    <link href="https://haofly.net/chongqing-guizhou/"/>
    <id>https://haofly.net/chongqing-guizhou/</id>
    <published>2023-07-10T02:10:10.000Z</published>
    <updated>2023-10-10T06:36:18.000Z</updated>
    
    <content type="html"><![CDATA[<p>疫情后实在憋得太久了，7月的重庆也实在太热了，于是找个周末说走就走。好在我现在是在电脑上面工作，所以周四晚上就能出发。</p><h2 id="行程"><a href="#行程" class="headerlink" title="行程"></a>行程</h2><h3 id="Day1-贵阳"><a href="#Day1-贵阳" class="headerlink" title="Day1: 贵阳"></a>Day1: 贵阳</h3><p>第一天是周五我也没请假，于是我一个人在酒店，老婆带着孩子出去玩儿的。下班后我们再一起在贵阳城区逛逛。</p><p>黔灵山森林公园、贵阳的几条好吃街、甲秀楼、贵阳白宫</p><span id="more"></span><p><img src="https://haofly.net/uploads/chongqing-guizhou_01.JPEG"></p><p><img src="https://haofly.net/uploads/chongqing-guizhou_02.JPEG"></p><p><img src="https://haofly.net/uploads/chongqing-guizhou_03.JPEG"></p><p><img src="https://haofly.net/uploads/chongqing-guizhou_04.JPEG"></p><h3 id="Day2-贵阳-西江"><a href="#Day2-贵阳-西江" class="headerlink" title="Day2: 贵阳-西江"></a>Day2: 贵阳-西江</h3><p>上午去了天河谭景区，下午就去西江千户苗寨了，很远，但是很漂亮，一定一定要找个拍摄的店拍一套写真</p><p><img src="https://haofly.net/uploads/chongqing-guizhou_05.JPEG"></p><p><img src="https://haofly.net/uploads/chongqing-guizhou_06.JPEG"></p><p><img src="https://haofly.net/uploads/chongqing-guizhou_07.JPEG"></p><h3 id="Day3-西江-贵阳-重庆"><a href="#Day3-西江-贵阳-重庆" class="headerlink" title="Day3: 西江-贵阳-重庆"></a>Day3: 西江-贵阳-重庆</h3><p>从西江开车会贵阳，吃了很好吃很好吃的鸭子，但是忘了叫什么名字了，是亲戚带我们去的，下次去贵阳一定还要吃。</p><h2 id="旅游所获"><a href="#旅游所获" class="headerlink" title="旅游所获"></a>旅游所获</h2><ul><li>我们全家第一次去贵州玩儿</li><li>因为暑假很热的时候，时间也不够，黄果树瀑布没去成，下次一定要补上呀</li><li>这次是亲戚借了车给我们的，所以到了贵阳后就很方便了，但是贵阳停车不知道为什么那么贵</li><li>贵州城区的道路比较烂，但还是比重庆宽很多，高速路就很窄了，比重庆还窄，而且弯路很多</li><li>第一次带侄女儿出去旅游</li><li>两大两小三天三晚总共花费五千</li></ul>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;疫情后实在憋得太久了，7月的重庆也实在太热了，于是找个周末说走就走。好在我现在是在电脑上面工作，所以周四晚上就能出发。&lt;/p&gt;
&lt;h2 id=&quot;行程&quot;&gt;&lt;a href=&quot;#行程&quot; class=&quot;headerlink&quot; title=&quot;行程&quot;&gt;&lt;/a&gt;行程&lt;/h2&gt;&lt;h3 id=&quot;Day1-贵阳&quot;&gt;&lt;a href=&quot;#Day1-贵阳&quot; class=&quot;headerlink&quot; title=&quot;Day1: 贵阳&quot;&gt;&lt;/a&gt;Day1: 贵阳&lt;/h3&gt;&lt;p&gt;第一天是周五我也没请假，于是我一个人在酒店，老婆带着孩子出去玩儿的。下班后我们再一起在贵阳城区逛逛。&lt;/p&gt;
&lt;p&gt;黔灵山森林公园、贵阳的几条好吃街、甲秀楼、贵阳白宫&lt;/p&gt;
    
    </summary>
    
    
    
  </entry>
  
  <entry>
    <title>Oracle Cloud 使用记录</title>
    <link href="https://haofly.net/oracle/"/>
    <id>https://haofly.net/oracle/</id>
    <published>2023-06-22T03:02:30.000Z</published>
    <updated>2023-08-24T03:50:39.000Z</updated>
    
    <content type="html"><![CDATA[<h2 id="Instance"><a href="#Instance" class="headerlink" title="Instance"></a>Instance</h2><ul><li>如果停止或者重启卡住了，是无法进行强制操作的，最多要等15分钟才能恢复</li></ul><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt remove iptables-persistent -y &amp;&amp; sudo ufw disable &amp;&amp; sudo iptables -F# 关闭机器内部的防火墙</span><br></pre></td></tr></table></figure><h3 id="使用Bastion跳板机登录Instance"><a href="#使用Bastion跳板机登录Instance" class="headerlink" title="使用Bastion跳板机登录Instance"></a>使用Bastion跳板机登录Instance</h3><ul><li><p>在Instance详情页的<code>Virtual Cloud Agent</code>中打开<code>Bastion</code>，然后在<code>Bastion</code>的管理面板中创建<code>session</code>，(注意，bastion的private ip需要加入到机器的network中添加一条路由，允许22端口)，最后复制登录命令即可，例如:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh -i &lt;privateKey&gt; -o ProxyCommand=&quot;ssh -i &lt;privateKey&gt; -W %h:%p -p 22 ocid1.bastionsession.oc1.us-sanjose-1.xxxxxx@host.bastion.us-sanjose-1.oci.oraclecloud.com&quot; -p 22 ubuntu@10.0.8.89</span><br></pre></td></tr></table></figure></li><li><p>如果登录报错(<strong>sign_and_send_pubkey: no mutual signature supported</strong>)可以尝试在<code>~/.ssh/config</code>中添加配置:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">Host *</span><br><span class="line">    PubkeyAcceptedKeyTypes=+ssh-rsa</span><br><span class="line">    HostKeyAlgorithms=+ssh-rsa</span><br></pre></td></tr></table></figure></li></ul><h2 id="OCI-Oracle-Cloud-Infrasturcture"><a href="#OCI-Oracle-Cloud-Infrasturcture" class="headerlink" title="OCI(Oracle Cloud Infrasturcture)"></a>OCI(Oracle Cloud Infrasturcture)</h2><ul><li>Oracle的命令行工具</li></ul><h3 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h3><ul><li>安装非常方便，这是<a href="https://docs.oracle.com/en-us/iaas/Content/API/SDKDocs/cliinstall.htm">不同系统的安装文档</a></li><li>配置</li></ul><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">oci setup config</span><br><span class="line">Enter a location for your config [/home/ubuntu/.oci/config]:# 默认即可</span><br><span class="line">Enter a user OCID:# 这里的user OCID来自于user profile里面的OCID</span><br><span class="line">Enter a tenancy OCID: # 来自于右上角头像里面的Tenancy里面的OCID</span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">其他默认即可</span></span><br></pre></td></tr></table></figure><ul><li>上传Public Key(<code>/home/ubuntu/.oci/oci_api_key_public.pem</code>)到API Keys(<code>My Profile -&gt; API keys -&gt; Paste a public key</code>)中，上传后可能需要等几分钟才生效</li></ul><h3 id="常用命令"><a href="#常用命令" class="headerlink" title="常用命令"></a>常用命令</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">用户管理iam</span></span><br><span class="line">oci iam compartment list --all# 列出所有的compartment，可以获取到compartment id，下面很多命令都需要的</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">计算资源compute</span></span><br><span class="line">oci compute instance list --compartment-id=ocidxxxxx# 列出所有的实例</span><br><span class="line">oci compute instance get --instance-id=ocid1.xxxxx# 获取实例详情，但是这里不会返回IP，要获取IP还是得用vinc来弄</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">公网IP，public-ip</span></span><br><span class="line">oci network public-ip list --compartment-id=ocidxxxxx --scope=REGION# 列出所有的公网IP</span><br><span class="line">oci network public-ip update --public-ip-id=ocid1.publicip.xxxxxxx --private-ip-id= # 将公网IP与私有IP解绑，解绑后服务器内部kennel</span><br><span class="line">oci network public-ip update --public-ip-id=ocid1.publicip.xxxxxxx --private-ip-id=ocid1.privateip.xxxxxx # 将公网IP绑定到指定的私有IP</span><br><span class="line">oci network public-ip create --compartment-id=&#123;COMPARTMENT_ID&#125; --lifetime=RESERVED --display-name=test # 创建新的reversed ip</span><br><span class="line">oci network public-ip delete --public-ip-id=ocid1.publicip.xxxxxxx --force # 删除public ip，加了--force参数就不会询问你了</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">私网IP，private-ip来自于VNIC Details里面的Private IP Address</span></span><br><span class="line">oci network private-ip get --private-ip-id=ocid1.privateip.xxxxxxx</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">获取VNIC详情, VNIC的OCID在VPIC Details里面获取，注意不是那个FQDN</span></span><br><span class="line">oci network vnic get --vnic-id=ocid1.vnic.xxxxx</span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h2 id=&quot;Instance&quot;&gt;&lt;a href=&quot;#Instance&quot; class=&quot;headerlink&quot; title=&quot;Instance&quot;&gt;&lt;/a&gt;Instance&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;如果停止或者重启卡住了，是无法进行强制操作的，最多要等15分钟才能恢复&lt;/li&gt;
      
    
    </summary>
    
    
      <category term="system" scheme="https://haofly.net/categories/system/"/>
    
    
  </entry>
  
  <entry>
    <title>electron 手册</title>
    <link href="https://haofly.net/electron/"/>
    <id>https://haofly.net/electron/</id>
    <published>2023-04-19T11:59:00.000Z</published>
    <updated>2023-04-24T13:21:32.000Z</updated>
    
    <content type="html"><![CDATA[<ul><li>使用Nodejs编写跨平台桌面应用程序</li><li>Electron Fiddle是官方的沙盒程序</li></ul><h2 id="安装配置"><a href="#安装配置" class="headerlink" title="安装配置"></a>安装配置</h2><ul><li><p>可以使用React脚手架来初始化<a href="https://github.com/electron-react-boilerplate/electron-react-boilerplate">electron-react-boilerplate</a></p><ul><li>虽然它推荐的是Electron Store来存储状态，但是依然可以用redux或者<a href="https://haofly.net/mobx/">mobx</a>，并且持久化也可以直接用localStorage，mobx的话就是<code>mobx-persist-store</code></li></ul></li></ul>  <figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">npm run start # 运行APP</span><br><span class="line">npm run build # 编译</span><br><span class="line">ANALYZE=true npm run build# 能够直接分析build完成后包的各部分所占的体积</span><br><span class="line">npm run package# 打包app，能直接打包成zip或者dmg。可以在package.json中修改package参数，如果添加-mwl表示同时打包--mac, --win, --linux</span><br></pre></td></tr></table></figure><ul><li><p>添加依赖</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">./package.json # 非native的module，或者类型依赖@types/*</span><br><span class="line">./release/app/package.json # native modules需要安装在这里，不需要编译</span><br></pre></td></tr></table></figure></li><li><p>package.json配置</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;build&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;mac&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;identity&quot;</span><span class="punctuation">:</span> <span class="string">&quot;Apple Development: xxxx (xxx)&quot;</span><span class="comment">// 指定签名的identity，否则可能会自动选择到一个无效的identity导致应用打不开，可以用security find-identity -v查看当前所有的identity</span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure></li></ul><span id="more"></span><h2 id="进程"><a href="#进程" class="headerlink" title="进程"></a>进程</h2><ul><li>主进程 main process：启动应用后就会创建，可以i通过electron中的模块直接与原生GUI交互，在它里面调用BrowserWindow创建应用的窗口</li><li>渲染进程 renderer process：每个页面都是运行在自己的进程里面，就是渲染进程。渲染进程会在窗口中渲染出web页面，web页面是Chromium渲染的。每个渲染进程都是相互隔离的，并且只知道运行在自己进程里的页面</li><li>进程有多种通信方式：ipc模块，webContents.send(Main进程主动向Renderer进程发送消息)、remote模块</li></ul><h2 id="常用功能实现"><a href="#常用功能实现" class="headerlink" title="常用功能实现"></a>常用功能实现</h2><h5 id="使用dotenv设置环境变量"><a href="#使用dotenv设置环境变量" class="headerlink" title="使用dotenv设置环境变量"></a>使用dotenv设置环境变量</h5><p>尝试了很多方法，最终只找到下面这个方法可用</p><ol><li><p>在渲染进程<code>preload.ts</code>中创建一个方法向主进程获取环境变量</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> electronHandler = &#123;</span><br><span class="line">  ...</span><br><span class="line">  <span class="title function_">getConfig</span>(<span class="params">config?: string</span>) &#123;</span><br><span class="line">    <span class="keyword">const</span> configs = ipcRenderer.<span class="title function_">sendSync</span>(<span class="string">&#x27;get-env&#x27;</span>);</span><br><span class="line">    <span class="keyword">if</span> (config) &#123;</span><br><span class="line">      <span class="keyword">return</span> configs[config];</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> configs;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></li><li><p>在主进程中<code>main.ts</code>监听该事件</p><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">   ipcMain.on(<span class="string">&#x27;get-env&#x27;</span>, async (event) =&gt; &#123;</span><br><span class="line">     event.returnValue = &#123;</span><br><span class="line">       BACKEND_API: process.env.BACKEND_API,</span><br><span class="line">     &#125;;</span><br><span class="line">   &#125;);</span><br><span class="line"></span><br><span class="line"><span class="number">3.</span> 在webpack中(`webpack.config.base.ts`)调用`dotenv`获取环境变量</span><br><span class="line"></span><br><span class="line">   ```javascript</span><br><span class="line">   <span class="keyword">module</span>: &#123;</span><br><span class="line">     ...</span><br><span class="line">     plugins: [</span><br><span class="line">         <span class="keyword">new</span> <span class="title class_">webpack</span>.EnvironmentPlugin(&#123;</span><br><span class="line">         NODE_ENV: <span class="string">&#x27;production&#x27;</span>,</span><br><span class="line">         ...dotenv.config().parsed</span><br><span class="line">       &#125;),</span><br><span class="line">     ]</span><br><span class="line">   &#125;</span><br></pre></td></tr></table></figure></li></ol><h5 id="关闭所有窗口时退出应用-Windows-amp-Linux"><a href="#关闭所有窗口时退出应用-Windows-amp-Linux" class="headerlink" title="关闭所有窗口时退出应用 (Windows &amp; Linux)"></a><a href="https://www.electronjs.org/zh/docs/latest/tutorial/quick-start#%E5%85%B3%E9%97%AD%E6%89%80%E6%9C%89%E7%AA%97%E5%8F%A3%E6%97%B6%E9%80%80%E5%87%BA%E5%BA%94%E7%94%A8-windows--linux">关闭所有窗口时退出应用 (Windows &amp; Linux)</a></h5><h5 id="如果没有窗口打开则打开一个窗口-macOS"><a href="#如果没有窗口打开则打开一个窗口-macOS" class="headerlink" title="如果没有窗口打开则打开一个窗口 (macOS)"></a><a href="https://www.electronjs.org/zh/docs/latest/tutorial/quick-start#%E5%A6%82%E6%9E%9C%E6%B2%A1%E6%9C%89%E7%AA%97%E5%8F%A3%E6%89%93%E5%BC%80%E5%88%99%E6%89%93%E5%BC%80%E4%B8%80%E4%B8%AA%E7%AA%97%E5%8F%A3-macos">如果没有窗口打开则打开一个窗口 (macOS)</a></h5><h2 id="TroubleShooting"><a href="#TroubleShooting" class="headerlink" title="TroubleShooting"></a>TroubleShooting</h2><ul><li><strong>electron v9.4.4-darwin-arm64.zip not found</strong>: 可能原因是使用的apple m1芯片，至少需要将版本提高到<code>&quot;electron&quot;: &quot;^11.0.1&quot;</code></li></ul><h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><ul><li><a href="https://github.com/chitosai/bilimini">bilimini</a>: 哔哩哔哩小窗口客户端</li></ul>]]></content>
    
    <summary type="html">
    
      &lt;ul&gt;
&lt;li&gt;使用Nodejs编写跨平台桌面应用程序&lt;/li&gt;
&lt;li&gt;Electron Fiddle是官方的沙盒程序&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;安装配置&quot;&gt;&lt;a href=&quot;#安装配置&quot; class=&quot;headerlink&quot; title=&quot;安装配置&quot;&gt;&lt;/a&gt;安装配置&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;p&gt;可以使用React脚手架来初始化&lt;a href=&quot;https://github.com/electron-react-boilerplate/electron-react-boilerplate&quot;&gt;electron-react-boilerplate&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;虽然它推荐的是Electron Store来存储状态，但是依然可以用redux或者&lt;a href=&quot;https://haofly.net/mobx/&quot;&gt;mobx&lt;/a&gt;，并且持久化也可以直接用localStorage，mobx的话就是&lt;code&gt;mobx-persist-store&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
  &lt;figure class=&quot;highlight shell&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;npm run start 	# 运行APP&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;npm run build	 # 编译&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;ANALYZE=true npm run build	# 能够直接分析build完成后包的各部分所占的体积&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;npm run package	# 打包app，能直接打包成zip或者dmg。可以在package.json中修改package参数，如果添加-mwl表示同时打包--mac, --win, --linux&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;添加依赖&lt;/p&gt;
&lt;figure class=&quot;highlight shell&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;./package.json # 非native的module，或者类型依赖@types/*&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;./release/app/package.json # native modules需要安装在这里，不需要编译&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;package.json配置&lt;/p&gt;
&lt;figure class=&quot;highlight json&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;punctuation&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;attr&quot;&gt;&amp;quot;build&amp;quot;&lt;/span&gt;&lt;span class=&quot;punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;punctuation&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;attr&quot;&gt;&amp;quot;mac&amp;quot;&lt;/span&gt;&lt;span class=&quot;punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;punctuation&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;      &lt;span class=&quot;attr&quot;&gt;&amp;quot;identity&amp;quot;&lt;/span&gt;&lt;span class=&quot;punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&amp;quot;Apple Development: xxxx (xxx)&amp;quot;&lt;/span&gt;	&lt;span class=&quot;comment&quot;&gt;// 指定签名的identity，否则可能会自动选择到一个无效的identity导致应用打不开，可以用security find-identity -v查看当前所有的identity&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    &lt;span class=&quot;punctuation&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  &lt;span class=&quot;punctuation&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;punctuation&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/li&gt;
&lt;/ul&gt;
    
    </summary>
    
    
      <category term="js" scheme="https://haofly.net/categories/js/"/>
    
    
  </entry>
  
  <entry>
    <title>Mobx 手册</title>
    <link href="https://haofly.net/mobx/"/>
    <id>https://haofly.net/mobx/</id>
    <published>2023-03-14T04:02:30.000Z</published>
    <updated>2023-03-22T07:38:00.000Z</updated>
    
    <content type="html"><![CDATA[<ul><li>使用起来比<code>redux</code>好用多了，就凭这一点我就放弃<code>redux</code>了</li><li>redux将数据保存在单一的store中，mobx则是分散在多个store中</li><li><a href="https://github.com/7anshuai/react-mobx-typescript-realworld-example-app">react-mobx-typescript-realworld-example-app</a>: 一个很好的example项目</li></ul><h2 id="安装配置"><a href="#安装配置" class="headerlink" title="安装配置"></a>安装配置</h2><ul><li><a href="https://mobx.js.org/react-integration.html">React集成方式</a>: 注意看里面的Tips，如果不是用的<code>mobx-react-lite</code>，很多东西就不用写了，比如Provider，observable props(不需要在组件外部包裹observer了，默认store变化的时候会自动重新渲染)，并且observer自动使用的就是React.memo，不需要单独为了优化性能去useMemo</li></ul><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">npm install --save mobx</span><br><span class="line">npm install mobx-utils --save# 最好同时安装这个库，提供了更多的帮助方法，例如带参数的computedFn</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">如果实用Typescript或者https://mobx.js.org/enabling-decorators.html可以参考这个文档修改一下配置即可</span></span><br></pre></td></tr></table></figure><span id="more"></span><h2 id="状态定义"><a href="#状态定义" class="headerlink" title="状态定义"></a>状态定义</h2><ul><li>多种类型的store可以单独创建多个store，并且如果要互相调用时没问题的，mobx也支持这种嵌套调用方式</li><li><a href="https://github.com/7anshuai/react-mobx-typescript-realworld-example-app">一个项目example</a>：非常实用的一个例子，它其实是在action里面调用api的，我的实际项目通常会使用<a href="https://haofly.net/react-query">reqct-query</a>，所以我还是在外部用useQuery来调用的，然后在API里直接调用action来更新状态</li><li>可以放在<code>src/stores/xxxxStore.ts</code> 下</li></ul><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> &#123;observable, action, makeObservable&#125; <span class="keyword">from</span> <span class="string">&#x27;mobx&#x27;</span>;</span><br><span class="line"></span><br><span class="line">type <span class="title class_">User</span> = &#123;</span><br><span class="line"> <span class="attr">id</span>: string;</span><br><span class="line">  <span class="attr">token</span>: string;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">ExampleStore</span> &#123;</span><br><span class="line">  @observable id = <span class="string">&#x27;&#x27;</span>;<span class="comment">// 把字段分开感觉还好一点</span></span><br><span class="line">  @observable token = <span class="string">&#x27;&#x27;</span>;</span><br><span class="line">  </span><br><span class="line">  @observable <span class="attr">user</span>: <span class="title class_">User</span>;</span><br><span class="line">  </span><br><span class="line">  <span class="title function_">constructor</span>(<span class="params"></span>) &#123;</span><br><span class="line">    <span class="comment">// 如果state和action没有用@observable或者@action装饰，那么这里可以单独makeObservable，一般没有必要的</span></span><br><span class="line">    <span class="title function_">makeObservable</span>(<span class="variable language_">this</span>, &#123;</span><br><span class="line">      <span class="attr">token</span>: observable,</span><br><span class="line">      <span class="attr">setToken</span>: action</span><br><span class="line">    &#125;);</span><br><span class="line">    </span><br><span class="line">    <span class="comment">// 持久化推荐使用mobx-persist-store库</span></span><br><span class="line">    <span class="title function_">makePersistable</span>(<span class="variable language_">this</span>, &#123;</span><br><span class="line">      <span class="attr">name</span>: <span class="string">&#x27;UserStore&#x27;</span>,</span><br><span class="line">      <span class="attr">properties</span>: [<span class="string">&#x27;id&#x27;</span>, <span class="string">&#x27;token&#x27;</span>],</span><br><span class="line">      <span class="attr">storage</span>: <span class="variable language_">window</span>.<span class="property">localStorage</span>,</span><br><span class="line">    &#125;)</span><br><span class="line">      .<span class="title function_">then</span>(<span class="function">() =&gt;</span> &#123;&#125;)</span><br><span class="line">      .<span class="title function_">catch</span>(<span class="function">() =&gt;</span> &#123;&#125;);</span><br><span class="line">  &#125;</span><br><span class="line">  </span><br><span class="line">  @action <span class="title function_">setToken</span>(<span class="params">token: string</span>) &#123;</span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">user</span>.<span class="property">token</span> = token</span><br><span class="line">  &#125;</span><br><span class="line">  </span><br><span class="line">  @computed <span class="keyword">get</span> <span class="title function_">name</span>(): string &#123;</span><br><span class="line">    <span class="keyword">return</span> <span class="variable language_">this</span>.<span class="property">user</span>.<span class="property">firstName</span> + <span class="variable language_">this</span>.<span class="property">user</span>.<span class="property">lastName</span></span><br><span class="line">  &#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 带参数的computedFn，目前还不支持作为装饰器直接使用，所以只能这样定义，另外，它的参数是不支持默认值的</span></span><br><span class="line">  test = <span class="title function_">computedFn</span>(<span class="function">(<span class="params">param</span>) =&gt;</span> &#123;</span><br><span class="line">    <span class="keyword">return</span> ...</span><br><span class="line">  &#125;)</span><br><span class="line">&#125;</span><br><span class="line">                    </span><br><span class="line"><span class="keyword">export</span> <span class="keyword">default</span> <span class="keyword">new</span> <span class="title class_">ExampleStore</span>()</span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      &lt;ul&gt;
&lt;li&gt;使用起来比&lt;code&gt;redux&lt;/code&gt;好用多了，就凭这一点我就放弃&lt;code&gt;redux&lt;/code&gt;了&lt;/li&gt;
&lt;li&gt;redux将数据保存在单一的store中，mobx则是分散在多个store中&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/7anshuai/react-mobx-typescript-realworld-example-app&quot;&gt;react-mobx-typescript-realworld-example-app&lt;/a&gt;: 一个很好的example项目&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;安装配置&quot;&gt;&lt;a href=&quot;#安装配置&quot; class=&quot;headerlink&quot; title=&quot;安装配置&quot;&gt;&lt;/a&gt;安装配置&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://mobx.js.org/react-integration.html&quot;&gt;React集成方式&lt;/a&gt;: 注意看里面的Tips，如果不是用的&lt;code&gt;mobx-react-lite&lt;/code&gt;，很多东西就不用写了，比如Provider，observable props(不需要在组件外部包裹observer了，默认store变化的时候会自动重新渲染)，并且observer自动使用的就是React.memo，不需要单独为了优化性能去useMemo&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&quot;highlight shell&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;npm install --save mobx&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;npm install mobx-utils --save	# 最好同时安装这个库，提供了更多的帮助方法，例如带参数的computedFn&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta prompt_&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta prompt_&quot;&gt;# &lt;/span&gt;&lt;span class=&quot;language-bash&quot;&gt;如果实用Typescript或者https://mobx.js.org/enabling-decorators.html可以参考这个文档修改一下配置即可&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
    
    </summary>
    
    
      <category term="nodejs" scheme="https://haofly.net/categories/nodejs/"/>
    
    
  </entry>
  
  <entry>
    <title>2022年总结以及2023年的计划</title>
    <link href="https://haofly.net/2022-to-2023/"/>
    <id>https://haofly.net/2022-to-2023/</id>
    <published>2023-02-06T00:36:00.000Z</published>
    <updated>2023-02-20T00:44:35.000Z</updated>
    
    <content type="html"><![CDATA[<p>疫情终于结束了，希望今年全国人民各行各业都能缓过来！</p><h2 id="2022总结"><a href="#2022总结" class="headerlink" title="2022总结"></a>2022总结</h2><p>看了下2021年定的2022年的目标，本以为大多数都没能完成，没想到还是完成了许多的。</p><span id="more"></span><h3 id="技术"><a href="#技术" class="headerlink" title="技术"></a>技术</h3><ul><li><input disabled="" type="checkbox"> <del>独立开发一个自己的产品</del></li><li><input checked="" disabled="" type="checkbox"> 每个月至少一篇博客文章，最好能多写一点非文档型的文章（最后几个月作为一个项目的PM，积累了很多的技术笔记，只是没有整理成完整的文章，后续会陆续发不出来的）</li></ul><h3 id="理财"><a href="#理财" class="headerlink" title="理财"></a>理财</h3><ul><li><input checked="" disabled="" type="checkbox"> 维持今年的工资收入（意料之外的又涨工资了）</li><li><input checked="" disabled="" type="checkbox"> 可能需要换个大点的房子了，一是因为有孩子了，二是为了孩子的教育（今年大部分时间都花在了这上面，然而时间精力都花了，现在也还只是清水房，明年的主要精力就是装修了）</li></ul><h3 id="健康"><a href="#健康" class="headerlink" title="健康"></a>健康</h3><ul><li><input checked="" disabled="" type="checkbox"> 坚持健身环大冒险，不求通关，但至少一周两次吧，算下来大概100次（元旦节阳过后就一直不敢做运动，年后会重新拾起，去年大概运动了130天）</li><li><input disabled="" type="checkbox"> <del>瘦到130斤以下，胖了真的好多病</del>（疫情风控导致少了很多的户外运动时间，明年应该会好点）</li><li><input disabled="" type="checkbox"> <del>带老婆做全身体检</del>（只带了双方父母检查了身体）</li><li><input disabled="" type="checkbox"> <del>女儿的身高、体重能够达到中等线偏上</del>（太难了，幼儿园就是个病毒库，家里好好的，一去就隔三差五的感冒，每次感冒就影响食欲，反正体重几乎没怎么长，目前虽然是正常范围内，但已经是中等线偏下了）</li><li><input checked="" disabled="" type="checkbox"> 带女儿去更多的地方看看（现在2岁3个月去了32个不同的地方）</li><li><input checked="" disabled="" type="checkbox"> 多买两个体感游戏和家人一起玩儿（女儿很喜欢玩儿舞力全开，马里奥聚会也喜欢玩儿）</li></ul><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><h3 id="远程工作两年半"><a href="#远程工作两年半" class="headerlink" title="远程工作两年半"></a>远程工作两年半</h3><p>远程工作两年半了，朝九晚六不加班的日子也越来越喜欢了。公司内部评级也高了一级，当然工资股票期权啥的也都涨了一些。只是后来做PM的时候确实有时候感觉有点吃力，特别是遇到其他人都解决不了得等自己解决的时候，压力还是挺大的，所以明年还是得在技术深度上多学一些。</p><h3 id="买房卖房，回重庆的日子越来越近了"><a href="#买房卖房，回重庆的日子越来越近了" class="headerlink" title="买房卖房，回重庆的日子越来越近了"></a>买房卖房，回重庆的日子越来越近了</h3><p><strong>做人要有责任和担当，应该把钱都拿出来买房，拯救国家经济</strong></p><p>最开始只是因为老婆的工作所以来到了县城这边生活，但是真的不习惯老家的生活，这边没有关系，连个好点的幼儿园都读不到，就感觉各行各业做啥都看关系，人家根本就不看你能力，也根本不在乎做事儿的人的能力。当然大城市也有这些情况，但相对来说，大城市还是公平许多，至少我这啥关系背景都没有的人能在大城市做个打工者，努点力还能更好一点。</p><p>今年大部分的精力和时间都花在了卖房买房的事情上了，因为疫情影响，大家对房地产的信心真的是太低了，我们的房子一降再降，还好在最后一波疫情前卖出去了。卖出去了疫情就结束了，发现大家对明年房地产的预期肯定是向好的，真实日了狗了，又得赶紧去买。好在终于在农历年前把新房定了下来。贷款很多，月供超过了我上家公司的月薪了，不过好在面积还行，至少短时间内不会又想着换房子。真的，换房子的成本实在是太高了，时间、精力、金钱。这次的房子远离市中心，买在了最有书香气息的大学城，我们这条街也算是教育一条街了，沿途好多大学、高中、小学，而且是主城离老家最近的地方，除了价钱以外各方面都符合我们的预期。</p><p>2023年的最主要的事情就是装修房子了，感觉又是一件要花很多心思去考虑的事情，痛并快乐着吧。</p><h3 id="我要出去玩儿"><a href="#我要出去玩儿" class="headerlink" title="我要出去玩儿"></a>我要出去玩儿</h3><p>疫情终于结束了，老婆单位也不再要求他们不准出去旅游了，所以希望今年能多出去玩几次了。</p><h2 id="2023计划"><a href="#2023计划" class="headerlink" title="2023计划"></a>2023计划</h2><h3 id="技术-1"><a href="#技术-1" class="headerlink" title="技术"></a>技术</h3><ul><li><input disabled="" type="checkbox"> 把PM的工作做好</li><li><input disabled="" type="checkbox"> 无论什么技术栈，学习怎么做优化(2022在React Native的优化上踩了很多坑)</li></ul><h3 id="理财-1"><a href="#理财-1" class="headerlink" title="理财"></a>理财</h3><ul><li><input disabled="" type="checkbox"> 维持今年的工资收入</li><li><input disabled="" type="checkbox"> 又可以各种薅羊毛了(2022贷款没下来连白条都不敢用)</li><li><input disabled="" type="checkbox"> 年底除房贷外，负债控制在20万内吧(装修就是无底洞)</li><li><input disabled="" type="checkbox"> 副业收入全年怎么也得1000+吧😭</li></ul><h3 id="家庭"><a href="#家庭" class="headerlink" title="家庭"></a>家庭</h3><ul><li><input disabled="" type="checkbox"> 🎮坚持健身环大冒险，至少3天一次</li><li><input disabled="" type="checkbox"> 🏃瘦到130斤以下(2022未完成的目标)</li><li><input disabled="" type="checkbox"> 👧女儿的身高、体重能够达到中等线(2022未完成的目标)</li><li><input disabled="" type="checkbox"> 带女儿去更多的地方看看(仍然坚持至少每个月去一个不同的地方)</li><li><input disabled="" type="checkbox"> 🏠‼️尽力把新家装修成喜欢的样子</li><li><input disabled="" type="checkbox"> 支持老婆考公</li></ul>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;疫情终于结束了，希望今年全国人民各行各业都能缓过来！&lt;/p&gt;
&lt;h2 id=&quot;2022总结&quot;&gt;&lt;a href=&quot;#2022总结&quot; class=&quot;headerlink&quot; title=&quot;2022总结&quot;&gt;&lt;/a&gt;2022总结&lt;/h2&gt;&lt;p&gt;看了下2021年定的2022年的目标，本以为大多数都没能完成，没想到还是完成了许多的。&lt;/p&gt;
    
    </summary>
    
    
    
  </entry>
  
  <entry>
    <title>2022年 Tips</title>
    <link href="https://haofly.net/2022-tips/"/>
    <id>https://haofly.net/2022-tips/</id>
    <published>2023-01-23T23:32:00.000Z</published>
    <updated>2023-02-20T00:44:35.000Z</updated>
    
    <content type="html"><![CDATA[<p>每年的认知小结</p><h3 id="人生"><a href="#人生" class="headerlink" title="人生"></a>人生</h3><ul><li><p>结婚大事已交卷，生娃任务已完成，只要不生病，家人平安健康，慢慢赚钱，其余都是锦上添花。——网络</p></li><li><p>家总要成，钱总要挣，奔走红尘，勿忘曾经是书生——网络</p></li><li><p>做人要有责任和担当，应该把钱都拿出来买房，拯救国家经济——网络</p></li><li><p>努力的意义就是：当好运降临在自己身上时，你会觉得我配，而不是眼看着好事落在别人身上，然后愤愤地说 我呸。——网络</p></li><li><p>我上了那么多年学，熬了那么多夜，做那么多习题，顶着各种各样的压力，参加各种残酷的考试，谈恋爱，分手，工作，加班。</p><p>我这么辛苦，竟然是为了成为一个普通人——网络</p></li><li><p>礼物不重要，重要的是礼物背后的心意：我依旧被你重视，被你放在心上。最好的婚姻，不是乍见之欢，而是久处不厌。最好的夫妻，是一起享受生活的平淡，却也喜欢带给对方的惊喜和温暖。</p></li><li><p>当爱情开花结果，就是另一场冒险的开始。</p></li><li><p>和你在一起的目的很简单，生个孩子，看你小时候的样子。——老君书屋</p></li><li><p>即使老婆在自己医院产检我也要陪她去，这样好的消息可以第一时间分享，坏的消息也能第一时间承担。</p></li></ul><h3 id="生活"><a href="#生活" class="headerlink" title="生活"></a>生活</h3><ul><li>一个东西的性价比只来自于它的使用频次。——刘飞</li><li>当你每次回家，腋窝下面都夹着一些东西，比如妻子的礼物，孩子的礼物，家庭的礼物，那样的话，你会觉得回家，是一种快乐。——涂磊</li></ul>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;每年的认知小结&lt;/p&gt;
&lt;h3 id=&quot;人生&quot;&gt;&lt;a href=&quot;#人生&quot; class=&quot;headerlink&quot; title=&quot;人生&quot;&gt;&lt;/a&gt;人生&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;p&gt;结婚大事已交卷，生娃任务已完成，只要不生病，家人平安健康，慢慢赚钱，其余都是锦上添花。——网
      
    
    </summary>
    
    
      <category term="语录" scheme="https://haofly.net/categories/%E8%AF%AD%E5%BD%95/"/>
    
    
  </entry>
  
  <entry>
    <title>Xcode / iOS开发手册</title>
    <link href="https://haofly.net/xcode/"/>
    <id>https://haofly.net/xcode/</id>
    <published>2022-09-16T00:32:00.000Z</published>
    <updated>2025-05-05T15:57:00.000Z</updated>
    
    <content type="html"><![CDATA[<p><a href="https://github.com/dkhamsing/open-source-ios-apps?tab=readme-ov-file#apple-vision">open-source-ios-apps</a>: 无论开发什么类型的iOS，刚上手的时候都可以参考这里的example project</p><h2 id="Xcode常用操作"><a href="#Xcode常用操作" class="headerlink" title="Xcode常用操作"></a>Xcode常用操作</h2><h3 id="模拟器打开keyboard键盘"><a href="#模拟器打开keyboard键盘" class="headerlink" title="模拟器打开keyboard键盘"></a>模拟器打开keyboard键盘</h3><ul><li>默认是不会弹出键盘的，直接用电脑的键盘进行输入，但是有时候想要调试一下键盘弹出的效果，可以点击顶部菜单<code>I/O -&gt; Keyboard -&gt; Toggle Software Keyboard</code></li></ul><h3 id="构建hook"><a href="#构建hook" class="headerlink" title="构建hook"></a>构建hook</h3><ul><li>Pre-action和Post-actions，在顶部中间scheme中选择<code>Edit Scheme</code>，然后选择Build的<code>Pre-actions</code>，即可输入script，另外如果要获取当前的工程目录，可以使用<code>$&#123;PROJECT_DIR&#125;</code>，但是Provide build settings from需要选择当前的Target</li></ul><h3 id="IAP内购测试"><a href="#IAP内购测试" class="headerlink" title="IAP内购测试"></a>IAP内购测试</h3><ul><li>需要在App Store Connect后台添加Sandbox Test Accounts</li><li>只能在真机测试，Settings -&gt; App Store -&gt; SANDBOX ACCOUNT登陆上面创建的account</li></ul><h3 id="TestFlight测试"><a href="#TestFlight测试" class="headerlink" title="TestFlight测试"></a>TestFlight测试</h3><ul><li>点击XCode -&gt; Product -&gt; Archive创建Archive后点击Distribute App按钮，然后选择TestFlight Internal Only，然后Distibute确定</li></ul><h3 id="支持构建多个不同的APP"><a href="#支持构建多个不同的APP" class="headerlink" title="支持构建多个不同的APP"></a>支持构建多个不同的APP</h3><ul><li>例如给开发和测试环境构建不同的APP</li></ul><ol><li><p>首先在XCode中的TARGETS选择当前的TARGET，右键Duplicate</p></li><li><p>点击顶部中间的Scheme，编辑新的Scheme，可以在新的Scheme的Build Pre-action中通过脚本来自动修改环境变量</p></li><li><p>选择当前Target，在<code>Signing &amp; Capabilities</code>，修改<code>Bundle Identifier</code>，这样才能生成不同的APP</p></li><li><p>修改Info中的Bundle display name，即APP的名称</p></li><li><p>为了防止pod install的时候仅更新默认的target，其他的target的build phrases被破坏，需要在podfile里面添加配置</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">下面配置仅针对 flutter，其他的项目，可以根据当前的podfile内容，复制出多个target</span></span><br><span class="line">target &#x27;Runner&#x27; do</span><br><span class="line">  use_frameworks!</span><br><span class="line">  use_modular_headers!</span><br><span class="line"></span><br><span class="line">  flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))</span><br><span class="line">  target &#x27;RunnerTests&#x27; do</span><br><span class="line">    inherit! :search_paths</span><br><span class="line">  end</span><br><span class="line">end</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">有多个target就写多个target</span></span><br><span class="line">target &#x27;&#123;TARGET_NAME&#125;&#x27; do</span><br><span class="line">  use_frameworks!</span><br><span class="line">  use_modular_headers!</span><br><span class="line"></span><br><span class="line">  flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))</span><br><span class="line">end</span><br></pre></td></tr></table></figure></li><li><p>要运行不同的APP的时候只需要切换顶部中间的schemes即可</p></li></ol><h3 id="代码折叠功能"><a href="#代码折叠功能" class="headerlink" title="代码折叠功能"></a>代码折叠功能</h3><ul><li>这种功能居然不是默认打开的，设置方法： XCode -&gt; Settings -&gt; Text Editing -&gt; 勾选Code folding ribbon</li></ul><h3 id="格式化代码"><a href="#格式化代码" class="headerlink" title="格式化代码"></a>格式化代码</h3><ul><li>菜单 -&gt; Editor -&gt; Structure -&gt; Format</li></ul><h2 id="Apple设计资源"><a href="#Apple设计资源" class="headerlink" title="Apple设计资源"></a><a href="https://developer.apple.com/design/resources/">Apple设计资源</a></h2><h2 id="图标"><a href="#图标" class="headerlink" title="图标"></a>图标</h2><ul><li><a href="https://appicon.co/#app-icon">App Icon Generator</a>: iOS或者android各种尺寸图标一键生成，生成后直接拖到xcode即可</li></ul><p>App需要提供图标的规格为<code>40/588/60/80/87/120/160/180/1024</code>，另外，如果最好是将png图片转换为jpg，因为默认会把png不存在的地方背景设置为黑色。准备好图标素材以后，直接在<code>xcode</code>里面的<code>Images.xcassets</code>将图标拖入即可。</p><h2 id="App-上架流程"><a href="#App-上架流程" class="headerlink" title="App 上架流程"></a>App 上架流程</h2><ol><li>注册开发者账号</li><li>在<a href="https://appstoreconnect.apple.com/">App Store Connect</a>新建一个APP</li><li>从Xcode上传APP至App Store Connect<ol><li>下载P12文件(申请发布(Distribution)证书)</li><li>导入P12文件(我操作的时候是别人直接发给我的，所以这里就没记录步骤了，应该可以<a href="https://ask.dcloud.net.cn/article/152">参考这里</a>)，有一点需要注意的时候，双击P12文件安装成功后，还需要在keychain里点击其<code>private key</code>，修改<code>Access Control</code>，需要修改配置<code>Allow all applications to access this item</code>，否则下面在上传的时候会提示<code>missing private key</code>或者让你无限输入电脑用户名密码的问题</li><li>点击<code>Product-&gt;Archive</code>，完成后会自动弹出一个对话框(当然，这个对话框也可以通过<code>Window-&gt;Organizer</code>打开，要选择对应的APP)</li><li>选择<code>Distribute App</code>，然后选择<code>App Store Connect</code>，再<code>Upload</code>，一直下一步应该就可以了。(如果打包能成功，但是上传却说认证失败，可能是网络问题)</li><li> 上传完成后可以在<code>App Store Connect</code>后台的<code>TestFlight</code>看到刚才的build了，这时候可以去添加测试用户，点击左侧菜单<code>App Store Connect User</code>进行添加，添加方式见页面提示即可，很简单，添加完成后会发送邮件给用户，里面有个兑换码，在ios的testflightapp上点击redeem输入兑换码即可下载，如果下载时提示<code>the app couldn&#39;t be installed because testflight isn&#39;t available</code>，那就等大概五分钟试试</li></ol></li></ol><span id="more"></span><h2 id="App-迁移transfer"><a href="#App-迁移transfer" class="headerlink" title="App 迁移transfer"></a>App 迁移transfer</h2><ul><li>迁移的条件: <a href="https://help.apple.com/app-store-connect/#/devaf27784ff%EF%BC%8C%E7%89%B9%E5%88%AB%E6%B3%A8%E6%84%8F%E5%BF%85%E9%A1%BB%E4%B8%8A%E6%9E%B6%E8%BF%87%E4%B8%80%E4%B8%AA%E7%89%88%E6%9C%AC%E6%89%8D%E8%83%BD%E5%A4%9F%E7%9B%B4%E6%8E%A5transfer">https://help.apple.com/app-store-connect/#/devaf27784ff，特别注意必须上架过一个版本才能够直接transfer</a></li><li>迁移APP的时候bundle id能一并迁移过去，还是方便</li></ul><h2 id="删除APP"><a href="#删除APP" class="headerlink" title="删除APP"></a>删除APP</h2><ul><li>如果删除为提交过的app，那么它仍然会出现在列表中，非常烦，只能等半年后她自己清理了</li></ul><h2 id="Cocoapods-pod"><a href="#Cocoapods-pod" class="headerlink" title="Cocoapods/pod"></a>Cocoapods/pod</h2><ul><li><p>升级pod</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">pod --version# 查看pod版本</span><br><span class="line">sudo gem install cocoapods# 升级版本</span><br><span class="line"><span class="meta prompt_"></span></span><br><span class="line"><span class="meta prompt_"># </span><span class="language-bash">清理并重新安装以来</span></span><br><span class="line">rm -rf ~/Library/Caches/CocoaPods; </span><br><span class="line">rm -rf Pods; </span><br><span class="line">rm -rf ~/Library/Developer/Xcode/DerivedData/*; </span><br><span class="line">pod deintegrate; </span><br><span class="line">pod setup; </span><br><span class="line">pod install;</span><br></pre></td></tr></table></figure></li></ul><h2 id="Vision-APP开发"><a href="#Vision-APP开发" class="headerlink" title="Vision APP开发"></a>Vision APP开发</h2><ul><li><a href="https://github.com/tomkrikorian/awesome-visionOS?tab=readme-ov-file#swiftui">awesome-visionOS</a></li><li><a href="https://gnikoloff.github.io/visionos-web-app-icon-maker/">visionOS App Icon Web Preview</a>: 在线制作和预览vision app的图标</li></ul><h4 id="打开预览功能"><a href="#打开预览功能" class="headerlink" title="打开预览功能"></a>打开预览功能</h4><ul><li>Editor -&gt; Canvas选中即可</li></ul><h4 id="组件"><a href="#组件" class="headerlink" title="组件"></a>组件</h4><h5 id="通用属性"><a href="#通用属性" class="headerlink" title="通用属性"></a>通用属性</h5><figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">.hoverEffect()<span class="comment">// 自动响应hover效果</span></span><br><span class="line">.hoverEffectDisabled() <span class="comment">// 禁止响应hover效果</span></span><br><span class="line">.contentShape(<span class="type">RoundedRectangle</span>(cornerSize: <span class="type">CGSizeMake</span>(<span class="number">20</span>, <span class="number">20</span>))).hoverEffect() <span class="comment">// hover效果默认没有圆角，可以这样设置hover的圆角，但是一定要在hoverEffect前面设置</span></span><br></pre></td></tr></table></figure><h5 id="VStack、HStack、ZStack"><a href="#VStack、HStack、ZStack" class="headerlink" title="VStack、HStack、ZStack"></a>VStack、HStack、ZStack</h5><ul><li>V代表垂直，H代表从左到右，Z代表从背景到前景</li></ul><h5 id="TabView"><a href="#TabView" class="headerlink" title="TabView"></a>TabView</h5><ul><li>就是左侧的tab切换组件，默认是图标，鼠标hover的时候会显示文字</li><li><a href="https://www.rudrank.com/exploring-visionos-tabview/">https://www.rudrank.com/exploring-visionos-tabview/</a></li></ul><h2 id="TroubleShooting"><a href="#TroubleShooting" class="headerlink" title="TroubleShooting"></a>TroubleShooting</h2><ul><li><p>**Signing for “xxx” requires a development team. Select a development team in the project editor.**解决方法: 点击项目名-&gt;targets-&gt;General-&gt;Signing，选择自己的Team，选择后重新构建，如果仍然出现该错误，那么可以重启一下xcode或者更新一下xcode多次尝试。</p></li><li><p>**打包archive的时候签名报错XXX is automatically signed for development, but a conflicting code signing identity iPhone Distribution has been manually specified. Set the code signing identity value to “Apple Development” in the build settings editor, or switch to manual signing in the Signing &amp; Capabilities editor.**：需要去<code>PROJECT -&gt; BUILD SETTINGS -&gt; COMBINED</code>中的<code>Signing-&gt;Code Signing Identity</code>的值从<code>iOS Developer</code>修改为<code>Apple Development</code>，还有<code>TARGETS -&gt; Build Settings -&gt; Combined</code>中的<code>Signing-&gt;Code Signing Identity-&gt;Release</code>的值从<code>iOS Developer</code>修改为Apple <code>Development</code></p></li><li><p><strong>上传archive最后提示Missing private key</strong></p></li><li><p><strong>Run on device突然报错Errors were encountered while preparing your device for development. Please check the Devices and Simulators Window.</strong>: 重启手机试试吧</p></li><li><p><strong>“XXXX” has 2 Apple Distribution certificates but their private keys are not installed. Contact the creator of one of these certificates to get a copy of the private key</strong>: 可能是key过期了，去apple developer重新生成一个证书吧，下载下来安装上，但是得重启一下<code>xcode</code></p></li><li><p><strong>push app 到appstore一直在processing</strong>: 这个时候确实可以再push一个新版本，可能会更快</p></li><li><p><strong>ios模拟弱网环境</strong>: 设置-&gt;开发者选项-&gt; Network LINK CONDITIONER</p></li><li><p><strong>set the code signing identity value to apple development in the build settings editor</strong>: 在<code>TARGETS -&gt; Build Settings -&gt; All</code>中搜索<code>signing</code> 即可，修改对应的值为<code>apple development</code>即可</p></li><li><p><strong>sandbox账户无法登录，提示要进入设置收验证码</strong>: 无论怎样我都收不到验证码， 最后重新建了一个sandbox账户就可以了，sandbox在点击登录按钮登录的时候按理说是不用验证码的，直接就可以登录了。当然，必须得退出本机自身的apple id才行</p></li><li><p><strong>Sandbox沙盒账户在app store中输入密码登陆后无响应，无法登陆</strong>: 尝试在Settings -&gt; App Store中的SANDBOX ACCOUNT中进行登陆</p></li><li><p><strong>添加了测试设备后，Xcode依然无法安装</strong>: 可能是因为Xcode没有及时更新云端的<code>Provisioning Profile</code>可以删除目录<code>~/Library/MobileDevice/Provisioning</code>，然后打包时候勾选<code>Automatically manage signing</code>，Xcode就会重新拉取了</p></li><li><p><strong>python: No such file or directory</strong>: 尝试执行</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta prompt_"># </span><span class="language-bash">安装python</span></span><br><span class="line">brew install pyenv</span><br><span class="line">pyenv install 2.7.18</span><br><span class="line"></span><br><span class="line">ln -s /opt/local/bin/python2.7 /usr/local/bin/python</span><br><span class="line">ln -s /opt/local/bin/python2.7 /usr/local/bin/python2</span><br></pre></td></tr></table></figure></li><li><p><strong>Flutter failed to write to a file at …</strong>: 搜索<code>ENABLE_USER_SCRIPT_SANDBOXING</code>配置，将其设置为disabled</p></li><li><p><strong>NSURLConnection SSL error</strong>: 通常只需要在<code>Info.plist</code>中添加</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">&lt;key&gt;NSAppTransportSecurity&lt;/key&gt;</span><br><span class="line">&lt;dict&gt;</span><br><span class="line">&lt;key&gt;NSAllowsArbitraryLoads&lt;/key&gt;</span><br><span class="line">&lt;true/&gt;</span><br><span class="line">&lt;/dict&gt;</span><br></pre></td></tr></table></figure></li></ul><h2 id="扩展阅读"><a href="#扩展阅读" class="headerlink" title="扩展阅读"></a>扩展阅读</h2><ul><li><a href="https://ask.dcloud.net.cn/article/152">iOS证书(.p12)和描述文件(.mobileprovision)申请</a>：关于证书申请的非常详细的一篇文章</li></ul>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;&lt;a href=&quot;https://github.com/dkhamsing/open-source-ios-apps?tab=readme-ov-file#apple-vision&quot;&gt;open-source-ios-apps&lt;/a&gt;: 无论开发什么类型的iOS，刚上手的时候都可以参考这里的example project&lt;/p&gt;
&lt;h2 id=&quot;Xcode常用操作&quot;&gt;&lt;a href=&quot;#Xcode常用操作&quot; class=&quot;headerlink&quot; title=&quot;Xcode常用操作&quot;&gt;&lt;/a&gt;Xcode常用操作&lt;/h2&gt;&lt;h3 id=&quot;模拟器打开keyboard键盘&quot;&gt;&lt;a href=&quot;#模拟器打开keyboard键盘&quot; class=&quot;headerlink&quot; title=&quot;模拟器打开keyboard键盘&quot;&gt;&lt;/a&gt;模拟器打开keyboard键盘&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;默认是不会弹出键盘的，直接用电脑的键盘进行输入，但是有时候想要调试一下键盘弹出的效果，可以点击顶部菜单&lt;code&gt;I/O -&amp;gt; Keyboard -&amp;gt; Toggle Software Keyboard&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;构建hook&quot;&gt;&lt;a href=&quot;#构建hook&quot; class=&quot;headerlink&quot; title=&quot;构建hook&quot;&gt;&lt;/a&gt;构建hook&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Pre-action和Post-actions，在顶部中间scheme中选择&lt;code&gt;Edit Scheme&lt;/code&gt;，然后选择Build的&lt;code&gt;Pre-actions&lt;/code&gt;，即可输入script，另外如果要获取当前的工程目录，可以使用&lt;code&gt;$&amp;#123;PROJECT_DIR&amp;#125;&lt;/code&gt;，但是Provide build settings from需要选择当前的Target&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;IAP内购测试&quot;&gt;&lt;a href=&quot;#IAP内购测试&quot; class=&quot;headerlink&quot; title=&quot;IAP内购测试&quot;&gt;&lt;/a&gt;IAP内购测试&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;需要在App Store Connect后台添加Sandbox Test Accounts&lt;/li&gt;
&lt;li&gt;只能在真机测试，Settings -&amp;gt; App Store -&amp;gt; SANDBOX ACCOUNT登陆上面创建的account&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;TestFlight测试&quot;&gt;&lt;a href=&quot;#TestFlight测试&quot; class=&quot;headerlink&quot; title=&quot;TestFlight测试&quot;&gt;&lt;/a&gt;TestFlight测试&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;点击XCode -&amp;gt; Product -&amp;gt; Archive创建Archive后点击Distribute App按钮，然后选择TestFlight Internal Only，然后Distibute确定&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;支持构建多个不同的APP&quot;&gt;&lt;a href=&quot;#支持构建多个不同的APP&quot; class=&quot;headerlink&quot; title=&quot;支持构建多个不同的APP&quot;&gt;&lt;/a&gt;支持构建多个不同的APP&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;例如给开发和测试环境构建不同的APP&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;首先在XCode中的TARGETS选择当前的TARGET，右键Duplicate&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;点击顶部中间的Scheme，编辑新的Scheme，可以在新的Scheme的Build Pre-action中通过脚本来自动修改环境变量&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;选择当前Target，在&lt;code&gt;Signing &amp;amp; Capabilities&lt;/code&gt;，修改&lt;code&gt;Bundle Identifier&lt;/code&gt;，这样才能生成不同的APP&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;修改Info中的Bundle display name，即APP的名称&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;为了防止pod install的时候仅更新默认的target，其他的target的build phrases被破坏，需要在podfile里面添加配置&lt;/p&gt;
&lt;figure class=&quot;highlight shell&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta prompt_&quot;&gt;# &lt;/span&gt;&lt;span class=&quot;language-bash&quot;&gt;下面配置仅针对 flutter，其他的项目，可以根据当前的podfile内容，复制出多个target&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;target &amp;#x27;Runner&amp;#x27; do&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  use_frameworks!&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  use_modular_headers!&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  target &amp;#x27;RunnerTests&amp;#x27; do&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    inherit! :search_paths&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  end&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;end&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta prompt_&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;meta prompt_&quot;&gt;# &lt;/span&gt;&lt;span class=&quot;language-bash&quot;&gt;有多个target就写多个target&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;target &amp;#x27;&amp;#123;TARGET_NAME&amp;#125;&amp;#x27; do&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  use_frameworks!&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  use_modular_headers!&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;end&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;要运行不同的APP的时候只需要切换顶部中间的schemes即可&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;代码折叠功能&quot;&gt;&lt;a href=&quot;#代码折叠功能&quot; class=&quot;headerlink&quot; title=&quot;代码折叠功能&quot;&gt;&lt;/a&gt;代码折叠功能&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;这种功能居然不是默认打开的，设置方法： XCode -&amp;gt; Settings -&amp;gt; Text Editing -&amp;gt; 勾选Code folding ribbon&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;格式化代码&quot;&gt;&lt;a href=&quot;#格式化代码&quot; class=&quot;headerlink&quot; title=&quot;格式化代码&quot;&gt;&lt;/a&gt;格式化代码&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;菜单 -&amp;gt; Editor -&amp;gt; Structure -&amp;gt; Format&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;Apple设计资源&quot;&gt;&lt;a href=&quot;#Apple设计资源&quot; class=&quot;headerlink&quot; title=&quot;Apple设计资源&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://developer.apple.com/design/resources/&quot;&gt;Apple设计资源&lt;/a&gt;&lt;/h2&gt;&lt;h2 id=&quot;图标&quot;&gt;&lt;a href=&quot;#图标&quot; class=&quot;headerlink&quot; title=&quot;图标&quot;&gt;&lt;/a&gt;图标&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://appicon.co/#app-icon&quot;&gt;App Icon Generator&lt;/a&gt;: iOS或者android各种尺寸图标一键生成，生成后直接拖到xcode即可&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;App需要提供图标的规格为&lt;code&gt;40/588/60/80/87/120/160/180/1024&lt;/code&gt;，另外，如果最好是将png图片转换为jpg，因为默认会把png不存在的地方背景设置为黑色。准备好图标素材以后，直接在&lt;code&gt;xcode&lt;/code&gt;里面的&lt;code&gt;Images.xcassets&lt;/code&gt;将图标拖入即可。&lt;/p&gt;
&lt;h2 id=&quot;App-上架流程&quot;&gt;&lt;a href=&quot;#App-上架流程&quot; class=&quot;headerlink&quot; title=&quot;App 上架流程&quot;&gt;&lt;/a&gt;App 上架流程&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;注册开发者账号&lt;/li&gt;
&lt;li&gt;在&lt;a href=&quot;https://appstoreconnect.apple.com/&quot;&gt;App Store Connect&lt;/a&gt;新建一个APP&lt;/li&gt;
&lt;li&gt;从Xcode上传APP至App Store Connect&lt;ol&gt;
&lt;li&gt;下载P12文件(申请发布(Distribution)证书)&lt;/li&gt;
&lt;li&gt;导入P12文件(我操作的时候是别人直接发给我的，所以这里就没记录步骤了，应该可以&lt;a href=&quot;https://ask.dcloud.net.cn/article/152&quot;&gt;参考这里&lt;/a&gt;)，有一点需要注意的时候，双击P12文件安装成功后，还需要在keychain里点击其&lt;code&gt;private key&lt;/code&gt;，修改&lt;code&gt;Access Control&lt;/code&gt;，需要修改配置&lt;code&gt;Allow all applications to access this item&lt;/code&gt;，否则下面在上传的时候会提示&lt;code&gt;missing private key&lt;/code&gt;或者让你无限输入电脑用户名密码的问题&lt;/li&gt;
&lt;li&gt;点击&lt;code&gt;Product-&amp;gt;Archive&lt;/code&gt;，完成后会自动弹出一个对话框(当然，这个对话框也可以通过&lt;code&gt;Window-&amp;gt;Organizer&lt;/code&gt;打开，要选择对应的APP)&lt;/li&gt;
&lt;li&gt;选择&lt;code&gt;Distribute App&lt;/code&gt;，然后选择&lt;code&gt;App Store Connect&lt;/code&gt;，再&lt;code&gt;Upload&lt;/code&gt;，一直下一步应该就可以了。(如果打包能成功，但是上传却说认证失败，可能是网络问题)&lt;/li&gt;
&lt;li&gt; 上传完成后可以在&lt;code&gt;App Store Connect&lt;/code&gt;后台的&lt;code&gt;TestFlight&lt;/code&gt;看到刚才的build了，这时候可以去添加测试用户，点击左侧菜单&lt;code&gt;App Store Connect User&lt;/code&gt;进行添加，添加方式见页面提示即可，很简单，添加完成后会发送邮件给用户，里面有个兑换码，在ios的testflightapp上点击redeem输入兑换码即可下载，如果下载时提示&lt;code&gt;the app couldn&amp;#39;t be installed because testflight isn&amp;#39;t available&lt;/code&gt;，那就等大概五分钟试试&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
    
    </summary>
    
    
      <category term="Mac" scheme="https://haofly.net/categories/Mac/"/>
    
    
  </entry>
  
</feed>
