{"@attributes":{"version":"2.0"},"channel":{"title":"Yousa Driven Development | YDD","link":"https:\/\/yousali.com\/","description":"Recent content on Yousa Driven Development | YDD","generator":"Hugo -- 0.148.1","language":"zh","lastBuildDate":"Sun, 05 Apr 2026 01:51:48 +0800","item":[{"title":"\u4e00\u6587\u8bfb\u61c2 Harness Engineering\uff1a\u4ece 14 \u7bc7\u5de5\u7a0b\u6587\u7ae0\u4e2d\uff0c\u5bfb\u627e\u90a3\u4e2a\u8ba9 AI \u4e0d\u518d\u79bb\u7ecf\u53db\u9053\u7684\u58f3","link":"https:\/\/yousali.com\/posts\/20260405-harness-engineering-guide\/","pubDate":"Sun, 05 Apr 2026 12:00:00 +0800","guid":"https:\/\/yousali.com\/posts\/20260405-harness-engineering-guide\/","description":"\u4ece Anthropic\u3001OpenAI\u3001Cursor \u4e09\u5bb6\u5934\u90e8\u516c\u53f8\u7684 14 \u7bc7\u5de5\u7a0b\u6587\u7ae0\u51fa\u53d1\uff0c\u62c6\u89e3 Harness Engineering \u7684\u4e09\u5c42\u67b6\u6784\uff1a\u6d41\u7a0b\u7ba1\u63a7\u3001\u5e76\u53d1\u8c03\u5ea6\u3001\u9a8c\u8bc1\u5bf9\u6297\uff0c\u4ee5\u53ca\u6a21\u578b\u8fdb\u6b65\u540e\u7684\u51cf\u6cd5\u903b\u8f91\u3002"},{"title":"\u4f60\u4e0d\u662f\u5728\u9009\u8d5b\u9053\uff0c\u4f60\u662f\u5728\u9009\u6807\u7b7e","link":"https:\/\/yousali.com\/posts\/20260325-choosing-labels-not-tracks\/","pubDate":"Wed, 25 Mar 2026 12:00:00 +0800","guid":"https:\/\/yousali.com\/posts\/20260325-choosing-labels-not-tracks\/","description":"To B \u8fd8\u662f To C\uff1f\u8fd9\u4e2a\u95ee\u9898\u672c\u8eab\u5c31\u95ee\u9519\u4e86\u3002\u6807\u7b7e\u662f\u6c9f\u901a\u5de5\u5177\uff0c\u4e0d\u8be5\u66ff\u4f60\u505a\u51b3\u7b56\u3002"},{"title":"\u4e3a\u4ec0\u4e48\u4f60\u8bfb\u4e86100\u672c\u4e66\uff0c\u751f\u6d3b\u5374\u6ca1\u4ec0\u4e48\u53d8\u5316\uff1f","link":"https:\/\/yousali.com\/posts\/20260307-closed-loop-thinking\/","pubDate":"Sat, 07 Mar 2026 12:00:00 +0800","guid":"https:\/\/yousali.com\/posts\/20260307-closed-loop-thinking\/","description":"\u5927\u591a\u6570\u4eba\u7684\u52aa\u529b\u53ea\u6709\u8f93\u5165\u6ca1\u6709\u8f93\u51fa\uff0c\u7f3a\u5c11\u53cd\u9988\u95ed\u73af\u3002\u95ed\u73af\u4e0d\u662f\u628a\u4e8b\u505a\u5b8c\uff0c\u662f\u8ba9\u5224\u65ad\u53d8\u51c6\u3002\u5148\u6267\u884c\uff0c\u518d\u89c2\u6d4b\uff0c\u7528\u7ed3\u679c\u6821\u51c6\u4e0b\u4e00\u6b21\u5224\u65ad\u3002"},{"title":"\u4e3a\u4ec0\u4e48 AI \u5199\u4ee3\u7801\u66f4\u5feb\u4f46\u4ea4\u4ed8\u6ca1\u53d8\uff0c\u4ee5\u53ca\u6211\u600e\u4e48\u628a\u5b83\u6273\u56de\u6765\u7684","link":"https:\/\/yousali.com\/posts\/20260303-ai-coding-efficiency-to-evolution\/","pubDate":"Tue, 03 Mar 2026 12:00:00 +0800","guid":"https:\/\/yousali.com\/posts\/20260303-ai-coding-efficiency-to-evolution\/","description":"METR \u5b9e\u9a8c\u663e\u793a AI \u8f85\u52a9\u7f16\u7801\u5ba2\u89c2\u6162 19% \u4f46\u4e3b\u89c2\u89c9\u5f97\u5feb 20%\u3002\u672c\u6587\u4ece\u7ea6\u675f\u7406\u8bba\u3001Spec\/Rule\/Skill \u67b6\u6784\u3001\u9a8c\u8bc1\u95ed\u73af\u3001\u5e76\u53d1\u7b56\u7565\u56db\u4e2a\u7ef4\u5ea6\u62c6\u89e3\u6548\u7387\u6096\u8bba\uff0c\u8bba\u8bc1 AI Coding \u7684\u771f\u6b63\u7ea2\u5229\u4e0d\u5728\u52a0\u901f\uff0c\u800c\u5728\u80fd\u529b\u8fdb\u5316\u3002"},{"title":"AI Coding \u878d\u5165\u540e\u53f0\u7814\u53d1\u5168\u94fe\u8def\uff1a\u73b0\u72b6\u3001\u8fb9\u754c\u4e0e\u8ba8\u8bba\u6846\u67b6","link":"https:\/\/yousali.com\/posts\/20260228-ai-coding-sdlc-status-discussion\/","pubDate":"Sat, 28 Feb 2026 12:00:00 +0800","guid":"https:\/\/yousali.com\/posts\/20260228-ai-coding-sdlc-status-discussion\/","description":"\u57fa\u4e8e 10 \u4efd\u884c\u4e1a\u62a5\u544a\u7684\u4ea4\u53c9\u5206\u6790\uff0c\u68b3\u7406 AI Coding \u5728 SDLC \u5404\u9636\u6bb5\u7684\u771f\u5b9e\u73b0\u72b6\u3001\u5c40\u9650\u4e0e\u98ce\u9669\uff0c\u4e3a\u56e2\u961f\u8111\u66b4\u63d0\u4f9b\u6570\u636e\u9a71\u52a8\u7684\u8ba8\u8bba\u6846\u67b6\u3002"},{"title":"\u591a\u6e90\u62a5\u544a\u7ed3\u6784\u5316\u5206\u6790 SOP","link":"https:\/\/yousali.com\/posts\/20260227-multi-source-report-structured-analysis-sop\/","pubDate":"Fri, 27 Feb 2026 10:00:00 +0800","guid":"https:\/\/yousali.com\/posts\/20260227-multi-source-report-structured-analysis-sop\/","description":"\u4e00\u5957\u53ef\u590d\u7528\u7684\u65b9\u6cd5\u8bba\uff0c\u7528\u4e8e\u4ece N \u4efd\u5f02\u8d28\u6765\u6e90\u62a5\u544a\u4e2d\u7cfb\u7edf\u6027\u63d0\u53d6\u3001\u5206\u6790\u3001\u5bf9\u6bd4\u67d0\u4e00\u7ef4\u5ea6\u4fe1\u606f\uff0c\u5e76\u4ea7\u51fa\u7ed3\u6784\u5316\u4ea4\u53c9\u5206\u6790\u6587\u6863\u3002"},{"title":"\u770110\u79d2\uff0c\u8d54\u4e00\u4e2a\u65e9\u4e0a","link":"https:\/\/yousali.com\/posts\/20260221-save-10-seconds\/","pubDate":"Sat, 21 Feb 2026 02:00:00 +0800","guid":"https:\/\/yousali.com\/posts\/20260221-save-10-seconds\/","description":"\u4e00\u6b21\u5012\u706b\u9505\u6cb9\u5835\u585e\u6c34\u69fd\u7684\u7ecf\u5386\uff0c\u8ba9\u6211\u91cd\u65b0\u601d\u8003\u4e86&#39;\u7c97\u5fc3&#39;\u4e0e&#39;\u8ba4\u77e5\u76f2\u533a&#39;\u7684\u533a\u522b\uff0c\u4ee5\u53ca\u4e3a\u4ec0\u4e48&#39;\u4e0b\u6b21\u6ce8\u610f&#39;\u4ece\u6765\u4e0d\u7ba1\u7528\u3002"},{"title":"\u4e0d\u8981\u8ba9 AI \u6279\u6539\u81ea\u5df1\u7684\u8bd5\u5377 \u2014\u2014 \u4e00\u6b21 16 \u5904\u9057\u6f0f\u7684\u534f\u4f5c\u590d\u76d8","link":"https:\/\/yousali.com\/posts\/20260218-ai-collaboration-acceptance-blindspots\/","pubDate":"Wed, 18 Feb 2026 13:12:00 +0800","guid":"https:\/\/yousali.com\/posts\/20260218-ai-collaboration-acceptance-blindspots\/","description":"169 \u4e2a\u6d4b\u8bd5\u5168\u8fc7\uff0c\u529f\u80fd\u5374\u5b8c\u5168\u5931\u6548\u3002\u672c\u6587\u89e3\u5256\u4e00\u4e2a\u771f\u5b9e\u4efb\u52a1\u7684\u56db\u5c42\u9a8c\u6536\u6f0f\u6597\uff0c\u63ed\u793a\u591a\u5c42\u67b6\u6784\u4e2d\u6a2a\u5411\u4f20\u64ad\u9057\u6f0f\u7684\u672c\u8d28\u95ee\u9898\u2014\u2014\u4ee5\u53ca\u4e0d\u540c Prompt \u7b56\u7565\u5982\u4f55\u51b3\u5b9a\u9a8c\u6536\u6548\u7387\u3002"},{"title":"\u4ece\u4e00\u4e2a WebSocket \u5230\u56db\u4e2a\u7ec4\u4ef6\uff1a\u591a\u7aef\u64cd\u63a7 AI Coding CLI \u7684\u67b6\u6784\u6f14\u5316","link":"https:\/\/yousali.com\/posts\/20260217-websocket-to-four-components\/","pubDate":"Tue, 17 Feb 2026 09:50:00 +0800","guid":"https:\/\/yousali.com\/posts\/20260217-websocket-to-four-components\/","description":"\u4ece\u6700\u7b80\u65b9\u6848\u5f00\u59cb\uff0c\u6bcf\u9047\u5230\u4e00\u4e2a\u7ed5\u4e0d\u8fc7\u53bb\u7684\u7ea6\u675f\u5c31\u52a0\u4e00\u4e2a\u7ec4\u4ef6\u3002\u56db\u5c42\u65b9\u6848\u9010\u5c42\u6dd8\u6c70\uff0c\u6700\u7ec8\u53d1\u73b0\u56db\u7ec4\u4ef6\u662f\u4e94\u4e2a\u786c\u7ea6\u675f\u9010\u5c42\u53e0\u52a0\u7684\u5fc5\u7136\u7ed3\u679c\u3002"},{"title":"\u7528 300 \u884c Swift \u8ba9 iPhone \u53d8\u6210 Kimi CLI \u63a7\u5236\u53f0","link":"https:\/\/yousali.com\/posts\/20260216-swift-kimi-cli-console\/","pubDate":"Mon, 16 Feb 2026 01:20:00 +0800","guid":"https:\/\/yousali.com\/posts\/20260216-swift-kimi-cli-console\/","description":"\u7528\u7ea6 300 \u884c Swift \u4ee3\u7801\uff0c\u96f6\u7b2c\u4e09\u65b9\u4f9d\u8d56\uff0c\u628a iPhone \u53d8\u6210\u529f\u80fd\u5b8c\u5907\u7684 Kimi CLI \u63a7\u5236\u53f0\u3002\u8be6\u89e3 Web UI \u67b6\u6784\u3001Wire \u534f\u8bae\u548c iOS \u5c01\u88c5\u5b9e\u73b0\u3002"},{"title":"\u9009\u5de5\u4f5c\uff0c\u4f60\u5728\u770b\u670b\u53cb\u5708\u8fd8\u662f\u4f53\u68c0\u62a5\u544a\uff1f","link":"https:\/\/yousali.com\/posts\/20260214-choose-leader-signal-vs-system\/","pubDate":"Sat, 14 Feb 2026 12:30:00 +0800","guid":"https:\/\/yousali.com\/posts\/20260214-choose-leader-signal-vs-system\/","description":"\u300c\u8ddf\u5bf9\u4eba\u300d\u6ca1\u6709\u9519\uff0c\u4f46\u300c\u5bf9\u7684\u4eba\u300d\u4e0d\u662f\u4e00\u773c\u770b\u4e0a\u53bb\u8ba9\u4f60\u5174\u594b\u7684\u4eba\uff0c\u800c\u662f\u7ecf\u5f97\u8d77\u53bb\u5149\u73af\u5316\u68c0\u9a8c\u7684\u4eba"},{"title":"\u4e3a\u4ec0\u4e48\u6709\u4e9b\u4eba\u8d8a\u5fd9\u8d8a\u7a77\uff0c\u6709\u4e9b\u4eba\u8d8a\u95f2\u8d8a\u5bcc","link":"https:\/\/yousali.com\/posts\/20260214-busy-poor-vs-leveraged-wealth\/","pubDate":"Sat, 14 Feb 2026 00:30:00 +0800","guid":"https:\/\/yousali.com\/posts\/20260214-busy-poor-vs-leveraged-wealth\/","description":"\u4ece\u5b66\u4e60\u5230\u5de5\u4f5c\uff0c\u4ece\u6253\u5de5\u5230\u521b\u4e1a\uff0c\u56db\u4e2a\u6545\u4e8b\u63ed\u793a\u4e00\u4e2a\u53cd\u76f4\u89c9\u7684\u771f\u76f8\uff1a\u5fd9\u788c\u4e0d\u7b49\u4e8e\u9ad8\u4ea7\u51fa\u3002\u7ebf\u6027\u52aa\u529b\u6709\u5929\u82b1\u677f\uff0c\u6760\u6746\u5316\u52aa\u529b\u624d\u6709\u6307\u6570\u589e\u957f\u7684\u53ef\u80fd\u3002"},{"title":"\u5f53\u6d4f\u89c8\u5668\u81ea\u52a8\u5316\u9047\u4e0a\u5e73\u53f0\u98ce\u63a7\uff1a\u4e00\u6b21\u5c0f\u7ea2\u4e66\u53d1\u5e03\u5de5\u5177\u7684\u53cd\u68c0\u6d4b\u5b9e\u6218","link":"https:\/\/yousali.com\/posts\/20260213-browser-automation-anti-detection\/","pubDate":"Fri, 13 Feb 2026 10:00:00 +0800","guid":"https:\/\/yousali.com\/posts\/20260213-browser-automation-anti-detection\/","description":"\u56fd\u5185\u5185\u5bb9\u5e73\u53f0\u6ca1\u6709\u5f00\u653eAPI\uff0c\u6d4f\u89c8\u5668\u81ea\u52a8\u5316\u662f\u552f\u4e00\u51fa\u8def\u3002\u4f46\u5e73\u53f0\u98ce\u63a7\u4f1a\u68c0\u6d4b\u81ea\u52a8\u5316\u75d5\u8ff9\u3002\u672c\u6587\u8bb0\u5f55\u4e86\u4e00\u6b21\u5b8c\u6574\u7684\u53cd\u68c0\u6d4b\u5b9e\u6218\uff1a\u4ece Playwright \u88ab\u5c01\u5230 Patchright + CDP \u6a21\u5f0f\u7684\u8c03\u8bd5\u5168\u8fc7\u7a0b\uff0c\u8e29\u8fc7 7 \u4e2a\u5177\u4f53\u7684\u5751\uff0c\u63d0\u70bc\u51fa\u53ef\u590d\u7528\u7684\u539f\u5219\u3002"},{"title":"\u8ffd\u8d76\u8005\u56f0\u5883","link":"https:\/\/yousali.com\/posts\/20260113-the-chaser-dilemma\/","pubDate":"Tue, 13 Jan 2026 15:14:51 +0800","guid":"https:\/\/yousali.com\/posts\/20260113-the-chaser-dilemma\/","description":"\u4ece\u5927\u6a21\u578b\u964d\u4ef7\u4e0e\u4e91\u8ba1\u7b97\u8ffd\u8d76\u6848\u4f8b\u51fa\u53d1\uff0c\u8ba8\u8bba\u8ffd\u8d76\u8005\u4f18\u52bf\u5982\u4f55\u8f6c\u5316\u4e3a\u4ef7\u683c\u6218\uff0c\u4ee5\u53ca\u9886\u5148\u8005\u901a\u8fc7\u751f\u6001\u4e0e\u7528\u6237\u4e60\u60ef\u5f62\u6210\u7684\u7ed3\u6784\u6027\u58c1\u5792\u3002"},{"title":"\u50cf\u73a9\u6e38\u620f\u90a3\u6837\u73a9 AI","link":"https:\/\/yousali.com\/posts\/20251229-how-to-use-ai-like-game\/","pubDate":"Mon, 29 Dec 2025 13:36:11 +0800","guid":"https:\/\/yousali.com\/posts\/20251229-how-to-use-ai-like-game\/","description":"\u4f60\u5bf9\u6296\u97f3\u6ca1\u6709\u5b66\u4e60\u610f\u613f\uff0c\u4f46\u80fd\u5237\u4e09\u5c0f\u65f6\uff1b\u4f60\u5bf9 AI \u5145\u6ee1\u5b66\u4e60\u610f\u613f\uff0c\u4f46\u7528\u4e0d\u4e86\u5341\u5206\u949f\u3002\u533a\u522b\u4e0d\u5728\u610f\u5fd7\u529b\uff0c\u800c\u5728\u4e8e\u8c01\u8bbe\u8ba1\u4e86\u90a3\u4e2a\u8ba9\u4f60\u505c\u4e0d\u4e0b\u6765\u7684\u5faa\u73af\u3002"},{"title":"\u6211\uff0c\u4e00\u4e2a\u91cd\u5ea6\u6781\u5ba2\u7528\u6237\uff0c\u4e3a\u4ec0\u4e48\u89c9\u5f97\u8fd9\u4ee3 AI \u773c\u955c\u4e0d\u9002\u5408\u6211","link":"https:\/\/yousali.com\/posts\/why-current-ai-glasses-fail-the-geek-test\/","pubDate":"Thu, 11 Dec 2025 01:14:15 +0800","guid":"https:\/\/yousali.com\/posts\/why-current-ai-glasses-fail-the-geek-test\/","description":"\u7528\u300a\u8de8\u8d8a\u9e3f\u6c9f\u300b\u7684\u6846\u67b6\uff0c\u7cfb\u7edf\u6027\u62c6\u89e3\u4e3a\u4ec0\u4e48\u8fd9\u4e00\u4ee3 AI \u773c\u955c\u2014\u2014\u4ee5\u5938\u514b AI \u773c\u955c\u4e3a\u4ee3\u8868\u2014\u2014\u8fd8\u6ca1\u6709\u771f\u6b63\u8de8\u8fc7\u4ece\u65e9\u671f\u7528\u6237\u5230\u4e3b\u6d41\u5e02\u573a\u7684\u90a3\u6761\u9e3f\u6c9f\u3002"},{"title":"\u4ece\u300c\u5199\u4ee3\u7801\u300d\u5230\u300c\u9a8c\u4ee3\u7801\u300d\uff1aAI \u642d\u6863\u5199\u8d70 3 \u5e74\uff0c\u6211\u8e29\u51fa\u6765\u7684\u534f\u4f5c\u8def\u7ebf\u56fe","link":"https:\/\/yousali.com\/posts\/20251124-how-to-coding-with-ai\/","pubDate":"Mon, 24 Nov 2025 12:29:36 +0800","guid":"https:\/\/yousali.com\/posts\/20251124-how-to-coding-with-ai\/","description":"<h2 id=\"\u5f53-30-\u4ee3\u7801\u90fd\u7531-ai-\u5199\u51fa\u6765\u6211\u4eec\u8be5\u628a\u65f6\u95f4\u82b1\u5728\u54ea\">\u5f53 30% \u4ee3\u7801\u90fd\u7531 AI \u5199\u51fa\u6765\uff0c\u6211\u4eec\u8be5\u628a\u65f6\u95f4\u82b1\u5728\u54ea\uff1f<\/h2>\n<blockquote>\n<p><em>\u4ece\u300c\u5199\u4ee3\u7801\u300d\u5230\u300c\u9a8c\u4ee3\u7801\u300d\u7684\u4e09\u5e74\u5b9e\u6218\u7b14\u8bb0<\/em><\/p><\/blockquote>\n<p>2022 \u5e74\uff0c\u6211\u7b2c\u4e00\u6b21\u5728\u751f\u4ea7\u9879\u76ee\u91cc\u7528\u4e0a VS Code \u7684 Copilot\uff0c\u7528\u5b83\u6765\u5199\u4e00\u4e2a\u518d\u666e\u901a\u4e0d\u8fc7\u7684\u540e\u7aef\u63a5\u53e3\uff1a\u767b\u5f55\u3001\u6821\u9a8c\u3001\u6253\u70b9\u65e5\u5fd7\u3002<\/p>"},{"title":"Claude Code \u8fd8\u662f Codex\uff1f\u8d35\u4f46\u5f3a vs \u4fbf\u5b9c\u4f46\u7a33","link":"https:\/\/yousali.com\/posts\/20251016-claudecode-vs-codex\/","pubDate":"Thu, 16 Oct 2025 13:34:27 +0800","guid":"https:\/\/yousali.com\/posts\/20251016-claudecode-vs-codex\/","description":"Claude Code \u6bcf\u6b21\u4efb\u52a1\u82b1 $10\uff0cCodex \u53ea\u8981 $2.5\u2014\u2014\u4f46\u8d354\u500d\u80fd\u6362\u6765\u4ec0\u4e48\uff1f\u57fa\u4e8e\u540c\u4e00\u4ed3\u5e93\u7684\u7aef\u5230\u7aef\u5b9e\u6d4b\uff1a14\u7ef4\u5ea6\u5bf9\u6bd4\u300110\u9879\u57fa\u51c6\u6d4b\u8bd5\u3001\u771f\u5b9e\u9879\u76ee\u6210\u672c\u62c6\u89e3\uff0c\u770b\u6e05\u6bcf\u4e00\u5206\u94b1\u82b1\u5728\u54ea\u3002"},{"title":"\u4e3a\u4ec0\u4e48\u6240\u6709\u4ea7\u54c1\u6700\u540e\u90fd\u8981\u957f\u51fa\u793e\u4ea4\uff1f","link":"https:\/\/yousali.com\/posts\/20251010-product-im\/","pubDate":"Fri, 10 Oct 2025 13:47:40 +0800","guid":"https:\/\/yousali.com\/posts\/20251010-product-im\/","description":"\u4ece 2013 \u5e74\u5230 2025 \u5e74\uff0c\u6211\u67e5\u4e86\u4e00\u5708\u5386\u53f2\uff0c\u8bd5\u7740\u641e\u6e05\u695a\u9648\u5195\u4e3a\u4ec0\u4e48\u8bf4\u300c\u6700\u5927\u7684 ToC \u5e94\u7528\u662f\u793e\u4ea4\u300d\u3002\u5de5\u5177\u89e3\u51b3\u95ee\u9898\uff0c\u5185\u5bb9\u586b\u8865\u65f6\u95f4\uff0c\u53ea\u6709\u793e\u4ea4\u80fd\u56de\u7b54&#39;\u6211\u662f\u8c01&#39;\u3002"},{"title":"AI\u7ecf\u6d4e\u5b66\u672f\u8bed\u901f\u67e5\u624b\u518c","link":"https:\/\/yousali.com\/posts\/20251006-ai-economy-keyword-list\/","pubDate":"Mon, 06 Oct 2025 17:40:39 +0800","guid":"https:\/\/yousali.com\/posts\/20251006-ai-economy-keyword-list\/","description":"\u6574\u7406\u4e86AI+\u7ecf\u6d4e\u5b66\/\u8ba1\u91cf+\u4e1a\u52a1\u5b9e\u8df5\u4e2d\u7684\u9ad8\u9891\u672f\u8bed\uff0c\u6db5\u76d6\u6838\u5fc3\u6982\u5ff5\u3001\u5546\u4e1a\u8d22\u52a1\u3001AI\u6280\u672f\u548c\u7814\u7a76\u65b9\u6cd5\u56db\u5927\u5206\u7c7b\uff0c\u5171116\u4e2a\u4e13\u4e1a\u672f\u8bed\u8be6\u89e3"},{"title":"GenAI \u5de5\u5177\u9009\u8d2d\u548c\u51b3\u7b56\u6307\u5357","link":"https:\/\/yousali.com\/posts\/20251003-how-to-jump-genai-gap\/","pubDate":"Fri, 03 Oct 2025 17:58:36 +0800","guid":"https:\/\/yousali.com\/posts\/20251003-how-to-jump-genai-gap\/","description":"\u57fa\u4e8e MIT\/McKinsey\/IDC\/Snowflake \u56db\u4efd\u62a5\u544a\u7684 GenAI \u5de5\u5177\u9009\u8d2d\u51b3\u7b56\u6846\u67b6\u3002\u6df1\u5ea6\u5206\u6790 Buy vs Build \u7684 ROI \u5bf9\u6bd4\uff0c\u63d0\u4f9b CTO\u3001\u7814\u53d1\u8d1f\u8d23\u4eba\u3001\u91c7\u8d2d\u8005\u7684\u5b9e\u8df5\u6e05\u5355\u3002\u89e3\u8bfb 95% \u5931\u8d25\u6848\u4f8b vs 5% \u6210\u529f\u7ecf\u9a8c\u7684\u5173\u952e\u5dee\u5f02\u3002"},{"title":"OpenAI\u7814\u7a76\u63ed\u79d8\uff1a7\u4ebf\u7528\u6237\u5982\u4f55\u4f7f\u7528ChatGPT","link":"https:\/\/yousali.com\/posts\/20250918-openai-how-people-use-chatgpt\/","pubDate":"Thu, 18 Sep 2025 00:53:37 +0800","guid":"https:\/\/yousali.com\/posts\/20250918-openai-how-people-use-chatgpt\/","description":"OpenAI\u6700\u65b0\u7814\u7a76\u8bba\u6587\u6df1\u5ea6\u89e3\u6790\uff1a\u57fa\u4e8e150\u4e07\u6b21\u5bf9\u8bdd\u5206\u6790\uff0c\u63ed\u793a\u5168\u74037\u4ebfChatGPT\u7528\u6237\u7684\u771f\u5b9e\u4f7f\u7528\u6a21\u5f0f\u548c\u884c\u4e3a\u7279\u5f81"},{"title":"\u6211\u90a3\u5957\u6df7\u4e71\u7684\u6392\u5e8f\u7b97\u6cd5\uff1a\u4ece\u5fd9\u788c\u7126\u8651\u5230\u6ce8\u610f\u529b\u6295\u8d44","link":"https:\/\/yousali.com\/posts\/20250913-energy-management\/","pubDate":"Sat, 13 Sep 2025 21:06:22 +0800","guid":"https:\/\/yousali.com\/posts\/20250913-energy-management\/","description":"\u5f53\u65e5\u7a0b\u8868\u8d8a\u6ee1\u7126\u8651\u611f\u8d8a\u5f3a\u65f6\uff0c\u95ee\u9898\u7684\u6839\u6e90\u4e0d\u662f\u65f6\u95f4\u7ba1\u7406\u6280\u5de7\uff0c\u800c\u662f\u5185\u5fc3\u90a3\u5957\u5c06\u7d27\u6025\u6027\u7b49\u540c\u4e8e\u91cd\u8981\u6027\u3001\u5c06\u65b0\u5947\u611f\u7b49\u540c\u4e8e\u4ef7\u503c\u7684\u6df7\u4e71\u6392\u5e8f\u7b97\u6cd5\u3002"},{"title":"\u4ece\u526f\u9a7e\u9a76\u5230\u67b6\u6784\u5e08\uff1a\u6211\u7684AI\u7f16\u7a0b\u534f\u4f5c\u65b9\u6cd5\u8bba","link":"https:\/\/yousali.com\/posts\/20250830-claude-code-workshop\/","pubDate":"Sat, 30 Aug 2025 15:30:00 +0800","guid":"https:\/\/yousali.com\/posts\/20250830-claude-code-workshop\/","description":"\u5206\u4eab\u6211\u4ece\u4f7f\u7528GPT\u5230Claude Code\u7684AI\u7f16\u7a0b\u5b9e\u8df5\u5386\u7a0b\uff0c\u4ee5\u53ca\u603b\u7ed3\u51fa\u7684\u7ed3\u6784\u5316\u534f\u4f5c\u65b9\u6cd5\u8bba\u3002\u5305\u62ec\u56db\u8981\u7d20Prompt\u6846\u67b6\u3001\u56db\u9636\u6bb5\u534f\u4f5c\u6d41\u7a0b\u3001\u56db\u8c61\u9650\u51b3\u7b56\u6a21\u578b\u7b49\u4e2a\u4eba\u539f\u521b\u548c\u5b9e\u8df5\u603b\u7ed3\u3002"},{"title":"\u62c6\u89e3 ChatGPT\u201c\u5b66\u4e60\u6a21\u5f0f\u201dPrompt\uff1a\u5b83\u4e3a\u4ec0\u4e48\u5982\u6b64\u795e\u5947\uff1f","link":"https:\/\/yousali.com\/posts\/20250805-study-mode-prompt\/","pubDate":"Tue, 05 Aug 2025 10:00:00 +0800","guid":"https:\/\/yousali.com\/posts\/20250805-study-mode-prompt\/","description":"\u6df1\u5ea6\u62c6\u89e3ChatGPT\u5b66\u4e60\u6a21\u5f0f\u7684\u7cfb\u7edf\u63d0\u793a\u8bcd\uff0c\u63ed\u79d8\u5b83\u5982\u4f55\u5c06\u8ba4\u77e5\u79d1\u5b66\u539f\u7406\u8f6c\u5316\u4e3a\u53ef\u6267\u884c\u7684AI\u6307\u4ee4\uff0c\u5e76\u52a8\u624b\u91cd\u6784\u4e00\u4e2a\u5c5e\u4e8e\u81ea\u5df1\u7684\u5b66\u4e60\u6559\u7ec3Prompt\u3002"},{"title":"\u738b\u8005","link":"https:\/\/yousali.com\/posts\/20250727-game-art-game-pua\/","pubDate":"Sun, 27 Jul 2025 00:17:01 +0800","guid":"https:\/\/yousali.com\/posts\/20250727-game-art-game-pua\/","description":"\u4ece\u4e00\u4e2a\u738b\u8005\u5370\u8bb0\u5f00\u59cb\u7684\u601d\u8003\uff1a\u6e38\u620f\u516c\u53f8\u8981\u7684\u4e0d\u662f\u4f60\u7684\u94b1\uff0c\u800c\u662f\u4f60\u7684\u65f6\u95f4"},{"title":"30\u5206\u949f\u89e3\u51b3Claude\u5c01\u53f7\u95ee\u9898\uff1a\u7a0b\u5e8f\u5458\u7684\u7ec8\u6781\u81ea\u6551\u6307\u5357","link":"https:\/\/yousali.com\/posts\/20250715-how-to-pick-and-build-the-vps-svc\/","pubDate":"Fri, 25 Jul 2025 15:15:25 +0800","guid":"https:\/\/yousali.com\/posts\/20250715-how-to-pick-and-build-the-vps-svc\/","description":"\u8be6\u7ec6\u4ecb\u7ecd\u5982\u4f55\u901a\u8fc7\u81ea\u5efaVPS\u89e3\u51b3Claude\u5c01\u53f7\u95ee\u9898\uff0c\u5305\u542b\u5b8c\u6574\u7684\u670d\u52a1\u5668\u642d\u5efa\u3001\u5ba2\u6237\u7aef\u914d\u7f6e\u548c\u5f00\u53d1\u5de5\u5177\u8bbe\u7f6e\u6b65\u9aa4\uff0c\u8ba9\u4f60\u7a33\u5b9a\u4f7f\u7528Claude Code\u7b49AI\u5f00\u53d1\u5de5\u5177"},{"title":"\u4e0e AI \u5171\u4e8b\uff0c\u6216\uff0c\u601d\u8003\u7684\u653e\u5927\u5668","link":"https:\/\/yousali.com\/posts\/20250719--ai-\/","pubDate":"Sat, 19 Jul 2025 17:24:45 +0800","guid":"https:\/\/yousali.com\/posts\/20250719--ai-\/","description":"AI\u7684\u771f\u6b63\u4ef7\u503c\u4e0d\u5728\u4e8e\u5b83\u80fd\u72ec\u7acb\u601d\u8003\uff0c\u800c\u5728\u4e8e\u5b83\u80fd\u653e\u5927\u548c\u52a0\u901f\u6211\u4eec\u7684\u601d\u8003\u3002\u8fd9\u7bc7\u6587\u7ae0\u901a\u8fc7\u4e00\u4e2a\u5199\u63a8\u8350\u8bed\u7684\u5b9e\u4f8b\uff0c\u63a2\u8ba8\u4e86\u5982\u4f55\u6b63\u786e\u5730\u4e0eAI\u534f\u4f5c\uff0c\u4ee5\u53ca\u601d\u8003\u8d28\u91cf\u5728AI\u65f6\u4ee3\u7684\u91cd\u8981\u6027\u3002"},{"title":"\u89e3\u51b3Cursor AI\u7f16\u7a0b\u52a9\u624b\u300c\u5730\u533a\u4e0d\u53ef\u7528\u300d\u9519\u8bef\uff1a\u5b8c\u6574\u7684VPN\u4ee3\u7406\u914d\u7f6e\u6307\u5357","link":"https:\/\/yousali.com\/posts\/20250717-fix-cursor-unavailable-region\/","pubDate":"Thu, 17 Jul 2025 12:16:22 +0800","guid":"https:\/\/yousali.com\/posts\/20250717-fix-cursor-unavailable-region\/","description":"Cursor AI\u7f16\u7a0b\u52a9\u624b\u663e\u793a\u300cModel not available\u300d\u6216\u300c\u5730\u533a\u4e0d\u53ef\u7528\u300d\uff1f\u672c\u6587\u63d0\u4f9b\u8be6\u7ec6\u7684\u4ee3\u7406\u914d\u7f6e\u89e3\u51b3\u65b9\u6848\uff0c\u5305\u62ecClash\u3001V2Ray\u7b49\u5de5\u5177\u7684\u5177\u4f53\u8bbe\u7f6e\u6b65\u9aa4\uff0c\u8ba9\u4f60\u91cd\u65b0\u4f7f\u7528AI\u7f16\u7a0b\u529f\u80fd\u3002"},{"title":"\u5f53 nil \u4e0d\u7b49\u4e8e nil\uff1f\u6df1\u5ea6\u5256\u6790 Go \u7684 typed nil \u5927\u5751","link":"https:\/\/yousali.com\/posts\/20250515-go-typed-nil\/","pubDate":"Thu, 15 May 2025 17:39:47 +0800","guid":"https:\/\/yousali.com\/posts\/20250515-go-typed-nil\/","description":"<h2 id=\"0-\u4e00\u4e2a\u80fd\u6084\u6084\u5751\u4f60\u7684\u771f\u5b9e\u793a\u4f8bserror-\u7684\u6545\u4e8b\">0. \u4e00\u4e2a\u80fd\u201c\u6084\u6084\u5751\u4f60\u201d\u7684\u771f\u5b9e\u793a\u4f8b\uff1a<code>SError<\/code> \u7684\u6545\u4e8b<\/h2>\n<p>\u5148\u770b\u4f60\u63d0\u5230\u7684\u8fd9\u6bb5\u4ee3\u7801\uff0c\u8868\u9762\u4e0a\u770b\u975e\u5e38\u6b63\u5e38\uff0c\u751a\u81f3\u5f88\u591a\u4eba\u7b2c\u4e00\u773c\u4e0d\u4f1a\u89c9\u5f97\u54ea\u91cc\u6709\u95ee\u9898\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-0-1\"><a class=\"lnlinks\" href=\"#hl-0-1\"> 1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-2\"><a class=\"lnlinks\" href=\"#hl-0-2\"> 2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-3\"><a class=\"lnlinks\" href=\"#hl-0-3\"> 3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-4\"><a class=\"lnlinks\" href=\"#hl-0-4\"> 4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-5\"><a class=\"lnlinks\" href=\"#hl-0-5\"> 5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-6\"><a class=\"lnlinks\" href=\"#hl-0-6\"> 6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-7\"><a class=\"lnlinks\" href=\"#hl-0-7\"> 7<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-8\"><a class=\"lnlinks\" href=\"#hl-0-8\"> 8<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-9\"><a class=\"lnlinks\" href=\"#hl-0-9\"> 9<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-10\"><a class=\"lnlinks\" href=\"#hl-0-10\">10<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-11\"><a class=\"lnlinks\" href=\"#hl-0-11\">11<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-12\"><a class=\"lnlinks\" href=\"#hl-0-12\">12<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-13\"><a class=\"lnlinks\" href=\"#hl-0-13\">13<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-14\"><a class=\"lnlinks\" href=\"#hl-0-14\">14<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-15\"><a class=\"lnlinks\" href=\"#hl-0-15\">15<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-16\"><a class=\"lnlinks\" href=\"#hl-0-16\">16<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-17\"><a class=\"lnlinks\" href=\"#hl-0-17\">17<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-18\"><a class=\"lnlinks\" href=\"#hl-0-18\">18<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-19\"><a class=\"lnlinks\" href=\"#hl-0-19\">19<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-20\"><a class=\"lnlinks\" href=\"#hl-0-20\">20<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-21\"><a class=\"lnlinks\" href=\"#hl-0-21\">21<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-22\"><a class=\"lnlinks\" href=\"#hl-0-22\">22<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-23\"><a class=\"lnlinks\" href=\"#hl-0-23\">23<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-24\"><a class=\"lnlinks\" href=\"#hl-0-24\">24<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-25\"><a class=\"lnlinks\" href=\"#hl-0-25\">25<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-26\"><a class=\"lnlinks\" href=\"#hl-0-26\">26<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-27\"><a class=\"lnlinks\" href=\"#hl-0-27\">27<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-28\"><a class=\"lnlinks\" href=\"#hl-0-28\">28<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-29\"><a class=\"lnlinks\" href=\"#hl-0-29\">29<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-30\"><a class=\"lnlinks\" href=\"#hl-0-30\">30<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-31\"><a class=\"lnlinks\" href=\"#hl-0-31\">31<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-32\"><a class=\"lnlinks\" href=\"#hl-0-32\">32<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-33\"><a class=\"lnlinks\" href=\"#hl-0-33\">33<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-34\"><a class=\"lnlinks\" href=\"#hl-0-34\">34<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kn\">package<\/span> <span class=\"nx\">main<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"p\">(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s\">&#34;log&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"s\">&#34;sync&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">type<\/span> <span class=\"nx\">SError<\/span> <span class=\"kd\">struct<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">cause<\/span> <span class=\"kt\">error<\/span> <span class=\"c1\">\/\/ Wrapped error which is the root cause.<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">text<\/span> <span class=\"kt\">string<\/span> <span class=\"c1\">\/\/ Error text, which is created by New* functions.<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">i18nText<\/span> <span class=\"kt\">string<\/span> <span class=\"c1\">\/\/ \u672c\u5730\u9519\u8bef\u6587\u5b57\uff0c\u7528\u4e8e\u5ba2\u6237\u7aef\u663e\u5f0f\u4e2d\u6587<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">ignored<\/span> <span class=\"kt\">bool<\/span> <span class=\"c1\">\/\/ \u80fd\u5426\u5ffd\u7565\u8be5\u9519\u8bef<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">info<\/span> <span class=\"kd\">map<\/span><span class=\"p\">[<\/span><span class=\"kt\">string<\/span><span class=\"p\">]<\/span><span class=\"kt\">string<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">infoMutex<\/span> <span class=\"nx\">sync<\/span><span class=\"p\">.<\/span><span class=\"nx\">RWMutex<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"p\">(<\/span><span class=\"nx\">e<\/span> <span class=\"o\">*<\/span><span class=\"nx\">SError<\/span><span class=\"p\">)<\/span> <span class=\"nf\">Error<\/span><span class=\"p\">()<\/span> <span class=\"kt\">string<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"nx\">e<\/span><span class=\"p\">.<\/span><span class=\"nx\">text<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ demoRetSerr \u8fd4\u56de (int32, *SError)\u3002\u770b\u4e0a\u53bb\uff0c\u5982\u679c\u4e0d\u60f3\u8fd4\u56de\u4efb\u4f55\u9519\u8bef\uff0c\u5c31\u76f4\u63a5\u8fd4\u56de (0, nil)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">demoRetSerr<\/span><span class=\"p\">()<\/span> <span class=\"p\">(<\/span><span class=\"kt\">int32<\/span><span class=\"p\">,<\/span> <span class=\"o\">*<\/span><span class=\"nx\">SError<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"kc\">nil<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">main<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"kd\">var<\/span> <span class=\"nx\">err<\/span> <span class=\"kt\">error<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"c1\">\/\/ \u8fd9\u91cc\u628a\u7b2c\u4e8c\u4e2a\u8fd4\u56de\u503c\u7684 *SError \u8d4b\u7ed9\u4e86 interface{} \u7c7b\u578b\u7684 err<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">_<\/span><span class=\"p\">,<\/span> <span class=\"nx\">err<\/span> <span class=\"p\">=<\/span> <span class=\"nf\">demoRetSerr<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"k\">if<\/span> <span class=\"nx\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"kc\">nil<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"nx\">log<\/span><span class=\"p\">.<\/span><span class=\"nf\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;err != nil. err: %v&#34;<\/span><span class=\"p\">,<\/span> <span class=\"nx\">err<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"01-\u4e4d\u770b\u4e4b\u4e0b\u54ea\u91cc\u4f1a\u6709\u95ee\u9898\">0.1 \u4e4d\u770b\u4e4b\u4e0b\u54ea\u91cc\u4f1a\u6709\u95ee\u9898\uff1f<\/h3>\n<ul>\n<li>\u6211\u4eec <code>demoRetSerr<\/code> \u51fd\u6570\u76f4\u63a5\u8fd4\u56de <code>(0, nil)<\/code>\uff0c\u800c\u51fd\u6570\u7b7e\u540d\u7684\u7b2c\u4e8c\u4e2a\u53c2\u6570\u7c7b\u578b\u662f <code>*SError<\/code>\u3002<\/li>\n<li>\u56de\u5230 <code>main<\/code> \u51fd\u6570\u4e2d\uff0c<code>err<\/code> \u662f\u4e00\u4e2a <code>error<\/code> \u63a5\u53e3\uff0c\u627f\u63a5\u4e86\u90a3\u4e2a <code>nil<\/code> \u6307\u9488\u3002<\/li>\n<li>\u5982\u679c\u201ctyped nil\u201d \u73b0\u8c61\u51fa\u73b0\uff0c\u90a3\u4e48 <code>err != nil<\/code> \u8fd9\u4e2a\u5224\u65ad\u5c31\u4f1a\u83ab\u540d\u5176\u5999\u5730\u901a\u8fc7\uff0c\u4ece\u800c\u5728\u65e5\u5fd7\u91cc\u6253\u5370\u51fa\u201cerr != nil. err: &lt;nil&gt;\u201d\u3002\u6709\u65f6\u66f4\u53ef\u6015\u7684\u662f\uff0c<strong>\u5b9e\u9645\u903b\u8f91\u4f1a\u88ab\u8bef\u5224<\/strong>\uff0c\u53ef\u80fd\u6267\u884c\u672c\u4e0d\u8be5\u6267\u884c\u7684\u9519\u8bef\u5904\u7406\u5206\u652f\u3002<\/li>\n<\/ul>\n<p>\u5728\u67d0\u4e9b Go \u7248\u672c\u6216\u7279\u5b9a\u7f16\u8bd1\u5668\u4f18\u5316\u4e0b\uff0c\u4f60\u53ef\u80fd\u53d1\u73b0\u63a7\u5236\u53f0\u5c31\u8f93\u51fa <code>err != nil. err: &lt;nil&gt;<\/code>\uff0c\u8ba9\u4eba\u201c\u4e00\u5934\u96fe\u6c34\u201d\u3002\u8fd9\u5c31\u662f\u4e00\u4e2a\u5341\u5206\u5178\u578b\u3001\u5374\u5f88\u9690\u853d\u7684 <strong>typed nil<\/strong> \u573a\u666f\u3002\u5373\u4f7f\u4f60\u5199 <code>return nil<\/code>\uff0c\u5bf9\u7f16\u8bd1\u5668\u6765\u8bf4\uff1a<\/p>"},{"title":"\u7545\u4eab ChatGPT Plus\uff1a\u65e0\u9700\u989d\u5916\u652f\u4ed8\u624b\u6bb5\uff0c\u7a81\u7834 OpenAI \u652f\u4ed8\u98ce\u63a7","link":"https:\/\/yousali.com\/posts\/20240423-openai-register\/","pubDate":"Tue, 23 Apr 2024 17:39:47 +0800","guid":"https:\/\/yousali.com\/posts\/20240423-openai-register\/","description":"<blockquote>\n<p>\u622a\u81f3 2024 \u5e74 2 \u6708 10 \u65e5\uff0c\u8be5\u6559\u7a0b\u4ecd\u7136\u6709\u6548\u3002\u6211\u5df2\u6839\u636e\u6b64\u6559\u7a0b\u91cd\u65b0\u64cd\u4f5c\u5e76\u6210\u529f\u5145\u503c\u3002\u8bf7\u6ce8\u610f\uff0c\u8d2d\u4e70\u82f9\u679c\u5145\u503c\u5361\u65f6\u5e94\u786e\u4fdd\u4ece\u82f9\u679c\u5b98\u65b9\u7f51\u7ad9\u8d2d\u4e70\u3002<\/p><\/blockquote>\n<p><img loading=\"lazy\" src=\"https:\/\/raw.githubusercontent.com\/Miss-you\/img\/master\/picgo\/20240423-164227-1-28fd8bc46d10a26c0e639aeb5ec9862f.jpg\"><\/p>\n<h2 id=\"chatgpt-plus-\u7684\u4f18\u52bf\">ChatGPT Plus \u7684\u4f18\u52bf<\/h2>\n<ol>\n<li>GPT-4 \u7684\u6027\u80fd\u975e\u5e38\u5f3a\u5927\uff0c\u8fd9\u662f\u4f17\u6240\u5468\u77e5\u7684\u4e8b\u5b9e\u3002<\/li>\n<li>Plus \u4f1a\u5458\u53ef\u4ee5\u4f7f\u7528 ChatGPT \u7684\u5728\u7ebf\u548c\u63d2\u4ef6\u529f\u80fd\uff0c\u8fd9\u4e9b\u529f\u80fd\u5c06\u6781\u5927\u5730\u589e\u5f3a\u4f60\u7684\u521b\u9020\u529b\uff0c\u5e76\u4e3a\u4f60\u7684\u4e2a\u4eba\u5b66\u4e60\u548c\u5de5\u4f5c\u6548\u7387\u63d0\u4f9b\u5f3a\u5927\u7684\u652f\u6301\u5de5\u5177\u3002<\/li>\n<\/ol>\n<p><img loading=\"lazy\" src=\"https:\/\/raw.githubusercontent.com\/Miss-you\/img\/master\/picgo\/20240423-164227-2-dfc46547e57fa80736a6925189a7e577.jpg\"><\/p>"},{"title":"\u3010\u8bd1\u3011\u521b\u4e1a\u751f\u5b58\u624b\u518c\uff1a\u5982\u4f55\u6709\u6548\u5730\u6253\u9020\u4ea7\u54c1\u3001\u7ec4\u5efa\u56e2\u961f\u5e76\u7b79\u96c6\u8d44\u91d1","link":"https:\/\/yousali.com\/posts\/20230703-startup-playbook\/","pubDate":"Mon, 03 Jul 2023 17:39:47 +0800","guid":"https:\/\/yousali.com\/posts\/20230703-startup-playbook\/","description":"\u4e2a\u4eba\u8ba4\u4e3a\uff0c\u5927\u516c\u53f8\u5185\u7684\u5c0f\u56e2\u961f\u6216\u521b\u65b0\u56e2\u961f\u4e0e\u521b\u4e1a\u516c\u53f8\u5728\u8bf8\u591a\u65b9\u9762\u6709\u7740\u5bc6\u5207\u7684\u76f8\u4f3c\u6027\u3002\u4e24\u8005\u90fd\u9762\u4e34\u7740\u4ece\u96f6\u5f00\u59cb\uff0c\u5c06\u4e00\u4e2a\u6982\u5ff5\u6216\u60f3\u6cd5\u8f6c\u5316\u4e3a\u53ef\u884c\u4ea7\u54c1\u6216\u670d\u52a1\u7684\u6311\u6218\u3002\u4ed6\u4eec\u90fd\u9700\u8981\u5feb\u901f\u5730\u9002\u5e94\u548c\u5b66\u4e60\uff0c\u5bfb\u627e\u4ea7\u54c1\u4e0e\u5e02\u573a\u7684\u5951\u5408\u70b9\uff0c\u540c\u65f6\u4e5f\u8981\u4e0d\u65ad\u5730\u8fed\u4ee3\u4ea7\u54c1\uff0c\u4ee5\u6ee1\u8db3\u4e0d\u65ad\u53d8\u5316\u7684\u5e02\u573a\u9700\u6c42\u3002\u5728\u8fd9\u4e24\u79cd\u73af\u5883\u4e2d\uff0c\u90fd\u9700\u8981\u5f3a\u5927\u7684\u9886\u5bfc\u529b\u548c\u7ba1\u7406\u624d\u80fd\u4ee5\u53ca\u4f18\u79c0\u7684\u56e2\u961f\u6210\u5458\u3002\u800c\u4e14\uff0c\u4ed6\u4eec\u90fd\u9700\u8981\u9762\u5bf9\u5e76\u7ba1\u7406\u98ce\u9669\uff0c\u540c\u65f6\u5728\u6709\u9650\u7684\u8d44\u6e90\u4e0b\u53d6\u5f97\u6700\u5927\u7684\u4ea7\u51fa\u3002\u56e0\u6b64\uff0c\u65e0\u8bba\u4f60\u662f\u5904\u4e8e\u521b\u4e1a\u73af\u5883\u8fd8\u662f\u5927\u516c\u53f8\u7684\u521b\u65b0\u56e2\u961f\uff0c\u672c\u6587\u90fd\u4f1a\u4e3a\u4f60\u63d0\u4f9b\u6781\u5927\u7684\u4ef7\u503c\u3002Sam Altman\u7684\u7ecf\u9a8c\u548c\u6d1e\u5bdf\u5c06\u5e2e\u52a9\u4f60\u66f4\u597d\u5730\u7406\u89e3\u5982\u4f55\u5efa\u7acb\u5e76\u9886\u5bfc\u4e00\u652f\u6210\u529f\u7684\u56e2\u961f\uff0c\u5982\u4f55\u52df\u96c6\u8d44\u91d1\uff0c\u5982\u4f55\u5904\u7406\u7ade\u4e89\uff0c\u4ee5\u53ca\u5982\u4f55\u5efa\u7acb\u6301\u4e45\u5e76\u80fd\u591f\u76c8\u5229\u7684\u516c\u53f8\u3002"},{"title":"\u63d0\u5347\u4e13\u6ce8\u529b\u7684\u4e03\u79cd\u65b9\u6cd5","link":"https:\/\/yousali.com\/posts\/20230421-7-ways-to-stay-focused\/","pubDate":"Fri, 21 Apr 2023 17:39:47 +0800","guid":"https:\/\/yousali.com\/posts\/20230421-7-ways-to-stay-focused\/","description":"\u8ba9\u601d\u7ef4\u66f4\u805a\u7126\uff0c\u8ba9\u751f\u6d3b\u66f4\u9ad8\u6548"},{"title":"\u4e3a\u4ec0\u4e48 JSON \u9700\u8981\u8f6c\u4e49","link":"https:\/\/yousali.com\/posts\/json-and-escaping\/","pubDate":"Tue, 05 Jan 2021 01:21:26 +0800","guid":"https:\/\/yousali.com\/posts\/json-and-escaping\/","description":"<h1 id=\"\u4e3a\u4ec0\u4e48-json-\u9700\u8981\u8f6c\u4e49\">\u4e3a\u4ec0\u4e48 JSON \u9700\u8981\u8f6c\u4e49\uff1f<\/h1>\n<p>[TOC]<\/p>\n<blockquote>\n<p>\u9002\u5408\u4eba\u7fa4\uff1a\u5165\u95e8\u7ea7<\/p><\/blockquote>\n<h2 id=\"json-\u548c-json-\u8f6c\u4e49\">JSON \u548c JSON \u8f6c\u4e49<\/h2>\n<p>21 \u4e16\u7eaa\u521d\uff0cDouglas Crockford \u5bfb\u627e\u4e00\u79cd\u7b80\u4fbf\u7684\u6570\u636e\u4ea4\u6362\u683c\u5f0f\uff0c\u80fd\u591f\u5728\u670d\u52a1\u5668\u4e4b\u95f4\u4ea4\u6362\u6570\u636e\u3002\u5f53\u65f6\u901a\u7528\u7684\u6570\u636e\u4ea4\u6362\u8bed\u8a00\u662f XML\uff0c\u4f46\u662f Douglas Crockford \u89c9\u5f97 XML \u7684\u751f\u6210\u548c\u89e3\u6790\u90fd\u592a\u9ebb\u70e6\uff0c\u6240\u4ee5\u4ed6\u63d0\u51fa\u4e86\u4e00\u79cd\u7b80\u5316\u683c\u5f0f\uff0c\u4e5f\u5c31\u662f JSON\u3002<\/p>"},{"title":"\u300a\u6b27\u6d32\u7ed8\u753b\u4e94\u767e\u5e74\u300b\u53c2\u89c2\u6709\u611f","link":"https:\/\/yousali.com\/posts\/history-of-western-painting\/","pubDate":"Mon, 28 Dec 2020 22:43:47 +0800","guid":"https:\/\/yousali.com\/posts\/history-of-western-painting\/","description":"\u300a\u6b27\u6d32\u7ed8\u753b\u4e94\u767e\u5e74\u300b\u53c2\u89c2\u6709\u611f"},{"title":"\u4ece nginx \u70ed\u66f4\u65b0\u804a\u4e00\u804a Golang \u4e2d\u7684\u70ed\u66f4\u65b0","link":"https:\/\/yousali.com\/posts\/server-hot-update\/","pubDate":"Mon, 28 Dec 2020 01:23:35 +0800","guid":"https:\/\/yousali.com\/posts\/server-hot-update\/","description":"<h1 id=\"\u4ece-nginx-\u70ed\u66f4\u65b0\u804a\u4e00\u804a-golang-\u4e2d\u7684\u70ed\u66f4\u65b0\">\u4ece nginx \u70ed\u66f4\u65b0\u804a\u4e00\u804a Golang \u4e2d\u7684\u70ed\u66f4\u65b0<\/h1>\n<blockquote>\n<p>\u9759\u6001\u8bed\u8a00\u5728\u670d\u52a1\u5668\u7f16\u7a0b\u65f6\u90fd\u4f1a\u9047\u5230\u8fd9\u6837\u7684\u95ee\u9898\uff1a\u5982\u4f55\u4fdd\u8bc1\u5df2\u6709\u7684\u8fde\u63a5\u670d\u52a1\u4e0d\u4e2d\u65ad\u540c\u65f6\u53c8\u5347\u7ea7\u7248\u672c\uff1f\n\u6700\u8fd1\u82b1\u4e86\u70b9\u65f6\u95f4\u770b\u4e86\u4e0b nginx \u70ed\u66f4\u65b0\u4ee3\u7801\u6d41\u7a0b\uff0c\u60f3\u4e86\u4e0b\u7ed3\u5408\u4e4b\u524d\u7684\u7ecf\u9a8c\u4e00\u5e76\u603b\u7ed3\u4e0b\u70ed\u66f4\u65b0<\/p>"},{"title":"\u83b7\u53d6\u670d\u52a1\u5668\u672c\u673a IP \u7684\u4e0d\u540c\u8bed\u8a00\u5b9e\u73b0","link":"https:\/\/yousali.com\/posts\/how-to-get-localip\/","pubDate":"Wed, 25 Nov 2020 03:11:02 +0800","guid":"https:\/\/yousali.com\/posts\/how-to-get-localip\/","description":"<h2 id=\"cc-\u7248\u672c\">C\/C++ \u7248\u672c<\/h2>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\" id=\"hl-0-1\"><a class=\"lnlinks\" href=\"#hl-0-1\"> 1<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-2\"><a class=\"lnlinks\" href=\"#hl-0-2\"> 2<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-3\"><a class=\"lnlinks\" href=\"#hl-0-3\"> 3<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-4\"><a class=\"lnlinks\" href=\"#hl-0-4\"> 4<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-5\"><a class=\"lnlinks\" href=\"#hl-0-5\"> 5<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-6\"><a class=\"lnlinks\" href=\"#hl-0-6\"> 6<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-7\"><a class=\"lnlinks\" href=\"#hl-0-7\"> 7<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-8\"><a class=\"lnlinks\" href=\"#hl-0-8\"> 8<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-9\"><a class=\"lnlinks\" href=\"#hl-0-9\"> 9<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-10\"><a class=\"lnlinks\" href=\"#hl-0-10\">10<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-11\"><a class=\"lnlinks\" href=\"#hl-0-11\">11<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-12\"><a class=\"lnlinks\" href=\"#hl-0-12\">12<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-13\"><a class=\"lnlinks\" href=\"#hl-0-13\">13<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-14\"><a class=\"lnlinks\" href=\"#hl-0-14\">14<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-15\"><a class=\"lnlinks\" href=\"#hl-0-15\">15<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-16\"><a class=\"lnlinks\" href=\"#hl-0-16\">16<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-17\"><a class=\"lnlinks\" href=\"#hl-0-17\">17<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-18\"><a class=\"lnlinks\" href=\"#hl-0-18\">18<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-19\"><a class=\"lnlinks\" href=\"#hl-0-19\">19<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-20\"><a class=\"lnlinks\" href=\"#hl-0-20\">20<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-21\"><a class=\"lnlinks\" href=\"#hl-0-21\">21<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-22\"><a class=\"lnlinks\" href=\"#hl-0-22\">22<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-23\"><a class=\"lnlinks\" href=\"#hl-0-23\">23<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-24\"><a class=\"lnlinks\" href=\"#hl-0-24\">24<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-25\"><a class=\"lnlinks\" href=\"#hl-0-25\">25<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-26\"><a class=\"lnlinks\" href=\"#hl-0-26\">26<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-27\"><a class=\"lnlinks\" href=\"#hl-0-27\">27<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-28\"><a class=\"lnlinks\" href=\"#hl-0-28\">28<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-29\"><a class=\"lnlinks\" href=\"#hl-0-29\">29<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-30\"><a class=\"lnlinks\" href=\"#hl-0-30\">30<\/a>\n<\/span><span class=\"lnt\" id=\"hl-0-31\"><a class=\"lnlinks\" href=\"#hl-0-31\">31<\/a>\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-gdscript3\" data-lang=\"gdscript3\"><span class=\"line\"><span class=\"cl\"><span class=\"ne\">int<\/span> <span class=\"n\">CNetOperations<\/span><span class=\"p\">::<\/span><span class=\"n\">GetLocalIp<\/span><span class=\"p\">(<\/span><span class=\"n\">__be32<\/span> <span class=\"o\">*<\/span><span class=\"n\">pLocalIp<\/span><span class=\"p\">,<\/span> <span class=\"k\">const<\/span> <span class=\"n\">char<\/span><span class=\"o\">*<\/span> <span class=\"n\">pIfName<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"n\">pLocalIp<\/span> <span class=\"o\">||<\/span> <span class=\"o\">!<\/span><span class=\"n\">pIfName<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">return<\/span> <span class=\"p\">(<\/span><span class=\"o\">-<\/span><span class=\"n\">EINVAL<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"ne\">int<\/span> <span class=\"n\">iSocket<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">iSocket<\/span> <span class=\"o\">=<\/span> <span class=\"n\">socket<\/span><span class=\"p\">(<\/span><span class=\"n\">AF_INET<\/span><span class=\"p\">,<\/span> <span class=\"n\">SOCK_DGRAM<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">iSocket<\/span> <span class=\"o\">&lt;<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">return<\/span> <span class=\"p\">(<\/span><span class=\"o\">-<\/span><span class=\"n\">errno<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">struct<\/span> <span class=\"n\">ifreq<\/span> <span class=\"n\">stIfr<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">memset<\/span><span class=\"p\">(<\/span><span class=\"n\">stIfr<\/span><span class=\"o\">.<\/span><span class=\"n\">ifr_name<\/span><span class=\"p\">,<\/span> <span class=\"mh\">0x0<\/span><span class=\"p\">,<\/span> <span class=\"n\">sizeof<\/span><span class=\"p\">(<\/span><span class=\"n\">stIfr<\/span><span class=\"o\">.<\/span><span class=\"n\">ifr_name<\/span><span class=\"p\">));<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">strcpy<\/span><span class=\"p\">(<\/span><span class=\"n\">stIfr<\/span><span class=\"o\">.<\/span><span class=\"n\">ifr_name<\/span><span class=\"p\">,<\/span> <span class=\"n\">pIfName<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"ne\">int<\/span> <span class=\"n\">iRet<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">iRet<\/span> <span class=\"o\">=<\/span> <span class=\"n\">ioctl<\/span><span class=\"p\">(<\/span><span class=\"n\">iSocket<\/span><span class=\"p\">,<\/span> <span class=\"n\">SIOCGIFADDR<\/span><span class=\"p\">,<\/span> <span class=\"o\">&amp;<\/span><span class=\"n\">stIfr<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">iRet<\/span> <span class=\"o\">&lt;<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">close<\/span><span class=\"p\">(<\/span><span class=\"n\">iSocket<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">return<\/span> <span class=\"p\">(<\/span><span class=\"o\">-<\/span><span class=\"n\">errno<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">(<\/span><span class=\"o\">*<\/span><span class=\"n\">pLocalIp<\/span><span class=\"p\">)<\/span> <span class=\"o\">=<\/span> <span class=\"p\">((<\/span><span class=\"n\">struct<\/span> <span class=\"n\">sockaddr_in<\/span> <span class=\"o\">*<\/span><span class=\"p\">)<\/span><span class=\"o\">&amp;<\/span><span class=\"n\">stIfr<\/span><span class=\"o\">.<\/span><span class=\"n\">ifr_addr<\/span><span class=\"p\">)<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">sin_addr<\/span><span class=\"o\">.<\/span><span class=\"n\">s_addr<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"n\">close<\/span><span class=\"p\">(<\/span><span class=\"n\">iSocket<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">return<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"golang-\u7248\u672c\">golang \u7248\u672c<\/h2>\n<h2 id=\"shell-\u7248\u672c\">shell \u7248\u672c<\/h2>\n<p>\u6700\u521d\u7684\u60f3\u6cd5<\/p>"},{"title":"perf \u5165\u95e8\u6559\u7a0b\uff08\u5f85\u8865\u5145\u548c\u5b8c\u5584\uff09","link":"https:\/\/yousali.com\/posts\/perf\/","pubDate":"Wed, 25 Nov 2020 02:54:43 +0800","guid":"https:\/\/yousali.com\/posts\/perf\/","description":"<h1 id=\"perf-\u4f7f\u7528\u6559\u7a0b\">perf \u4f7f\u7528\u6559\u7a0b<\/h1>\n<h2 id=\"perf-\u7b80\u4ecb\">perf \u7b80\u4ecb<\/h2>\n<p>Perf \u662f Linux kernel \u4e2d\u7684\u7cfb\u7edf\u6027\u80fd\u4f18\u5316\u5de5\u5177\uff0cperf \u57fa\u672c\u539f\u7406\u7684\u8bdd\u662f\u5728 CPU \u7684 PMU register \u4e2d Get\/Set performance counters \u6765\u83b7\u5f97\u8bf8\u5982 instructions executed\uff0ccache-missed suffered\uff0cbranches mispredicted \u7b49\u4fe1\u606f\u3002<\/p>"},{"title":"\u6027\u80fd\u8c03\u4f18\u5229\u5668--\u706b\u7130\u56fe","link":"https:\/\/yousali.com\/posts\/flame\/","pubDate":"Wed, 25 Nov 2020 02:39:47 +0800","guid":"https:\/\/yousali.com\/posts\/flame\/","description":"\u672c\u6587\u4e3b\u8981\u5206\u4eab\u706b\u7130\u56fe\u4f7f\u7528\u6280\u5de7\uff0c\u4ecb\u7ecd systemtap \u7684\u539f\u7406\u673a\u5236\uff0c\u5982\u4f55\u4f7f\u7528\u706b\u7130\u56fe\u5feb\u901f\u5b9a\u4f4d\u6027\u80fd\u95ee\u9898\u539f\u56e0\uff0c\u540c\u65f6\u52a0\u6df1\u5bf9 systemtap \u7684\u7406\u89e3\u3002"},{"title":"\u4f7f\u7528 Github Pages \u548c Hugo \u642d\u5efa\u4e2a\u4eba\u535a\u5ba2\u6559\u7a0b","link":"https:\/\/yousali.com\/posts\/how-to-create-blog\/","pubDate":"Sat, 10 Oct 2020 03:03:29 +0800","guid":"https:\/\/yousali.com\/posts\/how-to-create-blog\/","description":"Github Pages \u5efa\u7ad9\u6559\u7a0b"},{"title":"Go \u8bed\u8a00\uff1a\u89e3\u51b3\u6570\u636e\u5e93\u4e2d null \u503c\u7684\u95ee\u9898","link":"https:\/\/yousali.com\/posts\/go-mysql-null\/","pubDate":"Thu, 08 Oct 2020 00:46:23 +0800","guid":"https:\/\/yousali.com\/posts\/go-mysql-null\/","description":"\u672c\u6587\u4e3b\u8981\u4ecb\u7ecd\u5982\u4f55\u4f7f\u7528 go \u8bed\u8a00 database\/sql \u5e93\u4ece\u6570\u636e\u5e93\u4e2d\u8bfb\u53d6 null \u503c\u7684\u95ee\u9898\uff0c\u4ee5\u53ca\u5982\u4f55\u5411\u6570\u636e\u5e93\u4e2d\u63d2\u5165 null \u503c\u3002\u672c\u6587\u5728\u8fd9\u91cc\u4f7f\u7528\u7684\u662f sql.NullString, sql.NullInt64, sql.NullFloat64 \u7b49\u7ed3\u6784\u4f53\uff0c\u4e3a\u4e86\u65b9\u4fbf\u4e66\u5199\uff0c\u5b83\u4eec\u7684\u6cdb\u6307\u6211\u4f1a\u4f7f\u7528 sql.Null \u6765\u8868\u793a."},{"title":{},"link":"https:\/\/yousali.com\/posts\/how-to-control-claude-to-write\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/yousali.com\/posts\/how-to-control-claude-to-write\/","description":"<h3 id=\"1-\u8bbe\u5b9a\u5199\u4f5c\u76ee\u6807\u4e0e\u53d7\u4f17\">1\ufe0f\u20e3 \u8bbe\u5b9a\u5199\u4f5c\u76ee\u6807\u4e0e\u53d7\u4f17<\/h3>\n<table>\n<thead>\n<tr>\n<th>\u8981\u7d20<\/th>\n<th>\u63d0\u95ee Claude Code \u7684\u793a\u4f8b<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u76ee\u6807<\/td>\n<td>\u201c\u6211\u60f3\u5199\u4e00\u7bc7\u9762\u5411\u4e2d\u7ea7\u540e\u7aef\u5f00\u53d1\u8005\u7684\u6587\u7ae0\uff0c\u5e2e\u52a9\u4ed6\u4eec\u7406\u89e3 <strong>Event Sourcing<\/strong> \u7684\u6838\u5fc3\u6982\u5ff5\u5e76\u5feb\u901f\u4e0a\u624b\u3002\u201d<\/td>\n<\/tr>\n<tr>\n<td>\u53d7\u4f17\u75db\u70b9<\/td>\n<td>\u201c\u8fd9\u4e9b\u8bfb\u8005\u901a\u5e38\u56f0\u60d1\u4e8e\u65e5\u5fd7\u589e\u957f\u3001\u56de\u653e\u6027\u80fd\u548c\u4e00\u81f4\u6027\u9a8c\u8bc1\uff0c\u8bf7\u7ed9\u6211\u4e00\u4efd\u7b80\u8981\u9700\u6c42\u6e05\u5355\u3002\u201d<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<blockquote>\n<p><strong>\u6280\u5de7<\/strong>\uff1a\u628a\u201c\u8bfb\u8005\u753b\u50cf + \u9605\u8bfb\u540e\u5e94\u4f1a\u4ec0\u4e48\u201d\u4e00\u6b21\u6027\u544a\u8bc9\u6a21\u578b\uff0c\u53ef\u663e\u8457\u63d0\u5347\u540e\u7eed\u8f93\u51fa\u7684\u7cbe\u51c6\u5ea6\u3002<\/p>"}]}}