From eae6e56c341a9ab51d8da21234c9a5d6dbf0a7e6 Mon Sep 17 00:00:00 2001 From: GuoXiCheng Date: Fri, 16 Aug 2024 06:22:10 +0000 Subject: [PATCH] deploy: dba18f3fe6b391446f7d36768535a03dc896d7e9 --- 404.html | 6 +-- article/android-compose-toggle-theme.html | 4 +- article/app-deployment-evolution.html | 4 +- article/cross-domain.html | 4 +- article/debounce-throttle.html | 4 +- article/history-of-javascript.html | 4 +- article/index.html | 4 +- article/make-npm-lib.html | 4 +- article/sftp-usage.html | 4 +- ...IOnKZ.js => 001-codebase.html-KE09tOka.js} | 2 +- ...=> 001-pyramid-principle.html-B29R0TZU.js} | 2 +- ...g.js => 001-self-control.html-DD2sWzcO.js} | 2 +- ...i.js => 002-dependencies.html-BJWeHlsl.js} | 2 +- ... => 002-the-great-gatsby.html-CbFWnlvh.js} | 2 +- ...hose-ming-dynasty-things.html-LZIqC68F.js} | 2 +- ...ODubnRc.js => 003-config.html-CG0yPUOa.js} | 2 +- ...03-intimate-relationship.html-C5rFDAOQ.js} | 2 +- ...D-e1jHRy.js => 003-naval.html-Cgl8Tfeb.js} | 2 +- ... => 004-backing-services.html-d053y8dM.js} | 2 +- ...-the-courage-to-be-hated.html-DUfzzjRY.js} | 2 +- ...entrepreneurial-thinking.html-BCygaWwM.js} | 2 +- ...=> 005-build-release-run.html-C_eqmPUo.js} | 2 +- ...lish-chatting-techniques.html-yREWOw9j.js} | 2 +- ... 005-small-and-beautiful.html-CXAbnsZT.js} | 2 +- ...entrepreneurial-practice.html-C-ACJWzO.js} | 2 +- ...low-risk-entrepreneurship.html-PiGZ1Hcf.js | 1 + ...UWrx.js => 006-processes.html-CiX1ZK1e.js} | 2 +- ... => 007-island-economics.html-D50o5pCb.js} | 2 +- ...u.js => 007-port-binding.html-DdoumpZG.js} | 2 +- ...MF.js => 008-concurrency.html-CHlHe31d.js} | 2 +- ...08-micro-habits-slimming.html-B7Ku9Ih6.js} | 2 +- ....js => 009-disposability.html-DpW9rlw5.js} | 2 +- ...ts-communicate-the-bible.html-BSvctGL9.js} | 2 +- ...s => 010-dev-prod-parity.html-Hq-Q3YXn.js} | 2 +- ...\347\216\213\345\255\220.html-CIg6Zfpz.js" | 2 +- ...-DF3YswRh.js => 011-logs.html-DMqKoo1n.js} | 2 +- ... 011-rockefeller-letters.html-Djo_xIIJ.js} | 2 +- ...s => 012-admin-processes.html-BF1MZhXi.js} | 2 +- ...utobiography-of-franklin.html-BpfRRZKr.js} | 2 +- ...rWH3UIQ.js => 013-secret.html-DJJMPjUU.js} | 2 +- ...tions-from-kazuo-inamori.html-DK69K60U.js} | 2 +- ...tertain-oneself-to-death.html-B5H-dasr.js} | 2 +- ...life-by-learning-english.html-CPjXV3Xe.js} | 2 +- ...s => 017-biblical-wisdom.html-4jKkvJns.js} | 2 +- ...> 018-desire-and-dignity.html-C_rjUwoi.js} | 2 +- ...vu.js => 019-rural-china.html-B2zejjSr.js} | 2 +- ...-7oR9.js => 021-addicted.html-PVwbcCu-.js} | 2 +- ...s => 022-excellent-sheep.html-B5hvhU1e.js} | 2 +- ....html-CGRfCgAP.js => 404.html-CjZ4flCW.js} | 2 +- .../GET\345\222\214POST.html-Dvujndbz.js" | 2 +- .../HTTP\345\222\214HTTPS.html-CEW_EhML.js" | 2 +- ...\351\227\256\351\242\230.html-CYAMyiCx.js" | 2 +- assets/SearchResult-BhHM-94f.js | 1 - assets/SearchResult-DX69bCr2.js | 1 + ...dCard-DIHApE6q.js => WordCard-CtytuN7W.js} | 2 +- ...V.js => abstract-factory.html-D18YVWOO.js} | 2 +- ...l-DjsE011W.js => adapter.html-DQLmqzpw.js} | 2 +- ...js => adb-wireless-debug.html-G1B5jZF7.js} | 2 +- ...oid-compose-toggle-theme.html-BonZxZaP.js} | 2 +- ...cSr1B.js => angular-i18n.html-4oaPX1f4.js} | 2 +- assets/{app-BLyK9ZJy.js => app-BSa8cFh0.js} | 20 +++++----- ...app-deployment-evolution.html-CqbAAGOt.js} | 2 +- ...\201call\343\200\201bind.html-vYmZkFju.js" | 2 +- assets/{arc-DOfUZrI2.js => arc-BF8xpIg2.js} | 2 +- ...ml-pQvbjtMj.js => argocd.html-CAOH8OYQ.js} | 2 +- ...\345\257\271\350\261\241.html-B1Pz4srF.js" | 2 +- ...WjpbXp.js => azure-login.html-CW2Tg46q.js} | 2 +- ...m.js => blockDiagram-9f4a6865-D05qY16E.js} | 2 +- ...ml-VXpPTkm3.js => bridge.html-CyV3bdrh.js} | 2 +- ...l-6l2usi86.js => builder.html-B0eKILcP.js} | 2 +- ...A8T1.js => c4Diagram-ae766693-BLrDyQgN.js} | 2 +- ... chain-of-responsibility.html-BksNeTnb.js} | 2 +- assets/channel-BhWPTxGu.js | 1 + assets/channel-CT1eHIs8.js | 1 - ...p.js => classDiagram-fb54d2a0-D7fVwVaf.js} | 2 +- ...s => classDiagram-v2-a2b738ad-DJ0ZJHYu.js} | 2 +- ..._.js => classical-layout.html-BAaKS8KI.js} | 2 +- assets/clone-BNKEMwkU.js | 1 - assets/clone-DZy5wdD8.js | 1 + ...l-zpn787bM.js => command.html-ja-KViWA.js} | 2 +- ...=> components-share-data.html-CAPYtWK_.js} | 2 +- ...Bw9sukCu.js => composite.html-D4Q91ot1.js} | 2 +- ...4axwz4J.js => contribute.html-DiBtGwJa.js} | 2 +- ...StPuMz0.js => contribute.html-DyVlnPhx.js} | 2 +- ...js => contribution-guide.html-CNV93BuF.js} | 2 +- ...js => contribution-guide.html-xMZ-uu8m.js} | 2 +- ...QP4.js => create-request.html-C6tXKLFg.js} | 2 +- ...G3s.js => create-request.html-vnXUgMlO.js} | 2 +- ...ijZ.js => createText-ca0c5216-BWPb9cNn.js} | 2 +- ...Ypu1w.js => cross-domain.html-DngXa6Oa.js} | 2 +- ...7.js => custom-decorator.html-DewcEI46.js} | 2 +- ....js => debounce-throttle.html-8nVLpaD-.js} | 2 +- ...DOJkfU3t.js => decorator.html-CrVuLbBN.js} | 2 +- ...s => docker-architecture.html-D8_QhbIq.js} | 2 +- ...js => docker-image-build.html-D9lj3ET4.js} | 2 +- ...> docker-image-structure.html-BRk-bkgw.js} | 2 +- ...s => docker-installation.html-DhBFg_hi.js} | 2 +- ...0lD3A5V.js => docker-use.html-8ucPnw8W.js} | 2 +- ...PXxYykcF.js => edges-066a5561-D-q6OPYu.js} | 2 +- ...m2wY.js => erDiagram-09d1c15f-BbCEQLmo.js} | 2 +- ...ml-ByUeF5P7.js => facade.html-DgrJ6BJA.js} | 2 +- ...Q0_.js => factory-method.html-Cqrklfa7.js} | 2 +- ...RzFOgN.js => flex-layout.html-QgaDp0-Z.js} | 2 +- ...vjlaTwY.js => flowDb-c1833063-Bd2v-rPF.js} | 2 +- ...SI.js => flowDiagram-b222e15a-Ciceere4.js} | 2 +- assets/flowDiagram-v2-13329dc7-B9dJc35H.js | 1 - assets/flowDiagram-v2-13329dc7-DNSf8MVo.js | 1 + ...chart-elk-definition-ae0efee6-byvaK7aQ.js} | 2 +- ...DhgRwv1u.js => flyweight.html-khO-06ds.js} | 2 +- ..._.js => ganttDiagram-b62c793e-DRmNDmyU.js} | 2 +- ...6.js => generic-function.html-BIbNnbwB.js} | 2 +- ...T.js => git-installation.html-BQLFVXJr.js} | 2 +- ...l-Bc8xXnd-.js => git-tag.html-Mx9u7Wq0.js} | 2 +- ...l-BvmFr3U4.js => git-use.html-CZGAVEP0.js} | 2 +- ...s => gitGraphDiagram-942e62fe-DTaPcPyj.js} | 2 +- .../{graph-Bd3fjTn8.js => graph-Qf59IWBS.js} | 2 +- ...UOD_yh.js => grid-layout.html-BJqOKAws.js} | 2 +- ...=> history-of-javascript.html-CJoiSEgi.js} | 2 +- ...vK2kVAf.js => how-to-use.html-Df7evFYJ.js} | 2 +- ...2OjJnxe.js => how-to-use.html-QQkFaj57.js} | 2 +- ...9vJ.js => human-weakness.html-3JscoAxt.js} | 2 +- ...C0vALJJK.js => index-01f381cb-CLzuZxXD.js} | 2 +- ...tml-BYOuHqGL.js => index.html-442_0BoN.js} | 2 +- ...tml-xC86tdB3.js => index.html-7_htggJc.js} | 2 +- ...tml-ByYI5bBM.js => index.html-B--VeDuB.js} | 2 +- ...tml-BIXYqJe2.js => index.html-BBAY8kzd.js} | 2 +- ...tml-W6zBPAHf.js => index.html-BBZ-UWKB.js} | 2 +- ...tml-vqqXZDmF.js => index.html-BDQc6rI7.js} | 2 +- ...tml-Bq3aqi-a.js => index.html-BECZYh5k.js} | 2 +- ...tml-BKb90yGU.js => index.html-BEILxa9L.js} | 2 +- ...tml-DRk4K6B0.js => index.html-BEXohZli.js} | 2 +- ...tml-BtHx2QpR.js => index.html-BFRJrx4i.js} | 2 +- ...tml-yPCDSSRB.js => index.html-BPjJKngv.js} | 2 +- ...tml-OBp4GXmd.js => index.html-BQTIvK78.js} | 2 +- ...tml-CjOsnn8U.js => index.html-BrBK_lGu.js} | 2 +- ...tml-BM3l3NJU.js => index.html-C-FT5TcK.js} | 2 +- ...tml-DrsyYefh.js => index.html-C8dMdebp.js} | 2 +- ...tml-DDe17mRU.js => index.html-CA0wOLSR.js} | 2 +- ...tml-CTwfMSoe.js => index.html-CA9GwR5b.js} | 2 +- ...tml-IZCWuNPl.js => index.html-CE--NcW2.js} | 2 +- ...tml-BJd4c1Mt.js => index.html-CHno9ym-.js} | 2 +- ...tml-Brn939rB.js => index.html-CRR3bmkZ.js} | 2 +- ...tml-JunUIZOc.js => index.html-CU1tcaYR.js} | 2 +- ...tml-BW3MSdrG.js => index.html-CzVhMQ8i.js} | 2 +- ...tml-CWHLjlxv.js => index.html-D0d6l9g2.js} | 2 +- ...tml-Bm0ydy6q.js => index.html-D7Q7APMY.js} | 2 +- ...tml-jUfzWAal.js => index.html-DN8J3LBn.js} | 2 +- ...tml-Dg-5FtzE.js => index.html-DNI_yerb.js} | 2 +- ...tml-DJHLZ2ri.js => index.html-DOn0miG_.js} | 2 +- ...tml-BDg5NsVa.js => index.html-DPisnqRp.js} | 2 +- ...tml-mlTZ9KWn.js => index.html-DUBkicuy.js} | 2 +- ...tml-DNtUiDEP.js => index.html-DaIlkqyf.js} | 2 +- ...tml-bJIw4wiH.js => index.html-Dio_lk3z.js} | 2 +- ...tml-C6v0fv_i.js => index.html-DjjexhjN.js} | 2 +- ...tml-CLCzT4cm.js => index.html-Dz3vdB74.js} | 2 +- ...tml-C6gjscMY.js => index.html-G-UghoaC.js} | 2 +- ...tml-DstrKOuP.js => index.html-R-10JjXe.js} | 2 +- ...tml-BKlFuXNy.js => index.html-_ztMlTab.js} | 2 +- ...tml-DGnA2D96.js => index.html-fo57XW3Z.js} | 2 +- ...tml-Cn0-1OB3.js => index.html-lJje50V4.js} | 2 +- ...tml-BTOqXWty.js => index.html-qe9rS8Zk.js} | 2 +- ...tml-Eo1iEqhj.js => index.html-yATyb_At.js} | 2 +- ...gx.js => infoDiagram-94cd232f-gtnc2w-f.js} | 2 +- ...-CckuVqGa.js => iterator.html-QU1R76zp.js} | 2 +- ...js => journeyDiagram-6625b456-INvQxnYb.js} | 2 +- ...3YVv.js => js-full-stack.html-CrboZL7D.js} | 2 +- ... => k8s-release-strategy.html-D1be4wgQ.js} | 2 +- ...mtQ3K.js => karma-config.html-Do7D2C9w.js} | 2 +- ...{layout-Cgj_EUUW.js => layout-BTRrMYHP.js} | 2 +- assets/{line-XBQIKVte.js => line-4hoYYRzw.js} | 2 +- ...{linear-D86opavn.js => linear-Dr9lAGyz.js} | 2 +- ...a_mBq.js => make-npm-lib.html-DSasP1Ka.js} | 2 +- ...-CGoyAa8j.js => mediator.html-xqpIWDq-.js} | 2 +- ...l-CLlR2vRm.js => memento.html-OvYYHGi_.js} | 2 +- ...e-DYSj9BM_.js => mermaid.core-9ynoU9_i.js} | 8 ++-- ...> mindmap-definition-307c710a-DtfeaW6R.js} | 2 +- ...nonviolent-communication.html-CPBsxeJ5.js} | 2 +- ...-9_C195L8.js => observer.html-DSrDqkvF.js} | 2 +- ...b6Q.js => pieDiagram-bb1d19e5-CUXYxx8p.js} | 2 +- ...8ajIxDam.js => prototype.html-C1r-5LRr.js} | 2 +- ...tml-D5hZb8Uf.js => proxy.html-CBUlxhqz.js} | 2 +- ...\200\201vh\343\200\201vw.html-CI-pCqRO.js" | 2 +- ...s => quadrantDiagram-c759a472-C5xLD7iB.js} | 2 +- ...> requirementDiagram-87253d64-CzRXAlXz.js} | 2 +- ....js => sankeyDiagram-707fac0f-B4DprkzH.js} | 2 +- ...aled-secrets-client-side.html-DRSNRzib.js} | 2 +- ...GKa.js => selection-sort.html-NY7mNJ_4.js} | 2 +- ...KXx.js => selection-sort.html-njwSqnNX.js} | 2 +- ...s => sequenceDiagram-6894f283-Ceowvx2P.js} | 2 +- ...O07ahcX.js => sftp-usage.html-BxUF5tYw.js} | 2 +- ...B1y_iO-_.js => singleton.html-aLBuWcjG.js} | 2 +- ...html-CFiSWZCM.js => sort.html-1fSWpaEb.js} | 2 +- ...html-DZfxn26Q.js => sort.html-BnRkuj-d.js} | 2 +- ...P1tZkO.js => start-using.html-B71qv67K.js} | 2 +- ...C0yotD.js => start-using.html-Cg5I1wB_.js} | 2 +- ...tml-cuYqQBsU.js => state.html-Bku4FWRp.js} | 2 +- ...R.js => stateDiagram-5dee940d-CdnhSnfF.js} | 2 +- ...s => stateDiagram-v2-1992cada-x-tlxLAL.js} | 2 +- .../state\345\222\214props.html-gfu7nakB.js" | 2 +- ...-DLA0XV4y.js => strategy.html-BjlQmvob.js} | 2 +- ...3hBkVVx.js => styles-0784dbeb-COR1d6MR.js} | 2 +- ...-98wyVX.js => styles-483fbfea-SMReKWq8.js} | 2 +- ...Z-F2v0y.js => styles-b83b31c9-Dql2m8_F.js} | 2 +- ....js => svgDrawCommon-5e1cfd1d-B2yB1VOU.js} | 2 +- ...1i.js => template-method.html-DQLCUMq7.js} | 2 +- ...=> test-coverage-example.html-ChRD7921.js} | 2 +- ...\345\257\271\350\261\241.html-Coax16p4.js" | 2 +- ... timeline-definition-bf702344-DXpg61lm.js} | 2 +- ...nsaction-isolation-level.html--AMNUCzu.js} | 2 +- ...of\345\222\214instanceof.html-DLKZruzo.js" | 2 +- ...EP_.js => usage-of-state.html-CSau87ub.js} | 2 +- ...\201let\343\200\201const.html-By6eU2M5.js" | 2 +- ...l-DtkMbRgK.js => visitor.html-D3II45NS.js} | 2 +- ...ml-DhVwP4Aw.js => xiaomi.html-Cfhsz-S6.js} | 2 +- ...ml-3MxuZCp2.js => xiaomi.html-Cj_NhqOu.js} | 2 +- ...js => xychartDiagram-f11f50a6-dYc5N6Pk.js} | 2 +- ...10\346\230\257JavaScript.html-DpPTW-9U.js" | 2 +- ...\347\224\250\345\237\237.html-CH0ewwLP.js" | 2 +- ...\351\207\214\345\214\226.html-DqYSm1x6.js" | 2 +- ...\345\217\202\346\225\260.html-gNas6dNZ.js" | 2 +- .../\345\222\214___.html-V67F7fio.js" | 2 +- ...\350\267\257\347\224\261.html-BIHIUYy6.js" | 2 +- ...\346\213\267\350\264\235.html-Cpazt2UH.js" | 2 +- ...\345\207\275\346\225\260.html-CMWd-7na.js" | 2 +- ...\351\227\255\345\214\205.html-CAQNZh4l.js" | 2 +- .../behavioral/chain-of-responsibility.html | 4 +- design-pattern/behavioral/command.html | 4 +- design-pattern/behavioral/index.html | 4 +- design-pattern/behavioral/iterator.html | 4 +- design-pattern/behavioral/mediator.html | 4 +- design-pattern/behavioral/memento.html | 4 +- design-pattern/behavioral/observer.html | 4 +- design-pattern/behavioral/state.html | 4 +- design-pattern/behavioral/strategy.html | 4 +- .../behavioral/template-method.html | 4 +- design-pattern/behavioral/visitor.html | 4 +- .../creational/abstract-factory.html | 4 +- design-pattern/creational/builder.html | 4 +- design-pattern/creational/factory-method.html | 4 +- design-pattern/creational/index.html | 4 +- design-pattern/creational/prototype.html | 4 +- design-pattern/creational/singleton.html | 4 +- design-pattern/index.html | 4 +- design-pattern/structural/adapter.html | 4 +- design-pattern/structural/bridge.html | 4 +- design-pattern/structural/composite.html | 4 +- design-pattern/structural/decorator.html | 4 +- design-pattern/structural/facade.html | 4 +- design-pattern/structural/flyweight.html | 4 +- design-pattern/structural/index.html | 4 +- design-pattern/structural/proxy.html | 4 +- develop/android/adb-wireless-debug.html | 4 +- develop/android/index.html | 4 +- develop/angular/angular-i18n.html | 4 +- develop/angular/azure-login.html | 4 +- develop/angular/components-share-data.html | 4 +- develop/angular/index.html | 4 +- develop/angular/karma-config.html | 4 +- develop/database/index.html | 4 +- .../database/transaction-isolation-level.html | 4 +- develop/git/git-installation.html | 4 +- develop/git/git-tag.html | 4 +- develop/git/git-use.html | 4 +- develop/git/index.html | 4 +- develop/html/classical-layout.html | 4 +- develop/html/flex-layout.html | 4 +- develop/html/grid-layout.html | 4 +- develop/html/index.html | 4 +- develop/index.html | 4 +- develop/nestjs/index.html | 4 +- develop/python/index.html | 4 +- develop/react/index.html | 4 +- develop/react/usage-of-state.html | 4 +- develop/test/index.html | 4 +- develop/test/test-coverage-example.html | 4 +- develop/typescript/custom-decorator.html | 4 +- develop/typescript/generic-function.html | 4 +- develop/typescript/index.html | 4 +- dump/algorithm/index.html | 4 +- dump/algorithm/sort.html | 4 +- dump/algorithm/sort/index.html | 4 +- dump/algorithm/sort/selection-sort.html | 4 +- dump/cloud-native/argocd/argocd.html | 4 +- dump/cloud-native/argocd/index.html | 4 +- .../docker/docker-architecture.html | 4 +- .../docker/docker-image-build.html | 4 +- .../docker/docker-image-structure.html | 4 +- .../docker/docker-installation.html | 4 +- dump/cloud-native/docker/docker-use.html | 4 +- dump/cloud-native/docker/index.html | 4 +- dump/cloud-native/index.html | 4 +- dump/cloud-native/kubernetes/index.html | 4 +- .../kubernetes/k8s-release-strategy.html | 4 +- .../sealed-secrets-client-side.html | 4 +- dump/en/algorithm/index.html | 4 +- dump/en/algorithm/sort.html | 4 +- dump/en/algorithm/sort/index.html | 4 +- dump/en/algorithm/sort/selection-sort.html | 4 +- dump/en/index.html | 4 +- dump/en/projects/SKIP-Docs/contribute.html | 4 +- dump/en/projects/SKIP-Docs/how-to-use.html | 4 +- dump/en/projects/SKIP-Docs/index.html | 4 +- dump/en/projects/SKIP-Docs/xiaomi.html | 4 +- .../TinyCRUD-Docs/contribution-guide.html | 4 +- .../TinyCRUD-Docs/create-request.html | 4 +- dump/en/projects/TinyCRUD-Docs/index.html | 4 +- .../projects/TinyCRUD-Docs/start-using.html | 4 +- dump/en/projects/index.html | 4 +- dump/index.html | 4 +- dump/js-full-stack.html | 4 +- "dump/knowledge/GET\345\222\214POST.html" | 4 +- "dump/knowledge/HTTP\345\222\214HTTPS.html" | 4 +- ...\345\244\261\351\227\256\351\242\230.html" | 4 +- ...pply\343\200\201call\343\200\201bind.html" | 4 +- .../arguments\345\257\271\350\261\241.html" | 4 +- dump/knowledge/index.html | 4 +- ...0\201rem\343\200\201vh\343\200\201vw.html" | 4 +- "dump/knowledge/state\345\222\214props.html" | 4 +- .../this\345\257\271\350\261\241.html" | 4 +- .../typeof\345\222\214instanceof.html" | 4 +- .../var\343\200\201let\343\200\201const.html" | 4 +- ...00\344\271\210\346\230\257JavaScript.html" | 4 +- ...\344\275\234\347\224\250\345\237\237.html" | 4 +- ...\346\237\257\351\207\214\345\214\226.html" | 4 +- ...\344\275\231\345\217\202\346\225\260.html" | 4 +- "dump/knowledge/\345\222\214___.html" | 4 +- ...2\214History\350\267\257\347\224\261.html" | 4 +- ...\346\265\205\346\213\267\350\264\235.html" | 4 +- ...\345\244\264\345\207\275\346\225\260.html" | 4 +- .../knowledge/\351\227\255\345\214\205.html" | 4 +- dump/projects/SKIP-Docs/contribute.html | 4 +- dump/projects/SKIP-Docs/how-to-use.html | 4 +- dump/projects/SKIP-Docs/index.html | 4 +- dump/projects/SKIP-Docs/xiaomi.html | 4 +- .../TinyCRUD-Docs/contribution-guide.html | 4 +- .../TinyCRUD-Docs/create-request.html | 4 +- dump/projects/TinyCRUD-Docs/index.html | 4 +- dump/projects/TinyCRUD-Docs/start-using.html | 4 +- dump/projects/index.html | 4 +- dump/software-engineering/index.html | 4 +- .../twelve-factor/001-codebase.html | 4 +- .../twelve-factor/002-dependencies.html | 4 +- .../twelve-factor/003-config.html | 4 +- .../twelve-factor/004-backing-services.html | 4 +- .../twelve-factor/005-build-release-run.html | 4 +- .../twelve-factor/006-processes.html | 4 +- .../twelve-factor/007-port-binding.html | 4 +- .../twelve-factor/008-concurrency.html | 4 +- .../twelve-factor/009-disposability.html | 4 +- .../twelve-factor/010-dev-prod-parity.html | 4 +- .../twelve-factor/011-logs.html | 4 +- .../twelve-factor/012-admin-processes.html | 4 +- .../twelve-factor/index.html | 4 +- index.html | 4 +- reading/2022/human-weakness.html | 4 +- reading/2022/index.html | 4 +- reading/2022/nonviolent-communication.html | 4 +- reading/2023/001-self-control.html | 4 +- reading/2023/002-the-great-gatsby.html | 4 +- reading/2023/003-intimate-relationship.html | 4 +- reading/2023/004-the-courage-to-be-hated.html | 4 +- .../005-devilish-chatting-techniques.html | 4 +- .../006-lean-entrepreneurial-practice.html | 4 +- reading/2023/007-island-economics.html | 4 +- reading/2023/008-micro-habits-slimming.html | 4 +- .../009-introverts-communicate-the-bible.html | 4 +- ...\345\260\217\347\216\213\345\255\220.html" | 4 +- reading/2023/011-rockefeller-letters.html | 4 +- .../2023/012-autobiography-of-franklin.html | 4 +- reading/2023/013-secret.html | 4 +- .../014-quotations-from-kazuo-inamori.html | 4 +- .../2023/015-entertain-oneself-to-death.html | 4 +- ...6-changed-my-life-by-learning-english.html | 4 +- reading/2023/017-biblical-wisdom.html | 4 +- reading/2023/018-desire-and-dignity.html | 4 +- reading/2023/019-rural-china.html | 4 +- reading/2023/021-addicted.html | 4 +- reading/2023/022-excellent-sheep.html | 4 +- reading/2023/index.html | 4 +- reading/2024/001-pyramid-principle.html | 6 +-- .../2024/002-those-ming-dynasty-things.html | 6 +-- reading/2024/003-naval.html | 6 +-- .../004-xiaomi-entrepreneurial-thinking.html | 6 +-- reading/2024/005-small-and-beautiful.html | 6 +-- .../2024/006-low-risk-entrepreneurship.html | 40 +++++++++++++++++++ reading/2024/index.html | 6 +-- reading/index.html | 4 +- search-pro.worker.js | 2 +- sitemap.xml | 2 +- 389 files changed, 613 insertions(+), 572 deletions(-) rename assets/{001-codebase.html-BenIOnKZ.js => 001-codebase.html-KE09tOka.js} (98%) rename assets/{001-pyramid-principle.html-BFmEMeNM.js => 001-pyramid-principle.html-B29R0TZU.js} (99%) rename assets/{001-self-control.html-rHldA_Mg.js => 001-self-control.html-DD2sWzcO.js} (98%) rename assets/{002-dependencies.html-CCTivZci.js => 002-dependencies.html-BJWeHlsl.js} (98%) rename assets/{002-the-great-gatsby.html-P4drTvUC.js => 002-the-great-gatsby.html-CbFWnlvh.js} (98%) rename assets/{002-those-ming-dynasty-things.html-Dom19Hpy.js => 002-those-ming-dynasty-things.html-LZIqC68F.js} (99%) rename assets/{003-config.html-BODubnRc.js => 003-config.html-CG0yPUOa.js} (98%) rename assets/{003-intimate-relationship.html-DjQFKM8p.js => 003-intimate-relationship.html-C5rFDAOQ.js} (99%) rename assets/{003-naval.html-D-e1jHRy.js => 003-naval.html-Cgl8Tfeb.js} (99%) rename assets/{004-backing-services.html-BU9TVUpC.js => 004-backing-services.html-d053y8dM.js} (98%) rename assets/{004-the-courage-to-be-hated.html-C3nKxC1V.js => 004-the-courage-to-be-hated.html-DUfzzjRY.js} (98%) rename assets/{004-xiaomi-entrepreneurial-thinking.html-5OdYnxWt.js => 004-xiaomi-entrepreneurial-thinking.html-BCygaWwM.js} (99%) rename assets/{005-build-release-run.html-DXvVYxAI.js => 005-build-release-run.html-C_eqmPUo.js} (98%) rename assets/{005-devilish-chatting-techniques.html-BQgV7FQe.js => 005-devilish-chatting-techniques.html-yREWOw9j.js} (98%) rename assets/{005-small-and-beautiful.html-BguQ-TEF.js => 005-small-and-beautiful.html-CXAbnsZT.js} (99%) rename assets/{006-lean-entrepreneurial-practice.html-DxZ4DEfK.js => 006-lean-entrepreneurial-practice.html-C-ACJWzO.js} (99%) create mode 100644 assets/006-low-risk-entrepreneurship.html-PiGZ1Hcf.js rename assets/{006-processes.html-PQNeUWrx.js => 006-processes.html-CiX1ZK1e.js} (98%) rename assets/{007-island-economics.html-BQdhw1NV.js => 007-island-economics.html-D50o5pCb.js} (99%) rename assets/{007-port-binding.html-5zvAZ7Uu.js => 007-port-binding.html-DdoumpZG.js} (97%) rename assets/{008-concurrency.html-C9yJTBMF.js => 008-concurrency.html-CHlHe31d.js} (98%) rename assets/{008-micro-habits-slimming.html-DC76RlLZ.js => 008-micro-habits-slimming.html-B7Ku9Ih6.js} (99%) rename assets/{009-disposability.html-YYnQkiDh.js => 009-disposability.html-DpW9rlw5.js} (98%) rename assets/{009-introverts-communicate-the-bible.html-DyEf-zfw.js => 009-introverts-communicate-the-bible.html-BSvctGL9.js} (98%) rename assets/{010-dev-prod-parity.html-6Dg87FXo.js => 010-dev-prod-parity.html-Hq-Q3YXn.js} (98%) rename "assets/010-\345\260\217\347\216\213\345\255\220.html-DpF9cDJi.js" => "assets/010-\345\260\217\347\216\213\345\255\220.html-CIg6Zfpz.js" (97%) rename assets/{011-logs.html-DF3YswRh.js => 011-logs.html-DMqKoo1n.js} (98%) rename assets/{011-rockefeller-letters.html-xT3XBJEQ.js => 011-rockefeller-letters.html-Djo_xIIJ.js} (99%) rename assets/{012-admin-processes.html-BsVbs3RW.js => 012-admin-processes.html-BF1MZhXi.js} (98%) rename assets/{012-autobiography-of-franklin.html-D2HqNmSa.js => 012-autobiography-of-franklin.html-BpfRRZKr.js} (99%) rename assets/{013-secret.html-DrWH3UIQ.js => 013-secret.html-DJJMPjUU.js} (98%) rename assets/{014-quotations-from-kazuo-inamori.html-DtQ7fJCV.js => 014-quotations-from-kazuo-inamori.html-DK69K60U.js} (98%) rename assets/{015-entertain-oneself-to-death.html-25tPWoFC.js => 015-entertain-oneself-to-death.html-B5H-dasr.js} (99%) rename assets/{016-changed-my-life-by-learning-english.html-N66A6BX3.js => 016-changed-my-life-by-learning-english.html-CPjXV3Xe.js} (99%) rename assets/{017-biblical-wisdom.html-B5CHtaoM.js => 017-biblical-wisdom.html-4jKkvJns.js} (98%) rename assets/{018-desire-and-dignity.html-UmwJOa0K.js => 018-desire-and-dignity.html-C_rjUwoi.js} (99%) rename assets/{019-rural-china.html-D_D8w-vu.js => 019-rural-china.html-B2zejjSr.js} (99%) rename assets/{021-addicted.html-D8v-7oR9.js => 021-addicted.html-PVwbcCu-.js} (99%) rename assets/{022-excellent-sheep.html-DseGRHOf.js => 022-excellent-sheep.html-B5hvhU1e.js} (99%) rename assets/{404.html-CGRfCgAP.js => 404.html-CjZ4flCW.js} (93%) rename "assets/GET\345\222\214POST.html-BPLasswN.js" => "assets/GET\345\222\214POST.html-Dvujndbz.js" (98%) rename "assets/HTTP\345\222\214HTTPS.html-CYv0fRc1.js" => "assets/HTTP\345\222\214HTTPS.html-CEW_EhML.js" (98%) rename "assets/JS\346\225\260\345\255\227\347\262\276\345\272\246\344\270\242\345\244\261\351\227\256\351\242\230.html-BNq6k-BX.js" => "assets/JS\346\225\260\345\255\227\347\262\276\345\272\246\344\270\242\345\244\261\351\227\256\351\242\230.html-CYAMyiCx.js" (98%) delete mode 100644 assets/SearchResult-BhHM-94f.js create mode 100644 assets/SearchResult-DX69bCr2.js rename assets/{WordCard-DIHApE6q.js => WordCard-CtytuN7W.js} (78%) rename assets/{abstract-factory.html-Wu5LLP-V.js => abstract-factory.html-D18YVWOO.js} (99%) rename assets/{adapter.html-DjsE011W.js => adapter.html-DQLmqzpw.js} (99%) rename assets/{adb-wireless-debug.html-BaIOZTa9.js => adb-wireless-debug.html-G1B5jZF7.js} (98%) rename assets/{android-compose-toggle-theme.html-Brs5hZ4b.js => android-compose-toggle-theme.html-BonZxZaP.js} (99%) rename assets/{angular-i18n.html-96EcSr1B.js => angular-i18n.html-4oaPX1f4.js} (99%) rename assets/{app-BLyK9ZJy.js => app-BSa8cFh0.js} (59%) rename assets/{app-deployment-evolution.html-B1ZbtAoX.js => app-deployment-evolution.html-CqbAAGOt.js} (99%) rename "assets/apply\343\200\201call\343\200\201bind.html-FjN1eK2s.js" => "assets/apply\343\200\201call\343\200\201bind.html-vYmZkFju.js" (98%) rename assets/{arc-DOfUZrI2.js => arc-BF8xpIg2.js} (96%) rename assets/{argocd.html-pQvbjtMj.js => argocd.html-CAOH8OYQ.js} (99%) rename "assets/arguments\345\257\271\350\261\241.html-DbOI2hAS.js" => "assets/arguments\345\257\271\350\261\241.html-B1Pz4srF.js" (97%) rename assets/{azure-login.html-C2WjpbXp.js => azure-login.html-CW2Tg46q.js} (99%) rename assets/{blockDiagram-9f4a6865-COqBg1lm.js => blockDiagram-9f4a6865-D05qY16E.js} (98%) rename assets/{bridge.html-VXpPTkm3.js => bridge.html-CyV3bdrh.js} (99%) rename assets/{builder.html-6l2usi86.js => builder.html-B0eKILcP.js} (99%) rename assets/{c4Diagram-ae766693-B14XA8T1.js => c4Diagram-ae766693-BLrDyQgN.js} (99%) rename assets/{chain-of-responsibility.html-0BcdiADK.js => chain-of-responsibility.html-BksNeTnb.js} (99%) create mode 100644 assets/channel-BhWPTxGu.js delete mode 100644 assets/channel-CT1eHIs8.js rename assets/{classDiagram-fb54d2a0-DkymCJlp.js => classDiagram-fb54d2a0-D7fVwVaf.js} (97%) rename assets/{classDiagram-v2-a2b738ad-7ho5Pg0E.js => classDiagram-v2-a2b738ad-DJ0ZJHYu.js} (92%) rename assets/{classical-layout.html-DsIh35a_.js => classical-layout.html-BAaKS8KI.js} (99%) delete mode 100644 assets/clone-BNKEMwkU.js create mode 100644 assets/clone-DZy5wdD8.js rename assets/{command.html-zpn787bM.js => command.html-ja-KViWA.js} (99%) rename assets/{components-share-data.html-DEHhkM7l.js => components-share-data.html-CAPYtWK_.js} (99%) rename assets/{composite.html-Bw9sukCu.js => composite.html-D4Q91ot1.js} (99%) rename assets/{contribute.html-n4axwz4J.js => contribute.html-DiBtGwJa.js} (99%) rename assets/{contribute.html-DStPuMz0.js => contribute.html-DyVlnPhx.js} (99%) rename assets/{contribution-guide.html-BkK6AUgX.js => contribution-guide.html-CNV93BuF.js} (99%) rename assets/{contribution-guide.html-DFwkBPLx.js => contribution-guide.html-xMZ-uu8m.js} (99%) rename assets/{create-request.html-DKjZdQP4.js => create-request.html-C6tXKLFg.js} (99%) rename assets/{create-request.html-B4nOTG3s.js => create-request.html-vnXUgMlO.js} (99%) rename assets/{createText-ca0c5216-DVRCbijZ.js => createText-ca0c5216-BWPb9cNn.js} (99%) rename assets/{cross-domain.html-Dq4Ypu1w.js => cross-domain.html-DngXa6Oa.js} (99%) rename assets/{custom-decorator.html-Cdr2pDf7.js => custom-decorator.html-DewcEI46.js} (99%) rename assets/{debounce-throttle.html-Dfl2Vj7I.js => debounce-throttle.html-8nVLpaD-.js} (98%) rename assets/{decorator.html-DOJkfU3t.js => decorator.html-CrVuLbBN.js} (99%) rename assets/{docker-architecture.html-DAdK6H_Q.js => docker-architecture.html-D8_QhbIq.js} (98%) rename assets/{docker-image-build.html-CZwg1zYd.js => docker-image-build.html-D9lj3ET4.js} (99%) rename assets/{docker-image-structure.html-Bq9JKLEi.js => docker-image-structure.html-BRk-bkgw.js} (98%) rename assets/{docker-installation.html-BBjEo4iD.js => docker-installation.html-DhBFg_hi.js} (99%) rename assets/{docker-use.html-B0lD3A5V.js => docker-use.html-8ucPnw8W.js} (99%) rename assets/{edges-066a5561-PXxYykcF.js => edges-066a5561-D-q6OPYu.js} (99%) rename assets/{erDiagram-09d1c15f-CvJnm2wY.js => erDiagram-09d1c15f-BbCEQLmo.js} (99%) rename assets/{facade.html-ByUeF5P7.js => facade.html-DgrJ6BJA.js} (99%) rename assets/{factory-method.html-DzmDLQ0_.js => factory-method.html-Cqrklfa7.js} (99%) rename assets/{flex-layout.html-Z9RzFOgN.js => flex-layout.html-QgaDp0-Z.js} (99%) rename assets/{flowDb-c1833063-BvjlaTwY.js => flowDb-c1833063-Bd2v-rPF.js} (99%) rename assets/{flowDiagram-b222e15a-auXjMASI.js => flowDiagram-b222e15a-Ciceere4.js} (97%) delete mode 100644 assets/flowDiagram-v2-13329dc7-B9dJc35H.js create mode 100644 assets/flowDiagram-v2-13329dc7-DNSf8MVo.js rename assets/{flowchart-elk-definition-ae0efee6-BPQAlJ0v.js => flowchart-elk-definition-ae0efee6-byvaK7aQ.js} (99%) rename assets/{flyweight.html-DhgRwv1u.js => flyweight.html-khO-06ds.js} (99%) rename assets/{ganttDiagram-b62c793e-eKAkh25_.js => ganttDiagram-b62c793e-DRmNDmyU.js} (99%) rename assets/{generic-function.html-BSF7rs36.js => generic-function.html-BIbNnbwB.js} (99%) rename assets/{git-installation.html-Ct9_nJiT.js => git-installation.html-BQLFVXJr.js} (99%) rename assets/{git-tag.html-Bc8xXnd-.js => git-tag.html-Mx9u7Wq0.js} (99%) rename assets/{git-use.html-BvmFr3U4.js => git-use.html-CZGAVEP0.js} (99%) rename assets/{gitGraphDiagram-942e62fe-CgRn3aZN.js => gitGraphDiagram-942e62fe-DTaPcPyj.js} (99%) rename assets/{graph-Bd3fjTn8.js => graph-Qf59IWBS.js} (99%) rename assets/{grid-layout.html-OjUOD_yh.js => grid-layout.html-BJqOKAws.js} (99%) rename assets/{history-of-javascript.html-DCfoyA9S.js => history-of-javascript.html-CJoiSEgi.js} (99%) rename assets/{how-to-use.html-yvK2kVAf.js => how-to-use.html-Df7evFYJ.js} (98%) rename assets/{how-to-use.html-B2OjJnxe.js => how-to-use.html-QQkFaj57.js} (98%) rename assets/{human-weakness.html-CX1gm9vJ.js => human-weakness.html-3JscoAxt.js} (99%) rename assets/{index-01f381cb-C0vALJJK.js => index-01f381cb-CLzuZxXD.js} (96%) rename assets/{index.html-BYOuHqGL.js => index.html-442_0BoN.js} (93%) rename assets/{index.html-xC86tdB3.js => index.html-7_htggJc.js} (95%) rename assets/{index.html-ByYI5bBM.js => index.html-B--VeDuB.js} (99%) rename assets/{index.html-BIXYqJe2.js => index.html-BBAY8kzd.js} (95%) rename assets/{index.html-W6zBPAHf.js => index.html-BBZ-UWKB.js} (95%) rename assets/{index.html-vqqXZDmF.js => index.html-BDQc6rI7.js} (98%) rename assets/{index.html-Bq3aqi-a.js => index.html-BECZYh5k.js} (95%) rename assets/{index.html-BKb90yGU.js => index.html-BEILxa9L.js} (95%) rename assets/{index.html-DRk4K6B0.js => index.html-BEXohZli.js} (95%) rename assets/{index.html-BtHx2QpR.js => index.html-BFRJrx4i.js} (95%) rename assets/{index.html-yPCDSSRB.js => index.html-BPjJKngv.js} (95%) rename assets/{index.html-OBp4GXmd.js => index.html-BQTIvK78.js} (93%) rename assets/{index.html-CjOsnn8U.js => index.html-BrBK_lGu.js} (98%) rename assets/{index.html-BM3l3NJU.js => index.html-C-FT5TcK.js} (99%) rename assets/{index.html-DrsyYefh.js => index.html-C8dMdebp.js} (99%) rename assets/{index.html-DDe17mRU.js => index.html-CA0wOLSR.js} (95%) rename assets/{index.html-CTwfMSoe.js => index.html-CA9GwR5b.js} (94%) rename assets/{index.html-IZCWuNPl.js => index.html-CE--NcW2.js} (95%) rename assets/{index.html-BJd4c1Mt.js => index.html-CHno9ym-.js} (98%) rename assets/{index.html-Brn939rB.js => index.html-CRR3bmkZ.js} (98%) rename assets/{index.html-JunUIZOc.js => index.html-CU1tcaYR.js} (93%) rename assets/{index.html-BW3MSdrG.js => index.html-CzVhMQ8i.js} (93%) rename assets/{index.html-CWHLjlxv.js => index.html-D0d6l9g2.js} (98%) rename assets/{index.html-Bm0ydy6q.js => index.html-D7Q7APMY.js} (95%) rename assets/{index.html-jUfzWAal.js => index.html-DN8J3LBn.js} (95%) rename assets/{index.html-Dg-5FtzE.js => index.html-DNI_yerb.js} (98%) rename assets/{index.html-DJHLZ2ri.js => index.html-DOn0miG_.js} (95%) rename assets/{index.html-BDg5NsVa.js => index.html-DPisnqRp.js} (95%) rename assets/{index.html-mlTZ9KWn.js => index.html-DUBkicuy.js} (98%) rename assets/{index.html-DNtUiDEP.js => index.html-DaIlkqyf.js} (98%) rename assets/{index.html-bJIw4wiH.js => index.html-Dio_lk3z.js} (95%) rename assets/{index.html-C6v0fv_i.js => index.html-DjjexhjN.js} (95%) rename assets/{index.html-CLCzT4cm.js => index.html-Dz3vdB74.js} (98%) rename assets/{index.html-C6gjscMY.js => index.html-G-UghoaC.js} (98%) rename assets/{index.html-DstrKOuP.js => index.html-R-10JjXe.js} (95%) rename assets/{index.html-BKlFuXNy.js => index.html-_ztMlTab.js} (95%) rename assets/{index.html-DGnA2D96.js => index.html-fo57XW3Z.js} (95%) rename assets/{index.html-Cn0-1OB3.js => index.html-lJje50V4.js} (98%) rename assets/{index.html-BTOqXWty.js => index.html-qe9rS8Zk.js} (95%) rename assets/{index.html-Eo1iEqhj.js => index.html-yATyb_At.js} (94%) rename assets/{infoDiagram-94cd232f-ploXCKgx.js => infoDiagram-94cd232f-gtnc2w-f.js} (98%) rename assets/{iterator.html-CckuVqGa.js => iterator.html-QU1R76zp.js} (99%) rename assets/{journeyDiagram-6625b456-Dwt9YhgB.js => journeyDiagram-6625b456-INvQxnYb.js} (98%) rename assets/{js-full-stack.html-D_YQ3YVv.js => js-full-stack.html-CrboZL7D.js} (99%) rename assets/{k8s-release-strategy.html-DbJ1H0-h.js => k8s-release-strategy.html-D1be4wgQ.js} (99%) rename assets/{karma-config.html-DdxmtQ3K.js => karma-config.html-Do7D2C9w.js} (99%) rename assets/{layout-Cgj_EUUW.js => layout-BTRrMYHP.js} (99%) rename assets/{line-XBQIKVte.js => line-4hoYYRzw.js} (93%) rename assets/{linear-D86opavn.js => linear-Dr9lAGyz.js} (99%) rename assets/{make-npm-lib.html-BaLa_mBq.js => make-npm-lib.html-DSasP1Ka.js} (99%) rename assets/{mediator.html-CGoyAa8j.js => mediator.html-xqpIWDq-.js} (99%) rename assets/{memento.html-CLlR2vRm.js => memento.html-OvYYHGi_.js} (99%) rename assets/{mermaid.core-DYSj9BM_.js => mermaid.core-9ynoU9_i.js} (98%) rename assets/{mindmap-definition-307c710a-CBktOF_5.js => mindmap-definition-307c710a-DtfeaW6R.js} (99%) rename assets/{nonviolent-communication.html-B53Ryvo4.js => nonviolent-communication.html-CPBsxeJ5.js} (98%) rename assets/{observer.html-9_C195L8.js => observer.html-DSrDqkvF.js} (99%) rename assets/{pieDiagram-bb1d19e5-DckDJb6Q.js => pieDiagram-bb1d19e5-CUXYxx8p.js} (98%) rename assets/{prototype.html-8ajIxDam.js => prototype.html-C1r-5LRr.js} (99%) rename assets/{proxy.html-D5hZb8Uf.js => proxy.html-CBUlxhqz.js} (99%) rename "assets/px\343\200\201em\343\200\201rem\343\200\201vh\343\200\201vw.html-DPhcOAED.js" => "assets/px\343\200\201em\343\200\201rem\343\200\201vh\343\200\201vw.html-CI-pCqRO.js" (97%) rename assets/{quadrantDiagram-c759a472-DzuHb0bI.js => quadrantDiagram-c759a472-C5xLD7iB.js} (99%) rename assets/{requirementDiagram-87253d64-tnWV71zV.js => requirementDiagram-87253d64-CzRXAlXz.js} (98%) rename assets/{sankeyDiagram-707fac0f-B78HvI5b.js => sankeyDiagram-707fac0f-B4DprkzH.js} (99%) rename assets/{sealed-secrets-client-side.html-BD2OyOLa.js => sealed-secrets-client-side.html-DRSNRzib.js} (99%) rename assets/{selection-sort.html--xn9tGKa.js => selection-sort.html-NY7mNJ_4.js} (98%) rename assets/{selection-sort.html-VEta-KXx.js => selection-sort.html-njwSqnNX.js} (98%) rename assets/{sequenceDiagram-6894f283-aH9zBUm_.js => sequenceDiagram-6894f283-Ceowvx2P.js} (99%) rename assets/{sftp-usage.html-CO07ahcX.js => sftp-usage.html-BxUF5tYw.js} (99%) rename assets/{singleton.html-B1y_iO-_.js => singleton.html-aLBuWcjG.js} (99%) rename assets/{sort.html-CFiSWZCM.js => sort.html-1fSWpaEb.js} (99%) rename assets/{sort.html-DZfxn26Q.js => sort.html-BnRkuj-d.js} (99%) rename assets/{start-using.html-CGP1tZkO.js => start-using.html-B71qv67K.js} (99%) rename assets/{start-using.html-BFC0yotD.js => start-using.html-Cg5I1wB_.js} (99%) rename assets/{state.html-cuYqQBsU.js => state.html-Bku4FWRp.js} (99%) rename assets/{stateDiagram-5dee940d--5Enh3LR.js => stateDiagram-5dee940d-CdnhSnfF.js} (97%) rename assets/{stateDiagram-v2-1992cada-eeEJUXvK.js => stateDiagram-v2-1992cada-x-tlxLAL.js} (90%) rename "assets/state\345\222\214props.html-CYD9ymzQ.js" => "assets/state\345\222\214props.html-gfu7nakB.js" (98%) rename assets/{strategy.html-DLA0XV4y.js => strategy.html-BjlQmvob.js} (99%) rename assets/{styles-0784dbeb-B3hBkVVx.js => styles-0784dbeb-COR1d6MR.js} (99%) rename assets/{styles-483fbfea-C-98wyVX.js => styles-483fbfea-SMReKWq8.js} (98%) rename assets/{styles-b83b31c9-DZ-F2v0y.js => styles-b83b31c9-Dql2m8_F.js} (99%) rename assets/{svgDrawCommon-5e1cfd1d-UvcflA0w.js => svgDrawCommon-5e1cfd1d-B2yB1VOU.js} (95%) rename assets/{template-method.html-ButBn21i.js => template-method.html-DQLCUMq7.js} (99%) rename assets/{test-coverage-example.html-DgO5999B.js => test-coverage-example.html-ChRD7921.js} (98%) rename "assets/this\345\257\271\350\261\241.html-DnU7gRt8.js" => "assets/this\345\257\271\350\261\241.html-Coax16p4.js" (98%) rename assets/{timeline-definition-bf702344-CFGI5ENQ.js => timeline-definition-bf702344-DXpg61lm.js} (99%) rename assets/{transaction-isolation-level.html-AnQn_T2L.js => transaction-isolation-level.html--AMNUCzu.js} (98%) rename "assets/typeof\345\222\214instanceof.html-CQtQooo5.js" => "assets/typeof\345\222\214instanceof.html-DLKZruzo.js" (98%) rename assets/{usage-of-state.html-CcyfTEP_.js => usage-of-state.html-CSau87ub.js} (99%) rename "assets/var\343\200\201let\343\200\201const.html-DvA3jqBm.js" => "assets/var\343\200\201let\343\200\201const.html-By6eU2M5.js" (98%) rename assets/{visitor.html-DtkMbRgK.js => visitor.html-D3II45NS.js} (99%) rename assets/{xiaomi.html-DhVwP4Aw.js => xiaomi.html-Cfhsz-S6.js} (98%) rename assets/{xiaomi.html-3MxuZCp2.js => xiaomi.html-Cj_NhqOu.js} (98%) rename assets/{xychartDiagram-f11f50a6-Z_qjVYYu.js => xychartDiagram-f11f50a6-dYc5N6Pk.js} (99%) rename "assets/\344\273\200\344\271\210\346\230\257JavaScript.html-CwIdVKGi.js" => "assets/\344\273\200\344\271\210\346\230\257JavaScript.html-DpPTW-9U.js" (97%) rename "assets/\344\275\234\347\224\250\345\237\237.html-CHCt_X4Y.js" => "assets/\344\275\234\347\224\250\345\237\237.html-CH0ewwLP.js" (98%) rename "assets/\345\207\275\346\225\260\346\237\257\351\207\214\345\214\226.html-CniUOAZ3.js" => "assets/\345\207\275\346\225\260\346\237\257\351\207\214\345\214\226.html-DqYSm1x6.js" (99%) rename "assets/\345\211\251\344\275\231\345\217\202\346\225\260.html-DjmiH_jD.js" => "assets/\345\211\251\344\275\231\345\217\202\346\225\260.html-gNas6dNZ.js" (98%) rename "assets/\345\222\214___.html-BqWbjAWt.js" => "assets/\345\222\214___.html-V67F7fio.js" (98%) rename "assets/\345\223\210\345\270\214\350\267\257\347\224\261\345\222\214History\350\267\257\347\224\261.html-DJjWAC2X.js" => "assets/\345\223\210\345\270\214\350\267\257\347\224\261\345\222\214History\350\267\257\347\224\261.html-BIHIUYy6.js" (98%) rename "assets/\346\267\261\346\213\267\350\264\235\345\222\214\346\265\205\346\213\267\350\264\235.html-DhcWyWfj.js" => "assets/\346\267\261\346\213\267\350\264\235\345\222\214\346\265\205\346\213\267\350\264\235.html-Cpazt2UH.js" (98%) rename "assets/\347\256\255\345\244\264\345\207\275\346\225\260.html-Cu5dB0ds.js" => "assets/\347\256\255\345\244\264\345\207\275\346\225\260.html-CMWd-7na.js" (98%) rename "assets/\351\227\255\345\214\205.html-128NLDXX.js" => "assets/\351\227\255\345\214\205.html-CAQNZh4l.js" (98%) create mode 100644 reading/2024/006-low-risk-entrepreneurship.html diff --git a/404.html b/404.html index 559501c71..44123761c 100644 --- a/404.html +++ b/404.html @@ -30,11 +30,11 @@ Guo's Page - + -
跳至主要內容
- +
跳至主要內容
+ diff --git a/article/android-compose-toggle-theme.html b/article/android-compose-toggle-theme.html index 067e4acda..2edd5819a 100644 --- a/article/android-compose-toggle-theme.html +++ b/article/android-compose-toggle-theme.html @@ -30,7 +30,7 @@ Android Compose 切换应用主题 | Guo's Page - + @@ -354,6 +354,6 @@ themeTypeState.value = newTheme DataStoreUtils.putSyncData("APP_THEME", newTheme) }
- + diff --git a/article/app-deployment-evolution.html b/article/app-deployment-evolution.html index 0e6d266d7..8052b99c3 100644 --- a/article/app-deployment-evolution.html +++ b/article/app-deployment-evolution.html @@ -30,11 +30,11 @@ 应用部署的演变 | Guo's Page - +
跳至主要內容
- + diff --git a/article/cross-domain.html b/article/cross-domain.html index d44eaebde..839c664a1 100644 --- a/article/cross-domain.html +++ b/article/cross-domain.html @@ -30,7 +30,7 @@ 跨域问题 | Guo's Page - + @@ -109,6 +109,6 @@ }; } }
- + diff --git a/article/debounce-throttle.html b/article/debounce-throttle.html index c9a6dce80..bd9542599 100644 --- a/article/debounce-throttle.html +++ b/article/debounce-throttle.html @@ -30,11 +30,11 @@ 防抖和节流 | Guo's Page - +
跳至主要內容
- + diff --git a/article/history-of-javascript.html b/article/history-of-javascript.html index 16d2569d7..0b8a934ff 100644 --- a/article/history-of-javascript.html +++ b/article/history-of-javascript.html @@ -30,11 +30,11 @@ JavaScript的发展史 | Guo's Page - +
跳至主要內容
- + diff --git a/article/index.html b/article/index.html index 2ad183769..6bc891ff0 100644 --- a/article/index.html +++ b/article/index.html @@ -30,11 +30,11 @@ 专栏 | Guo's Page - +
跳至主要內容
- + diff --git a/article/make-npm-lib.html b/article/make-npm-lib.html index e9cb35989..5d7851385 100644 --- a/article/make-npm-lib.html +++ b/article/make-npm-lib.html @@ -30,7 +30,7 @@ 制作 npm 第三方库 | Guo's Page - + @@ -138,6 +138,6 @@ run: npm publish env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- + diff --git a/article/sftp-usage.html b/article/sftp-usage.html index 3bc15fb2e..3f319740a 100644 --- a/article/sftp-usage.html +++ b/article/sftp-usage.html @@ -30,7 +30,7 @@ sftp 使用指南 | Guo's Page - + @@ -47,6 +47,6 @@ # 例如:put d:/temp/test/. temp/test

退出连接

exit

删除旧的公钥记录

当连接的服务器公钥发生变化时,尝试连接时会报错,需要删除旧的公钥记录。

ssh-keygen -R [hostname-or-IP-address]
 
 # 例如:ssh-keygen -R 192.168.0.1
- + diff --git a/assets/001-codebase.html-BenIOnKZ.js b/assets/001-codebase.html-KE09tOka.js similarity index 98% rename from assets/001-codebase.html-BenIOnKZ.js rename to assets/001-codebase.html-KE09tOka.js index 7af6bcae1..787a558f1 100644 --- a/assets/001-codebase.html-BenIOnKZ.js +++ b/assets/001-codebase.html-KE09tOka.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as a,a as n}from"./app-BLyK9ZJy.js";const i="/assets/image/software-engineering/codebase-deploys.png",o={},r=n('

基准代码

核心思想

在12-Factor APP中,一份基准代码应与一个应用保持一一对应关系,但可以存在多份部署。

基准代码的定义

基准代码与应用的关系

一份基准代码对应一个应用,多份基准代码对应多个应用,多个应用组成一个分布式系统。

在分布式系统中,每一个组件都是一个应用,每个应用都可以使用12-Factor进行开发。

多个应用共享一份基准代码有悖于12-Factor的原则,可以将共享代码拆分为独立的类库,然后将类库发布到代码仓库或包管理器中。

部署的多样性

一份基准代码的多份部署中,每份部署都相当于一个应用的实例,例如:开发环境、测试环境、生产环境等。

所有部署的基准代码相同,但可以有不同的版本。

',13),p=[r];function s(c,l){return t(),a("div",null,p)}const h=e(o,[["render",s],["__file","001-codebase.html.vue"]]),m=JSON.parse(`{"path":"/dump/software-engineering/twelve-factor/001-codebase.html","title":"基准代码","lang":"zh-CN","frontmatter":{"date":"2024-03-06T00:00:00.000Z","description":"基准代码 核心思想 在12-Factor APP中,一份基准代码应与一个应用保持一一对应关系,但可以存在多份部署。 基准代码的定义 在集中式版本控制系统(如SVN)中,基准代码是指单一的代码库。 在分布式版本控制系统(如Git)中,基准代码是指最上游的代码库。 基准代码与应用的关系 一份基准代码对应一个应用,多份基准代码对应多个应用,多个应用组成一个分...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/dump/software-engineering/twelve-factor/001-codebase.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"基准代码"}],["meta",{"property":"og:description","content":"基准代码 核心思想 在12-Factor APP中,一份基准代码应与一个应用保持一一对应关系,但可以存在多份部署。 基准代码的定义 在集中式版本控制系统(如SVN)中,基准代码是指单一的代码库。 在分布式版本控制系统(如Git)中,基准代码是指最上游的代码库。 基准代码与应用的关系 一份基准代码对应一个应用,多份基准代码对应多个应用,多个应用组成一个分..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:image","content":"https://guoxicheng.top/assets/image/software-engineering/codebase-deploys.png"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-19T03:23:52.000Z"}],["meta",{"property":"article:published_time","content":"2024-03-06T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-19T03:23:52.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"基准代码\\",\\"image\\":[\\"https://guoxicheng.top/assets/image/software-engineering/codebase-deploys.png\\"],\\"datePublished\\":\\"2024-03-06T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-19T03:23:52.000Z\\",\\"author\\":[]}"]]},"headers":[{"level":2,"title":"核心思想","slug":"核心思想","link":"#核心思想","children":[]},{"level":2,"title":"基准代码的定义","slug":"基准代码的定义","link":"#基准代码的定义","children":[]},{"level":2,"title":"基准代码与应用的关系","slug":"基准代码与应用的关系","link":"#基准代码与应用的关系","children":[]},{"level":2,"title":"部署的多样性","slug":"部署的多样性","link":"#部署的多样性","children":[]}],"git":{"createdTime":1709540171000,"updatedTime":1718767432000},"readingTime":{"minutes":1.03,"words":308},"filePathRelative":"dump/software-engineering/twelve-factor/001-codebase.md","localizedDate":"2024年3月6日","autoDesc":true,"excerpt":"\\n
\\"\\"
\\n

核心思想

\\n

在12-Factor APP中,一份基准代码应与一个应用保持一一对应关系,但可以存在多份部署。

\\n

基准代码的定义

\\n"}`);export{h as comp,m as data}; +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as a,a as n}from"./app-BSa8cFh0.js";const i="/assets/image/software-engineering/codebase-deploys.png",o={},r=n('

基准代码

核心思想

在12-Factor APP中,一份基准代码应与一个应用保持一一对应关系,但可以存在多份部署。

基准代码的定义

基准代码与应用的关系

一份基准代码对应一个应用,多份基准代码对应多个应用,多个应用组成一个分布式系统。

在分布式系统中,每一个组件都是一个应用,每个应用都可以使用12-Factor进行开发。

多个应用共享一份基准代码有悖于12-Factor的原则,可以将共享代码拆分为独立的类库,然后将类库发布到代码仓库或包管理器中。

部署的多样性

一份基准代码的多份部署中,每份部署都相当于一个应用的实例,例如:开发环境、测试环境、生产环境等。

所有部署的基准代码相同,但可以有不同的版本。

',13),p=[r];function s(c,l){return t(),a("div",null,p)}const h=e(o,[["render",s],["__file","001-codebase.html.vue"]]),m=JSON.parse(`{"path":"/dump/software-engineering/twelve-factor/001-codebase.html","title":"基准代码","lang":"zh-CN","frontmatter":{"date":"2024-03-06T00:00:00.000Z","description":"基准代码 核心思想 在12-Factor APP中,一份基准代码应与一个应用保持一一对应关系,但可以存在多份部署。 基准代码的定义 在集中式版本控制系统(如SVN)中,基准代码是指单一的代码库。 在分布式版本控制系统(如Git)中,基准代码是指最上游的代码库。 基准代码与应用的关系 一份基准代码对应一个应用,多份基准代码对应多个应用,多个应用组成一个分...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/dump/software-engineering/twelve-factor/001-codebase.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"基准代码"}],["meta",{"property":"og:description","content":"基准代码 核心思想 在12-Factor APP中,一份基准代码应与一个应用保持一一对应关系,但可以存在多份部署。 基准代码的定义 在集中式版本控制系统(如SVN)中,基准代码是指单一的代码库。 在分布式版本控制系统(如Git)中,基准代码是指最上游的代码库。 基准代码与应用的关系 一份基准代码对应一个应用,多份基准代码对应多个应用,多个应用组成一个分..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:image","content":"https://guoxicheng.top/assets/image/software-engineering/codebase-deploys.png"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-19T03:23:52.000Z"}],["meta",{"property":"article:published_time","content":"2024-03-06T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-19T03:23:52.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"基准代码\\",\\"image\\":[\\"https://guoxicheng.top/assets/image/software-engineering/codebase-deploys.png\\"],\\"datePublished\\":\\"2024-03-06T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-19T03:23:52.000Z\\",\\"author\\":[]}"]]},"headers":[{"level":2,"title":"核心思想","slug":"核心思想","link":"#核心思想","children":[]},{"level":2,"title":"基准代码的定义","slug":"基准代码的定义","link":"#基准代码的定义","children":[]},{"level":2,"title":"基准代码与应用的关系","slug":"基准代码与应用的关系","link":"#基准代码与应用的关系","children":[]},{"level":2,"title":"部署的多样性","slug":"部署的多样性","link":"#部署的多样性","children":[]}],"git":{"createdTime":1709540171000,"updatedTime":1718767432000},"readingTime":{"minutes":1.03,"words":308},"filePathRelative":"dump/software-engineering/twelve-factor/001-codebase.md","localizedDate":"2024年3月6日","autoDesc":true,"excerpt":"\\n
\\"\\"
\\n

核心思想

\\n

在12-Factor APP中,一份基准代码应与一个应用保持一一对应关系,但可以存在多份部署。

\\n

基准代码的定义

\\n"}`);export{h as comp,m as data}; diff --git a/assets/001-pyramid-principle.html-BFmEMeNM.js b/assets/001-pyramid-principle.html-B29R0TZU.js similarity index 99% rename from assets/001-pyramid-principle.html-BFmEMeNM.js rename to assets/001-pyramid-principle.html-B29R0TZU.js index 866607748..4f4995362 100644 --- a/assets/001-pyramid-principle.html-BFmEMeNM.js +++ b/assets/001-pyramid-principle.html-B29R0TZU.js @@ -1 +1 @@ -import{_ as p}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as e,c as t,a as r}from"./app-BLyK9ZJy.js";const i={},l=r('

金字塔原理

(美)芭芭拉·明托

对受众(包括读者、听众、观众或学员)来说,最容易理解的顺序是:先了解主要的、抽象的思想,然后了解次要的、为主要思想提供支持的思想。因为主要思想总是从次要思想概括总结得出,文章中所有思想的理想组织结构也必定是一个金字塔结构——由一个总的思想统领多组思想。在这种金字塔结构中,思想之间的联系方式可以是纵向的(vertically)——即任何一个层次上的思想都是对其下面一个层次上思想的总结;也可以是横向的(horizontally)——即多个思想因共同组成同一个逻辑推理过程,而被并列排在一起。

你可以很容易地使受众理解用金字塔结构组织的思想:先从金字塔的最顶端开始,沿各个分支向下展开。首先表达的主要思想,使受众对表达者的观点产生某种疑问,而主要思想(金字塔结构中的)下一层次上的思想将回答这些疑问。通过不断进行疑问/回答式的对话,受众就可以了解文章中的全部思想。


当你听别人讲话或看文章时,也会发生类似的组织思想的现象。你会将同时出现的或位置相邻的几个思想相联系,努力用某种逻辑模式组织它们。这种逻辑模式必定是金字塔结构,因为只有金字塔结构才能够满足大脑的两个需求:


最有效的表达方法是:先提出总的概念,再列出具体项目,即要自上而下地表达思想。


理清表达思想的顺序,是写出条理清晰文章的最重要方式,而清晰的顺序,就是先提出总结性思想,再提出被总结的具体思想。先总结后具体的表达顺序,你必须牢记。


因为你总是要不断地对思想进行归类和概括,直到没有可与之关联的思想可以继续概括,因此,你写的每一篇文章的结构必定只支持一个思想,即概括了所有各组思想的单一思想。这一思想应当就是你希望表达的思想,而所有在其之下的思想则越往下越具体、越详细(如果你正确构建了文章的结构),并且都对你希望表达的主题思想起着解释和支撑的作用。


金字塔中的思想以3种方式互相关联——向上、向下和横向。位于一组思想的上一个层次的思想是对这一组思想的概括,这一组思想则是对其上一层次思想的解释和支持。
文章中的思想必须符合以下规则:

1.纵向:文章中任一层次上的思想必须是其下一层次思想的概括。

2.横向:每组中的思想必须属于同一逻辑范畴。

3.横向:每组中的思想必须按逻辑顺序组织。


你在思维和写作中的主要活动,就是将较具体的思想概括抽象为新的思想。正如上文提到的,段落的主题就是对段落中各个句子的概括,章节的主题也是对章节中各个段落的概括,依此类推。


组织思想基本上只可能有4种逻辑顺序:


因为演绎推理、发现因果关系、化整为零和归纳总结是大脑可进行的仅有的4种分析活动,这4种顺序也是大脑可用于组织思想的仅有的4种顺序。


当考虑在下一结构层次上如何表述时,必须保证你的表述能回答在其上一个层次上的表述引起的疑问,同时还必须保证表述符合逻辑。也就是说,表述必须具有明确的归纳或演绎关系,但不可同时既具有归纳关系,又具有演绎关系。在组织思想时,归纳和演绎是仅有的两种可能的逻辑关系。


如果你选择以演绎法回答由某个思想引起的疑问,你就必须进行3段论式的论述。其中,第二个思想是对第一个思想的主语或谓语作出的表述,而第三个思想则从以上两个思想中得出推论。如果你选择以归纳法回答由某个思想引起的疑问,你就必须保证该组思想在逻辑上具有共同点,并且可以用同一个名词表示。


这种典型的讲故事式的呈现——背景、冲突、疑问、回答——能够使你确保在引导读者了解你的思维过程之前,你和读者是“站在同一位置上”。这种形式还能保证你将思想的重点一定放在文章的最前面。这也是判断你是否以最直接方式传递正确信息的方法。


叙述式的序言说明了发生“冲突”的“背景”,以及“冲突”引发的“疑问”,而这个“疑问”正是你的文章将要“回答”的。


这3种子结构(即纵向的疑问/回答式对话、横向的演绎或归纳推理、讲故事式的序言)能够帮助你找到构建金字塔所需的思想。


你可以利用你知道的这些知识,自上而下或自下而上地构建文章的金字塔结构。自上而下的方法通常比自下而上的方法更容易,因此,你应当首先尝试用自上而下的方法。


自上而下法构建金字塔的步骤:
1.提出主题思想。
2.设想受众的主要疑问。
3.写序言:背景-冲突-疑问-回答。
4.与受众进行疑问/回答式对话。
5.对受众的新疑问,重复进行疑问/回答式对话。


自下而上思考:
1.列出你想表达的所有思想要点。
2.找出各要点之间的逻辑关系。
3.得出结论。


文章的序言必须用讲故事的形式,也就是说,序言必须先介绍读者熟悉的某些“背景”,说明发生的“冲突”,并由此引发读者的“疑问”,然后针对该“疑问”给出“答案”。


我将演绎推理过程看做需要完成以下3个步骤:

  1. 阐述世界上已存在的某种情况。

  2. 阐述世界上同时存在的相关情况。如果第二个表述是针对第一个表述的主语或谓语的,则说明这两个表述相关。

  3. 说明这两种情况同时存在时隐含的意义。

演绎推理也可以是以下3个步骤:

  1. 出现的问题或存在的现象。

  2. 产生问题的根源、原因。

  3. 解决问题的方案。


演绎推理过程繁琐,主要是因为演绎推理必须从简单明了的思想推导出复杂的思想。

由于演绎推理非常繁琐,我建议在关键句层次上尽量避免使用演绎法论述,尽量用归纳法取而代之。为什么?因为归纳法更便于读者阅读和理解。


读者更关心“如何做”(how),在这种情况下,我们将得到一个使用归纳法的标准的金字塔结构。

读者不理解,而更关心“为什么”(why),在这种情况下,你需要用演绎法表达。


如果读者必须读完十几页,才能找到演绎推理的第一步和第二步之间的关系,又必须再读十几页才能找到第二步和第三步之间的关系,那么读者就无法快速理解这次演绎推理。因此,你应该尽量将演绎推理放在金字塔结构中较低的层次上,尽可能减少在演绎推理过程中插入其他干扰信息。在某个段落中使用演绎法是合适的,读者也很容易理解。但是,在较高的层次上,归纳法总是比演绎法更容易理解。


在连接演绎推理时,需要记住的是:1.演绎推理的过程不要超过4个步骤;2.推导出的结论不要超过两个。


在用归纳法进行创造性思维时,我们必须具备以下两项主要技能:


在进行归纳推理时,最重要的是找到一个能够表示该组所有思想的名词。这个词必须是一个单一名词,因为:

1.所有表示一类事物的词都是名词;

2.该组思想中必定有两个以上(含两个)该类思想。


记住:当你进行演绎推理时,推理过程的第二个思想必须是对第一个思想的主语或谓语的评述。如果不具有这一特点,就不是演绎推理而是归纳推理,你就应当能够用一个单一的名词概括这两个思想,以检验你归的类、分的组是否恰当。


注意:在归纳过程中,你通常需要保持主语不变,改变谓语;或者保持谓语不变、改变主语。


将一个思想与其他思想一起写入某篇文章中的唯一理由,就是这个思想有助于对一个更高层次上的思想提供解释或支持。只有当某一组中的思想用归纳法(具有类似的主语或谓语),或演绎法(第二点是对第一点的评述)适当关联时,才能合理地从中概括出较高层次上的思想。

总而言之,演绎关系的建立,要求推理过程中的第二步对第一步作出评述,并推导出一个结论。归纳关系则基于句子的结构。作者必须发现各个句子主语或谓语之间的相同点,并根据这一相同点得出结论。如果句子之间没有相同点,就无法得出结论,这些句子也就根本不属于这篇文章。

还要注意的是:不论你将几个句子组织在一起,是为了进行归纳推理,还是为了进行演绎推理,你的思维都会主动预期某个归纳式结论或演绎式结论的出现。大脑对归纳论述和演绎论述的完整性有一种预期,读者的这种预期,使读者将思维“投射”到前方,预测作者的下一个句子。如果读者预期的结果与作者实际的表述不同,读者就可能感到困惑、不解、烦躁。因此,你应当在呈现归纳或演绎过程之前,先告诉读者你的主题思想,以使读者能够容易地跟上你的思路。


当你写完全篇文章时,还必须仔细检查一下全文的结构,因为你可能发现自己犯了以下两种常见错误之一:


大脑的归纳分组分析活动只有以下3种

  1. 确定前因后果关系:时间(步骤)顺序

  2. 将整体分割为部分,或将部分组织为整体:结构(空间)顺序

  3. 将类似事务按重要性归为一组:程度(重要性)顺序


检查逻辑顺序是检查某一分组是否恰当的重要手段。当你遇到任何一组归纳性思想,需要找出其真实意义时,一定要先快速浏览一遍该组中的所有思想。你能否发现某种逻辑顺序(时间顺序、结构顺序、重要性顺序)?如果不能,你能否发现这种分组的基础(过程、流程、结构、类别),并采用某种逻辑顺序?如果某组中所列的思想很多,你能否发现它们具有某些共同特点,并根据这些共同特点将思想归纳、分组,然后使用逻辑顺序?

如果你确认某一组思想的划分既合理,又完整,你就可以推导出一个逻辑结论。


如果你已经得出了一个概括性的思想,你就可以在该思想的基础上用以下两种方式延续你的思路:

  1. 对其作进一步评论(演绎法)。

  2. 找出与之类似的思想(归纳法)。

',85),o=[l];function a(n,h){return e(),t("div",null,o)}const m=p(i,[["render",a],["__file","001-pyramid-principle.html.vue"]]),s=JSON.parse(`{"path":"/reading/2024/001-pyramid-principle.html","title":"金字塔原理","lang":"zh-CN","frontmatter":{"date":"2024-02-28T00:00:00.000Z","description":"金字塔原理 (美)芭芭拉·明托 对受众(包括读者、听众、观众或学员)来说,最容易理解的顺序是:先了解主要的、抽象的思想,然后了解次要的、为主要思想提供支持的思想。因为主要思想总是从次要思想概括总结得出,文章中所有思想的理想组织结构也必定是一个金字塔结构——由一个总的思想统领多组思想。在这种金字塔结构中,思想之间的联系方式可以是纵向的(verticall...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2024/001-pyramid-principle.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"金字塔原理"}],["meta",{"property":"og:description","content":"金字塔原理 (美)芭芭拉·明托 对受众(包括读者、听众、观众或学员)来说,最容易理解的顺序是:先了解主要的、抽象的思想,然后了解次要的、为主要思想提供支持的思想。因为主要思想总是从次要思想概括总结得出,文章中所有思想的理想组织结构也必定是一个金字塔结构——由一个总的思想统领多组思想。在这种金字塔结构中,思想之间的联系方式可以是纵向的(verticall..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-02-28T06:10:01.000Z"}],["meta",{"property":"article:published_time","content":"2024-02-28T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-02-28T06:10:01.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"金字塔原理\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2024-02-28T00:00:00.000Z\\",\\"dateModified\\":\\"2024-02-28T06:10:01.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1709100601000,"updatedTime":1709100601000},"readingTime":{"minutes":11.44,"words":3431},"filePathRelative":"reading/2024/001-pyramid-principle.md","localizedDate":"2024年2月28日","autoDesc":true,"excerpt":"\\n
\\n

(美)芭芭拉·明托

\\n
\\n

对受众(包括读者、听众、观众或学员)来说,最容易理解的顺序是:先了解主要的、抽象的思想,然后了解次要的、为主要思想提供支持的思想。因为主要思想总是从次要思想概括总结得出,文章中所有思想的理想组织结构也必定是一个金字塔结构——由一个总的思想统领多组思想。在这种金字塔结构中,思想之间的联系方式可以是纵向的(vertically)——即任何一个层次上的思想都是对其下面一个层次上思想的总结;也可以是横向的(horizontally)——即多个思想因共同组成同一个逻辑推理过程,而被并列排在一起。

\\n

你可以很容易地使受众理解用金字塔结构组织的思想:先从金字塔的最顶端开始,沿各个分支向下展开。首先表达的主要思想,使受众对表达者的观点产生某种疑问,而主要思想(金字塔结构中的)下一层次上的思想将回答这些疑问。通过不断进行疑问/回答式的对话,受众就可以了解文章中的全部思想。

"}`);export{m as comp,s as data}; +import{_ as p}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as e,c as t,a as r}from"./app-BSa8cFh0.js";const i={},l=r('

金字塔原理

(美)芭芭拉·明托

对受众(包括读者、听众、观众或学员)来说,最容易理解的顺序是:先了解主要的、抽象的思想,然后了解次要的、为主要思想提供支持的思想。因为主要思想总是从次要思想概括总结得出,文章中所有思想的理想组织结构也必定是一个金字塔结构——由一个总的思想统领多组思想。在这种金字塔结构中,思想之间的联系方式可以是纵向的(vertically)——即任何一个层次上的思想都是对其下面一个层次上思想的总结;也可以是横向的(horizontally)——即多个思想因共同组成同一个逻辑推理过程,而被并列排在一起。

你可以很容易地使受众理解用金字塔结构组织的思想:先从金字塔的最顶端开始,沿各个分支向下展开。首先表达的主要思想,使受众对表达者的观点产生某种疑问,而主要思想(金字塔结构中的)下一层次上的思想将回答这些疑问。通过不断进行疑问/回答式的对话,受众就可以了解文章中的全部思想。


当你听别人讲话或看文章时,也会发生类似的组织思想的现象。你会将同时出现的或位置相邻的几个思想相联系,努力用某种逻辑模式组织它们。这种逻辑模式必定是金字塔结构,因为只有金字塔结构才能够满足大脑的两个需求:


最有效的表达方法是:先提出总的概念,再列出具体项目,即要自上而下地表达思想。


理清表达思想的顺序,是写出条理清晰文章的最重要方式,而清晰的顺序,就是先提出总结性思想,再提出被总结的具体思想。先总结后具体的表达顺序,你必须牢记。


因为你总是要不断地对思想进行归类和概括,直到没有可与之关联的思想可以继续概括,因此,你写的每一篇文章的结构必定只支持一个思想,即概括了所有各组思想的单一思想。这一思想应当就是你希望表达的思想,而所有在其之下的思想则越往下越具体、越详细(如果你正确构建了文章的结构),并且都对你希望表达的主题思想起着解释和支撑的作用。


金字塔中的思想以3种方式互相关联——向上、向下和横向。位于一组思想的上一个层次的思想是对这一组思想的概括,这一组思想则是对其上一层次思想的解释和支持。
文章中的思想必须符合以下规则:

1.纵向:文章中任一层次上的思想必须是其下一层次思想的概括。

2.横向:每组中的思想必须属于同一逻辑范畴。

3.横向:每组中的思想必须按逻辑顺序组织。


你在思维和写作中的主要活动,就是将较具体的思想概括抽象为新的思想。正如上文提到的,段落的主题就是对段落中各个句子的概括,章节的主题也是对章节中各个段落的概括,依此类推。


组织思想基本上只可能有4种逻辑顺序:


因为演绎推理、发现因果关系、化整为零和归纳总结是大脑可进行的仅有的4种分析活动,这4种顺序也是大脑可用于组织思想的仅有的4种顺序。


当考虑在下一结构层次上如何表述时,必须保证你的表述能回答在其上一个层次上的表述引起的疑问,同时还必须保证表述符合逻辑。也就是说,表述必须具有明确的归纳或演绎关系,但不可同时既具有归纳关系,又具有演绎关系。在组织思想时,归纳和演绎是仅有的两种可能的逻辑关系。


如果你选择以演绎法回答由某个思想引起的疑问,你就必须进行3段论式的论述。其中,第二个思想是对第一个思想的主语或谓语作出的表述,而第三个思想则从以上两个思想中得出推论。如果你选择以归纳法回答由某个思想引起的疑问,你就必须保证该组思想在逻辑上具有共同点,并且可以用同一个名词表示。


这种典型的讲故事式的呈现——背景、冲突、疑问、回答——能够使你确保在引导读者了解你的思维过程之前,你和读者是“站在同一位置上”。这种形式还能保证你将思想的重点一定放在文章的最前面。这也是判断你是否以最直接方式传递正确信息的方法。


叙述式的序言说明了发生“冲突”的“背景”,以及“冲突”引发的“疑问”,而这个“疑问”正是你的文章将要“回答”的。


这3种子结构(即纵向的疑问/回答式对话、横向的演绎或归纳推理、讲故事式的序言)能够帮助你找到构建金字塔所需的思想。


你可以利用你知道的这些知识,自上而下或自下而上地构建文章的金字塔结构。自上而下的方法通常比自下而上的方法更容易,因此,你应当首先尝试用自上而下的方法。


自上而下法构建金字塔的步骤:
1.提出主题思想。
2.设想受众的主要疑问。
3.写序言:背景-冲突-疑问-回答。
4.与受众进行疑问/回答式对话。
5.对受众的新疑问,重复进行疑问/回答式对话。


自下而上思考:
1.列出你想表达的所有思想要点。
2.找出各要点之间的逻辑关系。
3.得出结论。


文章的序言必须用讲故事的形式,也就是说,序言必须先介绍读者熟悉的某些“背景”,说明发生的“冲突”,并由此引发读者的“疑问”,然后针对该“疑问”给出“答案”。


我将演绎推理过程看做需要完成以下3个步骤:

  1. 阐述世界上已存在的某种情况。

  2. 阐述世界上同时存在的相关情况。如果第二个表述是针对第一个表述的主语或谓语的,则说明这两个表述相关。

  3. 说明这两种情况同时存在时隐含的意义。

演绎推理也可以是以下3个步骤:

  1. 出现的问题或存在的现象。

  2. 产生问题的根源、原因。

  3. 解决问题的方案。


演绎推理过程繁琐,主要是因为演绎推理必须从简单明了的思想推导出复杂的思想。

由于演绎推理非常繁琐,我建议在关键句层次上尽量避免使用演绎法论述,尽量用归纳法取而代之。为什么?因为归纳法更便于读者阅读和理解。


读者更关心“如何做”(how),在这种情况下,我们将得到一个使用归纳法的标准的金字塔结构。

读者不理解,而更关心“为什么”(why),在这种情况下,你需要用演绎法表达。


如果读者必须读完十几页,才能找到演绎推理的第一步和第二步之间的关系,又必须再读十几页才能找到第二步和第三步之间的关系,那么读者就无法快速理解这次演绎推理。因此,你应该尽量将演绎推理放在金字塔结构中较低的层次上,尽可能减少在演绎推理过程中插入其他干扰信息。在某个段落中使用演绎法是合适的,读者也很容易理解。但是,在较高的层次上,归纳法总是比演绎法更容易理解。


在连接演绎推理时,需要记住的是:1.演绎推理的过程不要超过4个步骤;2.推导出的结论不要超过两个。


在用归纳法进行创造性思维时,我们必须具备以下两项主要技能:


在进行归纳推理时,最重要的是找到一个能够表示该组所有思想的名词。这个词必须是一个单一名词,因为:

1.所有表示一类事物的词都是名词;

2.该组思想中必定有两个以上(含两个)该类思想。


记住:当你进行演绎推理时,推理过程的第二个思想必须是对第一个思想的主语或谓语的评述。如果不具有这一特点,就不是演绎推理而是归纳推理,你就应当能够用一个单一的名词概括这两个思想,以检验你归的类、分的组是否恰当。


注意:在归纳过程中,你通常需要保持主语不变,改变谓语;或者保持谓语不变、改变主语。


将一个思想与其他思想一起写入某篇文章中的唯一理由,就是这个思想有助于对一个更高层次上的思想提供解释或支持。只有当某一组中的思想用归纳法(具有类似的主语或谓语),或演绎法(第二点是对第一点的评述)适当关联时,才能合理地从中概括出较高层次上的思想。

总而言之,演绎关系的建立,要求推理过程中的第二步对第一步作出评述,并推导出一个结论。归纳关系则基于句子的结构。作者必须发现各个句子主语或谓语之间的相同点,并根据这一相同点得出结论。如果句子之间没有相同点,就无法得出结论,这些句子也就根本不属于这篇文章。

还要注意的是:不论你将几个句子组织在一起,是为了进行归纳推理,还是为了进行演绎推理,你的思维都会主动预期某个归纳式结论或演绎式结论的出现。大脑对归纳论述和演绎论述的完整性有一种预期,读者的这种预期,使读者将思维“投射”到前方,预测作者的下一个句子。如果读者预期的结果与作者实际的表述不同,读者就可能感到困惑、不解、烦躁。因此,你应当在呈现归纳或演绎过程之前,先告诉读者你的主题思想,以使读者能够容易地跟上你的思路。


当你写完全篇文章时,还必须仔细检查一下全文的结构,因为你可能发现自己犯了以下两种常见错误之一:


大脑的归纳分组分析活动只有以下3种

  1. 确定前因后果关系:时间(步骤)顺序

  2. 将整体分割为部分,或将部分组织为整体:结构(空间)顺序

  3. 将类似事务按重要性归为一组:程度(重要性)顺序


检查逻辑顺序是检查某一分组是否恰当的重要手段。当你遇到任何一组归纳性思想,需要找出其真实意义时,一定要先快速浏览一遍该组中的所有思想。你能否发现某种逻辑顺序(时间顺序、结构顺序、重要性顺序)?如果不能,你能否发现这种分组的基础(过程、流程、结构、类别),并采用某种逻辑顺序?如果某组中所列的思想很多,你能否发现它们具有某些共同特点,并根据这些共同特点将思想归纳、分组,然后使用逻辑顺序?

如果你确认某一组思想的划分既合理,又完整,你就可以推导出一个逻辑结论。


如果你已经得出了一个概括性的思想,你就可以在该思想的基础上用以下两种方式延续你的思路:

  1. 对其作进一步评论(演绎法)。

  2. 找出与之类似的思想(归纳法)。

',85),o=[l];function a(n,h){return e(),t("div",null,o)}const m=p(i,[["render",a],["__file","001-pyramid-principle.html.vue"]]),s=JSON.parse(`{"path":"/reading/2024/001-pyramid-principle.html","title":"金字塔原理","lang":"zh-CN","frontmatter":{"date":"2024-02-28T00:00:00.000Z","description":"金字塔原理 (美)芭芭拉·明托 对受众(包括读者、听众、观众或学员)来说,最容易理解的顺序是:先了解主要的、抽象的思想,然后了解次要的、为主要思想提供支持的思想。因为主要思想总是从次要思想概括总结得出,文章中所有思想的理想组织结构也必定是一个金字塔结构——由一个总的思想统领多组思想。在这种金字塔结构中,思想之间的联系方式可以是纵向的(verticall...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2024/001-pyramid-principle.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"金字塔原理"}],["meta",{"property":"og:description","content":"金字塔原理 (美)芭芭拉·明托 对受众(包括读者、听众、观众或学员)来说,最容易理解的顺序是:先了解主要的、抽象的思想,然后了解次要的、为主要思想提供支持的思想。因为主要思想总是从次要思想概括总结得出,文章中所有思想的理想组织结构也必定是一个金字塔结构——由一个总的思想统领多组思想。在这种金字塔结构中,思想之间的联系方式可以是纵向的(verticall..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-02-28T06:10:01.000Z"}],["meta",{"property":"article:published_time","content":"2024-02-28T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-02-28T06:10:01.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"金字塔原理\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2024-02-28T00:00:00.000Z\\",\\"dateModified\\":\\"2024-02-28T06:10:01.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1709100601000,"updatedTime":1709100601000},"readingTime":{"minutes":11.44,"words":3431},"filePathRelative":"reading/2024/001-pyramid-principle.md","localizedDate":"2024年2月28日","autoDesc":true,"excerpt":"\\n
\\n

(美)芭芭拉·明托

\\n
\\n

对受众(包括读者、听众、观众或学员)来说,最容易理解的顺序是:先了解主要的、抽象的思想,然后了解次要的、为主要思想提供支持的思想。因为主要思想总是从次要思想概括总结得出,文章中所有思想的理想组织结构也必定是一个金字塔结构——由一个总的思想统领多组思想。在这种金字塔结构中,思想之间的联系方式可以是纵向的(vertically)——即任何一个层次上的思想都是对其下面一个层次上思想的总结;也可以是横向的(horizontally)——即多个思想因共同组成同一个逻辑推理过程,而被并列排在一起。

\\n

你可以很容易地使受众理解用金字塔结构组织的思想:先从金字塔的最顶端开始,沿各个分支向下展开。首先表达的主要思想,使受众对表达者的观点产生某种疑问,而主要思想(金字塔结构中的)下一层次上的思想将回答这些疑问。通过不断进行疑问/回答式的对话,受众就可以了解文章中的全部思想。

"}`);export{m as comp,s as data}; diff --git a/assets/001-self-control.html-rHldA_Mg.js b/assets/001-self-control.html-DD2sWzcO.js similarity index 98% rename from assets/001-self-control.html-rHldA_Mg.js rename to assets/001-self-control.html-DD2sWzcO.js index cc27e3dc8..82c0bc6ba 100644 --- a/assets/001-self-control.html-rHldA_Mg.js +++ b/assets/001-self-control.html-DD2sWzcO.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as o,a as p}from"./app-BLyK9ZJy.js";const r={},n=p('

自控力

(美)凯利·麦格尼格尔

如果你觉得自己没有时间和精力去处理“我想要”做的事,那就把它安排在你意志力最强的时候做。


疲惫不是一种身体反应,而是一种感觉,一种情绪。


只要我们的思想中存在正反两方,好的行为就总是允许我们做一点坏事。

这种对补偿的渴望常常使我们堕落。因为我们很容易认为,纵容自己就是对美德最好的奖励。我们忘记了自己真正的目标,向诱惑屈服了。


如果你自控的唯一动力就是成为一个足够好的人,那么每当你自我感觉良好的时候,你就会放弃自控。


当你想改变某种行为的时候,试着减少行为的变化性,而不是减少那种行为。


当你知道什么会引起欲望的时候,将它放到视线之外,它就不会再吸引你了。


坏习惯和积极的改变都能像细菌一样在人群中传播,而且没有人能完全不受其影响。


当你面对别人的目标时,增强免疫系统的最佳途径就是:在每天刚开始的时候花几分钟想想自己的目标,想想你会怎么受到诱惑,想要改变自己的目标。这就像疫苗一样,能保护你不受别人的感染。回想自己的目标能强化这个目标,避免你感染他人的目标。


心理学家所谓的“社会认同”:当群体里的其他人都在做某件事时,我们很容易认为这件事是应该做的聪明事。

',20),a=[n];function c(i,l){return t(),o("div",null,a)}const h=e(r,[["render",c],["__file","001-self-control.html.vue"]]),m=JSON.parse(`{"path":"/reading/2023/001-self-control.html","title":"自控力","lang":"zh-CN","frontmatter":{"date":"2023-10-18T00:00:00.000Z","description":"自控力 (美)凯利·麦格尼格尔 如果你觉得自己没有时间和精力去处理“我想要”做的事,那就把它安排在你意志力最强的时候做。 疲惫不是一种身体反应,而是一种感觉,一种情绪。 只要我们的思想中存在正反两方,好的行为就总是允许我们做一点坏事。 这种对补偿的渴望常常使我们堕落。因为我们很容易认为,纵容自己就是对美德最好的奖励。我们忘记了自己真正的目标,向诱惑屈服...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/001-self-control.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"自控力"}],["meta",{"property":"og:description","content":"自控力 (美)凯利·麦格尼格尔 如果你觉得自己没有时间和精力去处理“我想要”做的事,那就把它安排在你意志力最强的时候做。 疲惫不是一种身体反应,而是一种感觉,一种情绪。 只要我们的思想中存在正反两方,好的行为就总是允许我们做一点坏事。 这种对补偿的渴望常常使我们堕落。因为我们很容易认为,纵容自己就是对美德最好的奖励。我们忘记了自己真正的目标,向诱惑屈服..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-03-05T14:58:56.000Z"}],["meta",{"property":"article:published_time","content":"2023-10-18T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-03-05T14:58:56.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"自控力\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-10-18T00:00:00.000Z\\",\\"dateModified\\":\\"2024-03-05T14:58:56.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1691333203000,"updatedTime":1709650736000},"readingTime":{"minutes":1.49,"words":448},"filePathRelative":"reading/2023/001-self-control.md","localizedDate":"2023年10月18日","autoDesc":true,"excerpt":"\\n
\\n

(美)凯利·麦格尼格尔

\\n
\\n

如果你觉得自己没有时间和精力去处理“我想要”做的事,那就把它安排在你意志力最强的时候做。

\\n
\\n

疲惫不是一种身体反应,而是一种感觉,一种情绪。

\\n
\\n

只要我们的思想中存在正反两方,好的行为就总是允许我们做一点坏事。

\\n

这种对补偿的渴望常常使我们堕落。因为我们很容易认为,纵容自己就是对美德最好的奖励。我们忘记了自己真正的目标,向诱惑屈服了。

\\n
\\n

如果你自控的唯一动力就是成为一个足够好的人,那么每当你自我感觉良好的时候,你就会放弃自控。

"}`);export{h as comp,m as data}; +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as o,a as p}from"./app-BSa8cFh0.js";const r={},n=p('

自控力

(美)凯利·麦格尼格尔

如果你觉得自己没有时间和精力去处理“我想要”做的事,那就把它安排在你意志力最强的时候做。


疲惫不是一种身体反应,而是一种感觉,一种情绪。


只要我们的思想中存在正反两方,好的行为就总是允许我们做一点坏事。

这种对补偿的渴望常常使我们堕落。因为我们很容易认为,纵容自己就是对美德最好的奖励。我们忘记了自己真正的目标,向诱惑屈服了。


如果你自控的唯一动力就是成为一个足够好的人,那么每当你自我感觉良好的时候,你就会放弃自控。


当你想改变某种行为的时候,试着减少行为的变化性,而不是减少那种行为。


当你知道什么会引起欲望的时候,将它放到视线之外,它就不会再吸引你了。


坏习惯和积极的改变都能像细菌一样在人群中传播,而且没有人能完全不受其影响。


当你面对别人的目标时,增强免疫系统的最佳途径就是:在每天刚开始的时候花几分钟想想自己的目标,想想你会怎么受到诱惑,想要改变自己的目标。这就像疫苗一样,能保护你不受别人的感染。回想自己的目标能强化这个目标,避免你感染他人的目标。


心理学家所谓的“社会认同”:当群体里的其他人都在做某件事时,我们很容易认为这件事是应该做的聪明事。

',20),a=[n];function c(i,l){return t(),o("div",null,a)}const h=e(r,[["render",c],["__file","001-self-control.html.vue"]]),m=JSON.parse(`{"path":"/reading/2023/001-self-control.html","title":"自控力","lang":"zh-CN","frontmatter":{"date":"2023-10-18T00:00:00.000Z","description":"自控力 (美)凯利·麦格尼格尔 如果你觉得自己没有时间和精力去处理“我想要”做的事,那就把它安排在你意志力最强的时候做。 疲惫不是一种身体反应,而是一种感觉,一种情绪。 只要我们的思想中存在正反两方,好的行为就总是允许我们做一点坏事。 这种对补偿的渴望常常使我们堕落。因为我们很容易认为,纵容自己就是对美德最好的奖励。我们忘记了自己真正的目标,向诱惑屈服...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/001-self-control.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"自控力"}],["meta",{"property":"og:description","content":"自控力 (美)凯利·麦格尼格尔 如果你觉得自己没有时间和精力去处理“我想要”做的事,那就把它安排在你意志力最强的时候做。 疲惫不是一种身体反应,而是一种感觉,一种情绪。 只要我们的思想中存在正反两方,好的行为就总是允许我们做一点坏事。 这种对补偿的渴望常常使我们堕落。因为我们很容易认为,纵容自己就是对美德最好的奖励。我们忘记了自己真正的目标,向诱惑屈服..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-03-05T14:58:56.000Z"}],["meta",{"property":"article:published_time","content":"2023-10-18T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-03-05T14:58:56.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"自控力\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-10-18T00:00:00.000Z\\",\\"dateModified\\":\\"2024-03-05T14:58:56.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1691333203000,"updatedTime":1709650736000},"readingTime":{"minutes":1.49,"words":448},"filePathRelative":"reading/2023/001-self-control.md","localizedDate":"2023年10月18日","autoDesc":true,"excerpt":"\\n
\\n

(美)凯利·麦格尼格尔

\\n
\\n

如果你觉得自己没有时间和精力去处理“我想要”做的事,那就把它安排在你意志力最强的时候做。

\\n
\\n

疲惫不是一种身体反应,而是一种感觉,一种情绪。

\\n
\\n

只要我们的思想中存在正反两方,好的行为就总是允许我们做一点坏事。

\\n

这种对补偿的渴望常常使我们堕落。因为我们很容易认为,纵容自己就是对美德最好的奖励。我们忘记了自己真正的目标,向诱惑屈服了。

\\n
\\n

如果你自控的唯一动力就是成为一个足够好的人,那么每当你自我感觉良好的时候,你就会放弃自控。

"}`);export{h as comp,m as data}; diff --git a/assets/002-dependencies.html-CCTivZci.js b/assets/002-dependencies.html-BJWeHlsl.js similarity index 98% rename from assets/002-dependencies.html-CCTivZci.js rename to assets/002-dependencies.html-BJWeHlsl.js index 10a27b7e9..52966e237 100644 --- a/assets/002-dependencies.html-CCTivZci.js +++ b/assets/002-dependencies.html-BJWeHlsl.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as n,a}from"./app-BLyK9ZJy.js";const o={},r=a('

依赖

核心思想

在12-Factor APP中,应显式声明所有依赖项,避免隐式依赖,以确保构建和运行环境的一致性。

依赖清单

通过依赖清单显式声明依赖项,例如package.jsonrequirements.txt等。

依赖隔离

通过依赖隔离确保程序不会调用系统中存在但清单中未声明的依赖,例如:virtualenvnode_modules等。

依赖清单声明必须和依赖隔离一起使用。

依赖管理

通过依赖管理工具,只需要通过一个构建命令来安装所有的依赖项,即可开始工作,例如:npm installpip install等。

',10),c=[r];function d(i,p){return t(),n("div",null,c)}const h=e(o,[["render",d],["__file","002-dependencies.html.vue"]]),m=JSON.parse(`{"path":"/dump/software-engineering/twelve-factor/002-dependencies.html","title":"依赖","lang":"zh-CN","frontmatter":{"date":"2024-03-06T00:00:00.000Z","description":"依赖 核心思想 在12-Factor APP中,应显式声明所有依赖项,避免隐式依赖,以确保构建和运行环境的一致性。 依赖清单 通过依赖清单显式声明依赖项,例如package.json、requirements.txt等。 依赖隔离 通过依赖隔离确保程序不会调用系统中存在但清单中未声明的依赖,例如:virtualenv、node_modules等。 依赖...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/dump/software-engineering/twelve-factor/002-dependencies.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"依赖"}],["meta",{"property":"og:description","content":"依赖 核心思想 在12-Factor APP中,应显式声明所有依赖项,避免隐式依赖,以确保构建和运行环境的一致性。 依赖清单 通过依赖清单显式声明依赖项,例如package.json、requirements.txt等。 依赖隔离 通过依赖隔离确保程序不会调用系统中存在但清单中未声明的依赖,例如:virtualenv、node_modules等。 依赖..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-19T03:23:52.000Z"}],["meta",{"property":"article:published_time","content":"2024-03-06T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-19T03:23:52.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"依赖\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2024-03-06T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-19T03:23:52.000Z\\",\\"author\\":[]}"]]},"headers":[{"level":2,"title":"核心思想","slug":"核心思想","link":"#核心思想","children":[]},{"level":2,"title":"依赖清单","slug":"依赖清单","link":"#依赖清单","children":[]},{"level":2,"title":"依赖隔离","slug":"依赖隔离","link":"#依赖隔离","children":[]},{"level":2,"title":"依赖管理","slug":"依赖管理","link":"#依赖管理","children":[]}],"git":{"createdTime":1709540171000,"updatedTime":1718767432000},"readingTime":{"minutes":0.56,"words":167},"filePathRelative":"dump/software-engineering/twelve-factor/002-dependencies.md","localizedDate":"2024年3月6日","autoDesc":true,"excerpt":"\\n

核心思想

\\n

在12-Factor APP中,应显式声明所有依赖项,避免隐式依赖,以确保构建和运行环境的一致性。

\\n

依赖清单

\\n

通过依赖清单显式声明依赖项,例如package.jsonrequirements.txt等。

\\n

依赖隔离

\\n

通过依赖隔离确保程序不会调用系统中存在但清单中未声明的依赖,例如:virtualenvnode_modules等。

\\n

依赖清单声明必须和依赖隔离一起使用。

\\n

依赖管理

"}`);export{h as comp,m as data}; +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as n,a}from"./app-BSa8cFh0.js";const o={},r=a('

依赖

核心思想

在12-Factor APP中,应显式声明所有依赖项,避免隐式依赖,以确保构建和运行环境的一致性。

依赖清单

通过依赖清单显式声明依赖项,例如package.jsonrequirements.txt等。

依赖隔离

通过依赖隔离确保程序不会调用系统中存在但清单中未声明的依赖,例如:virtualenvnode_modules等。

依赖清单声明必须和依赖隔离一起使用。

依赖管理

通过依赖管理工具,只需要通过一个构建命令来安装所有的依赖项,即可开始工作,例如:npm installpip install等。

',10),c=[r];function d(i,p){return t(),n("div",null,c)}const h=e(o,[["render",d],["__file","002-dependencies.html.vue"]]),m=JSON.parse(`{"path":"/dump/software-engineering/twelve-factor/002-dependencies.html","title":"依赖","lang":"zh-CN","frontmatter":{"date":"2024-03-06T00:00:00.000Z","description":"依赖 核心思想 在12-Factor APP中,应显式声明所有依赖项,避免隐式依赖,以确保构建和运行环境的一致性。 依赖清单 通过依赖清单显式声明依赖项,例如package.json、requirements.txt等。 依赖隔离 通过依赖隔离确保程序不会调用系统中存在但清单中未声明的依赖,例如:virtualenv、node_modules等。 依赖...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/dump/software-engineering/twelve-factor/002-dependencies.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"依赖"}],["meta",{"property":"og:description","content":"依赖 核心思想 在12-Factor APP中,应显式声明所有依赖项,避免隐式依赖,以确保构建和运行环境的一致性。 依赖清单 通过依赖清单显式声明依赖项,例如package.json、requirements.txt等。 依赖隔离 通过依赖隔离确保程序不会调用系统中存在但清单中未声明的依赖,例如:virtualenv、node_modules等。 依赖..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-19T03:23:52.000Z"}],["meta",{"property":"article:published_time","content":"2024-03-06T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-19T03:23:52.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"依赖\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2024-03-06T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-19T03:23:52.000Z\\",\\"author\\":[]}"]]},"headers":[{"level":2,"title":"核心思想","slug":"核心思想","link":"#核心思想","children":[]},{"level":2,"title":"依赖清单","slug":"依赖清单","link":"#依赖清单","children":[]},{"level":2,"title":"依赖隔离","slug":"依赖隔离","link":"#依赖隔离","children":[]},{"level":2,"title":"依赖管理","slug":"依赖管理","link":"#依赖管理","children":[]}],"git":{"createdTime":1709540171000,"updatedTime":1718767432000},"readingTime":{"minutes":0.56,"words":167},"filePathRelative":"dump/software-engineering/twelve-factor/002-dependencies.md","localizedDate":"2024年3月6日","autoDesc":true,"excerpt":"\\n

核心思想

\\n

在12-Factor APP中,应显式声明所有依赖项,避免隐式依赖,以确保构建和运行环境的一致性。

\\n

依赖清单

\\n

通过依赖清单显式声明依赖项,例如package.jsonrequirements.txt等。

\\n

依赖隔离

\\n

通过依赖隔离确保程序不会调用系统中存在但清单中未声明的依赖,例如:virtualenvnode_modules等。

\\n

依赖清单声明必须和依赖隔离一起使用。

\\n

依赖管理

"}`);export{h as comp,m as data}; diff --git a/assets/002-the-great-gatsby.html-P4drTvUC.js b/assets/002-the-great-gatsby.html-CbFWnlvh.js similarity index 98% rename from assets/002-the-great-gatsby.html-P4drTvUC.js rename to assets/002-the-great-gatsby.html-CbFWnlvh.js index 86483401e..a5c029ce8 100644 --- a/assets/002-the-great-gatsby.html-P4drTvUC.js +++ b/assets/002-the-great-gatsby.html-CbFWnlvh.js @@ -1 +1 @@ -import{_ as o}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as n,c as a,b as t,e}from"./app-BLyK9ZJy.js";const r={},c=t("h1",{id:"了不起的盖茨比",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#了不起的盖茨比"},[t("span",null,"了不起的盖茨比")])],-1),i=t("blockquote",null,[t("p",null,"(美)菲茨杰拉德")],-1),p=t("p",null,"“每当你想要评论别人的时候,”他告诉我说,“你要记住,不是世上所有人都拥有和你一样优越的条件。”",-1),l=t("hr",null,null,-1),s=t("p",null,[e("有一件事从不更改,"),t("br"),e(" 富的生财,穷的生孩。")],-1),d=t("hr",null,null,-1),h=t("p",null,"人们有时希望给自己片刻的闲暇时光,但当你不得不孤零零一人时,这种闲暇就再无任何魅力。",-1),m=[c,i,p,l,s,d,h];function _(u,g){return n(),a("div",null,m)}const f=o(r,[["render",_],["__file","002-the-great-gatsby.html.vue"]]),T=JSON.parse(`{"path":"/reading/2023/002-the-great-gatsby.html","title":"了不起的盖茨比","lang":"zh-CN","frontmatter":{"date":"2023-10-18T00:00:00.000Z","description":"了不起的盖茨比 (美)菲茨杰拉德 “每当你想要评论别人的时候,”他告诉我说,“你要记住,不是世上所有人都拥有和你一样优越的条件。” 有一件事从不更改, 富的生财,穷的生孩。 人们有时希望给自己片刻的闲暇时光,但当你不得不孤零零一人时,这种闲暇就再无任何魅力。","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/002-the-great-gatsby.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"了不起的盖茨比"}],["meta",{"property":"og:description","content":"了不起的盖茨比 (美)菲茨杰拉德 “每当你想要评论别人的时候,”他告诉我说,“你要记住,不是世上所有人都拥有和你一样优越的条件。” 有一件事从不更改, 富的生财,穷的生孩。 人们有时希望给自己片刻的闲暇时光,但当你不得不孤零零一人时,这种闲暇就再无任何魅力。"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-03-05T14:58:56.000Z"}],["meta",{"property":"article:published_time","content":"2023-10-18T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-03-05T14:58:56.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"了不起的盖茨比\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-10-18T00:00:00.000Z\\",\\"dateModified\\":\\"2024-03-05T14:58:56.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1690179304000,"updatedTime":1709650736000},"readingTime":{"minutes":0.37,"words":112},"filePathRelative":"reading/2023/002-the-great-gatsby.md","localizedDate":"2023年10月18日","autoDesc":true,"excerpt":"\\n
\\n

(美)菲茨杰拉德

\\n
\\n

“每当你想要评论别人的时候,”他告诉我说,“你要记住,不是世上所有人都拥有和你一样优越的条件。”

\\n
\\n

有一件事从不更改,
\\n富的生财,穷的生孩。

\\n
\\n

人们有时希望给自己片刻的闲暇时光,但当你不得不孤零零一人时,这种闲暇就再无任何魅力。

\\n"}`);export{f as comp,T as data}; +import{_ as o}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as n,c as a,b as t,e}from"./app-BSa8cFh0.js";const r={},c=t("h1",{id:"了不起的盖茨比",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#了不起的盖茨比"},[t("span",null,"了不起的盖茨比")])],-1),i=t("blockquote",null,[t("p",null,"(美)菲茨杰拉德")],-1),p=t("p",null,"“每当你想要评论别人的时候,”他告诉我说,“你要记住,不是世上所有人都拥有和你一样优越的条件。”",-1),l=t("hr",null,null,-1),s=t("p",null,[e("有一件事从不更改,"),t("br"),e(" 富的生财,穷的生孩。")],-1),d=t("hr",null,null,-1),h=t("p",null,"人们有时希望给自己片刻的闲暇时光,但当你不得不孤零零一人时,这种闲暇就再无任何魅力。",-1),m=[c,i,p,l,s,d,h];function _(u,g){return n(),a("div",null,m)}const f=o(r,[["render",_],["__file","002-the-great-gatsby.html.vue"]]),T=JSON.parse(`{"path":"/reading/2023/002-the-great-gatsby.html","title":"了不起的盖茨比","lang":"zh-CN","frontmatter":{"date":"2023-10-18T00:00:00.000Z","description":"了不起的盖茨比 (美)菲茨杰拉德 “每当你想要评论别人的时候,”他告诉我说,“你要记住,不是世上所有人都拥有和你一样优越的条件。” 有一件事从不更改, 富的生财,穷的生孩。 人们有时希望给自己片刻的闲暇时光,但当你不得不孤零零一人时,这种闲暇就再无任何魅力。","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/002-the-great-gatsby.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"了不起的盖茨比"}],["meta",{"property":"og:description","content":"了不起的盖茨比 (美)菲茨杰拉德 “每当你想要评论别人的时候,”他告诉我说,“你要记住,不是世上所有人都拥有和你一样优越的条件。” 有一件事从不更改, 富的生财,穷的生孩。 人们有时希望给自己片刻的闲暇时光,但当你不得不孤零零一人时,这种闲暇就再无任何魅力。"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-03-05T14:58:56.000Z"}],["meta",{"property":"article:published_time","content":"2023-10-18T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-03-05T14:58:56.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"了不起的盖茨比\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-10-18T00:00:00.000Z\\",\\"dateModified\\":\\"2024-03-05T14:58:56.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1690179304000,"updatedTime":1709650736000},"readingTime":{"minutes":0.37,"words":112},"filePathRelative":"reading/2023/002-the-great-gatsby.md","localizedDate":"2023年10月18日","autoDesc":true,"excerpt":"\\n
\\n

(美)菲茨杰拉德

\\n
\\n

“每当你想要评论别人的时候,”他告诉我说,“你要记住,不是世上所有人都拥有和你一样优越的条件。”

\\n
\\n

有一件事从不更改,
\\n富的生财,穷的生孩。

\\n
\\n

人们有时希望给自己片刻的闲暇时光,但当你不得不孤零零一人时,这种闲暇就再无任何魅力。

\\n"}`);export{f as comp,T as data}; diff --git a/assets/002-those-ming-dynasty-things.html-Dom19Hpy.js b/assets/002-those-ming-dynasty-things.html-LZIqC68F.js similarity index 99% rename from assets/002-those-ming-dynasty-things.html-Dom19Hpy.js rename to assets/002-those-ming-dynasty-things.html-LZIqC68F.js index 83adc515d..f64f5c7e0 100644 --- a/assets/002-those-ming-dynasty-things.html-Dom19Hpy.js +++ b/assets/002-those-ming-dynasty-things.html-LZIqC68F.js @@ -1 +1 @@ -import{_ as p}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as e,a as r}from"./app-BLyK9ZJy.js";const n={},o=r('

明朝那些事儿(1-7)

当年明月

中国人的习惯,酒桌上的话只能信一半,有时一半都不到。


一个人要显示自己的力量,从来不是靠暴力,挑战这一准则的人必然会被历史从强者的行列中淘汰,历来如此。


每一种主张的背后,都隐藏着某种势力或者利益的群体。如房地产商一定说房价会不停地涨、电信公司一定会说自己的收费很便宜一样。而农民的主张只可能是种地或者收租。


宽容从来都不是软弱。


强而不欺,威而不霸,这才是一个伟大国家和民族的气度与底蕴。


南非的一位著名政治家曾经说过:西方人来到我们面前时,手中拿着圣经,我们手中有黄金。后来就变成了,他们手中有黄金,我们手中拿着圣经。


暴力可以成为解决问题的后盾,但绝对不能解决问题。


现代的一位伟人曾经这样描述过战争和和平的关系:
一仗打出十年和平。
至理名言,古今通用。


刚出道时要低调,再低调。


嚎哭而来,欢笑而去,人生本当如此。


骄狂的开始,就意味着胜利的终结。


一个卑躬屈膝的人,无论如何逢迎下作、厚颜无耻,最终即使得到信任,也绝对无法获得尊重。


历史告诉我们,所谓道德与公理,只有在实力相等的情况下才能拿出来讨论。


不知死而死,是为无知,知死而死,是为无畏。


什么叫改革?通俗的解释就是,一台机器运行不畅,你琢磨琢磨,拿着扳手螺丝刀上去鼓捣鼓捣,东敲一把,西碰一下,把这玩意整好了,这就叫改革。

看起来不错,但要真干,那就麻烦了,因为历史证明,但凡干这个的,基本都没什么好下场,其结局不外乎两种:一种是改了之后,被人给革了,代表人物是王安石同志,辛辛苦苦几十年,什么不怕天变,不怕人怨,最后还是狼狈下台,草草收场。

另一种则更为严重,是改了之后,被人革命了,代表人物是王莽,这位仁兄励精图治,想干点事情,可惜过于理想主义,结果从改革变成了革命,命都给革没了。


在这个世界上,所有存在的东西,必有其合理性,否则它就绝不会诞生。而王安石不太懂得这个道理,他痛恨旧制度,痛恨北宋那一大帮子吃闲饭的人,但他不知道的是,旧有的制度或许顽固,或许不合理,却也是无数前人伟大智慧的结晶,制定制度和执行制度的人,都是无以伦比的聪明人,比所有自以为聪明的人要聪明得多,僵化也好,繁琐也罢,但是,有效。


上天总是不公平的,有些人天生就聪明,天生就牛,天生就是张居正、戚继光,而绝大多数平凡的人,天生就不聪明,天生就不牛,天生就是二傻子,没有办法。

但上天依然是仁慈的,他给出了一条没有天赋,也能成功的道路。

对于大多数平凡的人而言,这是最好的道路,也是唯一的道路,它的名字,叫做纯粹。

纯粹的意思,就是专心致志、认真、一根筋、二杆子等等等等。

纯粹和执着,也是有区别的,所谓执着,就是不见棺材不掉泪,而纯粹,是见了棺材,也不掉泪。

纯粹的人,是这个世界上最可怕的人,他们的一生,往往只有一个目标,为了达到这个目标,他们可以不择手段,不顾一切,他们无法被收买,无法被威逼,他们不要钱,不要女色,甚至不要权势和名声。

在他们的世界里,只有一个目标,以及坚定的决心和意志。


把复杂的问题弄简单,是一个优秀将领的基本素质。


汪文言认为,遇到敌人,直接硬干是不对的,在操起板砖之前,应该先让他自己绊一跤。


只有岁月的沧桑,才能淘尽一切污浊,扫清人们眼帘上的遮盖与灰尘,看到那些殉道者无比璀璨的光芒,历千年而不灭。


不要以为渺小的,就没有力量;不要以为卑微的,就没有尊严。

弱者和强者之间唯一的差别,只在信念是否坚定。


缩头的,并非一定是乌龟,毒蛇在攻击之前,也要收脖子。


只要你不放弃自己,上天就不会放弃你。


懂得暴力的人,是强壮的,懂得克制暴力的人,才是强大的。


越是低调的敌人,就越危险。


张牙舞爪的人,往往是脆弱的,因为真正强大的人,是自信的,自信就会温和,温和就会坚定。

无需暴力,无需杀戮,因为温和,才是最高层次的暴力。


在这个世界上,有着许多或明或暗的规则,必须适应,必须放弃原则,背离良知,和光同尘,否则,无论你有多么伟大的抱负,多么光辉的理想,都终将被湮灭。


国家与国家之间的关系,和人其实差不多。穷了,就瞧不起你,打你;富了,就给你面子,听话。


人只活一辈子,如何生活,都是自己的事,自己这辈子浑浑噩噩地没活好,厚着脸皮还来指责别人,有多远,就去滚多远。


其实这个世上很多事,本不需要理由,之所以需要理由,是因为很多人喜欢找抽,抽久了,就需要理由了。


成功只有一个——按照自己的方式,去度过人生。

',73),h=[o];function a(i,c){return t(),e("div",null,h)}const m=p(n,[["render",a],["__file","002-those-ming-dynasty-things.html.vue"]]),l=JSON.parse(`{"path":"/reading/2024/002-those-ming-dynasty-things.html","title":"明朝那些事儿(1-7)","lang":"zh-CN","frontmatter":{"date":"2024-06-13T00:00:00.000Z","description":"明朝那些事儿(1-7) 当年明月 中国人的习惯,酒桌上的话只能信一半,有时一半都不到。 一个人要显示自己的力量,从来不是靠暴力,挑战这一准则的人必然会被历史从强者的行列中淘汰,历来如此。 每一种主张的背后,都隐藏着某种势力或者利益的群体。如房地产商一定说房价会不停地涨、电信公司一定会说自己的收费很便宜一样。而农民的主张只可能是种地或者收租。 宽容从来都...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2024/002-those-ming-dynasty-things.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"明朝那些事儿(1-7)"}],["meta",{"property":"og:description","content":"明朝那些事儿(1-7) 当年明月 中国人的习惯,酒桌上的话只能信一半,有时一半都不到。 一个人要显示自己的力量,从来不是靠暴力,挑战这一准则的人必然会被历史从强者的行列中淘汰,历来如此。 每一种主张的背后,都隐藏着某种势力或者利益的群体。如房地产商一定说房价会不停地涨、电信公司一定会说自己的收费很便宜一样。而农民的主张只可能是种地或者收租。 宽容从来都..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-13T08:33:25.000Z"}],["meta",{"property":"article:published_time","content":"2024-06-13T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-13T08:33:25.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"明朝那些事儿(1-7)\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2024-06-13T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-13T08:33:25.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1718267605000,"updatedTime":1718267605000},"readingTime":{"minutes":5.16,"words":1547},"filePathRelative":"reading/2024/002-those-ming-dynasty-things.md","localizedDate":"2024年6月13日","autoDesc":true,"excerpt":"\\n
\\n

当年明月

\\n
\\n

中国人的习惯,酒桌上的话只能信一半,有时一半都不到。

\\n
\\n

一个人要显示自己的力量,从来不是靠暴力,挑战这一准则的人必然会被历史从强者的行列中淘汰,历来如此。

\\n
\\n

每一种主张的背后,都隐藏着某种势力或者利益的群体。如房地产商一定说房价会不停地涨、电信公司一定会说自己的收费很便宜一样。而农民的主张只可能是种地或者收租。

\\n
\\n

宽容从来都不是软弱。

\\n
\\n

强而不欺,威而不霸,这才是一个伟大国家和民族的气度与底蕴。

\\n
\\n

南非的一位著名政治家曾经说过:西方人来到我们面前时,手中拿着圣经,我们手中有黄金。后来就变成了,他们手中有黄金,我们手中拿着圣经。

"}`);export{m as comp,l as data}; +import{_ as p}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as e,a as r}from"./app-BSa8cFh0.js";const n={},o=r('

明朝那些事儿(1-7)

当年明月

中国人的习惯,酒桌上的话只能信一半,有时一半都不到。


一个人要显示自己的力量,从来不是靠暴力,挑战这一准则的人必然会被历史从强者的行列中淘汰,历来如此。


每一种主张的背后,都隐藏着某种势力或者利益的群体。如房地产商一定说房价会不停地涨、电信公司一定会说自己的收费很便宜一样。而农民的主张只可能是种地或者收租。


宽容从来都不是软弱。


强而不欺,威而不霸,这才是一个伟大国家和民族的气度与底蕴。


南非的一位著名政治家曾经说过:西方人来到我们面前时,手中拿着圣经,我们手中有黄金。后来就变成了,他们手中有黄金,我们手中拿着圣经。


暴力可以成为解决问题的后盾,但绝对不能解决问题。


现代的一位伟人曾经这样描述过战争和和平的关系:
一仗打出十年和平。
至理名言,古今通用。


刚出道时要低调,再低调。


嚎哭而来,欢笑而去,人生本当如此。


骄狂的开始,就意味着胜利的终结。


一个卑躬屈膝的人,无论如何逢迎下作、厚颜无耻,最终即使得到信任,也绝对无法获得尊重。


历史告诉我们,所谓道德与公理,只有在实力相等的情况下才能拿出来讨论。


不知死而死,是为无知,知死而死,是为无畏。


什么叫改革?通俗的解释就是,一台机器运行不畅,你琢磨琢磨,拿着扳手螺丝刀上去鼓捣鼓捣,东敲一把,西碰一下,把这玩意整好了,这就叫改革。

看起来不错,但要真干,那就麻烦了,因为历史证明,但凡干这个的,基本都没什么好下场,其结局不外乎两种:一种是改了之后,被人给革了,代表人物是王安石同志,辛辛苦苦几十年,什么不怕天变,不怕人怨,最后还是狼狈下台,草草收场。

另一种则更为严重,是改了之后,被人革命了,代表人物是王莽,这位仁兄励精图治,想干点事情,可惜过于理想主义,结果从改革变成了革命,命都给革没了。


在这个世界上,所有存在的东西,必有其合理性,否则它就绝不会诞生。而王安石不太懂得这个道理,他痛恨旧制度,痛恨北宋那一大帮子吃闲饭的人,但他不知道的是,旧有的制度或许顽固,或许不合理,却也是无数前人伟大智慧的结晶,制定制度和执行制度的人,都是无以伦比的聪明人,比所有自以为聪明的人要聪明得多,僵化也好,繁琐也罢,但是,有效。


上天总是不公平的,有些人天生就聪明,天生就牛,天生就是张居正、戚继光,而绝大多数平凡的人,天生就不聪明,天生就不牛,天生就是二傻子,没有办法。

但上天依然是仁慈的,他给出了一条没有天赋,也能成功的道路。

对于大多数平凡的人而言,这是最好的道路,也是唯一的道路,它的名字,叫做纯粹。

纯粹的意思,就是专心致志、认真、一根筋、二杆子等等等等。

纯粹和执着,也是有区别的,所谓执着,就是不见棺材不掉泪,而纯粹,是见了棺材,也不掉泪。

纯粹的人,是这个世界上最可怕的人,他们的一生,往往只有一个目标,为了达到这个目标,他们可以不择手段,不顾一切,他们无法被收买,无法被威逼,他们不要钱,不要女色,甚至不要权势和名声。

在他们的世界里,只有一个目标,以及坚定的决心和意志。


把复杂的问题弄简单,是一个优秀将领的基本素质。


汪文言认为,遇到敌人,直接硬干是不对的,在操起板砖之前,应该先让他自己绊一跤。


只有岁月的沧桑,才能淘尽一切污浊,扫清人们眼帘上的遮盖与灰尘,看到那些殉道者无比璀璨的光芒,历千年而不灭。


不要以为渺小的,就没有力量;不要以为卑微的,就没有尊严。

弱者和强者之间唯一的差别,只在信念是否坚定。


缩头的,并非一定是乌龟,毒蛇在攻击之前,也要收脖子。


只要你不放弃自己,上天就不会放弃你。


懂得暴力的人,是强壮的,懂得克制暴力的人,才是强大的。


越是低调的敌人,就越危险。


张牙舞爪的人,往往是脆弱的,因为真正强大的人,是自信的,自信就会温和,温和就会坚定。

无需暴力,无需杀戮,因为温和,才是最高层次的暴力。


在这个世界上,有着许多或明或暗的规则,必须适应,必须放弃原则,背离良知,和光同尘,否则,无论你有多么伟大的抱负,多么光辉的理想,都终将被湮灭。


国家与国家之间的关系,和人其实差不多。穷了,就瞧不起你,打你;富了,就给你面子,听话。


人只活一辈子,如何生活,都是自己的事,自己这辈子浑浑噩噩地没活好,厚着脸皮还来指责别人,有多远,就去滚多远。


其实这个世上很多事,本不需要理由,之所以需要理由,是因为很多人喜欢找抽,抽久了,就需要理由了。


成功只有一个——按照自己的方式,去度过人生。

',73),h=[o];function a(i,c){return t(),e("div",null,h)}const m=p(n,[["render",a],["__file","002-those-ming-dynasty-things.html.vue"]]),l=JSON.parse(`{"path":"/reading/2024/002-those-ming-dynasty-things.html","title":"明朝那些事儿(1-7)","lang":"zh-CN","frontmatter":{"date":"2024-06-13T00:00:00.000Z","description":"明朝那些事儿(1-7) 当年明月 中国人的习惯,酒桌上的话只能信一半,有时一半都不到。 一个人要显示自己的力量,从来不是靠暴力,挑战这一准则的人必然会被历史从强者的行列中淘汰,历来如此。 每一种主张的背后,都隐藏着某种势力或者利益的群体。如房地产商一定说房价会不停地涨、电信公司一定会说自己的收费很便宜一样。而农民的主张只可能是种地或者收租。 宽容从来都...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2024/002-those-ming-dynasty-things.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"明朝那些事儿(1-7)"}],["meta",{"property":"og:description","content":"明朝那些事儿(1-7) 当年明月 中国人的习惯,酒桌上的话只能信一半,有时一半都不到。 一个人要显示自己的力量,从来不是靠暴力,挑战这一准则的人必然会被历史从强者的行列中淘汰,历来如此。 每一种主张的背后,都隐藏着某种势力或者利益的群体。如房地产商一定说房价会不停地涨、电信公司一定会说自己的收费很便宜一样。而农民的主张只可能是种地或者收租。 宽容从来都..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-13T08:33:25.000Z"}],["meta",{"property":"article:published_time","content":"2024-06-13T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-13T08:33:25.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"明朝那些事儿(1-7)\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2024-06-13T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-13T08:33:25.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1718267605000,"updatedTime":1718267605000},"readingTime":{"minutes":5.16,"words":1547},"filePathRelative":"reading/2024/002-those-ming-dynasty-things.md","localizedDate":"2024年6月13日","autoDesc":true,"excerpt":"\\n
\\n

当年明月

\\n
\\n

中国人的习惯,酒桌上的话只能信一半,有时一半都不到。

\\n
\\n

一个人要显示自己的力量,从来不是靠暴力,挑战这一准则的人必然会被历史从强者的行列中淘汰,历来如此。

\\n
\\n

每一种主张的背后,都隐藏着某种势力或者利益的群体。如房地产商一定说房价会不停地涨、电信公司一定会说自己的收费很便宜一样。而农民的主张只可能是种地或者收租。

\\n
\\n

宽容从来都不是软弱。

\\n
\\n

强而不欺,威而不霸,这才是一个伟大国家和民族的气度与底蕴。

\\n
\\n

南非的一位著名政治家曾经说过:西方人来到我们面前时,手中拿着圣经,我们手中有黄金。后来就变成了,他们手中有黄金,我们手中拿着圣经。

"}`);export{m as comp,l as data}; diff --git a/assets/003-config.html-BODubnRc.js b/assets/003-config.html-CG0yPUOa.js similarity index 98% rename from assets/003-config.html-BODubnRc.js rename to assets/003-config.html-CG0yPUOa.js index 2295d5aa7..0e3e32050 100644 --- a/assets/003-config.html-BODubnRc.js +++ b/assets/003-config.html-CG0yPUOa.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as a,a as n}from"./app-BLyK9ZJy.js";const o={},r=n('

配置

核心思想

在环境中存储配置。

基准代码和配置严格分离

判断一个应用是否正确地将配置排除在代码之外,一个简单的方法是看该应用的基准代码是否可以立刻开源,而不用担心会暴露任何敏感的信息。

',5),i=[r];function c(p,s){return t(),a("div",null,i)}const h=e(o,[["render",c],["__file","003-config.html.vue"]]),m=JSON.parse(`{"path":"/dump/software-engineering/twelve-factor/003-config.html","title":"配置","lang":"zh-CN","frontmatter":{"date":"2024-03-07T00:00:00.000Z","description":"配置 核心思想 在环境中存储配置。 基准代码和配置严格分离 判断一个应用是否正确地将配置排除在代码之外,一个简单的方法是看该应用的基准代码是否可以立刻开源,而不用担心会暴露任何敏感的信息。","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/dump/software-engineering/twelve-factor/003-config.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"配置"}],["meta",{"property":"og:description","content":"配置 核心思想 在环境中存储配置。 基准代码和配置严格分离 判断一个应用是否正确地将配置排除在代码之外,一个简单的方法是看该应用的基准代码是否可以立刻开源,而不用担心会暴露任何敏感的信息。"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-19T03:23:52.000Z"}],["meta",{"property":"article:published_time","content":"2024-03-07T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-19T03:23:52.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"配置\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2024-03-07T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-19T03:23:52.000Z\\",\\"author\\":[]}"]]},"headers":[{"level":2,"title":"核心思想","slug":"核心思想","link":"#核心思想","children":[]},{"level":2,"title":"基准代码和配置严格分离","slug":"基准代码和配置严格分离","link":"#基准代码和配置严格分离","children":[]}],"git":{"createdTime":1709540171000,"updatedTime":1718767432000},"readingTime":{"minutes":0.3,"words":90},"filePathRelative":"dump/software-engineering/twelve-factor/003-config.md","localizedDate":"2024年3月7日","autoDesc":true,"excerpt":"\\n

核心思想

\\n

在环境中存储配置。

\\n

基准代码和配置严格分离

\\n

判断一个应用是否正确地将配置排除在代码之外,一个简单的方法是看该应用的基准代码是否可以立刻开源,而不用担心会暴露任何敏感的信息。

\\n"}`);export{h as comp,m as data}; +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as a,a as n}from"./app-BSa8cFh0.js";const o={},r=n('

配置

核心思想

在环境中存储配置。

基准代码和配置严格分离

判断一个应用是否正确地将配置排除在代码之外,一个简单的方法是看该应用的基准代码是否可以立刻开源,而不用担心会暴露任何敏感的信息。

',5),i=[r];function c(p,s){return t(),a("div",null,i)}const h=e(o,[["render",c],["__file","003-config.html.vue"]]),m=JSON.parse(`{"path":"/dump/software-engineering/twelve-factor/003-config.html","title":"配置","lang":"zh-CN","frontmatter":{"date":"2024-03-07T00:00:00.000Z","description":"配置 核心思想 在环境中存储配置。 基准代码和配置严格分离 判断一个应用是否正确地将配置排除在代码之外,一个简单的方法是看该应用的基准代码是否可以立刻开源,而不用担心会暴露任何敏感的信息。","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/dump/software-engineering/twelve-factor/003-config.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"配置"}],["meta",{"property":"og:description","content":"配置 核心思想 在环境中存储配置。 基准代码和配置严格分离 判断一个应用是否正确地将配置排除在代码之外,一个简单的方法是看该应用的基准代码是否可以立刻开源,而不用担心会暴露任何敏感的信息。"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-19T03:23:52.000Z"}],["meta",{"property":"article:published_time","content":"2024-03-07T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-19T03:23:52.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"配置\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2024-03-07T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-19T03:23:52.000Z\\",\\"author\\":[]}"]]},"headers":[{"level":2,"title":"核心思想","slug":"核心思想","link":"#核心思想","children":[]},{"level":2,"title":"基准代码和配置严格分离","slug":"基准代码和配置严格分离","link":"#基准代码和配置严格分离","children":[]}],"git":{"createdTime":1709540171000,"updatedTime":1718767432000},"readingTime":{"minutes":0.3,"words":90},"filePathRelative":"dump/software-engineering/twelve-factor/003-config.md","localizedDate":"2024年3月7日","autoDesc":true,"excerpt":"\\n

核心思想

\\n

在环境中存储配置。

\\n

基准代码和配置严格分离

\\n

判断一个应用是否正确地将配置排除在代码之外,一个简单的方法是看该应用的基准代码是否可以立刻开源,而不用担心会暴露任何敏感的信息。

\\n"}`);export{h as comp,m as data}; diff --git a/assets/003-intimate-relationship.html-DjQFKM8p.js b/assets/003-intimate-relationship.html-C5rFDAOQ.js similarity index 99% rename from assets/003-intimate-relationship.html-DjQFKM8p.js rename to assets/003-intimate-relationship.html-C5rFDAOQ.js index a7233476f..fd79d4940 100644 --- a/assets/003-intimate-relationship.html-DjQFKM8p.js +++ b/assets/003-intimate-relationship.html-C5rFDAOQ.js @@ -1 +1 @@ -import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as e,c as p,a as r}from"./app-BLyK9ZJy.js";const i={},o=r('

亲密关系

(加)克里斯多福·孟

亲密关系的过程分为以下几个阶段:绚丽、幻灭、内省和启示。


在恋爱初期我们最欣赏的对方的优点,可能到了后期正是我们想离开他的原因!其中的关键,就在于我们以为对方拥有我们幸福快乐的钥匙,竟然胆敢不给我们。


绝对的爱是无条件的:通常我们在亲密关系中所谓的爱,事实上是由于伴侣的行为所带来的满足感,或对于重要感与归属感的需求。真正的爱是无条件的,完全与任何情境和情势无关,无法从他人那儿获取,也非由他人的行为而触发,而是因为你就是你!一段关系的目的不是给予与接受彼此的爱,而是帮助你了解你自己就是一直以来所寻找的爱。


你的伴侣不是你的爱与幸福的来源。满足你的期待与使你开心不是他们的职责,但你的伴侣的确在你的生活中扮演了三个重要的角色,尤其在面对情感上的成熟与唤醒真实自我的时候。这时你的伴侣将会依所需而扮演这三种角色之一:


愤恨是悲苦、不满足和失去信任感的组合。

期望=愤恨的前身。换句话说,期望终究会转变成愤恨。


当你与伴侣初遇时,你们所分享的大多是“好的”。到了幻灭的阶段,你们便会开始发现所谓的对方“不好的”一面。在这个阶段快要结束,而内省的阶段即将开始时,事情多半会变得“丑陋”。如果你能用健康的态度来面对“不好的”和“丑陋的”,那么内省的阶段将会让你领悟到亲密关系事实上是多么“神圣”。


我们对伴侣发怒的原因有两个:


愤怒有三种表达方式:攻击,情绪抽离,被动攻击。


攻击是公开、明显表示愤怒的方式,通常包含批评、指责、怪罪、威胁、肢体攻击、下最后通牒或言语中伤等几种形式。不论何种形式,都能明显看出对方在生气,而且要你为他们的痛苦负责。

吵架时我们说的话和事情没有太大的关联,我们只是用言语来伤人,同时替自己的行为找个符合逻辑的借口而已。但是,言语攻击本身就是不合逻辑的,而只是用暴力来保护自己。所有攻击都是出于自卫。


情绪抽离则是较沉默的表达愤怒的方式。

如果争吵时只有一方在大喊大叫,不要被静静坐着的那一方唬到了。沉默和大呼小叫其实可以同样暴力。

情绪抽离的各种形式、效果都是一致的:一言不发地让自己远离造成痛苦的人。


被动攻击就比较像是零星的战火,你假装不太介意对方的行为,但你的言语间却充斥着隐隐约约的批评、讽刺、批判、嘲弄或抱怨。另一种表达方式是装作极度受伤,几乎要哭出来,但并不直接指控对方故意伤害你。装作无辜的受害者,能让对方觉得自己像个坏人,而由于你并没有指控他们做错事,你也同时剥夺了他们自卫的权利。


愤怒背后的主要意图也就是如此:让别人有罪恶感,让他们为你内心的痛苦负责。于是,让你快乐就成了他们的责任。从长远的眼光来看,你用何种方式表达愤怒,或别人用何种方式对你表达愤怒,根本就不重要。如果你感到愤怒,怒气其实是在保护你不去感受痛苦。如果我们能对自己诚实,并选择面对痛苦,我们就会了解这是治好旧痛的机会。而如果我们选择攻击伴侣或抽离自己的情绪,那么我们也许不必去感受痛苦,但同时我们也失去了疗伤的机会,自然也就无法改正这些痛苦所造成的自我局限的信念。


愤怒被广泛运用还有一个很重要的原因。当旧痛以争执的形式浮现时,愤怒提供给我们一个美妙的机会去感觉自己是“对的”。


如果无力掌控大局,又不想感觉能力不足或没安全感,最快的解决方法就是证明自己是对的。你只要批评、责怪、批判或证明别人是错的,然后再理直气壮地火上浇油一下,很快,你就会全身充满肾上腺素,觉得自己像是刚完成变身从电话亭出来的超人。


吵架吵得很激烈的时候,我们实在很难记得不快其实是来自过去的经历。但时时提醒自己我们生气的原因不是自己想的那回事是很重要的,否则我们便会经常把伴侣当作敌人来看待。


人类应付痛苦的典型策略:放纵或否认。一方会放纵自己的焦虑、愤怒、不满的情绪,而另一方则会压抑这些情绪,选择逃跑,否认问题的严重性。


如果你不喜欢现在亲密关系的状态,你只要放下立场,去寻求和谐就可以了。在一般情形下,你的伴侣也会跟着改变。如果你觉得对方没有改变,往往是因为你并没有放下自己的立场。有时候,虽然伴侣的行为没有改变,你却不再介意了。还有些时候,伴侣不肯改变,而选择离开。如果是这样,那么两人都可以重新寻觅更适合自己的亲密关系。只要你肯放下立场,不管结果是怎样,对你永远是只有好处没有坏处的,因为坚持立场所得到的,只有理直气壮和骄傲所带来的不真实的安全感。放了手,就能得到自由,让自己在智慧和成熟中成长。


如果你想要赢,就一定会在冲突时争个胜负,但是胜负之争只会让胜者有罪恶感,且让败者愤恨不满、心存报复。


当你觉得伴侣的行为是想伤害你的感情,当你觉得伴侣的话或举动让你受到刺激、背叛或侮辱,那么很可能你们之间的权力斗争已经转变为报复。如果你因为伴侣的痛苦而沾沾自喜,甚至十分高兴的话,那么你就是在报复对方。


只有爱能进入你的心,去改变只有给予却不懂得接受的模式(牺牲),以及只有获得却不懂得享受的模式(放纵),使得牺牲转变为真心的给予,而使放纵转为真心的接受。


你永远不需要去寻找、追逐或赢得爱,因为爱不会躲藏,不会跑走,也不会向你要求任何代价。你只要在心里为它留一块空间,爱就会自然地注入你心中。

',49),a=[o];function n(h,l){return e(),p("div",null,a)}const m=t(i,[["render",n],["__file","003-intimate-relationship.html.vue"]]),d=JSON.parse(`{"path":"/reading/2023/003-intimate-relationship.html","title":"亲密关系","lang":"zh-CN","frontmatter":{"date":"2023-10-18T00:00:00.000Z","description":"亲密关系 (加)克里斯多福·孟 亲密关系的过程分为以下几个阶段:绚丽、幻灭、内省和启示。 在恋爱初期我们最欣赏的对方的优点,可能到了后期正是我们想离开他的原因!其中的关键,就在于我们以为对方拥有我们幸福快乐的钥匙,竟然胆敢不给我们。 绝对的爱是无条件的:通常我们在亲密关系中所谓的爱,事实上是由于伴侣的行为所带来的满足感,或对于重要感与归属感的需求。真正...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/003-intimate-relationship.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"亲密关系"}],["meta",{"property":"og:description","content":"亲密关系 (加)克里斯多福·孟 亲密关系的过程分为以下几个阶段:绚丽、幻灭、内省和启示。 在恋爱初期我们最欣赏的对方的优点,可能到了后期正是我们想离开他的原因!其中的关键,就在于我们以为对方拥有我们幸福快乐的钥匙,竟然胆敢不给我们。 绝对的爱是无条件的:通常我们在亲密关系中所谓的爱,事实上是由于伴侣的行为所带来的满足感,或对于重要感与归属感的需求。真正..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-03-05T14:58:56.000Z"}],["meta",{"property":"article:published_time","content":"2023-10-18T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-03-05T14:58:56.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"亲密关系\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-10-18T00:00:00.000Z\\",\\"dateModified\\":\\"2024-03-05T14:58:56.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1690179304000,"updatedTime":1709650736000},"readingTime":{"minutes":6.7,"words":2009},"filePathRelative":"reading/2023/003-intimate-relationship.md","localizedDate":"2023年10月18日","autoDesc":true,"excerpt":"\\n
\\n

(加)克里斯多福·孟

\\n
\\n

亲密关系的过程分为以下几个阶段:绚丽、幻灭、内省和启示。

\\n
\\n

在恋爱初期我们最欣赏的对方的优点,可能到了后期正是我们想离开他的原因!其中的关键,就在于我们以为对方拥有我们幸福快乐的钥匙,竟然胆敢不给我们。

\\n
\\n

绝对的爱是无条件的:通常我们在亲密关系中所谓的爱,事实上是由于伴侣的行为所带来的满足感,或对于重要感与归属感的需求。真正的爱是无条件的,完全与任何情境和情势无关,无法从他人那儿获取,也非由他人的行为而触发,而是因为你就是你!一段关系的目的不是给予与接受彼此的爱,而是帮助你了解你自己就是一直以来所寻找的爱。

"}`);export{m as comp,d as data}; +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as e,c as p,a as r}from"./app-BSa8cFh0.js";const i={},o=r('

亲密关系

(加)克里斯多福·孟

亲密关系的过程分为以下几个阶段:绚丽、幻灭、内省和启示。


在恋爱初期我们最欣赏的对方的优点,可能到了后期正是我们想离开他的原因!其中的关键,就在于我们以为对方拥有我们幸福快乐的钥匙,竟然胆敢不给我们。


绝对的爱是无条件的:通常我们在亲密关系中所谓的爱,事实上是由于伴侣的行为所带来的满足感,或对于重要感与归属感的需求。真正的爱是无条件的,完全与任何情境和情势无关,无法从他人那儿获取,也非由他人的行为而触发,而是因为你就是你!一段关系的目的不是给予与接受彼此的爱,而是帮助你了解你自己就是一直以来所寻找的爱。


你的伴侣不是你的爱与幸福的来源。满足你的期待与使你开心不是他们的职责,但你的伴侣的确在你的生活中扮演了三个重要的角色,尤其在面对情感上的成熟与唤醒真实自我的时候。这时你的伴侣将会依所需而扮演这三种角色之一:


愤恨是悲苦、不满足和失去信任感的组合。

期望=愤恨的前身。换句话说,期望终究会转变成愤恨。


当你与伴侣初遇时,你们所分享的大多是“好的”。到了幻灭的阶段,你们便会开始发现所谓的对方“不好的”一面。在这个阶段快要结束,而内省的阶段即将开始时,事情多半会变得“丑陋”。如果你能用健康的态度来面对“不好的”和“丑陋的”,那么内省的阶段将会让你领悟到亲密关系事实上是多么“神圣”。


我们对伴侣发怒的原因有两个:


愤怒有三种表达方式:攻击,情绪抽离,被动攻击。


攻击是公开、明显表示愤怒的方式,通常包含批评、指责、怪罪、威胁、肢体攻击、下最后通牒或言语中伤等几种形式。不论何种形式,都能明显看出对方在生气,而且要你为他们的痛苦负责。

吵架时我们说的话和事情没有太大的关联,我们只是用言语来伤人,同时替自己的行为找个符合逻辑的借口而已。但是,言语攻击本身就是不合逻辑的,而只是用暴力来保护自己。所有攻击都是出于自卫。


情绪抽离则是较沉默的表达愤怒的方式。

如果争吵时只有一方在大喊大叫,不要被静静坐着的那一方唬到了。沉默和大呼小叫其实可以同样暴力。

情绪抽离的各种形式、效果都是一致的:一言不发地让自己远离造成痛苦的人。


被动攻击就比较像是零星的战火,你假装不太介意对方的行为,但你的言语间却充斥着隐隐约约的批评、讽刺、批判、嘲弄或抱怨。另一种表达方式是装作极度受伤,几乎要哭出来,但并不直接指控对方故意伤害你。装作无辜的受害者,能让对方觉得自己像个坏人,而由于你并没有指控他们做错事,你也同时剥夺了他们自卫的权利。


愤怒背后的主要意图也就是如此:让别人有罪恶感,让他们为你内心的痛苦负责。于是,让你快乐就成了他们的责任。从长远的眼光来看,你用何种方式表达愤怒,或别人用何种方式对你表达愤怒,根本就不重要。如果你感到愤怒,怒气其实是在保护你不去感受痛苦。如果我们能对自己诚实,并选择面对痛苦,我们就会了解这是治好旧痛的机会。而如果我们选择攻击伴侣或抽离自己的情绪,那么我们也许不必去感受痛苦,但同时我们也失去了疗伤的机会,自然也就无法改正这些痛苦所造成的自我局限的信念。


愤怒被广泛运用还有一个很重要的原因。当旧痛以争执的形式浮现时,愤怒提供给我们一个美妙的机会去感觉自己是“对的”。


如果无力掌控大局,又不想感觉能力不足或没安全感,最快的解决方法就是证明自己是对的。你只要批评、责怪、批判或证明别人是错的,然后再理直气壮地火上浇油一下,很快,你就会全身充满肾上腺素,觉得自己像是刚完成变身从电话亭出来的超人。


吵架吵得很激烈的时候,我们实在很难记得不快其实是来自过去的经历。但时时提醒自己我们生气的原因不是自己想的那回事是很重要的,否则我们便会经常把伴侣当作敌人来看待。


人类应付痛苦的典型策略:放纵或否认。一方会放纵自己的焦虑、愤怒、不满的情绪,而另一方则会压抑这些情绪,选择逃跑,否认问题的严重性。


如果你不喜欢现在亲密关系的状态,你只要放下立场,去寻求和谐就可以了。在一般情形下,你的伴侣也会跟着改变。如果你觉得对方没有改变,往往是因为你并没有放下自己的立场。有时候,虽然伴侣的行为没有改变,你却不再介意了。还有些时候,伴侣不肯改变,而选择离开。如果是这样,那么两人都可以重新寻觅更适合自己的亲密关系。只要你肯放下立场,不管结果是怎样,对你永远是只有好处没有坏处的,因为坚持立场所得到的,只有理直气壮和骄傲所带来的不真实的安全感。放了手,就能得到自由,让自己在智慧和成熟中成长。


如果你想要赢,就一定会在冲突时争个胜负,但是胜负之争只会让胜者有罪恶感,且让败者愤恨不满、心存报复。


当你觉得伴侣的行为是想伤害你的感情,当你觉得伴侣的话或举动让你受到刺激、背叛或侮辱,那么很可能你们之间的权力斗争已经转变为报复。如果你因为伴侣的痛苦而沾沾自喜,甚至十分高兴的话,那么你就是在报复对方。


只有爱能进入你的心,去改变只有给予却不懂得接受的模式(牺牲),以及只有获得却不懂得享受的模式(放纵),使得牺牲转变为真心的给予,而使放纵转为真心的接受。


你永远不需要去寻找、追逐或赢得爱,因为爱不会躲藏,不会跑走,也不会向你要求任何代价。你只要在心里为它留一块空间,爱就会自然地注入你心中。

',49),a=[o];function n(h,l){return e(),p("div",null,a)}const m=t(i,[["render",n],["__file","003-intimate-relationship.html.vue"]]),d=JSON.parse(`{"path":"/reading/2023/003-intimate-relationship.html","title":"亲密关系","lang":"zh-CN","frontmatter":{"date":"2023-10-18T00:00:00.000Z","description":"亲密关系 (加)克里斯多福·孟 亲密关系的过程分为以下几个阶段:绚丽、幻灭、内省和启示。 在恋爱初期我们最欣赏的对方的优点,可能到了后期正是我们想离开他的原因!其中的关键,就在于我们以为对方拥有我们幸福快乐的钥匙,竟然胆敢不给我们。 绝对的爱是无条件的:通常我们在亲密关系中所谓的爱,事实上是由于伴侣的行为所带来的满足感,或对于重要感与归属感的需求。真正...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/003-intimate-relationship.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"亲密关系"}],["meta",{"property":"og:description","content":"亲密关系 (加)克里斯多福·孟 亲密关系的过程分为以下几个阶段:绚丽、幻灭、内省和启示。 在恋爱初期我们最欣赏的对方的优点,可能到了后期正是我们想离开他的原因!其中的关键,就在于我们以为对方拥有我们幸福快乐的钥匙,竟然胆敢不给我们。 绝对的爱是无条件的:通常我们在亲密关系中所谓的爱,事实上是由于伴侣的行为所带来的满足感,或对于重要感与归属感的需求。真正..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-03-05T14:58:56.000Z"}],["meta",{"property":"article:published_time","content":"2023-10-18T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-03-05T14:58:56.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"亲密关系\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-10-18T00:00:00.000Z\\",\\"dateModified\\":\\"2024-03-05T14:58:56.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1690179304000,"updatedTime":1709650736000},"readingTime":{"minutes":6.7,"words":2009},"filePathRelative":"reading/2023/003-intimate-relationship.md","localizedDate":"2023年10月18日","autoDesc":true,"excerpt":"\\n
\\n

(加)克里斯多福·孟

\\n
\\n

亲密关系的过程分为以下几个阶段:绚丽、幻灭、内省和启示。

\\n
\\n

在恋爱初期我们最欣赏的对方的优点,可能到了后期正是我们想离开他的原因!其中的关键,就在于我们以为对方拥有我们幸福快乐的钥匙,竟然胆敢不给我们。

\\n
\\n

绝对的爱是无条件的:通常我们在亲密关系中所谓的爱,事实上是由于伴侣的行为所带来的满足感,或对于重要感与归属感的需求。真正的爱是无条件的,完全与任何情境和情势无关,无法从他人那儿获取,也非由他人的行为而触发,而是因为你就是你!一段关系的目的不是给予与接受彼此的爱,而是帮助你了解你自己就是一直以来所寻找的爱。

"}`);export{m as comp,d as data}; diff --git a/assets/003-naval.html-D-e1jHRy.js b/assets/003-naval.html-Cgl8Tfeb.js similarity index 99% rename from assets/003-naval.html-D-e1jHRy.js rename to assets/003-naval.html-Cgl8Tfeb.js index eca739c46..21e6e78f8 100644 --- a/assets/003-naval.html-D-e1jHRy.js +++ b/assets/003-naval.html-Cgl8Tfeb.js @@ -1 +1 @@ -import{_ as p}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as e,c as t,a as r}from"./app-BLyK9ZJy.js";const a={},o=r('

纳瓦尔宝典

埃里克 · 乔根森(美)

最好的工作与委任或学位无关。最好的工作是终身学习者在自由市场中的创造性表达。


总体而言,杠杆有三种。

第一种是劳动力杠杆,也就是让别人给你打工。

资本是第二种相对较好的杠杆形式。

最后一种杠杆是最新出现的,也是普通人最触手可及的。这种杠杆就是“复制边际成本为零的产品”。

其中包括书籍、媒体、电影、代码。在所有不需要他人许可就能使用的杠杆中,代码可以说是最强大的一种——只需要一台计算机就够了。


人生的一大目标应该是掌控自己的时间。理想的工作是利用杠杆效应的工作。在这种工作模式下,你可以掌控自己的时间,并能对自己的产出成果负责。


任何一款产品的构建和销售都是这样的,投入与产出不存在必然联系。世界上的工作本质上分为两种:存在杠杆的工作和不存在杠杆的工作。所以不要选择类似客服这样的支持性工作。这种工作投入和产出的关系相对紧密,产出主要取决于投入的时长。

投入和产出之所以脱节,是因为工具和杠杆的存在。一个职业的创造性越高,其投入与产出的不匹配性越高。而投入和产出高度相关的职业很难创造财富,从事这种职业也很难给自己带来财富。


找到自己擅长的领域,然后用自己的技能去帮助他人:提供免费的产品或服务,主动向世界传递善意。好人终有好报。只要始终如一,假以时日,付出就一定能获得相应的回报。但不要计较自己付出了多少——一旦开始计较,耐心就会被消耗殆尽。


赚钱的目的是解决财务问题,满足物质需求。我认为,摆脱金钱贪念最好的办法就是,赚了钱之后不要升级自己的生活方式。赚到钱的人往往会自然而然地提高生活水准。


赚钱很关键的一点就是知名度和信誉度,也就是说,大家要知道你、信任你,这样人们便会通过你达成某些交易。


做一个创造者,创造出人们想要的有趣的东西。展示你的技能,练习你的技能,最终会有合适的人找到你。


如果一个人大谈特谈自己有多诚实,那么他很可能是不诚实的。这只是我学到的一个小小的警示信号。当一个人不断宣扬自己的价值观,或者自我吹嘘时,那就意味着他在掩饰什么。


要选择从长期来看让我们受益最大的做法,而不是只顾眼前得失。


做人除了要极度诚实,还可以参照巴菲特很久之前说过的一个建议:具体地表扬,泛泛地批评。

如果要提出批评意见,不要批评某个人,可以批评工作方法,或者批评某一类行为。如果要表扬,那就找到一个榜样,表扬这个特定的人。这样有助于维护你身边人的自尊心和身份感,获得他们的支持,让他们为你所用,而不是与你作对。


成功的关键并不在于做出正确判断,而在于避免做出错误判断。


如果你是委托人,你就会有主人翁的责任感,因为在意结果,所以你会做得很好。而如果你是代理人,你就是在为别人做事,你可能会做得很糟糕,因为你不在乎。


创业和经商不需要学习几何学、三角函数、微积分,也不需要学习其他任何复杂的数学课程,但是需要学习算法、概率学和统计学,这些分支学科都非常重要。要吃透基础数学,真正掌握加减乘除、复利计算、概率论和统计学。


如果你难以抉择,答案就是否定的。


人做不到绝对确定,但是我们一定要在非常确定的情况下再做出决定。


一条简单的人生经验:如果在一个艰难的决定上意见不统一,你就应该选择短期内更痛苦的道路。


建立新的心智模型最有效的方法是什么?
海量阅读,多多益善。


读书的唯一原因应该是喜欢,不需要其他任何理由。不要把读书当成一项任务,读书就是因为乐在其中。


指出别人观点中明显的偏颇,意味着要么你攻击的对象不聪明,要么你自身不聪明。


人类是具有高度主观意识的生存和繁殖机器,会一刻不停地对周围的一切做出评判。我们不断地接收和判断周围的信息,想着“我需要这个”或者“我需要那个”,深陷欲望之网,难以自拔。而幸福就是一种毫无缺憾感的充盈状态。当感到生命中并不缺少什么时,大脑就会处于休眠状态,不再追忆昨天,也不再畅想明天,不会悔不当初,也不会谋求未来。


万物皆有二元性和极性。如果我说现在我很开心,那就意味着在某个时刻我很伤心。如果我说一个人有魅力,意思就是其他人没有魅力。每一个积极想法都有一个消极想法的种子蕴含其中,反之亦然,这就是为什么生命的伟大在很大程度上源于苦难。人必须先看到消极的一面,才能去憧憬和欣赏积极的一面。


幸福不等同于积极的心态,也不等同于没有消极的想法。幸福是一种无欲无求的状态,特别是对外界事物的欲望。欲望越少,越能接受事物的当前状态,头脑越平静。


幸福的含义主要是没有痛苦,没有欲望,不沉溺于对未来或过去的思考,真正拥抱当下,拥抱现状,拥抱现实的一切。


真正的幸福只是内心平和的副产品,主要还是源于接受现实,而不是改变外部环境。


理性很强的人可以通过训练自己的无感反应获得平和,即学会漠视自己无法控制的事物。


在任何时候(比如走路的时候),大脑都只有很小一部分是关注当下的。大脑把主要精力用于规划未来或悔恨过去。这样的运行机制让人无法获得绝妙的体验,无法欣赏周遭一切事物的美妙之处,无法因为现状常怀感恩之心。如果每天都沉浸在对未来的规划和幻想中,那就是在亲手扼杀自己的幸福。


我认为,过去就是过去了,没有回忆,没有遗憾,没有放不下的人,没有忘不掉的旅行。既往不恋。人之所以感到痛苦,很多时候是因为拿以往和现在做比较。


如果你是在追随内在的目的,做自己想做的事情,那么你自然会觉得幸福。但如果目的是外界强加给你的,你做的是不得不做的事情,如“社会希望我做这件事”,“爸爸是爷爷的长子,我又是爸爸的长子,因此我必须这样做”,“我欠债了,负担很重,必须努力”,等等,那么你是不会幸福的。


欲望就是你跟自己的约定,约定的内容是:不得到我想要的东西,我是不会快乐的。


人生的大赢家就是同时拥有时间、健康和金钱。


平和是静态的幸福,幸福是动态的平和。


在任何特定的时间段,只选择一个最有价值的欲望,作为自己的奋斗目标和动力之源。


你的人生目标是找到最需要你的人、事业、项目或艺术。大千世界,芸芸众生,总有一些人和事会与你完美契合。不要基于别人正在做的事为你自己列清单、做决策。你永远不会成为他们,你永远都不擅长做另一个人。


世界上最简单的饮食原则:食物加工程度越深,就应该越少摄入。


基本上,无论你什么时候跟别人分享所谓的好习惯,他们都会给自己找到借口,最常见的借口就是“我没时间”。表面上说的是“我没时间”,但其实说的是,“这对我来说不是优先事项”。到底要不要做,就要看这件事是不是你优先考虑的事项。


养成习惯的方法和过程并不重要,甚至连做什么都不重要,重要的是每天坚持。很多人纠结于举重训练、网球、普拉提、高强度间歇训练和“快乐身体”健身法到底哪个最有效。其实他们搞错了重点。我要重复一遍,每天坚持才是最重要的,坚持做什么是次要的。对个人而言,最好的锻炼就是每天都能坚持去做的那种锻炼。


选择简单模式,人生会越来越困难;选择困难模式,人生会越来越简单。


人的一生会经历大大小小的事情,有好事,有坏事,其中大部分都会得到处理和解决,但还有一些会长久地伴随着你。随着时间的推移,这类事情会越积越多,就像藤蔓一样将你层层缠住。

这些不曾解决的痛苦、错误、恐惧和欲望已经成为你的一部分,像藤蔓一样附着在你的周身,让你失去童年时的好奇心,失去活在当下、乐在其中的能力,失去内心的快乐。


如果人生可以重来,我还是会做出同样的选择,只是希望自己可以控制情绪波动,多一些宽容和平静,少一些戾气和愤怒。


需要做,就去做,还等什么呢?生命的长河奔腾不止,青春一去不复返。不要浪费时间拖延等待,不要浪费时间踟蹰徘徊。每个人都有自己的使命,不要浪费时间做不属于自己人生使命的事情。

一旦决定去做,就要迅速采取行动,并全神贯注,全力以赴。同时,要对结果保持耐心,因为你唯一能把握的只有自己,他人和外界环境都纷繁复杂、充满变数。


如果他人因对你抱有期待而受伤,那就是他们的问题。如果他们和你有约在先,那就是你的问题。但如果他们只是单方面对你有所期待,那就完全是他们的问题,与你毫无关系。他们会对生活有各种各样的期待,越早打破他们对你的期待越好。


我从未完整地总结过自己的价值观,但可以在此列举几个。

诚实是我最核心的价值观之一。我说的诚实,指的是做真实的自己。

另一个基本的价值观是,我不赞成任何短期思维或短期交易。

另一个价值观是,我赞同平级关系,不接受等级关系。

还有一个价值观,现在我觉得愤怒是毫无意义的。

',99),h=[o];function n(c,i){return e(),t("div",null,h)}const s=p(a,[["render",n],["__file","003-naval.html.vue"]]),m=JSON.parse(`{"path":"/reading/2024/003-naval.html","title":"纳瓦尔宝典","lang":"zh-CN","frontmatter":{"date":"2024-06-21T00:00:00.000Z","description":"纳瓦尔宝典 埃里克 · 乔根森(美) 最好的工作与委任或学位无关。最好的工作是终身学习者在自由市场中的创造性表达。 总体而言,杠杆有三种。 第一种是劳动力杠杆,也就是让别人给你打工。 资本是第二种相对较好的杠杆形式。 最后一种杠杆是最新出现的,也是普通人最触手可及的。这种杠杆就是“复制边际成本为零的产品”。 其中包括书籍、媒体、电影、代码。在所有不需要...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2024/003-naval.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"纳瓦尔宝典"}],["meta",{"property":"og:description","content":"纳瓦尔宝典 埃里克 · 乔根森(美) 最好的工作与委任或学位无关。最好的工作是终身学习者在自由市场中的创造性表达。 总体而言,杠杆有三种。 第一种是劳动力杠杆,也就是让别人给你打工。 资本是第二种相对较好的杠杆形式。 最后一种杠杆是最新出现的,也是普通人最触手可及的。这种杠杆就是“复制边际成本为零的产品”。 其中包括书籍、媒体、电影、代码。在所有不需要..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-21T06:52:13.000Z"}],["meta",{"property":"article:published_time","content":"2024-06-21T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-21T06:52:13.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"纳瓦尔宝典\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2024-06-21T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-21T06:52:13.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1718952733000,"updatedTime":1718952733000},"readingTime":{"minutes":10.12,"words":3035},"filePathRelative":"reading/2024/003-naval.md","localizedDate":"2024年6月21日","autoDesc":true,"excerpt":"\\n
\\n

埃里克 · 乔根森(美)

\\n
\\n

最好的工作与委任或学位无关。最好的工作是终身学习者在自由市场中的创造性表达。

\\n
\\n

总体而言,杠杆有三种。

\\n

第一种是劳动力杠杆,也就是让别人给你打工。

\\n

资本是第二种相对较好的杠杆形式。

\\n

最后一种杠杆是最新出现的,也是普通人最触手可及的。这种杠杆就是“复制边际成本为零的产品”。

\\n

其中包括书籍、媒体、电影、代码。在所有不需要他人许可就能使用的杠杆中,代码可以说是最强大的一种——只需要一台计算机就够了。

\\n
\\n

人生的一大目标应该是掌控自己的时间。理想的工作是利用杠杆效应的工作。在这种工作模式下,你可以掌控自己的时间,并能对自己的产出成果负责。

"}`);export{s as comp,m as data}; +import{_ as p}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as e,c as t,a as r}from"./app-BSa8cFh0.js";const a={},o=r('

纳瓦尔宝典

埃里克 · 乔根森(美)

最好的工作与委任或学位无关。最好的工作是终身学习者在自由市场中的创造性表达。


总体而言,杠杆有三种。

第一种是劳动力杠杆,也就是让别人给你打工。

资本是第二种相对较好的杠杆形式。

最后一种杠杆是最新出现的,也是普通人最触手可及的。这种杠杆就是“复制边际成本为零的产品”。

其中包括书籍、媒体、电影、代码。在所有不需要他人许可就能使用的杠杆中,代码可以说是最强大的一种——只需要一台计算机就够了。


人生的一大目标应该是掌控自己的时间。理想的工作是利用杠杆效应的工作。在这种工作模式下,你可以掌控自己的时间,并能对自己的产出成果负责。


任何一款产品的构建和销售都是这样的,投入与产出不存在必然联系。世界上的工作本质上分为两种:存在杠杆的工作和不存在杠杆的工作。所以不要选择类似客服这样的支持性工作。这种工作投入和产出的关系相对紧密,产出主要取决于投入的时长。

投入和产出之所以脱节,是因为工具和杠杆的存在。一个职业的创造性越高,其投入与产出的不匹配性越高。而投入和产出高度相关的职业很难创造财富,从事这种职业也很难给自己带来财富。


找到自己擅长的领域,然后用自己的技能去帮助他人:提供免费的产品或服务,主动向世界传递善意。好人终有好报。只要始终如一,假以时日,付出就一定能获得相应的回报。但不要计较自己付出了多少——一旦开始计较,耐心就会被消耗殆尽。


赚钱的目的是解决财务问题,满足物质需求。我认为,摆脱金钱贪念最好的办法就是,赚了钱之后不要升级自己的生活方式。赚到钱的人往往会自然而然地提高生活水准。


赚钱很关键的一点就是知名度和信誉度,也就是说,大家要知道你、信任你,这样人们便会通过你达成某些交易。


做一个创造者,创造出人们想要的有趣的东西。展示你的技能,练习你的技能,最终会有合适的人找到你。


如果一个人大谈特谈自己有多诚实,那么他很可能是不诚实的。这只是我学到的一个小小的警示信号。当一个人不断宣扬自己的价值观,或者自我吹嘘时,那就意味着他在掩饰什么。


要选择从长期来看让我们受益最大的做法,而不是只顾眼前得失。


做人除了要极度诚实,还可以参照巴菲特很久之前说过的一个建议:具体地表扬,泛泛地批评。

如果要提出批评意见,不要批评某个人,可以批评工作方法,或者批评某一类行为。如果要表扬,那就找到一个榜样,表扬这个特定的人。这样有助于维护你身边人的自尊心和身份感,获得他们的支持,让他们为你所用,而不是与你作对。


成功的关键并不在于做出正确判断,而在于避免做出错误判断。


如果你是委托人,你就会有主人翁的责任感,因为在意结果,所以你会做得很好。而如果你是代理人,你就是在为别人做事,你可能会做得很糟糕,因为你不在乎。


创业和经商不需要学习几何学、三角函数、微积分,也不需要学习其他任何复杂的数学课程,但是需要学习算法、概率学和统计学,这些分支学科都非常重要。要吃透基础数学,真正掌握加减乘除、复利计算、概率论和统计学。


如果你难以抉择,答案就是否定的。


人做不到绝对确定,但是我们一定要在非常确定的情况下再做出决定。


一条简单的人生经验:如果在一个艰难的决定上意见不统一,你就应该选择短期内更痛苦的道路。


建立新的心智模型最有效的方法是什么?
海量阅读,多多益善。


读书的唯一原因应该是喜欢,不需要其他任何理由。不要把读书当成一项任务,读书就是因为乐在其中。


指出别人观点中明显的偏颇,意味着要么你攻击的对象不聪明,要么你自身不聪明。


人类是具有高度主观意识的生存和繁殖机器,会一刻不停地对周围的一切做出评判。我们不断地接收和判断周围的信息,想着“我需要这个”或者“我需要那个”,深陷欲望之网,难以自拔。而幸福就是一种毫无缺憾感的充盈状态。当感到生命中并不缺少什么时,大脑就会处于休眠状态,不再追忆昨天,也不再畅想明天,不会悔不当初,也不会谋求未来。


万物皆有二元性和极性。如果我说现在我很开心,那就意味着在某个时刻我很伤心。如果我说一个人有魅力,意思就是其他人没有魅力。每一个积极想法都有一个消极想法的种子蕴含其中,反之亦然,这就是为什么生命的伟大在很大程度上源于苦难。人必须先看到消极的一面,才能去憧憬和欣赏积极的一面。


幸福不等同于积极的心态,也不等同于没有消极的想法。幸福是一种无欲无求的状态,特别是对外界事物的欲望。欲望越少,越能接受事物的当前状态,头脑越平静。


幸福的含义主要是没有痛苦,没有欲望,不沉溺于对未来或过去的思考,真正拥抱当下,拥抱现状,拥抱现实的一切。


真正的幸福只是内心平和的副产品,主要还是源于接受现实,而不是改变外部环境。


理性很强的人可以通过训练自己的无感反应获得平和,即学会漠视自己无法控制的事物。


在任何时候(比如走路的时候),大脑都只有很小一部分是关注当下的。大脑把主要精力用于规划未来或悔恨过去。这样的运行机制让人无法获得绝妙的体验,无法欣赏周遭一切事物的美妙之处,无法因为现状常怀感恩之心。如果每天都沉浸在对未来的规划和幻想中,那就是在亲手扼杀自己的幸福。


我认为,过去就是过去了,没有回忆,没有遗憾,没有放不下的人,没有忘不掉的旅行。既往不恋。人之所以感到痛苦,很多时候是因为拿以往和现在做比较。


如果你是在追随内在的目的,做自己想做的事情,那么你自然会觉得幸福。但如果目的是外界强加给你的,你做的是不得不做的事情,如“社会希望我做这件事”,“爸爸是爷爷的长子,我又是爸爸的长子,因此我必须这样做”,“我欠债了,负担很重,必须努力”,等等,那么你是不会幸福的。


欲望就是你跟自己的约定,约定的内容是:不得到我想要的东西,我是不会快乐的。


人生的大赢家就是同时拥有时间、健康和金钱。


平和是静态的幸福,幸福是动态的平和。


在任何特定的时间段,只选择一个最有价值的欲望,作为自己的奋斗目标和动力之源。


你的人生目标是找到最需要你的人、事业、项目或艺术。大千世界,芸芸众生,总有一些人和事会与你完美契合。不要基于别人正在做的事为你自己列清单、做决策。你永远不会成为他们,你永远都不擅长做另一个人。


世界上最简单的饮食原则:食物加工程度越深,就应该越少摄入。


基本上,无论你什么时候跟别人分享所谓的好习惯,他们都会给自己找到借口,最常见的借口就是“我没时间”。表面上说的是“我没时间”,但其实说的是,“这对我来说不是优先事项”。到底要不要做,就要看这件事是不是你优先考虑的事项。


养成习惯的方法和过程并不重要,甚至连做什么都不重要,重要的是每天坚持。很多人纠结于举重训练、网球、普拉提、高强度间歇训练和“快乐身体”健身法到底哪个最有效。其实他们搞错了重点。我要重复一遍,每天坚持才是最重要的,坚持做什么是次要的。对个人而言,最好的锻炼就是每天都能坚持去做的那种锻炼。


选择简单模式,人生会越来越困难;选择困难模式,人生会越来越简单。


人的一生会经历大大小小的事情,有好事,有坏事,其中大部分都会得到处理和解决,但还有一些会长久地伴随着你。随着时间的推移,这类事情会越积越多,就像藤蔓一样将你层层缠住。

这些不曾解决的痛苦、错误、恐惧和欲望已经成为你的一部分,像藤蔓一样附着在你的周身,让你失去童年时的好奇心,失去活在当下、乐在其中的能力,失去内心的快乐。


如果人生可以重来,我还是会做出同样的选择,只是希望自己可以控制情绪波动,多一些宽容和平静,少一些戾气和愤怒。


需要做,就去做,还等什么呢?生命的长河奔腾不止,青春一去不复返。不要浪费时间拖延等待,不要浪费时间踟蹰徘徊。每个人都有自己的使命,不要浪费时间做不属于自己人生使命的事情。

一旦决定去做,就要迅速采取行动,并全神贯注,全力以赴。同时,要对结果保持耐心,因为你唯一能把握的只有自己,他人和外界环境都纷繁复杂、充满变数。


如果他人因对你抱有期待而受伤,那就是他们的问题。如果他们和你有约在先,那就是你的问题。但如果他们只是单方面对你有所期待,那就完全是他们的问题,与你毫无关系。他们会对生活有各种各样的期待,越早打破他们对你的期待越好。


我从未完整地总结过自己的价值观,但可以在此列举几个。

诚实是我最核心的价值观之一。我说的诚实,指的是做真实的自己。

另一个基本的价值观是,我不赞成任何短期思维或短期交易。

另一个价值观是,我赞同平级关系,不接受等级关系。

还有一个价值观,现在我觉得愤怒是毫无意义的。

',99),h=[o];function n(c,i){return e(),t("div",null,h)}const s=p(a,[["render",n],["__file","003-naval.html.vue"]]),m=JSON.parse(`{"path":"/reading/2024/003-naval.html","title":"纳瓦尔宝典","lang":"zh-CN","frontmatter":{"date":"2024-06-21T00:00:00.000Z","description":"纳瓦尔宝典 埃里克 · 乔根森(美) 最好的工作与委任或学位无关。最好的工作是终身学习者在自由市场中的创造性表达。 总体而言,杠杆有三种。 第一种是劳动力杠杆,也就是让别人给你打工。 资本是第二种相对较好的杠杆形式。 最后一种杠杆是最新出现的,也是普通人最触手可及的。这种杠杆就是“复制边际成本为零的产品”。 其中包括书籍、媒体、电影、代码。在所有不需要...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2024/003-naval.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"纳瓦尔宝典"}],["meta",{"property":"og:description","content":"纳瓦尔宝典 埃里克 · 乔根森(美) 最好的工作与委任或学位无关。最好的工作是终身学习者在自由市场中的创造性表达。 总体而言,杠杆有三种。 第一种是劳动力杠杆,也就是让别人给你打工。 资本是第二种相对较好的杠杆形式。 最后一种杠杆是最新出现的,也是普通人最触手可及的。这种杠杆就是“复制边际成本为零的产品”。 其中包括书籍、媒体、电影、代码。在所有不需要..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-21T06:52:13.000Z"}],["meta",{"property":"article:published_time","content":"2024-06-21T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-21T06:52:13.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"纳瓦尔宝典\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2024-06-21T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-21T06:52:13.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1718952733000,"updatedTime":1718952733000},"readingTime":{"minutes":10.12,"words":3035},"filePathRelative":"reading/2024/003-naval.md","localizedDate":"2024年6月21日","autoDesc":true,"excerpt":"\\n
\\n

埃里克 · 乔根森(美)

\\n
\\n

最好的工作与委任或学位无关。最好的工作是终身学习者在自由市场中的创造性表达。

\\n
\\n

总体而言,杠杆有三种。

\\n

第一种是劳动力杠杆,也就是让别人给你打工。

\\n

资本是第二种相对较好的杠杆形式。

\\n

最后一种杠杆是最新出现的,也是普通人最触手可及的。这种杠杆就是“复制边际成本为零的产品”。

\\n

其中包括书籍、媒体、电影、代码。在所有不需要他人许可就能使用的杠杆中,代码可以说是最强大的一种——只需要一台计算机就够了。

\\n
\\n

人生的一大目标应该是掌控自己的时间。理想的工作是利用杠杆效应的工作。在这种工作模式下,你可以掌控自己的时间,并能对自己的产出成果负责。

"}`);export{s as comp,m as data}; diff --git a/assets/004-backing-services.html-BU9TVUpC.js b/assets/004-backing-services.html-d053y8dM.js similarity index 98% rename from assets/004-backing-services.html-BU9TVUpC.js rename to assets/004-backing-services.html-d053y8dM.js index dbd8aa964..d7375c49a 100644 --- a/assets/004-backing-services.html-BU9TVUpC.js +++ b/assets/004-backing-services.html-d053y8dM.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as a,a as n}from"./app-BLyK9ZJy.js";const i="/assets/image/software-engineering/attached-resources.png",r={},o=n('

后端服务

核心思想

把后端服务当作附加资源。

后端服务的定义

后端服务是指应用程序运行时所需要通过网络调用的各种服务,例如数据库服务、消息队列服务、缓存服务等。

后端服务作为资源

对 12-Factor APP 而言,每个不同的后端服务都是一份资源,应用程序通过URL或其他存储在配置中的连接信息来使用所有的服务,并与所有后端服务的部署保持松耦合。

所有后端服务的部署都可以按需加载或卸载,无需修改应用程序的代码。

',9),s=[o];function c(p,g){return t(),a("div",null,s)}const d=e(r,[["render",c],["__file","004-backing-services.html.vue"]]),m=JSON.parse(`{"path":"/dump/software-engineering/twelve-factor/004-backing-services.html","title":"后端服务","lang":"zh-CN","frontmatter":{"date":"2024-03-07T00:00:00.000Z","description":"后端服务 核心思想 把后端服务当作附加资源。 后端服务的定义 后端服务是指应用程序运行时所需要通过网络调用的各种服务,例如数据库服务、消息队列服务、缓存服务等。 后端服务作为资源 对 12-Factor APP 而言,每个不同的后端服务都是一份资源,应用程序通过URL或其他存储在配置中的连接信息来使用所有的服务,并与所有后端服务的部署保持松耦合。 所有...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/dump/software-engineering/twelve-factor/004-backing-services.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"后端服务"}],["meta",{"property":"og:description","content":"后端服务 核心思想 把后端服务当作附加资源。 后端服务的定义 后端服务是指应用程序运行时所需要通过网络调用的各种服务,例如数据库服务、消息队列服务、缓存服务等。 后端服务作为资源 对 12-Factor APP 而言,每个不同的后端服务都是一份资源,应用程序通过URL或其他存储在配置中的连接信息来使用所有的服务,并与所有后端服务的部署保持松耦合。 所有..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:image","content":"https://guoxicheng.top/assets/image/software-engineering/attached-resources.png"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-19T03:23:52.000Z"}],["meta",{"property":"article:published_time","content":"2024-03-07T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-19T03:23:52.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"后端服务\\",\\"image\\":[\\"https://guoxicheng.top/assets/image/software-engineering/attached-resources.png\\"],\\"datePublished\\":\\"2024-03-07T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-19T03:23:52.000Z\\",\\"author\\":[]}"]]},"headers":[{"level":2,"title":"核心思想","slug":"核心思想","link":"#核心思想","children":[]},{"level":2,"title":"后端服务的定义","slug":"后端服务的定义","link":"#后端服务的定义","children":[]},{"level":2,"title":"后端服务作为资源","slug":"后端服务作为资源","link":"#后端服务作为资源","children":[]}],"git":{"createdTime":1709540171000,"updatedTime":1718767432000},"readingTime":{"minutes":0.61,"words":182},"filePathRelative":"dump/software-engineering/twelve-factor/004-backing-services.md","localizedDate":"2024年3月7日","autoDesc":true,"excerpt":"\\n
\\"\\"
\\n

核心思想

\\n

把后端服务当作附加资源。

\\n

后端服务的定义

\\n

后端服务是指应用程序运行时所需要通过网络调用的各种服务,例如数据库服务、消息队列服务、缓存服务等。

\\n

后端服务作为资源

\\n

对 12-Factor APP 而言,每个不同的后端服务都是一份资源,应用程序通过URL或其他存储在配置中的连接信息来使用所有的服务,并与所有后端服务的部署保持松耦合。

"}`);export{d as comp,m as data}; +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as a,a as n}from"./app-BSa8cFh0.js";const i="/assets/image/software-engineering/attached-resources.png",r={},o=n('

后端服务

核心思想

把后端服务当作附加资源。

后端服务的定义

后端服务是指应用程序运行时所需要通过网络调用的各种服务,例如数据库服务、消息队列服务、缓存服务等。

后端服务作为资源

对 12-Factor APP 而言,每个不同的后端服务都是一份资源,应用程序通过URL或其他存储在配置中的连接信息来使用所有的服务,并与所有后端服务的部署保持松耦合。

所有后端服务的部署都可以按需加载或卸载,无需修改应用程序的代码。

',9),s=[o];function c(p,g){return t(),a("div",null,s)}const d=e(r,[["render",c],["__file","004-backing-services.html.vue"]]),m=JSON.parse(`{"path":"/dump/software-engineering/twelve-factor/004-backing-services.html","title":"后端服务","lang":"zh-CN","frontmatter":{"date":"2024-03-07T00:00:00.000Z","description":"后端服务 核心思想 把后端服务当作附加资源。 后端服务的定义 后端服务是指应用程序运行时所需要通过网络调用的各种服务,例如数据库服务、消息队列服务、缓存服务等。 后端服务作为资源 对 12-Factor APP 而言,每个不同的后端服务都是一份资源,应用程序通过URL或其他存储在配置中的连接信息来使用所有的服务,并与所有后端服务的部署保持松耦合。 所有...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/dump/software-engineering/twelve-factor/004-backing-services.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"后端服务"}],["meta",{"property":"og:description","content":"后端服务 核心思想 把后端服务当作附加资源。 后端服务的定义 后端服务是指应用程序运行时所需要通过网络调用的各种服务,例如数据库服务、消息队列服务、缓存服务等。 后端服务作为资源 对 12-Factor APP 而言,每个不同的后端服务都是一份资源,应用程序通过URL或其他存储在配置中的连接信息来使用所有的服务,并与所有后端服务的部署保持松耦合。 所有..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:image","content":"https://guoxicheng.top/assets/image/software-engineering/attached-resources.png"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-19T03:23:52.000Z"}],["meta",{"property":"article:published_time","content":"2024-03-07T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-19T03:23:52.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"后端服务\\",\\"image\\":[\\"https://guoxicheng.top/assets/image/software-engineering/attached-resources.png\\"],\\"datePublished\\":\\"2024-03-07T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-19T03:23:52.000Z\\",\\"author\\":[]}"]]},"headers":[{"level":2,"title":"核心思想","slug":"核心思想","link":"#核心思想","children":[]},{"level":2,"title":"后端服务的定义","slug":"后端服务的定义","link":"#后端服务的定义","children":[]},{"level":2,"title":"后端服务作为资源","slug":"后端服务作为资源","link":"#后端服务作为资源","children":[]}],"git":{"createdTime":1709540171000,"updatedTime":1718767432000},"readingTime":{"minutes":0.61,"words":182},"filePathRelative":"dump/software-engineering/twelve-factor/004-backing-services.md","localizedDate":"2024年3月7日","autoDesc":true,"excerpt":"\\n
\\"\\"
\\n

核心思想

\\n

把后端服务当作附加资源。

\\n

后端服务的定义

\\n

后端服务是指应用程序运行时所需要通过网络调用的各种服务,例如数据库服务、消息队列服务、缓存服务等。

\\n

后端服务作为资源

\\n

对 12-Factor APP 而言,每个不同的后端服务都是一份资源,应用程序通过URL或其他存储在配置中的连接信息来使用所有的服务,并与所有后端服务的部署保持松耦合。

"}`);export{d as comp,m as data}; diff --git a/assets/004-the-courage-to-be-hated.html-C3nKxC1V.js b/assets/004-the-courage-to-be-hated.html-DUfzzjRY.js similarity index 98% rename from assets/004-the-courage-to-be-hated.html-C3nKxC1V.js rename to assets/004-the-courage-to-be-hated.html-DUfzzjRY.js index 193212c91..4d0cd84d8 100644 --- a/assets/004-the-courage-to-be-hated.html-C3nKxC1V.js +++ b/assets/004-the-courage-to-be-hated.html-DUfzzjRY.js @@ -1 +1 @@ -import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o,c as a,b as e}from"./app-BLyK9ZJy.js";const n={},r=e("h1",{id:"被讨厌的勇气",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#被讨厌的勇气"},[e("span",null,"被讨厌的勇气")])],-1),c=e("blockquote",null,[e("p",null,"(日)岸见一郎、古贺史健")],-1),p=e("p",null,"每个人的课题都是分离又独特的。我怎么爱你,这是我的课题,而你要不要接受我的爱,这是你的课题。每个人都守自己的本分,过自己的人生,人和人之间就没那么多纠结和烦恼。",-1),i=e("hr",null,null,-1),l=e("p",null,"我们应该更加认真地过好“此时此刻”。如果感觉能够看得到过去也能预测到未来,那就证明你没有认真地活在“此时此刻”,而是生活在模糊而微弱的光中。",-1),d=e("p",null,"人生是连续的刹那,根本不存在过去和未来。你是想要通过关注过去或未来为自己寻找免罪符。过去发生了什么与你的“此时此刻”没有任何关系,未来会如何也不是“此时此刻”要考虑的问题。",-1),s=[r,c,p,i,l,d];function h(m,u){return o(),a("div",null,s)}const f=t(n,[["render",h],["__file","004-the-courage-to-be-hated.html.vue"]]),y=JSON.parse(`{"path":"/reading/2023/004-the-courage-to-be-hated.html","title":"被讨厌的勇气","lang":"zh-CN","frontmatter":{"date":"2023-10-18T00:00:00.000Z","description":"被讨厌的勇气 (日)岸见一郎、古贺史健 每个人的课题都是分离又独特的。我怎么爱你,这是我的课题,而你要不要接受我的爱,这是你的课题。每个人都守自己的本分,过自己的人生,人和人之间就没那么多纠结和烦恼。 我们应该更加认真地过好“此时此刻”。如果感觉能够看得到过去也能预测到未来,那就证明你没有认真地活在“此时此刻”,而是生活在模糊而微弱的光中。 人生是连续...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/004-the-courage-to-be-hated.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"被讨厌的勇气"}],["meta",{"property":"og:description","content":"被讨厌的勇气 (日)岸见一郎、古贺史健 每个人的课题都是分离又独特的。我怎么爱你,这是我的课题,而你要不要接受我的爱,这是你的课题。每个人都守自己的本分,过自己的人生,人和人之间就没那么多纠结和烦恼。 我们应该更加认真地过好“此时此刻”。如果感觉能够看得到过去也能预测到未来,那就证明你没有认真地活在“此时此刻”,而是生活在模糊而微弱的光中。 人生是连续..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-03-05T14:58:56.000Z"}],["meta",{"property":"article:published_time","content":"2023-10-18T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-03-05T14:58:56.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"被讨厌的勇气\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-10-18T00:00:00.000Z\\",\\"dateModified\\":\\"2024-03-05T14:58:56.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1690122787000,"updatedTime":1709650736000},"readingTime":{"minutes":0.77,"words":230},"filePathRelative":"reading/2023/004-the-courage-to-be-hated.md","localizedDate":"2023年10月18日","autoDesc":true,"excerpt":"\\n
\\n

(日)岸见一郎、古贺史健

\\n
\\n

每个人的课题都是分离又独特的。我怎么爱你,这是我的课题,而你要不要接受我的爱,这是你的课题。每个人都守自己的本分,过自己的人生,人和人之间就没那么多纠结和烦恼。

\\n
\\n

我们应该更加认真地过好“此时此刻”。如果感觉能够看得到过去也能预测到未来,那就证明你没有认真地活在“此时此刻”,而是生活在模糊而微弱的光中。

\\n

人生是连续的刹那,根本不存在过去和未来。你是想要通过关注过去或未来为自己寻找免罪符。过去发生了什么与你的“此时此刻”没有任何关系,未来会如何也不是“此时此刻”要考虑的问题。

"}`);export{f as comp,y as data}; +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o,c as a,b as e}from"./app-BSa8cFh0.js";const n={},r=e("h1",{id:"被讨厌的勇气",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#被讨厌的勇气"},[e("span",null,"被讨厌的勇气")])],-1),c=e("blockquote",null,[e("p",null,"(日)岸见一郎、古贺史健")],-1),p=e("p",null,"每个人的课题都是分离又独特的。我怎么爱你,这是我的课题,而你要不要接受我的爱,这是你的课题。每个人都守自己的本分,过自己的人生,人和人之间就没那么多纠结和烦恼。",-1),i=e("hr",null,null,-1),l=e("p",null,"我们应该更加认真地过好“此时此刻”。如果感觉能够看得到过去也能预测到未来,那就证明你没有认真地活在“此时此刻”,而是生活在模糊而微弱的光中。",-1),d=e("p",null,"人生是连续的刹那,根本不存在过去和未来。你是想要通过关注过去或未来为自己寻找免罪符。过去发生了什么与你的“此时此刻”没有任何关系,未来会如何也不是“此时此刻”要考虑的问题。",-1),s=[r,c,p,i,l,d];function h(m,u){return o(),a("div",null,s)}const f=t(n,[["render",h],["__file","004-the-courage-to-be-hated.html.vue"]]),y=JSON.parse(`{"path":"/reading/2023/004-the-courage-to-be-hated.html","title":"被讨厌的勇气","lang":"zh-CN","frontmatter":{"date":"2023-10-18T00:00:00.000Z","description":"被讨厌的勇气 (日)岸见一郎、古贺史健 每个人的课题都是分离又独特的。我怎么爱你,这是我的课题,而你要不要接受我的爱,这是你的课题。每个人都守自己的本分,过自己的人生,人和人之间就没那么多纠结和烦恼。 我们应该更加认真地过好“此时此刻”。如果感觉能够看得到过去也能预测到未来,那就证明你没有认真地活在“此时此刻”,而是生活在模糊而微弱的光中。 人生是连续...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/004-the-courage-to-be-hated.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"被讨厌的勇气"}],["meta",{"property":"og:description","content":"被讨厌的勇气 (日)岸见一郎、古贺史健 每个人的课题都是分离又独特的。我怎么爱你,这是我的课题,而你要不要接受我的爱,这是你的课题。每个人都守自己的本分,过自己的人生,人和人之间就没那么多纠结和烦恼。 我们应该更加认真地过好“此时此刻”。如果感觉能够看得到过去也能预测到未来,那就证明你没有认真地活在“此时此刻”,而是生活在模糊而微弱的光中。 人生是连续..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-03-05T14:58:56.000Z"}],["meta",{"property":"article:published_time","content":"2023-10-18T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-03-05T14:58:56.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"被讨厌的勇气\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-10-18T00:00:00.000Z\\",\\"dateModified\\":\\"2024-03-05T14:58:56.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1690122787000,"updatedTime":1709650736000},"readingTime":{"minutes":0.77,"words":230},"filePathRelative":"reading/2023/004-the-courage-to-be-hated.md","localizedDate":"2023年10月18日","autoDesc":true,"excerpt":"\\n
\\n

(日)岸见一郎、古贺史健

\\n
\\n

每个人的课题都是分离又独特的。我怎么爱你,这是我的课题,而你要不要接受我的爱,这是你的课题。每个人都守自己的本分,过自己的人生,人和人之间就没那么多纠结和烦恼。

\\n
\\n

我们应该更加认真地过好“此时此刻”。如果感觉能够看得到过去也能预测到未来,那就证明你没有认真地活在“此时此刻”,而是生活在模糊而微弱的光中。

\\n

人生是连续的刹那,根本不存在过去和未来。你是想要通过关注过去或未来为自己寻找免罪符。过去发生了什么与你的“此时此刻”没有任何关系,未来会如何也不是“此时此刻”要考虑的问题。

"}`);export{f as comp,y as data}; diff --git a/assets/004-xiaomi-entrepreneurial-thinking.html-5OdYnxWt.js b/assets/004-xiaomi-entrepreneurial-thinking.html-BCygaWwM.js similarity index 99% rename from assets/004-xiaomi-entrepreneurial-thinking.html-5OdYnxWt.js rename to assets/004-xiaomi-entrepreneurial-thinking.html-BCygaWwM.js index 7666140b9..b7b755353 100644 --- a/assets/004-xiaomi-entrepreneurial-thinking.html-5OdYnxWt.js +++ b/assets/004-xiaomi-entrepreneurial-thinking.html-BCygaWwM.js @@ -1 +1 @@ -import{_ as p}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as l,a as r}from"./app-BLyK9ZJy.js";const e={},h=r('

小米创业思考

雷军(口述),徐洁云(整理)

当遇到复杂问题时,对工程师而言,最重要的是先找到“第一把扳手”,将复杂工程高度简化是一项非常重要的能力。


在创业最初期,短期内有太多的用户其实也没用,关键是要和你的核心用户一起把产品打磨好,做这件事一定要有耐心。


小米手机能赢得“梦幻开局”,原因只有一个:我们给用户提供了前所未见的产品力和颠覆性的用户体验。


“优秀的公司赚取利润,伟大的公司赢得人心!


做产品不是炫技,如何把功能做到更人性化、更迎合用户的需求,跟技术同样至关重要。


我们并不知道我们做错了什么,却被抛入了最痛苦并且看不到尽头的炼狱中,而你鼓足勇气都不敢去想象的目标,却被别人不费吹灰之力跨越。


实在有太多想不通的问题,我决定先跳进去,边做边想。


长期来看,并不存在所谓的纯互联网公司,互联网的特性是一些原本就存在的商业创新或准则在新技术条件下的极致放大,互联网思维是可以应用于互联网时代所有行业的方法论。


互联网是一种观念!互联网其实不是技术,而是一种观念,是一种方法论,抓住这种方法论就能把握住互联网的精髓。

当时我做了一些初步的总结:

  1. 互联网首先是工具,未来不存在所谓的互联网公司。
  2. 互联网是一次观念的革命,只有改变观念,才能跟上互联网时代。

再接着细细琢磨,就得出了如下的结论,今天回想起来也非常有意思。

  1. 开放和合作是互联网公司成功的关键。互联网首先是一张无边无际的网,每个人都是节点,互联是互联网成功最关键的要素。任何封闭式的业务模式都会遇到很大挑战。
  2. 互联网公司最厉害的是靠机器赚钱。一旦完成产品研发,用户量达到一定的规模,只要开着服务器就可以赚钱了。到了这个阶段,产品研发推广的边际成本为零,服务器带宽成本逐年下降,毛利率自然就上来了,业务增长速度也比较快。而且,机器是 7×24 小时工作的,当然运维人员要全天候确保运营质量。
  3. 口碑营销和网盟是互联网公司营销的核心。互联网公司直接面对所有用户,好产品仅靠口口相传就能成功。与拥有用户的其他互联网公司结盟推广,也是有效的推广模式。
  4. 互联网公司管理相对容易。首先是业务、内部运作系统高度 IT 化,这一点和传统公司非常不同;其次,很容易推动量化管理;还有,对人的依赖性并不高,很容易做知识管理,系统自动记录了大部分人的工作,人员流动对企业影响比较小。
  5. 互联网公司靠提供服务来挣钱,而软件公司靠卖产品挣钱,这种模式决定了软件公司的业务不容易持续稳定增长。一定要从卖产品模式转向卖服务的模式。
  6. 互联网的关键就是快。互联网产品的模式就是研发人员和用户一起开发产品,有阶段性成果就先推出去,听用户反馈,按用户意见去修改。
  7. 未来 10 年的热点是移动互联网,手机上网是一种趋势。

互联网的本质是什么呢?要回答这个问题,我们首先应该回到语境的源头。
剖开来看,我们常说的互联网有几重意义:

基于这些思考,我对互联网的理解就是,互联网是一种工具,也是一种价值取向,更是社会意识的形成机制和社会生产新的组织机制、发展模式。它最大的价值在于广泛推动人与机构彼此赋能,从而推动信息传递、沟通,以及生产和消费的效率提升。

互联网最美好的地方,就是它可以赋能产业,赋能组织,赋能我们每一个人。当一个人连接上网络,他可以随意采摘全世界的信息,也可以向全世界贡献他的能力,而不受空间和时间的限制。


从 1997 年到 2007 年,10 年时间,我先后几次长考,终于得出了对互联网思维的思考总结,为了让大家深刻理解互联网,我把互联网关键词抽出来,就有了“七字诀”的原型。这个总结先后有两版。

第一版:互联、全天候、快速。

第二版:专注、极致、口碑、快。
这个版本是从互联网行业中提炼出来再抽象,它的核心表达为“效率”,体现为“信任”。


从商业角度看,专注就是要“把鸡蛋尽量放在一个篮子里”。这听起来似乎有些不合理,大家的第一反应可能是“风险会不会太大?”,但事实上,这往往才是正确的选择。在任何时候,任何商业实体的资源都是有限的,将有限的资源投入足够聚焦的业务线中,才可能形成最大化的竞争力,拿出足够好的产品与服务。


从商业角度看,专注就是要“把鸡蛋尽量放在一个篮子里”。这听起来似乎有些不合理,大家的第一反应可能是“风险会不会太大?”,但事实上,这往往才是正确的选择。在任何时候,任何商业实体的资源都是有限的,将有限的资源投入足够聚焦的业务线中,才可能形成最大化的竞争力,拿出足够好的产品与服务。


当我们谈论“专注”时,我们究竟在谈什么?我总结了专注的四个核心命题:


使命,是企业/机构存在的目的和意义,是企业/机构努力为社会、大众提供的价值;而愿景,则是基于这样的使命,企业/机构最终希望成为的样子。


暂时没有在形式上总结出确定、成文的使命和愿景的企业/机构,但凡能够获得成功,就说明它对自身的价值和愿景已经有了明确的认知与共识。


能够脱颖而出的创业公司一开始都足够锐利,因为做的事少,反而非常专注。但跟随直觉奔跑到一定规模后,就容易迷失方向,这时就要有意识地进行收敛性思考,把当初“为什么出发”这个在内心深处鲜明存在,但在团队中未曾说明的初心,用简练、精准的语言提炼出来,它将告诉你“公司从哪里来,又将往何处去”这一最本质命题的答案。


克制贪婪,少就是多
资源总是有限的,切口越小,压强越大,突破越有力。


一次解决一个最迫切的需求
在业务选择上如此,在具体产品上也是如此。不要试图用一款产品解决太多问题,能最大化满足一项迫切需求,就是巨大的成功。


小米内部在讨论产品时常说“单点突破,逐步放大”,一开始尽量聚焦到只解决用户一个迫切的需求,这样验证起来也非常简单。

我对此做了一个总结:
第一,一个明确而且用户迫切需要的产品,更容易找到明确的用户群。这样,产品研发出来后不容易走偏。
第二,选择的用户需求要有一定的普遍性,这决定了产品的未来市场前景。
第三,解决的问题少,开发速度快,容易控制初期的研发成本和风险。
第四,解决明确问题的产品,容易跟用户说清楚,推广也会相对简单。

反过来看,试图用一款产品来解决很多需求,除了产品开发、推广难度大,未必能够凭借功能的数量优势赢得竞争优势,有时候甚至会误导开发者。


乔布斯就传达了一个理念:决定不做什么跟决定做什么一样重要。


用尽量少的产品满足用户最关注的需求,是一种超凡的能力。少就是多,背后是极为精准的行业发展与用户需求洞察、极为清晰的产品/战略思路,以及基于强大产品力的超凡自信。


“克制贪婪,少就是多”,听起来是特别显而易见的道理,但在进入业务扩张期的公司的实际运营中,想要一直做到这一点极不容易。
当我们聊专注时,通常会集中在一家公司的创业阶段或一个产品品类的开拓阶段。但专注只针对初创企业吗?显然不是。
那么,业务扩张与保持专注矛盾吗?并不一定矛盾,关键看四个判断标准:

  1. 是否符合公司的使命、愿景和战略。
  2. 能否与公司核心业务形成显著的强协同并形成闭环。
  3. 能否为用户提供一致性的价值与体验。
  4. 公司的资源是否支持。

管理领域有一条公理,即组织一旦成立,就有无可抑制的自我成长的冲动和诉求。对一家公司而言是这样,对这家公司内部的任何一支团队而言也是如此。组织的成长,通常都源于设立的各类项目,还有与项目相匹配的人力、资金等各类资源的要求,以及最为关键的一点:营业额或利润的增长。营业额、利润一涨,往往马上会带动组织成长欲望的“局部正循环”。


一款产品的上市不只是可能多一份销售额,每增加一个存货单位,开发成本、市场成本、客服/售后成本、仓储物流成本、销售运营管理成本等一系列成本都有增加。在公司总资源有限的情况下,我们的团队把力气花在这样“用户价值增益”不明显的产品上,显然是不值得的。


公司的核心业务和核心方向、核心目标一定是一元的,不存在二元甚至多元的可能。无论是创业阶段的“单点切入”还是业务扩张,都是围绕一元核心展开增长飞轮的不同阶段而已。


在公司内,对于每一项业务,我们要反复问自己三个问题:

  1. 我的业务增长为公司核心战略贡献了什么样的价值?
  2. 我的业务增长是否带动了公司包括核心业务在内的其他业务持续连带增长?
  3. 我的业务消耗了公司哪些资源?

要保持整体专注,就要进行目标分解和持续校验。分解和校验的过程,也是对能力体系的检验和指导过程。


我一直主张,在开发一个新项目、准备一个新产品时,先不要想你可以去外部找什么借力,或者同时做几款覆盖多少档位的后续产品,只考虑一件事:如何激发团队的全部能力,把这个新项目或新产品当作一局定生死的唯一机会,全身心投入,看看极致能到什么程度。


什么才是极致的产品,我理解有两个条件:一是产品要惊艳,设计要惊艳,成本也要惊艳;二是超出了用户预期,真的能让用户尖叫。


我们几乎可以确信,在每一个技术世代,在产品设计方面,对应每一个品类、每一种需求,都存在一个最优解。如果你专注的领域中还没有发现公认的最优解,那么恭喜,你还有非常大的机会不断接近它,直到找到它,并建立起强大的竞争优势。


没有永恒的最优解
替代一匹快马的,不一定是一匹更快的马,而有可能是蒸汽机车。


极致是一枚尖锐的钉子,我们铆足了劲儿敲钉子时,要小心钉错了地方。
追求极致切忌“盲目自我感动”,需要基于对行业、用户需求的深刻洞察,以“专注”的方向为指导,时时校验,防止跑错方向。


当你撸起袖子准备大干一场时,我建议你反复问自己三个问题:


良好的口碑从何而来?我的理解是,好产品不一定能带来口碑,便宜的产品不一定能带来口碑,又好又便宜的产品也不一定能带来口碑,只有超过预期的产品才能带来口碑。


之所以强调口碑第一,是因为口碑总是领先销量或利润一步,是与产品和业务形成正循环的要件。

我们分析一下正循环的构成:和用户交朋友,认真倾听用户的意见,深刻了解用户的需求,才能不断做出真正满足用户迫切需求,甚至是用户自己未能察觉的需求的好产品,才能赢得口碑;而口碑一旦形成,就能自传播、自转化,对于产品改善、业务推进具有强大的推力,而且这些推力完全是免费的、可裂变的。

很多人可能更多地把口碑视为一种传播红利和流量来源。但实际上,口碑不仅能自传播,更能自转化,基于朋友、熟人圈的推荐,具有无可替代的坚实背书能力和裂变能力。


口碑就是业务的有生力量和群众基础,只要有生力量不灭,群众基础不毁,下一款产品操盘得当,依然能够获得成功。

所以,我们在业务决策中,一定要把口碑放在第一位。甚至要做好心理准备,部分产品只要口碑出众,哪怕销量有限甚至亏损也在所不惜。


好产品不一定能带来口碑,便宜的产品不一定能带来口碑,又好又便宜的产品也不一定能带来口碑,只有超过预期的产品才能带来口碑。


口碑的来源,是始终保持对同业的显著比较优势。


好的产品只是口碑的一部分。产品(包括性能、设计、工艺、定价等)、服务和沟通,一家公司与用户所有触点的表现总和,才是口碑。


12 年来我们做了很多很多,其中大多数都是由一线的同事提出想法并很快决策的。这样的操作需要一个前提,就是有一支互相信任的团队,以及资源前置、关怀决策权前置的原则,让听得见枪声的前线拥有炮火呼叫权。


互联网最大的特点,就是与用户直接接触,实时获得用户反馈变得更加容易,也更加深入,究其根本是互联网的信息高透明度与去中心化特征。


战略积累快不得,战术演进慢不得。


我们大致可以把技术创新分成三类:


工程师是一群什么样的人?他们看起来很闷,他们不善言辞,就像我一样。但是我们的内心,非常的狂热。探索技术的时候,我们是苦行僧;打磨工艺的时候,我们是受虐狂;谈到体验的时候,我们吹毛求疵;做产品的时候,就野心勃勃。我相信,就是这样的野心勃勃,就是这样的勇气,才会有可能拿出一个又一个的好产品。如果没有这样的勇气,连试都不去试一下,你没有可能做出好产品。


工程师是产品的实现者,对于产品,他们最有话语权,观点也最纯粹。重视工程师,尊重工程师,用工程思维来指导公司的工作,才是不断实现创新的保障。


我研究了一下,发现只有两件事叫创新:一是做别人没有做过的事情,二是做别人做过了但没有做成的事情。这样的事情肯定不好做,99%的结果是失败。


不仅仅是 MIX,小米内部大量的技术创新都不是规划出来的,大量让人激动的研发项目都不是作为工作指令委派下来的,而是工程师们凭着热爱和探索的激情,在日常工作之外脑力激荡出来的。


“老板要求做”和“我自己主动要做”,二者的创造能量有着天壤之别。只有自驱动、自组织这样的自发创新文化和探索氛围建立起来、传承下去,工程师们的创新动力和技术才华才能真正得到激发。


从创办到现在,小米一直在用工程思维来解决问题,我总结其中最重要的经验有如下几条:


工程师通常都很朴实,所以一上来就谈使命,可能让人感觉有点虚。但要成为一名工程师,首先就要找到自己热爱并擅长的事情,并为之奋斗一生。


第一性原理,就是指我们要从事物的基本原理出发进行推理,而不依照已有的认识和经验进行“黑盒子”对“黑盒子”的类比。


性价比不是讨论绝对价格,更不是低价。性价比讲究的是比较优势,就是同等价格性能最好,同等性能价格最低。


尊重用户,就要听取用户的意见,但更重要的是行动。如果听完了意见却没有行动,不仅用户会失望,企业本身也很危险。


以前软件行业也好,硬件行业也罢,做大型工程都是召集起一帮精英关起门来做。这种办法看起来快,实际慢,因为准确性不高。群众路线则不同,看上去是笨办法,但是非常有效。不仅如此,听意见、有反馈,让用户产生了很强的参与感。一旦用户觉得产品研发有自己的贡献,产生的感情绝非一般的品牌忠诚度可以比拟,而是一种对品牌的强烈归属感。


各种新平台、新工具出现时,没有任何理由不去拥抱。用户在哪里,我们就应该去哪里,去沟通、去交心,尽全力跟用户距离再近一些,沟通交流再多一些。


在所有和用户交朋友的动作中,我最在乎的只有两个:第一,我们能不能做出让用户尖叫的产品,让用户愿意排着队来购买;第二,用户用了我们的产品,是不是愿意主动向朋友推荐。


高效的工业化大生产是爆品产生的先决条件。

爆品产生的第二个条件是大众的消费能力。

创新是爆品产生的第三个条件。


总结一下,关于爆品,我认为有三个产生条件,分别是:


爆品模式追求的一定不是某一款产品的阶段性热卖,而是企业的永续发展。


什么才是爆品?我的定义是:产品定义、性能、品质或价格与现有产品明显不同,大大超出用户期望并引发口碑热烈传播和热销的现象级产品。

我还有一个简洁版:产品力超群,具有一流口碑,最终实现海量长销的产品。


我在创办小米之前研究了很多令我着迷的爆品。同时我也在思考,什么样的经营方式可以让一家企业持续不断地生产出爆品?总结下来,我认为需要做好以下四个方面:


爆品源于大众需求,必须要找到用户普遍的痛点,给予超预期的满足,再用极致性价比击穿行业惯性,这样的产品才能形成巨大的势能,成为爆品。


只是价格便宜和只是好用都不是超预期,唯有聚焦核心需求、性能出众、设计出挑、质量过硬,也就是“全面优秀,外加至少一方面杰出”,才有机会做到超预期,从而形成口碑。


打造爆品时,我们首先考量的第一要素是,产品是否具备“明天属性”。

什么是“明天属性”?就是给用户提供代表先进趋势的、令他们向往的全新体验,而且这种体验是用户一旦用过就不想放手的。比如用户一旦用了智能手机,就再也不想用非智能手机了。


爆品的第一法则就是做减法,少即是多,只专注解决用户最迫切的需求,把这一个需求做透。


在面对生态链繁多的品类时,小米有一条产品定义取舍法则:满足 80%用户的 80%需求。哪些功能要保留,哪些功能要舍弃,取决于对用户需求的洞察。


此外,我还要特别强调一项关键素养,那就是在产品定义和研发过程中一定要进入“小白模式”,而不要一下子就进入“专家模式”。


这些现象背后有一个词叫定倍率。定倍率=零售价/成本,比如 100 元成本的东西卖 500 元,定倍率就是 5。通常而言,服装行业的定倍率是 10~20,鞋子是 5~10 倍,化妆品行业是 20~50。


其实非常简单,任何商品的定价都是由五部分组成的:


乔布斯说过,相比研发投入的数值,效率才是关键。


小米模式降低的不是研发投入,而是每件商品的分摊研发成本。

分摊这个概念有多重要?只要量大,边际成本就可以分摊到极致,甚至可以近乎免费。


小米模式有办法把分摊成本尽量摊薄吗?有,就是采用爆品模式。有了爆品的单款、海量、长周期的特性,我们就能把研发、制造、服务成本分摊到很低;同时,我们使用了高效率的互联网工具,以新媒体营销为主,加上爆品自带流量,市场推广及广告分摊成本变得很低,在小米早期我们甚至没有任何营销和公关费用;然后我们采用电商销售,去掉了大量的中间环节,直接“前店后厂”,销售及渠道分摊成本也在极低的水平。


资金本身也是有成本的,但凡做企业的人都知道,很多时候相比静态的固定成本,资金成本和与之关联的关键要素——流速,事关企业生死,更为关键。


小米模式致力的效率并不是一个静态概念,而是凭借更高频的用户互动、更短链条的产品交付,带来了更快的反馈和改善速率,以及更快的资金、库存周转。这使得在任何单位时间,公司能够沉淀、调用的资金更多,参与公司产业链条的合作伙伴获得的收益率也更高。

用一组简单公式表达:
投资回报率 = 年利润 /年投资额
= 利润率 × 年收入/年投资额
= 利润率 × 年周转次数
=(毛利率–费用率)× 年周转次数


最后总结一下,在影响定价的五个因素中,小米主要做了三件事:

看起来是三件事,其实是一件事,本质都是效率。


提高效率主要有两种方式,一种是“拧毛巾”,主要是压缩内部费用,这是非常必要的,但压缩空间有限,而且过度压缩费用未必有利于公司的长期健康发展,比如研发费用对产品力的提升就极有必要。我更倾向并且用得更多的是另一种方式:模式优化,即尽可能压缩商业流通领域的中间环节,同时少做事,用最聪明的人简化流程。

“小米模式”选择的优化方式就是“铁人三项”模式。

铁人三项:硬件、新零售、互联网

简单地说,“铁人三项”模式就是把设计精良、性能和品质出众的产品紧贴硬件成本定价,通过自有或直供的高效线上线下新零售渠道直接交付给用户,然后持续为用户提供丰富的互联网服务。


只有全面实时数据化,才能把账算清楚,实时了解真实的投资回报率变动,做到交易即数据,有效指导运营,不断优化,争取高效。


我们可以再次梳理小米之家模式的优势,其中包括:


我把互联网分为三个阶段,第一阶段是个人计算机互联网,以每台电脑为终端设备,全球有 10 亿级的设备连入互联网,这个阶段诞生了微软、苹果、戴尔、雅虎、腾讯、阿里等一系列伟大的公司;第二阶段是移动互联网,手机取代电脑成为个人计算中心,可接入设备将提升一个数量级;第三阶段毫无疑问就是 AIoT 时代,每一个硬件都能连接上网,甚至每一个设备里的模块都可以连接上网,可接入设备将比移动互联网时代高出好几个数量级。


回过头看,导致智能手环长期徘徊在小众市场的几个原因是相互关联的:功能多导致价格高、体验差;价格高抬高了使用门槛,也抬高了用户预期;用户使用后发现待机时间短、体验差,无法形成口碑效应,产品销量上不去;市场无法打开,研发受阻,成本无法降低,价格就很难降下来,最后形成新一轮恶性循环,导致无法突破小众范畴。


在产品定义之初我们就确定,初代产品尽量选用市面上成熟的技术,以降低制造的难度,增强产品的可靠性。这也是初代小米手机的经验,我总结为:“选择大品牌同时被大规模验证过的技术。”


从一开始我们就决定,可做可不做的功能一定不做。


用通俗的话来说,以前的质量观在意的是产品使用寿命长不长,功能是不是正常,我把这些称为硬质量。硬质量是基础中的基础,解决的是能不能用、耐不耐用的问题;此外,我们还要关注软质量,进一步解决好不好看、好不好用的问题。软质量和硬质量同样重要,硬质量决定品质的下限,而软质量决定品质的上限。

无论是硬质量还是软质量,产品的质量最终要满足用户对产品综合体验的预期。预期之上,是口碑,而承载预期的就是质量。


对于设计,我的建议是:

  1. 明确设计的目的,即为什么而设计。
  2. 要有明确而统一的设计理念。
  3. 设计不是视觉概念,而是解决方案,设计应该成为所有业务的牵引力。
  4. 设计需要有统一的培养系统,重视设计人才,努力培养设计氛围。
  5. 给设计师们足够的空间,放手让他们发挥创造力。

爆品是孤立存在的吗?这个问题在不同阶段或许有不同答案。
一个创业团队刚刚成立,或者一个产业刚开始跨入技术革新期时,单一爆品就是追求专注、极致的最优解;而当一个行业逐步走向成熟,或一家公司需要服务全人群时,爆品就不一定只是单款了。苹果是极致单品、极简产品线的典范,早年的 iPhone 每年只有一款,而如今也在 iPhone、Mac 电脑等多个品类中开启了多条产品线,形成了强有力的产品组合。

在生态链 2.0 模式中,我的同事们提出了一个演进版的爆品矩阵思考,把新时代爆品策略分成了三个阶段。

第一阶段,单点突破,按照小米方法论,打造极致单品,单款(单 SPU)市场份额要达到行业主流品类中单一品牌的下限。如果达成这一目标,则追加投入,进入第二阶段。

第二阶段,基于第一阶段的极致爆品,有节制地展开多款,覆盖更多的人群,形成多 SPU 基础上的高效率规模能力和最简结构的爆品矩阵,赢得品类销售额的前三地位,同时重点关注和评估扩大人群及 SPU 后的口碑反馈、相应品类在中国市场及全球市场的潜力容量,当然还要考量基于更大规模市场的合理利润表现。如果达成这一系列目标,则追加投入,进入第三阶段。

第三阶段,影响力阶段。在前两个阶段的基础上,调整完善人群覆盖和产品结构,形成爆品矩阵和行业定义能力,显著提升行业整体水准。


如何把一个产品打造成爆品,是静态的单点思考;如何保障爆品持续出现,则需要动态而长期的全局考量。因此,我们产生了一个基本判断:打造爆品的下一步是走向体系化。

体系化爆品与单品爆品的区别在于:


制造是手段,不是目的。

所谓的社会化大生产,就是明确各自的核心优势,然后让专业的人做专业的事。


在制造产业链上,至少有三类主要参与者,从上游向下依次是:装备制造商,就是为工厂制造提供生产设备的制造商;生产制造商,即专业的工厂运营者,其中包括专业代工企业和品牌商自有工厂;品牌商,就是向生产制造商提出生产委托的委托方。制造业的效率取决于这个链条上每一个环节的表现。


关注用户,而不是流量;追求闭环,而不是扩张


这个世界上的公司分为两种:一种是采用溢价模型的,一种是采用性价比模型的。

基于溢价模型的企业进行创新和改良的根本动力,都来自对超额利润的追求,并且高度依赖信息不透明带来的高溢价。首先,高水平创新的能力极为稀缺,无论对一个行业,还是对一家公司而言,都呈现出显著的周期性起伏,世界上很少有公司能够保障持续稳定的高水平创新。其次,信息不透明带来的溢价是非常短暂的。同时,习惯依赖高溢价的公司的运营成本一定会越来越高,浪费越来越严重,效率越来越低。我一直认为,绝大多数采用溢价模型的企业都难以持久。

采用性价比模型的公司坚持下去非常难,非常痛苦,它要有克制贪婪的强大定力,要能忍受漫长的成长积累,还要有忍受低宽容度、高风险运作的耐性,然而一旦这些公司赢得领先,将极具韧性和统治力,并有穿越经济周期的能力。

',229),t=[h];function o(n,a){return i(),l("div",null,t)}const m=p(e,[["render",o],["__file","004-xiaomi-entrepreneurial-thinking.html.vue"]]),d=JSON.parse(`{"path":"/reading/2024/004-xiaomi-entrepreneurial-thinking.html","title":"小米创业思考","lang":"zh-CN","frontmatter":{"date":"2024-07-18T00:00:00.000Z","description":"小米创业思考 雷军(口述),徐洁云(整理) 当遇到复杂问题时,对工程师而言,最重要的是先找到“第一把扳手”,将复杂工程高度简化是一项非常重要的能力。 在创业最初期,短期内有太多的用户其实也没用,关键是要和你的核心用户一起把产品打磨好,做这件事一定要有耐心。 小米手机能赢得“梦幻开局”,原因只有一个:我们给用户提供了前所未见的产品力和颠覆性的用户体验。 ...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2024/004-xiaomi-entrepreneurial-thinking.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"小米创业思考"}],["meta",{"property":"og:description","content":"小米创业思考 雷军(口述),徐洁云(整理) 当遇到复杂问题时,对工程师而言,最重要的是先找到“第一把扳手”,将复杂工程高度简化是一项非常重要的能力。 在创业最初期,短期内有太多的用户其实也没用,关键是要和你的核心用户一起把产品打磨好,做这件事一定要有耐心。 小米手机能赢得“梦幻开局”,原因只有一个:我们给用户提供了前所未见的产品力和颠覆性的用户体验。 ..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-07-18T02:26:17.000Z"}],["meta",{"property":"article:published_time","content":"2024-07-18T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-07-18T02:26:17.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"小米创业思考\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2024-07-18T00:00:00.000Z\\",\\"dateModified\\":\\"2024-07-18T02:26:17.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1721269577000,"updatedTime":1721269577000},"readingTime":{"minutes":30.9,"words":9269},"filePathRelative":"reading/2024/004-xiaomi-entrepreneurial-thinking.md","localizedDate":"2024年7月18日","autoDesc":true,"excerpt":"\\n
\\n

雷军(口述),徐洁云(整理)

\\n
\\n

当遇到复杂问题时,对工程师而言,最重要的是先找到“第一把扳手”,将复杂工程高度简化是一项非常重要的能力。

\\n
\\n

在创业最初期,短期内有太多的用户其实也没用,关键是要和你的核心用户一起把产品打磨好,做这件事一定要有耐心。

\\n
\\n

小米手机能赢得“梦幻开局”,原因只有一个:我们给用户提供了前所未见的产品力和颠覆性的用户体验。

\\n
\\n

“优秀的公司赚取利润,伟大的公司赢得人心!

\\n
\\n

做产品不是炫技,如何把功能做到更人性化、更迎合用户的需求,跟技术同样至关重要。

"}`);export{m as comp,d as data}; +import{_ as p}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as l,a as r}from"./app-BSa8cFh0.js";const e={},h=r('

小米创业思考

雷军(口述),徐洁云(整理)

当遇到复杂问题时,对工程师而言,最重要的是先找到“第一把扳手”,将复杂工程高度简化是一项非常重要的能力。


在创业最初期,短期内有太多的用户其实也没用,关键是要和你的核心用户一起把产品打磨好,做这件事一定要有耐心。


小米手机能赢得“梦幻开局”,原因只有一个:我们给用户提供了前所未见的产品力和颠覆性的用户体验。


“优秀的公司赚取利润,伟大的公司赢得人心!


做产品不是炫技,如何把功能做到更人性化、更迎合用户的需求,跟技术同样至关重要。


我们并不知道我们做错了什么,却被抛入了最痛苦并且看不到尽头的炼狱中,而你鼓足勇气都不敢去想象的目标,却被别人不费吹灰之力跨越。


实在有太多想不通的问题,我决定先跳进去,边做边想。


长期来看,并不存在所谓的纯互联网公司,互联网的特性是一些原本就存在的商业创新或准则在新技术条件下的极致放大,互联网思维是可以应用于互联网时代所有行业的方法论。


互联网是一种观念!互联网其实不是技术,而是一种观念,是一种方法论,抓住这种方法论就能把握住互联网的精髓。

当时我做了一些初步的总结:

  1. 互联网首先是工具,未来不存在所谓的互联网公司。
  2. 互联网是一次观念的革命,只有改变观念,才能跟上互联网时代。

再接着细细琢磨,就得出了如下的结论,今天回想起来也非常有意思。

  1. 开放和合作是互联网公司成功的关键。互联网首先是一张无边无际的网,每个人都是节点,互联是互联网成功最关键的要素。任何封闭式的业务模式都会遇到很大挑战。
  2. 互联网公司最厉害的是靠机器赚钱。一旦完成产品研发,用户量达到一定的规模,只要开着服务器就可以赚钱了。到了这个阶段,产品研发推广的边际成本为零,服务器带宽成本逐年下降,毛利率自然就上来了,业务增长速度也比较快。而且,机器是 7×24 小时工作的,当然运维人员要全天候确保运营质量。
  3. 口碑营销和网盟是互联网公司营销的核心。互联网公司直接面对所有用户,好产品仅靠口口相传就能成功。与拥有用户的其他互联网公司结盟推广,也是有效的推广模式。
  4. 互联网公司管理相对容易。首先是业务、内部运作系统高度 IT 化,这一点和传统公司非常不同;其次,很容易推动量化管理;还有,对人的依赖性并不高,很容易做知识管理,系统自动记录了大部分人的工作,人员流动对企业影响比较小。
  5. 互联网公司靠提供服务来挣钱,而软件公司靠卖产品挣钱,这种模式决定了软件公司的业务不容易持续稳定增长。一定要从卖产品模式转向卖服务的模式。
  6. 互联网的关键就是快。互联网产品的模式就是研发人员和用户一起开发产品,有阶段性成果就先推出去,听用户反馈,按用户意见去修改。
  7. 未来 10 年的热点是移动互联网,手机上网是一种趋势。

互联网的本质是什么呢?要回答这个问题,我们首先应该回到语境的源头。
剖开来看,我们常说的互联网有几重意义:

基于这些思考,我对互联网的理解就是,互联网是一种工具,也是一种价值取向,更是社会意识的形成机制和社会生产新的组织机制、发展模式。它最大的价值在于广泛推动人与机构彼此赋能,从而推动信息传递、沟通,以及生产和消费的效率提升。

互联网最美好的地方,就是它可以赋能产业,赋能组织,赋能我们每一个人。当一个人连接上网络,他可以随意采摘全世界的信息,也可以向全世界贡献他的能力,而不受空间和时间的限制。


从 1997 年到 2007 年,10 年时间,我先后几次长考,终于得出了对互联网思维的思考总结,为了让大家深刻理解互联网,我把互联网关键词抽出来,就有了“七字诀”的原型。这个总结先后有两版。

第一版:互联、全天候、快速。

第二版:专注、极致、口碑、快。
这个版本是从互联网行业中提炼出来再抽象,它的核心表达为“效率”,体现为“信任”。


从商业角度看,专注就是要“把鸡蛋尽量放在一个篮子里”。这听起来似乎有些不合理,大家的第一反应可能是“风险会不会太大?”,但事实上,这往往才是正确的选择。在任何时候,任何商业实体的资源都是有限的,将有限的资源投入足够聚焦的业务线中,才可能形成最大化的竞争力,拿出足够好的产品与服务。


从商业角度看,专注就是要“把鸡蛋尽量放在一个篮子里”。这听起来似乎有些不合理,大家的第一反应可能是“风险会不会太大?”,但事实上,这往往才是正确的选择。在任何时候,任何商业实体的资源都是有限的,将有限的资源投入足够聚焦的业务线中,才可能形成最大化的竞争力,拿出足够好的产品与服务。


当我们谈论“专注”时,我们究竟在谈什么?我总结了专注的四个核心命题:


使命,是企业/机构存在的目的和意义,是企业/机构努力为社会、大众提供的价值;而愿景,则是基于这样的使命,企业/机构最终希望成为的样子。


暂时没有在形式上总结出确定、成文的使命和愿景的企业/机构,但凡能够获得成功,就说明它对自身的价值和愿景已经有了明确的认知与共识。


能够脱颖而出的创业公司一开始都足够锐利,因为做的事少,反而非常专注。但跟随直觉奔跑到一定规模后,就容易迷失方向,这时就要有意识地进行收敛性思考,把当初“为什么出发”这个在内心深处鲜明存在,但在团队中未曾说明的初心,用简练、精准的语言提炼出来,它将告诉你“公司从哪里来,又将往何处去”这一最本质命题的答案。


克制贪婪,少就是多
资源总是有限的,切口越小,压强越大,突破越有力。


一次解决一个最迫切的需求
在业务选择上如此,在具体产品上也是如此。不要试图用一款产品解决太多问题,能最大化满足一项迫切需求,就是巨大的成功。


小米内部在讨论产品时常说“单点突破,逐步放大”,一开始尽量聚焦到只解决用户一个迫切的需求,这样验证起来也非常简单。

我对此做了一个总结:
第一,一个明确而且用户迫切需要的产品,更容易找到明确的用户群。这样,产品研发出来后不容易走偏。
第二,选择的用户需求要有一定的普遍性,这决定了产品的未来市场前景。
第三,解决的问题少,开发速度快,容易控制初期的研发成本和风险。
第四,解决明确问题的产品,容易跟用户说清楚,推广也会相对简单。

反过来看,试图用一款产品来解决很多需求,除了产品开发、推广难度大,未必能够凭借功能的数量优势赢得竞争优势,有时候甚至会误导开发者。


乔布斯就传达了一个理念:决定不做什么跟决定做什么一样重要。


用尽量少的产品满足用户最关注的需求,是一种超凡的能力。少就是多,背后是极为精准的行业发展与用户需求洞察、极为清晰的产品/战略思路,以及基于强大产品力的超凡自信。


“克制贪婪,少就是多”,听起来是特别显而易见的道理,但在进入业务扩张期的公司的实际运营中,想要一直做到这一点极不容易。
当我们聊专注时,通常会集中在一家公司的创业阶段或一个产品品类的开拓阶段。但专注只针对初创企业吗?显然不是。
那么,业务扩张与保持专注矛盾吗?并不一定矛盾,关键看四个判断标准:

  1. 是否符合公司的使命、愿景和战略。
  2. 能否与公司核心业务形成显著的强协同并形成闭环。
  3. 能否为用户提供一致性的价值与体验。
  4. 公司的资源是否支持。

管理领域有一条公理,即组织一旦成立,就有无可抑制的自我成长的冲动和诉求。对一家公司而言是这样,对这家公司内部的任何一支团队而言也是如此。组织的成长,通常都源于设立的各类项目,还有与项目相匹配的人力、资金等各类资源的要求,以及最为关键的一点:营业额或利润的增长。营业额、利润一涨,往往马上会带动组织成长欲望的“局部正循环”。


一款产品的上市不只是可能多一份销售额,每增加一个存货单位,开发成本、市场成本、客服/售后成本、仓储物流成本、销售运营管理成本等一系列成本都有增加。在公司总资源有限的情况下,我们的团队把力气花在这样“用户价值增益”不明显的产品上,显然是不值得的。


公司的核心业务和核心方向、核心目标一定是一元的,不存在二元甚至多元的可能。无论是创业阶段的“单点切入”还是业务扩张,都是围绕一元核心展开增长飞轮的不同阶段而已。


在公司内,对于每一项业务,我们要反复问自己三个问题:

  1. 我的业务增长为公司核心战略贡献了什么样的价值?
  2. 我的业务增长是否带动了公司包括核心业务在内的其他业务持续连带增长?
  3. 我的业务消耗了公司哪些资源?

要保持整体专注,就要进行目标分解和持续校验。分解和校验的过程,也是对能力体系的检验和指导过程。


我一直主张,在开发一个新项目、准备一个新产品时,先不要想你可以去外部找什么借力,或者同时做几款覆盖多少档位的后续产品,只考虑一件事:如何激发团队的全部能力,把这个新项目或新产品当作一局定生死的唯一机会,全身心投入,看看极致能到什么程度。


什么才是极致的产品,我理解有两个条件:一是产品要惊艳,设计要惊艳,成本也要惊艳;二是超出了用户预期,真的能让用户尖叫。


我们几乎可以确信,在每一个技术世代,在产品设计方面,对应每一个品类、每一种需求,都存在一个最优解。如果你专注的领域中还没有发现公认的最优解,那么恭喜,你还有非常大的机会不断接近它,直到找到它,并建立起强大的竞争优势。


没有永恒的最优解
替代一匹快马的,不一定是一匹更快的马,而有可能是蒸汽机车。


极致是一枚尖锐的钉子,我们铆足了劲儿敲钉子时,要小心钉错了地方。
追求极致切忌“盲目自我感动”,需要基于对行业、用户需求的深刻洞察,以“专注”的方向为指导,时时校验,防止跑错方向。


当你撸起袖子准备大干一场时,我建议你反复问自己三个问题:


良好的口碑从何而来?我的理解是,好产品不一定能带来口碑,便宜的产品不一定能带来口碑,又好又便宜的产品也不一定能带来口碑,只有超过预期的产品才能带来口碑。


之所以强调口碑第一,是因为口碑总是领先销量或利润一步,是与产品和业务形成正循环的要件。

我们分析一下正循环的构成:和用户交朋友,认真倾听用户的意见,深刻了解用户的需求,才能不断做出真正满足用户迫切需求,甚至是用户自己未能察觉的需求的好产品,才能赢得口碑;而口碑一旦形成,就能自传播、自转化,对于产品改善、业务推进具有强大的推力,而且这些推力完全是免费的、可裂变的。

很多人可能更多地把口碑视为一种传播红利和流量来源。但实际上,口碑不仅能自传播,更能自转化,基于朋友、熟人圈的推荐,具有无可替代的坚实背书能力和裂变能力。


口碑就是业务的有生力量和群众基础,只要有生力量不灭,群众基础不毁,下一款产品操盘得当,依然能够获得成功。

所以,我们在业务决策中,一定要把口碑放在第一位。甚至要做好心理准备,部分产品只要口碑出众,哪怕销量有限甚至亏损也在所不惜。


好产品不一定能带来口碑,便宜的产品不一定能带来口碑,又好又便宜的产品也不一定能带来口碑,只有超过预期的产品才能带来口碑。


口碑的来源,是始终保持对同业的显著比较优势。


好的产品只是口碑的一部分。产品(包括性能、设计、工艺、定价等)、服务和沟通,一家公司与用户所有触点的表现总和,才是口碑。


12 年来我们做了很多很多,其中大多数都是由一线的同事提出想法并很快决策的。这样的操作需要一个前提,就是有一支互相信任的团队,以及资源前置、关怀决策权前置的原则,让听得见枪声的前线拥有炮火呼叫权。


互联网最大的特点,就是与用户直接接触,实时获得用户反馈变得更加容易,也更加深入,究其根本是互联网的信息高透明度与去中心化特征。


战略积累快不得,战术演进慢不得。


我们大致可以把技术创新分成三类:


工程师是一群什么样的人?他们看起来很闷,他们不善言辞,就像我一样。但是我们的内心,非常的狂热。探索技术的时候,我们是苦行僧;打磨工艺的时候,我们是受虐狂;谈到体验的时候,我们吹毛求疵;做产品的时候,就野心勃勃。我相信,就是这样的野心勃勃,就是这样的勇气,才会有可能拿出一个又一个的好产品。如果没有这样的勇气,连试都不去试一下,你没有可能做出好产品。


工程师是产品的实现者,对于产品,他们最有话语权,观点也最纯粹。重视工程师,尊重工程师,用工程思维来指导公司的工作,才是不断实现创新的保障。


我研究了一下,发现只有两件事叫创新:一是做别人没有做过的事情,二是做别人做过了但没有做成的事情。这样的事情肯定不好做,99%的结果是失败。


不仅仅是 MIX,小米内部大量的技术创新都不是规划出来的,大量让人激动的研发项目都不是作为工作指令委派下来的,而是工程师们凭着热爱和探索的激情,在日常工作之外脑力激荡出来的。


“老板要求做”和“我自己主动要做”,二者的创造能量有着天壤之别。只有自驱动、自组织这样的自发创新文化和探索氛围建立起来、传承下去,工程师们的创新动力和技术才华才能真正得到激发。


从创办到现在,小米一直在用工程思维来解决问题,我总结其中最重要的经验有如下几条:


工程师通常都很朴实,所以一上来就谈使命,可能让人感觉有点虚。但要成为一名工程师,首先就要找到自己热爱并擅长的事情,并为之奋斗一生。


第一性原理,就是指我们要从事物的基本原理出发进行推理,而不依照已有的认识和经验进行“黑盒子”对“黑盒子”的类比。


性价比不是讨论绝对价格,更不是低价。性价比讲究的是比较优势,就是同等价格性能最好,同等性能价格最低。


尊重用户,就要听取用户的意见,但更重要的是行动。如果听完了意见却没有行动,不仅用户会失望,企业本身也很危险。


以前软件行业也好,硬件行业也罢,做大型工程都是召集起一帮精英关起门来做。这种办法看起来快,实际慢,因为准确性不高。群众路线则不同,看上去是笨办法,但是非常有效。不仅如此,听意见、有反馈,让用户产生了很强的参与感。一旦用户觉得产品研发有自己的贡献,产生的感情绝非一般的品牌忠诚度可以比拟,而是一种对品牌的强烈归属感。


各种新平台、新工具出现时,没有任何理由不去拥抱。用户在哪里,我们就应该去哪里,去沟通、去交心,尽全力跟用户距离再近一些,沟通交流再多一些。


在所有和用户交朋友的动作中,我最在乎的只有两个:第一,我们能不能做出让用户尖叫的产品,让用户愿意排着队来购买;第二,用户用了我们的产品,是不是愿意主动向朋友推荐。


高效的工业化大生产是爆品产生的先决条件。

爆品产生的第二个条件是大众的消费能力。

创新是爆品产生的第三个条件。


总结一下,关于爆品,我认为有三个产生条件,分别是:


爆品模式追求的一定不是某一款产品的阶段性热卖,而是企业的永续发展。


什么才是爆品?我的定义是:产品定义、性能、品质或价格与现有产品明显不同,大大超出用户期望并引发口碑热烈传播和热销的现象级产品。

我还有一个简洁版:产品力超群,具有一流口碑,最终实现海量长销的产品。


我在创办小米之前研究了很多令我着迷的爆品。同时我也在思考,什么样的经营方式可以让一家企业持续不断地生产出爆品?总结下来,我认为需要做好以下四个方面:


爆品源于大众需求,必须要找到用户普遍的痛点,给予超预期的满足,再用极致性价比击穿行业惯性,这样的产品才能形成巨大的势能,成为爆品。


只是价格便宜和只是好用都不是超预期,唯有聚焦核心需求、性能出众、设计出挑、质量过硬,也就是“全面优秀,外加至少一方面杰出”,才有机会做到超预期,从而形成口碑。


打造爆品时,我们首先考量的第一要素是,产品是否具备“明天属性”。

什么是“明天属性”?就是给用户提供代表先进趋势的、令他们向往的全新体验,而且这种体验是用户一旦用过就不想放手的。比如用户一旦用了智能手机,就再也不想用非智能手机了。


爆品的第一法则就是做减法,少即是多,只专注解决用户最迫切的需求,把这一个需求做透。


在面对生态链繁多的品类时,小米有一条产品定义取舍法则:满足 80%用户的 80%需求。哪些功能要保留,哪些功能要舍弃,取决于对用户需求的洞察。


此外,我还要特别强调一项关键素养,那就是在产品定义和研发过程中一定要进入“小白模式”,而不要一下子就进入“专家模式”。


这些现象背后有一个词叫定倍率。定倍率=零售价/成本,比如 100 元成本的东西卖 500 元,定倍率就是 5。通常而言,服装行业的定倍率是 10~20,鞋子是 5~10 倍,化妆品行业是 20~50。


其实非常简单,任何商品的定价都是由五部分组成的:


乔布斯说过,相比研发投入的数值,效率才是关键。


小米模式降低的不是研发投入,而是每件商品的分摊研发成本。

分摊这个概念有多重要?只要量大,边际成本就可以分摊到极致,甚至可以近乎免费。


小米模式有办法把分摊成本尽量摊薄吗?有,就是采用爆品模式。有了爆品的单款、海量、长周期的特性,我们就能把研发、制造、服务成本分摊到很低;同时,我们使用了高效率的互联网工具,以新媒体营销为主,加上爆品自带流量,市场推广及广告分摊成本变得很低,在小米早期我们甚至没有任何营销和公关费用;然后我们采用电商销售,去掉了大量的中间环节,直接“前店后厂”,销售及渠道分摊成本也在极低的水平。


资金本身也是有成本的,但凡做企业的人都知道,很多时候相比静态的固定成本,资金成本和与之关联的关键要素——流速,事关企业生死,更为关键。


小米模式致力的效率并不是一个静态概念,而是凭借更高频的用户互动、更短链条的产品交付,带来了更快的反馈和改善速率,以及更快的资金、库存周转。这使得在任何单位时间,公司能够沉淀、调用的资金更多,参与公司产业链条的合作伙伴获得的收益率也更高。

用一组简单公式表达:
投资回报率 = 年利润 /年投资额
= 利润率 × 年收入/年投资额
= 利润率 × 年周转次数
=(毛利率–费用率)× 年周转次数


最后总结一下,在影响定价的五个因素中,小米主要做了三件事:

看起来是三件事,其实是一件事,本质都是效率。


提高效率主要有两种方式,一种是“拧毛巾”,主要是压缩内部费用,这是非常必要的,但压缩空间有限,而且过度压缩费用未必有利于公司的长期健康发展,比如研发费用对产品力的提升就极有必要。我更倾向并且用得更多的是另一种方式:模式优化,即尽可能压缩商业流通领域的中间环节,同时少做事,用最聪明的人简化流程。

“小米模式”选择的优化方式就是“铁人三项”模式。

铁人三项:硬件、新零售、互联网

简单地说,“铁人三项”模式就是把设计精良、性能和品质出众的产品紧贴硬件成本定价,通过自有或直供的高效线上线下新零售渠道直接交付给用户,然后持续为用户提供丰富的互联网服务。


只有全面实时数据化,才能把账算清楚,实时了解真实的投资回报率变动,做到交易即数据,有效指导运营,不断优化,争取高效。


我们可以再次梳理小米之家模式的优势,其中包括:


我把互联网分为三个阶段,第一阶段是个人计算机互联网,以每台电脑为终端设备,全球有 10 亿级的设备连入互联网,这个阶段诞生了微软、苹果、戴尔、雅虎、腾讯、阿里等一系列伟大的公司;第二阶段是移动互联网,手机取代电脑成为个人计算中心,可接入设备将提升一个数量级;第三阶段毫无疑问就是 AIoT 时代,每一个硬件都能连接上网,甚至每一个设备里的模块都可以连接上网,可接入设备将比移动互联网时代高出好几个数量级。


回过头看,导致智能手环长期徘徊在小众市场的几个原因是相互关联的:功能多导致价格高、体验差;价格高抬高了使用门槛,也抬高了用户预期;用户使用后发现待机时间短、体验差,无法形成口碑效应,产品销量上不去;市场无法打开,研发受阻,成本无法降低,价格就很难降下来,最后形成新一轮恶性循环,导致无法突破小众范畴。


在产品定义之初我们就确定,初代产品尽量选用市面上成熟的技术,以降低制造的难度,增强产品的可靠性。这也是初代小米手机的经验,我总结为:“选择大品牌同时被大规模验证过的技术。”


从一开始我们就决定,可做可不做的功能一定不做。


用通俗的话来说,以前的质量观在意的是产品使用寿命长不长,功能是不是正常,我把这些称为硬质量。硬质量是基础中的基础,解决的是能不能用、耐不耐用的问题;此外,我们还要关注软质量,进一步解决好不好看、好不好用的问题。软质量和硬质量同样重要,硬质量决定品质的下限,而软质量决定品质的上限。

无论是硬质量还是软质量,产品的质量最终要满足用户对产品综合体验的预期。预期之上,是口碑,而承载预期的就是质量。


对于设计,我的建议是:

  1. 明确设计的目的,即为什么而设计。
  2. 要有明确而统一的设计理念。
  3. 设计不是视觉概念,而是解决方案,设计应该成为所有业务的牵引力。
  4. 设计需要有统一的培养系统,重视设计人才,努力培养设计氛围。
  5. 给设计师们足够的空间,放手让他们发挥创造力。

爆品是孤立存在的吗?这个问题在不同阶段或许有不同答案。
一个创业团队刚刚成立,或者一个产业刚开始跨入技术革新期时,单一爆品就是追求专注、极致的最优解;而当一个行业逐步走向成熟,或一家公司需要服务全人群时,爆品就不一定只是单款了。苹果是极致单品、极简产品线的典范,早年的 iPhone 每年只有一款,而如今也在 iPhone、Mac 电脑等多个品类中开启了多条产品线,形成了强有力的产品组合。

在生态链 2.0 模式中,我的同事们提出了一个演进版的爆品矩阵思考,把新时代爆品策略分成了三个阶段。

第一阶段,单点突破,按照小米方法论,打造极致单品,单款(单 SPU)市场份额要达到行业主流品类中单一品牌的下限。如果达成这一目标,则追加投入,进入第二阶段。

第二阶段,基于第一阶段的极致爆品,有节制地展开多款,覆盖更多的人群,形成多 SPU 基础上的高效率规模能力和最简结构的爆品矩阵,赢得品类销售额的前三地位,同时重点关注和评估扩大人群及 SPU 后的口碑反馈、相应品类在中国市场及全球市场的潜力容量,当然还要考量基于更大规模市场的合理利润表现。如果达成这一系列目标,则追加投入,进入第三阶段。

第三阶段,影响力阶段。在前两个阶段的基础上,调整完善人群覆盖和产品结构,形成爆品矩阵和行业定义能力,显著提升行业整体水准。


如何把一个产品打造成爆品,是静态的单点思考;如何保障爆品持续出现,则需要动态而长期的全局考量。因此,我们产生了一个基本判断:打造爆品的下一步是走向体系化。

体系化爆品与单品爆品的区别在于:


制造是手段,不是目的。

所谓的社会化大生产,就是明确各自的核心优势,然后让专业的人做专业的事。


在制造产业链上,至少有三类主要参与者,从上游向下依次是:装备制造商,就是为工厂制造提供生产设备的制造商;生产制造商,即专业的工厂运营者,其中包括专业代工企业和品牌商自有工厂;品牌商,就是向生产制造商提出生产委托的委托方。制造业的效率取决于这个链条上每一个环节的表现。


关注用户,而不是流量;追求闭环,而不是扩张


这个世界上的公司分为两种:一种是采用溢价模型的,一种是采用性价比模型的。

基于溢价模型的企业进行创新和改良的根本动力,都来自对超额利润的追求,并且高度依赖信息不透明带来的高溢价。首先,高水平创新的能力极为稀缺,无论对一个行业,还是对一家公司而言,都呈现出显著的周期性起伏,世界上很少有公司能够保障持续稳定的高水平创新。其次,信息不透明带来的溢价是非常短暂的。同时,习惯依赖高溢价的公司的运营成本一定会越来越高,浪费越来越严重,效率越来越低。我一直认为,绝大多数采用溢价模型的企业都难以持久。

采用性价比模型的公司坚持下去非常难,非常痛苦,它要有克制贪婪的强大定力,要能忍受漫长的成长积累,还要有忍受低宽容度、高风险运作的耐性,然而一旦这些公司赢得领先,将极具韧性和统治力,并有穿越经济周期的能力。

',229),t=[h];function o(n,a){return i(),l("div",null,t)}const m=p(e,[["render",o],["__file","004-xiaomi-entrepreneurial-thinking.html.vue"]]),d=JSON.parse(`{"path":"/reading/2024/004-xiaomi-entrepreneurial-thinking.html","title":"小米创业思考","lang":"zh-CN","frontmatter":{"date":"2024-07-18T00:00:00.000Z","description":"小米创业思考 雷军(口述),徐洁云(整理) 当遇到复杂问题时,对工程师而言,最重要的是先找到“第一把扳手”,将复杂工程高度简化是一项非常重要的能力。 在创业最初期,短期内有太多的用户其实也没用,关键是要和你的核心用户一起把产品打磨好,做这件事一定要有耐心。 小米手机能赢得“梦幻开局”,原因只有一个:我们给用户提供了前所未见的产品力和颠覆性的用户体验。 ...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2024/004-xiaomi-entrepreneurial-thinking.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"小米创业思考"}],["meta",{"property":"og:description","content":"小米创业思考 雷军(口述),徐洁云(整理) 当遇到复杂问题时,对工程师而言,最重要的是先找到“第一把扳手”,将复杂工程高度简化是一项非常重要的能力。 在创业最初期,短期内有太多的用户其实也没用,关键是要和你的核心用户一起把产品打磨好,做这件事一定要有耐心。 小米手机能赢得“梦幻开局”,原因只有一个:我们给用户提供了前所未见的产品力和颠覆性的用户体验。 ..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-07-18T02:26:17.000Z"}],["meta",{"property":"article:published_time","content":"2024-07-18T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-07-18T02:26:17.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"小米创业思考\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2024-07-18T00:00:00.000Z\\",\\"dateModified\\":\\"2024-07-18T02:26:17.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1721269577000,"updatedTime":1721269577000},"readingTime":{"minutes":30.9,"words":9269},"filePathRelative":"reading/2024/004-xiaomi-entrepreneurial-thinking.md","localizedDate":"2024年7月18日","autoDesc":true,"excerpt":"\\n
\\n

雷军(口述),徐洁云(整理)

\\n
\\n

当遇到复杂问题时,对工程师而言,最重要的是先找到“第一把扳手”,将复杂工程高度简化是一项非常重要的能力。

\\n
\\n

在创业最初期,短期内有太多的用户其实也没用,关键是要和你的核心用户一起把产品打磨好,做这件事一定要有耐心。

\\n
\\n

小米手机能赢得“梦幻开局”,原因只有一个:我们给用户提供了前所未见的产品力和颠覆性的用户体验。

\\n
\\n

“优秀的公司赚取利润,伟大的公司赢得人心!

\\n
\\n

做产品不是炫技,如何把功能做到更人性化、更迎合用户的需求,跟技术同样至关重要。

"}`);export{m as comp,d as data}; diff --git a/assets/005-build-release-run.html-DXvVYxAI.js b/assets/005-build-release-run.html-C_eqmPUo.js similarity index 98% rename from assets/005-build-release-run.html-DXvVYxAI.js rename to assets/005-build-release-run.html-C_eqmPUo.js index c1eecf38a..862bd278a 100644 --- a/assets/005-build-release-run.html-DXvVYxAI.js +++ b/assets/005-build-release-run.html-C_eqmPUo.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as a,a as n}from"./app-BLyK9ZJy.js";const i="/assets/image/software-engineering/build-release-run.png",r={},s=n('

构建,发布,运行

核心思想

严格分离构建、发布和运行阶段。

基准代码部署的三个阶段

构建阶段

将基准代码转化为可执行包,包括获取依赖项、编译成二进制文件和资源文件。

构建阶段可以相对复杂,并且需要人为触发,错误信息可以立即展现在开发人员面前,从而得到妥善处理。

发布阶段

将构建得到的结果与部署所需配置结合,形成可立即运行的版本。

每发布一个版本必须对应一个唯一的发布ID,例如使用发布时的时间戳或一个增长的数字。

发布的版本就像一本只能追加的账本,一旦发布就不可修改,任何的变动都应该产生一个新的发布版本。

运行阶段

在执行环境中启动应用程序进程,使用选定的发布版本运行。

运行阶段是可以自动进行的,如服务器重启,或是进程管理器重启了一个崩溃的进程。因此,运行阶段应该保持尽可能少的模块,这样假设半夜发生系统故障而开发人员又捉襟见肘也不会引起太大问题。

',15),o=[s];function p(l,c){return t(),a("div",null,o)}const g=e(r,[["render",p],["__file","005-build-release-run.html.vue"]]),u=JSON.parse(`{"path":"/dump/software-engineering/twelve-factor/005-build-release-run.html","title":"构建,发布,运行","lang":"zh-CN","frontmatter":{"description":"构建,发布,运行 核心思想 严格分离构建、发布和运行阶段。 基准代码部署的三个阶段 构建阶段 将基准代码转化为可执行包,包括获取依赖项、编译成二进制文件和资源文件。 构建阶段可以相对复杂,并且需要人为触发,错误信息可以立即展现在开发人员面前,从而得到妥善处理。 发布阶段 将构建得到的结果与部署所需配置结合,形成可立即运行的版本。 每发布一个版本必须对应...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/dump/software-engineering/twelve-factor/005-build-release-run.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"构建,发布,运行"}],["meta",{"property":"og:description","content":"构建,发布,运行 核心思想 严格分离构建、发布和运行阶段。 基准代码部署的三个阶段 构建阶段 将基准代码转化为可执行包,包括获取依赖项、编译成二进制文件和资源文件。 构建阶段可以相对复杂,并且需要人为触发,错误信息可以立即展现在开发人员面前,从而得到妥善处理。 发布阶段 将构建得到的结果与部署所需配置结合,形成可立即运行的版本。 每发布一个版本必须对应..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:image","content":"https://guoxicheng.top/assets/image/software-engineering/build-release-run.png"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-19T03:23:52.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-19T03:23:52.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"构建,发布,运行\\",\\"image\\":[\\"https://guoxicheng.top/assets/image/software-engineering/build-release-run.png\\"],\\"dateModified\\":\\"2024-06-19T03:23:52.000Z\\",\\"author\\":[]}"]]},"headers":[{"level":2,"title":"核心思想","slug":"核心思想","link":"#核心思想","children":[]},{"level":2,"title":"基准代码部署的三个阶段","slug":"基准代码部署的三个阶段","link":"#基准代码部署的三个阶段","children":[{"level":3,"title":"构建阶段","slug":"构建阶段","link":"#构建阶段","children":[]},{"level":3,"title":"发布阶段","slug":"发布阶段","link":"#发布阶段","children":[]},{"level":3,"title":"运行阶段","slug":"运行阶段","link":"#运行阶段","children":[]}]}],"git":{"createdTime":1709540171000,"updatedTime":1718767432000},"readingTime":{"minutes":1.14,"words":341},"filePathRelative":"dump/software-engineering/twelve-factor/005-build-release-run.md","localizedDate":"2024年3月4日","autoDesc":true,"excerpt":"\\n
\\"\\"
\\n

核心思想

\\n

严格分离构建、发布和运行阶段。

\\n

基准代码部署的三个阶段

\\n

构建阶段

\\n

将基准代码转化为可执行包,包括获取依赖项、编译成二进制文件和资源文件。

\\n

构建阶段可以相对复杂,并且需要人为触发,错误信息可以立即展现在开发人员面前,从而得到妥善处理。

"}`);export{g as comp,u as data}; +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as a,a as n}from"./app-BSa8cFh0.js";const i="/assets/image/software-engineering/build-release-run.png",r={},s=n('

构建,发布,运行

核心思想

严格分离构建、发布和运行阶段。

基准代码部署的三个阶段

构建阶段

将基准代码转化为可执行包,包括获取依赖项、编译成二进制文件和资源文件。

构建阶段可以相对复杂,并且需要人为触发,错误信息可以立即展现在开发人员面前,从而得到妥善处理。

发布阶段

将构建得到的结果与部署所需配置结合,形成可立即运行的版本。

每发布一个版本必须对应一个唯一的发布ID,例如使用发布时的时间戳或一个增长的数字。

发布的版本就像一本只能追加的账本,一旦发布就不可修改,任何的变动都应该产生一个新的发布版本。

运行阶段

在执行环境中启动应用程序进程,使用选定的发布版本运行。

运行阶段是可以自动进行的,如服务器重启,或是进程管理器重启了一个崩溃的进程。因此,运行阶段应该保持尽可能少的模块,这样假设半夜发生系统故障而开发人员又捉襟见肘也不会引起太大问题。

',15),o=[s];function p(l,c){return t(),a("div",null,o)}const g=e(r,[["render",p],["__file","005-build-release-run.html.vue"]]),u=JSON.parse(`{"path":"/dump/software-engineering/twelve-factor/005-build-release-run.html","title":"构建,发布,运行","lang":"zh-CN","frontmatter":{"description":"构建,发布,运行 核心思想 严格分离构建、发布和运行阶段。 基准代码部署的三个阶段 构建阶段 将基准代码转化为可执行包,包括获取依赖项、编译成二进制文件和资源文件。 构建阶段可以相对复杂,并且需要人为触发,错误信息可以立即展现在开发人员面前,从而得到妥善处理。 发布阶段 将构建得到的结果与部署所需配置结合,形成可立即运行的版本。 每发布一个版本必须对应...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/dump/software-engineering/twelve-factor/005-build-release-run.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"构建,发布,运行"}],["meta",{"property":"og:description","content":"构建,发布,运行 核心思想 严格分离构建、发布和运行阶段。 基准代码部署的三个阶段 构建阶段 将基准代码转化为可执行包,包括获取依赖项、编译成二进制文件和资源文件。 构建阶段可以相对复杂,并且需要人为触发,错误信息可以立即展现在开发人员面前,从而得到妥善处理。 发布阶段 将构建得到的结果与部署所需配置结合,形成可立即运行的版本。 每发布一个版本必须对应..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:image","content":"https://guoxicheng.top/assets/image/software-engineering/build-release-run.png"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-19T03:23:52.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-19T03:23:52.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"构建,发布,运行\\",\\"image\\":[\\"https://guoxicheng.top/assets/image/software-engineering/build-release-run.png\\"],\\"dateModified\\":\\"2024-06-19T03:23:52.000Z\\",\\"author\\":[]}"]]},"headers":[{"level":2,"title":"核心思想","slug":"核心思想","link":"#核心思想","children":[]},{"level":2,"title":"基准代码部署的三个阶段","slug":"基准代码部署的三个阶段","link":"#基准代码部署的三个阶段","children":[{"level":3,"title":"构建阶段","slug":"构建阶段","link":"#构建阶段","children":[]},{"level":3,"title":"发布阶段","slug":"发布阶段","link":"#发布阶段","children":[]},{"level":3,"title":"运行阶段","slug":"运行阶段","link":"#运行阶段","children":[]}]}],"git":{"createdTime":1709540171000,"updatedTime":1718767432000},"readingTime":{"minutes":1.14,"words":341},"filePathRelative":"dump/software-engineering/twelve-factor/005-build-release-run.md","localizedDate":"2024年3月4日","autoDesc":true,"excerpt":"\\n
\\"\\"
\\n

核心思想

\\n

严格分离构建、发布和运行阶段。

\\n

基准代码部署的三个阶段

\\n

构建阶段

\\n

将基准代码转化为可执行包,包括获取依赖项、编译成二进制文件和资源文件。

\\n

构建阶段可以相对复杂,并且需要人为触发,错误信息可以立即展现在开发人员面前,从而得到妥善处理。

"}`);export{g as comp,u as data}; diff --git a/assets/005-devilish-chatting-techniques.html-BQgV7FQe.js b/assets/005-devilish-chatting-techniques.html-yREWOw9j.js similarity index 98% rename from assets/005-devilish-chatting-techniques.html-BQgV7FQe.js rename to assets/005-devilish-chatting-techniques.html-yREWOw9j.js index 8b9997021..b9f9af21f 100644 --- a/assets/005-devilish-chatting-techniques.html-BQgV7FQe.js +++ b/assets/005-devilish-chatting-techniques.html-yREWOw9j.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as o,a as i}from"./app-BLyK9ZJy.js";const n={},p=i('

魔鬼聊天术

阮琦

两性关系是人和世界最基本的关系之一,健康的两性关系的前提是双方都拥有健全独立的人格,这是因为只有人格健全才能接纳自我,只有接纳自我才能够泛化他人,只有泛化他人才能具备共情能力。而扭曲的人格往往会导致在两性关系中对全体异性都产生对立,对立的结果就是不能去理解对方的感受,不是说这样的人从此就不再需要异性了,而是说异性只是他的欲求目标。


自由不是想做什么就做什么,而是想不做什么就不做什么。同样,尊重不是我为你做你需要的事,而是我不去做你不愿意的事。


如果一个女人会欣赏男人财富和地位之外的其他细节,那么她在男人的眼中也会更加性感;与之相对应的是,如果一个男人对那些不漂亮的女士也能保持绅士风度,那么他才是真正的绅士。


健全人格的第一点——有个正确的自我观念,包括客观的自我定位及积极的自我认同。这两部分缺一不可、相辅相成,而很多人的问题在于:要么因为自我认同就觉得自己比谁都强,要么由于自己不如别人导致自我否定。

(理性分析)接纳自我——在自我的形成过程中,外界对你好,你就觉得自己是值得被爱的,于是就接纳了自己;反之,外界对你不好,你就觉得自己不值得被爱,于是就否定了自己。当积极自我已然形成之后,再遇到外界对你不好,你也更容易客观看待外界的反应,更加容易接纳有人喜欢、有人不喜欢的状态,不会上升到对整个人的否定;反之,当消极自我形成之后,即使遇到外界对你友好,你也会惴惴不安,抑或恶意揣测,甚至上升到全面否定。

健全人格的第二点——行为的动机主要从自己的内心感受出发而不是被外界环境左右。


情商指的是在交流时对对方情绪的识别和响应能力,以及对自己情绪的释放和控制能力。


通常情况下,当他人向我们表达他的感受、想法,或者释放他情绪的时候,他会希望我们在认真地听他倾诉。在此基础上,如果还能得到期待的言语反馈,甚至是行为的一致,那真的会是一场非常满意的交流。

',15),a=[p];function r(c,h){return t(),o("div",null,a)}const l=e(n,[["render",r],["__file","005-devilish-chatting-techniques.html.vue"]]),m=JSON.parse(`{"path":"/reading/2023/005-devilish-chatting-techniques.html","title":"魔鬼聊天术","lang":"zh-CN","frontmatter":{"date":"2023-10-18T00:00:00.000Z","description":"魔鬼聊天术 阮琦 两性关系是人和世界最基本的关系之一,健康的两性关系的前提是双方都拥有健全独立的人格,这是因为只有人格健全才能接纳自我,只有接纳自我才能够泛化他人,只有泛化他人才能具备共情能力。而扭曲的人格往往会导致在两性关系中对全体异性都产生对立,对立的结果就是不能去理解对方的感受,不是说这样的人从此就不再需要异性了,而是说异性只是他的欲求目标。 自...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/005-devilish-chatting-techniques.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"魔鬼聊天术"}],["meta",{"property":"og:description","content":"魔鬼聊天术 阮琦 两性关系是人和世界最基本的关系之一,健康的两性关系的前提是双方都拥有健全独立的人格,这是因为只有人格健全才能接纳自我,只有接纳自我才能够泛化他人,只有泛化他人才能具备共情能力。而扭曲的人格往往会导致在两性关系中对全体异性都产生对立,对立的结果就是不能去理解对方的感受,不是说这样的人从此就不再需要异性了,而是说异性只是他的欲求目标。 自..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-03-05T14:58:56.000Z"}],["meta",{"property":"article:published_time","content":"2023-10-18T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-03-05T14:58:56.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"魔鬼聊天术\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-10-18T00:00:00.000Z\\",\\"dateModified\\":\\"2024-03-05T14:58:56.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1691333203000,"updatedTime":1709650736000},"readingTime":{"minutes":2.39,"words":716},"filePathRelative":"reading/2023/005-devilish-chatting-techniques.md","localizedDate":"2023年10月18日","autoDesc":true,"excerpt":"\\n
\\n

阮琦

\\n
\\n

两性关系是人和世界最基本的关系之一,健康的两性关系的前提是双方都拥有健全独立的人格,这是因为只有人格健全才能接纳自我,只有接纳自我才能够泛化他人,只有泛化他人才能具备共情能力。而扭曲的人格往往会导致在两性关系中对全体异性都产生对立,对立的结果就是不能去理解对方的感受,不是说这样的人从此就不再需要异性了,而是说异性只是他的欲求目标。

\\n
\\n

自由不是想做什么就做什么,而是想不做什么就不做什么。同样,尊重不是我为你做你需要的事,而是我不去做你不愿意的事。

\\n
\\n

如果一个女人会欣赏男人财富和地位之外的其他细节,那么她在男人的眼中也会更加性感;与之相对应的是,如果一个男人对那些不漂亮的女士也能保持绅士风度,那么他才是真正的绅士。

"}`);export{l as comp,m as data}; +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as o,a as i}from"./app-BSa8cFh0.js";const n={},p=i('

魔鬼聊天术

阮琦

两性关系是人和世界最基本的关系之一,健康的两性关系的前提是双方都拥有健全独立的人格,这是因为只有人格健全才能接纳自我,只有接纳自我才能够泛化他人,只有泛化他人才能具备共情能力。而扭曲的人格往往会导致在两性关系中对全体异性都产生对立,对立的结果就是不能去理解对方的感受,不是说这样的人从此就不再需要异性了,而是说异性只是他的欲求目标。


自由不是想做什么就做什么,而是想不做什么就不做什么。同样,尊重不是我为你做你需要的事,而是我不去做你不愿意的事。


如果一个女人会欣赏男人财富和地位之外的其他细节,那么她在男人的眼中也会更加性感;与之相对应的是,如果一个男人对那些不漂亮的女士也能保持绅士风度,那么他才是真正的绅士。


健全人格的第一点——有个正确的自我观念,包括客观的自我定位及积极的自我认同。这两部分缺一不可、相辅相成,而很多人的问题在于:要么因为自我认同就觉得自己比谁都强,要么由于自己不如别人导致自我否定。

(理性分析)接纳自我——在自我的形成过程中,外界对你好,你就觉得自己是值得被爱的,于是就接纳了自己;反之,外界对你不好,你就觉得自己不值得被爱,于是就否定了自己。当积极自我已然形成之后,再遇到外界对你不好,你也更容易客观看待外界的反应,更加容易接纳有人喜欢、有人不喜欢的状态,不会上升到对整个人的否定;反之,当消极自我形成之后,即使遇到外界对你友好,你也会惴惴不安,抑或恶意揣测,甚至上升到全面否定。

健全人格的第二点——行为的动机主要从自己的内心感受出发而不是被外界环境左右。


情商指的是在交流时对对方情绪的识别和响应能力,以及对自己情绪的释放和控制能力。


通常情况下,当他人向我们表达他的感受、想法,或者释放他情绪的时候,他会希望我们在认真地听他倾诉。在此基础上,如果还能得到期待的言语反馈,甚至是行为的一致,那真的会是一场非常满意的交流。

',15),a=[p];function r(c,h){return t(),o("div",null,a)}const l=e(n,[["render",r],["__file","005-devilish-chatting-techniques.html.vue"]]),m=JSON.parse(`{"path":"/reading/2023/005-devilish-chatting-techniques.html","title":"魔鬼聊天术","lang":"zh-CN","frontmatter":{"date":"2023-10-18T00:00:00.000Z","description":"魔鬼聊天术 阮琦 两性关系是人和世界最基本的关系之一,健康的两性关系的前提是双方都拥有健全独立的人格,这是因为只有人格健全才能接纳自我,只有接纳自我才能够泛化他人,只有泛化他人才能具备共情能力。而扭曲的人格往往会导致在两性关系中对全体异性都产生对立,对立的结果就是不能去理解对方的感受,不是说这样的人从此就不再需要异性了,而是说异性只是他的欲求目标。 自...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/005-devilish-chatting-techniques.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"魔鬼聊天术"}],["meta",{"property":"og:description","content":"魔鬼聊天术 阮琦 两性关系是人和世界最基本的关系之一,健康的两性关系的前提是双方都拥有健全独立的人格,这是因为只有人格健全才能接纳自我,只有接纳自我才能够泛化他人,只有泛化他人才能具备共情能力。而扭曲的人格往往会导致在两性关系中对全体异性都产生对立,对立的结果就是不能去理解对方的感受,不是说这样的人从此就不再需要异性了,而是说异性只是他的欲求目标。 自..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-03-05T14:58:56.000Z"}],["meta",{"property":"article:published_time","content":"2023-10-18T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-03-05T14:58:56.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"魔鬼聊天术\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-10-18T00:00:00.000Z\\",\\"dateModified\\":\\"2024-03-05T14:58:56.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1691333203000,"updatedTime":1709650736000},"readingTime":{"minutes":2.39,"words":716},"filePathRelative":"reading/2023/005-devilish-chatting-techniques.md","localizedDate":"2023年10月18日","autoDesc":true,"excerpt":"\\n
\\n

阮琦

\\n
\\n

两性关系是人和世界最基本的关系之一,健康的两性关系的前提是双方都拥有健全独立的人格,这是因为只有人格健全才能接纳自我,只有接纳自我才能够泛化他人,只有泛化他人才能具备共情能力。而扭曲的人格往往会导致在两性关系中对全体异性都产生对立,对立的结果就是不能去理解对方的感受,不是说这样的人从此就不再需要异性了,而是说异性只是他的欲求目标。

\\n
\\n

自由不是想做什么就做什么,而是想不做什么就不做什么。同样,尊重不是我为你做你需要的事,而是我不去做你不愿意的事。

\\n
\\n

如果一个女人会欣赏男人财富和地位之外的其他细节,那么她在男人的眼中也会更加性感;与之相对应的是,如果一个男人对那些不漂亮的女士也能保持绅士风度,那么他才是真正的绅士。

"}`);export{l as comp,m as data}; diff --git a/assets/005-small-and-beautiful.html-BguQ-TEF.js b/assets/005-small-and-beautiful.html-CXAbnsZT.js similarity index 99% rename from assets/005-small-and-beautiful.html-BguQ-TEF.js rename to assets/005-small-and-beautiful.html-CXAbnsZT.js index 64aa770f2..685f80ea8 100644 --- a/assets/005-small-and-beautiful.html-BguQ-TEF.js +++ b/assets/005-small-and-beautiful.html-CXAbnsZT.js @@ -1 +1 @@ -import{_ as p}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as e,c as t,a as r}from"./app-BLyK9ZJy.js";const a={},o=r('

小而美: 持续盈利的经营法则

(美)萨希尔·拉文吉亚

我根本不喜欢经商。我喜欢的是创造!我最终意识到,企业本身不是目的,而是用来创造的工具,一种法律意义上的组织,仅此而已。最开始,我可能根本不需要一个企业,但是后来我所创造的东西需要一种合法的架构、一个团队、一种运营方式,所以我才需要成立一个企业。


你不应先学习,再开始。而应先开始,再学习。


在开始写这本书之前,我不会将自己描述为一个极简主义创业者。我可能会说,我是投身于一种新型初创企业的创始人,这种初创企业将盈利能力置于规模扩张之上,将创造积极影响置于求速度、求突破之上。我不是为了尽可能多地攫取利润,而是决心为我们的客户和社区创造尽可能多的价值。


对极简主义创业者来说,社区就是任何成功企业的起点。

最好的社区是由兴趣、价值观、技能相同,但是其他方面又有所不同的个体组成的。


如果你学到了某些东西,你社区里很可能有一大批用户会发现从你那里学习同样的东西的价值,即使你不是那个领域里的世界权威。

如果你定期学习,那么你将一直有内容可以贡献给社区。随着时间的推移,这会慢慢产生飞轮效应,因为教学通常会成为激发自己的好奇心和灵感,让自己学更多东西的最佳方式。


如果你每天都在学习,你可能就是这样,每天都有内容可以分享。同时,你会积累技能和经验,学会说特定的语言,扩大你的社区,这些都是你创作出一款可以出售的产品必不可少的要素。


你一旦加入一个社区,就可以开始列出社区成员所面临的困难。你可以想想自己能如何创建产品或者服务来解决其中某个或某些问题。


人们购买产品或者服务时,通常会获得四种价值:地理位置价值、形式价值、时间价值和所有权价值。


最大限度地提高你成功率的方法之一是专注于较小的产品,专注于你是核心成员的社区,对于自己是否在有效地解决问题保持坦诚。之所以说出售东西给一个与你有关的社区时,谨慎和用心非常重要,原因就在于此。


每一个创始人,即使是那些最成功的创始人,最开始也什么都不知道,都是从零开始学习的。创业的关键在于兴趣,而不是技能。与其关注你不知道的东西,不如关注你知道的东西。


产品化其实就是将一个流程发展成可以出售的东西。在流程化的阶段,你在帮助每一个客户的过程中,为自己创建了一个有价值的人工流程,建立了一个高效的体系。这样,你就准备好产品化了,也就是说,你将每一个任务自动化,以便人们在你不参与的情况下可以注册、使用并付款购买你的产品。

如果说流程化是将一个人工流程扩大运用范围的方式,那么产品化就是全部实现自动化的方式。


即使你从很低的起点开始,逐渐做大,收取一些费用也很重要。免费与 1 美元之间是天壤之别——这就是“零价格效应”。

正如行为经济学家丹·艾瑞里在《怪诞行为学》一书中所写的:“人们会对免费的东西趋之若鹜,即使这并不是他们想要的。”


建立关系是关键。你的生意会做很久,留住一个客户比找一个新客户容易得多。永远不要夸大宣传,要诚实、开放,始终保持友善。给他们看看你最近如何改进了产品,告诉他们你最近一次失败的经历。不要围绕你的产品来营销,围绕你这一路的旅程和收获来给他们启发。


不管你是刚刚起步,还是已经经商数年,你最重要的客户就是你的社区。他们信任你,因为你帮助他们发展了业务。当你开始有产品的时候,他们也会支持你,这不是偶然。


营销其实就是分享你所热爱的东西。 ——迈克尔·凯悦


你有了社区、一个产品和 100 个客户。这意味着你达到了产品和市场的最佳契合点,我为极简主义生意更明确地定义这一状态:有回头客。回头客意味着你的生意在没有持续的推销活动的情况下能够继续发展下去,这样你可以开始专注于规模的扩张。首先是你的客户获取和销售策略的规模化,然后是你的企业,接下来是你的抱负。


人们不会从陌生人一步到位变成客户,他们从陌生人开始到模糊地知道你的存在,到渐渐成为粉丝,再到成为客户,最后成为帮你宣传扩散的回头客。
从制造粉丝开始。


你不必是一个天才,或者假装是天才,你只需要在至少一件事上领先你的受众一步。


在没有多少人看着的时候,去犯错吧。在公众面前成功的必然结果,是在公众面前失败,所以你会想要在获得较小规模的成功带来的自信与安全感之后,再向着下一个高度攀登。


在关键时候,娱乐总是更胜一筹。
社交媒体也是如此。每一个平台都有将所有内容展示出来的 feed,每件事都有一个 feed。如果说内容是王道,那娱乐就是王道中的王道。


你创建了你的生意来帮助你在乎的一群人,提供给他们的是你的产品,而不是你的广告创意。但是当这些才是公众关注的重点的时候,你很容易就会落入陷阱。你的产品并不是为所有人创建的,所以你也不应该试图去覆盖每一个人,这样成本太高了。如果你花钱的目的是获得粉丝、客户或者吸引眼球,那你就是在买广告,不管它叫什么。


极简主义创业者应该卖产品给用户,而不是卖用户。


与其花费金钱,不如花费你的时间。跟受众建立起联系,拥有一群为你宣传的客户,然后再考虑投入一些利润来稍微扩大自己的视野。如果能这么做,你的企业就能够维持一种精简的规模,以一种舒服的、不会超负荷的速度发展。

付费营销,绝对不能妨碍真正重要的事:跟客户沟通,出售你的产品。


我们需要警惕两类自己造成的错误(或称“主动失误”):第一类与资金耗尽相关,第二类与精力耗尽相关。


你是创始人,同时也是第一个员工,这样看待自己。不要想着拿分红,而要给自己一份年薪,哪怕只有 1 美元,然后在你能够承担得起的情况下逐渐增加。这会促使你亲力亲为,将你的体系都搭建起来,从而让你能够对企业经营而不仅是售卖产品到底需要多少资源了如指掌。


归根结底,你应该尽可能地减少公司开销,但同时也要记住,你的目标是给自己提供足够的收入让自己能够专注于重要的问题——帮助客户解决他们的问题。


不要被一个“成功”的企业应该呈现的样子所迷惑。继续做那些有效果的事,废止或者改进那些不起作用的流程。而且,始终、始终、始终要关注数字,倾听客户的声音。


你的客户想要的不是你的企业更大和发展更快,不在乎你多么有钱或者是不是在《福布斯》“30 位 30 岁以下精英”榜单上,也不在乎你从哪些风险投资家那里融资,或者你有多少名员工。他们希望你的产品得到改进,希望你的生意能坚持下去。就这样。


我反复说过,盈利能力对你的企业而言是最重要的指标。这是因为盈利能力是一种超能力。如果你像我们开始时一样依赖风险投资获取资金,那就是在依靠外部力量来获取成功。当他们拔掉电源,你就断电了。你的备用发电机会维持一段时间,然后也会耗完。

盈利能力让你脱离电网,在无限的跑道上有意识地发展企业。你可以慢慢来,考虑周全之后再做决定,按照自己而不是别人的节奏朝着正确的目标前进。就像海豹突击队说的:“慢就是顺利,顺利就是快。”


教育家劳伦斯·J.彼得提出的彼得原理指出:“在大部分组织机构(比如大型企业)的层次体系中,倾向让每一个员工都通过晋升在组织架构中上升,直到达到不能胜任的层级为止。”

尽管这最初旨在讽刺,但你可能会联想到,在一个严格的等级制度里,每个人都被困在了自己不擅长的工作岗位上。在 Gumroad,我努力将彼得原理的趋势扭转过来。员工为客户工作,我为我的员工工作。最出色的人在得到提拔之后继续做他们最擅长的工作——他们只是得到更多的报酬。


我们谈到了营销的本质在于反复提醒潜在客户你的存在。同样,招聘做得好就是反复提醒潜在应聘者你的存在以及为什么存在。

',71),n=[o];function i(l,h){return e(),t("div",null,n)}const m=p(a,[["render",i],["__file","005-small-and-beautiful.html.vue"]]),s=JSON.parse(`{"path":"/reading/2024/005-small-and-beautiful.html","title":"小而美: 持续盈利的经营法则","lang":"zh-CN","frontmatter":{"date":"2024-08-05T00:00:00.000Z","description":"小而美: 持续盈利的经营法则 (美)萨希尔·拉文吉亚 我根本不喜欢经商。我喜欢的是创造!我最终意识到,企业本身不是目的,而是用来创造的工具,一种法律意义上的组织,仅此而已。最开始,我可能根本不需要一个企业,但是后来我所创造的东西需要一种合法的架构、一个团队、一种运营方式,所以我才需要成立一个企业。 你不应先学习,再开始。而应先开始,再学习。 在开始写这...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2024/005-small-and-beautiful.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"小而美: 持续盈利的经营法则"}],["meta",{"property":"og:description","content":"小而美: 持续盈利的经营法则 (美)萨希尔·拉文吉亚 我根本不喜欢经商。我喜欢的是创造!我最终意识到,企业本身不是目的,而是用来创造的工具,一种法律意义上的组织,仅此而已。最开始,我可能根本不需要一个企业,但是后来我所创造的东西需要一种合法的架构、一个团队、一种运营方式,所以我才需要成立一个企业。 你不应先学习,再开始。而应先开始,再学习。 在开始写这..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-08-05T08:22:39.000Z"}],["meta",{"property":"article:published_time","content":"2024-08-05T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-08-05T08:22:39.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"小而美: 持续盈利的经营法则\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2024-08-05T00:00:00.000Z\\",\\"dateModified\\":\\"2024-08-05T08:22:39.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1722846159000,"updatedTime":1722846159000},"readingTime":{"minutes":9.18,"words":2753},"filePathRelative":"reading/2024/005-small-and-beautiful.md","localizedDate":"2024年8月5日","autoDesc":true,"excerpt":"\\n
\\n

(美)萨希尔·拉文吉亚

\\n
\\n

我根本不喜欢经商。我喜欢的是创造!我最终意识到,企业本身不是目的,而是用来创造的工具,一种法律意义上的组织,仅此而已。最开始,我可能根本不需要一个企业,但是后来我所创造的东西需要一种合法的架构、一个团队、一种运营方式,所以我才需要成立一个企业。

\\n
\\n

你不应先学习,再开始。而应先开始,再学习。

\\n
\\n

在开始写这本书之前,我不会将自己描述为一个极简主义创业者。我可能会说,我是投身于一种新型初创企业的创始人,这种初创企业将盈利能力置于规模扩张之上,将创造积极影响置于求速度、求突破之上。我不是为了尽可能多地攫取利润,而是决心为我们的客户和社区创造尽可能多的价值。

"}`);export{m as comp,s as data}; +import{_ as p}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as e,c as t,a as r}from"./app-BSa8cFh0.js";const a={},o=r('

小而美: 持续盈利的经营法则

(美)萨希尔·拉文吉亚

我根本不喜欢经商。我喜欢的是创造!我最终意识到,企业本身不是目的,而是用来创造的工具,一种法律意义上的组织,仅此而已。最开始,我可能根本不需要一个企业,但是后来我所创造的东西需要一种合法的架构、一个团队、一种运营方式,所以我才需要成立一个企业。


你不应先学习,再开始。而应先开始,再学习。


在开始写这本书之前,我不会将自己描述为一个极简主义创业者。我可能会说,我是投身于一种新型初创企业的创始人,这种初创企业将盈利能力置于规模扩张之上,将创造积极影响置于求速度、求突破之上。我不是为了尽可能多地攫取利润,而是决心为我们的客户和社区创造尽可能多的价值。


对极简主义创业者来说,社区就是任何成功企业的起点。

最好的社区是由兴趣、价值观、技能相同,但是其他方面又有所不同的个体组成的。


如果你学到了某些东西,你社区里很可能有一大批用户会发现从你那里学习同样的东西的价值,即使你不是那个领域里的世界权威。

如果你定期学习,那么你将一直有内容可以贡献给社区。随着时间的推移,这会慢慢产生飞轮效应,因为教学通常会成为激发自己的好奇心和灵感,让自己学更多东西的最佳方式。


如果你每天都在学习,你可能就是这样,每天都有内容可以分享。同时,你会积累技能和经验,学会说特定的语言,扩大你的社区,这些都是你创作出一款可以出售的产品必不可少的要素。


你一旦加入一个社区,就可以开始列出社区成员所面临的困难。你可以想想自己能如何创建产品或者服务来解决其中某个或某些问题。


人们购买产品或者服务时,通常会获得四种价值:地理位置价值、形式价值、时间价值和所有权价值。


最大限度地提高你成功率的方法之一是专注于较小的产品,专注于你是核心成员的社区,对于自己是否在有效地解决问题保持坦诚。之所以说出售东西给一个与你有关的社区时,谨慎和用心非常重要,原因就在于此。


每一个创始人,即使是那些最成功的创始人,最开始也什么都不知道,都是从零开始学习的。创业的关键在于兴趣,而不是技能。与其关注你不知道的东西,不如关注你知道的东西。


产品化其实就是将一个流程发展成可以出售的东西。在流程化的阶段,你在帮助每一个客户的过程中,为自己创建了一个有价值的人工流程,建立了一个高效的体系。这样,你就准备好产品化了,也就是说,你将每一个任务自动化,以便人们在你不参与的情况下可以注册、使用并付款购买你的产品。

如果说流程化是将一个人工流程扩大运用范围的方式,那么产品化就是全部实现自动化的方式。


即使你从很低的起点开始,逐渐做大,收取一些费用也很重要。免费与 1 美元之间是天壤之别——这就是“零价格效应”。

正如行为经济学家丹·艾瑞里在《怪诞行为学》一书中所写的:“人们会对免费的东西趋之若鹜,即使这并不是他们想要的。”


建立关系是关键。你的生意会做很久,留住一个客户比找一个新客户容易得多。永远不要夸大宣传,要诚实、开放,始终保持友善。给他们看看你最近如何改进了产品,告诉他们你最近一次失败的经历。不要围绕你的产品来营销,围绕你这一路的旅程和收获来给他们启发。


不管你是刚刚起步,还是已经经商数年,你最重要的客户就是你的社区。他们信任你,因为你帮助他们发展了业务。当你开始有产品的时候,他们也会支持你,这不是偶然。


营销其实就是分享你所热爱的东西。 ——迈克尔·凯悦


你有了社区、一个产品和 100 个客户。这意味着你达到了产品和市场的最佳契合点,我为极简主义生意更明确地定义这一状态:有回头客。回头客意味着你的生意在没有持续的推销活动的情况下能够继续发展下去,这样你可以开始专注于规模的扩张。首先是你的客户获取和销售策略的规模化,然后是你的企业,接下来是你的抱负。


人们不会从陌生人一步到位变成客户,他们从陌生人开始到模糊地知道你的存在,到渐渐成为粉丝,再到成为客户,最后成为帮你宣传扩散的回头客。
从制造粉丝开始。


你不必是一个天才,或者假装是天才,你只需要在至少一件事上领先你的受众一步。


在没有多少人看着的时候,去犯错吧。在公众面前成功的必然结果,是在公众面前失败,所以你会想要在获得较小规模的成功带来的自信与安全感之后,再向着下一个高度攀登。


在关键时候,娱乐总是更胜一筹。
社交媒体也是如此。每一个平台都有将所有内容展示出来的 feed,每件事都有一个 feed。如果说内容是王道,那娱乐就是王道中的王道。


你创建了你的生意来帮助你在乎的一群人,提供给他们的是你的产品,而不是你的广告创意。但是当这些才是公众关注的重点的时候,你很容易就会落入陷阱。你的产品并不是为所有人创建的,所以你也不应该试图去覆盖每一个人,这样成本太高了。如果你花钱的目的是获得粉丝、客户或者吸引眼球,那你就是在买广告,不管它叫什么。


极简主义创业者应该卖产品给用户,而不是卖用户。


与其花费金钱,不如花费你的时间。跟受众建立起联系,拥有一群为你宣传的客户,然后再考虑投入一些利润来稍微扩大自己的视野。如果能这么做,你的企业就能够维持一种精简的规模,以一种舒服的、不会超负荷的速度发展。

付费营销,绝对不能妨碍真正重要的事:跟客户沟通,出售你的产品。


我们需要警惕两类自己造成的错误(或称“主动失误”):第一类与资金耗尽相关,第二类与精力耗尽相关。


你是创始人,同时也是第一个员工,这样看待自己。不要想着拿分红,而要给自己一份年薪,哪怕只有 1 美元,然后在你能够承担得起的情况下逐渐增加。这会促使你亲力亲为,将你的体系都搭建起来,从而让你能够对企业经营而不仅是售卖产品到底需要多少资源了如指掌。


归根结底,你应该尽可能地减少公司开销,但同时也要记住,你的目标是给自己提供足够的收入让自己能够专注于重要的问题——帮助客户解决他们的问题。


不要被一个“成功”的企业应该呈现的样子所迷惑。继续做那些有效果的事,废止或者改进那些不起作用的流程。而且,始终、始终、始终要关注数字,倾听客户的声音。


你的客户想要的不是你的企业更大和发展更快,不在乎你多么有钱或者是不是在《福布斯》“30 位 30 岁以下精英”榜单上,也不在乎你从哪些风险投资家那里融资,或者你有多少名员工。他们希望你的产品得到改进,希望你的生意能坚持下去。就这样。


我反复说过,盈利能力对你的企业而言是最重要的指标。这是因为盈利能力是一种超能力。如果你像我们开始时一样依赖风险投资获取资金,那就是在依靠外部力量来获取成功。当他们拔掉电源,你就断电了。你的备用发电机会维持一段时间,然后也会耗完。

盈利能力让你脱离电网,在无限的跑道上有意识地发展企业。你可以慢慢来,考虑周全之后再做决定,按照自己而不是别人的节奏朝着正确的目标前进。就像海豹突击队说的:“慢就是顺利,顺利就是快。”


教育家劳伦斯·J.彼得提出的彼得原理指出:“在大部分组织机构(比如大型企业)的层次体系中,倾向让每一个员工都通过晋升在组织架构中上升,直到达到不能胜任的层级为止。”

尽管这最初旨在讽刺,但你可能会联想到,在一个严格的等级制度里,每个人都被困在了自己不擅长的工作岗位上。在 Gumroad,我努力将彼得原理的趋势扭转过来。员工为客户工作,我为我的员工工作。最出色的人在得到提拔之后继续做他们最擅长的工作——他们只是得到更多的报酬。


我们谈到了营销的本质在于反复提醒潜在客户你的存在。同样,招聘做得好就是反复提醒潜在应聘者你的存在以及为什么存在。

',71),n=[o];function i(l,h){return e(),t("div",null,n)}const m=p(a,[["render",i],["__file","005-small-and-beautiful.html.vue"]]),s=JSON.parse(`{"path":"/reading/2024/005-small-and-beautiful.html","title":"小而美: 持续盈利的经营法则","lang":"zh-CN","frontmatter":{"date":"2024-08-05T00:00:00.000Z","description":"小而美: 持续盈利的经营法则 (美)萨希尔·拉文吉亚 我根本不喜欢经商。我喜欢的是创造!我最终意识到,企业本身不是目的,而是用来创造的工具,一种法律意义上的组织,仅此而已。最开始,我可能根本不需要一个企业,但是后来我所创造的东西需要一种合法的架构、一个团队、一种运营方式,所以我才需要成立一个企业。 你不应先学习,再开始。而应先开始,再学习。 在开始写这...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2024/005-small-and-beautiful.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"小而美: 持续盈利的经营法则"}],["meta",{"property":"og:description","content":"小而美: 持续盈利的经营法则 (美)萨希尔·拉文吉亚 我根本不喜欢经商。我喜欢的是创造!我最终意识到,企业本身不是目的,而是用来创造的工具,一种法律意义上的组织,仅此而已。最开始,我可能根本不需要一个企业,但是后来我所创造的东西需要一种合法的架构、一个团队、一种运营方式,所以我才需要成立一个企业。 你不应先学习,再开始。而应先开始,再学习。 在开始写这..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-08-05T08:22:39.000Z"}],["meta",{"property":"article:published_time","content":"2024-08-05T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-08-05T08:22:39.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"小而美: 持续盈利的经营法则\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2024-08-05T00:00:00.000Z\\",\\"dateModified\\":\\"2024-08-05T08:22:39.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1722846159000,"updatedTime":1722846159000},"readingTime":{"minutes":9.18,"words":2753},"filePathRelative":"reading/2024/005-small-and-beautiful.md","localizedDate":"2024年8月5日","autoDesc":true,"excerpt":"\\n
\\n

(美)萨希尔·拉文吉亚

\\n
\\n

我根本不喜欢经商。我喜欢的是创造!我最终意识到,企业本身不是目的,而是用来创造的工具,一种法律意义上的组织,仅此而已。最开始,我可能根本不需要一个企业,但是后来我所创造的东西需要一种合法的架构、一个团队、一种运营方式,所以我才需要成立一个企业。

\\n
\\n

你不应先学习,再开始。而应先开始,再学习。

\\n
\\n

在开始写这本书之前,我不会将自己描述为一个极简主义创业者。我可能会说,我是投身于一种新型初创企业的创始人,这种初创企业将盈利能力置于规模扩张之上,将创造积极影响置于求速度、求突破之上。我不是为了尽可能多地攫取利润,而是决心为我们的客户和社区创造尽可能多的价值。

"}`);export{m as comp,s as data}; diff --git a/assets/006-lean-entrepreneurial-practice.html-DxZ4DEfK.js b/assets/006-lean-entrepreneurial-practice.html-C-ACJWzO.js similarity index 99% rename from assets/006-lean-entrepreneurial-practice.html-DxZ4DEfK.js rename to assets/006-lean-entrepreneurial-practice.html-C-ACJWzO.js index a7c9ef7db..167d6d60e 100644 --- a/assets/006-lean-entrepreneurial-practice.html-DxZ4DEfK.js +++ b/assets/006-lean-entrepreneurial-practice.html-C-ACJWzO.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as p,c as t,a as r}from"./app-BLyK9ZJy.js";const n={},a=r('

精益创业实战

(美)莫瑞亚

忘记解决方案吧,关注客户和他们的问题,创业才有意义,才能成功。


每个人都会做梦,但是做梦的方式却大有不同。那些在夜晚睡觉时做梦的人起床之后会发现一切原来都是幻影,但是那些在白天做梦的人却不是好惹的。他们会大睁着眼睛来做梦里才会做的事情,并一步步把梦境变成现实。


“浪费”指任何消耗资源但却无法创造价值的人类活动。


客户并不关心你的解决方案是什么,他们只关心自己存在的问题。


要知道某个问题是否值得解决,可以从以下三个问题入手:

  1. 你的解决方案是否是客户想要的?(必要性)
  2. 他们是否愿意为你的解决方案掏钱?如果不愿意,那么谁来买单?(发展性)
  3. 你的解决方案是否能够真正解决问题?(可行性)

转型和优化最大的不同在于:转型的目标是寻找可行的方案,优化的目标是加速这个方案的执行。

前者的目的是调整方向(也就是所谓的“完成一次转型”),后者的目的是提高效率(或者扩大规模)。


你也可以换个角度来思考,所谓问题,就是客户需要完成的任务。


很多营销人员都喜欢针对“普通人”来做设计,希望能得到主流受众的青睐。为了做到这一点,他们会把整个设计做得平庸不堪。你的产品现在还不适合主流人群,现阶段的首要任务应该是找出那些可能成为早期接纳者的人群,然后针对他们来做设计。你的设计传达的信息一定要有力、清晰且必须非常有针对性。


宣传的重点应该是产品能带来什么好处,而不是产品有什么功能。


戴恩·马克斯韦尔提出过一个优秀独特卖点的设计公式:

直白清晰的头条=客户想要的结果+限定的时间期限+做不到怎么办

注意:公式中的第二项和第三项如果你能有当然最好,但是没有也没关系。


如果你打算做收费产品,那从一开始就应该收费。

注意:这也有一个例外。当你的独特卖点需要时间累积才能体现的时候(比如 LinkedIn 的付费账号服务),你就不能一开始就收费。


你的假设必须具有可证伪性。

虽然商业模式大家都会写,但实际上大家写出来的很多东西是无法验证的。精益创业法是一种科学方法,所以你必须把商业模式中的元素转换成可证伪的假设。

“可证伪”意味着你可以证明这个假设是错误的。

如果跳过证伪这一步,那你就很可能会栽个大跟头:因为找来的证据全部都支持你的假设,所以你可能会觉得自己的假设是正确的。


要想确保假设的可证伪性,可以参考下面这个公式:

可证伪的假设=[具体并且可重复的动作]可以导致[预期的可评估的目标或结果]


先定性验证,再定量核实是精益创业的核心理念之一。

做客户访谈就是定性验证,即通过较少(但也不能太少)的实验样本对假设进行初步验证。

如果你的假设通过了初步验证,那你就能把学到的东西做成问卷调查,也就是定量地核实你的调研成果。此时你的目标就不是调研了,而是确定调研成果是否具备可扩展性(用专业术语来说就是具备统计显著性)。


你的客户的客户才是你真正的客户。


持续生产线和持续部署的目的都是杜绝浪费。对制造行业来说,最大的浪费就是需要把产品从一个地方转移到另一个地方。而对于软件行业来说,最大的浪费则是软件从一个状态转换到另一个状态之前的等待:等着写代码,等着做测试,等着做部署,等等。如果能减少或者杜绝这些浪费,就能让流程循环得更快,而这正是成功的关键所在。


如果产品和市场不匹配的话,你很容易就能知道:你的产品无法给客户带来价值,也建立不起口碑,访问量增长缓慢,媒体报道也是敷衍了事,销售周期又很长,还有很多交易卡在流程中,无法完成。

如果产品和市场匹配的话,你也很容易就能知道:你的产品一经推出就被客户抢购,或者你刚刚新添了服务器,就被访客挤爆了;客户的钱像雪花一样飞来,公司账户现金飞涨;你马不停蹄地招聘销售和客户支持人员;记者不停打电话给你,因为他们都知道你的新产品很火,都想为你的产品写报道。


在所有的资源之中,时间是最重要的,比金钱更重要。金钱可多可少,但时间只会朝前走。


“客户拉动”是精益思想的另一个理念,即不要预先制作产品或者提供服务,等客户要求了再做。


林肯·墨菲在他的论文“The Reality of Freemium in SaaS”中阐述了一种确定免费用户价值的交换条件测试。结论是,如果用户的参与能为公司增加价值(比如 LinkedIn、Facebook 和 Twitter 这类网络效应非常明显的网站),那免费用户就有价值,否则免费用户就是成本的一部分。


理想的免费方案应该和免费试用方案差不多。区别在于免费试用限制时间,而免费方案则限制功能。如果了解产品的使用模式,那么你就可以设计一套免费方案,让用户的需求逐步增长,直到在某个可以预见的时间点免费方案提供的功能已经无法再满足用户的需求。

',55),o=[a];function i(c,l){return p(),t("div",null,o)}const m=e(n,[["render",i],["__file","006-lean-entrepreneurial-practice.html.vue"]]),s=JSON.parse(`{"path":"/reading/2023/006-lean-entrepreneurial-practice.html","title":"精益创业实战","lang":"zh-CN","frontmatter":{"date":"2023-07-20T00:00:00.000Z","description":"精益创业实战 (美)莫瑞亚 忘记解决方案吧,关注客户和他们的问题,创业才有意义,才能成功。 每个人都会做梦,但是做梦的方式却大有不同。那些在夜晚睡觉时做梦的人起床之后会发现一切原来都是幻影,但是那些在白天做梦的人却不是好惹的。他们会大睁着眼睛来做梦里才会做的事情,并一步步把梦境变成现实。 “浪费”指任何消耗资源但却无法创造价值的人类活动。 客户并不关心...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/006-lean-entrepreneurial-practice.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"精益创业实战"}],["meta",{"property":"og:description","content":"精益创业实战 (美)莫瑞亚 忘记解决方案吧,关注客户和他们的问题,创业才有意义,才能成功。 每个人都会做梦,但是做梦的方式却大有不同。那些在夜晚睡觉时做梦的人起床之后会发现一切原来都是幻影,但是那些在白天做梦的人却不是好惹的。他们会大睁着眼睛来做梦里才会做的事情,并一步步把梦境变成现实。 “浪费”指任何消耗资源但却无法创造价值的人类活动。 客户并不关心..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-13T08:33:25.000Z"}],["meta",{"property":"article:published_time","content":"2023-07-20T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-13T08:33:25.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"精益创业实战\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-07-20T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-13T08:33:25.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1689863911000,"updatedTime":1718267605000},"readingTime":{"minutes":5.54,"words":1662},"filePathRelative":"reading/2023/006-lean-entrepreneurial-practice.md","localizedDate":"2023年7月20日","autoDesc":true,"excerpt":"\\n
\\n

(美)莫瑞亚

\\n
\\n

忘记解决方案吧,关注客户和他们的问题,创业才有意义,才能成功。

\\n
\\n

每个人都会做梦,但是做梦的方式却大有不同。那些在夜晚睡觉时做梦的人起床之后会发现一切原来都是幻影,但是那些在白天做梦的人却不是好惹的。他们会大睁着眼睛来做梦里才会做的事情,并一步步把梦境变成现实。

\\n
\\n

“浪费”指任何消耗资源但却无法创造价值的人类活动。

\\n
\\n

客户并不关心你的解决方案是什么,他们只关心自己存在的问题。

\\n
\\n

要知道某个问题是否值得解决,可以从以下三个问题入手:

"}`);export{m as comp,s as data}; +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as p,c as t,a as r}from"./app-BSa8cFh0.js";const n={},a=r('

精益创业实战

(美)莫瑞亚

忘记解决方案吧,关注客户和他们的问题,创业才有意义,才能成功。


每个人都会做梦,但是做梦的方式却大有不同。那些在夜晚睡觉时做梦的人起床之后会发现一切原来都是幻影,但是那些在白天做梦的人却不是好惹的。他们会大睁着眼睛来做梦里才会做的事情,并一步步把梦境变成现实。


“浪费”指任何消耗资源但却无法创造价值的人类活动。


客户并不关心你的解决方案是什么,他们只关心自己存在的问题。


要知道某个问题是否值得解决,可以从以下三个问题入手:

  1. 你的解决方案是否是客户想要的?(必要性)
  2. 他们是否愿意为你的解决方案掏钱?如果不愿意,那么谁来买单?(发展性)
  3. 你的解决方案是否能够真正解决问题?(可行性)

转型和优化最大的不同在于:转型的目标是寻找可行的方案,优化的目标是加速这个方案的执行。

前者的目的是调整方向(也就是所谓的“完成一次转型”),后者的目的是提高效率(或者扩大规模)。


你也可以换个角度来思考,所谓问题,就是客户需要完成的任务。


很多营销人员都喜欢针对“普通人”来做设计,希望能得到主流受众的青睐。为了做到这一点,他们会把整个设计做得平庸不堪。你的产品现在还不适合主流人群,现阶段的首要任务应该是找出那些可能成为早期接纳者的人群,然后针对他们来做设计。你的设计传达的信息一定要有力、清晰且必须非常有针对性。


宣传的重点应该是产品能带来什么好处,而不是产品有什么功能。


戴恩·马克斯韦尔提出过一个优秀独特卖点的设计公式:

直白清晰的头条=客户想要的结果+限定的时间期限+做不到怎么办

注意:公式中的第二项和第三项如果你能有当然最好,但是没有也没关系。


如果你打算做收费产品,那从一开始就应该收费。

注意:这也有一个例外。当你的独特卖点需要时间累积才能体现的时候(比如 LinkedIn 的付费账号服务),你就不能一开始就收费。


你的假设必须具有可证伪性。

虽然商业模式大家都会写,但实际上大家写出来的很多东西是无法验证的。精益创业法是一种科学方法,所以你必须把商业模式中的元素转换成可证伪的假设。

“可证伪”意味着你可以证明这个假设是错误的。

如果跳过证伪这一步,那你就很可能会栽个大跟头:因为找来的证据全部都支持你的假设,所以你可能会觉得自己的假设是正确的。


要想确保假设的可证伪性,可以参考下面这个公式:

可证伪的假设=[具体并且可重复的动作]可以导致[预期的可评估的目标或结果]


先定性验证,再定量核实是精益创业的核心理念之一。

做客户访谈就是定性验证,即通过较少(但也不能太少)的实验样本对假设进行初步验证。

如果你的假设通过了初步验证,那你就能把学到的东西做成问卷调查,也就是定量地核实你的调研成果。此时你的目标就不是调研了,而是确定调研成果是否具备可扩展性(用专业术语来说就是具备统计显著性)。


你的客户的客户才是你真正的客户。


持续生产线和持续部署的目的都是杜绝浪费。对制造行业来说,最大的浪费就是需要把产品从一个地方转移到另一个地方。而对于软件行业来说,最大的浪费则是软件从一个状态转换到另一个状态之前的等待:等着写代码,等着做测试,等着做部署,等等。如果能减少或者杜绝这些浪费,就能让流程循环得更快,而这正是成功的关键所在。


如果产品和市场不匹配的话,你很容易就能知道:你的产品无法给客户带来价值,也建立不起口碑,访问量增长缓慢,媒体报道也是敷衍了事,销售周期又很长,还有很多交易卡在流程中,无法完成。

如果产品和市场匹配的话,你也很容易就能知道:你的产品一经推出就被客户抢购,或者你刚刚新添了服务器,就被访客挤爆了;客户的钱像雪花一样飞来,公司账户现金飞涨;你马不停蹄地招聘销售和客户支持人员;记者不停打电话给你,因为他们都知道你的新产品很火,都想为你的产品写报道。


在所有的资源之中,时间是最重要的,比金钱更重要。金钱可多可少,但时间只会朝前走。


“客户拉动”是精益思想的另一个理念,即不要预先制作产品或者提供服务,等客户要求了再做。


林肯·墨菲在他的论文“The Reality of Freemium in SaaS”中阐述了一种确定免费用户价值的交换条件测试。结论是,如果用户的参与能为公司增加价值(比如 LinkedIn、Facebook 和 Twitter 这类网络效应非常明显的网站),那免费用户就有价值,否则免费用户就是成本的一部分。


理想的免费方案应该和免费试用方案差不多。区别在于免费试用限制时间,而免费方案则限制功能。如果了解产品的使用模式,那么你就可以设计一套免费方案,让用户的需求逐步增长,直到在某个可以预见的时间点免费方案提供的功能已经无法再满足用户的需求。

',55),o=[a];function i(c,l){return p(),t("div",null,o)}const m=e(n,[["render",i],["__file","006-lean-entrepreneurial-practice.html.vue"]]),s=JSON.parse(`{"path":"/reading/2023/006-lean-entrepreneurial-practice.html","title":"精益创业实战","lang":"zh-CN","frontmatter":{"date":"2023-07-20T00:00:00.000Z","description":"精益创业实战 (美)莫瑞亚 忘记解决方案吧,关注客户和他们的问题,创业才有意义,才能成功。 每个人都会做梦,但是做梦的方式却大有不同。那些在夜晚睡觉时做梦的人起床之后会发现一切原来都是幻影,但是那些在白天做梦的人却不是好惹的。他们会大睁着眼睛来做梦里才会做的事情,并一步步把梦境变成现实。 “浪费”指任何消耗资源但却无法创造价值的人类活动。 客户并不关心...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/006-lean-entrepreneurial-practice.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"精益创业实战"}],["meta",{"property":"og:description","content":"精益创业实战 (美)莫瑞亚 忘记解决方案吧,关注客户和他们的问题,创业才有意义,才能成功。 每个人都会做梦,但是做梦的方式却大有不同。那些在夜晚睡觉时做梦的人起床之后会发现一切原来都是幻影,但是那些在白天做梦的人却不是好惹的。他们会大睁着眼睛来做梦里才会做的事情,并一步步把梦境变成现实。 “浪费”指任何消耗资源但却无法创造价值的人类活动。 客户并不关心..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-13T08:33:25.000Z"}],["meta",{"property":"article:published_time","content":"2023-07-20T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-13T08:33:25.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"精益创业实战\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-07-20T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-13T08:33:25.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1689863911000,"updatedTime":1718267605000},"readingTime":{"minutes":5.54,"words":1662},"filePathRelative":"reading/2023/006-lean-entrepreneurial-practice.md","localizedDate":"2023年7月20日","autoDesc":true,"excerpt":"\\n
\\n

(美)莫瑞亚

\\n
\\n

忘记解决方案吧,关注客户和他们的问题,创业才有意义,才能成功。

\\n
\\n

每个人都会做梦,但是做梦的方式却大有不同。那些在夜晚睡觉时做梦的人起床之后会发现一切原来都是幻影,但是那些在白天做梦的人却不是好惹的。他们会大睁着眼睛来做梦里才会做的事情,并一步步把梦境变成现实。

\\n
\\n

“浪费”指任何消耗资源但却无法创造价值的人类活动。

\\n
\\n

客户并不关心你的解决方案是什么,他们只关心自己存在的问题。

\\n
\\n

要知道某个问题是否值得解决,可以从以下三个问题入手:

"}`);export{m as comp,s as data}; diff --git a/assets/006-low-risk-entrepreneurship.html-PiGZ1Hcf.js b/assets/006-low-risk-entrepreneurship.html-PiGZ1Hcf.js new file mode 100644 index 000000000..86d1af3a8 --- /dev/null +++ b/assets/006-low-risk-entrepreneurship.html-PiGZ1Hcf.js @@ -0,0 +1 @@ +import{_ as p}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as r,c as e,a as t}from"./app-BSa8cFh0.js";const h={},o=t('

低风险创业

樊登

做企业最重要的是现金流,而不是净资产。如果你的现金流永远处于紧绷的状态,一旦出现银行抽贷(由于风控等要求,银行提前收回贷款)的风险,那么你就会很惨。


柳井正说:“这个世界上所有伟大的公司,都是因为解决了一个巨大的矛盾才有所成就。”


“经营的本质就是遇到矛盾,然后解决矛盾。所有伟大的创新都是完成不可能的使命,在不可能之河上架起一座桥。”创业者最重要的力量就在于正视矛盾、解决矛盾,而不仅仅是发现。


当我们面对没有标准答案的问题的时候,只有一个解决办法,就是提高自己的认知水平。只有把认知水平提高了,让原本的发散性问题不再成为一个问题的时候,才会解决。这是发散性问题的解决方法。


创业绝不意味着你注册了一家公司就创业成功了,创业的本质是你自主地工作。创业代表着拥有一定程度上的自由,而这种自由是你即刻享有的。也就是说,你时常能感觉到自由,你想要奔放地工作,想要自主投入地工作,想要自己领导自己地去工作,而且你能够做得到。


一个人从打工人转型成为创业者的标志,不是辞职或者注册公司,而是自主转换生活方式和态度。我们选择创业或者不选择创业的核心,在于搞清楚到底要不要自由地活、要不要自己做决定以及要不要成为自己的主宰。


当某项发明仅仅是为了展示创业者的聪明才智,而非以社会存在的问题为出发点时,这种创业在大部分情况下会以失败告终。


瑞士心理学家卡尔·古斯塔夫·荣格的那句话振聋发聩:“你的潜意识指引着你的人生,而你称其为命运。”如果你在潜意识中根本不相信创业可以很轻松、很愉快,那么就无法做到高速地增长,无法愉快地享受这一切。


西方管理学大师彼得·德鲁克曾说过这样一句话:“管理就是最大限度地激发他人的善意。”如果创业者在潜意识中带有大量的斗争色彩、艰苦意识以及人性本恶的假设,那么他所做的各种各样的事情都会不自觉地引发他人的恶意,让企业时刻面临巨大的风险。你会发现做事越来越难,风险越来越大,这种感受又会反过来验证你的潜意识,形成一种恶性循环。反之,如果创业者内心相信自己在为社会做贡献,社会也不会亏待你,此时你会发现周围与“你”为善的人越来越多,你会慢慢地把身边的人都变成好人。


低风险创业的核心逻辑是“优雅地解决一个社会问题”,而解决问题的第一步在于找到问题。那么,如何找到问题,你应该去哪里寻找低风险创业的机会呢?我总结了三点:抱怨、洞察和体验。


现在开始,倾听身边那些抱怨的声音,从这些声音中找到客户真正需要的点,然后着手解决。


察的核心就是你要把你的脚放在别人的鞋子里,你要能够设身处地地去体会。


什么叫洞察?洞察就是深入客户生活和灵魂中的观察。你要比客户还了解他,将自己彻底带入他的生活,这时你才能够洞察一些机会。


我一直认为做乙方的生意模式非常危险,当你江郎才尽的那天,就是公司倒闭的日子。


要想真正洞察低风险创业的机会,创业者必须进入客户的生活,跟他的灵魂融为一体,从他的角度来看待这个问题应该如何解决。


严格来说,其实根本不存在产品,客户唯一为之付钱的是体验。


想要提升用户体验,自己就得先行体验。如果连你都不满意自己的产品,就别指望市场会给你带来鲜花和掌声。


对客户而言,相比你能否改变世界,他们更关心的是你的产品能否解决他们的痛点,真正改变他们的生活。这是评判你找到的问题好坏的第二个标准:够不够痛。


只有在客户最痛的点上突破,才能在最短的时间内获得客户青睐,才能最大限度地降低创业风险。


什么是秘密?你能做,别人即便知道了也做不了,或者就算做出来,也跟你的不一样,这就是秘密。


如果一个公司没有秘密,就没有护城河,就会时刻处于危险境地,谁想来“抢”都行。


什么叫作好秘密?就是“事无不可对人言”的秘密。关于这个秘密,没有什么是不能告诉别人的,这是一个成功创业者的自信和胸襟,也是衡量一个秘密好坏的标准。真正的秘密,从来不怕别人知道,因为即便你知道了,也学不会。如果你的秘密只是建立在别人看不上、顾不上做的基础之上,那就有很大的风险。


要么不做,要做就要比同行做得十倍还好。


“十倍好”原则其实是一种思维方式。若创业者想设计一款产品,就必须比同行们的产品好上十倍,这样才算真正拥有一个能够为你提供抗风险能力的好秘密。


要想实现十倍好的效果,肯定需要十倍好的方法,需要沿着十倍好的方向去琢磨如何才能拥有十倍好的进步。这是一种“以终为始”的思维方式,用十倍好的结果倒推过程中的每一个环节,去寻找可能被颠覆的地方。


秘密属于会动脑子的人,你需要做的是始终坚持自己选定的方向,慢慢地积累优势,并想方设法改进自己的不足之处。时间一长,优势便会成为“胜势”,成为你的秘密所在。


亲爱的创业者朋友,如果你确实相信自己找到的社会问题够大、够痛,确实愿意为自己的秘密付出大量的时间、金钱和精力,那么请你务必先去验证它的价值。哪怕你认为你卖的是一个无比正确的产品,也要先行验证。

请记住,验证的最好方法是“卖”,而不是“问”。在这个世界上,想当创业导师的人太多了,他们都能对你的创业思路指点一二,但如果让他们掏出真金白银来支持你,他们就会认真地考虑是否值得。所以,价值假设最好的验证方法就是收费。


在验证了秘密的价值之后,接下来还需要验证这个秘密的增长能力,也就是我经常说的增长假设。如果客户使用你的产品后,觉得确实很好,能够满足他的实际需求,体验也不错,那么他会推荐给其他客户,为你进行“转介绍”。这样一来,就能产生“让客户带来客户”的销售效果,让产品的销量持续增长。


价值假设——客户是否会为你的产品或服务尖叫?因为只有给客户提供足够的价值和服务时,他们才会尖叫。

增长假设——客户是否会把你的产品或服务推荐给他的朋友?因为只有推荐给他的朋友,你才能拥有更多客户,企业才有可能实现快速增长。


MVP 是英文 Minimum Viable Product 的缩写,翻译过来叫“最小化可行性产品”。

具体来说,当你想要尝试你的想法时,风险最小的方式是在开始时不要投太多钱,而是先做一个简单的原型,也就是最小化可行性产品,然后通过测试,收集用户的反馈,快速迭代,不断修正产品,最终适应市场的需求。MVP 有两个关键点,分别是最小化和可行性


良好的用户体验应该是“最小化”和“可行性”二者的有机结合。


把成本的“最小化”和产品的“可行性”结合起来,放在同等重要的位置。只有真正实现两者的平衡,才有可能找到真正能够打动客户并让客户愿意买单的产品。


在寻找秘密的过程中,千万不要忽略现金流,现金流出问题是很多创业公司倒下的一个重要原因。

强调一下,我希望创业者重视现金流,并不是鼓励创业者不断寻找更多的融资,这是两个完全不同的概念。所谓正向现金流,顾名思义就是你得有不断流进来的现金,让自己的公司尽可能处于赢利状态,而不是靠融资续命。


真正能够有效地帮助创业者降低风险的是反脆弱的结构设计。


要想弄明白什么是反脆弱,先得了解一个概念——黑天鹅事件。所谓反脆弱,其实就是如何应对黑天鹅事件,从随时可能发生的不确定中受益。


什么叫作反脆弱的商业结构?一个具备反脆弱能力的创业项目,最重要的设计特征是成本有底线,即便你一直亏本,最多到达成本的底线,而不会无休止地亏下去。但收益却没有上限,我们可以不停地赚钱,不会出现明显的“天花板”。


反脆弱的商业结构,其实就是将失败的成本控制在最低限度,同时不断放大收益的上限。一旦形成这样的商业结构,企业的抗风险能力就会极大增强,即便出现巨大的黑天鹅事件,你也有充分的转圜余地,可以自由选择下一步的发展方向。


创业的真相在于你要认清楚这个世界不是线性的。

这个世界是曲线的,真正按照线性模式发展的情况少之又少。因此,才会有那么多的不确定和随机事件。


固定资产本身不产出任何效益。


创业者在成长的过程中,一定要有情怀的追求,因为情怀带有明显的反脆弱色彩。


任何一个单向度的创业者都会面临崩塌的危险,面临黑天鹅事件的发生。当人生窄化到一个方向时,你就变成了一个标签;反之,如果你是一个“人”,那么你可以在任何一件不确定的事情发生时学到东西,不断成长,不断调整和学习,不断完善自己的人格和创业思路。这样一来,你会发现,无论创业过程中出现怎样的风险和挑战,你永远都是受益者。


如果你是一个有情怀的创业者,那么就算是某个产品没赚到钱甚至赔钱,你还可以享受情怀。


创业最痛苦的事莫过于只把事业当作谋生的工具。


如果你希望做到反脆弱,需要学习一件事,就是至圣先贤孔老夫子口中的“君子不器”。所谓“君子不器”,意思是让你成为一个全方位、多向度的人。只有这样,你才是创业真正的主人,拥有充分的自主选择权,可以在任何层面发挥你的优势。


脆弱和反脆弱的最大区别就在于你有没有可选性。只要有选择的余地,就会具备反脆弱的能力;一旦失去选择权,你的公司就是一家十分脆弱的公司。


创业的第一步在于你想为这个社会解决什么问题,而不在于你会什么,有哪方面的能力。即便你什么都不会,只要能找到一个又大又痛的问题,努力去学习、去提升自我,你就都能学得会。


能够找到明晰因果关系的体系,就是简单体系。如果某件东西在被拆分为足够细小的若干模块之后,还能依照特定的因果关系原封不动地予以还原,那么这件东西就属于简单体系。


西方战略管理大师加里·哈默做了一个形象的比喻:机械态团队就像一个马戏团,而管理者和被管理者就像驯兽师和小狗一样。驯兽师拿着鞭子,一声呼喝,一个手势,小狗就会按部就班地做出某种动作,以期得到奖励、逃避惩罚。


生物态管理和机械态管理最大的区别就在于将整个母系统视为大自然,而不是一部机器,将每一个子系统都视为一个生命体,而不是机器中的一个零件。


要想寻求母系统的稳定,就不能让子系统太过稳定,否则母系统便会面临崩盘的危险。


生命体需要的人才,只能从内部生长,而不是从外界请来。所以,创业者如果想要打造一个“群智涌现”的团队,就需要拥有生物态的思维:先让人才从丰富的土壤之中自由地萌芽,有了萌芽之后,物竞天择,适者生存,能最后存活下来的,就是你需要的人才。这是达尔文在《物种起源》里提出的观点,也是生物态增长的全部过程。


没有任何事是只有特定人才方可做到的,只要有一个人能做到,全世界的人应该都能做到,差别只存在于努力程度的不同。


创业者千万别担心员工越轨,做了本职工作以外的事情。你真正需要注意的是,他做这件事情的发心——他是否努力尝试变得更好


承认自己落后没关系,因为最重要的事情是成长,是你有没有每天都在进步,这是美德背后的美德。


创业者需要跟员工和代理商共同承担错误,仅仅允许员工犯错还不够,在员工犯错的时候,你还要跟他共同承担错误带来的后果,这才是生物态的思维。


管理的本质,其实就是激发和释放每一个人的善意。


生物态管理思维有一个大前提:你的产品设计和商业模式必须具有足够强大的反脆弱能力,不会因为员工的一时之失就一蹶不振。


创业者应当让每个员工都思考一个问题:“你不会永远留在这个团队里。有朝一日,当你决定要离开的时候,你希望自己成为一个什么样的人?”


在生物态团队中,前员工是资源,而不是负担。


快乐是会传染的,员工的良好服务状态能够有效地提升客户的体验度和满意度。


产品很重要,营销也很重要,但是“最终阻碍你到达远方的往往不是高山,而是鞋里的沙子”,大量遭遇创业失败的企业,都是因为团队“捏”不到一块。很多人刚开始创业时气势恢宏,眼看就要成功,最终还是没做成,原因是他的团队没有凝聚力,是一盘散沙。


安全感越强的团队,效率越高。


四大类型员工:

  1. 指令型

当一个大学生刚毕业进入公司时,他的工作能力肯定比较低,但有着较强的工作意愿。这时候他最需要的是指令,最好有人能细致周到地告诉他“需要去做哪些事情”“绝对不能做哪些事情”。我将员工的这个阶段称为“指令型”。

  1. 教练型

入职半年之后,这名新员工有了一定的工作经验,工作能力得到了显著的提升。在没有人发号施令的情况下,也能将安排给他的事情处理妥当。但是,由于长期被人呼来喝去,他的工作意愿已经不那么强烈,这时候他需要的不再是个指挥官,而是一名教练。教练会根据遇到的具体情况向他提出不同的问题。

  1. 支持型

教练能够调动员工的工作意愿,继续提升他的工作能力。但是,由于员工依然无法自己做出决定,工作意愿只能归于中等。接下来,你需要做的是给予他大量支持,尊重他的个人能力,进一步提升他的工作意愿。

  1. 授权型

当你发现这名员工的成长速度很快,按照他的想法,事情大都能够得到圆满解决时,你需要做的就是给他充分的空间,让他有机会独当一面,这就是人们常说的“授权”。


四种沟通工具:

  1. 指令型沟通工具——告知
  2. 教练型沟通工具——讨论
  3. 支持型沟通工具——提问
  4. 授权型沟通工具——观察

提问的四大步骤:

  1. 目标

第一组提问全部针对目标(Goal):“你的目标是什么?”“你想解决什么问题?”“你想在什么时候解决?”等。

  1. 现状

第二组提问是现状(Reality)如何,比如:“现在的情况怎么样?”“发生了什么变化?”“你做了哪些应对措施?”“分别有什么结果?”“你有什么资源?”等。

  1. 选择

第三组提问和选择(Option)有关,比如:“你不是有这个目标吗?你也知道现状如何,那么你有哪些选择?”“你现在能够做些什么去解决这个问题?”“在相似或相同的情况下,你听过或见过别人怎么做吗?”“还有吗?”等。

  1. 意愿

最后一组提问是意愿(Will)。这组提问是这个沟通技巧的高潮部分,也是最后收尾的部分,比如:“你刚才想的这么多方法,哪一个是你最喜欢的?”“接下来,你打算怎么做?”“你觉得下一步什么时间进行比较合适?”“如何才能让我知道你做了?”“你会遇到哪些困难?”“遇到这些困难向谁求助?”“你需要准备些什么东西?”等。


有授权则必有观察,即便你再用人不疑,过度的信任也容易坏事。


企业中最常见的反馈方式是“零级反馈”,就是说员工做对了事情,领导没有任何反馈,领导只关注员工做错的事,他们觉得“员工如果做对了事,那就没什么可以说的”。

“一级反馈”是指员工做对了事,领导提出了表扬,但是没有说明表扬的原因;而“二级反馈”是指领导表扬做对了事的员工,并且说明了表扬的理由。这里要注意一点,就是表扬之后,不要对员工提出更高的要求。因为更高的要求,员工会自己提出来。


对一个能够不断迭代的组织而言,需要成长、道德和反思——三根支柱作为基石。


创业成功的第一要素,绝对不是营销套路和推广策略,而是优质的产品。


如果没有一个特别好的、被验证过的产品,任何推广营销手段都是对你的毁灭性打击。


创业者一定要学会珍惜自己的品牌,因为客户只会给你一次机会。


如何才能让你的客户为你带来新的客户?要想解决这个问题,无非从两个方面入手,一个是让客户参与销售,另一个是让客户提供口碑。


一旦确定你的广告有效,千万不要轻易更换。客户对广告的记忆有限,频繁更换广告只能让客户忘得更快。

匆匆忙忙地投广告,又匆匆忙忙地换广告,只会让广告费打水漂,而将广告长时间地在各个渠道“循环播放”,才能起到更好的效果。


华与华董事长华杉先生说过:“所谓广告,绝不是企业写一句话让消费者听,而是写一句话让消费者传给其他消费者听。”


如果你的产品或品牌能唤醒他人的情绪,它就有机会被大众疯狂传播。


管理本身不可视,只有品牌可视。


“边际成本”指的是每一单位新增生产的产品(或者购买的产品)带来的总成本的增量。听起来比较复杂,说白了就是每增加一个用户所需要支付的成本,这是决定创业能否成功非常关键的一个因素。


要想实现指数型增长,创业者需要尽量降低企业的边际成本,直至为零。


为什么互联网讲课能让边际成本趋近为零,而传统培训却无法做到?最大的秘密在于互联网讲课运营的是信息,而不是实体课程。所有的指数型组织都有一个共同的特征,就是只运营信息。人们常说的“互联网+”,实际上就是通过这种模式,将边际成本高的传统行业变成边际成本为零的互联网行业。


线性思维和幂次法则的一大区别,是对“拥有”这个词的理解完全不同——线性思维强调“自己有才是真的有”,而幂次法则更看重“杠杆资源”。


任何一个指数型组织最重要的东西都不是实体资源,而是信息、品牌、技术、数据、知识产权等核心资源,这些可以统称为 IP,它是你撬动杠杆资源的秘密所在,我将其称为“支点”。只要你能将这个支点牢牢握在手中,撬动再多的杠杆资源、发展再多的经销商和加盟商都不必恐慌,因为他们离不开你的 IP。


找到关键节点,是一个公司能够出现指数型增长的前提和关键。

',189),i=[o];function l(n,a){return r(),e("div",null,i)}const d=p(h,[["render",l],["__file","006-low-risk-entrepreneurship.html.vue"]]),m=JSON.parse(`{"path":"/reading/2024/006-low-risk-entrepreneurship.html","title":"低风险创业","lang":"zh-CN","frontmatter":{"date":"2024-08-16T00:00:00.000Z","description":"低风险创业 樊登 做企业最重要的是现金流,而不是净资产。如果你的现金流永远处于紧绷的状态,一旦出现银行抽贷(由于风控等要求,银行提前收回贷款)的风险,那么你就会很惨。 柳井正说:“这个世界上所有伟大的公司,都是因为解决了一个巨大的矛盾才有所成就。” “经营的本质就是遇到矛盾,然后解决矛盾。所有伟大的创新都是完成不可能的使命,在不可能之河上架起一座桥。”...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2024/006-low-risk-entrepreneurship.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"低风险创业"}],["meta",{"property":"og:description","content":"低风险创业 樊登 做企业最重要的是现金流,而不是净资产。如果你的现金流永远处于紧绷的状态,一旦出现银行抽贷(由于风控等要求,银行提前收回贷款)的风险,那么你就会很惨。 柳井正说:“这个世界上所有伟大的公司,都是因为解决了一个巨大的矛盾才有所成就。” “经营的本质就是遇到矛盾,然后解决矛盾。所有伟大的创新都是完成不可能的使命,在不可能之河上架起一座桥。”..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-08-16T06:19:57.000Z"}],["meta",{"property":"article:published_time","content":"2024-08-16T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-08-16T06:19:57.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"低风险创业\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2024-08-16T00:00:00.000Z\\",\\"dateModified\\":\\"2024-08-16T06:19:57.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1723789197000,"updatedTime":1723789197000},"readingTime":{"minutes":19.58,"words":5874},"filePathRelative":"reading/2024/006-low-risk-entrepreneurship.md","localizedDate":"2024年8月16日","autoDesc":true,"excerpt":"\\n
\\n

樊登

\\n
\\n

做企业最重要的是现金流,而不是净资产。如果你的现金流永远处于紧绷的状态,一旦出现银行抽贷(由于风控等要求,银行提前收回贷款)的风险,那么你就会很惨。

\\n
\\n

柳井正说:“这个世界上所有伟大的公司,都是因为解决了一个巨大的矛盾才有所成就。”

\\n
\\n

“经营的本质就是遇到矛盾,然后解决矛盾。所有伟大的创新都是完成不可能的使命,在不可能之河上架起一座桥。”创业者最重要的力量就在于正视矛盾、解决矛盾,而不仅仅是发现。

\\n
\\n

当我们面对没有标准答案的问题的时候,只有一个解决办法,就是提高自己的认知水平。只有把认知水平提高了,让原本的发散性问题不再成为一个问题的时候,才会解决。这是发散性问题的解决方法。

"}`);export{d as comp,m as data}; diff --git a/assets/006-processes.html-PQNeUWrx.js b/assets/006-processes.html-CiX1ZK1e.js similarity index 98% rename from assets/006-processes.html-PQNeUWrx.js rename to assets/006-processes.html-CiX1ZK1e.js index de3001a0f..413d27715 100644 --- a/assets/006-processes.html-PQNeUWrx.js +++ b/assets/006-processes.html-CiX1ZK1e.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as a,a as o}from"./app-BLyK9ZJy.js";const r={},n=o('

进程

核心思想

以无状态且无共享的进程运行应用。

无状态进程的原则

进程可以使用内存或磁盘作为事务操作的临时缓存,但不应依赖于这些缓存来保留数据供后续请求使用,因为进程的重启会导致数据丢失。所有需要持久化的数据应存储在后端服务,如数据库中。

',5),s=[n];function i(p,c){return t(),a("div",null,s)}const h=e(r,[["render",i],["__file","006-processes.html.vue"]]),m=JSON.parse(`{"path":"/dump/software-engineering/twelve-factor/006-processes.html","title":"进程","lang":"zh-CN","frontmatter":{"date":"2024-03-07T00:00:00.000Z","description":"进程 核心思想 以无状态且无共享的进程运行应用。 无状态进程的原则 进程可以使用内存或磁盘作为事务操作的临时缓存,但不应依赖于这些缓存来保留数据供后续请求使用,因为进程的重启会导致数据丢失。所有需要持久化的数据应存储在后端服务,如数据库中。","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/dump/software-engineering/twelve-factor/006-processes.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"进程"}],["meta",{"property":"og:description","content":"进程 核心思想 以无状态且无共享的进程运行应用。 无状态进程的原则 进程可以使用内存或磁盘作为事务操作的临时缓存,但不应依赖于这些缓存来保留数据供后续请求使用,因为进程的重启会导致数据丢失。所有需要持久化的数据应存储在后端服务,如数据库中。"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-19T03:23:52.000Z"}],["meta",{"property":"article:published_time","content":"2024-03-07T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-19T03:23:52.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"进程\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2024-03-07T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-19T03:23:52.000Z\\",\\"author\\":[]}"]]},"headers":[{"level":2,"title":"核心思想","slug":"核心思想","link":"#核心思想","children":[]},{"level":2,"title":"无状态进程的原则","slug":"无状态进程的原则","link":"#无状态进程的原则","children":[]}],"git":{"createdTime":1709540171000,"updatedTime":1718767432000},"readingTime":{"minutes":0.38,"words":114},"filePathRelative":"dump/software-engineering/twelve-factor/006-processes.md","localizedDate":"2024年3月7日","autoDesc":true,"excerpt":"\\n

核心思想

\\n

以无状态且无共享的进程运行应用。

\\n

无状态进程的原则

\\n

进程可以使用内存或磁盘作为事务操作的临时缓存,但不应依赖于这些缓存来保留数据供后续请求使用,因为进程的重启会导致数据丢失。所有需要持久化的数据应存储在后端服务,如数据库中。

\\n"}`);export{h as comp,m as data}; +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as a,a as o}from"./app-BSa8cFh0.js";const r={},n=o('

进程

核心思想

以无状态且无共享的进程运行应用。

无状态进程的原则

进程可以使用内存或磁盘作为事务操作的临时缓存,但不应依赖于这些缓存来保留数据供后续请求使用,因为进程的重启会导致数据丢失。所有需要持久化的数据应存储在后端服务,如数据库中。

',5),s=[n];function i(p,c){return t(),a("div",null,s)}const h=e(r,[["render",i],["__file","006-processes.html.vue"]]),m=JSON.parse(`{"path":"/dump/software-engineering/twelve-factor/006-processes.html","title":"进程","lang":"zh-CN","frontmatter":{"date":"2024-03-07T00:00:00.000Z","description":"进程 核心思想 以无状态且无共享的进程运行应用。 无状态进程的原则 进程可以使用内存或磁盘作为事务操作的临时缓存,但不应依赖于这些缓存来保留数据供后续请求使用,因为进程的重启会导致数据丢失。所有需要持久化的数据应存储在后端服务,如数据库中。","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/dump/software-engineering/twelve-factor/006-processes.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"进程"}],["meta",{"property":"og:description","content":"进程 核心思想 以无状态且无共享的进程运行应用。 无状态进程的原则 进程可以使用内存或磁盘作为事务操作的临时缓存,但不应依赖于这些缓存来保留数据供后续请求使用,因为进程的重启会导致数据丢失。所有需要持久化的数据应存储在后端服务,如数据库中。"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-19T03:23:52.000Z"}],["meta",{"property":"article:published_time","content":"2024-03-07T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-19T03:23:52.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"进程\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2024-03-07T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-19T03:23:52.000Z\\",\\"author\\":[]}"]]},"headers":[{"level":2,"title":"核心思想","slug":"核心思想","link":"#核心思想","children":[]},{"level":2,"title":"无状态进程的原则","slug":"无状态进程的原则","link":"#无状态进程的原则","children":[]}],"git":{"createdTime":1709540171000,"updatedTime":1718767432000},"readingTime":{"minutes":0.38,"words":114},"filePathRelative":"dump/software-engineering/twelve-factor/006-processes.md","localizedDate":"2024年3月7日","autoDesc":true,"excerpt":"\\n

核心思想

\\n

以无状态且无共享的进程运行应用。

\\n

无状态进程的原则

\\n

进程可以使用内存或磁盘作为事务操作的临时缓存,但不应依赖于这些缓存来保留数据供后续请求使用,因为进程的重启会导致数据丢失。所有需要持久化的数据应存储在后端服务,如数据库中。

\\n"}`);export{h as comp,m as data}; diff --git a/assets/007-island-economics.html-BQdhw1NV.js b/assets/007-island-economics.html-D50o5pCb.js similarity index 99% rename from assets/007-island-economics.html-BQdhw1NV.js rename to assets/007-island-economics.html-D50o5pCb.js index 48bfa9010..fb9dd5dda 100644 --- a/assets/007-island-economics.html-BQdhw1NV.js +++ b/assets/007-island-economics.html-D50o5pCb.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as p,a as o}from"./app-BLyK9ZJy.js";const r={},n=o('

小岛经济学

(美)彼得·希夫,安德鲁·希夫

在经济学术语中,资本指的是一种设备,这种设备的建设和使用本身没有什么意义,其意义在于利用设备建设和制造其他需要的东西。


努力使有限的资源(每种资源都是有限的)产生最大的效益以尽可能满足人类的需求,这就是经济这一概念最简单的定义。工具、资本以及创新是实现这一目标的关键。

牢记这一点,我们就很容易理解经济增长的原因:找到了生产人类所需物品的更好方式。不管一个经济体最后变得多么强大,这个原因是不会改变的。


大多数经济学家认为,给老百姓更多的钱花就可以增加需求,但是这种做法并不能改变真正的需求,只会使人们花更多的钱购买已经生产出来的商品。只有增加供给才能切实满足人们更多的需求。


消费只是我们用来衡量生产的尺度,因为所有生产出来的东西最终都是用于消费的。


储蓄创造了资本,而资本使生产扩大成为可能,所以储蓄起来的一美元对经济产生的积极影响要大于消费掉的一美元。


一名员工的具体价值主要取决于三个方面:需求(雇主是否需要这名员工所掌握的技能)、供应(有多少人具备这些技能)以及生产力(这名员工对那些任务的完成程度如何)。


高利率会抑制借贷,延缓经济增长。但同时,高利率也能刺激储蓄。最终,银行资产会再次积累起来,到那时利率又会下降。


较低的存款率表明人们更愿意将储蓄用于近期消费,因而抑制了为满足未来消费需求而进行的投资。


低利率会刺激借贷、抑制储蓄。


政府对于公共设施和服务的垄断几乎必然会造成效率低下和贪污腐败。

如果政府工程入不敷出且服务质量很差,自由市场的原则也无法帮助其走出困境。政府通常会通过提高税收填补漏洞。这样一来,不仅浪费了社会资源,也降低了人们的生活水平。


提供就业岗位并非经济的目的。经济的目的是不断提高生产力。


浪费劳动力制造那些国外生产率更高的产品是毫无意义的。如果我们专注于生产自己擅长制造的产品,就可以用它们换取别人擅长制造的产品,最终能得到更多。


通货膨胀其实就是货币供应量增加,与其相反的情况即为通货紧缩,意指货币供应收紧。从另一方面来说,价格自身其实不会膨胀或者紧缩,只会上涨或下跌。所以膨胀的不是价格,而是货币供应。


一旦工作的人数量减少了,生产的产品也会减少,供应量便会减少。而物质匮乏会导致价格上涨。如果人们向这种并不明朗的经济状况中投入更多货币,必然会导致价格飞涨。


正常来讲,贸易逆差能够自我调节。

如果一个国家处于贸易顺差状态,也就是说其出口额大于进口额,就会在国际上形成对其货币的需求。如果你想要该国的产品,你就需要该国的货币。所以,强势的贸易地位会使一国货币坚挺,弱势的贸易地位会导致该国货币疲软。如果没有人想购买你的产品,也就没有人需要你的货币。


纸币只有在足够多的人愿意使用纸币交换产品和服务时才有价值。因此,纸币的价值完全由人主观决定。由于纸币可以无限量地发行,并且没有内在价值,如果人们对纸币失去信心,它们就会变成一堆废纸。


最成功的企业应该是在人们最需要的时候生产他们最需要的东西。


一国的经济不会因为人们的消费而增长,而是经济增长带动人们的消费。


大多数经济学家认为,消费会促进经济增长。增加货币供应量固然会鼓励人们消费,但对扩大需求却毫无裨益,而需求才是促进经济增长的真正动力。


通货膨胀不过是把财富从以某种货币储蓄的人手中转移到以同种货币负债的人那里。如果遇到恶性通货膨胀,存款就会变得一文不值,负债却一笔勾销。(拥有固定资产的人情况会好一些,因为与以货币形式储蓄不同,固定资产的账面价值会暴涨。)

',44),a=[n];function c(i,h){return t(),p("div",null,a)}const l=e(r,[["render",c],["__file","007-island-economics.html.vue"]]),m=JSON.parse(`{"path":"/reading/2023/007-island-economics.html","title":"小岛经济学","lang":"zh-CN","frontmatter":{"date":"2023-08-06T00:00:00.000Z","description":"小岛经济学 (美)彼得·希夫,安德鲁·希夫 在经济学术语中,资本指的是一种设备,这种设备的建设和使用本身没有什么意义,其意义在于利用设备建设和制造其他需要的东西。 努力使有限的资源(每种资源都是有限的)产生最大的效益以尽可能满足人类的需求,这就是经济这一概念最简单的定义。工具、资本以及创新是实现这一目标的关键。 牢记这一点,我们就很容易理解经济增长的原...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/007-island-economics.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"小岛经济学"}],["meta",{"property":"og:description","content":"小岛经济学 (美)彼得·希夫,安德鲁·希夫 在经济学术语中,资本指的是一种设备,这种设备的建设和使用本身没有什么意义,其意义在于利用设备建设和制造其他需要的东西。 努力使有限的资源(每种资源都是有限的)产生最大的效益以尽可能满足人类的需求,这就是经济这一概念最简单的定义。工具、资本以及创新是实现这一目标的关键。 牢记这一点,我们就很容易理解经济增长的原..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-13T08:33:25.000Z"}],["meta",{"property":"article:published_time","content":"2023-08-06T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-13T08:33:25.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"小岛经济学\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-08-06T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-13T08:33:25.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1691309459000,"updatedTime":1718267605000},"readingTime":{"minutes":4.4,"words":1320},"filePathRelative":"reading/2023/007-island-economics.md","localizedDate":"2023年8月6日","autoDesc":true,"excerpt":"\\n
\\n

(美)彼得·希夫,安德鲁·希夫

\\n
\\n

在经济学术语中,资本指的是一种设备,这种设备的建设和使用本身没有什么意义,其意义在于利用设备建设和制造其他需要的东西。

\\n
\\n

努力使有限的资源(每种资源都是有限的)产生最大的效益以尽可能满足人类的需求,这就是经济这一概念最简单的定义。工具、资本以及创新是实现这一目标的关键。

\\n

牢记这一点,我们就很容易理解经济增长的原因:找到了生产人类所需物品的更好方式。不管一个经济体最后变得多么强大,这个原因是不会改变的。

\\n
\\n

大多数经济学家认为,给老百姓更多的钱花就可以增加需求,但是这种做法并不能改变真正的需求,只会使人们花更多的钱购买已经生产出来的商品。只有增加供给才能切实满足人们更多的需求。

"}`);export{l as comp,m as data}; +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as p,a as o}from"./app-BSa8cFh0.js";const r={},n=o('

小岛经济学

(美)彼得·希夫,安德鲁·希夫

在经济学术语中,资本指的是一种设备,这种设备的建设和使用本身没有什么意义,其意义在于利用设备建设和制造其他需要的东西。


努力使有限的资源(每种资源都是有限的)产生最大的效益以尽可能满足人类的需求,这就是经济这一概念最简单的定义。工具、资本以及创新是实现这一目标的关键。

牢记这一点,我们就很容易理解经济增长的原因:找到了生产人类所需物品的更好方式。不管一个经济体最后变得多么强大,这个原因是不会改变的。


大多数经济学家认为,给老百姓更多的钱花就可以增加需求,但是这种做法并不能改变真正的需求,只会使人们花更多的钱购买已经生产出来的商品。只有增加供给才能切实满足人们更多的需求。


消费只是我们用来衡量生产的尺度,因为所有生产出来的东西最终都是用于消费的。


储蓄创造了资本,而资本使生产扩大成为可能,所以储蓄起来的一美元对经济产生的积极影响要大于消费掉的一美元。


一名员工的具体价值主要取决于三个方面:需求(雇主是否需要这名员工所掌握的技能)、供应(有多少人具备这些技能)以及生产力(这名员工对那些任务的完成程度如何)。


高利率会抑制借贷,延缓经济增长。但同时,高利率也能刺激储蓄。最终,银行资产会再次积累起来,到那时利率又会下降。


较低的存款率表明人们更愿意将储蓄用于近期消费,因而抑制了为满足未来消费需求而进行的投资。


低利率会刺激借贷、抑制储蓄。


政府对于公共设施和服务的垄断几乎必然会造成效率低下和贪污腐败。

如果政府工程入不敷出且服务质量很差,自由市场的原则也无法帮助其走出困境。政府通常会通过提高税收填补漏洞。这样一来,不仅浪费了社会资源,也降低了人们的生活水平。


提供就业岗位并非经济的目的。经济的目的是不断提高生产力。


浪费劳动力制造那些国外生产率更高的产品是毫无意义的。如果我们专注于生产自己擅长制造的产品,就可以用它们换取别人擅长制造的产品,最终能得到更多。


通货膨胀其实就是货币供应量增加,与其相反的情况即为通货紧缩,意指货币供应收紧。从另一方面来说,价格自身其实不会膨胀或者紧缩,只会上涨或下跌。所以膨胀的不是价格,而是货币供应。


一旦工作的人数量减少了,生产的产品也会减少,供应量便会减少。而物质匮乏会导致价格上涨。如果人们向这种并不明朗的经济状况中投入更多货币,必然会导致价格飞涨。


正常来讲,贸易逆差能够自我调节。

如果一个国家处于贸易顺差状态,也就是说其出口额大于进口额,就会在国际上形成对其货币的需求。如果你想要该国的产品,你就需要该国的货币。所以,强势的贸易地位会使一国货币坚挺,弱势的贸易地位会导致该国货币疲软。如果没有人想购买你的产品,也就没有人需要你的货币。


纸币只有在足够多的人愿意使用纸币交换产品和服务时才有价值。因此,纸币的价值完全由人主观决定。由于纸币可以无限量地发行,并且没有内在价值,如果人们对纸币失去信心,它们就会变成一堆废纸。


最成功的企业应该是在人们最需要的时候生产他们最需要的东西。


一国的经济不会因为人们的消费而增长,而是经济增长带动人们的消费。


大多数经济学家认为,消费会促进经济增长。增加货币供应量固然会鼓励人们消费,但对扩大需求却毫无裨益,而需求才是促进经济增长的真正动力。


通货膨胀不过是把财富从以某种货币储蓄的人手中转移到以同种货币负债的人那里。如果遇到恶性通货膨胀,存款就会变得一文不值,负债却一笔勾销。(拥有固定资产的人情况会好一些,因为与以货币形式储蓄不同,固定资产的账面价值会暴涨。)

',44),a=[n];function c(i,h){return t(),p("div",null,a)}const l=e(r,[["render",c],["__file","007-island-economics.html.vue"]]),m=JSON.parse(`{"path":"/reading/2023/007-island-economics.html","title":"小岛经济学","lang":"zh-CN","frontmatter":{"date":"2023-08-06T00:00:00.000Z","description":"小岛经济学 (美)彼得·希夫,安德鲁·希夫 在经济学术语中,资本指的是一种设备,这种设备的建设和使用本身没有什么意义,其意义在于利用设备建设和制造其他需要的东西。 努力使有限的资源(每种资源都是有限的)产生最大的效益以尽可能满足人类的需求,这就是经济这一概念最简单的定义。工具、资本以及创新是实现这一目标的关键。 牢记这一点,我们就很容易理解经济增长的原...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/007-island-economics.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"小岛经济学"}],["meta",{"property":"og:description","content":"小岛经济学 (美)彼得·希夫,安德鲁·希夫 在经济学术语中,资本指的是一种设备,这种设备的建设和使用本身没有什么意义,其意义在于利用设备建设和制造其他需要的东西。 努力使有限的资源(每种资源都是有限的)产生最大的效益以尽可能满足人类的需求,这就是经济这一概念最简单的定义。工具、资本以及创新是实现这一目标的关键。 牢记这一点,我们就很容易理解经济增长的原..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-13T08:33:25.000Z"}],["meta",{"property":"article:published_time","content":"2023-08-06T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-13T08:33:25.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"小岛经济学\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-08-06T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-13T08:33:25.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1691309459000,"updatedTime":1718267605000},"readingTime":{"minutes":4.4,"words":1320},"filePathRelative":"reading/2023/007-island-economics.md","localizedDate":"2023年8月6日","autoDesc":true,"excerpt":"\\n
\\n

(美)彼得·希夫,安德鲁·希夫

\\n
\\n

在经济学术语中,资本指的是一种设备,这种设备的建设和使用本身没有什么意义,其意义在于利用设备建设和制造其他需要的东西。

\\n
\\n

努力使有限的资源(每种资源都是有限的)产生最大的效益以尽可能满足人类的需求,这就是经济这一概念最简单的定义。工具、资本以及创新是实现这一目标的关键。

\\n

牢记这一点,我们就很容易理解经济增长的原因:找到了生产人类所需物品的更好方式。不管一个经济体最后变得多么强大,这个原因是不会改变的。

\\n
\\n

大多数经济学家认为,给老百姓更多的钱花就可以增加需求,但是这种做法并不能改变真正的需求,只会使人们花更多的钱购买已经生产出来的商品。只有增加供给才能切实满足人们更多的需求。

"}`);export{l as comp,m as data}; diff --git a/assets/007-port-binding.html-5zvAZ7Uu.js b/assets/007-port-binding.html-DdoumpZG.js similarity index 97% rename from assets/007-port-binding.html-5zvAZ7Uu.js rename to assets/007-port-binding.html-DdoumpZG.js index ee997c3c3..bc8a082f0 100644 --- a/assets/007-port-binding.html-5zvAZ7Uu.js +++ b/assets/007-port-binding.html-DdoumpZG.js @@ -1 +1 @@ -import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o,c as n,b as e}from"./app-BLyK9ZJy.js";const r={},a=e("h1",{id:"端口绑定",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#端口绑定"},[e("span",null,"端口绑定")])],-1),i=e("h2",{id:"核心思想",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#核心思想"},[e("span",null,"核心思想")])],-1),c=e("p",null,"12-Factor APP 通过端口绑定来提供服务,并监听发送至该端口的请求。",-1),p=[a,i,c];function d(l,s){return o(),n("div",null,p)}const g=t(r,[["render",d],["__file","007-port-binding.html.vue"]]),_=JSON.parse(`{"path":"/dump/software-engineering/twelve-factor/007-port-binding.html","title":"端口绑定","lang":"zh-CN","frontmatter":{"date":"2024-03-07T00:00:00.000Z","description":"端口绑定 核心思想 12-Factor APP 通过端口绑定来提供服务,并监听发送至该端口的请求。","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/dump/software-engineering/twelve-factor/007-port-binding.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"端口绑定"}],["meta",{"property":"og:description","content":"端口绑定 核心思想 12-Factor APP 通过端口绑定来提供服务,并监听发送至该端口的请求。"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-19T03:23:52.000Z"}],["meta",{"property":"article:published_time","content":"2024-03-07T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-19T03:23:52.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"端口绑定\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2024-03-07T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-19T03:23:52.000Z\\",\\"author\\":[]}"]]},"headers":[{"level":2,"title":"核心思想","slug":"核心思想","link":"#核心思想","children":[]}],"git":{"createdTime":1709540171000,"updatedTime":1718767432000},"readingTime":{"minutes":0.13,"words":38},"filePathRelative":"dump/software-engineering/twelve-factor/007-port-binding.md","localizedDate":"2024年3月7日","autoDesc":true,"excerpt":"\\n

核心思想

\\n

12-Factor APP 通过端口绑定来提供服务,并监听发送至该端口的请求。

\\n"}`);export{g as comp,_ as data}; +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o,c as n,b as e}from"./app-BSa8cFh0.js";const r={},a=e("h1",{id:"端口绑定",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#端口绑定"},[e("span",null,"端口绑定")])],-1),i=e("h2",{id:"核心思想",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#核心思想"},[e("span",null,"核心思想")])],-1),c=e("p",null,"12-Factor APP 通过端口绑定来提供服务,并监听发送至该端口的请求。",-1),p=[a,i,c];function d(l,s){return o(),n("div",null,p)}const g=t(r,[["render",d],["__file","007-port-binding.html.vue"]]),_=JSON.parse(`{"path":"/dump/software-engineering/twelve-factor/007-port-binding.html","title":"端口绑定","lang":"zh-CN","frontmatter":{"date":"2024-03-07T00:00:00.000Z","description":"端口绑定 核心思想 12-Factor APP 通过端口绑定来提供服务,并监听发送至该端口的请求。","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/dump/software-engineering/twelve-factor/007-port-binding.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"端口绑定"}],["meta",{"property":"og:description","content":"端口绑定 核心思想 12-Factor APP 通过端口绑定来提供服务,并监听发送至该端口的请求。"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-19T03:23:52.000Z"}],["meta",{"property":"article:published_time","content":"2024-03-07T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-19T03:23:52.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"端口绑定\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2024-03-07T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-19T03:23:52.000Z\\",\\"author\\":[]}"]]},"headers":[{"level":2,"title":"核心思想","slug":"核心思想","link":"#核心思想","children":[]}],"git":{"createdTime":1709540171000,"updatedTime":1718767432000},"readingTime":{"minutes":0.13,"words":38},"filePathRelative":"dump/software-engineering/twelve-factor/007-port-binding.md","localizedDate":"2024年3月7日","autoDesc":true,"excerpt":"\\n

核心思想

\\n

12-Factor APP 通过端口绑定来提供服务,并监听发送至该端口的请求。

\\n"}`);export{g as comp,_ as data}; diff --git a/assets/008-concurrency.html-C9yJTBMF.js b/assets/008-concurrency.html-CHlHe31d.js similarity index 98% rename from assets/008-concurrency.html-C9yJTBMF.js rename to assets/008-concurrency.html-CHlHe31d.js index 1d320eaa2..ad21fc3bc 100644 --- a/assets/008-concurrency.html-C9yJTBMF.js +++ b/assets/008-concurrency.html-CHlHe31d.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as a,a as n}from"./app-BLyK9ZJy.js";const r="/assets/image/software-engineering/process-types.png",i={},o=n('

并发

核心思想

通过进程模型进行水平扩展。

进程模型基本构成

在12-Factor APP中,一个应用被设计为一组小型、独立的进程。这些进程可以是处理Web请求的web进程、处理后台任务的worker进程,或是执行其他特定任务的进程。

每个进程都是无状态的,它们不会直接共享内存或存储状态信息。这种设计使得每个进程都可以独立运行,互不干扰。

扩展的类型

垂直扩展

通过增加单个进程的计算资源(如CPU、内存)来增加处理能力。这是传统的扩展方式,但它有物理和成本的限制。

水平扩展

通过增加进程的实例数量来扩展处理能力。在12-Factor APP中,这通常是通过增加同一类型的无状态进程实例来实现的,比如增加更多的web进程来处理更多的并发用户请求。

',12),c=[o];function s(p,l){return t(),a("div",null,c)}const g=e(i,[["render",s],["__file","008-concurrency.html.vue"]]),m=JSON.parse(`{"path":"/dump/software-engineering/twelve-factor/008-concurrency.html","title":"并发","lang":"zh-CN","frontmatter":{"date":"2024-03-07T00:00:00.000Z","description":"并发 核心思想 通过进程模型进行水平扩展。 进程模型基本构成 在12-Factor APP中,一个应用被设计为一组小型、独立的进程。这些进程可以是处理Web请求的web进程、处理后台任务的worker进程,或是执行其他特定任务的进程。 每个进程都是无状态的,它们不会直接共享内存或存储状态信息。这种设计使得每个进程都可以独立运行,互不干扰。 扩展的类型 ...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/dump/software-engineering/twelve-factor/008-concurrency.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"并发"}],["meta",{"property":"og:description","content":"并发 核心思想 通过进程模型进行水平扩展。 进程模型基本构成 在12-Factor APP中,一个应用被设计为一组小型、独立的进程。这些进程可以是处理Web请求的web进程、处理后台任务的worker进程,或是执行其他特定任务的进程。 每个进程都是无状态的,它们不会直接共享内存或存储状态信息。这种设计使得每个进程都可以独立运行,互不干扰。 扩展的类型 ..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:image","content":"https://guoxicheng.top/assets/image/software-engineering/process-types.png"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-19T03:23:52.000Z"}],["meta",{"property":"article:published_time","content":"2024-03-07T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-19T03:23:52.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"并发\\",\\"image\\":[\\"https://guoxicheng.top/assets/image/software-engineering/process-types.png\\"],\\"datePublished\\":\\"2024-03-07T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-19T03:23:52.000Z\\",\\"author\\":[]}"]]},"headers":[{"level":2,"title":"核心思想","slug":"核心思想","link":"#核心思想","children":[]},{"level":2,"title":"进程模型基本构成","slug":"进程模型基本构成","link":"#进程模型基本构成","children":[]},{"level":2,"title":"扩展的类型","slug":"扩展的类型","link":"#扩展的类型","children":[{"level":3,"title":"垂直扩展","slug":"垂直扩展","link":"#垂直扩展","children":[]},{"level":3,"title":"水平扩展","slug":"水平扩展","link":"#水平扩展","children":[]}]}],"git":{"createdTime":1709540171000,"updatedTime":1718767432000},"readingTime":{"minutes":0.89,"words":268},"filePathRelative":"dump/software-engineering/twelve-factor/008-concurrency.md","localizedDate":"2024年3月7日","autoDesc":true,"excerpt":"\\n
\\"\\"
\\n

核心思想

\\n

通过进程模型进行水平扩展。

\\n

进程模型基本构成

\\n

在12-Factor APP中,一个应用被设计为一组小型、独立的进程。这些进程可以是处理Web请求的web进程、处理后台任务的worker进程,或是执行其他特定任务的进程。

\\n

每个进程都是无状态的,它们不会直接共享内存或存储状态信息。这种设计使得每个进程都可以独立运行,互不干扰。

"}`);export{g as comp,m as data}; +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as a,a as n}from"./app-BSa8cFh0.js";const r="/assets/image/software-engineering/process-types.png",i={},o=n('

并发

核心思想

通过进程模型进行水平扩展。

进程模型基本构成

在12-Factor APP中,一个应用被设计为一组小型、独立的进程。这些进程可以是处理Web请求的web进程、处理后台任务的worker进程,或是执行其他特定任务的进程。

每个进程都是无状态的,它们不会直接共享内存或存储状态信息。这种设计使得每个进程都可以独立运行,互不干扰。

扩展的类型

垂直扩展

通过增加单个进程的计算资源(如CPU、内存)来增加处理能力。这是传统的扩展方式,但它有物理和成本的限制。

水平扩展

通过增加进程的实例数量来扩展处理能力。在12-Factor APP中,这通常是通过增加同一类型的无状态进程实例来实现的,比如增加更多的web进程来处理更多的并发用户请求。

',12),c=[o];function s(p,l){return t(),a("div",null,c)}const g=e(i,[["render",s],["__file","008-concurrency.html.vue"]]),m=JSON.parse(`{"path":"/dump/software-engineering/twelve-factor/008-concurrency.html","title":"并发","lang":"zh-CN","frontmatter":{"date":"2024-03-07T00:00:00.000Z","description":"并发 核心思想 通过进程模型进行水平扩展。 进程模型基本构成 在12-Factor APP中,一个应用被设计为一组小型、独立的进程。这些进程可以是处理Web请求的web进程、处理后台任务的worker进程,或是执行其他特定任务的进程。 每个进程都是无状态的,它们不会直接共享内存或存储状态信息。这种设计使得每个进程都可以独立运行,互不干扰。 扩展的类型 ...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/dump/software-engineering/twelve-factor/008-concurrency.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"并发"}],["meta",{"property":"og:description","content":"并发 核心思想 通过进程模型进行水平扩展。 进程模型基本构成 在12-Factor APP中,一个应用被设计为一组小型、独立的进程。这些进程可以是处理Web请求的web进程、处理后台任务的worker进程,或是执行其他特定任务的进程。 每个进程都是无状态的,它们不会直接共享内存或存储状态信息。这种设计使得每个进程都可以独立运行,互不干扰。 扩展的类型 ..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:image","content":"https://guoxicheng.top/assets/image/software-engineering/process-types.png"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-19T03:23:52.000Z"}],["meta",{"property":"article:published_time","content":"2024-03-07T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-19T03:23:52.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"并发\\",\\"image\\":[\\"https://guoxicheng.top/assets/image/software-engineering/process-types.png\\"],\\"datePublished\\":\\"2024-03-07T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-19T03:23:52.000Z\\",\\"author\\":[]}"]]},"headers":[{"level":2,"title":"核心思想","slug":"核心思想","link":"#核心思想","children":[]},{"level":2,"title":"进程模型基本构成","slug":"进程模型基本构成","link":"#进程模型基本构成","children":[]},{"level":2,"title":"扩展的类型","slug":"扩展的类型","link":"#扩展的类型","children":[{"level":3,"title":"垂直扩展","slug":"垂直扩展","link":"#垂直扩展","children":[]},{"level":3,"title":"水平扩展","slug":"水平扩展","link":"#水平扩展","children":[]}]}],"git":{"createdTime":1709540171000,"updatedTime":1718767432000},"readingTime":{"minutes":0.89,"words":268},"filePathRelative":"dump/software-engineering/twelve-factor/008-concurrency.md","localizedDate":"2024年3月7日","autoDesc":true,"excerpt":"\\n
\\"\\"
\\n

核心思想

\\n

通过进程模型进行水平扩展。

\\n

进程模型基本构成

\\n

在12-Factor APP中,一个应用被设计为一组小型、独立的进程。这些进程可以是处理Web请求的web进程、处理后台任务的worker进程,或是执行其他特定任务的进程。

\\n

每个进程都是无状态的,它们不会直接共享内存或存储状态信息。这种设计使得每个进程都可以独立运行,互不干扰。

"}`);export{g as comp,m as data}; diff --git a/assets/008-micro-habits-slimming.html-DC76RlLZ.js b/assets/008-micro-habits-slimming.html-B7Ku9Ih6.js similarity index 99% rename from assets/008-micro-habits-slimming.html-DC76RlLZ.js rename to assets/008-micro-habits-slimming.html-B7Ku9Ih6.js index fba5e9f9f..918ba8ce4 100644 --- a/assets/008-micro-habits-slimming.html-DC76RlLZ.js +++ b/assets/008-micro-habits-slimming.html-B7Ku9Ih6.js @@ -1 +1 @@ -import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as e,c as p,a as r}from"./app-BLyK9ZJy.js";const o={},i=r('

微习惯 · 瘦身篇

(美)斯蒂芬·盖斯

短期瘦身的真正代价不是浪费时间、白费力气、暂时受苦,而是所有这些再加上体重增加。


持续性不仅是行为改变的关键,更是行为改变的证据。


复合可以产生巨大的结果,但复合的起点必须确切、具体。如果你让 1 美分每天翻倍,连续翻 31 天,最后你会有 1000 多万美元,但如果你让 0 连续翻倍 31 天,最后的结果还是 0。


“我们是谁”比“我们看起来怎么样”更重要。没有人能青春永驻,如果你在乎的只是美丽的外表,那么时间注定要让你的愿望落空。


除了了解体重增减的基本原理,瘦身的关键还在于你能否长期改变自己的行为。


改变大脑必须先于改变身体进行,否则改变不会持久。


要想有美好的生活,第一条规则就是专注于你能控制的东西。


极低的要求和极高的上限,是让你坚持行动并具有无限上升空间的最佳方案。


有价值的改变必须是持久、稳定的。


当你害怕某种东西的时候,你会承认这种东西在某些方面比你更强大。


“不”比“不能”的效果更好,因为“不”是基于身份的表述,而不是试图控制行为的简单尝试。

基于身份的决定让内在的、长期的目标(比如瘦身时定下的许多目标)更有力量;遵守没有基础的“不能”规则,会让你失去力量,并激发叛逆的一面。


羞耻感和内疚感有时同时出现,一个行为可能既会带来羞耻感,又会带来内疚感。羞耻感反映的是我们对自己的感受,而内疚感则意味着我们意识到自己的行为伤害了其他人。换句话说,羞耻感关乎自我,内疚感关乎他人。

如果做某件事让你感到羞耻,你很有可能会再去做这件事。这种循环很难打破,而且对人打击极大,因为羞耻感会让你变得脆弱。当你脆弱的时候,你很容易做出一些之后让自己感到羞耻的决定,这和典型的司令官、队长、国王、女王的情况正好相反,他们处于强势地位,能坚定而自信地做出决定。


实现巨大改变的最佳策略是能适应你需要的,而最糟的策略则是让你咬牙坚持、服从指挥的。如果想彻底改变自己几十年来的生活方式,你需要的绝不仅是一个食物清单、一个运动计划或别人的一句鼓励,你需要一个与你的潜意识契合的策略,让改变尽可能不留痕迹地融入你的生活。


要想成功,我们需要有远大的理想和微小的积累(而不是远大的理想和巨大的行动)。


关于习惯养成的一项研究发现,中断一天不会影响人们成功养成习惯。唯一的潜在风险在于,你会让一天变成两天(这就是往错误的方向走了)。


要想获得不同的结果,必须有和其他人不同的生活和思考方式。


食物不是问题所在,自我毁灭的行为才是,而羞耻感就是这种行为的核心。但我必须提醒你,羞耻感永远不应该被和吃东西联系起来,因为食物并不带有道德色彩,只不过不同的食物会对身体产生不同的影响。


在吃东西时保持清醒和理智很重要。我们有可能吃了不健康的东西也并不感觉多开心,因为我们吃的时候浑浑噩噩,没有意识。无论什么时候吃东西,都要有意识地去吃。


每个人应该都在人生的某个时刻明白了一个道理:最好专注于你能控制的事情。


决定长期结果的,正是你最常做的事。

',43),a=[i];function n(c,h){return e(),p("div",null,a)}const l=t(o,[["render",n],["__file","008-micro-habits-slimming.html.vue"]]),d=JSON.parse(`{"path":"/reading/2023/008-micro-habits-slimming.html","title":"微习惯 · 瘦身篇","lang":"zh-CN","frontmatter":{"date":"2023-08-17T00:00:00.000Z","description":"微习惯 · 瘦身篇 (美)斯蒂芬·盖斯 短期瘦身的真正代价不是浪费时间、白费力气、暂时受苦,而是所有这些再加上体重增加。 持续性不仅是行为改变的关键,更是行为改变的证据。 复合可以产生巨大的结果,但复合的起点必须确切、具体。如果你让 1 美分每天翻倍,连续翻 31 天,最后你会有 1000 多万美元,但如果你让 0 连续翻倍 31 天,最后的结果还是 ...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/008-micro-habits-slimming.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"微习惯 · 瘦身篇"}],["meta",{"property":"og:description","content":"微习惯 · 瘦身篇 (美)斯蒂芬·盖斯 短期瘦身的真正代价不是浪费时间、白费力气、暂时受苦,而是所有这些再加上体重增加。 持续性不仅是行为改变的关键,更是行为改变的证据。 复合可以产生巨大的结果,但复合的起点必须确切、具体。如果你让 1 美分每天翻倍,连续翻 31 天,最后你会有 1000 多万美元,但如果你让 0 连续翻倍 31 天,最后的结果还是 ..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-13T08:33:25.000Z"}],["meta",{"property":"article:published_time","content":"2023-08-17T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-13T08:33:25.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"微习惯 · 瘦身篇\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-08-17T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-13T08:33:25.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1692282665000,"updatedTime":1718267605000},"readingTime":{"minutes":3.62,"words":1087},"filePathRelative":"reading/2023/008-micro-habits-slimming.md","localizedDate":"2023年8月17日","autoDesc":true,"excerpt":"\\n
\\n

(美)斯蒂芬·盖斯

\\n
\\n

短期瘦身的真正代价不是浪费时间、白费力气、暂时受苦,而是所有这些再加上体重增加。

\\n
\\n

持续性不仅是行为改变的关键,更是行为改变的证据。

\\n
\\n

复合可以产生巨大的结果,但复合的起点必须确切、具体。如果你让 1 美分每天翻倍,连续翻 31 天,最后你会有 1000 多万美元,但如果你让 0 连续翻倍 31 天,最后的结果还是 0。

\\n
\\n

“我们是谁”比“我们看起来怎么样”更重要。没有人能青春永驻,如果你在乎的只是美丽的外表,那么时间注定要让你的愿望落空。

"}`);export{l as comp,d as data}; +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as e,c as p,a as r}from"./app-BSa8cFh0.js";const o={},i=r('

微习惯 · 瘦身篇

(美)斯蒂芬·盖斯

短期瘦身的真正代价不是浪费时间、白费力气、暂时受苦,而是所有这些再加上体重增加。


持续性不仅是行为改变的关键,更是行为改变的证据。


复合可以产生巨大的结果,但复合的起点必须确切、具体。如果你让 1 美分每天翻倍,连续翻 31 天,最后你会有 1000 多万美元,但如果你让 0 连续翻倍 31 天,最后的结果还是 0。


“我们是谁”比“我们看起来怎么样”更重要。没有人能青春永驻,如果你在乎的只是美丽的外表,那么时间注定要让你的愿望落空。


除了了解体重增减的基本原理,瘦身的关键还在于你能否长期改变自己的行为。


改变大脑必须先于改变身体进行,否则改变不会持久。


要想有美好的生活,第一条规则就是专注于你能控制的东西。


极低的要求和极高的上限,是让你坚持行动并具有无限上升空间的最佳方案。


有价值的改变必须是持久、稳定的。


当你害怕某种东西的时候,你会承认这种东西在某些方面比你更强大。


“不”比“不能”的效果更好,因为“不”是基于身份的表述,而不是试图控制行为的简单尝试。

基于身份的决定让内在的、长期的目标(比如瘦身时定下的许多目标)更有力量;遵守没有基础的“不能”规则,会让你失去力量,并激发叛逆的一面。


羞耻感和内疚感有时同时出现,一个行为可能既会带来羞耻感,又会带来内疚感。羞耻感反映的是我们对自己的感受,而内疚感则意味着我们意识到自己的行为伤害了其他人。换句话说,羞耻感关乎自我,内疚感关乎他人。

如果做某件事让你感到羞耻,你很有可能会再去做这件事。这种循环很难打破,而且对人打击极大,因为羞耻感会让你变得脆弱。当你脆弱的时候,你很容易做出一些之后让自己感到羞耻的决定,这和典型的司令官、队长、国王、女王的情况正好相反,他们处于强势地位,能坚定而自信地做出决定。


实现巨大改变的最佳策略是能适应你需要的,而最糟的策略则是让你咬牙坚持、服从指挥的。如果想彻底改变自己几十年来的生活方式,你需要的绝不仅是一个食物清单、一个运动计划或别人的一句鼓励,你需要一个与你的潜意识契合的策略,让改变尽可能不留痕迹地融入你的生活。


要想成功,我们需要有远大的理想和微小的积累(而不是远大的理想和巨大的行动)。


关于习惯养成的一项研究发现,中断一天不会影响人们成功养成习惯。唯一的潜在风险在于,你会让一天变成两天(这就是往错误的方向走了)。


要想获得不同的结果,必须有和其他人不同的生活和思考方式。


食物不是问题所在,自我毁灭的行为才是,而羞耻感就是这种行为的核心。但我必须提醒你,羞耻感永远不应该被和吃东西联系起来,因为食物并不带有道德色彩,只不过不同的食物会对身体产生不同的影响。


在吃东西时保持清醒和理智很重要。我们有可能吃了不健康的东西也并不感觉多开心,因为我们吃的时候浑浑噩噩,没有意识。无论什么时候吃东西,都要有意识地去吃。


每个人应该都在人生的某个时刻明白了一个道理:最好专注于你能控制的事情。


决定长期结果的,正是你最常做的事。

',43),a=[i];function n(c,h){return e(),p("div",null,a)}const l=t(o,[["render",n],["__file","008-micro-habits-slimming.html.vue"]]),d=JSON.parse(`{"path":"/reading/2023/008-micro-habits-slimming.html","title":"微习惯 · 瘦身篇","lang":"zh-CN","frontmatter":{"date":"2023-08-17T00:00:00.000Z","description":"微习惯 · 瘦身篇 (美)斯蒂芬·盖斯 短期瘦身的真正代价不是浪费时间、白费力气、暂时受苦,而是所有这些再加上体重增加。 持续性不仅是行为改变的关键,更是行为改变的证据。 复合可以产生巨大的结果,但复合的起点必须确切、具体。如果你让 1 美分每天翻倍,连续翻 31 天,最后你会有 1000 多万美元,但如果你让 0 连续翻倍 31 天,最后的结果还是 ...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/008-micro-habits-slimming.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"微习惯 · 瘦身篇"}],["meta",{"property":"og:description","content":"微习惯 · 瘦身篇 (美)斯蒂芬·盖斯 短期瘦身的真正代价不是浪费时间、白费力气、暂时受苦,而是所有这些再加上体重增加。 持续性不仅是行为改变的关键,更是行为改变的证据。 复合可以产生巨大的结果,但复合的起点必须确切、具体。如果你让 1 美分每天翻倍,连续翻 31 天,最后你会有 1000 多万美元,但如果你让 0 连续翻倍 31 天,最后的结果还是 ..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-13T08:33:25.000Z"}],["meta",{"property":"article:published_time","content":"2023-08-17T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-13T08:33:25.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"微习惯 · 瘦身篇\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-08-17T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-13T08:33:25.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1692282665000,"updatedTime":1718267605000},"readingTime":{"minutes":3.62,"words":1087},"filePathRelative":"reading/2023/008-micro-habits-slimming.md","localizedDate":"2023年8月17日","autoDesc":true,"excerpt":"\\n
\\n

(美)斯蒂芬·盖斯

\\n
\\n

短期瘦身的真正代价不是浪费时间、白费力气、暂时受苦,而是所有这些再加上体重增加。

\\n
\\n

持续性不仅是行为改变的关键,更是行为改变的证据。

\\n
\\n

复合可以产生巨大的结果,但复合的起点必须确切、具体。如果你让 1 美分每天翻倍,连续翻 31 天,最后你会有 1000 多万美元,但如果你让 0 连续翻倍 31 天,最后的结果还是 0。

\\n
\\n

“我们是谁”比“我们看起来怎么样”更重要。没有人能青春永驻,如果你在乎的只是美丽的外表,那么时间注定要让你的愿望落空。

"}`);export{l as comp,d as data}; diff --git a/assets/009-disposability.html-YYnQkiDh.js b/assets/009-disposability.html-DpW9rlw5.js similarity index 98% rename from assets/009-disposability.html-YYnQkiDh.js rename to assets/009-disposability.html-DpW9rlw5.js index f7bda4dbf..7cebbc9ad 100644 --- a/assets/009-disposability.html-YYnQkiDh.js +++ b/assets/009-disposability.html-DpW9rlw5.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as a,a as n}from"./app-BLyK9ZJy.js";const r={},i=n('

易处理

核心思想

快速启动和优雅停止。

快速启动

快速启动是指进程应当追求最小启动时间,更少的启动时间提供了更敏捷的发布及扩展过程,进程将更容易迁移到新的物理机上,增加了健壮性。

优雅停止

优雅停止是指进程一旦接收到停止信号(SIGTERM),应当停止监听服务的端口,拒绝所有新的请求,并继续执行当前已接收的请求,然后退出。

对 worker 进程而言,应当将当前任务退回队列,并释放所有系统资源。

',8),o=[i];function p(s,l){return t(),a("div",null,o)}const h=e(r,[["render",p],["__file","009-disposability.html.vue"]]),m=JSON.parse(`{"path":"/dump/software-engineering/twelve-factor/009-disposability.html","title":"易处理","lang":"zh-CN","frontmatter":{"date":"2024-03-08T00:00:00.000Z","description":"易处理 核心思想 快速启动和优雅停止。 快速启动 快速启动是指进程应当追求最小启动时间,更少的启动时间提供了更敏捷的发布及扩展过程,进程将更容易迁移到新的物理机上,增加了健壮性。 优雅停止 优雅停止是指进程一旦接收到停止信号(SIGTERM),应当停止监听服务的端口,拒绝所有新的请求,并继续执行当前已接收的请求,然后退出。 对 worker 进程而言,...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/dump/software-engineering/twelve-factor/009-disposability.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"易处理"}],["meta",{"property":"og:description","content":"易处理 核心思想 快速启动和优雅停止。 快速启动 快速启动是指进程应当追求最小启动时间,更少的启动时间提供了更敏捷的发布及扩展过程,进程将更容易迁移到新的物理机上,增加了健壮性。 优雅停止 优雅停止是指进程一旦接收到停止信号(SIGTERM),应当停止监听服务的端口,拒绝所有新的请求,并继续执行当前已接收的请求,然后退出。 对 worker 进程而言,..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-19T03:23:52.000Z"}],["meta",{"property":"article:published_time","content":"2024-03-08T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-19T03:23:52.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"易处理\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2024-03-08T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-19T03:23:52.000Z\\",\\"author\\":[]}"]]},"headers":[{"level":2,"title":"核心思想","slug":"核心思想","link":"#核心思想","children":[]},{"level":2,"title":"快速启动","slug":"快速启动","link":"#快速启动","children":[]},{"level":2,"title":"优雅停止","slug":"优雅停止","link":"#优雅停止","children":[]}],"git":{"createdTime":1709540171000,"updatedTime":1718767432000},"readingTime":{"minutes":0.56,"words":168},"filePathRelative":"dump/software-engineering/twelve-factor/009-disposability.md","localizedDate":"2024年3月8日","autoDesc":true,"excerpt":"\\n

核心思想

\\n

快速启动和优雅停止。

\\n

快速启动

\\n

快速启动是指进程应当追求最小启动时间,更少的启动时间提供了更敏捷的发布及扩展过程,进程将更容易迁移到新的物理机上,增加了健壮性。

\\n

优雅停止

\\n

优雅停止是指进程一旦接收到停止信号(SIGTERM),应当停止监听服务的端口,拒绝所有新的请求,并继续执行当前已接收的请求,然后退出。

\\n

对 worker 进程而言,应当将当前任务退回队列,并释放所有系统资源。

\\n"}`);export{h as comp,m as data}; +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as a,a as n}from"./app-BSa8cFh0.js";const r={},i=n('

易处理

核心思想

快速启动和优雅停止。

快速启动

快速启动是指进程应当追求最小启动时间,更少的启动时间提供了更敏捷的发布及扩展过程,进程将更容易迁移到新的物理机上,增加了健壮性。

优雅停止

优雅停止是指进程一旦接收到停止信号(SIGTERM),应当停止监听服务的端口,拒绝所有新的请求,并继续执行当前已接收的请求,然后退出。

对 worker 进程而言,应当将当前任务退回队列,并释放所有系统资源。

',8),o=[i];function p(s,l){return t(),a("div",null,o)}const h=e(r,[["render",p],["__file","009-disposability.html.vue"]]),m=JSON.parse(`{"path":"/dump/software-engineering/twelve-factor/009-disposability.html","title":"易处理","lang":"zh-CN","frontmatter":{"date":"2024-03-08T00:00:00.000Z","description":"易处理 核心思想 快速启动和优雅停止。 快速启动 快速启动是指进程应当追求最小启动时间,更少的启动时间提供了更敏捷的发布及扩展过程,进程将更容易迁移到新的物理机上,增加了健壮性。 优雅停止 优雅停止是指进程一旦接收到停止信号(SIGTERM),应当停止监听服务的端口,拒绝所有新的请求,并继续执行当前已接收的请求,然后退出。 对 worker 进程而言,...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/dump/software-engineering/twelve-factor/009-disposability.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"易处理"}],["meta",{"property":"og:description","content":"易处理 核心思想 快速启动和优雅停止。 快速启动 快速启动是指进程应当追求最小启动时间,更少的启动时间提供了更敏捷的发布及扩展过程,进程将更容易迁移到新的物理机上,增加了健壮性。 优雅停止 优雅停止是指进程一旦接收到停止信号(SIGTERM),应当停止监听服务的端口,拒绝所有新的请求,并继续执行当前已接收的请求,然后退出。 对 worker 进程而言,..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-19T03:23:52.000Z"}],["meta",{"property":"article:published_time","content":"2024-03-08T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-19T03:23:52.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"易处理\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2024-03-08T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-19T03:23:52.000Z\\",\\"author\\":[]}"]]},"headers":[{"level":2,"title":"核心思想","slug":"核心思想","link":"#核心思想","children":[]},{"level":2,"title":"快速启动","slug":"快速启动","link":"#快速启动","children":[]},{"level":2,"title":"优雅停止","slug":"优雅停止","link":"#优雅停止","children":[]}],"git":{"createdTime":1709540171000,"updatedTime":1718767432000},"readingTime":{"minutes":0.56,"words":168},"filePathRelative":"dump/software-engineering/twelve-factor/009-disposability.md","localizedDate":"2024年3月8日","autoDesc":true,"excerpt":"\\n

核心思想

\\n

快速启动和优雅停止。

\\n

快速启动

\\n

快速启动是指进程应当追求最小启动时间,更少的启动时间提供了更敏捷的发布及扩展过程,进程将更容易迁移到新的物理机上,增加了健壮性。

\\n

优雅停止

\\n

优雅停止是指进程一旦接收到停止信号(SIGTERM),应当停止监听服务的端口,拒绝所有新的请求,并继续执行当前已接收的请求,然后退出。

\\n

对 worker 进程而言,应当将当前任务退回队列,并释放所有系统资源。

\\n"}`);export{h as comp,m as data}; diff --git a/assets/009-introverts-communicate-the-bible.html-DyEf-zfw.js b/assets/009-introverts-communicate-the-bible.html-BSvctGL9.js similarity index 98% rename from assets/009-introverts-communicate-the-bible.html-DyEf-zfw.js rename to assets/009-introverts-communicate-the-bible.html-BSvctGL9.js index 4361d3985..8e623294c 100644 --- a/assets/009-introverts-communicate-the-bible.html-DyEf-zfw.js +++ b/assets/009-introverts-communicate-the-bible.html-BSvctGL9.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as o,a as r}from"./app-BLyK9ZJy.js";const p={},n=r('

内向者沟通圣经

(美)珍妮弗·康维勒

爱默生曾经说过:“去做你最害怕做的事。”


蕾妮·格兰特·威廉姆斯还说:“雄辩是银,沉默是金,停顿是纯铂金。”


“完成这场‘最艰难的转换’意味着:第一,你要放弃你熟悉的、喜欢的、以及能给你带来极大成就感和声望的事情。第二,它意味着承担一些你不熟悉、不确定你是否喜欢,而且也许不会(至少一开始)给你带来成就感和声望的事情。第三,它意味着告别确定、明确,甚至‘有正确答案’的任务。第四,它意味着开始面对那些似乎很模糊、不清楚,也许界定不清,而且最糟糕的是可能看起来无解的任务和挑战——至少短期内是这样。”


一个问题的创造性解决方案通常是从意见分歧中产生的。


另外一种分享聚光灯的方法,是随着项目的进行,持续向项目相关人员提供最新项目进展信息,这将会展示你的能力。随时告知关键人物项目动态,这能够帮助你减少他们看不到你也想不到你时的认知差异。因此在你以安静稳定的方式带领团队的同时,别忘了也要表现自己。


这些问题关乎你的上司的目标、公司的目标,以及他认为你在整个大局中的位置。记住,你的工作是协助上司实现他的目标,而上司的工作则是协助他的上司实现目标。你应该首先通过调查尽可能多地了解关于公司、业务以及竞争格局的背景信息,这样你才能问出聪明的、开放式的问题。


你们面谈时,一定要请上司对你工作表现的正反两个方面给出反馈意见。问他具体的反馈意见,准备明确的问题。


带着解决方案而不是问题去找你的上司。


要注意的是,你的上司一定得是乐于接受反馈意见的那一种。如果你的经理感觉受到威胁,或者你所在的公司正处于混乱状态,给上司提建议可能就不太安全,甚至可能会毁了你的工作。


过度逼迫自己离开舒适区域会导致对自己薄弱领域的过度强调,这样就更难学会新技能了。

',21),a=[n];function i(c,m){return t(),o("div",null,a)}const l=e(p,[["render",i],["__file","009-introverts-communicate-the-bible.html.vue"]]),d=JSON.parse(`{"path":"/reading/2023/009-introverts-communicate-the-bible.html","title":"内向者沟通圣经","lang":"zh-CN","frontmatter":{"date":"2023-08-29T00:00:00.000Z","description":"内向者沟通圣经 (美)珍妮弗·康维勒 爱默生曾经说过:“去做你最害怕做的事。” 蕾妮·格兰特·威廉姆斯还说:“雄辩是银,沉默是金,停顿是纯铂金。” “完成这场‘最艰难的转换’意味着:第一,你要放弃你熟悉的、喜欢的、以及能给你带来极大成就感和声望的事情。第二,它意味着承担一些你不熟悉、不确定你是否喜欢,而且也许不会(至少一开始)给你带来成就感和声望的事情...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/009-introverts-communicate-the-bible.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"内向者沟通圣经"}],["meta",{"property":"og:description","content":"内向者沟通圣经 (美)珍妮弗·康维勒 爱默生曾经说过:“去做你最害怕做的事。” 蕾妮·格兰特·威廉姆斯还说:“雄辩是银,沉默是金,停顿是纯铂金。” “完成这场‘最艰难的转换’意味着:第一,你要放弃你熟悉的、喜欢的、以及能给你带来极大成就感和声望的事情。第二,它意味着承担一些你不熟悉、不确定你是否喜欢,而且也许不会(至少一开始)给你带来成就感和声望的事情..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-13T08:33:25.000Z"}],["meta",{"property":"article:published_time","content":"2023-08-29T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-13T08:33:25.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"内向者沟通圣经\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-08-29T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-13T08:33:25.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1693280834000,"updatedTime":1718267605000},"readingTime":{"minutes":2.19,"words":656},"filePathRelative":"reading/2023/009-introverts-communicate-the-bible.md","localizedDate":"2023年8月29日","autoDesc":true,"excerpt":"\\n
\\n

(美)珍妮弗·康维勒

\\n
\\n

爱默生曾经说过:“去做你最害怕做的事。”

\\n
\\n

蕾妮·格兰特·威廉姆斯还说:“雄辩是银,沉默是金,停顿是纯铂金。”

\\n
\\n

“完成这场‘最艰难的转换’意味着:第一,你要放弃你熟悉的、喜欢的、以及能给你带来极大成就感和声望的事情。第二,它意味着承担一些你不熟悉、不确定你是否喜欢,而且也许不会(至少一开始)给你带来成就感和声望的事情。第三,它意味着告别确定、明确,甚至‘有正确答案’的任务。第四,它意味着开始面对那些似乎很模糊、不清楚,也许界定不清,而且最糟糕的是可能看起来无解的任务和挑战——至少短期内是这样。”

"}`);export{l as comp,d as data}; +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as o,a as r}from"./app-BSa8cFh0.js";const p={},n=r('

内向者沟通圣经

(美)珍妮弗·康维勒

爱默生曾经说过:“去做你最害怕做的事。”


蕾妮·格兰特·威廉姆斯还说:“雄辩是银,沉默是金,停顿是纯铂金。”


“完成这场‘最艰难的转换’意味着:第一,你要放弃你熟悉的、喜欢的、以及能给你带来极大成就感和声望的事情。第二,它意味着承担一些你不熟悉、不确定你是否喜欢,而且也许不会(至少一开始)给你带来成就感和声望的事情。第三,它意味着告别确定、明确,甚至‘有正确答案’的任务。第四,它意味着开始面对那些似乎很模糊、不清楚,也许界定不清,而且最糟糕的是可能看起来无解的任务和挑战——至少短期内是这样。”


一个问题的创造性解决方案通常是从意见分歧中产生的。


另外一种分享聚光灯的方法,是随着项目的进行,持续向项目相关人员提供最新项目进展信息,这将会展示你的能力。随时告知关键人物项目动态,这能够帮助你减少他们看不到你也想不到你时的认知差异。因此在你以安静稳定的方式带领团队的同时,别忘了也要表现自己。


这些问题关乎你的上司的目标、公司的目标,以及他认为你在整个大局中的位置。记住,你的工作是协助上司实现他的目标,而上司的工作则是协助他的上司实现目标。你应该首先通过调查尽可能多地了解关于公司、业务以及竞争格局的背景信息,这样你才能问出聪明的、开放式的问题。


你们面谈时,一定要请上司对你工作表现的正反两个方面给出反馈意见。问他具体的反馈意见,准备明确的问题。


带着解决方案而不是问题去找你的上司。


要注意的是,你的上司一定得是乐于接受反馈意见的那一种。如果你的经理感觉受到威胁,或者你所在的公司正处于混乱状态,给上司提建议可能就不太安全,甚至可能会毁了你的工作。


过度逼迫自己离开舒适区域会导致对自己薄弱领域的过度强调,这样就更难学会新技能了。

',21),a=[n];function i(c,m){return t(),o("div",null,a)}const l=e(p,[["render",i],["__file","009-introverts-communicate-the-bible.html.vue"]]),d=JSON.parse(`{"path":"/reading/2023/009-introverts-communicate-the-bible.html","title":"内向者沟通圣经","lang":"zh-CN","frontmatter":{"date":"2023-08-29T00:00:00.000Z","description":"内向者沟通圣经 (美)珍妮弗·康维勒 爱默生曾经说过:“去做你最害怕做的事。” 蕾妮·格兰特·威廉姆斯还说:“雄辩是银,沉默是金,停顿是纯铂金。” “完成这场‘最艰难的转换’意味着:第一,你要放弃你熟悉的、喜欢的、以及能给你带来极大成就感和声望的事情。第二,它意味着承担一些你不熟悉、不确定你是否喜欢,而且也许不会(至少一开始)给你带来成就感和声望的事情...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/009-introverts-communicate-the-bible.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"内向者沟通圣经"}],["meta",{"property":"og:description","content":"内向者沟通圣经 (美)珍妮弗·康维勒 爱默生曾经说过:“去做你最害怕做的事。” 蕾妮·格兰特·威廉姆斯还说:“雄辩是银,沉默是金,停顿是纯铂金。” “完成这场‘最艰难的转换’意味着:第一,你要放弃你熟悉的、喜欢的、以及能给你带来极大成就感和声望的事情。第二,它意味着承担一些你不熟悉、不确定你是否喜欢,而且也许不会(至少一开始)给你带来成就感和声望的事情..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-13T08:33:25.000Z"}],["meta",{"property":"article:published_time","content":"2023-08-29T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-13T08:33:25.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"内向者沟通圣经\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-08-29T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-13T08:33:25.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1693280834000,"updatedTime":1718267605000},"readingTime":{"minutes":2.19,"words":656},"filePathRelative":"reading/2023/009-introverts-communicate-the-bible.md","localizedDate":"2023年8月29日","autoDesc":true,"excerpt":"\\n
\\n

(美)珍妮弗·康维勒

\\n
\\n

爱默生曾经说过:“去做你最害怕做的事。”

\\n
\\n

蕾妮·格兰特·威廉姆斯还说:“雄辩是银,沉默是金,停顿是纯铂金。”

\\n
\\n

“完成这场‘最艰难的转换’意味着:第一,你要放弃你熟悉的、喜欢的、以及能给你带来极大成就感和声望的事情。第二,它意味着承担一些你不熟悉、不确定你是否喜欢,而且也许不会(至少一开始)给你带来成就感和声望的事情。第三,它意味着告别确定、明确,甚至‘有正确答案’的任务。第四,它意味着开始面对那些似乎很模糊、不清楚,也许界定不清,而且最糟糕的是可能看起来无解的任务和挑战——至少短期内是这样。”

"}`);export{l as comp,d as data}; diff --git a/assets/010-dev-prod-parity.html-6Dg87FXo.js b/assets/010-dev-prod-parity.html-Hq-Q3YXn.js similarity index 98% rename from assets/010-dev-prod-parity.html-6Dg87FXo.js rename to assets/010-dev-prod-parity.html-Hq-Q3YXn.js index 253edc85f..268b7a545 100644 --- a/assets/010-dev-prod-parity.html-6Dg87FXo.js +++ b/assets/010-dev-prod-parity.html-Hq-Q3YXn.js @@ -1 +1 @@ -import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as e,c as n,a as r}from"./app-BLyK9ZJy.js";const d={},a=r('

开发环境与线上环境等价

核心思想

尽可能保持开发、预发布和线上环境的等价性。

缩小本地与线上差异

传统应用12-Factor 应用
每次部署间隔数周几小时
开发人员 vs 运维人员不同的人相同的人
开发环境 vs 线上环境不同尽量接近
',6),o=[a];function i(p,l){return e(),n("div",null,o)}const s=t(d,[["render",i],["__file","010-dev-prod-parity.html.vue"]]),m=JSON.parse(`{"path":"/dump/software-engineering/twelve-factor/010-dev-prod-parity.html","title":"开发环境与线上环境等价","lang":"zh-CN","frontmatter":{"date":"2024-03-08T00:00:00.000Z","description":"开发环境与线上环境等价 核心思想 尽可能保持开发、预发布和线上环境的等价性。 缩小本地与线上差异 缩小时间差异:开发人员可以几小时,甚至几分钟就部署代码。 缩小人员差异:开发人员不只要编写代码,更应该密切参与部署过程以及代码在线上的表现。 缩小工具差异:尽量保证开发环境以及线上环境的一致性。","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/dump/software-engineering/twelve-factor/010-dev-prod-parity.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"开发环境与线上环境等价"}],["meta",{"property":"og:description","content":"开发环境与线上环境等价 核心思想 尽可能保持开发、预发布和线上环境的等价性。 缩小本地与线上差异 缩小时间差异:开发人员可以几小时,甚至几分钟就部署代码。 缩小人员差异:开发人员不只要编写代码,更应该密切参与部署过程以及代码在线上的表现。 缩小工具差异:尽量保证开发环境以及线上环境的一致性。"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-19T03:23:52.000Z"}],["meta",{"property":"article:published_time","content":"2024-03-08T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-19T03:23:52.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"开发环境与线上环境等价\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2024-03-08T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-19T03:23:52.000Z\\",\\"author\\":[]}"]]},"headers":[{"level":2,"title":"核心思想","slug":"核心思想","link":"#核心思想","children":[]},{"level":2,"title":"缩小本地与线上差异","slug":"缩小本地与线上差异","link":"#缩小本地与线上差异","children":[]}],"git":{"createdTime":1709540171000,"updatedTime":1718767432000},"readingTime":{"minutes":0.62,"words":185},"filePathRelative":"dump/software-engineering/twelve-factor/010-dev-prod-parity.md","localizedDate":"2024年3月8日","autoDesc":true,"excerpt":"\\n

核心思想

\\n

尽可能保持开发、预发布和线上环境的等价性。

\\n

缩小本地与线上差异

\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n
传统应用12-Factor 应用
每次部署间隔数周几小时
开发人员 vs 运维人员不同的人相同的人
开发环境 vs 线上环境不同尽量接近
"}`);export{s as comp,m as data}; +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as e,c as n,a as r}from"./app-BSa8cFh0.js";const d={},a=r('

开发环境与线上环境等价

核心思想

尽可能保持开发、预发布和线上环境的等价性。

缩小本地与线上差异

传统应用12-Factor 应用
每次部署间隔数周几小时
开发人员 vs 运维人员不同的人相同的人
开发环境 vs 线上环境不同尽量接近
',6),o=[a];function i(p,l){return e(),n("div",null,o)}const s=t(d,[["render",i],["__file","010-dev-prod-parity.html.vue"]]),m=JSON.parse(`{"path":"/dump/software-engineering/twelve-factor/010-dev-prod-parity.html","title":"开发环境与线上环境等价","lang":"zh-CN","frontmatter":{"date":"2024-03-08T00:00:00.000Z","description":"开发环境与线上环境等价 核心思想 尽可能保持开发、预发布和线上环境的等价性。 缩小本地与线上差异 缩小时间差异:开发人员可以几小时,甚至几分钟就部署代码。 缩小人员差异:开发人员不只要编写代码,更应该密切参与部署过程以及代码在线上的表现。 缩小工具差异:尽量保证开发环境以及线上环境的一致性。","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/dump/software-engineering/twelve-factor/010-dev-prod-parity.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"开发环境与线上环境等价"}],["meta",{"property":"og:description","content":"开发环境与线上环境等价 核心思想 尽可能保持开发、预发布和线上环境的等价性。 缩小本地与线上差异 缩小时间差异:开发人员可以几小时,甚至几分钟就部署代码。 缩小人员差异:开发人员不只要编写代码,更应该密切参与部署过程以及代码在线上的表现。 缩小工具差异:尽量保证开发环境以及线上环境的一致性。"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-19T03:23:52.000Z"}],["meta",{"property":"article:published_time","content":"2024-03-08T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-19T03:23:52.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"开发环境与线上环境等价\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2024-03-08T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-19T03:23:52.000Z\\",\\"author\\":[]}"]]},"headers":[{"level":2,"title":"核心思想","slug":"核心思想","link":"#核心思想","children":[]},{"level":2,"title":"缩小本地与线上差异","slug":"缩小本地与线上差异","link":"#缩小本地与线上差异","children":[]}],"git":{"createdTime":1709540171000,"updatedTime":1718767432000},"readingTime":{"minutes":0.62,"words":185},"filePathRelative":"dump/software-engineering/twelve-factor/010-dev-prod-parity.md","localizedDate":"2024年3月8日","autoDesc":true,"excerpt":"\\n

核心思想

\\n

尽可能保持开发、预发布和线上环境的等价性。

\\n

缩小本地与线上差异

\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n
传统应用12-Factor 应用
每次部署间隔数周几小时
开发人员 vs 运维人员不同的人相同的人
开发环境 vs 线上环境不同尽量接近
"}`);export{s as comp,m as data}; diff --git "a/assets/010-\345\260\217\347\216\213\345\255\220.html-DpF9cDJi.js" "b/assets/010-\345\260\217\347\216\213\345\255\220.html-CIg6Zfpz.js" similarity index 97% rename from "assets/010-\345\260\217\347\216\213\345\255\220.html-DpF9cDJi.js" rename to "assets/010-\345\260\217\347\216\213\345\255\220.html-CIg6Zfpz.js" index 52d783231..c5822be33 100644 --- "a/assets/010-\345\260\217\347\216\213\345\255\220.html-DpF9cDJi.js" +++ "b/assets/010-\345\260\217\347\216\213\345\255\220.html-CIg6Zfpz.js" @@ -1 +1 @@ -import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o,c as n,b as e}from"./app-BLyK9ZJy.js";const a={},r=e("h1",{id:"《小王子》",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#《小王子》"},[e("span",null,"《小王子》")])],-1),c=e("blockquote",null,[e("p",null,"(法)圣埃克絮佩里")],-1),i=e("p",null,"只有用心才能看见。本质的东西用眼是看不见的。",-1),p=e("hr",null,null,-1),l=e("p",null,"正是你为你的玫瑰花费的时光,才使你的玫瑰变得如此重要。",-1),s=[r,c,i,p,l];function d(m,_){return o(),n("div",null,s)}const g=t(a,[["render",d],["__file","010-小王子.html.vue"]]),f=JSON.parse(`{"path":"/reading/2023/010-%E5%B0%8F%E7%8E%8B%E5%AD%90.html","title":"《小王子》","lang":"zh-CN","frontmatter":{"date":"2023-09-01T00:00:00.000Z","description":"《小王子》 (法)圣埃克絮佩里 只有用心才能看见。本质的东西用眼是看不见的。 正是你为你的玫瑰花费的时光,才使你的玫瑰变得如此重要。","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/010-%E5%B0%8F%E7%8E%8B%E5%AD%90.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"《小王子》"}],["meta",{"property":"og:description","content":"《小王子》 (法)圣埃克絮佩里 只有用心才能看见。本质的东西用眼是看不见的。 正是你为你的玫瑰花费的时光,才使你的玫瑰变得如此重要。"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-13T08:33:25.000Z"}],["meta",{"property":"article:published_time","content":"2023-09-01T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-13T08:33:25.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"《小王子》\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-09-01T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-13T08:33:25.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1693578799000,"updatedTime":1718267605000},"readingTime":{"minutes":0.2,"words":59},"filePathRelative":"reading/2023/010-小王子.md","localizedDate":"2023年9月1日","autoDesc":true,"excerpt":"\\n
\\n

(法)圣埃克絮佩里

\\n
\\n

只有用心才能看见。本质的东西用眼是看不见的。

\\n
\\n

正是你为你的玫瑰花费的时光,才使你的玫瑰变得如此重要。

\\n"}`);export{g as comp,f as data}; +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o,c as n,b as e}from"./app-BSa8cFh0.js";const a={},r=e("h1",{id:"《小王子》",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#《小王子》"},[e("span",null,"《小王子》")])],-1),c=e("blockquote",null,[e("p",null,"(法)圣埃克絮佩里")],-1),i=e("p",null,"只有用心才能看见。本质的东西用眼是看不见的。",-1),p=e("hr",null,null,-1),l=e("p",null,"正是你为你的玫瑰花费的时光,才使你的玫瑰变得如此重要。",-1),s=[r,c,i,p,l];function d(m,_){return o(),n("div",null,s)}const g=t(a,[["render",d],["__file","010-小王子.html.vue"]]),f=JSON.parse(`{"path":"/reading/2023/010-%E5%B0%8F%E7%8E%8B%E5%AD%90.html","title":"《小王子》","lang":"zh-CN","frontmatter":{"date":"2023-09-01T00:00:00.000Z","description":"《小王子》 (法)圣埃克絮佩里 只有用心才能看见。本质的东西用眼是看不见的。 正是你为你的玫瑰花费的时光,才使你的玫瑰变得如此重要。","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/010-%E5%B0%8F%E7%8E%8B%E5%AD%90.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"《小王子》"}],["meta",{"property":"og:description","content":"《小王子》 (法)圣埃克絮佩里 只有用心才能看见。本质的东西用眼是看不见的。 正是你为你的玫瑰花费的时光,才使你的玫瑰变得如此重要。"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-13T08:33:25.000Z"}],["meta",{"property":"article:published_time","content":"2023-09-01T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-13T08:33:25.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"《小王子》\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-09-01T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-13T08:33:25.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1693578799000,"updatedTime":1718267605000},"readingTime":{"minutes":0.2,"words":59},"filePathRelative":"reading/2023/010-小王子.md","localizedDate":"2023年9月1日","autoDesc":true,"excerpt":"\\n
\\n

(法)圣埃克絮佩里

\\n
\\n

只有用心才能看见。本质的东西用眼是看不见的。

\\n
\\n

正是你为你的玫瑰花费的时光,才使你的玫瑰变得如此重要。

\\n"}`);export{g as comp,f as data}; diff --git a/assets/011-logs.html-DF3YswRh.js b/assets/011-logs.html-DMqKoo1n.js similarity index 98% rename from assets/011-logs.html-DF3YswRh.js rename to assets/011-logs.html-DMqKoo1n.js index 8321b35fb..287ad000c 100644 --- a/assets/011-logs.html-DF3YswRh.js +++ b/assets/011-logs.html-DMqKoo1n.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as a,a as o}from"./app-BLyK9ZJy.js";const n={},r=o('

日志

核心思想

把日志当作事件流。

应用的日志管理

12-Factor APP 不应该试图自己管理日志的输出流,不应写或维护日志文件,每一个进程都会直接提供标准输出事件流。

在开发环境中,可以通过实时终端查看应用活动;在预发布或线上环境中,每个进程的输出流由运行环境截获,并发送给一个最终处理程序,用于查看或是长期存档。

',6),i=[r];function p(c,s){return t(),a("div",null,i)}const h=e(n,[["render",p],["__file","011-logs.html.vue"]]),m=JSON.parse(`{"path":"/dump/software-engineering/twelve-factor/011-logs.html","title":"日志","lang":"zh-CN","frontmatter":{"date":"2024-03-08T00:00:00.000Z","description":"日志 核心思想 把日志当作事件流。 应用的日志管理 12-Factor APP 不应该试图自己管理日志的输出流,不应写或维护日志文件,每一个进程都会直接提供标准输出事件流。 在开发环境中,可以通过实时终端查看应用活动;在预发布或线上环境中,每个进程的输出流由运行环境截获,并发送给一个最终处理程序,用于查看或是长期存档。","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/dump/software-engineering/twelve-factor/011-logs.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"日志"}],["meta",{"property":"og:description","content":"日志 核心思想 把日志当作事件流。 应用的日志管理 12-Factor APP 不应该试图自己管理日志的输出流,不应写或维护日志文件,每一个进程都会直接提供标准输出事件流。 在开发环境中,可以通过实时终端查看应用活动;在预发布或线上环境中,每个进程的输出流由运行环境截获,并发送给一个最终处理程序,用于查看或是长期存档。"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-19T03:23:52.000Z"}],["meta",{"property":"article:published_time","content":"2024-03-08T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-19T03:23:52.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"日志\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2024-03-08T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-19T03:23:52.000Z\\",\\"author\\":[]}"]]},"headers":[{"level":2,"title":"核心思想","slug":"核心思想","link":"#核心思想","children":[]},{"level":2,"title":"应用的日志管理","slug":"应用的日志管理","link":"#应用的日志管理","children":[]}],"git":{"createdTime":1709540171000,"updatedTime":1718767432000},"readingTime":{"minutes":0.46,"words":138},"filePathRelative":"dump/software-engineering/twelve-factor/011-logs.md","localizedDate":"2024年3月8日","autoDesc":true,"excerpt":"\\n

核心思想

\\n

把日志当作事件流。

\\n

应用的日志管理

\\n

12-Factor APP 不应该试图自己管理日志的输出流,不应写或维护日志文件,每一个进程都会直接提供标准输出事件流。

\\n

在开发环境中,可以通过实时终端查看应用活动;在预发布或线上环境中,每个进程的输出流由运行环境截获,并发送给一个最终处理程序,用于查看或是长期存档。

\\n"}`);export{h as comp,m as data}; +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as a,a as o}from"./app-BSa8cFh0.js";const n={},r=o('

日志

核心思想

把日志当作事件流。

应用的日志管理

12-Factor APP 不应该试图自己管理日志的输出流,不应写或维护日志文件,每一个进程都会直接提供标准输出事件流。

在开发环境中,可以通过实时终端查看应用活动;在预发布或线上环境中,每个进程的输出流由运行环境截获,并发送给一个最终处理程序,用于查看或是长期存档。

',6),i=[r];function p(c,s){return t(),a("div",null,i)}const h=e(n,[["render",p],["__file","011-logs.html.vue"]]),m=JSON.parse(`{"path":"/dump/software-engineering/twelve-factor/011-logs.html","title":"日志","lang":"zh-CN","frontmatter":{"date":"2024-03-08T00:00:00.000Z","description":"日志 核心思想 把日志当作事件流。 应用的日志管理 12-Factor APP 不应该试图自己管理日志的输出流,不应写或维护日志文件,每一个进程都会直接提供标准输出事件流。 在开发环境中,可以通过实时终端查看应用活动;在预发布或线上环境中,每个进程的输出流由运行环境截获,并发送给一个最终处理程序,用于查看或是长期存档。","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/dump/software-engineering/twelve-factor/011-logs.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"日志"}],["meta",{"property":"og:description","content":"日志 核心思想 把日志当作事件流。 应用的日志管理 12-Factor APP 不应该试图自己管理日志的输出流,不应写或维护日志文件,每一个进程都会直接提供标准输出事件流。 在开发环境中,可以通过实时终端查看应用活动;在预发布或线上环境中,每个进程的输出流由运行环境截获,并发送给一个最终处理程序,用于查看或是长期存档。"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-19T03:23:52.000Z"}],["meta",{"property":"article:published_time","content":"2024-03-08T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-19T03:23:52.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"日志\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2024-03-08T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-19T03:23:52.000Z\\",\\"author\\":[]}"]]},"headers":[{"level":2,"title":"核心思想","slug":"核心思想","link":"#核心思想","children":[]},{"level":2,"title":"应用的日志管理","slug":"应用的日志管理","link":"#应用的日志管理","children":[]}],"git":{"createdTime":1709540171000,"updatedTime":1718767432000},"readingTime":{"minutes":0.46,"words":138},"filePathRelative":"dump/software-engineering/twelve-factor/011-logs.md","localizedDate":"2024年3月8日","autoDesc":true,"excerpt":"\\n

核心思想

\\n

把日志当作事件流。

\\n

应用的日志管理

\\n

12-Factor APP 不应该试图自己管理日志的输出流,不应写或维护日志文件,每一个进程都会直接提供标准输出事件流。

\\n

在开发环境中,可以通过实时终端查看应用活动;在预发布或线上环境中,每个进程的输出流由运行环境截获,并发送给一个最终处理程序,用于查看或是长期存档。

\\n"}`);export{h as comp,m as data}; diff --git a/assets/011-rockefeller-letters.html-xT3XBJEQ.js b/assets/011-rockefeller-letters.html-Djo_xIIJ.js similarity index 99% rename from assets/011-rockefeller-letters.html-xT3XBJEQ.js rename to assets/011-rockefeller-letters.html-Djo_xIIJ.js index eb2389b9c..d780499d5 100644 --- a/assets/011-rockefeller-letters.html-xT3XBJEQ.js +++ b/assets/011-rockefeller-letters.html-Djo_xIIJ.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as r,a as p}from"./app-BLyK9ZJy.js";const o={},a=p('

洛克菲勒家书

(美)约翰·D·洛克菲勒

读书使人富有;交谈使人机敏;写作使人沉静。


如果你是个守财奴,你将不会快乐,因为贪财的人不能承受损失。金钱总是来来去去,这是它作为交换基础的特性。守财奴却无法容忍钱财的流失;而那些慷慨的人,即使当他们贫穷时,内心也是富裕的,因为他们看到了钱财散去的有益的一面。他们的慷慨常常会点燃与他人分享的火花,钱财的流失成了一种使大家都能从中受益的共同的礼物。


“要保持谨慎”,不要产品一有任何改进就立刻推向市场,可以将它们的一部分暂时保留,等待时机。简单地说,就是让你的对手先亮出底牌,当他认为自己已经占了上风的时候,你挑选出最好的一张牌—充满革新精神、设计得近乎完美足以使对手退缩的产品。


创新的真正意义在于能够被有效地转化到价值链中并为公司带来价值。而公司追求创新的本质,在于能通过创新使公司避开竞争,占有更大的市场份额。


决定一个合作伙伴是否适合我们,要考虑几个重要的因素。如果合作伙伴中的成员大致都在做同样的事,那么,不可避免地会有这样的情况出现,其中一个人比另外一个人更辛苦也更投入。那么,更辛苦也更投入的那个会憎恨自己老拉着另一个人前进,同样地,被拉着走的那一方也会憎恨另一个人的催促,如果是这样的话,他们就算不上是最佳拍档。


比较理想的模式是,每个伙伴最好可以提供不同的专业技术和贡献。比如:一个擅长细节的计划,另一个擅长促销和公开演讲;一个擅长推销,另一个擅长内部机制的管理和质量监督。一对好的拍档就好比一桩天作之合的姻缘—必须小心挑选。


几乎在所有的商业范围内,至少需要以下三种人才—采购员、销售员以及熟悉财务的人员。当这三种人互相协调,并进行合作后,他们将通过合作的方式,使他们自己获得个人所无法拥有的强大力量。


许多人最容易犯的错误就是他们常常在扣除所得税之前的工资总额面前迷糊,要想避免这一错误,那么你就应该全部忘掉税前的工资,而把意识集中于税后的净收入。把按月开支的必要经费从所剩的月收入中减除,剩下的部分才是可以自由支配的金钱。


优秀的人从没有借口。一个男子汉在失败时不是去找借口,而是勇敢地承担责任,努力找到完成任务的方法。


你可以思考了又思考,权衡了再权衡,但你很少能精确地预测到你所作出的任何决定的结局:发生的一切通常都是不可预料的。当你从事一项伟大而艰巨的工作时,有些事情看起来几乎是不可能的。但如果你每次干一点,每天干一点,突然就发现这项工作已经完成了。

那些成功者,那些冒极大风险作出决定而又持之以恒的人是怎么干的呢?最有说服力的是他们向自己提出的问题:可能发生的最坏的事情是什么?


只说不做的人就像是长满荒草的花园。


一般情况下,提拔员工最好的方法是—当你相信他们具备必要的素质并且觉得他们有能力胜任时—把他们带到深水区,推进水里,任他们自己努力,或是沉入水底,或是游上岸,他们不会失败的。


人生有两件事可当做目标,首先是得到你要的东西,然后分享它,只有最明智的人才能做到第二点。


真正的财富绝不仅仅是拥有金钱,它还包括健康、幸福、充裕、富庶、丰富、开心、学习、知道自己要什么、机会、享受、平衡,以及分享。

',30),n=[a];function c(i,l){return t(),r("div",null,n)}const d=e(o,[["render",c],["__file","011-rockefeller-letters.html.vue"]]),m=JSON.parse(`{"path":"/reading/2023/011-rockefeller-letters.html","title":"洛克菲勒家书","lang":"zh-CN","frontmatter":{"date":"2023-09-12T00:00:00.000Z","description":"洛克菲勒家书 (美)约翰·D·洛克菲勒 读书使人富有;交谈使人机敏;写作使人沉静。 如果你是个守财奴,你将不会快乐,因为贪财的人不能承受损失。金钱总是来来去去,这是它作为交换基础的特性。守财奴却无法容忍钱财的流失;而那些慷慨的人,即使当他们贫穷时,内心也是富裕的,因为他们看到了钱财散去的有益的一面。他们的慷慨常常会点燃与他人分享的火花,钱财的流失成了一...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/011-rockefeller-letters.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"洛克菲勒家书"}],["meta",{"property":"og:description","content":"洛克菲勒家书 (美)约翰·D·洛克菲勒 读书使人富有;交谈使人机敏;写作使人沉静。 如果你是个守财奴,你将不会快乐,因为贪财的人不能承受损失。金钱总是来来去去,这是它作为交换基础的特性。守财奴却无法容忍钱财的流失;而那些慷慨的人,即使当他们贫穷时,内心也是富裕的,因为他们看到了钱财散去的有益的一面。他们的慷慨常常会点燃与他人分享的火花,钱财的流失成了一..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-13T08:33:25.000Z"}],["meta",{"property":"article:published_time","content":"2023-09-12T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-13T08:33:25.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"洛克菲勒家书\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-09-12T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-13T08:33:25.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1694529969000,"updatedTime":1718267605000},"readingTime":{"minutes":3.88,"words":1163},"filePathRelative":"reading/2023/011-rockefeller-letters.md","localizedDate":"2023年9月12日","autoDesc":true,"excerpt":"\\n
\\n

(美)约翰·D·洛克菲勒

\\n
\\n

读书使人富有;交谈使人机敏;写作使人沉静。

\\n
\\n

如果你是个守财奴,你将不会快乐,因为贪财的人不能承受损失。金钱总是来来去去,这是它作为交换基础的特性。守财奴却无法容忍钱财的流失;而那些慷慨的人,即使当他们贫穷时,内心也是富裕的,因为他们看到了钱财散去的有益的一面。他们的慷慨常常会点燃与他人分享的火花,钱财的流失成了一种使大家都能从中受益的共同的礼物。

\\n
\\n

“要保持谨慎”,不要产品一有任何改进就立刻推向市场,可以将它们的一部分暂时保留,等待时机。简单地说,就是让你的对手先亮出底牌,当他认为自己已经占了上风的时候,你挑选出最好的一张牌—充满革新精神、设计得近乎完美足以使对手退缩的产品。

"}`);export{d as comp,m as data}; +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as r,a as p}from"./app-BSa8cFh0.js";const o={},a=p('

洛克菲勒家书

(美)约翰·D·洛克菲勒

读书使人富有;交谈使人机敏;写作使人沉静。


如果你是个守财奴,你将不会快乐,因为贪财的人不能承受损失。金钱总是来来去去,这是它作为交换基础的特性。守财奴却无法容忍钱财的流失;而那些慷慨的人,即使当他们贫穷时,内心也是富裕的,因为他们看到了钱财散去的有益的一面。他们的慷慨常常会点燃与他人分享的火花,钱财的流失成了一种使大家都能从中受益的共同的礼物。


“要保持谨慎”,不要产品一有任何改进就立刻推向市场,可以将它们的一部分暂时保留,等待时机。简单地说,就是让你的对手先亮出底牌,当他认为自己已经占了上风的时候,你挑选出最好的一张牌—充满革新精神、设计得近乎完美足以使对手退缩的产品。


创新的真正意义在于能够被有效地转化到价值链中并为公司带来价值。而公司追求创新的本质,在于能通过创新使公司避开竞争,占有更大的市场份额。


决定一个合作伙伴是否适合我们,要考虑几个重要的因素。如果合作伙伴中的成员大致都在做同样的事,那么,不可避免地会有这样的情况出现,其中一个人比另外一个人更辛苦也更投入。那么,更辛苦也更投入的那个会憎恨自己老拉着另一个人前进,同样地,被拉着走的那一方也会憎恨另一个人的催促,如果是这样的话,他们就算不上是最佳拍档。


比较理想的模式是,每个伙伴最好可以提供不同的专业技术和贡献。比如:一个擅长细节的计划,另一个擅长促销和公开演讲;一个擅长推销,另一个擅长内部机制的管理和质量监督。一对好的拍档就好比一桩天作之合的姻缘—必须小心挑选。


几乎在所有的商业范围内,至少需要以下三种人才—采购员、销售员以及熟悉财务的人员。当这三种人互相协调,并进行合作后,他们将通过合作的方式,使他们自己获得个人所无法拥有的强大力量。


许多人最容易犯的错误就是他们常常在扣除所得税之前的工资总额面前迷糊,要想避免这一错误,那么你就应该全部忘掉税前的工资,而把意识集中于税后的净收入。把按月开支的必要经费从所剩的月收入中减除,剩下的部分才是可以自由支配的金钱。


优秀的人从没有借口。一个男子汉在失败时不是去找借口,而是勇敢地承担责任,努力找到完成任务的方法。


你可以思考了又思考,权衡了再权衡,但你很少能精确地预测到你所作出的任何决定的结局:发生的一切通常都是不可预料的。当你从事一项伟大而艰巨的工作时,有些事情看起来几乎是不可能的。但如果你每次干一点,每天干一点,突然就发现这项工作已经完成了。

那些成功者,那些冒极大风险作出决定而又持之以恒的人是怎么干的呢?最有说服力的是他们向自己提出的问题:可能发生的最坏的事情是什么?


只说不做的人就像是长满荒草的花园。


一般情况下,提拔员工最好的方法是—当你相信他们具备必要的素质并且觉得他们有能力胜任时—把他们带到深水区,推进水里,任他们自己努力,或是沉入水底,或是游上岸,他们不会失败的。


人生有两件事可当做目标,首先是得到你要的东西,然后分享它,只有最明智的人才能做到第二点。


真正的财富绝不仅仅是拥有金钱,它还包括健康、幸福、充裕、富庶、丰富、开心、学习、知道自己要什么、机会、享受、平衡,以及分享。

',30),n=[a];function c(i,l){return t(),r("div",null,n)}const d=e(o,[["render",c],["__file","011-rockefeller-letters.html.vue"]]),m=JSON.parse(`{"path":"/reading/2023/011-rockefeller-letters.html","title":"洛克菲勒家书","lang":"zh-CN","frontmatter":{"date":"2023-09-12T00:00:00.000Z","description":"洛克菲勒家书 (美)约翰·D·洛克菲勒 读书使人富有;交谈使人机敏;写作使人沉静。 如果你是个守财奴,你将不会快乐,因为贪财的人不能承受损失。金钱总是来来去去,这是它作为交换基础的特性。守财奴却无法容忍钱财的流失;而那些慷慨的人,即使当他们贫穷时,内心也是富裕的,因为他们看到了钱财散去的有益的一面。他们的慷慨常常会点燃与他人分享的火花,钱财的流失成了一...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/011-rockefeller-letters.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"洛克菲勒家书"}],["meta",{"property":"og:description","content":"洛克菲勒家书 (美)约翰·D·洛克菲勒 读书使人富有;交谈使人机敏;写作使人沉静。 如果你是个守财奴,你将不会快乐,因为贪财的人不能承受损失。金钱总是来来去去,这是它作为交换基础的特性。守财奴却无法容忍钱财的流失;而那些慷慨的人,即使当他们贫穷时,内心也是富裕的,因为他们看到了钱财散去的有益的一面。他们的慷慨常常会点燃与他人分享的火花,钱财的流失成了一..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-13T08:33:25.000Z"}],["meta",{"property":"article:published_time","content":"2023-09-12T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-13T08:33:25.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"洛克菲勒家书\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-09-12T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-13T08:33:25.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1694529969000,"updatedTime":1718267605000},"readingTime":{"minutes":3.88,"words":1163},"filePathRelative":"reading/2023/011-rockefeller-letters.md","localizedDate":"2023年9月12日","autoDesc":true,"excerpt":"\\n
\\n

(美)约翰·D·洛克菲勒

\\n
\\n

读书使人富有;交谈使人机敏;写作使人沉静。

\\n
\\n

如果你是个守财奴,你将不会快乐,因为贪财的人不能承受损失。金钱总是来来去去,这是它作为交换基础的特性。守财奴却无法容忍钱财的流失;而那些慷慨的人,即使当他们贫穷时,内心也是富裕的,因为他们看到了钱财散去的有益的一面。他们的慷慨常常会点燃与他人分享的火花,钱财的流失成了一种使大家都能从中受益的共同的礼物。

\\n
\\n

“要保持谨慎”,不要产品一有任何改进就立刻推向市场,可以将它们的一部分暂时保留,等待时机。简单地说,就是让你的对手先亮出底牌,当他认为自己已经占了上风的时候,你挑选出最好的一张牌—充满革新精神、设计得近乎完美足以使对手退缩的产品。

"}`);export{d as comp,m as data}; diff --git a/assets/012-admin-processes.html-BsVbs3RW.js b/assets/012-admin-processes.html-BF1MZhXi.js similarity index 98% rename from assets/012-admin-processes.html-BsVbs3RW.js rename to assets/012-admin-processes.html-BF1MZhXi.js index 54d270b0c..3e6fe25e3 100644 --- a/assets/012-admin-processes.html-BsVbs3RW.js +++ b/assets/012-admin-processes.html-BF1MZhXi.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as a,a as r}from"./app-BLyK9ZJy.js";const n={},o=r('

管理进程

核心思想

后台管理任务当作一次性进程运行。

后台管理任务

用来管理或维护应用的一次性任务,例如数据的移植(migrate)、数据库检查或一次性脚本。

一次性进程

12-Factor APP 青睐提供REPL shell的语言,这让运行一次性脚本变得简单,无论本地部署还是线上部署,开发人员都可以通过REPL shell来运行一次性脚本。

',7),i=[o];function s(l,p){return t(),a("div",null,i)}const d=e(n,[["render",s],["__file","012-admin-processes.html.vue"]]),m=JSON.parse(`{"path":"/dump/software-engineering/twelve-factor/012-admin-processes.html","title":"管理进程","lang":"zh-CN","frontmatter":{"date":"2024-03-08T00:00:00.000Z","description":"管理进程 核心思想 后台管理任务当作一次性进程运行。 后台管理任务 用来管理或维护应用的一次性任务,例如数据的移植(migrate)、数据库检查或一次性脚本。 一次性进程 12-Factor APP 青睐提供REPL shell的语言,这让运行一次性脚本变得简单,无论本地部署还是线上部署,开发人员都可以通过REPL shell来运行一次性脚本。","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/dump/software-engineering/twelve-factor/012-admin-processes.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"管理进程"}],["meta",{"property":"og:description","content":"管理进程 核心思想 后台管理任务当作一次性进程运行。 后台管理任务 用来管理或维护应用的一次性任务,例如数据的移植(migrate)、数据库检查或一次性脚本。 一次性进程 12-Factor APP 青睐提供REPL shell的语言,这让运行一次性脚本变得简单,无论本地部署还是线上部署,开发人员都可以通过REPL shell来运行一次性脚本。"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-19T03:23:52.000Z"}],["meta",{"property":"article:published_time","content":"2024-03-08T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-19T03:23:52.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"管理进程\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2024-03-08T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-19T03:23:52.000Z\\",\\"author\\":[]}"]]},"headers":[{"level":2,"title":"核心思想","slug":"核心思想","link":"#核心思想","children":[]},{"level":2,"title":"后台管理任务","slug":"后台管理任务","link":"#后台管理任务","children":[]},{"level":2,"title":"一次性进程","slug":"一次性进程","link":"#一次性进程","children":[]}],"git":{"createdTime":1709540171000,"updatedTime":1718767432000},"readingTime":{"minutes":0.43,"words":128},"filePathRelative":"dump/software-engineering/twelve-factor/012-admin-processes.md","localizedDate":"2024年3月8日","autoDesc":true,"excerpt":"\\n

核心思想

\\n

后台管理任务当作一次性进程运行。

\\n

后台管理任务

\\n

用来管理或维护应用的一次性任务,例如数据的移植(migrate)、数据库检查或一次性脚本。

\\n

一次性进程

\\n

12-Factor APP 青睐提供REPL shell的语言,这让运行一次性脚本变得简单,无论本地部署还是线上部署,开发人员都可以通过REPL shell来运行一次性脚本。

\\n"}`);export{d as comp,m as data}; +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as a,a as r}from"./app-BSa8cFh0.js";const n={},o=r('

管理进程

核心思想

后台管理任务当作一次性进程运行。

后台管理任务

用来管理或维护应用的一次性任务,例如数据的移植(migrate)、数据库检查或一次性脚本。

一次性进程

12-Factor APP 青睐提供REPL shell的语言,这让运行一次性脚本变得简单,无论本地部署还是线上部署,开发人员都可以通过REPL shell来运行一次性脚本。

',7),i=[o];function s(l,p){return t(),a("div",null,i)}const d=e(n,[["render",s],["__file","012-admin-processes.html.vue"]]),m=JSON.parse(`{"path":"/dump/software-engineering/twelve-factor/012-admin-processes.html","title":"管理进程","lang":"zh-CN","frontmatter":{"date":"2024-03-08T00:00:00.000Z","description":"管理进程 核心思想 后台管理任务当作一次性进程运行。 后台管理任务 用来管理或维护应用的一次性任务,例如数据的移植(migrate)、数据库检查或一次性脚本。 一次性进程 12-Factor APP 青睐提供REPL shell的语言,这让运行一次性脚本变得简单,无论本地部署还是线上部署,开发人员都可以通过REPL shell来运行一次性脚本。","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/dump/software-engineering/twelve-factor/012-admin-processes.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"管理进程"}],["meta",{"property":"og:description","content":"管理进程 核心思想 后台管理任务当作一次性进程运行。 后台管理任务 用来管理或维护应用的一次性任务,例如数据的移植(migrate)、数据库检查或一次性脚本。 一次性进程 12-Factor APP 青睐提供REPL shell的语言,这让运行一次性脚本变得简单,无论本地部署还是线上部署,开发人员都可以通过REPL shell来运行一次性脚本。"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-19T03:23:52.000Z"}],["meta",{"property":"article:published_time","content":"2024-03-08T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-19T03:23:52.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"管理进程\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2024-03-08T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-19T03:23:52.000Z\\",\\"author\\":[]}"]]},"headers":[{"level":2,"title":"核心思想","slug":"核心思想","link":"#核心思想","children":[]},{"level":2,"title":"后台管理任务","slug":"后台管理任务","link":"#后台管理任务","children":[]},{"level":2,"title":"一次性进程","slug":"一次性进程","link":"#一次性进程","children":[]}],"git":{"createdTime":1709540171000,"updatedTime":1718767432000},"readingTime":{"minutes":0.43,"words":128},"filePathRelative":"dump/software-engineering/twelve-factor/012-admin-processes.md","localizedDate":"2024年3月8日","autoDesc":true,"excerpt":"\\n

核心思想

\\n

后台管理任务当作一次性进程运行。

\\n

后台管理任务

\\n

用来管理或维护应用的一次性任务,例如数据的移植(migrate)、数据库检查或一次性脚本。

\\n

一次性进程

\\n

12-Factor APP 青睐提供REPL shell的语言,这让运行一次性脚本变得简单,无论本地部署还是线上部署,开发人员都可以通过REPL shell来运行一次性脚本。

\\n"}`);export{d as comp,m as data}; diff --git a/assets/012-autobiography-of-franklin.html-D2HqNmSa.js b/assets/012-autobiography-of-franklin.html-BpfRRZKr.js similarity index 99% rename from assets/012-autobiography-of-franklin.html-D2HqNmSa.js rename to assets/012-autobiography-of-franklin.html-BpfRRZKr.js index f89d5aa98..e5b3170ea 100644 --- a/assets/012-autobiography-of-franklin.html-D2HqNmSa.js +++ b/assets/012-autobiography-of-franklin.html-BpfRRZKr.js @@ -1 +1 @@ -import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as e,c as o,a}from"./app-BLyK9ZJy.js";const r={},p=a('

富兰克林自传

(美)本杰明·富兰克林

由于交谈的主要目的是提供信息或者获取信息,使人心悦或使人信服,所以我希望善意明达之人不要以武断自负的方式说话,而使行善的力量减弱,原因是用这种方式往往使人反感,容易造成对立,使我们专靠语言达到的这些目的——即提供或获取信息或者提供或获取快乐——一一泡汤:因为如果你要提供信息,在你提出自己的见解时,一种武断教条的态度可能招致反驳,也阻碍了坦诚的关注。要是你希望从别人的知识中获取信息和改进,同时又坚决用目前的观点来表达自己,那么谦虚明达之士由于不爱争辩,也许就听之任之,让你坚持错误,不思悔改好了;如果采取这种态度,你就很难指望让听你讲话的人心悦,诚服,达成你所期望的共识。


跟自己必须朝夕相处的人交恶是愚蠢透顶的。


我在拉赞助的过程中遇到的反对和勉强使我很快感觉到:提出任何一项也许会被人认为能使提倡者的声誉高出自己的四邻一丁点儿的有用的计划,而又需要四邻帮助来完成这一计划时,如果此人摆出一副该计划发起人的面孔,那就太不识时务了。因此我尽量把自己放在不显眼的地方,声称那是几个朋友的计划,是他们要求我跑跑龙套,把它提交给他们认为爱读书的人的。这样一来,我的事情就进展得顺利多了。而且以后遇到这样的情况我还是如此办理,由于屡屡获得成功,我就可以放心地将它推荐出去了。眼下牺牲一点虚荣,往后会得到厚厚的回报。如果一时难以确定是谁的功劳,那么某个比你还要虚荣的人就会觉得理直气壮,便当仁不让,到那时候,连嫉妒也愿意还你一个公道,拔掉这些冒领的羽毛,还给它们真正的主人。


一个能力尚可的人可以在人类中促成大变革,成就大事业,只要他首先制订一个好计划,然后剪除一切娱乐活动或其他可以让他分心旁骛的事务,把推行这一计划当作他唯一的研究和事业。


一个人无论才能有多高,如果缺德,就不配称为一个有见识的人。

美德只有修养到了习惯成自然的程度,彻底摆脱了与之对立的倾向,才能算牢固可靠。


中世纪一句拉丁名言:vox audita perit, litera script amanet(说的话无影无踪,写的字永世长存。)


合伙经营往往产生口角,闹得不欢而散,但我在这一方面十分愉快,我的合伙生意从进展到结束都一团和气;我想这主要归功于采取了预防措施,我们在条款中把一切都规定得明明白白:彼此该做什么,想得到什么,没有任何可以争执的余地,因此我特意向所有经营合伙生意的人推荐这种预防措施,因为在签订合同时无论合伙双方多么互敬互信,但在生意的打理和负担上总会有不够平等的想法,于是难免产生一些小小的猜忌和厌恶,这就往往造成了友谊破裂,关系断绝,也许还少不了对簿公堂,还造成其他种种不愉快的后果。


我很看重这么一条原则,那就是,由于我们享受着别人发明带来的巨大好处,我们有机会用自己的任何发明为别人服务也应当高兴,而且应当无偿地、慷慨地去做。


在建议的序言中,我声明公布这些建议不是我个人的行为,而是几位富有公益精神的绅士的举动;按照我的惯例,尽量避免把自己表现成任何公益计划的首创人。

',20),n=[p];function i(c,l){return e(),o("div",null,n)}const s=t(r,[["render",i],["__file","012-autobiography-of-franklin.html.vue"]]),m=JSON.parse(`{"path":"/reading/2023/012-autobiography-of-franklin.html","title":"富兰克林自传","lang":"zh-CN","frontmatter":{"date":"2023-09-28T00:00:00.000Z","description":"富兰克林自传 (美)本杰明·富兰克林 由于交谈的主要目的是提供信息或者获取信息,使人心悦或使人信服,所以我希望善意明达之人不要以武断自负的方式说话,而使行善的力量减弱,原因是用这种方式往往使人反感,容易造成对立,使我们专靠语言达到的这些目的——即提供或获取信息或者提供或获取快乐——一一泡汤:因为如果你要提供信息,在你提出自己的见解时,一种武断教条的态度...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/012-autobiography-of-franklin.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"富兰克林自传"}],["meta",{"property":"og:description","content":"富兰克林自传 (美)本杰明·富兰克林 由于交谈的主要目的是提供信息或者获取信息,使人心悦或使人信服,所以我希望善意明达之人不要以武断自负的方式说话,而使行善的力量减弱,原因是用这种方式往往使人反感,容易造成对立,使我们专靠语言达到的这些目的——即提供或获取信息或者提供或获取快乐——一一泡汤:因为如果你要提供信息,在你提出自己的见解时,一种武断教条的态度..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-13T08:33:25.000Z"}],["meta",{"property":"article:published_time","content":"2023-09-28T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-13T08:33:25.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"富兰克林自传\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-09-28T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-13T08:33:25.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1695885234000,"updatedTime":1718267605000},"readingTime":{"minutes":3.72,"words":1117},"filePathRelative":"reading/2023/012-autobiography-of-franklin.md","localizedDate":"2023年9月28日","autoDesc":true,"excerpt":"\\n
\\n

(美)本杰明·富兰克林

\\n
\\n

由于交谈的主要目的是提供信息或者获取信息,使人心悦或使人信服,所以我希望善意明达之人不要以武断自负的方式说话,而使行善的力量减弱,原因是用这种方式往往使人反感,容易造成对立,使我们专靠语言达到的这些目的——即提供或获取信息或者提供或获取快乐——一一泡汤:因为如果你要提供信息,在你提出自己的见解时,一种武断教条的态度可能招致反驳,也阻碍了坦诚的关注。要是你希望从别人的知识中获取信息和改进,同时又坚决用目前的观点来表达自己,那么谦虚明达之士由于不爱争辩,也许就听之任之,让你坚持错误,不思悔改好了;如果采取这种态度,你就很难指望让听你讲话的人心悦,诚服,达成你所期望的共识。

"}`);export{s as comp,m as data}; +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as e,c as o,a}from"./app-BSa8cFh0.js";const r={},p=a('

富兰克林自传

(美)本杰明·富兰克林

由于交谈的主要目的是提供信息或者获取信息,使人心悦或使人信服,所以我希望善意明达之人不要以武断自负的方式说话,而使行善的力量减弱,原因是用这种方式往往使人反感,容易造成对立,使我们专靠语言达到的这些目的——即提供或获取信息或者提供或获取快乐——一一泡汤:因为如果你要提供信息,在你提出自己的见解时,一种武断教条的态度可能招致反驳,也阻碍了坦诚的关注。要是你希望从别人的知识中获取信息和改进,同时又坚决用目前的观点来表达自己,那么谦虚明达之士由于不爱争辩,也许就听之任之,让你坚持错误,不思悔改好了;如果采取这种态度,你就很难指望让听你讲话的人心悦,诚服,达成你所期望的共识。


跟自己必须朝夕相处的人交恶是愚蠢透顶的。


我在拉赞助的过程中遇到的反对和勉强使我很快感觉到:提出任何一项也许会被人认为能使提倡者的声誉高出自己的四邻一丁点儿的有用的计划,而又需要四邻帮助来完成这一计划时,如果此人摆出一副该计划发起人的面孔,那就太不识时务了。因此我尽量把自己放在不显眼的地方,声称那是几个朋友的计划,是他们要求我跑跑龙套,把它提交给他们认为爱读书的人的。这样一来,我的事情就进展得顺利多了。而且以后遇到这样的情况我还是如此办理,由于屡屡获得成功,我就可以放心地将它推荐出去了。眼下牺牲一点虚荣,往后会得到厚厚的回报。如果一时难以确定是谁的功劳,那么某个比你还要虚荣的人就会觉得理直气壮,便当仁不让,到那时候,连嫉妒也愿意还你一个公道,拔掉这些冒领的羽毛,还给它们真正的主人。


一个能力尚可的人可以在人类中促成大变革,成就大事业,只要他首先制订一个好计划,然后剪除一切娱乐活动或其他可以让他分心旁骛的事务,把推行这一计划当作他唯一的研究和事业。


一个人无论才能有多高,如果缺德,就不配称为一个有见识的人。

美德只有修养到了习惯成自然的程度,彻底摆脱了与之对立的倾向,才能算牢固可靠。


中世纪一句拉丁名言:vox audita perit, litera script amanet(说的话无影无踪,写的字永世长存。)


合伙经营往往产生口角,闹得不欢而散,但我在这一方面十分愉快,我的合伙生意从进展到结束都一团和气;我想这主要归功于采取了预防措施,我们在条款中把一切都规定得明明白白:彼此该做什么,想得到什么,没有任何可以争执的余地,因此我特意向所有经营合伙生意的人推荐这种预防措施,因为在签订合同时无论合伙双方多么互敬互信,但在生意的打理和负担上总会有不够平等的想法,于是难免产生一些小小的猜忌和厌恶,这就往往造成了友谊破裂,关系断绝,也许还少不了对簿公堂,还造成其他种种不愉快的后果。


我很看重这么一条原则,那就是,由于我们享受着别人发明带来的巨大好处,我们有机会用自己的任何发明为别人服务也应当高兴,而且应当无偿地、慷慨地去做。


在建议的序言中,我声明公布这些建议不是我个人的行为,而是几位富有公益精神的绅士的举动;按照我的惯例,尽量避免把自己表现成任何公益计划的首创人。

',20),n=[p];function i(c,l){return e(),o("div",null,n)}const s=t(r,[["render",i],["__file","012-autobiography-of-franklin.html.vue"]]),m=JSON.parse(`{"path":"/reading/2023/012-autobiography-of-franklin.html","title":"富兰克林自传","lang":"zh-CN","frontmatter":{"date":"2023-09-28T00:00:00.000Z","description":"富兰克林自传 (美)本杰明·富兰克林 由于交谈的主要目的是提供信息或者获取信息,使人心悦或使人信服,所以我希望善意明达之人不要以武断自负的方式说话,而使行善的力量减弱,原因是用这种方式往往使人反感,容易造成对立,使我们专靠语言达到的这些目的——即提供或获取信息或者提供或获取快乐——一一泡汤:因为如果你要提供信息,在你提出自己的见解时,一种武断教条的态度...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/012-autobiography-of-franklin.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"富兰克林自传"}],["meta",{"property":"og:description","content":"富兰克林自传 (美)本杰明·富兰克林 由于交谈的主要目的是提供信息或者获取信息,使人心悦或使人信服,所以我希望善意明达之人不要以武断自负的方式说话,而使行善的力量减弱,原因是用这种方式往往使人反感,容易造成对立,使我们专靠语言达到的这些目的——即提供或获取信息或者提供或获取快乐——一一泡汤:因为如果你要提供信息,在你提出自己的见解时,一种武断教条的态度..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-13T08:33:25.000Z"}],["meta",{"property":"article:published_time","content":"2023-09-28T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-13T08:33:25.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"富兰克林自传\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-09-28T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-13T08:33:25.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1695885234000,"updatedTime":1718267605000},"readingTime":{"minutes":3.72,"words":1117},"filePathRelative":"reading/2023/012-autobiography-of-franklin.md","localizedDate":"2023年9月28日","autoDesc":true,"excerpt":"\\n
\\n

(美)本杰明·富兰克林

\\n
\\n

由于交谈的主要目的是提供信息或者获取信息,使人心悦或使人信服,所以我希望善意明达之人不要以武断自负的方式说话,而使行善的力量减弱,原因是用这种方式往往使人反感,容易造成对立,使我们专靠语言达到的这些目的——即提供或获取信息或者提供或获取快乐——一一泡汤:因为如果你要提供信息,在你提出自己的见解时,一种武断教条的态度可能招致反驳,也阻碍了坦诚的关注。要是你希望从别人的知识中获取信息和改进,同时又坚决用目前的观点来表达自己,那么谦虚明达之士由于不爱争辩,也许就听之任之,让你坚持错误,不思悔改好了;如果采取这种态度,你就很难指望让听你讲话的人心悦,诚服,达成你所期望的共识。

"}`);export{s as comp,m as data}; diff --git a/assets/013-secret.html-DrWH3UIQ.js b/assets/013-secret.html-DJJMPjUU.js similarity index 98% rename from assets/013-secret.html-DrWH3UIQ.js rename to assets/013-secret.html-DJJMPjUU.js index 8819281bd..f874a5f3e 100644 --- a/assets/013-secret.html-DrWH3UIQ.js +++ b/assets/013-secret.html-DJJMPjUU.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as o,a as r}from"./app-BLyK9ZJy.js";const p={},a=r('

秘密: 爱、健康与金钱

(澳)朗达·拜恩

积极的思想就是,想想那些你想要的!消极的思想就是,想想那些你不想要的!


生活把一切都展现在你的面前,你可以选择自己想要的、自己喜欢的、自己欣赏的。最妙的一点是,各种各样的人都会出现在你的生命中,你可以选择自己喜欢的、自己欣赏的,拒绝那些你不喜欢的。你并不需要逼自己欣赏那些你不喜欢的人,面对这样的人,你只需要转过身去,不评判,也不关注。


你只能用自己的思想创造你想要的一切,你不能决定别人的人生。你无法代替他们思考,如果你把自己的想法和意见强加在别人身上,你只会为自己吸引来同样的遭遇。把自己的想法强加在别人身上,你就剥夺了别人成为他们想要的自己的自由。并且,这么做的话,你还会吸引来令你觉得无能为力的悲惨境遇。


我们每个人都只能成为自己生活的创造者。我们无法影响别人的人生,除非对方也在要求着同样的东西。


就像澳大利亚健康专家詹姆斯·杜根说的那样:“如果你不喜欢某一样东西,那就拿走它唯一拥有的力量:你的注意力。”


付出的时候,不要期待有收获——为了纯粹的快乐而付出。


你做的每一件事,都应该是为了快乐,不论是在事业上、生意上,还是在你生活的方方面面。你人生的意义就是快乐,没有任何东西比快乐更重要,包括金钱。


人们之所以会渴望得到某种东西,那是因为他们觉得这会给自己带来快乐。不论是健康、金钱、爱情、物质、成就、工作,还是其他任何事物,你之所以想要得到它们,都是因为你想要得到快乐。

',17),n=[a];function c(i,s){return t(),o("div",null,n)}const l=e(p,[["render",c],["__file","013-secret.html.vue"]]),m=JSON.parse(`{"path":"/reading/2023/013-secret.html","title":"秘密: 爱、健康与金钱","lang":"zh-CN","frontmatter":{"date":"2023-10-11T00:00:00.000Z","description":"秘密: 爱、健康与金钱 (澳)朗达·拜恩 积极的思想就是,想想那些你想要的!消极的思想就是,想想那些你不想要的! 生活把一切都展现在你的面前,你可以选择自己想要的、自己喜欢的、自己欣赏的。最妙的一点是,各种各样的人都会出现在你的生命中,你可以选择自己喜欢的、自己欣赏的,拒绝那些你不喜欢的。你并不需要逼自己欣赏那些你不喜欢的人,面对这样的人,你只需要转过...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/013-secret.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"秘密: 爱、健康与金钱"}],["meta",{"property":"og:description","content":"秘密: 爱、健康与金钱 (澳)朗达·拜恩 积极的思想就是,想想那些你想要的!消极的思想就是,想想那些你不想要的! 生活把一切都展现在你的面前,你可以选择自己想要的、自己喜欢的、自己欣赏的。最妙的一点是,各种各样的人都会出现在你的生命中,你可以选择自己喜欢的、自己欣赏的,拒绝那些你不喜欢的。你并不需要逼自己欣赏那些你不喜欢的人,面对这样的人,你只需要转过..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-13T08:33:25.000Z"}],["meta",{"property":"article:published_time","content":"2023-10-11T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-13T08:33:25.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"秘密: 爱、健康与金钱\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-10-11T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-13T08:33:25.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1697551668000,"updatedTime":1718267605000},"readingTime":{"minutes":1.81,"words":542},"filePathRelative":"reading/2023/013-secret.md","localizedDate":"2023年10月11日","autoDesc":true,"excerpt":"\\n
\\n

(澳)朗达·拜恩

\\n
\\n

积极的思想就是,想想那些你想要的!消极的思想就是,想想那些你不想要的!

\\n
\\n

生活把一切都展现在你的面前,你可以选择自己想要的、自己喜欢的、自己欣赏的。最妙的一点是,各种各样的人都会出现在你的生命中,你可以选择自己喜欢的、自己欣赏的,拒绝那些你不喜欢的。你并不需要逼自己欣赏那些你不喜欢的人,面对这样的人,你只需要转过身去,不评判,也不关注。

\\n
\\n

你只能用自己的思想创造你想要的一切,你不能决定别人的人生。你无法代替他们思考,如果你把自己的想法和意见强加在别人身上,你只会为自己吸引来同样的遭遇。把自己的想法强加在别人身上,你就剥夺了别人成为他们想要的自己的自由。并且,这么做的话,你还会吸引来令你觉得无能为力的悲惨境遇。

"}`);export{l as comp,m as data}; +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as o,a as r}from"./app-BSa8cFh0.js";const p={},a=r('

秘密: 爱、健康与金钱

(澳)朗达·拜恩

积极的思想就是,想想那些你想要的!消极的思想就是,想想那些你不想要的!


生活把一切都展现在你的面前,你可以选择自己想要的、自己喜欢的、自己欣赏的。最妙的一点是,各种各样的人都会出现在你的生命中,你可以选择自己喜欢的、自己欣赏的,拒绝那些你不喜欢的。你并不需要逼自己欣赏那些你不喜欢的人,面对这样的人,你只需要转过身去,不评判,也不关注。


你只能用自己的思想创造你想要的一切,你不能决定别人的人生。你无法代替他们思考,如果你把自己的想法和意见强加在别人身上,你只会为自己吸引来同样的遭遇。把自己的想法强加在别人身上,你就剥夺了别人成为他们想要的自己的自由。并且,这么做的话,你还会吸引来令你觉得无能为力的悲惨境遇。


我们每个人都只能成为自己生活的创造者。我们无法影响别人的人生,除非对方也在要求着同样的东西。


就像澳大利亚健康专家詹姆斯·杜根说的那样:“如果你不喜欢某一样东西,那就拿走它唯一拥有的力量:你的注意力。”


付出的时候,不要期待有收获——为了纯粹的快乐而付出。


你做的每一件事,都应该是为了快乐,不论是在事业上、生意上,还是在你生活的方方面面。你人生的意义就是快乐,没有任何东西比快乐更重要,包括金钱。


人们之所以会渴望得到某种东西,那是因为他们觉得这会给自己带来快乐。不论是健康、金钱、爱情、物质、成就、工作,还是其他任何事物,你之所以想要得到它们,都是因为你想要得到快乐。

',17),n=[a];function c(i,s){return t(),o("div",null,n)}const l=e(p,[["render",c],["__file","013-secret.html.vue"]]),m=JSON.parse(`{"path":"/reading/2023/013-secret.html","title":"秘密: 爱、健康与金钱","lang":"zh-CN","frontmatter":{"date":"2023-10-11T00:00:00.000Z","description":"秘密: 爱、健康与金钱 (澳)朗达·拜恩 积极的思想就是,想想那些你想要的!消极的思想就是,想想那些你不想要的! 生活把一切都展现在你的面前,你可以选择自己想要的、自己喜欢的、自己欣赏的。最妙的一点是,各种各样的人都会出现在你的生命中,你可以选择自己喜欢的、自己欣赏的,拒绝那些你不喜欢的。你并不需要逼自己欣赏那些你不喜欢的人,面对这样的人,你只需要转过...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/013-secret.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"秘密: 爱、健康与金钱"}],["meta",{"property":"og:description","content":"秘密: 爱、健康与金钱 (澳)朗达·拜恩 积极的思想就是,想想那些你想要的!消极的思想就是,想想那些你不想要的! 生活把一切都展现在你的面前,你可以选择自己想要的、自己喜欢的、自己欣赏的。最妙的一点是,各种各样的人都会出现在你的生命中,你可以选择自己喜欢的、自己欣赏的,拒绝那些你不喜欢的。你并不需要逼自己欣赏那些你不喜欢的人,面对这样的人,你只需要转过..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-13T08:33:25.000Z"}],["meta",{"property":"article:published_time","content":"2023-10-11T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-13T08:33:25.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"秘密: 爱、健康与金钱\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-10-11T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-13T08:33:25.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1697551668000,"updatedTime":1718267605000},"readingTime":{"minutes":1.81,"words":542},"filePathRelative":"reading/2023/013-secret.md","localizedDate":"2023年10月11日","autoDesc":true,"excerpt":"\\n
\\n

(澳)朗达·拜恩

\\n
\\n

积极的思想就是,想想那些你想要的!消极的思想就是,想想那些你不想要的!

\\n
\\n

生活把一切都展现在你的面前,你可以选择自己想要的、自己喜欢的、自己欣赏的。最妙的一点是,各种各样的人都会出现在你的生命中,你可以选择自己喜欢的、自己欣赏的,拒绝那些你不喜欢的。你并不需要逼自己欣赏那些你不喜欢的人,面对这样的人,你只需要转过身去,不评判,也不关注。

\\n
\\n

你只能用自己的思想创造你想要的一切,你不能决定别人的人生。你无法代替他们思考,如果你把自己的想法和意见强加在别人身上,你只会为自己吸引来同样的遭遇。把自己的想法强加在别人身上,你就剥夺了别人成为他们想要的自己的自由。并且,这么做的话,你还会吸引来令你觉得无能为力的悲惨境遇。

"}`);export{l as comp,m as data}; diff --git a/assets/014-quotations-from-kazuo-inamori.html-DtQ7fJCV.js b/assets/014-quotations-from-kazuo-inamori.html-DK69K60U.js similarity index 98% rename from assets/014-quotations-from-kazuo-inamori.html-DtQ7fJCV.js rename to assets/014-quotations-from-kazuo-inamori.html-DK69K60U.js index 2f6634c7a..48b285c19 100644 --- a/assets/014-quotations-from-kazuo-inamori.html-DtQ7fJCV.js +++ b/assets/014-quotations-from-kazuo-inamori.html-DK69K60U.js @@ -1 +1 @@ -import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as e,c as o,a}from"./app-BLyK9ZJy.js";const r={},n=a('

稻盛和夫语录 100 条

(日)稻盛和夫

心里没有呼唤过的东西,不会自动来到自己身边,现在自己周围发生的所有的现象都不过是自己心灵的反映。


看起来很复杂的经营,说到底,只不过是彻底追求“销售最大化和经费最小化”这样一个简单的原则而已。


我们处在土俵正中时,因为尚有余裕而疏忽大意,到走投无路时才慌张起来。要考虑留有余地,在被逼至危险边缘之前,就使出浑身的力量。这样就可以在事前采取措施,防止陷入穷途末路。

在尚有余裕时不可怠慢、不可自满,始终保持紧张感而全力以赴。养成这种习惯,工作和人生都能稳定进展。


我们真正能用心体会到的快乐,蕴藏在工作之中。对工作漫不经心,而想要从娱乐和爱好中找到快乐,虽可能会有一时的快乐,但绝不会得到真正的快乐。如果不能从占有人生比重最大的工作中获得充实感,那么我们必将感到不足和空虚。


正像物质可以分为自燃型、可燃型、不燃型一样,人也可分为三种类型:自己就能熊熊燃烧的自燃型的人,点火就能燃烧的可燃型的人,点火也无法燃烧的不燃型的人。


把知识血肉化,也就是说渗透到自己的肉体,不管在什么场合都照此迅速行动。换言之,如果正确的思维方式只是停留在“知道”的阶段,而不付诸行动,那和不知道完全一样。如果不将它变成自己的血肉,并且不能在人生的各个关口,不能在每天的工作中切实运用,那么再好的哲学或思维方式也是毫无价值的。

',14),p=[n];function i(c,m){return e(),o("div",null,p)}const l=t(r,[["render",i],["__file","014-quotations-from-kazuo-inamori.html.vue"]]),h=JSON.parse(`{"path":"/reading/2023/014-quotations-from-kazuo-inamori.html","title":"稻盛和夫语录 100 条","lang":"zh-CN","frontmatter":{"date":"2023-10-18T00:00:00.000Z","description":"稻盛和夫语录 100 条 (日)稻盛和夫 心里没有呼唤过的东西,不会自动来到自己身边,现在自己周围发生的所有的现象都不过是自己心灵的反映。 看起来很复杂的经营,说到底,只不过是彻底追求“销售最大化和经费最小化”这样一个简单的原则而已。 我们处在土俵正中时,因为尚有余裕而疏忽大意,到走投无路时才慌张起来。要考虑留有余地,在被逼至危险边缘之前,就使出浑身的...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/014-quotations-from-kazuo-inamori.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"稻盛和夫语录 100 条"}],["meta",{"property":"og:description","content":"稻盛和夫语录 100 条 (日)稻盛和夫 心里没有呼唤过的东西,不会自动来到自己身边,现在自己周围发生的所有的现象都不过是自己心灵的反映。 看起来很复杂的经营,说到底,只不过是彻底追求“销售最大化和经费最小化”这样一个简单的原则而已。 我们处在土俵正中时,因为尚有余裕而疏忽大意,到走投无路时才慌张起来。要考虑留有余地,在被逼至危险边缘之前,就使出浑身的..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-13T08:33:25.000Z"}],["meta",{"property":"article:published_time","content":"2023-10-18T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-13T08:33:25.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"稻盛和夫语录 100 条\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-10-18T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-13T08:33:25.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1697639981000,"updatedTime":1718267605000},"readingTime":{"minutes":1.71,"words":512},"filePathRelative":"reading/2023/014-quotations-from-kazuo-inamori.md","localizedDate":"2023年10月18日","autoDesc":true,"excerpt":"\\n
\\n

(日)稻盛和夫

\\n
\\n

心里没有呼唤过的东西,不会自动来到自己身边,现在自己周围发生的所有的现象都不过是自己心灵的反映。

\\n
\\n

看起来很复杂的经营,说到底,只不过是彻底追求“销售最大化和经费最小化”这样一个简单的原则而已。

\\n
\\n

我们处在土俵正中时,因为尚有余裕而疏忽大意,到走投无路时才慌张起来。要考虑留有余地,在被逼至危险边缘之前,就使出浑身的力量。这样就可以在事前采取措施,防止陷入穷途末路。

\\n

在尚有余裕时不可怠慢、不可自满,始终保持紧张感而全力以赴。养成这种习惯,工作和人生都能稳定进展。

"}`);export{l as comp,h as data}; +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as e,c as o,a}from"./app-BSa8cFh0.js";const r={},n=a('

稻盛和夫语录 100 条

(日)稻盛和夫

心里没有呼唤过的东西,不会自动来到自己身边,现在自己周围发生的所有的现象都不过是自己心灵的反映。


看起来很复杂的经营,说到底,只不过是彻底追求“销售最大化和经费最小化”这样一个简单的原则而已。


我们处在土俵正中时,因为尚有余裕而疏忽大意,到走投无路时才慌张起来。要考虑留有余地,在被逼至危险边缘之前,就使出浑身的力量。这样就可以在事前采取措施,防止陷入穷途末路。

在尚有余裕时不可怠慢、不可自满,始终保持紧张感而全力以赴。养成这种习惯,工作和人生都能稳定进展。


我们真正能用心体会到的快乐,蕴藏在工作之中。对工作漫不经心,而想要从娱乐和爱好中找到快乐,虽可能会有一时的快乐,但绝不会得到真正的快乐。如果不能从占有人生比重最大的工作中获得充实感,那么我们必将感到不足和空虚。


正像物质可以分为自燃型、可燃型、不燃型一样,人也可分为三种类型:自己就能熊熊燃烧的自燃型的人,点火就能燃烧的可燃型的人,点火也无法燃烧的不燃型的人。


把知识血肉化,也就是说渗透到自己的肉体,不管在什么场合都照此迅速行动。换言之,如果正确的思维方式只是停留在“知道”的阶段,而不付诸行动,那和不知道完全一样。如果不将它变成自己的血肉,并且不能在人生的各个关口,不能在每天的工作中切实运用,那么再好的哲学或思维方式也是毫无价值的。

',14),p=[n];function i(c,m){return e(),o("div",null,p)}const l=t(r,[["render",i],["__file","014-quotations-from-kazuo-inamori.html.vue"]]),h=JSON.parse(`{"path":"/reading/2023/014-quotations-from-kazuo-inamori.html","title":"稻盛和夫语录 100 条","lang":"zh-CN","frontmatter":{"date":"2023-10-18T00:00:00.000Z","description":"稻盛和夫语录 100 条 (日)稻盛和夫 心里没有呼唤过的东西,不会自动来到自己身边,现在自己周围发生的所有的现象都不过是自己心灵的反映。 看起来很复杂的经营,说到底,只不过是彻底追求“销售最大化和经费最小化”这样一个简单的原则而已。 我们处在土俵正中时,因为尚有余裕而疏忽大意,到走投无路时才慌张起来。要考虑留有余地,在被逼至危险边缘之前,就使出浑身的...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/014-quotations-from-kazuo-inamori.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"稻盛和夫语录 100 条"}],["meta",{"property":"og:description","content":"稻盛和夫语录 100 条 (日)稻盛和夫 心里没有呼唤过的东西,不会自动来到自己身边,现在自己周围发生的所有的现象都不过是自己心灵的反映。 看起来很复杂的经营,说到底,只不过是彻底追求“销售最大化和经费最小化”这样一个简单的原则而已。 我们处在土俵正中时,因为尚有余裕而疏忽大意,到走投无路时才慌张起来。要考虑留有余地,在被逼至危险边缘之前,就使出浑身的..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-13T08:33:25.000Z"}],["meta",{"property":"article:published_time","content":"2023-10-18T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-13T08:33:25.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"稻盛和夫语录 100 条\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-10-18T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-13T08:33:25.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1697639981000,"updatedTime":1718267605000},"readingTime":{"minutes":1.71,"words":512},"filePathRelative":"reading/2023/014-quotations-from-kazuo-inamori.md","localizedDate":"2023年10月18日","autoDesc":true,"excerpt":"\\n
\\n

(日)稻盛和夫

\\n
\\n

心里没有呼唤过的东西,不会自动来到自己身边,现在自己周围发生的所有的现象都不过是自己心灵的反映。

\\n
\\n

看起来很复杂的经营,说到底,只不过是彻底追求“销售最大化和经费最小化”这样一个简单的原则而已。

\\n
\\n

我们处在土俵正中时,因为尚有余裕而疏忽大意,到走投无路时才慌张起来。要考虑留有余地,在被逼至危险边缘之前,就使出浑身的力量。这样就可以在事前采取措施,防止陷入穷途末路。

\\n

在尚有余裕时不可怠慢、不可自满,始终保持紧张感而全力以赴。养成这种习惯,工作和人生都能稳定进展。

"}`);export{l as comp,h as data}; diff --git a/assets/015-entertain-oneself-to-death.html-25tPWoFC.js b/assets/015-entertain-oneself-to-death.html-B5H-dasr.js similarity index 99% rename from assets/015-entertain-oneself-to-death.html-25tPWoFC.js rename to assets/015-entertain-oneself-to-death.html-B5H-dasr.js index df91ce6e6..b1d4c8c85 100644 --- a/assets/015-entertain-oneself-to-death.html-25tPWoFC.js +++ b/assets/015-entertain-oneself-to-death.html-B5H-dasr.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as p,a as r}from"./app-BLyK9ZJy.js";const o={},n=r('

娱乐至死

(美)尼尔·波兹曼

某个文化中交流的媒介对于这个文化精神重心和物质重心的形成有着决定性的影响。


随着人们象征性活动的进展,物质现实似乎在成比例地缩小。人们没有直面周遭的事物,而是在不断地和自己对话。他们把自己完全包裹在语言形式、艺术形象、神话象征或宗教仪式之中,以至于不借助人工媒介,他们就无法看见或了解任何东西。


我们衡量一种文化,是要看其中自认为重要的东西,而不是看那些毫无伪装的琐碎小事。


在学术界里,出版的文字被赋予的权威性和真实性远远超过口头语言。人们说的话比他们写下来的话要随意。书面文字是作者深思熟虑、反复修改的结果,甚至还经过了专家和编辑的检查。


书面文字可以长久存在,而口头语言却即刻消失,这就是为什么书面文字比口头语言更接近真理。


我们的书面说明代表的是“事实”,而我们的口头通知却只是一个传言。


尼采说过,任何哲学都是某个阶段生活的哲学。我们还应该加一句,任何认识论都是某个媒介发展阶段的认识论。真理,和时间一样,是人通过他自己发明的交流技术同自己进行对话的产物。


在人类社会存在之初,上帝以启蒙人智为乐,他让我们意识到,有些我们尊为真理的其实是谬误,有些我们斥为谬误的却是真正的真理。他不时地为我们拨去迷雾,使我们不断完善自己的原则,改正自己的错误。在这个过程中,他得到了无限的满足。现在我们不知道我们是否达到了发展的终极,是否达到了精神知识或神学知识的完满,我们担心,如果我们裹足不前,不愿意接受他人的意见,那么我们的后人会效仿我们,认为我们——他们的前辈和创立者,所做的一切都是神圣的,是不可丝毫背离的。

富兰克林认为他们的这种谦逊在人类历史上的各教派中是罕见的。我们当然可以用“谦逊”二字形容他们的态度,但这段话的意义远胜于此。它对于书面文字的认识论的批评可以同柏拉图的观点相媲美。摩西本人也许也会对这段话产生兴趣,虽然他未必能同意。德美浸礼会教派的观点近乎制定了一条关于宗教话语的诫令:“不可记录汝等之教义,更不可将其印刷成文,否则汝等将永远受其束缚。”


枪炮的发明使奴隶和贵族得以在战场上平等对峙;印刷术为各阶层的人们打开了同样的信息之门,邮差把知识一视同仁地送到茅屋和宫殿前。


不管是在口头文化还是在印刷术文化中,信息的重要性都在于它可能促成某种行动。当然,在任何一种交流环境中,输入(人们得到的信息)总是多于输出(在所得到信息的基础上采取行动的可能性)的。但是,由于电报的发明,再加上后来其他技术的发展,信息和行动之间的关系变得抽象而疏远起来了。在人类历史上,人们第一次面对信息过剩的问题,这意味着与此同时,人们将面对丧失社会和政治活动能力的问题。

问问自己下面这一系列的问题,你可能就会更明白上文的意思了:对于解决中东的冲突,你准备采取什么行动?对于解决通货膨胀、犯罪和失业问题,你有何高见?对于保护环境或降低核战争危险,你有什么计划?对于北大西洋公约组织、石油输出国组织、美国中央情报局、反歧视行动计划和伊朗巴哈伊派教徒遭受的残暴行径,你准备采取什么行动?我可以大胆地帮你回答:你什么也不打算做。当然,你可能会为某个自称有计划也有能力采取行动的人投上一票。但每两年或四年你才可能有一个小时来投票,这根本不足以表达你满脑子的想法。我们也许可以说,投票选举是逃避政治无能的表现。比投票选举更糟糕的是参加民意测验。民意测验的组织者通过一些呆板的问题得出你的意见,然后把你的意见淹没在相似的意见中,最后把这些意见变成——还能是什么呢?——另一则新闻。所以,我们就陷入了一个无能为力的怪圈:你心里有很多想法,但除了把这些想法提供给记者制造更多的新闻之外,你无能为力;然后,面对你制造的新闻,你还是无能为力。


和大脑一样,每种技术也有自己内在的偏向。在它的物质外壳下,它常常表现出要派何种用场的倾向。只有那些对技术的历史一无所知的人,才会相信技术是完全中立的。


要回答“什么是电视”这个问题,我们首先要明白,当我们谈论电视的时候,我们不是指一种技术,而是指一种媒介。在世界上很多地方,虽然制造电视的技术和美国是一样的,但在那些地方,电视是一种完全不同的媒介。


由于使用方法不同,某种技术可能无法充分发挥其潜能或者只能产生最低限度的社会效应。


我们的问题不在于电视为我们展示具有娱乐性的内容,而在于所有的内容都以娱乐的方式表现出来,这就完全是另一回事了。

我们可以换种说法:娱乐是电视上所有话语的超意识形态。不管是什么内容,也不管采取什么视角,电视上的一切都是为了给我们提供娱乐。


掩藏在电视新闻节目超现实外壳下的是反交流的理论,这种理论以一种抛弃逻辑、理性和秩序的话语为特点。在美学中,这种理论被称为“达达主义”;在哲学中,它被称为“虚无主义”;在精神病学中,它被称为“精神分裂症”;如果用舞台术语来说,它可以被称为“杂耍”。


对于那些认为我在这里夸大其词的人,我可以引用罗伯特·麦克尼尔对电视新闻的描述来证明我的观点,他是《麦克尼尔—莱勒新闻时间》的执行编辑兼联合主持人。他说,好的电视新闻要“一切以简短为宜,不要让观众有精神紧张之感,反之,要以富于变化和新奇的动作不断刺激观众的感官。你不必注意概念和角色,不要在同一个问题上多停留几秒”。

他还说,制作新闻节目的奥义是:“越短越好;避免复杂;无须精妙含义;以视觉刺激代替思想;准确的文字已经过时落伍。”


约翰·杜威曾经说过,课程的内容是学习过程中最不重要的东西。我们这里也许可以借用他的观点作为指导。他在《经验与教育》中写道:“也许人们对于教育最大的错误认识是,一个人学会的只有他当时正在学习的东西。其实,伴随学习的过程形成持久的态度……也许比拼写课或地理历史课更为重要……因为这些态度才是在未来发挥重要作用的东西。”换句话说,一个人学到的最重要的东西是学习的方法。正如杜威在另一本书里写到的,我们学习我们要做的事情。而电视教育的方法是让孩子们去做电视要求他们做的事情,当然这和教室对他们提出的要求相去甚远,就像读书和看演出风马牛不相及一样。


西塞罗说过,教育的目的是让学生们摆脱现实的奴役,而现在的年轻人正竭力做着相反的努力——为了适应现实而改变自己。

',41),a=[n];function i(h,c){return t(),p("div",null,a)}const l=e(o,[["render",i],["__file","015-entertain-oneself-to-death.html.vue"]]),m=JSON.parse(`{"path":"/reading/2023/015-entertain-oneself-to-death.html","title":"娱乐至死","lang":"zh-CN","frontmatter":{"date":"2023-10-29T00:00:00.000Z","description":"娱乐至死 (美)尼尔·波兹曼 某个文化中交流的媒介对于这个文化精神重心和物质重心的形成有着决定性的影响。 随着人们象征性活动的进展,物质现实似乎在成比例地缩小。人们没有直面周遭的事物,而是在不断地和自己对话。他们把自己完全包裹在语言形式、艺术形象、神话象征或宗教仪式之中,以至于不借助人工媒介,他们就无法看见或了解任何东西。 我们衡量一种文化,是要看其中...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/015-entertain-oneself-to-death.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"娱乐至死"}],["meta",{"property":"og:description","content":"娱乐至死 (美)尼尔·波兹曼 某个文化中交流的媒介对于这个文化精神重心和物质重心的形成有着决定性的影响。 随着人们象征性活动的进展,物质现实似乎在成比例地缩小。人们没有直面周遭的事物,而是在不断地和自己对话。他们把自己完全包裹在语言形式、艺术形象、神话象征或宗教仪式之中,以至于不借助人工媒介,他们就无法看见或了解任何东西。 我们衡量一种文化,是要看其中..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-13T08:33:25.000Z"}],["meta",{"property":"article:published_time","content":"2023-10-29T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-13T08:33:25.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"娱乐至死\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-10-29T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-13T08:33:25.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1698586557000,"updatedTime":1718267605000},"readingTime":{"minutes":7.58,"words":2275},"filePathRelative":"reading/2023/015-entertain-oneself-to-death.md","localizedDate":"2023年10月29日","autoDesc":true,"excerpt":"\\n
\\n

(美)尼尔·波兹曼

\\n
\\n

某个文化中交流的媒介对于这个文化精神重心和物质重心的形成有着决定性的影响。

\\n
\\n

随着人们象征性活动的进展,物质现实似乎在成比例地缩小。人们没有直面周遭的事物,而是在不断地和自己对话。他们把自己完全包裹在语言形式、艺术形象、神话象征或宗教仪式之中,以至于不借助人工媒介,他们就无法看见或了解任何东西。

\\n
\\n

我们衡量一种文化,是要看其中自认为重要的东西,而不是看那些毫无伪装的琐碎小事。

\\n
\\n

在学术界里,出版的文字被赋予的权威性和真实性远远超过口头语言。人们说的话比他们写下来的话要随意。书面文字是作者深思熟虑、反复修改的结果,甚至还经过了专家和编辑的检查。

"}`);export{l as comp,m as data}; +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as p,a as r}from"./app-BSa8cFh0.js";const o={},n=r('

娱乐至死

(美)尼尔·波兹曼

某个文化中交流的媒介对于这个文化精神重心和物质重心的形成有着决定性的影响。


随着人们象征性活动的进展,物质现实似乎在成比例地缩小。人们没有直面周遭的事物,而是在不断地和自己对话。他们把自己完全包裹在语言形式、艺术形象、神话象征或宗教仪式之中,以至于不借助人工媒介,他们就无法看见或了解任何东西。


我们衡量一种文化,是要看其中自认为重要的东西,而不是看那些毫无伪装的琐碎小事。


在学术界里,出版的文字被赋予的权威性和真实性远远超过口头语言。人们说的话比他们写下来的话要随意。书面文字是作者深思熟虑、反复修改的结果,甚至还经过了专家和编辑的检查。


书面文字可以长久存在,而口头语言却即刻消失,这就是为什么书面文字比口头语言更接近真理。


我们的书面说明代表的是“事实”,而我们的口头通知却只是一个传言。


尼采说过,任何哲学都是某个阶段生活的哲学。我们还应该加一句,任何认识论都是某个媒介发展阶段的认识论。真理,和时间一样,是人通过他自己发明的交流技术同自己进行对话的产物。


在人类社会存在之初,上帝以启蒙人智为乐,他让我们意识到,有些我们尊为真理的其实是谬误,有些我们斥为谬误的却是真正的真理。他不时地为我们拨去迷雾,使我们不断完善自己的原则,改正自己的错误。在这个过程中,他得到了无限的满足。现在我们不知道我们是否达到了发展的终极,是否达到了精神知识或神学知识的完满,我们担心,如果我们裹足不前,不愿意接受他人的意见,那么我们的后人会效仿我们,认为我们——他们的前辈和创立者,所做的一切都是神圣的,是不可丝毫背离的。

富兰克林认为他们的这种谦逊在人类历史上的各教派中是罕见的。我们当然可以用“谦逊”二字形容他们的态度,但这段话的意义远胜于此。它对于书面文字的认识论的批评可以同柏拉图的观点相媲美。摩西本人也许也会对这段话产生兴趣,虽然他未必能同意。德美浸礼会教派的观点近乎制定了一条关于宗教话语的诫令:“不可记录汝等之教义,更不可将其印刷成文,否则汝等将永远受其束缚。”


枪炮的发明使奴隶和贵族得以在战场上平等对峙;印刷术为各阶层的人们打开了同样的信息之门,邮差把知识一视同仁地送到茅屋和宫殿前。


不管是在口头文化还是在印刷术文化中,信息的重要性都在于它可能促成某种行动。当然,在任何一种交流环境中,输入(人们得到的信息)总是多于输出(在所得到信息的基础上采取行动的可能性)的。但是,由于电报的发明,再加上后来其他技术的发展,信息和行动之间的关系变得抽象而疏远起来了。在人类历史上,人们第一次面对信息过剩的问题,这意味着与此同时,人们将面对丧失社会和政治活动能力的问题。

问问自己下面这一系列的问题,你可能就会更明白上文的意思了:对于解决中东的冲突,你准备采取什么行动?对于解决通货膨胀、犯罪和失业问题,你有何高见?对于保护环境或降低核战争危险,你有什么计划?对于北大西洋公约组织、石油输出国组织、美国中央情报局、反歧视行动计划和伊朗巴哈伊派教徒遭受的残暴行径,你准备采取什么行动?我可以大胆地帮你回答:你什么也不打算做。当然,你可能会为某个自称有计划也有能力采取行动的人投上一票。但每两年或四年你才可能有一个小时来投票,这根本不足以表达你满脑子的想法。我们也许可以说,投票选举是逃避政治无能的表现。比投票选举更糟糕的是参加民意测验。民意测验的组织者通过一些呆板的问题得出你的意见,然后把你的意见淹没在相似的意见中,最后把这些意见变成——还能是什么呢?——另一则新闻。所以,我们就陷入了一个无能为力的怪圈:你心里有很多想法,但除了把这些想法提供给记者制造更多的新闻之外,你无能为力;然后,面对你制造的新闻,你还是无能为力。


和大脑一样,每种技术也有自己内在的偏向。在它的物质外壳下,它常常表现出要派何种用场的倾向。只有那些对技术的历史一无所知的人,才会相信技术是完全中立的。


要回答“什么是电视”这个问题,我们首先要明白,当我们谈论电视的时候,我们不是指一种技术,而是指一种媒介。在世界上很多地方,虽然制造电视的技术和美国是一样的,但在那些地方,电视是一种完全不同的媒介。


由于使用方法不同,某种技术可能无法充分发挥其潜能或者只能产生最低限度的社会效应。


我们的问题不在于电视为我们展示具有娱乐性的内容,而在于所有的内容都以娱乐的方式表现出来,这就完全是另一回事了。

我们可以换种说法:娱乐是电视上所有话语的超意识形态。不管是什么内容,也不管采取什么视角,电视上的一切都是为了给我们提供娱乐。


掩藏在电视新闻节目超现实外壳下的是反交流的理论,这种理论以一种抛弃逻辑、理性和秩序的话语为特点。在美学中,这种理论被称为“达达主义”;在哲学中,它被称为“虚无主义”;在精神病学中,它被称为“精神分裂症”;如果用舞台术语来说,它可以被称为“杂耍”。


对于那些认为我在这里夸大其词的人,我可以引用罗伯特·麦克尼尔对电视新闻的描述来证明我的观点,他是《麦克尼尔—莱勒新闻时间》的执行编辑兼联合主持人。他说,好的电视新闻要“一切以简短为宜,不要让观众有精神紧张之感,反之,要以富于变化和新奇的动作不断刺激观众的感官。你不必注意概念和角色,不要在同一个问题上多停留几秒”。

他还说,制作新闻节目的奥义是:“越短越好;避免复杂;无须精妙含义;以视觉刺激代替思想;准确的文字已经过时落伍。”


约翰·杜威曾经说过,课程的内容是学习过程中最不重要的东西。我们这里也许可以借用他的观点作为指导。他在《经验与教育》中写道:“也许人们对于教育最大的错误认识是,一个人学会的只有他当时正在学习的东西。其实,伴随学习的过程形成持久的态度……也许比拼写课或地理历史课更为重要……因为这些态度才是在未来发挥重要作用的东西。”换句话说,一个人学到的最重要的东西是学习的方法。正如杜威在另一本书里写到的,我们学习我们要做的事情。而电视教育的方法是让孩子们去做电视要求他们做的事情,当然这和教室对他们提出的要求相去甚远,就像读书和看演出风马牛不相及一样。


西塞罗说过,教育的目的是让学生们摆脱现实的奴役,而现在的年轻人正竭力做着相反的努力——为了适应现实而改变自己。

',41),a=[n];function i(h,c){return t(),p("div",null,a)}const l=e(o,[["render",i],["__file","015-entertain-oneself-to-death.html.vue"]]),m=JSON.parse(`{"path":"/reading/2023/015-entertain-oneself-to-death.html","title":"娱乐至死","lang":"zh-CN","frontmatter":{"date":"2023-10-29T00:00:00.000Z","description":"娱乐至死 (美)尼尔·波兹曼 某个文化中交流的媒介对于这个文化精神重心和物质重心的形成有着决定性的影响。 随着人们象征性活动的进展,物质现实似乎在成比例地缩小。人们没有直面周遭的事物,而是在不断地和自己对话。他们把自己完全包裹在语言形式、艺术形象、神话象征或宗教仪式之中,以至于不借助人工媒介,他们就无法看见或了解任何东西。 我们衡量一种文化,是要看其中...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/015-entertain-oneself-to-death.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"娱乐至死"}],["meta",{"property":"og:description","content":"娱乐至死 (美)尼尔·波兹曼 某个文化中交流的媒介对于这个文化精神重心和物质重心的形成有着决定性的影响。 随着人们象征性活动的进展,物质现实似乎在成比例地缩小。人们没有直面周遭的事物,而是在不断地和自己对话。他们把自己完全包裹在语言形式、艺术形象、神话象征或宗教仪式之中,以至于不借助人工媒介,他们就无法看见或了解任何东西。 我们衡量一种文化,是要看其中..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-13T08:33:25.000Z"}],["meta",{"property":"article:published_time","content":"2023-10-29T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-13T08:33:25.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"娱乐至死\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-10-29T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-13T08:33:25.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1698586557000,"updatedTime":1718267605000},"readingTime":{"minutes":7.58,"words":2275},"filePathRelative":"reading/2023/015-entertain-oneself-to-death.md","localizedDate":"2023年10月29日","autoDesc":true,"excerpt":"\\n
\\n

(美)尼尔·波兹曼

\\n
\\n

某个文化中交流的媒介对于这个文化精神重心和物质重心的形成有着决定性的影响。

\\n
\\n

随着人们象征性活动的进展,物质现实似乎在成比例地缩小。人们没有直面周遭的事物,而是在不断地和自己对话。他们把自己完全包裹在语言形式、艺术形象、神话象征或宗教仪式之中,以至于不借助人工媒介,他们就无法看见或了解任何东西。

\\n
\\n

我们衡量一种文化,是要看其中自认为重要的东西,而不是看那些毫无伪装的琐碎小事。

\\n
\\n

在学术界里,出版的文字被赋予的权威性和真实性远远超过口头语言。人们说的话比他们写下来的话要随意。书面文字是作者深思熟虑、反复修改的结果,甚至还经过了专家和编辑的检查。

"}`);export{l as comp,m as data}; diff --git a/assets/016-changed-my-life-by-learning-english.html-N66A6BX3.js b/assets/016-changed-my-life-by-learning-english.html-CPjXV3Xe.js similarity index 99% rename from assets/016-changed-my-life-by-learning-english.html-N66A6BX3.js rename to assets/016-changed-my-life-by-learning-english.html-CPjXV3Xe.js index 170e79749..11dce5ff8 100644 --- a/assets/016-changed-my-life-by-learning-english.html-N66A6BX3.js +++ b/assets/016-changed-my-life-by-learning-english.html-CPjXV3Xe.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as i,a as l}from"./app-BLyK9ZJy.js";const n={},r=l('

我在 100 天内自学英语翻转人生

(韩)张同完

最重要的一点,还是“选你所爱”。不论是有你喜爱的演员,还是让你心动不已的配乐,这部影片一定要具备百看不厌的魅力,才能让你顺利完成 100 遍的目标。


100LS 的五大学习步骤
第一步:关掉所有字幕观看第一遍
第二步:打开中文字幕观看第二遍, 确认之前没看懂的部分
第三步:换成英文字幕, 把刚才没听懂的片段抄下来
第四步:反复练习听不清楚的片段, 听完马上跟读
第五步:关掉所有的字幕,观看剩下的 97 次


不能光靠眼睛,要用嘴巴和耳朵反复练习记下每个片段。听起来模糊不清的英语,代表你并没有真正听懂;唯有说得出口的英语,你才能听得一清二楚。


100LS 十一大成功法则

  1. 请舍弃“唯有学好语法,英语才会变好”的错误想法,学英语就跟学母语一样,请务必由“情境”来熟悉。
  2. 别靠头脑去理解英语,请用嘴巴和耳朵训练。
  3. 用 100 天的时间,观看一部电影 100 遍,之后就是见证奇迹的时刻,演员说的话听起来跟母语没什么两样。
  4. 忘掉一直以来你学习外语的顺序,务必遵循“先练听力,再练口语”的步骤。
  5. 找一部最能让你乐在其中的电影或剧集,开口跟读台词练满 100 遍。
  6. 无法从你口中说出的句子,你也绝对听不懂。请务必反复大声练习,直到你能够朗朗上口。
  7. 一部电影一定要重复看或听 100 遍,请善用英语字幕,不要只是默默地听。
  8. 请务必通过“情境”学习英语。
  9. 学了外语就该实际运用。如果害怕说错而不敢开口,你永远只能回答这句话:“I can’t speak English very well.”
  10. 掌握语感后,再用 TED 演讲影片将中阶英语一网打尽。
  11. 想学好高阶英语,务必用当地英语新闻进行 100LS。

100LS 训练法七大学习重点

  1. 请先使用 100LS 训练法,完成 10 部电影或剧集。如此一来,将为你的目标外语打下一定的基础。
  2. 不要额外看书学习基础动词和语法。写下影片中不懂的单词和句子,查出它们的意思并反复练习。
  3. 建议你听该语言的歌曲,让自己更加熟悉这门外语。当你实在没办法完全听清楚歌词,再试着查询歌词内容,这对学习也有很大的帮助。
  4. 搜索演讲影片,加强深入对话的能力。
  5. 观看新闻报道,累积丰富的表达能力。
  6. 你正在学哪种语言,就看以那个语言撰写而成的原文书籍。请先从童话书或页数较少的心灵励志书下手,越薄的书越好。记住,一定要从头到尾好好读完整本书。
  7. 列出你的愿望清单,具体写下学好外语后你想做些什么。当你屡次陷入瓶颈时,这份清单能带给你力量,帮助你渡过难关。

请避开战争片、科幻片或是古装剧。


一旦孩子认定英语等于无聊又无趣的东西,他一辈子都想远离英语。更可惜的是,还可能因此让他错过最能引起英语学习乐趣的黄金时期。请别把精力放在“别人家的孩子都在看什么”,而是关注“我家的孩子喜欢看什么”。请舍弃无谓的比较和担忧。“别人家的孩子已经在看难度高的英语卡通了,我家的孩子怎么才刚学会 ABC?”只要去思考如何帮助自己的孩子真心爱上英语就行了。

',17),a=[r];function o(p,c){return t(),i("div",null,a)}const s=e(n,[["render",o],["__file","016-changed-my-life-by-learning-english.html.vue"]]),m=JSON.parse(`{"path":"/reading/2023/016-changed-my-life-by-learning-english.html","title":"我在 100 天内自学英语翻转人生","lang":"zh-CN","frontmatter":{"date":"2023-11-04T00:00:00.000Z","description":"我在 100 天内自学英语翻转人生 (韩)张同完 最重要的一点,还是“选你所爱”。不论是有你喜爱的演员,还是让你心动不已的配乐,这部影片一定要具备百看不厌的魅力,才能让你顺利完成 100 遍的目标。 100LS 的五大学习步骤 第一步:关掉所有字幕观看第一遍 第二步:打开中文字幕观看第二遍, 确认之前没看懂的部分 第三步:换成英文字幕, 把刚才没听懂的...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/016-changed-my-life-by-learning-english.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"我在 100 天内自学英语翻转人生"}],["meta",{"property":"og:description","content":"我在 100 天内自学英语翻转人生 (韩)张同完 最重要的一点,还是“选你所爱”。不论是有你喜爱的演员,还是让你心动不已的配乐,这部影片一定要具备百看不厌的魅力,才能让你顺利完成 100 遍的目标。 100LS 的五大学习步骤 第一步:关掉所有字幕观看第一遍 第二步:打开中文字幕观看第二遍, 确认之前没看懂的部分 第三步:换成英文字幕, 把刚才没听懂的..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-13T08:33:25.000Z"}],["meta",{"property":"article:published_time","content":"2023-11-04T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-13T08:33:25.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"我在 100 天内自学英语翻转人生\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-11-04T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-13T08:33:25.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1699085929000,"updatedTime":1718267605000},"readingTime":{"minutes":3.45,"words":1035},"filePathRelative":"reading/2023/016-changed-my-life-by-learning-english.md","localizedDate":"2023年11月4日","autoDesc":true,"excerpt":"\\n
\\n

(韩)张同完

\\n
\\n

最重要的一点,还是“选你所爱”。不论是有你喜爱的演员,还是让你心动不已的配乐,这部影片一定要具备百看不厌的魅力,才能让你顺利完成 100 遍的目标。

\\n
\\n

100LS 的五大学习步骤
\\n第一步:关掉所有字幕观看第一遍
\\n第二步:打开中文字幕观看第二遍, 确认之前没看懂的部分
\\n第三步:换成英文字幕, 把刚才没听懂的片段抄下来
\\n第四步:反复练习听不清楚的片段, 听完马上跟读
\\n第五步:关掉所有的字幕,观看剩下的 97 次

\\n
\\n

不能光靠眼睛,要用嘴巴和耳朵反复练习记下每个片段。听起来模糊不清的英语,代表你并没有真正听懂;唯有说得出口的英语,你才能听得一清二楚。

"}`);export{s as comp,m as data}; +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as i,a as l}from"./app-BSa8cFh0.js";const n={},r=l('

我在 100 天内自学英语翻转人生

(韩)张同完

最重要的一点,还是“选你所爱”。不论是有你喜爱的演员,还是让你心动不已的配乐,这部影片一定要具备百看不厌的魅力,才能让你顺利完成 100 遍的目标。


100LS 的五大学习步骤
第一步:关掉所有字幕观看第一遍
第二步:打开中文字幕观看第二遍, 确认之前没看懂的部分
第三步:换成英文字幕, 把刚才没听懂的片段抄下来
第四步:反复练习听不清楚的片段, 听完马上跟读
第五步:关掉所有的字幕,观看剩下的 97 次


不能光靠眼睛,要用嘴巴和耳朵反复练习记下每个片段。听起来模糊不清的英语,代表你并没有真正听懂;唯有说得出口的英语,你才能听得一清二楚。


100LS 十一大成功法则

  1. 请舍弃“唯有学好语法,英语才会变好”的错误想法,学英语就跟学母语一样,请务必由“情境”来熟悉。
  2. 别靠头脑去理解英语,请用嘴巴和耳朵训练。
  3. 用 100 天的时间,观看一部电影 100 遍,之后就是见证奇迹的时刻,演员说的话听起来跟母语没什么两样。
  4. 忘掉一直以来你学习外语的顺序,务必遵循“先练听力,再练口语”的步骤。
  5. 找一部最能让你乐在其中的电影或剧集,开口跟读台词练满 100 遍。
  6. 无法从你口中说出的句子,你也绝对听不懂。请务必反复大声练习,直到你能够朗朗上口。
  7. 一部电影一定要重复看或听 100 遍,请善用英语字幕,不要只是默默地听。
  8. 请务必通过“情境”学习英语。
  9. 学了外语就该实际运用。如果害怕说错而不敢开口,你永远只能回答这句话:“I can’t speak English very well.”
  10. 掌握语感后,再用 TED 演讲影片将中阶英语一网打尽。
  11. 想学好高阶英语,务必用当地英语新闻进行 100LS。

100LS 训练法七大学习重点

  1. 请先使用 100LS 训练法,完成 10 部电影或剧集。如此一来,将为你的目标外语打下一定的基础。
  2. 不要额外看书学习基础动词和语法。写下影片中不懂的单词和句子,查出它们的意思并反复练习。
  3. 建议你听该语言的歌曲,让自己更加熟悉这门外语。当你实在没办法完全听清楚歌词,再试着查询歌词内容,这对学习也有很大的帮助。
  4. 搜索演讲影片,加强深入对话的能力。
  5. 观看新闻报道,累积丰富的表达能力。
  6. 你正在学哪种语言,就看以那个语言撰写而成的原文书籍。请先从童话书或页数较少的心灵励志书下手,越薄的书越好。记住,一定要从头到尾好好读完整本书。
  7. 列出你的愿望清单,具体写下学好外语后你想做些什么。当你屡次陷入瓶颈时,这份清单能带给你力量,帮助你渡过难关。

请避开战争片、科幻片或是古装剧。


一旦孩子认定英语等于无聊又无趣的东西,他一辈子都想远离英语。更可惜的是,还可能因此让他错过最能引起英语学习乐趣的黄金时期。请别把精力放在“别人家的孩子都在看什么”,而是关注“我家的孩子喜欢看什么”。请舍弃无谓的比较和担忧。“别人家的孩子已经在看难度高的英语卡通了,我家的孩子怎么才刚学会 ABC?”只要去思考如何帮助自己的孩子真心爱上英语就行了。

',17),a=[r];function o(p,c){return t(),i("div",null,a)}const s=e(n,[["render",o],["__file","016-changed-my-life-by-learning-english.html.vue"]]),m=JSON.parse(`{"path":"/reading/2023/016-changed-my-life-by-learning-english.html","title":"我在 100 天内自学英语翻转人生","lang":"zh-CN","frontmatter":{"date":"2023-11-04T00:00:00.000Z","description":"我在 100 天内自学英语翻转人生 (韩)张同完 最重要的一点,还是“选你所爱”。不论是有你喜爱的演员,还是让你心动不已的配乐,这部影片一定要具备百看不厌的魅力,才能让你顺利完成 100 遍的目标。 100LS 的五大学习步骤 第一步:关掉所有字幕观看第一遍 第二步:打开中文字幕观看第二遍, 确认之前没看懂的部分 第三步:换成英文字幕, 把刚才没听懂的...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/016-changed-my-life-by-learning-english.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"我在 100 天内自学英语翻转人生"}],["meta",{"property":"og:description","content":"我在 100 天内自学英语翻转人生 (韩)张同完 最重要的一点,还是“选你所爱”。不论是有你喜爱的演员,还是让你心动不已的配乐,这部影片一定要具备百看不厌的魅力,才能让你顺利完成 100 遍的目标。 100LS 的五大学习步骤 第一步:关掉所有字幕观看第一遍 第二步:打开中文字幕观看第二遍, 确认之前没看懂的部分 第三步:换成英文字幕, 把刚才没听懂的..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-13T08:33:25.000Z"}],["meta",{"property":"article:published_time","content":"2023-11-04T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-13T08:33:25.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"我在 100 天内自学英语翻转人生\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-11-04T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-13T08:33:25.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1699085929000,"updatedTime":1718267605000},"readingTime":{"minutes":3.45,"words":1035},"filePathRelative":"reading/2023/016-changed-my-life-by-learning-english.md","localizedDate":"2023年11月4日","autoDesc":true,"excerpt":"\\n
\\n

(韩)张同完

\\n
\\n

最重要的一点,还是“选你所爱”。不论是有你喜爱的演员,还是让你心动不已的配乐,这部影片一定要具备百看不厌的魅力,才能让你顺利完成 100 遍的目标。

\\n
\\n

100LS 的五大学习步骤
\\n第一步:关掉所有字幕观看第一遍
\\n第二步:打开中文字幕观看第二遍, 确认之前没看懂的部分
\\n第三步:换成英文字幕, 把刚才没听懂的片段抄下来
\\n第四步:反复练习听不清楚的片段, 听完马上跟读
\\n第五步:关掉所有的字幕,观看剩下的 97 次

\\n
\\n

不能光靠眼睛,要用嘴巴和耳朵反复练习记下每个片段。听起来模糊不清的英语,代表你并没有真正听懂;唯有说得出口的英语,你才能听得一清二楚。

"}`);export{s as comp,m as data}; diff --git a/assets/017-biblical-wisdom.html-B5CHtaoM.js b/assets/017-biblical-wisdom.html-4jKkvJns.js similarity index 98% rename from assets/017-biblical-wisdom.html-B5CHtaoM.js rename to assets/017-biblical-wisdom.html-4jKkvJns.js index ebdee2dfb..27d737a88 100644 --- a/assets/017-biblical-wisdom.html-B5CHtaoM.js +++ b/assets/017-biblical-wisdom.html-4jKkvJns.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o,c as n,b as t}from"./app-BLyK9ZJy.js";const i={},a=t("h1",{id:"圣经的智慧",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#圣经的智慧"},[t("span",null,"圣经的智慧")])],-1),l=t("blockquote",null,[t("p",null,"(美)亨德里克·威廉·房龙")],-1),r=t("p",null,"享乐本身不是罪恶,但是绝对不会给人们带来精神满足,如果人们得不到精神上的满足,人活着就是空虚且毫无意义的事情。",-1),c=t("hr",null,null,-1),p=t("p",null,"人是会变的,但是人的心灵始终如一。如果我们足够聪明,我们同时会在这些诗篇中寻找到一丝安慰。我们所遭受的苦难,已经有人遭受过了,而其他人还要在未来继续承受苦难。那些曾经给在千年以前死去的人们带来希望的诗篇,也许会在未来的某一天给那些还没有出生的人们提供一种崭新的勇气。人在改变,但是人们内心的伤痛和欢乐没有变,就像它们一直存在于亚伯拉罕和雅各时代一样。",-1),s=t("hr",null,null,-1),d=t("p",null,"暴力只会带来更多的暴力,思想不应该与兵器争锋。",-1),m=[a,l,r,c,p,s,d];function h(_,u){return o(),n("div",null,m)}const f=e(i,[["render",h],["__file","017-biblical-wisdom.html.vue"]]),y=JSON.parse(`{"path":"/reading/2023/017-biblical-wisdom.html","title":"圣经的智慧","lang":"zh-CN","frontmatter":{"date":"2023-11-21T00:00:00.000Z","description":"圣经的智慧 (美)亨德里克·威廉·房龙 享乐本身不是罪恶,但是绝对不会给人们带来精神满足,如果人们得不到精神上的满足,人活着就是空虚且毫无意义的事情。 人是会变的,但是人的心灵始终如一。如果我们足够聪明,我们同时会在这些诗篇中寻找到一丝安慰。我们所遭受的苦难,已经有人遭受过了,而其他人还要在未来继续承受苦难。那些曾经给在千年以前死去的人们带来希望的诗篇...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/017-biblical-wisdom.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"圣经的智慧"}],["meta",{"property":"og:description","content":"圣经的智慧 (美)亨德里克·威廉·房龙 享乐本身不是罪恶,但是绝对不会给人们带来精神满足,如果人们得不到精神上的满足,人活着就是空虚且毫无意义的事情。 人是会变的,但是人的心灵始终如一。如果我们足够聪明,我们同时会在这些诗篇中寻找到一丝安慰。我们所遭受的苦难,已经有人遭受过了,而其他人还要在未来继续承受苦难。那些曾经给在千年以前死去的人们带来希望的诗篇..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-13T08:33:25.000Z"}],["meta",{"property":"article:published_time","content":"2023-11-21T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-13T08:33:25.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"圣经的智慧\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-11-21T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-13T08:33:25.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1700532011000,"updatedTime":1718267605000},"readingTime":{"minutes":0.84,"words":253},"filePathRelative":"reading/2023/017-biblical-wisdom.md","localizedDate":"2023年11月21日","autoDesc":true,"excerpt":"\\n
\\n

(美)亨德里克·威廉·房龙

\\n
\\n

享乐本身不是罪恶,但是绝对不会给人们带来精神满足,如果人们得不到精神上的满足,人活着就是空虚且毫无意义的事情。

\\n
\\n

人是会变的,但是人的心灵始终如一。如果我们足够聪明,我们同时会在这些诗篇中寻找到一丝安慰。我们所遭受的苦难,已经有人遭受过了,而其他人还要在未来继续承受苦难。那些曾经给在千年以前死去的人们带来希望的诗篇,也许会在未来的某一天给那些还没有出生的人们提供一种崭新的勇气。人在改变,但是人们内心的伤痛和欢乐没有变,就像它们一直存在于亚伯拉罕和雅各时代一样。

\\n"}`);export{f as comp,y as data}; +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o,c as n,b as t}from"./app-BSa8cFh0.js";const i={},a=t("h1",{id:"圣经的智慧",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#圣经的智慧"},[t("span",null,"圣经的智慧")])],-1),l=t("blockquote",null,[t("p",null,"(美)亨德里克·威廉·房龙")],-1),r=t("p",null,"享乐本身不是罪恶,但是绝对不会给人们带来精神满足,如果人们得不到精神上的满足,人活着就是空虚且毫无意义的事情。",-1),c=t("hr",null,null,-1),p=t("p",null,"人是会变的,但是人的心灵始终如一。如果我们足够聪明,我们同时会在这些诗篇中寻找到一丝安慰。我们所遭受的苦难,已经有人遭受过了,而其他人还要在未来继续承受苦难。那些曾经给在千年以前死去的人们带来希望的诗篇,也许会在未来的某一天给那些还没有出生的人们提供一种崭新的勇气。人在改变,但是人们内心的伤痛和欢乐没有变,就像它们一直存在于亚伯拉罕和雅各时代一样。",-1),s=t("hr",null,null,-1),d=t("p",null,"暴力只会带来更多的暴力,思想不应该与兵器争锋。",-1),m=[a,l,r,c,p,s,d];function h(_,u){return o(),n("div",null,m)}const f=e(i,[["render",h],["__file","017-biblical-wisdom.html.vue"]]),y=JSON.parse(`{"path":"/reading/2023/017-biblical-wisdom.html","title":"圣经的智慧","lang":"zh-CN","frontmatter":{"date":"2023-11-21T00:00:00.000Z","description":"圣经的智慧 (美)亨德里克·威廉·房龙 享乐本身不是罪恶,但是绝对不会给人们带来精神满足,如果人们得不到精神上的满足,人活着就是空虚且毫无意义的事情。 人是会变的,但是人的心灵始终如一。如果我们足够聪明,我们同时会在这些诗篇中寻找到一丝安慰。我们所遭受的苦难,已经有人遭受过了,而其他人还要在未来继续承受苦难。那些曾经给在千年以前死去的人们带来希望的诗篇...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/017-biblical-wisdom.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"圣经的智慧"}],["meta",{"property":"og:description","content":"圣经的智慧 (美)亨德里克·威廉·房龙 享乐本身不是罪恶,但是绝对不会给人们带来精神满足,如果人们得不到精神上的满足,人活着就是空虚且毫无意义的事情。 人是会变的,但是人的心灵始终如一。如果我们足够聪明,我们同时会在这些诗篇中寻找到一丝安慰。我们所遭受的苦难,已经有人遭受过了,而其他人还要在未来继续承受苦难。那些曾经给在千年以前死去的人们带来希望的诗篇..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-13T08:33:25.000Z"}],["meta",{"property":"article:published_time","content":"2023-11-21T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-13T08:33:25.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"圣经的智慧\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-11-21T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-13T08:33:25.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1700532011000,"updatedTime":1718267605000},"readingTime":{"minutes":0.84,"words":253},"filePathRelative":"reading/2023/017-biblical-wisdom.md","localizedDate":"2023年11月21日","autoDesc":true,"excerpt":"\\n
\\n

(美)亨德里克·威廉·房龙

\\n
\\n

享乐本身不是罪恶,但是绝对不会给人们带来精神满足,如果人们得不到精神上的满足,人活着就是空虚且毫无意义的事情。

\\n
\\n

人是会变的,但是人的心灵始终如一。如果我们足够聪明,我们同时会在这些诗篇中寻找到一丝安慰。我们所遭受的苦难,已经有人遭受过了,而其他人还要在未来继续承受苦难。那些曾经给在千年以前死去的人们带来希望的诗篇,也许会在未来的某一天给那些还没有出生的人们提供一种崭新的勇气。人在改变,但是人们内心的伤痛和欢乐没有变,就像它们一直存在于亚伯拉罕和雅各时代一样。

\\n"}`);export{f as comp,y as data}; diff --git a/assets/018-desire-and-dignity.html-UmwJOa0K.js b/assets/018-desire-and-dignity.html-C_rjUwoi.js similarity index 99% rename from assets/018-desire-and-dignity.html-UmwJOa0K.js rename to assets/018-desire-and-dignity.html-C_rjUwoi.js index 1399f0ebd..9850f5185 100644 --- a/assets/018-desire-and-dignity.html-UmwJOa0K.js +++ b/assets/018-desire-and-dignity.html-C_rjUwoi.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as o,a as n}from"./app-BLyK9ZJy.js";const i={},r=n('

欲望与尊严:转型期中国的阶层、性别与亲密关系

肖索未

男性气质的阶层差异与市场转型时期中国社会的变迁紧密相关。一方面,随着市场改革,商人阶层拥有了较强的经济能力,并试图获得更高的社会地位。这些社会地位的诉求在男性欲望显性化和女性身体商品化的性别话语的支持下,构成其男性气质的重要组成部分,即通过拥有漂亮女人来彰显身份、权力和优势。另一方面,工薪阶层男性则在市场化的过程中逐渐边缘化,这个群体的男性气质的建构更多围绕他们的家庭角色,通过女伴对其作为家庭的经济支柱和一家之主的身份的确认,生产出男人的尊严和价值感。


消费往往是一种寻求竞争性身份地位的行为,比如凡勃伦(Thorstein B.Veblen)在关于“炫耀性消费”的经典阐述中谈到,人们消费特定的物品是为了显示出“高人一等”的地位,从而获得他人的艳羡或重视。

消费不仅是一种“区隔人群”的重要形式,同时也是建立人际纽带的途径。人们往往通过为他人购买和赠送商品来表达关心和爱意,从而建立和维系社会关系(Zelizer,2007)。在消费主义日益兴盛的当今社会,情感的表达已经越来越被市场所主导,形成某种高度依赖于商品的“爱的物质文化”。

消费日益成为在社会群体中确立成员身份、获得认可和归属的重要方式。很多时候,人们购买特定的物品或服务,与其说是为了获得令人艳羡的优越感,不如说更多为了获得他人的承认和尊重,以享有社会交往的平等机会。


费孝通指出,婚姻作为一种社会制度,其目的是完成社会结构中的基本三角——父母子构成的家庭,“夫妇不只是男女间的两性关系,而且还是共同向儿女负责的合作关系。在这个婚姻的契约中同时缔结了两种相联的社会关系——夫妇和亲子”。

费孝通写道:“若没有孩子联系成三角,则被联的男女,并没有完全达到夫妇关系,社会对他们时常另眼相看,这是一种过渡性的身份。孩子的出世才完成了正常的夫妇关系,稳定和充实了他们全面合作的生活。”


社会学家 Arlie Hochschild 对美国双职工家庭的经典研究发现,夫妻对于婚姻角色存在三种不同的性别观念:传统型、平等型和过渡型。传统型认同丈夫作为一家之主、挣钱养家,而妻子的身份则围绕她在家庭中的角色(即便她事实上外出工作);平等型主张夫妻双方齐头并进、权力均分;过渡型则是指处于传统型和平等型中间的状态,比如一个过渡型的丈夫会完全支持妻子在外工作,但同时期待她在家务事上也能挑起大梁(Hochschild,1989)。

',12),a=[r];function p(c,d){return t(),o("div",null,a)}const h=e(i,[["render",p],["__file","018-desire-and-dignity.html.vue"]]),m=JSON.parse(`{"path":"/reading/2023/018-desire-and-dignity.html","title":"欲望与尊严:转型期中国的阶层、性别与亲密关系","lang":"zh-CN","frontmatter":{"date":"2023-11-28T00:00:00.000Z","description":"欲望与尊严:转型期中国的阶层、性别与亲密关系 肖索未 男性气质的阶层差异与市场转型时期中国社会的变迁紧密相关。一方面,随着市场改革,商人阶层拥有了较强的经济能力,并试图获得更高的社会地位。这些社会地位的诉求在男性欲望显性化和女性身体商品化的性别话语的支持下,构成其男性气质的重要组成部分,即通过拥有漂亮女人来彰显身份、权力和优势。另一方面,工薪阶层男性则...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/018-desire-and-dignity.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"欲望与尊严:转型期中国的阶层、性别与亲密关系"}],["meta",{"property":"og:description","content":"欲望与尊严:转型期中国的阶层、性别与亲密关系 肖索未 男性气质的阶层差异与市场转型时期中国社会的变迁紧密相关。一方面,随着市场改革,商人阶层拥有了较强的经济能力,并试图获得更高的社会地位。这些社会地位的诉求在男性欲望显性化和女性身体商品化的性别话语的支持下,构成其男性气质的重要组成部分,即通过拥有漂亮女人来彰显身份、权力和优势。另一方面,工薪阶层男性则..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-13T08:33:25.000Z"}],["meta",{"property":"article:published_time","content":"2023-11-28T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-13T08:33:25.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"欲望与尊严:转型期中国的阶层、性别与亲密关系\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-11-28T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-13T08:33:25.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1701152507000,"updatedTime":1718267605000},"readingTime":{"minutes":2.91,"words":873},"filePathRelative":"reading/2023/018-desire-and-dignity.md","localizedDate":"2023年11月28日","autoDesc":true,"excerpt":"\\n
\\n

肖索未

\\n
\\n

男性气质的阶层差异与市场转型时期中国社会的变迁紧密相关。一方面,随着市场改革,商人阶层拥有了较强的经济能力,并试图获得更高的社会地位。这些社会地位的诉求在男性欲望显性化和女性身体商品化的性别话语的支持下,构成其男性气质的重要组成部分,即通过拥有漂亮女人来彰显身份、权力和优势。另一方面,工薪阶层男性则在市场化的过程中逐渐边缘化,这个群体的男性气质的建构更多围绕他们的家庭角色,通过女伴对其作为家庭的经济支柱和一家之主的身份的确认,生产出男人的尊严和价值感。

\\n
\\n

消费往往是一种寻求竞争性身份地位的行为,比如凡勃伦(Thorstein B.Veblen)在关于“炫耀性消费”的经典阐述中谈到,人们消费特定的物品是为了显示出“高人一等”的地位,从而获得他人的艳羡或重视。

"}`);export{h as comp,m as data}; +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as o,a as n}from"./app-BSa8cFh0.js";const i={},r=n('

欲望与尊严:转型期中国的阶层、性别与亲密关系

肖索未

男性气质的阶层差异与市场转型时期中国社会的变迁紧密相关。一方面,随着市场改革,商人阶层拥有了较强的经济能力,并试图获得更高的社会地位。这些社会地位的诉求在男性欲望显性化和女性身体商品化的性别话语的支持下,构成其男性气质的重要组成部分,即通过拥有漂亮女人来彰显身份、权力和优势。另一方面,工薪阶层男性则在市场化的过程中逐渐边缘化,这个群体的男性气质的建构更多围绕他们的家庭角色,通过女伴对其作为家庭的经济支柱和一家之主的身份的确认,生产出男人的尊严和价值感。


消费往往是一种寻求竞争性身份地位的行为,比如凡勃伦(Thorstein B.Veblen)在关于“炫耀性消费”的经典阐述中谈到,人们消费特定的物品是为了显示出“高人一等”的地位,从而获得他人的艳羡或重视。

消费不仅是一种“区隔人群”的重要形式,同时也是建立人际纽带的途径。人们往往通过为他人购买和赠送商品来表达关心和爱意,从而建立和维系社会关系(Zelizer,2007)。在消费主义日益兴盛的当今社会,情感的表达已经越来越被市场所主导,形成某种高度依赖于商品的“爱的物质文化”。

消费日益成为在社会群体中确立成员身份、获得认可和归属的重要方式。很多时候,人们购买特定的物品或服务,与其说是为了获得令人艳羡的优越感,不如说更多为了获得他人的承认和尊重,以享有社会交往的平等机会。


费孝通指出,婚姻作为一种社会制度,其目的是完成社会结构中的基本三角——父母子构成的家庭,“夫妇不只是男女间的两性关系,而且还是共同向儿女负责的合作关系。在这个婚姻的契约中同时缔结了两种相联的社会关系——夫妇和亲子”。

费孝通写道:“若没有孩子联系成三角,则被联的男女,并没有完全达到夫妇关系,社会对他们时常另眼相看,这是一种过渡性的身份。孩子的出世才完成了正常的夫妇关系,稳定和充实了他们全面合作的生活。”


社会学家 Arlie Hochschild 对美国双职工家庭的经典研究发现,夫妻对于婚姻角色存在三种不同的性别观念:传统型、平等型和过渡型。传统型认同丈夫作为一家之主、挣钱养家,而妻子的身份则围绕她在家庭中的角色(即便她事实上外出工作);平等型主张夫妻双方齐头并进、权力均分;过渡型则是指处于传统型和平等型中间的状态,比如一个过渡型的丈夫会完全支持妻子在外工作,但同时期待她在家务事上也能挑起大梁(Hochschild,1989)。

',12),a=[r];function p(c,d){return t(),o("div",null,a)}const h=e(i,[["render",p],["__file","018-desire-and-dignity.html.vue"]]),m=JSON.parse(`{"path":"/reading/2023/018-desire-and-dignity.html","title":"欲望与尊严:转型期中国的阶层、性别与亲密关系","lang":"zh-CN","frontmatter":{"date":"2023-11-28T00:00:00.000Z","description":"欲望与尊严:转型期中国的阶层、性别与亲密关系 肖索未 男性气质的阶层差异与市场转型时期中国社会的变迁紧密相关。一方面,随着市场改革,商人阶层拥有了较强的经济能力,并试图获得更高的社会地位。这些社会地位的诉求在男性欲望显性化和女性身体商品化的性别话语的支持下,构成其男性气质的重要组成部分,即通过拥有漂亮女人来彰显身份、权力和优势。另一方面,工薪阶层男性则...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/018-desire-and-dignity.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"欲望与尊严:转型期中国的阶层、性别与亲密关系"}],["meta",{"property":"og:description","content":"欲望与尊严:转型期中国的阶层、性别与亲密关系 肖索未 男性气质的阶层差异与市场转型时期中国社会的变迁紧密相关。一方面,随着市场改革,商人阶层拥有了较强的经济能力,并试图获得更高的社会地位。这些社会地位的诉求在男性欲望显性化和女性身体商品化的性别话语的支持下,构成其男性气质的重要组成部分,即通过拥有漂亮女人来彰显身份、权力和优势。另一方面,工薪阶层男性则..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-13T08:33:25.000Z"}],["meta",{"property":"article:published_time","content":"2023-11-28T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-13T08:33:25.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"欲望与尊严:转型期中国的阶层、性别与亲密关系\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-11-28T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-13T08:33:25.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1701152507000,"updatedTime":1718267605000},"readingTime":{"minutes":2.91,"words":873},"filePathRelative":"reading/2023/018-desire-and-dignity.md","localizedDate":"2023年11月28日","autoDesc":true,"excerpt":"\\n
\\n

肖索未

\\n
\\n

男性气质的阶层差异与市场转型时期中国社会的变迁紧密相关。一方面,随着市场改革,商人阶层拥有了较强的经济能力,并试图获得更高的社会地位。这些社会地位的诉求在男性欲望显性化和女性身体商品化的性别话语的支持下,构成其男性气质的重要组成部分,即通过拥有漂亮女人来彰显身份、权力和优势。另一方面,工薪阶层男性则在市场化的过程中逐渐边缘化,这个群体的男性气质的建构更多围绕他们的家庭角色,通过女伴对其作为家庭的经济支柱和一家之主的身份的确认,生产出男人的尊严和价值感。

\\n
\\n

消费往往是一种寻求竞争性身份地位的行为,比如凡勃伦(Thorstein B.Veblen)在关于“炫耀性消费”的经典阐述中谈到,人们消费特定的物品是为了显示出“高人一等”的地位,从而获得他人的艳羡或重视。

"}`);export{h as comp,m as data}; diff --git a/assets/019-rural-china.html-D_D8w-vu.js b/assets/019-rural-china.html-B2zejjSr.js similarity index 99% rename from assets/019-rural-china.html-D_D8w-vu.js rename to assets/019-rural-china.html-B2zejjSr.js index d29255d0f..90d6c1b9c 100644 --- a/assets/019-rural-china.html-D_D8w-vu.js +++ b/assets/019-rural-china.html-B2zejjSr.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as a,a as r}from"./app-BLyK9ZJy.js";const n={},p=r('

乡土中国

费孝通

在社会学里,我们常分出两种不同性质的社会:一种并没有具体目的,只是因为在一起生长而发生的社会;一种是为了要完成一件任务而结合的社会。用 Tönnies 的话说:前者是 Gemeinschaft,后者是 Gesellschaft;用 Durkheim 的话说:前者是“有机的团结”,后者是“机械的团结”。用我们自己的话说,前者是礼俗社会,后者是法理社会。


乡下孩子在教室里认字认不过教授们的孩子,和教授们的孩子在田野里捉蚱蜢捉不过乡下孩子,在意义上是相同的。


古之欲明明德于天下者,先治其国,欲治其国者,先齐其家,欲齐其家者,先修其身……身修而后家齐,家齐而后国治,国治而后天下平。


我们如果要了解西洋的“团体格局”社会中的道德体系,绝不能离开他们的宗教观念的。宗教的虔诚和信赖不但是他们道德观念的来源,而且还是支持行为规范的力量,是团体的象征。在象征着团体的神的观念下,有着两个重要的派生观念:一是每个个人在神前的平等;一是神对每个个人的公道。


以生育社群来担负其他很多的功能,使这社群中各分子的关系的内容也发生了变化。在西洋家庭团体中,夫妇是主轴,夫妇共同经营生育事务,子女在这团体中是配角,他们长成了就离开这团体。在他们,政治、经济、宗教等功能有其他团体来担负,不在家庭的分内。夫妇成为主轴,两性之间的感情是凝合的力量。两性感情的发展,使他们的家庭成了获取生活上安慰的中心。


在我们的乡土社会中,家的性质在这方面有着显著的差别。我们的家既是个绵续性的事业社群,它的主轴是在父子之间,在婆媳之间,是纵的,不是横的。夫妇成了配轴。配轴虽则和主轴一样并不是临时性的,但是这两轴却都被事业的需要而排斥了普通的感情。我所谓普通的感情是和纪律相对照的。一切事业都不能脱离效率的考虑。求效率就得讲纪律;纪律排斥私情的宽容。在中国的家庭里有家法,在夫妇间得相敬,女子有着三从四德的标准,亲子间讲究负责和服从。这些都是事业社群里的特色。


所谓感情相当于普通所谓激动,动了情,甚至说动了火。用火来形容感情,就在指这动的势和紧张的状态,从社会关系上说感情是具有破坏和创造作用的。感情的激动改变了原有的关系。这也就是说,如果要维持固定的社会关系,就得避免感情的激动。其实,感情的淡漠是稳定的社会关系的一种表示。


Oswald Spengler 在“西方陆沉论”里曾说西洋曾有两种文化模式:一种他称作阿波罗式的(Apollonian);一种他称作浮士德式的(Faustian)。阿波罗式的文化认定宇宙的安排有一个完善的秩序,这个秩序超于人力的创造,人不过是去接受它,安于其位,维持它;但是人连维持它的力量都没有,天堂遗失了,黄金时代过去了。这是西方古典的精神。现代的文化却是浮士德式的。他们把冲突看成存在的基础,生命是阻碍的克服;没有了阻碍,生命也就失去了意义。他们把前途看成无尽的创造过程,不断的变。


恋爱是一项探险,是对未知的摸索。这和友谊不同,友谊是可以停止在某种程度上的了解,恋爱却是不停止的,是追求。这种企图并不以实用为目的,是生活经验的创造,也可以说是生命意义的创造,但不是经济的生产,不是个事业。恋爱的持续依赖于推陈出新,不断地克服阻碍,也是不断地发现阻碍,要得到的是这一个过程,而不是这过程的结果。从结果说可以是毫无成就的。非但毫无成就,而且使社会关系不能稳定,使依赖于社会关系的事业不能顺利经营。


社会秩序范围着个性,为了秩序的维持,一切足以引起破坏秩序的要素都被遏制着。男女之间的鸿沟从此筑下。乡土社会是个男女有别的社会,也是个安稳的社会。


说人类行为是有动机的包含着两个意思:一是人类对于自己的行为是可以控制的,要这样做就这样做,不要这样做就不这样做,也就是所谓意志;一是人类在取舍之间有所根据,这根据就是欲望。欲望规定了人类行为的方向,就是上面所说要这样要那样的“要”。这个“要”是先于行为的,要得了,也就是欲望满足了,我们会因之觉得愉快,欲望不满足,要而得不到,周身不舒服。


欲望如果要能通过意志对行为有所控制,它必须是行为者所自觉的。自觉是说行为者知道自己要的是什么。

',25),o=[p];function i(c,h){return t(),a("div",null,o)}const m=e(n,[["render",i],["__file","019-rural-china.html.vue"]]),d=JSON.parse(`{"path":"/reading/2023/019-rural-china.html","title":"乡土中国","lang":"zh-CN","frontmatter":{"date":"2023-12-08T00:00:00.000Z","description":"乡土中国 费孝通 在社会学里,我们常分出两种不同性质的社会:一种并没有具体目的,只是因为在一起生长而发生的社会;一种是为了要完成一件任务而结合的社会。用 Tönnies 的话说:前者是 Gemeinschaft,后者是 Gesellschaft;用 Durkheim 的话说:前者是“有机的团结”,后者是“机械的团结”。用我们自己的话说,前者是礼俗社会,...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/019-rural-china.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"乡土中国"}],["meta",{"property":"og:description","content":"乡土中国 费孝通 在社会学里,我们常分出两种不同性质的社会:一种并没有具体目的,只是因为在一起生长而发生的社会;一种是为了要完成一件任务而结合的社会。用 Tönnies 的话说:前者是 Gemeinschaft,后者是 Gesellschaft;用 Durkheim 的话说:前者是“有机的团结”,后者是“机械的团结”。用我们自己的话说,前者是礼俗社会,..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-13T08:33:25.000Z"}],["meta",{"property":"article:published_time","content":"2023-12-08T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-13T08:33:25.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"乡土中国\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-12-08T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-13T08:33:25.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1702002287000,"updatedTime":1718267605000},"readingTime":{"minutes":4.84,"words":1453},"filePathRelative":"reading/2023/019-rural-china.md","localizedDate":"2023年12月8日","autoDesc":true,"excerpt":"\\n
\\n

费孝通

\\n
\\n

在社会学里,我们常分出两种不同性质的社会:一种并没有具体目的,只是因为在一起生长而发生的社会;一种是为了要完成一件任务而结合的社会。用 Tönnies 的话说:前者是 Gemeinschaft,后者是 Gesellschaft;用 Durkheim 的话说:前者是“有机的团结”,后者是“机械的团结”。用我们自己的话说,前者是礼俗社会,后者是法理社会。

\\n
\\n

乡下孩子在教室里认字认不过教授们的孩子,和教授们的孩子在田野里捉蚱蜢捉不过乡下孩子,在意义上是相同的。

\\n
\\n

古之欲明明德于天下者,先治其国,欲治其国者,先齐其家,欲齐其家者,先修其身……身修而后家齐,家齐而后国治,国治而后天下平。

"}`);export{m as comp,d as data}; +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as t,c as a,a as r}from"./app-BSa8cFh0.js";const n={},p=r('

乡土中国

费孝通

在社会学里,我们常分出两种不同性质的社会:一种并没有具体目的,只是因为在一起生长而发生的社会;一种是为了要完成一件任务而结合的社会。用 Tönnies 的话说:前者是 Gemeinschaft,后者是 Gesellschaft;用 Durkheim 的话说:前者是“有机的团结”,后者是“机械的团结”。用我们自己的话说,前者是礼俗社会,后者是法理社会。


乡下孩子在教室里认字认不过教授们的孩子,和教授们的孩子在田野里捉蚱蜢捉不过乡下孩子,在意义上是相同的。


古之欲明明德于天下者,先治其国,欲治其国者,先齐其家,欲齐其家者,先修其身……身修而后家齐,家齐而后国治,国治而后天下平。


我们如果要了解西洋的“团体格局”社会中的道德体系,绝不能离开他们的宗教观念的。宗教的虔诚和信赖不但是他们道德观念的来源,而且还是支持行为规范的力量,是团体的象征。在象征着团体的神的观念下,有着两个重要的派生观念:一是每个个人在神前的平等;一是神对每个个人的公道。


以生育社群来担负其他很多的功能,使这社群中各分子的关系的内容也发生了变化。在西洋家庭团体中,夫妇是主轴,夫妇共同经营生育事务,子女在这团体中是配角,他们长成了就离开这团体。在他们,政治、经济、宗教等功能有其他团体来担负,不在家庭的分内。夫妇成为主轴,两性之间的感情是凝合的力量。两性感情的发展,使他们的家庭成了获取生活上安慰的中心。


在我们的乡土社会中,家的性质在这方面有着显著的差别。我们的家既是个绵续性的事业社群,它的主轴是在父子之间,在婆媳之间,是纵的,不是横的。夫妇成了配轴。配轴虽则和主轴一样并不是临时性的,但是这两轴却都被事业的需要而排斥了普通的感情。我所谓普通的感情是和纪律相对照的。一切事业都不能脱离效率的考虑。求效率就得讲纪律;纪律排斥私情的宽容。在中国的家庭里有家法,在夫妇间得相敬,女子有着三从四德的标准,亲子间讲究负责和服从。这些都是事业社群里的特色。


所谓感情相当于普通所谓激动,动了情,甚至说动了火。用火来形容感情,就在指这动的势和紧张的状态,从社会关系上说感情是具有破坏和创造作用的。感情的激动改变了原有的关系。这也就是说,如果要维持固定的社会关系,就得避免感情的激动。其实,感情的淡漠是稳定的社会关系的一种表示。


Oswald Spengler 在“西方陆沉论”里曾说西洋曾有两种文化模式:一种他称作阿波罗式的(Apollonian);一种他称作浮士德式的(Faustian)。阿波罗式的文化认定宇宙的安排有一个完善的秩序,这个秩序超于人力的创造,人不过是去接受它,安于其位,维持它;但是人连维持它的力量都没有,天堂遗失了,黄金时代过去了。这是西方古典的精神。现代的文化却是浮士德式的。他们把冲突看成存在的基础,生命是阻碍的克服;没有了阻碍,生命也就失去了意义。他们把前途看成无尽的创造过程,不断的变。


恋爱是一项探险,是对未知的摸索。这和友谊不同,友谊是可以停止在某种程度上的了解,恋爱却是不停止的,是追求。这种企图并不以实用为目的,是生活经验的创造,也可以说是生命意义的创造,但不是经济的生产,不是个事业。恋爱的持续依赖于推陈出新,不断地克服阻碍,也是不断地发现阻碍,要得到的是这一个过程,而不是这过程的结果。从结果说可以是毫无成就的。非但毫无成就,而且使社会关系不能稳定,使依赖于社会关系的事业不能顺利经营。


社会秩序范围着个性,为了秩序的维持,一切足以引起破坏秩序的要素都被遏制着。男女之间的鸿沟从此筑下。乡土社会是个男女有别的社会,也是个安稳的社会。


说人类行为是有动机的包含着两个意思:一是人类对于自己的行为是可以控制的,要这样做就这样做,不要这样做就不这样做,也就是所谓意志;一是人类在取舍之间有所根据,这根据就是欲望。欲望规定了人类行为的方向,就是上面所说要这样要那样的“要”。这个“要”是先于行为的,要得了,也就是欲望满足了,我们会因之觉得愉快,欲望不满足,要而得不到,周身不舒服。


欲望如果要能通过意志对行为有所控制,它必须是行为者所自觉的。自觉是说行为者知道自己要的是什么。

',25),o=[p];function i(c,h){return t(),a("div",null,o)}const m=e(n,[["render",i],["__file","019-rural-china.html.vue"]]),d=JSON.parse(`{"path":"/reading/2023/019-rural-china.html","title":"乡土中国","lang":"zh-CN","frontmatter":{"date":"2023-12-08T00:00:00.000Z","description":"乡土中国 费孝通 在社会学里,我们常分出两种不同性质的社会:一种并没有具体目的,只是因为在一起生长而发生的社会;一种是为了要完成一件任务而结合的社会。用 Tönnies 的话说:前者是 Gemeinschaft,后者是 Gesellschaft;用 Durkheim 的话说:前者是“有机的团结”,后者是“机械的团结”。用我们自己的话说,前者是礼俗社会,...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/019-rural-china.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"乡土中国"}],["meta",{"property":"og:description","content":"乡土中国 费孝通 在社会学里,我们常分出两种不同性质的社会:一种并没有具体目的,只是因为在一起生长而发生的社会;一种是为了要完成一件任务而结合的社会。用 Tönnies 的话说:前者是 Gemeinschaft,后者是 Gesellschaft;用 Durkheim 的话说:前者是“有机的团结”,后者是“机械的团结”。用我们自己的话说,前者是礼俗社会,..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-13T08:33:25.000Z"}],["meta",{"property":"article:published_time","content":"2023-12-08T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-13T08:33:25.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"乡土中国\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-12-08T00:00:00.000Z\\",\\"dateModified\\":\\"2024-06-13T08:33:25.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1702002287000,"updatedTime":1718267605000},"readingTime":{"minutes":4.84,"words":1453},"filePathRelative":"reading/2023/019-rural-china.md","localizedDate":"2023年12月8日","autoDesc":true,"excerpt":"\\n
\\n

费孝通

\\n
\\n

在社会学里,我们常分出两种不同性质的社会:一种并没有具体目的,只是因为在一起生长而发生的社会;一种是为了要完成一件任务而结合的社会。用 Tönnies 的话说:前者是 Gemeinschaft,后者是 Gesellschaft;用 Durkheim 的话说:前者是“有机的团结”,后者是“机械的团结”。用我们自己的话说,前者是礼俗社会,后者是法理社会。

\\n
\\n

乡下孩子在教室里认字认不过教授们的孩子,和教授们的孩子在田野里捉蚱蜢捉不过乡下孩子,在意义上是相同的。

\\n
\\n

古之欲明明德于天下者,先治其国,欲治其国者,先齐其家,欲齐其家者,先修其身……身修而后家齐,家齐而后国治,国治而后天下平。

"}`);export{m as comp,d as data}; diff --git a/assets/021-addicted.html-D8v-7oR9.js b/assets/021-addicted.html-PVwbcCu-.js similarity index 99% rename from assets/021-addicted.html-D8v-7oR9.js rename to assets/021-addicted.html-PVwbcCu-.js index 97eed229b..46e3bc347 100644 --- a/assets/021-addicted.html-D8v-7oR9.js +++ b/assets/021-addicted.html-PVwbcCu-.js @@ -1 +1 @@ -import{_ as p}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as e,c as r,a as t}from"./app-BLyK9ZJy.js";const h={},o=t('

上瘾:让用户养成使用习惯的四大产品逻辑

(美)尼尔·埃亚尔 瑞安·胡佛

撩动了用户情感的产品,就占据了用户的心智。所有的外在阻碍,都不足挂齿了。


产品不只是满足功能,还要反映人性。好的产品是一件作品,好的技术几近于艺术。产品成为科技与人文交融的产物,所以好的产品一定建基于深刻的艺术品位与心理学原理。


所谓的消费升级,就是个人愿意付出更高的成本购买与自我价值相匹配的产品。购买即是一种身份的认同,购买也是一种意见表达。

而能够代表自我价值、身份认同、意见表达的东西,只能是产品本身。产能、渠道,消费者不感兴趣。他们感兴趣的,是产品好不好。好,就用得多、反复买,还推荐给朋友;不好,就用得少、不再买、告诉朋友别买。简单粗暴。


是什么让产品脱颖而出?脱颖而出的产品中,又是什么决定了它们持续走红或销声匿迹?

答案是:当产品进入了用户的“习惯区间”,产品就获得了持续的生命力。


一个极其简明的上瘾模型(the Hook Model):触发——行动——多变的酬赏——投入。


工业时代,用户与产品的关系,好像包办婚姻,买什么产品由厂家和渠道决定,由不得你爱不爱。互联网时代,用户与产品的关系,完全是自由恋爱,爱谁不爱谁,用户有极大的自主权。


集网络连接、海量数据和超快网速这三者于一身的技术,会为人们培养健康的行为习惯提供前所未有的机遇。


要想改变用户的习惯,仅凭说服对方尝试新事物,比如让他们生平头一遭打开网页,是远远不够的,你还得引导他们在今后很长一段时间内——最好是他们的余生——重复这个行为。


首先需要明确的是,我们的大脑往往会沿用既有的思维模式,因此新的行为方式总是难以持久。实验表明,实验室里的动物在习惯某种新的行为方式之后,会随着时间的推移发生行为回转,重拾过去的老一套。就像会计学里的一个术语“后进先出”所描述的,最新收获的东西往往最先失去。

要想让新习惯在用户的生活中生根发芽,就必须增加它的出现频率。


要想让这些不经常发生的行为演变为习惯,那就必须让用户深切感受到它的用处,要么能为你带来快乐,要么能帮你解除痛苦。


要想打造习惯养成类产品,企业务必认真考虑两个因素。第一,频率,即某种行为多久发生一次;第二,可感知用途,即在用户心中,该产品与其他产品相比多出了哪些用途和好处。


若某种行为发生的频率足够高,被感知到的用途足够多,就会进入我们的“习惯区间”,进而演变为一种默认的行为方式。这两个因素缺一不可,如果有任何一方面欠缺,某种行为发展为习惯的可能性就会降低。


凡是成功的创新都有一个共性:能够解决问题。这看似明确,实则复杂,因为人们总是对新产品应该解决何种问题各执一词。


在你确定这些全世界数一数二的科技公司兜售的究竟是维生素还是止痛药之前,请先明确一点:如果你因为无法实施某种行为而感到痛苦,那说明习惯业已形成。

在此务必澄清一下“痛苦”这个概念,因为它频繁地出现在商学院的讲堂和营销学的书籍上,多少有些言过其实。实际上,我们所要描述的体验更接近于“痒”,它是潜伏于我们内心的一种渴求,当这种渴求得不到满足时,不适感就会出现。那些让我们养成某种习惯的产品正好可以缓解这种不适感。比起听之任之的做法,利用技术或产品来“挠痒痒”能够更快地满足我们的渴求。一旦我们对某种技术或产品产生依赖,那它就是唯一的灵丹妙药了。

科技公司提供的服务在初期更像是锦上添花的维生素,可一旦它成为用户日常生活的一部分,那就会像止痛药一样抚平人们内心的“痒”。

习惯养成类产品会在用户的大脑中建立一种联结,使他们一感觉到痛痒就会想要使用这个产品。


习惯养成类产品能够改变用户的行为,使他们无须外部诱因就开始从事某种活动。其目的就是让用户一而再,再而三地自觉亲近这个产品,而不需要广告和促销这种外显的行动召唤。


所谓用户终身价值,是指一个用户在其有生之年忠实使用某个产品的过程中为其付出的投资总额。当用户对某个产品产生依赖时,使用时间会延长,使用频率也会增加,最终的用户终身价值因而也会更高。


用户对某个产品形成使用习惯后,他们对该产品的依赖性就会增强,对价格的敏感度则会降低。


从产品中不断发现惊喜的那些用户往往乐于和朋友分享这份感受。他们越是频繁地使用产品,就越有可能邀请朋友们与之共享。产品的忠实粉丝最终会成为品牌的推广者,他们会为你的公司做免费的宣传,让你在不费一兵一卒的情况下就收拢新客户。


“良性循环”的法则:使用频率越高,病毒式增长速度就越快。正如从科技企业经营者转型为风险资本家的戴维·斯科克所指出的,“提高增长速度最关键的因素就是‘病毒循环周期’”。


约翰·古维尔是哈佛大学商学院市场营销学教授,他在一篇经典的论文中明确指出:“许多创新都以失败告终,因为用户总是过分地倚重原有产品,而商家却总是高估新产品。”

古维尔认为,新产品要想在市场上站稳脚跟,略胜一筹是远远不够的,必须要有绝对优势。缘何如此?因为原有产品的影响已经深入骨髓,要想撼动用户的使用习惯,新的产品或服务就一定要有摧枯拉朽的能量。古维尔指出,即便某个新产品优势显著,但如果与用户业已形成的习惯冲突太过激烈,那就注定无法成功。


选择项越多,用户用于权衡的时间就越久。太多的或者无关的选项会让他们游移不定,不知所措,甚至就此罢手。减少有关下一步行动的思考时间,这会提高某种行为发展为无意识习惯的可能性。


习惯养成类产品的终极目的就是获得用户的关注,消除用户的烦恼,使他们将某种产品或服务默认为温暖心灵的良方。


企业要做的头一件事不是苦思冥想打造产品的特色,而是要弄清楚用户在情感层面存在哪些软肋或困扰。


通过言语交流来让用户透露他们的所思所想似乎并不现实,因为他们自己也不一定明确知道是何种情感在背后发挥作用。生活中我们经常会遇到口是心非的人,说一套,做一套。所以说,言语不一定能反映出最真实的想法。

只有当你的研究重心放在人们的实际行为(看关于猫的视频)而非内心愿景(拍摄具有影院效果的家庭录像)上时,你才会发现更多的可能性。


所谓习惯,是指人们在几乎无意识的情况下做出的举动。一种行为的复杂程度越低,无论是体力上的还是脑力上的,被人们重复的可能性就越大。


福格认为,要使人们行动起来,三个要素必不可少。第一,充分的动机;第二,完成这一行为的能力;第三,促使人们付诸行动的触发。


触发提醒你采取行动,而动机则决定你是否愿意采取行动。爱德华·德西博士是罗切斯特大学的心理学教授,同时也是“自我决定论”的开创者,他对动机的定义是:行动时拥有的热情。

虽然心理学界对于“何为动机”这个话题各执一词,但是福格博士认为,能够驱使我们采取行动的核心动机不外乎三种。

第一种,追求快乐,逃避痛苦;第二种,追求希望,逃避恐惧;第三种,追求认同,逃避排斥。他指出,所有人的行动都受到这三组核心动机的影响,每一组中的两个要素就像是杠杆的两端,其上下摆动的幅度会导致人们做出某种举动的可能性相应地增加或者减少。


当你使用某个产品时所需花费的步骤(在上述例子中,这个步骤指的是接入网络、登录网页)能被缩减或是优化时,用户使用它的频率就会增加。


多变的酬赏不是神仙水,设计者不能因为它的存在而期望产品在瞬间绽放光芒。在设计酬赏时,务必要考虑到用户使用该产品的原因,确保它与用户的内部触发和使用动机相吻合。


社交因素事实上是推动人们使用某项服务并将其推荐给亲朋好友的最重要因素。


最成功的消费者技术——能够改变数以亿计用户生活习惯的技术——从未“强迫”我们去使用它。

要想对用户的行为习惯产生影响,必须让产品处于对方的可控范围内,必须让他们心甘情愿地使用,而不是被迫为之。


驱使我们采取行动的,并不是酬赏本身,而是渴望酬赏时产生的那份迫切需要。


多变的酬赏主要表现为三种形式:社交酬赏,猎物酬赏,自我酬赏。


如果人们效仿的对象与他们自己很相似,或者比他们的经验略为丰富时,他们就特别容易将对方视作行为典范。


人类是社会化的物种,彼此依存。社交酬赏,抑或说部落酬赏,源自我们和他人之间的互动关系。为了让自己觉得被接纳、被认同、受重视、受喜爱,我们的大脑会自动调试以获得酬赏。


这就是“多变的酬赏”中的第二种类型:猎物酬赏。对具体物品——比如食物和生活必备品——的需求,是人类最基本的需求之一。

早在电脑问世之前,人们就已经开始从猎物身上获取酬赏。但时至今日,我们可以看到数不清的事例都与“猎物酬赏”心理有关。人们追逐资源,追逐信息,其执着程度不亚于追逐猎物的桑人猎手。


“多变的酬赏”的最后一种类型,体现了人们对于个体愉悦感的渴望。在目标驱动下,我们会去克服障碍,即便仅仅是因为这个过程能带来满足感。很多时候,完成任务的强烈渴望是促使人们继续某种行为的主要因素。


在电子邮件业务中,社交酬赏、猎物酬赏、自我酬赏这三种类型都体现得淋漓尽致。想想看,是什么原因推动我们在无意识中打开邮件?首先,我们不确定会收到哪些人的邮件。出于礼貌,我们会回信,渴望与他人进行良性的互动(社交酬赏)。同时,我们也会对邮件中的内容充满好奇,想知道是否与自己职业发展的大计有关。查收邮件因而成了我们把握机会或是规避风险的一种渠道(猎物酬赏)。最后一点,邮件本身就是一项任务,我们得对它加以筛选、分类和整理。邮件数量会上下波动,这种不确定性会使我们觉得有义务让眼前的邮箱置于自己的操控之中(自我酬赏)。


要想让用户产生心理联想并自动采取行动,首先必须让他们对产品有所投入。


新行为的发生频次是形成一种新习惯的主导性因素。

形成新习惯的第二大要素是行为主体对新行为的态度变化。

一种行为要想变成日常习惯,该行为必须有很高的发生频次和可感知到的实用性。

要使用户的态度发生改变,必须先改变用户看待新行为的方式。

用户对某件产品或某项服务投入的时间和精力越多,对该产品或服务就越重视。事实上,有充分证据表明,用户投入的多寡与其热爱某项事物的程度成正比。


很多企业会利用用户的投入给自己的产品赋予更高的价值,其原因仅仅是用户曾为产品付出过努力,对产品投入了自己的劳动。


我们对事物的投入越多,就越有可能认为它有价值,也越有可能和自己过去的行为保持一致。


现在你可以利用上瘾模型询问自己关于如何让用户上瘾的五个基本问题:
1.用户真正需要什么?你的产品可以缓解什么样的痛苦?(内部触发)
2.你靠什么吸引用户使用你的服务?(外部触发)
3.期待酬赏的时候,用户可采取的最简单的操作行为是什么?如何简化产品使该操作行为更轻松容易?(行动)
4.用户是满足于所得酬赏,还是想要更多酬赏?(多变的酬赏)
5.用户对你的产品做出了哪些“点滴投入”?这些投入是否有助于加载下一个触发并储存价值,使产品质量在使用过程中获得提升?(投入)


我这里有一个叫作“操控模式”的简单的决策支持工具,可供企业家、员工以及投资者在产品出厂前或道德行为守则写好之前使用。该操纵模式并不打算回答诸如哪些企业讲道德或哪些企业会取得成功这样的问题,也不说明哪些技术能或不能培养用户使用习惯,而是旨在帮助你回答问题“我应该去牢牢抓住我的用户吗”,而不是“我能牢牢抓住我的用户吗”。

要使用该操控模式,制造商需要问两个问题,第一个问题是“我自己会使用这个产品吗”,第二个问题“该产品会帮助用户大大提高其生活质量吗”。


极大提高用户的生活质量是一个艰巨的任务,而且要想开发出一个你自己并不使用却能打动人心的产品困难无比。这会置设计者于一个极其不利的地位,因为他们和自己的产品以及用户之间是割裂关系。


有时候,产品制造者只是想为用户带来乐趣。如果某项成瘾类产品的开发者自己会使用该产品,但却无法问心无愧地说该产品能提高用户的生活质量,那么他就是在娱乐用户。


娱乐是一个以流行为主导的行当。面对刺激,大脑的反应是获取越多越好,对层出不穷的新奇事物永远充满渴望。在短暂欲望的基础之上建立一项事业,类似于在一个不停运转的跑步机上奔跑:你必须跟上自己用户不断变化的需求。在这一象限中,可持续性业务不仅仅是游戏、歌曲或者图书这些商品,利润来自一套有效的配销体系,该体系会在这些商品尚炙手可热的时候将其推向市场,与此同时保证产品补给线备有充足的新鲜产品,以满足热切用户的需求。


开发出一款产品之后,如果设计者不相信该产品能提高用户的生活质量,而且他自己也不会使用,这就叫剥削利用。去掉上述两个条件,设计师牢牢吊住用户的唯一理由大概就是赚钱。让用户对那些不断榨取他们钱财的行为上瘾肯定是一条生财之道,正所谓哪里有钱,哪里就有赚钱的人。


你是一名健康习惯推广者、兜售商、娱乐用户者,还是经销商?
〇 健康习惯推广者会使用自己开发的产品,并相信该产品可极大提高人们的生活质量。他们获得成功的概率最高,因为他们最了解其用户的需求。
〇 兜售商相信自己的产品可极大提高人们的生活质量,但自己并不使用该产品。他们必须谨防骄傲自大和脱离实际,因为他们在为自己并不了解的人提供解决方案。
〇 娱乐用户者会使用自己的产品,但并不相信该产品可提高人们的生活质量。他们可以获得成功,但在某种程度上无法提高他人的生活质量,其产品往往缺乏持久力。
〇 经销商既不使用产品,也不相信该产品可提高人们的生活质量。他们获得长久成功的概率最低,在道德上往往处于不利地位。


创业极其艰苦,只有最幸运的创业者才能坚守到成功。如果创业只为名利,很可能两者都得不到。如果为意义而创业,那就不可能失败。


福格行为模式(第三章)强调,要令一种行为发生,用户必须接收到一个触发,并有足够的动机和能力去完成该行为。一旦触发启动,其他两个要素缺少任意一个或程度不够,该行为都将无法发生。


只要将一种目的性行为变得越轻松容易,该行为出现的频率就越高。

',122),a=[o];function n(c,i){return e(),r("div",null,a)}const s=p(h,[["render",n],["__file","021-addicted.html.vue"]]),m=JSON.parse(`{"path":"/reading/2023/021-addicted.html","title":"上瘾:让用户养成使用习惯的四大产品逻辑","lang":"zh-CN","frontmatter":{"date":"2023-12-18T00:00:00.000Z","description":"上瘾:让用户养成使用习惯的四大产品逻辑 (美)尼尔·埃亚尔 瑞安·胡佛 撩动了用户情感的产品,就占据了用户的心智。所有的外在阻碍,都不足挂齿了。 产品不只是满足功能,还要反映人性。好的产品是一件作品,好的技术几近于艺术。产品成为科技与人文交融的产物,所以好的产品一定建基于深刻的艺术品位与心理学原理。 所谓的消费升级,就是个人愿意付出更高的成本购买与自我...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/021-addicted.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"上瘾:让用户养成使用习惯的四大产品逻辑"}],["meta",{"property":"og:description","content":"上瘾:让用户养成使用习惯的四大产品逻辑 (美)尼尔·埃亚尔 瑞安·胡佛 撩动了用户情感的产品,就占据了用户的心智。所有的外在阻碍,都不足挂齿了。 产品不只是满足功能,还要反映人性。好的产品是一件作品,好的技术几近于艺术。产品成为科技与人文交融的产物,所以好的产品一定建基于深刻的艺术品位与心理学原理。 所谓的消费升级,就是个人愿意付出更高的成本购买与自我..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-02-28T14:53:56.000Z"}],["meta",{"property":"article:published_time","content":"2023-12-18T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-02-28T14:53:56.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"上瘾:让用户养成使用习惯的四大产品逻辑\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-12-18T00:00:00.000Z\\",\\"dateModified\\":\\"2024-02-28T14:53:56.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1702866700000,"updatedTime":1709132036000},"readingTime":{"minutes":16.59,"words":4977},"filePathRelative":"reading/2023/021-addicted.md","localizedDate":"2023年12月18日","autoDesc":true,"excerpt":"\\n
\\n

(美)尼尔·埃亚尔 瑞安·胡佛

\\n
\\n

撩动了用户情感的产品,就占据了用户的心智。所有的外在阻碍,都不足挂齿了。

\\n
\\n

产品不只是满足功能,还要反映人性。好的产品是一件作品,好的技术几近于艺术。产品成为科技与人文交融的产物,所以好的产品一定建基于深刻的艺术品位与心理学原理。

\\n
\\n

所谓的消费升级,就是个人愿意付出更高的成本购买与自我价值相匹配的产品。购买即是一种身份的认同,购买也是一种意见表达。

\\n

而能够代表自我价值、身份认同、意见表达的东西,只能是产品本身。产能、渠道,消费者不感兴趣。他们感兴趣的,是产品好不好。好,就用得多、反复买,还推荐给朋友;不好,就用得少、不再买、告诉朋友别买。简单粗暴。

"}`);export{s as comp,m as data}; +import{_ as p}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as e,c as r,a as t}from"./app-BSa8cFh0.js";const h={},o=t('

上瘾:让用户养成使用习惯的四大产品逻辑

(美)尼尔·埃亚尔 瑞安·胡佛

撩动了用户情感的产品,就占据了用户的心智。所有的外在阻碍,都不足挂齿了。


产品不只是满足功能,还要反映人性。好的产品是一件作品,好的技术几近于艺术。产品成为科技与人文交融的产物,所以好的产品一定建基于深刻的艺术品位与心理学原理。


所谓的消费升级,就是个人愿意付出更高的成本购买与自我价值相匹配的产品。购买即是一种身份的认同,购买也是一种意见表达。

而能够代表自我价值、身份认同、意见表达的东西,只能是产品本身。产能、渠道,消费者不感兴趣。他们感兴趣的,是产品好不好。好,就用得多、反复买,还推荐给朋友;不好,就用得少、不再买、告诉朋友别买。简单粗暴。


是什么让产品脱颖而出?脱颖而出的产品中,又是什么决定了它们持续走红或销声匿迹?

答案是:当产品进入了用户的“习惯区间”,产品就获得了持续的生命力。


一个极其简明的上瘾模型(the Hook Model):触发——行动——多变的酬赏——投入。


工业时代,用户与产品的关系,好像包办婚姻,买什么产品由厂家和渠道决定,由不得你爱不爱。互联网时代,用户与产品的关系,完全是自由恋爱,爱谁不爱谁,用户有极大的自主权。


集网络连接、海量数据和超快网速这三者于一身的技术,会为人们培养健康的行为习惯提供前所未有的机遇。


要想改变用户的习惯,仅凭说服对方尝试新事物,比如让他们生平头一遭打开网页,是远远不够的,你还得引导他们在今后很长一段时间内——最好是他们的余生——重复这个行为。


首先需要明确的是,我们的大脑往往会沿用既有的思维模式,因此新的行为方式总是难以持久。实验表明,实验室里的动物在习惯某种新的行为方式之后,会随着时间的推移发生行为回转,重拾过去的老一套。就像会计学里的一个术语“后进先出”所描述的,最新收获的东西往往最先失去。

要想让新习惯在用户的生活中生根发芽,就必须增加它的出现频率。


要想让这些不经常发生的行为演变为习惯,那就必须让用户深切感受到它的用处,要么能为你带来快乐,要么能帮你解除痛苦。


要想打造习惯养成类产品,企业务必认真考虑两个因素。第一,频率,即某种行为多久发生一次;第二,可感知用途,即在用户心中,该产品与其他产品相比多出了哪些用途和好处。


若某种行为发生的频率足够高,被感知到的用途足够多,就会进入我们的“习惯区间”,进而演变为一种默认的行为方式。这两个因素缺一不可,如果有任何一方面欠缺,某种行为发展为习惯的可能性就会降低。


凡是成功的创新都有一个共性:能够解决问题。这看似明确,实则复杂,因为人们总是对新产品应该解决何种问题各执一词。


在你确定这些全世界数一数二的科技公司兜售的究竟是维生素还是止痛药之前,请先明确一点:如果你因为无法实施某种行为而感到痛苦,那说明习惯业已形成。

在此务必澄清一下“痛苦”这个概念,因为它频繁地出现在商学院的讲堂和营销学的书籍上,多少有些言过其实。实际上,我们所要描述的体验更接近于“痒”,它是潜伏于我们内心的一种渴求,当这种渴求得不到满足时,不适感就会出现。那些让我们养成某种习惯的产品正好可以缓解这种不适感。比起听之任之的做法,利用技术或产品来“挠痒痒”能够更快地满足我们的渴求。一旦我们对某种技术或产品产生依赖,那它就是唯一的灵丹妙药了。

科技公司提供的服务在初期更像是锦上添花的维生素,可一旦它成为用户日常生活的一部分,那就会像止痛药一样抚平人们内心的“痒”。

习惯养成类产品会在用户的大脑中建立一种联结,使他们一感觉到痛痒就会想要使用这个产品。


习惯养成类产品能够改变用户的行为,使他们无须外部诱因就开始从事某种活动。其目的就是让用户一而再,再而三地自觉亲近这个产品,而不需要广告和促销这种外显的行动召唤。


所谓用户终身价值,是指一个用户在其有生之年忠实使用某个产品的过程中为其付出的投资总额。当用户对某个产品产生依赖时,使用时间会延长,使用频率也会增加,最终的用户终身价值因而也会更高。


用户对某个产品形成使用习惯后,他们对该产品的依赖性就会增强,对价格的敏感度则会降低。


从产品中不断发现惊喜的那些用户往往乐于和朋友分享这份感受。他们越是频繁地使用产品,就越有可能邀请朋友们与之共享。产品的忠实粉丝最终会成为品牌的推广者,他们会为你的公司做免费的宣传,让你在不费一兵一卒的情况下就收拢新客户。


“良性循环”的法则:使用频率越高,病毒式增长速度就越快。正如从科技企业经营者转型为风险资本家的戴维·斯科克所指出的,“提高增长速度最关键的因素就是‘病毒循环周期’”。


约翰·古维尔是哈佛大学商学院市场营销学教授,他在一篇经典的论文中明确指出:“许多创新都以失败告终,因为用户总是过分地倚重原有产品,而商家却总是高估新产品。”

古维尔认为,新产品要想在市场上站稳脚跟,略胜一筹是远远不够的,必须要有绝对优势。缘何如此?因为原有产品的影响已经深入骨髓,要想撼动用户的使用习惯,新的产品或服务就一定要有摧枯拉朽的能量。古维尔指出,即便某个新产品优势显著,但如果与用户业已形成的习惯冲突太过激烈,那就注定无法成功。


选择项越多,用户用于权衡的时间就越久。太多的或者无关的选项会让他们游移不定,不知所措,甚至就此罢手。减少有关下一步行动的思考时间,这会提高某种行为发展为无意识习惯的可能性。


习惯养成类产品的终极目的就是获得用户的关注,消除用户的烦恼,使他们将某种产品或服务默认为温暖心灵的良方。


企业要做的头一件事不是苦思冥想打造产品的特色,而是要弄清楚用户在情感层面存在哪些软肋或困扰。


通过言语交流来让用户透露他们的所思所想似乎并不现实,因为他们自己也不一定明确知道是何种情感在背后发挥作用。生活中我们经常会遇到口是心非的人,说一套,做一套。所以说,言语不一定能反映出最真实的想法。

只有当你的研究重心放在人们的实际行为(看关于猫的视频)而非内心愿景(拍摄具有影院效果的家庭录像)上时,你才会发现更多的可能性。


所谓习惯,是指人们在几乎无意识的情况下做出的举动。一种行为的复杂程度越低,无论是体力上的还是脑力上的,被人们重复的可能性就越大。


福格认为,要使人们行动起来,三个要素必不可少。第一,充分的动机;第二,完成这一行为的能力;第三,促使人们付诸行动的触发。


触发提醒你采取行动,而动机则决定你是否愿意采取行动。爱德华·德西博士是罗切斯特大学的心理学教授,同时也是“自我决定论”的开创者,他对动机的定义是:行动时拥有的热情。

虽然心理学界对于“何为动机”这个话题各执一词,但是福格博士认为,能够驱使我们采取行动的核心动机不外乎三种。

第一种,追求快乐,逃避痛苦;第二种,追求希望,逃避恐惧;第三种,追求认同,逃避排斥。他指出,所有人的行动都受到这三组核心动机的影响,每一组中的两个要素就像是杠杆的两端,其上下摆动的幅度会导致人们做出某种举动的可能性相应地增加或者减少。


当你使用某个产品时所需花费的步骤(在上述例子中,这个步骤指的是接入网络、登录网页)能被缩减或是优化时,用户使用它的频率就会增加。


多变的酬赏不是神仙水,设计者不能因为它的存在而期望产品在瞬间绽放光芒。在设计酬赏时,务必要考虑到用户使用该产品的原因,确保它与用户的内部触发和使用动机相吻合。


社交因素事实上是推动人们使用某项服务并将其推荐给亲朋好友的最重要因素。


最成功的消费者技术——能够改变数以亿计用户生活习惯的技术——从未“强迫”我们去使用它。

要想对用户的行为习惯产生影响,必须让产品处于对方的可控范围内,必须让他们心甘情愿地使用,而不是被迫为之。


驱使我们采取行动的,并不是酬赏本身,而是渴望酬赏时产生的那份迫切需要。


多变的酬赏主要表现为三种形式:社交酬赏,猎物酬赏,自我酬赏。


如果人们效仿的对象与他们自己很相似,或者比他们的经验略为丰富时,他们就特别容易将对方视作行为典范。


人类是社会化的物种,彼此依存。社交酬赏,抑或说部落酬赏,源自我们和他人之间的互动关系。为了让自己觉得被接纳、被认同、受重视、受喜爱,我们的大脑会自动调试以获得酬赏。


这就是“多变的酬赏”中的第二种类型:猎物酬赏。对具体物品——比如食物和生活必备品——的需求,是人类最基本的需求之一。

早在电脑问世之前,人们就已经开始从猎物身上获取酬赏。但时至今日,我们可以看到数不清的事例都与“猎物酬赏”心理有关。人们追逐资源,追逐信息,其执着程度不亚于追逐猎物的桑人猎手。


“多变的酬赏”的最后一种类型,体现了人们对于个体愉悦感的渴望。在目标驱动下,我们会去克服障碍,即便仅仅是因为这个过程能带来满足感。很多时候,完成任务的强烈渴望是促使人们继续某种行为的主要因素。


在电子邮件业务中,社交酬赏、猎物酬赏、自我酬赏这三种类型都体现得淋漓尽致。想想看,是什么原因推动我们在无意识中打开邮件?首先,我们不确定会收到哪些人的邮件。出于礼貌,我们会回信,渴望与他人进行良性的互动(社交酬赏)。同时,我们也会对邮件中的内容充满好奇,想知道是否与自己职业发展的大计有关。查收邮件因而成了我们把握机会或是规避风险的一种渠道(猎物酬赏)。最后一点,邮件本身就是一项任务,我们得对它加以筛选、分类和整理。邮件数量会上下波动,这种不确定性会使我们觉得有义务让眼前的邮箱置于自己的操控之中(自我酬赏)。


要想让用户产生心理联想并自动采取行动,首先必须让他们对产品有所投入。


新行为的发生频次是形成一种新习惯的主导性因素。

形成新习惯的第二大要素是行为主体对新行为的态度变化。

一种行为要想变成日常习惯,该行为必须有很高的发生频次和可感知到的实用性。

要使用户的态度发生改变,必须先改变用户看待新行为的方式。

用户对某件产品或某项服务投入的时间和精力越多,对该产品或服务就越重视。事实上,有充分证据表明,用户投入的多寡与其热爱某项事物的程度成正比。


很多企业会利用用户的投入给自己的产品赋予更高的价值,其原因仅仅是用户曾为产品付出过努力,对产品投入了自己的劳动。


我们对事物的投入越多,就越有可能认为它有价值,也越有可能和自己过去的行为保持一致。


现在你可以利用上瘾模型询问自己关于如何让用户上瘾的五个基本问题:
1.用户真正需要什么?你的产品可以缓解什么样的痛苦?(内部触发)
2.你靠什么吸引用户使用你的服务?(外部触发)
3.期待酬赏的时候,用户可采取的最简单的操作行为是什么?如何简化产品使该操作行为更轻松容易?(行动)
4.用户是满足于所得酬赏,还是想要更多酬赏?(多变的酬赏)
5.用户对你的产品做出了哪些“点滴投入”?这些投入是否有助于加载下一个触发并储存价值,使产品质量在使用过程中获得提升?(投入)


我这里有一个叫作“操控模式”的简单的决策支持工具,可供企业家、员工以及投资者在产品出厂前或道德行为守则写好之前使用。该操纵模式并不打算回答诸如哪些企业讲道德或哪些企业会取得成功这样的问题,也不说明哪些技术能或不能培养用户使用习惯,而是旨在帮助你回答问题“我应该去牢牢抓住我的用户吗”,而不是“我能牢牢抓住我的用户吗”。

要使用该操控模式,制造商需要问两个问题,第一个问题是“我自己会使用这个产品吗”,第二个问题“该产品会帮助用户大大提高其生活质量吗”。


极大提高用户的生活质量是一个艰巨的任务,而且要想开发出一个你自己并不使用却能打动人心的产品困难无比。这会置设计者于一个极其不利的地位,因为他们和自己的产品以及用户之间是割裂关系。


有时候,产品制造者只是想为用户带来乐趣。如果某项成瘾类产品的开发者自己会使用该产品,但却无法问心无愧地说该产品能提高用户的生活质量,那么他就是在娱乐用户。


娱乐是一个以流行为主导的行当。面对刺激,大脑的反应是获取越多越好,对层出不穷的新奇事物永远充满渴望。在短暂欲望的基础之上建立一项事业,类似于在一个不停运转的跑步机上奔跑:你必须跟上自己用户不断变化的需求。在这一象限中,可持续性业务不仅仅是游戏、歌曲或者图书这些商品,利润来自一套有效的配销体系,该体系会在这些商品尚炙手可热的时候将其推向市场,与此同时保证产品补给线备有充足的新鲜产品,以满足热切用户的需求。


开发出一款产品之后,如果设计者不相信该产品能提高用户的生活质量,而且他自己也不会使用,这就叫剥削利用。去掉上述两个条件,设计师牢牢吊住用户的唯一理由大概就是赚钱。让用户对那些不断榨取他们钱财的行为上瘾肯定是一条生财之道,正所谓哪里有钱,哪里就有赚钱的人。


你是一名健康习惯推广者、兜售商、娱乐用户者,还是经销商?
〇 健康习惯推广者会使用自己开发的产品,并相信该产品可极大提高人们的生活质量。他们获得成功的概率最高,因为他们最了解其用户的需求。
〇 兜售商相信自己的产品可极大提高人们的生活质量,但自己并不使用该产品。他们必须谨防骄傲自大和脱离实际,因为他们在为自己并不了解的人提供解决方案。
〇 娱乐用户者会使用自己的产品,但并不相信该产品可提高人们的生活质量。他们可以获得成功,但在某种程度上无法提高他人的生活质量,其产品往往缺乏持久力。
〇 经销商既不使用产品,也不相信该产品可提高人们的生活质量。他们获得长久成功的概率最低,在道德上往往处于不利地位。


创业极其艰苦,只有最幸运的创业者才能坚守到成功。如果创业只为名利,很可能两者都得不到。如果为意义而创业,那就不可能失败。


福格行为模式(第三章)强调,要令一种行为发生,用户必须接收到一个触发,并有足够的动机和能力去完成该行为。一旦触发启动,其他两个要素缺少任意一个或程度不够,该行为都将无法发生。


只要将一种目的性行为变得越轻松容易,该行为出现的频率就越高。

',122),a=[o];function n(c,i){return e(),r("div",null,a)}const s=p(h,[["render",n],["__file","021-addicted.html.vue"]]),m=JSON.parse(`{"path":"/reading/2023/021-addicted.html","title":"上瘾:让用户养成使用习惯的四大产品逻辑","lang":"zh-CN","frontmatter":{"date":"2023-12-18T00:00:00.000Z","description":"上瘾:让用户养成使用习惯的四大产品逻辑 (美)尼尔·埃亚尔 瑞安·胡佛 撩动了用户情感的产品,就占据了用户的心智。所有的外在阻碍,都不足挂齿了。 产品不只是满足功能,还要反映人性。好的产品是一件作品,好的技术几近于艺术。产品成为科技与人文交融的产物,所以好的产品一定建基于深刻的艺术品位与心理学原理。 所谓的消费升级,就是个人愿意付出更高的成本购买与自我...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/021-addicted.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"上瘾:让用户养成使用习惯的四大产品逻辑"}],["meta",{"property":"og:description","content":"上瘾:让用户养成使用习惯的四大产品逻辑 (美)尼尔·埃亚尔 瑞安·胡佛 撩动了用户情感的产品,就占据了用户的心智。所有的外在阻碍,都不足挂齿了。 产品不只是满足功能,还要反映人性。好的产品是一件作品,好的技术几近于艺术。产品成为科技与人文交融的产物,所以好的产品一定建基于深刻的艺术品位与心理学原理。 所谓的消费升级,就是个人愿意付出更高的成本购买与自我..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-02-28T14:53:56.000Z"}],["meta",{"property":"article:published_time","content":"2023-12-18T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-02-28T14:53:56.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"上瘾:让用户养成使用习惯的四大产品逻辑\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-12-18T00:00:00.000Z\\",\\"dateModified\\":\\"2024-02-28T14:53:56.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1702866700000,"updatedTime":1709132036000},"readingTime":{"minutes":16.59,"words":4977},"filePathRelative":"reading/2023/021-addicted.md","localizedDate":"2023年12月18日","autoDesc":true,"excerpt":"\\n
\\n

(美)尼尔·埃亚尔 瑞安·胡佛

\\n
\\n

撩动了用户情感的产品,就占据了用户的心智。所有的外在阻碍,都不足挂齿了。

\\n
\\n

产品不只是满足功能,还要反映人性。好的产品是一件作品,好的技术几近于艺术。产品成为科技与人文交融的产物,所以好的产品一定建基于深刻的艺术品位与心理学原理。

\\n
\\n

所谓的消费升级,就是个人愿意付出更高的成本购买与自我价值相匹配的产品。购买即是一种身份的认同,购买也是一种意见表达。

\\n

而能够代表自我价值、身份认同、意见表达的东西,只能是产品本身。产能、渠道,消费者不感兴趣。他们感兴趣的,是产品好不好。好,就用得多、反复买,还推荐给朋友;不好,就用得少、不再买、告诉朋友别买。简单粗暴。

"}`);export{s as comp,m as data}; diff --git a/assets/022-excellent-sheep.html-DseGRHOf.js b/assets/022-excellent-sheep.html-B5hvhU1e.js similarity index 99% rename from assets/022-excellent-sheep.html-DseGRHOf.js rename to assets/022-excellent-sheep.html-B5hvhU1e.js index d910c33b7..a467f7108 100644 --- a/assets/022-excellent-sheep.html-DseGRHOf.js +++ b/assets/022-excellent-sheep.html-B5hvhU1e.js @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as p,c as t,a as r}from"./app-BLyK9ZJy.js";const o={},a=r('

优秀的绵羊

(美)威廉·德雷谢维奇

如果你想让更多的人来参与一个活动,那么一个高效的方法就是提高入门门槛。


申请大学,如齐根所说,有一张统一的申请表格,但是成为音乐家是没有表格可言的。


一旦你做出选择,那么其他的可能性也就消失了。


每个人都从事同样的事,是因为大家都在做同样的事。这种现象就如同我之前的一位学生描述的“三文鱼赛跑”或一位密歇根大学的毕业生所说的“生产线的运输带”。这背后的驱动因素就是“三角欲”:当你观察到众人都在追逐同一样东西的时候,你判断它肯定是有价值的。作家迈克尔·路易斯(Michael Lewis)把这种现象背后的心理称为从众心理——法不责众。这里的“法”是自然界的法,因此大家都会觉得安全。


米勒写道:“当一个孩子追求的是受人肯定甚至被人羡慕,那么这样的需求就是个无底洞,因为它与追求被人爱是没有关系的。”


这就是嫉妒的本质——他人情况愈佳,你的感受愈糟,因为那个佳境并不属于你。


学生是很难觉察到自己的生活其实是受制于他人的,就如同那些父母不承认自己就是“那些”父母一样。


不论盎格鲁-撒克逊贵族主导的录取规则建立的初衷是什么,它是有自己的价值所在的:体育竞技讲究的是培养勇气、无私以及团队精神;艺术展现的是一种文化中的精髓;服务性质的活动的目的是在将来的领导者内心种下服务公众的意识,让领导者学会肩扛重任。

演变到现在,这些精神的体现趋于形式化,如同印第安人的祈雨舞,虽然代代相传,但不过是一套祭神的典礼。学生们之所以会参加体育、艺术或者领导能力的活动,其动力并非源自内心对这些精神的信仰,而是因为这是通向名校的必经之路。这些活动原本是有意义的,但是现在被简化成一种手段:体育竞技讲究的是体能训练;音乐不过是技术上的娴熟;服务他人则等同于做慈善;领导能力无非就是追求位高权重。倘若哪天哈佛的录取要求每个人学会倒立,那么这些高中生也会一如既往不假思索地认真去对待并达到娴熟的程度。这种种活动原本具有很高的内涵,但是现在只不过扮演着傀儡的角色,难怪它们已经失去了自身的意义。


我们要求学生参加课外活动,因此人人都参与活动。我们要求领导能力,因此学生学会角逐岗位;我们赏识那些能够成功克服并满足我们设定的挑战和要求的学生,因此催生了一群投机者,与此同时,我们惩罚那些不参与升学游戏的学生。我们掠夺了孩子的童年以及青春,生产了一批机械化的新一代。


父母在升学游戏中力争平衡所付出的努力,与大学生在顺从大环境的游戏规则和鼓起勇气探索自己的路之间的挣扎有异曲同工之妙,其根源都是这个系统自己已经失去了理智。不管眼前的河流有多湍急,我们都可以选择不再随波逐流,反对举手投降。如果我们想要孩子活出自我,我们必须以自己真实的方式来培养他们。


你参与的事情越多,你能做好的事情就越少,并且最后什么事情都做得不理想。


高校的商业运作导致学校为了满足学生的短期需求,而牺牲了学生的长远利益,这种做法完全违背了教育的本意。相反,我们从保护学生长远利益出发,就不应该迎合学生的喜好。学校要做的是,不断地向学生提问,而且问得最多的问题应该是他们到底追求什么。苏格拉底认为,教学就是帮助个体重新认识自己的真正追求。这听起来有点儿像长辈对晚辈的说教,但事实确实如此。教授的角色应该是导师,不是商家或职员;教育不是要消费的,而是要经历的,而且必须是全身心地投入。令人惋惜的是,现在的大学不再为社会文明的发展护航,它们所扮演的是,满足市场需求的供应商的角色。学校不再了解自己的教育应该是怎样的,而是依赖学生的反馈,把学生的反馈当作它们生产的指南针。


金钱固然重要,它支撑着职业发展、生活保障和国民实力等,但问题是,需要我们关心的仅仅是金钱吗?个人的生活不仅限于工作,而工作不仅限于收入;国家不仅限于它的财富,而教育也不仅限于培养职场能力。我们要千万警惕企业家或政治家的蛊惑,作为一个人,你要相信自己不仅限于能为企业产出多少利润或为国家贡献多少GDP。追究大学的使命是什么,无异于追寻生命的目的,即社会存在的意义以及人存在的意义。


大学承担的责任首先是教给学生如何思考。虽然这听起来像陈词滥调,但是它的实际意义要比我们的认知广和深。思考并不是简单地为某个领域服务(比如如何解决方程式或者如何分析文章),甚至不是获取跨学科的工作能力,思考实质上是培养出思辨的习惯,并把这一习惯运用于实际生活中。简单来讲,学会思考就是以批判的眼光审视身边任何事物,不自以为是,不妄下结论。


在《高等教育》的一篇文章中,作者安德鲁·海克和克劳迪娅·德雷福斯阐述,大学的使命是成就一个更有意思的你。这个使命的前提是,你认为成为“有意思的人”对你最重要,而且你认识到你将是陪伴自己终其一生的唯一人选。但是成为一个有意思的人并非由资历堆积而成的自我实现,比如说同时修4个专业,时任大学报社编辑,参加合唱团,创建非营利组织,并学会烹饪异国他乡的美食等等,这些都不能成就有意思的你,因为“意思”并不是令人印象深刻的,也不是刻意去成就的。一个人之所以有意思,是因为他大量阅读,习惯思考,放缓脚步,投入深度对话,并为自己创建了一个丰满的内心世界。


加拿大小说家玛格丽特·阿特伍德(Margaret Atwood)通过笔下人物感言:“我不如就获得一次教育。这听起来让人感觉教育是物品,如同一件可以获取的女士外衣。”显而易见,这里最大的问题,也是最大的不确定因素是“你”,而不是教育。“教育并不能被获取,反之,教育是在影响或改造你。”“教育是当你忘记了所学的一切之后所存活下来的那一部分。”虽然这是一种通俗的定义,但提出此观点的哈佛大学前校长詹姆斯·B.柯南特的初衷是严肃的:我们在大学的大部分所学必然会慢慢淡忘,剩余的部分其实就是你自己。


《有目标地工作》的作者拉拉·加林斯基在她的书中建议读者向自己提问。“我擅长做什么?”“我关心什么?”“我坚信什么?”诸如此类问题在职业发展的转折点将起到至关重要的作用。年轻人过于实际,急于求成,往往忽视这些问题,就如同威廉·达蒙在《通往目标之路》中提到的,这种做法终将适得其反,因为当一个人不清楚自己到底为什么而奋斗时,他是迷茫的,也将得不到满足感。探讨“生命的意义是什么”可能过于抽象,脱离实际生活,但是当我们尝试改变方式提问,“我的生命意义是什么”,我们很快发现,事实上“自我了解”是一件最实用的工具,它帮助我们找到自我的价值所在并找到合适自己的职业。有谁希望人到中年,蓦然回首,才发现自己必须要赤裸裸地去面对诸多如此尖锐的问题。呜呼哀哉!


核心问题是,我们如何寻找属于自己的使命呢?或者更通俗地说,如何寻找属于自己的热爱呢?年轻人一直习惯于完成近期目标,这样的一个问题令他们措手不及,难以作答。虽然没有完美的答案,但是我不妨提供几个建议。选择做一些自发纯粹的事情,就如同你小时候那样;选择做一些即使没有外在奖励你也会选择做的事情;选择做一些你可以废寝忘食地专注去做的事情;做你最喜欢做的事,不是你认为自己喜欢或者应该喜欢的,而是你的真爱。


创建属于自己的生活的前提是,我们首先要铲除整个教育系统潜移默化地在我们心中播下的那颗种子:恐惧失败。斯坦福大学教授威廉·达蒙一直强调面对失败的态度,绝不能知难而退,反而要学会坦然面对,这就是成长不可或缺的一部分。经历失败最大的收获应该是,让每个人清楚地意识到失败并非世界末日。


作家杰夫·戴尔(Geoff Dyer)精辟地总结了一句话:“为了事情自身而做事情,不计较结果,都是值得的。”事情最终是否能够得到外界的认可不受你控制,但是,你可以掌握在手心里的是事情本身和你对它的热爱——任何工作的最终收获也是如此。最后的评分只有一个:你是否过上了一种自己满意的生活。


绝对不要为你的一辈子做好计划,因为人的变化在两三年内都是巨大的,而且时刻会产生新的想法;你真正可以做到的是,想好现在要做什么。


与其致力于培养领导者,不如致力于培养优秀的公民和思想家。思想家是一群敢于质疑权威,而不是一心追求成为权威的人士,毕竟这里是大学。事实上,最好的领导者就是思想家。思想家指的并非学术界的学者,而是能够以批判的视角来审视自己所处的组织和社会的人士,他们能够把批判落实到实处。思想家具有叛逆思维:不只是解答问题,还提出新的问题;不只是完成任务,还思考任何一件事情的价值所在;不只是勇于冲锋陷阵,更重要的是为公司、行业乃至整个国家制订新的战略方向。拥有领导力不亚于重建自己,最核心的元素是勇气和想象力。最核心的任务是,筹建一个有能力与这个社会现状对抗的个体。


每个人生活中必然有不愉快之事,尤其是年轻人的生活,而且不快的经历是任何个人、机构乃至社会转型进步的基石。只有当你的内心或者灵魂感受到现在的自我和追求的自我之间的差距时,变化才会随之产生。


从长远来看,现实似乎已经印证了美国前财政部部长、哈佛大学校长拉里·萨默斯(Larry Summers)所言:“我们所学的在10年内就会被淘汰。最重要的是学会如何学习。”


我们学习的根本目的不是收集信息,而是论证。大学的教育是熟悉并掌握论证能力的过程:学会收集论据、分析现有的权威观点、预见驳论、合成新的论点、最后义正词严地表达结论。


真正的教育是为了你的长远职业发展而做准备的,绝不是为你的第一份工作做准备的。


不要着急去成为自己心中早已计划好的那个人,而是成为你自己从未遇见的那个人,遇见那个更好的自己!


在很多时候,能够得到公平对待本身就是一种特权。


要想真正懂得与自己背景不同的人,你只能实际进入他们的世界:不是去进行所谓的“奉献”,更不是请人喝杯咖啡,带着屈尊俯就的态度去向“下层人民”嘘寒问暖一番。你要做的,是真正把对方当成与你平等的人。


首先,你要明白,不管别人怎么夸赞你,你都并不比别人更重要。你的痛苦并不比别人的痛苦更值得同情。你的灵魂也并不比别人高尚。如果非要用宗教的说法,我会说,上帝并没有更爱你。


要想在某一领域做到真正优秀,你必须学会专一,集中精力,听从自己的直觉,而不是去在意自己的履历是否“丰富多彩”。


我一直认为,我们需要创造一个公平的环境,要让所有的孩子都有平等的机会进入常春藤盟校。现在我突然意识到,我们真正要做的,不是让所有孩子都能上常春藤盟校,而是要让那些没上常春藤盟校(或任何私立学校)的孩子,也能享受到一流的教育。


事实上,精英阶层是在以牺牲子孙后代的幸福为代价来换取自己今天的地位。孩子们要跨越的障碍越多,他们付出的代价也就越多,能做到这一点的家庭也就越少。不仅如此,需要跨越的障碍越多,他们的人生就会越悲惨。

',68),h=[a];function n(c,i){return p(),t("div",null,h)}const d=e(o,[["render",n],["__file","022-excellent-sheep.html.vue"]]),m=JSON.parse(`{"path":"/reading/2023/022-excellent-sheep.html","title":"优秀的绵羊","lang":"zh-CN","frontmatter":{"date":"2023-12-31T00:00:00.000Z","description":"优秀的绵羊 (美)威廉·德雷谢维奇 如果你想让更多的人来参与一个活动,那么一个高效的方法就是提高入门门槛。 申请大学,如齐根所说,有一张统一的申请表格,但是成为音乐家是没有表格可言的。 一旦你做出选择,那么其他的可能性也就消失了。 每个人都从事同样的事,是因为大家都在做同样的事。这种现象就如同我之前的一位学生描述的“三文鱼赛跑”或一位密歇根大学的毕业生...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/022-excellent-sheep.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"优秀的绵羊"}],["meta",{"property":"og:description","content":"优秀的绵羊 (美)威廉·德雷谢维奇 如果你想让更多的人来参与一个活动,那么一个高效的方法就是提高入门门槛。 申请大学,如齐根所说,有一张统一的申请表格,但是成为音乐家是没有表格可言的。 一旦你做出选择,那么其他的可能性也就消失了。 每个人都从事同样的事,是因为大家都在做同样的事。这种现象就如同我之前的一位学生描述的“三文鱼赛跑”或一位密歇根大学的毕业生..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-02-28T14:53:56.000Z"}],["meta",{"property":"article:published_time","content":"2023-12-31T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-02-28T14:53:56.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"优秀的绵羊\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-12-31T00:00:00.000Z\\",\\"dateModified\\":\\"2024-02-28T14:53:56.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1704009416000,"updatedTime":1709132036000},"readingTime":{"minutes":12.8,"words":3840},"filePathRelative":"reading/2023/022-excellent-sheep.md","localizedDate":"2023年12月31日","autoDesc":true,"excerpt":"\\n
\\n

(美)威廉·德雷谢维奇

\\n
\\n

如果你想让更多的人来参与一个活动,那么一个高效的方法就是提高入门门槛。

\\n
\\n

申请大学,如齐根所说,有一张统一的申请表格,但是成为音乐家是没有表格可言的。

\\n
\\n

一旦你做出选择,那么其他的可能性也就消失了。

\\n
\\n

每个人都从事同样的事,是因为大家都在做同样的事。这种现象就如同我之前的一位学生描述的“三文鱼赛跑”或一位密歇根大学的毕业生所说的“生产线的运输带”。这背后的驱动因素就是“三角欲”:当你观察到众人都在追逐同一样东西的时候,你判断它肯定是有价值的。作家迈克尔·路易斯(Michael Lewis)把这种现象背后的心理称为从众心理——法不责众。这里的“法”是自然界的法,因此大家都会觉得安全。

"}`);export{d as comp,m as data}; +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as p,c as t,a as r}from"./app-BSa8cFh0.js";const o={},a=r('

优秀的绵羊

(美)威廉·德雷谢维奇

如果你想让更多的人来参与一个活动,那么一个高效的方法就是提高入门门槛。


申请大学,如齐根所说,有一张统一的申请表格,但是成为音乐家是没有表格可言的。


一旦你做出选择,那么其他的可能性也就消失了。


每个人都从事同样的事,是因为大家都在做同样的事。这种现象就如同我之前的一位学生描述的“三文鱼赛跑”或一位密歇根大学的毕业生所说的“生产线的运输带”。这背后的驱动因素就是“三角欲”:当你观察到众人都在追逐同一样东西的时候,你判断它肯定是有价值的。作家迈克尔·路易斯(Michael Lewis)把这种现象背后的心理称为从众心理——法不责众。这里的“法”是自然界的法,因此大家都会觉得安全。


米勒写道:“当一个孩子追求的是受人肯定甚至被人羡慕,那么这样的需求就是个无底洞,因为它与追求被人爱是没有关系的。”


这就是嫉妒的本质——他人情况愈佳,你的感受愈糟,因为那个佳境并不属于你。


学生是很难觉察到自己的生活其实是受制于他人的,就如同那些父母不承认自己就是“那些”父母一样。


不论盎格鲁-撒克逊贵族主导的录取规则建立的初衷是什么,它是有自己的价值所在的:体育竞技讲究的是培养勇气、无私以及团队精神;艺术展现的是一种文化中的精髓;服务性质的活动的目的是在将来的领导者内心种下服务公众的意识,让领导者学会肩扛重任。

演变到现在,这些精神的体现趋于形式化,如同印第安人的祈雨舞,虽然代代相传,但不过是一套祭神的典礼。学生们之所以会参加体育、艺术或者领导能力的活动,其动力并非源自内心对这些精神的信仰,而是因为这是通向名校的必经之路。这些活动原本是有意义的,但是现在被简化成一种手段:体育竞技讲究的是体能训练;音乐不过是技术上的娴熟;服务他人则等同于做慈善;领导能力无非就是追求位高权重。倘若哪天哈佛的录取要求每个人学会倒立,那么这些高中生也会一如既往不假思索地认真去对待并达到娴熟的程度。这种种活动原本具有很高的内涵,但是现在只不过扮演着傀儡的角色,难怪它们已经失去了自身的意义。


我们要求学生参加课外活动,因此人人都参与活动。我们要求领导能力,因此学生学会角逐岗位;我们赏识那些能够成功克服并满足我们设定的挑战和要求的学生,因此催生了一群投机者,与此同时,我们惩罚那些不参与升学游戏的学生。我们掠夺了孩子的童年以及青春,生产了一批机械化的新一代。


父母在升学游戏中力争平衡所付出的努力,与大学生在顺从大环境的游戏规则和鼓起勇气探索自己的路之间的挣扎有异曲同工之妙,其根源都是这个系统自己已经失去了理智。不管眼前的河流有多湍急,我们都可以选择不再随波逐流,反对举手投降。如果我们想要孩子活出自我,我们必须以自己真实的方式来培养他们。


你参与的事情越多,你能做好的事情就越少,并且最后什么事情都做得不理想。


高校的商业运作导致学校为了满足学生的短期需求,而牺牲了学生的长远利益,这种做法完全违背了教育的本意。相反,我们从保护学生长远利益出发,就不应该迎合学生的喜好。学校要做的是,不断地向学生提问,而且问得最多的问题应该是他们到底追求什么。苏格拉底认为,教学就是帮助个体重新认识自己的真正追求。这听起来有点儿像长辈对晚辈的说教,但事实确实如此。教授的角色应该是导师,不是商家或职员;教育不是要消费的,而是要经历的,而且必须是全身心地投入。令人惋惜的是,现在的大学不再为社会文明的发展护航,它们所扮演的是,满足市场需求的供应商的角色。学校不再了解自己的教育应该是怎样的,而是依赖学生的反馈,把学生的反馈当作它们生产的指南针。


金钱固然重要,它支撑着职业发展、生活保障和国民实力等,但问题是,需要我们关心的仅仅是金钱吗?个人的生活不仅限于工作,而工作不仅限于收入;国家不仅限于它的财富,而教育也不仅限于培养职场能力。我们要千万警惕企业家或政治家的蛊惑,作为一个人,你要相信自己不仅限于能为企业产出多少利润或为国家贡献多少GDP。追究大学的使命是什么,无异于追寻生命的目的,即社会存在的意义以及人存在的意义。


大学承担的责任首先是教给学生如何思考。虽然这听起来像陈词滥调,但是它的实际意义要比我们的认知广和深。思考并不是简单地为某个领域服务(比如如何解决方程式或者如何分析文章),甚至不是获取跨学科的工作能力,思考实质上是培养出思辨的习惯,并把这一习惯运用于实际生活中。简单来讲,学会思考就是以批判的眼光审视身边任何事物,不自以为是,不妄下结论。


在《高等教育》的一篇文章中,作者安德鲁·海克和克劳迪娅·德雷福斯阐述,大学的使命是成就一个更有意思的你。这个使命的前提是,你认为成为“有意思的人”对你最重要,而且你认识到你将是陪伴自己终其一生的唯一人选。但是成为一个有意思的人并非由资历堆积而成的自我实现,比如说同时修4个专业,时任大学报社编辑,参加合唱团,创建非营利组织,并学会烹饪异国他乡的美食等等,这些都不能成就有意思的你,因为“意思”并不是令人印象深刻的,也不是刻意去成就的。一个人之所以有意思,是因为他大量阅读,习惯思考,放缓脚步,投入深度对话,并为自己创建了一个丰满的内心世界。


加拿大小说家玛格丽特·阿特伍德(Margaret Atwood)通过笔下人物感言:“我不如就获得一次教育。这听起来让人感觉教育是物品,如同一件可以获取的女士外衣。”显而易见,这里最大的问题,也是最大的不确定因素是“你”,而不是教育。“教育并不能被获取,反之,教育是在影响或改造你。”“教育是当你忘记了所学的一切之后所存活下来的那一部分。”虽然这是一种通俗的定义,但提出此观点的哈佛大学前校长詹姆斯·B.柯南特的初衷是严肃的:我们在大学的大部分所学必然会慢慢淡忘,剩余的部分其实就是你自己。


《有目标地工作》的作者拉拉·加林斯基在她的书中建议读者向自己提问。“我擅长做什么?”“我关心什么?”“我坚信什么?”诸如此类问题在职业发展的转折点将起到至关重要的作用。年轻人过于实际,急于求成,往往忽视这些问题,就如同威廉·达蒙在《通往目标之路》中提到的,这种做法终将适得其反,因为当一个人不清楚自己到底为什么而奋斗时,他是迷茫的,也将得不到满足感。探讨“生命的意义是什么”可能过于抽象,脱离实际生活,但是当我们尝试改变方式提问,“我的生命意义是什么”,我们很快发现,事实上“自我了解”是一件最实用的工具,它帮助我们找到自我的价值所在并找到合适自己的职业。有谁希望人到中年,蓦然回首,才发现自己必须要赤裸裸地去面对诸多如此尖锐的问题。呜呼哀哉!


核心问题是,我们如何寻找属于自己的使命呢?或者更通俗地说,如何寻找属于自己的热爱呢?年轻人一直习惯于完成近期目标,这样的一个问题令他们措手不及,难以作答。虽然没有完美的答案,但是我不妨提供几个建议。选择做一些自发纯粹的事情,就如同你小时候那样;选择做一些即使没有外在奖励你也会选择做的事情;选择做一些你可以废寝忘食地专注去做的事情;做你最喜欢做的事,不是你认为自己喜欢或者应该喜欢的,而是你的真爱。


创建属于自己的生活的前提是,我们首先要铲除整个教育系统潜移默化地在我们心中播下的那颗种子:恐惧失败。斯坦福大学教授威廉·达蒙一直强调面对失败的态度,绝不能知难而退,反而要学会坦然面对,这就是成长不可或缺的一部分。经历失败最大的收获应该是,让每个人清楚地意识到失败并非世界末日。


作家杰夫·戴尔(Geoff Dyer)精辟地总结了一句话:“为了事情自身而做事情,不计较结果,都是值得的。”事情最终是否能够得到外界的认可不受你控制,但是,你可以掌握在手心里的是事情本身和你对它的热爱——任何工作的最终收获也是如此。最后的评分只有一个:你是否过上了一种自己满意的生活。


绝对不要为你的一辈子做好计划,因为人的变化在两三年内都是巨大的,而且时刻会产生新的想法;你真正可以做到的是,想好现在要做什么。


与其致力于培养领导者,不如致力于培养优秀的公民和思想家。思想家是一群敢于质疑权威,而不是一心追求成为权威的人士,毕竟这里是大学。事实上,最好的领导者就是思想家。思想家指的并非学术界的学者,而是能够以批判的视角来审视自己所处的组织和社会的人士,他们能够把批判落实到实处。思想家具有叛逆思维:不只是解答问题,还提出新的问题;不只是完成任务,还思考任何一件事情的价值所在;不只是勇于冲锋陷阵,更重要的是为公司、行业乃至整个国家制订新的战略方向。拥有领导力不亚于重建自己,最核心的元素是勇气和想象力。最核心的任务是,筹建一个有能力与这个社会现状对抗的个体。


每个人生活中必然有不愉快之事,尤其是年轻人的生活,而且不快的经历是任何个人、机构乃至社会转型进步的基石。只有当你的内心或者灵魂感受到现在的自我和追求的自我之间的差距时,变化才会随之产生。


从长远来看,现实似乎已经印证了美国前财政部部长、哈佛大学校长拉里·萨默斯(Larry Summers)所言:“我们所学的在10年内就会被淘汰。最重要的是学会如何学习。”


我们学习的根本目的不是收集信息,而是论证。大学的教育是熟悉并掌握论证能力的过程:学会收集论据、分析现有的权威观点、预见驳论、合成新的论点、最后义正词严地表达结论。


真正的教育是为了你的长远职业发展而做准备的,绝不是为你的第一份工作做准备的。


不要着急去成为自己心中早已计划好的那个人,而是成为你自己从未遇见的那个人,遇见那个更好的自己!


在很多时候,能够得到公平对待本身就是一种特权。


要想真正懂得与自己背景不同的人,你只能实际进入他们的世界:不是去进行所谓的“奉献”,更不是请人喝杯咖啡,带着屈尊俯就的态度去向“下层人民”嘘寒问暖一番。你要做的,是真正把对方当成与你平等的人。


首先,你要明白,不管别人怎么夸赞你,你都并不比别人更重要。你的痛苦并不比别人的痛苦更值得同情。你的灵魂也并不比别人高尚。如果非要用宗教的说法,我会说,上帝并没有更爱你。


要想在某一领域做到真正优秀,你必须学会专一,集中精力,听从自己的直觉,而不是去在意自己的履历是否“丰富多彩”。


我一直认为,我们需要创造一个公平的环境,要让所有的孩子都有平等的机会进入常春藤盟校。现在我突然意识到,我们真正要做的,不是让所有孩子都能上常春藤盟校,而是要让那些没上常春藤盟校(或任何私立学校)的孩子,也能享受到一流的教育。


事实上,精英阶层是在以牺牲子孙后代的幸福为代价来换取自己今天的地位。孩子们要跨越的障碍越多,他们付出的代价也就越多,能做到这一点的家庭也就越少。不仅如此,需要跨越的障碍越多,他们的人生就会越悲惨。

',68),h=[a];function n(c,i){return p(),t("div",null,h)}const d=e(o,[["render",n],["__file","022-excellent-sheep.html.vue"]]),m=JSON.parse(`{"path":"/reading/2023/022-excellent-sheep.html","title":"优秀的绵羊","lang":"zh-CN","frontmatter":{"date":"2023-12-31T00:00:00.000Z","description":"优秀的绵羊 (美)威廉·德雷谢维奇 如果你想让更多的人来参与一个活动,那么一个高效的方法就是提高入门门槛。 申请大学,如齐根所说,有一张统一的申请表格,但是成为音乐家是没有表格可言的。 一旦你做出选择,那么其他的可能性也就消失了。 每个人都从事同样的事,是因为大家都在做同样的事。这种现象就如同我之前的一位学生描述的“三文鱼赛跑”或一位密歇根大学的毕业生...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/reading/2023/022-excellent-sheep.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"优秀的绵羊"}],["meta",{"property":"og:description","content":"优秀的绵羊 (美)威廉·德雷谢维奇 如果你想让更多的人来参与一个活动,那么一个高效的方法就是提高入门门槛。 申请大学,如齐根所说,有一张统一的申请表格,但是成为音乐家是没有表格可言的。 一旦你做出选择,那么其他的可能性也就消失了。 每个人都从事同样的事,是因为大家都在做同样的事。这种现象就如同我之前的一位学生描述的“三文鱼赛跑”或一位密歇根大学的毕业生..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-02-28T14:53:56.000Z"}],["meta",{"property":"article:published_time","content":"2023-12-31T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-02-28T14:53:56.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"优秀的绵羊\\",\\"image\\":[\\"\\"],\\"datePublished\\":\\"2023-12-31T00:00:00.000Z\\",\\"dateModified\\":\\"2024-02-28T14:53:56.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1704009416000,"updatedTime":1709132036000},"readingTime":{"minutes":12.8,"words":3840},"filePathRelative":"reading/2023/022-excellent-sheep.md","localizedDate":"2023年12月31日","autoDesc":true,"excerpt":"\\n
\\n

(美)威廉·德雷谢维奇

\\n
\\n

如果你想让更多的人来参与一个活动,那么一个高效的方法就是提高入门门槛。

\\n
\\n

申请大学,如齐根所说,有一张统一的申请表格,但是成为音乐家是没有表格可言的。

\\n
\\n

一旦你做出选择,那么其他的可能性也就消失了。

\\n
\\n

每个人都从事同样的事,是因为大家都在做同样的事。这种现象就如同我之前的一位学生描述的“三文鱼赛跑”或一位密歇根大学的毕业生所说的“生产线的运输带”。这背后的驱动因素就是“三角欲”:当你观察到众人都在追逐同一样东西的时候,你判断它肯定是有价值的。作家迈克尔·路易斯(Michael Lewis)把这种现象背后的心理称为从众心理——法不责众。这里的“法”是自然界的法,因此大家都会觉得安全。

"}`);export{d as comp,m as data}; diff --git a/assets/404.html-CGRfCgAP.js b/assets/404.html-CjZ4flCW.js similarity index 93% rename from assets/404.html-CGRfCgAP.js rename to assets/404.html-CjZ4flCW.js index 68c3b6fdc..7a0ef78a0 100644 --- a/assets/404.html-CGRfCgAP.js +++ b/assets/404.html-CjZ4flCW.js @@ -1 +1 @@ -import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as e,c as o,b as n}from"./app-BLyK9ZJy.js";const r={},a=n("p",null,"404 Not Found",-1),c=[a];function p(s,i){return e(),o("div",null,c)}const d=t(r,[["render",p],["__file","404.html.vue"]]),u=JSON.parse(`{"path":"/404.html","title":"","lang":"zh-CN","frontmatter":{"layout":"NotFound","description":"404 Not Found","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/404.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:description","content":"404 Not Found"}],["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:locale","content":"zh-CN"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebPage\\",\\"name\\":\\"\\",\\"description\\":\\"404 Not Found\\"}"]]},"headers":[],"git":{},"readingTime":{"minutes":0.01,"words":3},"filePathRelative":null,"autoDesc":true,"excerpt":"

404 Not Found

\\n"}`);export{d as comp,u as data}; +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as e,c as o,b as n}from"./app-BSa8cFh0.js";const r={},a=n("p",null,"404 Not Found",-1),c=[a];function p(s,i){return e(),o("div",null,c)}const d=t(r,[["render",p],["__file","404.html.vue"]]),u=JSON.parse(`{"path":"/404.html","title":"","lang":"zh-CN","frontmatter":{"layout":"NotFound","description":"404 Not Found","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/404.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:description","content":"404 Not Found"}],["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:locale","content":"zh-CN"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"WebPage\\",\\"name\\":\\"\\",\\"description\\":\\"404 Not Found\\"}"]]},"headers":[],"git":{},"readingTime":{"minutes":0.01,"words":3},"filePathRelative":null,"autoDesc":true,"excerpt":"

404 Not Found

\\n"}`);export{d as comp,u as data}; diff --git "a/assets/GET\345\222\214POST.html-BPLasswN.js" "b/assets/GET\345\222\214POST.html-Dvujndbz.js" similarity index 98% rename from "assets/GET\345\222\214POST.html-BPLasswN.js" rename to "assets/GET\345\222\214POST.html-Dvujndbz.js" index 1c981e6fb..cd1972997 100644 --- "a/assets/GET\345\222\214POST.html-BPLasswN.js" +++ "b/assets/GET\345\222\214POST.html-Dvujndbz.js" @@ -1 +1 @@ -import{_ as T}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o,c as n,b as e,e as t}from"./app-BLyK9ZJy.js";const p={},r=e("h1",{id:"get和post",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#get和post"},[e("span",null,"GET和POST")])],-1),a=e("p",null,"GET和POST都是HTTP协议中发送请求的两种方法。",-1),P=e("p",null,"GET请求通常用于请求数据,POST请求通常用于提交数据,POST通常会造成服务器的状态变化或产生副作用。",-1),c=e("p",null,"GET请求会被浏览器主动缓存,而POST请求不会。",-1),i=e("p",null,[t("POST请求相比于GET请求更安全,因为POST请求的数据在地址栏不可见。"),e("br"),t(" 但从传输角度来说,他们都不安全。因为HTTP协议是明文传输的,[[HTTP和HTTPS]]相比,HTTPS传输经过加密所以更安全。")],-1),s=e("p",null,[t("对于GET请求,浏览器将参数附到URL上发送,服务端响应200。"),e("br"),t(" 对于POST请求,浏览器会先发送请求头,服务端响应100 continue;然后再发送请求体,服务端最终响应200 ok。")],-1),d=[r,a,P,c,i,s];function l(S,O){return o(),n("div",null,d)}const G=T(p,[["render",l],["__file","GET和POST.html.vue"]]),_=JSON.parse(`{"path":"/dump/knowledge/GET%E5%92%8CPOST.html","title":"GET和POST","lang":"zh-CN","frontmatter":{"description":"GET和POST GET和POST都是HTTP协议中发送请求的两种方法。 GET请求通常用于请求数据,POST请求通常用于提交数据,POST通常会造成服务器的状态变化或产生副作用。 GET请求会被浏览器主动缓存,而POST请求不会。 POST请求相比于GET请求更安全,因为POST请求的数据在地址栏不可见。 但从传输角度来说,他们都不安全。因为HTTP...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/dump/knowledge/GET%E5%92%8CPOST.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"GET和POST"}],["meta",{"property":"og:description","content":"GET和POST GET和POST都是HTTP协议中发送请求的两种方法。 GET请求通常用于请求数据,POST请求通常用于提交数据,POST通常会造成服务器的状态变化或产生副作用。 GET请求会被浏览器主动缓存,而POST请求不会。 POST请求相比于GET请求更安全,因为POST请求的数据在地址栏不可见。 但从传输角度来说,他们都不安全。因为HTTP..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-13T07:17:20.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-13T07:17:20.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"GET和POST\\",\\"image\\":[\\"\\"],\\"dateModified\\":\\"2024-06-13T07:17:20.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1697638485000,"updatedTime":1718263040000},"readingTime":{"minutes":0.71,"words":212},"filePathRelative":"dump/knowledge/GET和POST.md","localizedDate":"2023年10月18日","autoDesc":true,"excerpt":"\\n

GET和POST都是HTTP协议中发送请求的两种方法。

\\n

GET请求通常用于请求数据,POST请求通常用于提交数据,POST通常会造成服务器的状态变化或产生副作用。

\\n

GET请求会被浏览器主动缓存,而POST请求不会。

\\n

POST请求相比于GET请求更安全,因为POST请求的数据在地址栏不可见。
\\n但从传输角度来说,他们都不安全。因为HTTP协议是明文传输的,[[HTTP和HTTPS]]相比,HTTPS传输经过加密所以更安全。

\\n

对于GET请求,浏览器将参数附到URL上发送,服务端响应200。
\\n对于POST请求,浏览器会先发送请求头,服务端响应100 continue;然后再发送请求体,服务端最终响应200 ok。

"}`);export{G as comp,_ as data}; +import{_ as T}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o,c as n,b as e,e as t}from"./app-BSa8cFh0.js";const p={},r=e("h1",{id:"get和post",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#get和post"},[e("span",null,"GET和POST")])],-1),a=e("p",null,"GET和POST都是HTTP协议中发送请求的两种方法。",-1),P=e("p",null,"GET请求通常用于请求数据,POST请求通常用于提交数据,POST通常会造成服务器的状态变化或产生副作用。",-1),c=e("p",null,"GET请求会被浏览器主动缓存,而POST请求不会。",-1),i=e("p",null,[t("POST请求相比于GET请求更安全,因为POST请求的数据在地址栏不可见。"),e("br"),t(" 但从传输角度来说,他们都不安全。因为HTTP协议是明文传输的,[[HTTP和HTTPS]]相比,HTTPS传输经过加密所以更安全。")],-1),s=e("p",null,[t("对于GET请求,浏览器将参数附到URL上发送,服务端响应200。"),e("br"),t(" 对于POST请求,浏览器会先发送请求头,服务端响应100 continue;然后再发送请求体,服务端最终响应200 ok。")],-1),d=[r,a,P,c,i,s];function l(S,O){return o(),n("div",null,d)}const G=T(p,[["render",l],["__file","GET和POST.html.vue"]]),_=JSON.parse(`{"path":"/dump/knowledge/GET%E5%92%8CPOST.html","title":"GET和POST","lang":"zh-CN","frontmatter":{"description":"GET和POST GET和POST都是HTTP协议中发送请求的两种方法。 GET请求通常用于请求数据,POST请求通常用于提交数据,POST通常会造成服务器的状态变化或产生副作用。 GET请求会被浏览器主动缓存,而POST请求不会。 POST请求相比于GET请求更安全,因为POST请求的数据在地址栏不可见。 但从传输角度来说,他们都不安全。因为HTTP...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/dump/knowledge/GET%E5%92%8CPOST.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"GET和POST"}],["meta",{"property":"og:description","content":"GET和POST GET和POST都是HTTP协议中发送请求的两种方法。 GET请求通常用于请求数据,POST请求通常用于提交数据,POST通常会造成服务器的状态变化或产生副作用。 GET请求会被浏览器主动缓存,而POST请求不会。 POST请求相比于GET请求更安全,因为POST请求的数据在地址栏不可见。 但从传输角度来说,他们都不安全。因为HTTP..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-13T07:17:20.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-13T07:17:20.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"GET和POST\\",\\"image\\":[\\"\\"],\\"dateModified\\":\\"2024-06-13T07:17:20.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1697638485000,"updatedTime":1718263040000},"readingTime":{"minutes":0.71,"words":212},"filePathRelative":"dump/knowledge/GET和POST.md","localizedDate":"2023年10月18日","autoDesc":true,"excerpt":"\\n

GET和POST都是HTTP协议中发送请求的两种方法。

\\n

GET请求通常用于请求数据,POST请求通常用于提交数据,POST通常会造成服务器的状态变化或产生副作用。

\\n

GET请求会被浏览器主动缓存,而POST请求不会。

\\n

POST请求相比于GET请求更安全,因为POST请求的数据在地址栏不可见。
\\n但从传输角度来说,他们都不安全。因为HTTP协议是明文传输的,[[HTTP和HTTPS]]相比,HTTPS传输经过加密所以更安全。

\\n

对于GET请求,浏览器将参数附到URL上发送,服务端响应200。
\\n对于POST请求,浏览器会先发送请求头,服务端响应100 continue;然后再发送请求体,服务端最终响应200 ok。

"}`);export{G as comp,_ as data}; diff --git "a/assets/HTTP\345\222\214HTTPS.html-CYv0fRc1.js" "b/assets/HTTP\345\222\214HTTPS.html-CEW_EhML.js" similarity index 98% rename from "assets/HTTP\345\222\214HTTPS.html-CYv0fRc1.js" rename to "assets/HTTP\345\222\214HTTPS.html-CEW_EhML.js" index e1e26afcb..be30fb52c 100644 --- "a/assets/HTTP\345\222\214HTTPS.html-CYv0fRc1.js" +++ "b/assets/HTTP\345\222\214HTTPS.html-CEW_EhML.js" @@ -1 +1 @@ -import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as T,c as o,b as t}from"./app-BLyK9ZJy.js";const n={},p=t("h1",{id:"http和https",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#http和https"},[t("span",null,"HTTP和HTTPS")])],-1),a=t("p",null,"HTTP是一种不加密的协议,数据在网络上以明文形式传输;HTTPS使用SSL/TLS协议加密传输的数据。",-1),r=t("p",null,"HTTP使用的是80端口;HTTPS使用的是443端口。",-1),P=t("p",null,"HTTP不提供网站身份验证,因此容易遭受钓鱼攻击;HTTPS由于使用SSL/TLS证书,浏览器可以验证服务器身份,用户可以通过浏览器的安全标识确认连接的安全性。",-1),S=[p,a,r,P];function c(H,i){return T(),o("div",null,S)}const l=e(n,[["render",c],["__file","HTTP和HTTPS.html.vue"]]),m=JSON.parse(`{"path":"/dump/knowledge/HTTP%E5%92%8CHTTPS.html","title":"HTTP和HTTPS","lang":"zh-CN","frontmatter":{"description":"HTTP和HTTPS HTTP是一种不加密的协议,数据在网络上以明文形式传输;HTTPS使用SSL/TLS协议加密传输的数据。 HTTP使用的是80端口;HTTPS使用的是443端口。 HTTP不提供网站身份验证,因此容易遭受钓鱼攻击;HTTPS由于使用SSL/TLS证书,浏览器可以验证服务器身份,用户可以通过浏览器的安全标识确认连接的安全性。","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/dump/knowledge/HTTP%E5%92%8CHTTPS.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"HTTP和HTTPS"}],["meta",{"property":"og:description","content":"HTTP和HTTPS HTTP是一种不加密的协议,数据在网络上以明文形式传输;HTTPS使用SSL/TLS协议加密传输的数据。 HTTP使用的是80端口;HTTPS使用的是443端口。 HTTP不提供网站身份验证,因此容易遭受钓鱼攻击;HTTPS由于使用SSL/TLS证书,浏览器可以验证服务器身份,用户可以通过浏览器的安全标识确认连接的安全性。"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-13T07:17:20.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-13T07:17:20.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"HTTP和HTTPS\\",\\"image\\":[\\"\\"],\\"dateModified\\":\\"2024-06-13T07:17:20.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1697638485000,"updatedTime":1718263040000},"readingTime":{"minutes":0.39,"words":117},"filePathRelative":"dump/knowledge/HTTP和HTTPS.md","localizedDate":"2023年10月18日","autoDesc":true,"excerpt":"\\n

HTTP是一种不加密的协议,数据在网络上以明文形式传输;HTTPS使用SSL/TLS协议加密传输的数据。

\\n

HTTP使用的是80端口;HTTPS使用的是443端口。

\\n

HTTP不提供网站身份验证,因此容易遭受钓鱼攻击;HTTPS由于使用SSL/TLS证书,浏览器可以验证服务器身份,用户可以通过浏览器的安全标识确认连接的安全性。

\\n"}`);export{l as comp,m as data}; +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as T,c as o,b as t}from"./app-BSa8cFh0.js";const n={},p=t("h1",{id:"http和https",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#http和https"},[t("span",null,"HTTP和HTTPS")])],-1),a=t("p",null,"HTTP是一种不加密的协议,数据在网络上以明文形式传输;HTTPS使用SSL/TLS协议加密传输的数据。",-1),r=t("p",null,"HTTP使用的是80端口;HTTPS使用的是443端口。",-1),P=t("p",null,"HTTP不提供网站身份验证,因此容易遭受钓鱼攻击;HTTPS由于使用SSL/TLS证书,浏览器可以验证服务器身份,用户可以通过浏览器的安全标识确认连接的安全性。",-1),S=[p,a,r,P];function c(H,i){return T(),o("div",null,S)}const l=e(n,[["render",c],["__file","HTTP和HTTPS.html.vue"]]),m=JSON.parse(`{"path":"/dump/knowledge/HTTP%E5%92%8CHTTPS.html","title":"HTTP和HTTPS","lang":"zh-CN","frontmatter":{"description":"HTTP和HTTPS HTTP是一种不加密的协议,数据在网络上以明文形式传输;HTTPS使用SSL/TLS协议加密传输的数据。 HTTP使用的是80端口;HTTPS使用的是443端口。 HTTP不提供网站身份验证,因此容易遭受钓鱼攻击;HTTPS由于使用SSL/TLS证书,浏览器可以验证服务器身份,用户可以通过浏览器的安全标识确认连接的安全性。","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/dump/knowledge/HTTP%E5%92%8CHTTPS.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"HTTP和HTTPS"}],["meta",{"property":"og:description","content":"HTTP和HTTPS HTTP是一种不加密的协议,数据在网络上以明文形式传输;HTTPS使用SSL/TLS协议加密传输的数据。 HTTP使用的是80端口;HTTPS使用的是443端口。 HTTP不提供网站身份验证,因此容易遭受钓鱼攻击;HTTPS由于使用SSL/TLS证书,浏览器可以验证服务器身份,用户可以通过浏览器的安全标识确认连接的安全性。"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-13T07:17:20.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-13T07:17:20.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"HTTP和HTTPS\\",\\"image\\":[\\"\\"],\\"dateModified\\":\\"2024-06-13T07:17:20.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1697638485000,"updatedTime":1718263040000},"readingTime":{"minutes":0.39,"words":117},"filePathRelative":"dump/knowledge/HTTP和HTTPS.md","localizedDate":"2023年10月18日","autoDesc":true,"excerpt":"\\n

HTTP是一种不加密的协议,数据在网络上以明文形式传输;HTTPS使用SSL/TLS协议加密传输的数据。

\\n

HTTP使用的是80端口;HTTPS使用的是443端口。

\\n

HTTP不提供网站身份验证,因此容易遭受钓鱼攻击;HTTPS由于使用SSL/TLS证书,浏览器可以验证服务器身份,用户可以通过浏览器的安全标识确认连接的安全性。

\\n"}`);export{l as comp,m as data}; diff --git "a/assets/JS\346\225\260\345\255\227\347\262\276\345\272\246\344\270\242\345\244\261\351\227\256\351\242\230.html-BNq6k-BX.js" "b/assets/JS\346\225\260\345\255\227\347\262\276\345\272\246\344\270\242\345\244\261\351\227\256\351\242\230.html-CYAMyiCx.js" similarity index 98% rename from "assets/JS\346\225\260\345\255\227\347\262\276\345\272\246\344\270\242\345\244\261\351\227\256\351\242\230.html-BNq6k-BX.js" rename to "assets/JS\346\225\260\345\255\227\347\262\276\345\272\246\344\270\242\345\244\261\351\227\256\351\242\230.html-CYAMyiCx.js" index 5772d35b3..b52b1fdc1 100644 --- "a/assets/JS\346\225\260\345\255\227\347\262\276\345\272\246\344\270\242\345\244\261\351\227\256\351\242\230.html-BNq6k-BX.js" +++ "b/assets/JS\346\225\260\345\255\227\347\262\276\345\272\246\344\270\242\345\244\261\351\227\256\351\242\230.html-CYAMyiCx.js" @@ -1 +1 @@ -import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o,c as n,b as e}from"./app-BLyK9ZJy.js";const a={},p=e("h1",{id:"js数字精度丢失问题",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#js数字精度丢失问题"},[e("span",null,"JS数字精度丢失问题")])],-1),r=e("p",null,"JS中的数字是以科学计数法的形式存储64位双精度浮点数编码。",-1),c=e("p",null,"其中第1位为符号位,0表示正数,1表示负数;中间11位为指数位;最后52位为尾数位,会舍0进1。",-1),i=e("p",null,"在计算时会将十进制数转换成二进制,计算完成后再转换成十进制数,并且由于小数位数无限但二进制位数有限,因此引起计算误差,造成数字精度丢失。",-1),s=e("p",null,"解决方法是将小数转换成整数在计算,或是使用第三方库Math.js或BigDecimal.js。",-1),l=[p,r,c,i,s];function d(m,_){return o(),n("div",null,l)}const E=t(a,[["render",d],["__file","JS数字精度丢失问题.html.vue"]]),g=JSON.parse(`{"path":"/dump/knowledge/JS%E6%95%B0%E5%AD%97%E7%B2%BE%E5%BA%A6%E4%B8%A2%E5%A4%B1%E9%97%AE%E9%A2%98.html","title":"JS数字精度丢失问题","lang":"zh-CN","frontmatter":{"description":"JS数字精度丢失问题 JS中的数字是以科学计数法的形式存储64位双精度浮点数编码。 其中第1位为符号位,0表示正数,1表示负数;中间11位为指数位;最后52位为尾数位,会舍0进1。 在计算时会将十进制数转换成二进制,计算完成后再转换成十进制数,并且由于小数位数无限但二进制位数有限,因此引起计算误差,造成数字精度丢失。 解决方法是将小数转换成整数在计算,...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/dump/knowledge/JS%E6%95%B0%E5%AD%97%E7%B2%BE%E5%BA%A6%E4%B8%A2%E5%A4%B1%E9%97%AE%E9%A2%98.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"JS数字精度丢失问题"}],["meta",{"property":"og:description","content":"JS数字精度丢失问题 JS中的数字是以科学计数法的形式存储64位双精度浮点数编码。 其中第1位为符号位,0表示正数,1表示负数;中间11位为指数位;最后52位为尾数位,会舍0进1。 在计算时会将十进制数转换成二进制,计算完成后再转换成十进制数,并且由于小数位数无限但二进制位数有限,因此引起计算误差,造成数字精度丢失。 解决方法是将小数转换成整数在计算,..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-13T07:17:20.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-13T07:17:20.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"JS数字精度丢失问题\\",\\"image\\":[\\"\\"],\\"dateModified\\":\\"2024-06-13T07:17:20.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1697638485000,"updatedTime":1718263040000},"readingTime":{"minutes":0.55,"words":166},"filePathRelative":"dump/knowledge/JS数字精度丢失问题.md","localizedDate":"2023年10月18日","autoDesc":true,"excerpt":"\\n

JS中的数字是以科学计数法的形式存储64位双精度浮点数编码。

\\n

其中第1位为符号位,0表示正数,1表示负数;中间11位为指数位;最后52位为尾数位,会舍0进1。

\\n

在计算时会将十进制数转换成二进制,计算完成后再转换成十进制数,并且由于小数位数无限但二进制位数有限,因此引起计算误差,造成数字精度丢失。

\\n

解决方法是将小数转换成整数在计算,或是使用第三方库Math.js或BigDecimal.js。

\\n"}`);export{E as comp,g as data}; +import{_ as t}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o,c as n,b as e}from"./app-BSa8cFh0.js";const a={},p=e("h1",{id:"js数字精度丢失问题",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#js数字精度丢失问题"},[e("span",null,"JS数字精度丢失问题")])],-1),r=e("p",null,"JS中的数字是以科学计数法的形式存储64位双精度浮点数编码。",-1),c=e("p",null,"其中第1位为符号位,0表示正数,1表示负数;中间11位为指数位;最后52位为尾数位,会舍0进1。",-1),i=e("p",null,"在计算时会将十进制数转换成二进制,计算完成后再转换成十进制数,并且由于小数位数无限但二进制位数有限,因此引起计算误差,造成数字精度丢失。",-1),s=e("p",null,"解决方法是将小数转换成整数在计算,或是使用第三方库Math.js或BigDecimal.js。",-1),l=[p,r,c,i,s];function d(m,_){return o(),n("div",null,l)}const E=t(a,[["render",d],["__file","JS数字精度丢失问题.html.vue"]]),g=JSON.parse(`{"path":"/dump/knowledge/JS%E6%95%B0%E5%AD%97%E7%B2%BE%E5%BA%A6%E4%B8%A2%E5%A4%B1%E9%97%AE%E9%A2%98.html","title":"JS数字精度丢失问题","lang":"zh-CN","frontmatter":{"description":"JS数字精度丢失问题 JS中的数字是以科学计数法的形式存储64位双精度浮点数编码。 其中第1位为符号位,0表示正数,1表示负数;中间11位为指数位;最后52位为尾数位,会舍0进1。 在计算时会将十进制数转换成二进制,计算完成后再转换成十进制数,并且由于小数位数无限但二进制位数有限,因此引起计算误差,造成数字精度丢失。 解决方法是将小数转换成整数在计算,...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/dump/knowledge/JS%E6%95%B0%E5%AD%97%E7%B2%BE%E5%BA%A6%E4%B8%A2%E5%A4%B1%E9%97%AE%E9%A2%98.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"JS数字精度丢失问题"}],["meta",{"property":"og:description","content":"JS数字精度丢失问题 JS中的数字是以科学计数法的形式存储64位双精度浮点数编码。 其中第1位为符号位,0表示正数,1表示负数;中间11位为指数位;最后52位为尾数位,会舍0进1。 在计算时会将十进制数转换成二进制,计算完成后再转换成十进制数,并且由于小数位数无限但二进制位数有限,因此引起计算误差,造成数字精度丢失。 解决方法是将小数转换成整数在计算,..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-06-13T07:17:20.000Z"}],["meta",{"property":"article:modified_time","content":"2024-06-13T07:17:20.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"JS数字精度丢失问题\\",\\"image\\":[\\"\\"],\\"dateModified\\":\\"2024-06-13T07:17:20.000Z\\",\\"author\\":[]}"]]},"headers":[],"git":{"createdTime":1697638485000,"updatedTime":1718263040000},"readingTime":{"minutes":0.55,"words":166},"filePathRelative":"dump/knowledge/JS数字精度丢失问题.md","localizedDate":"2023年10月18日","autoDesc":true,"excerpt":"\\n

JS中的数字是以科学计数法的形式存储64位双精度浮点数编码。

\\n

其中第1位为符号位,0表示正数,1表示负数;中间11位为指数位;最后52位为尾数位,会舍0进1。

\\n

在计算时会将十进制数转换成二进制,计算完成后再转换成十进制数,并且由于小数位数无限但二进制位数有限,因此引起计算误差,造成数字精度丢失。

\\n

解决方法是将小数转换成整数在计算,或是使用第三方库Math.js或BigDecimal.js。

\\n"}`);export{E as comp,g as data}; diff --git a/assets/SearchResult-BhHM-94f.js b/assets/SearchResult-BhHM-94f.js deleted file mode 100644 index e2801ab38..000000000 --- a/assets/SearchResult-BhHM-94f.js +++ /dev/null @@ -1 +0,0 @@ -import{u as O,f as te,g as le,h as $,i as ae,P as re,t as se,j as ie,k as q,l as B,m as ne,n as z,p as l,q as oe,R as U,s as ue,v as de,x as me,C as ce,y as pe,z as he,A as ge,B as ve,D as ye,E as C,F as fe,G as Ee,H as we,I as L,J as K,K as ke}from"./app-BLyK9ZJy.js";const be=["/","/article/","/article/android-compose-toggle-theme.html","/article/app-deployment-evolution.html","/article/cross-domain.html","/article/debounce-throttle.html","/article/history-of-javascript.html","/article/make-npm-lib.html","/article/sftp-usage.html","/design-pattern/","/develop/","/dump/js-full-stack.html","/reading/","/design-pattern/behavioral/","/design-pattern/behavioral/chain-of-responsibility.html","/design-pattern/behavioral/command.html","/design-pattern/behavioral/iterator.html","/design-pattern/behavioral/mediator.html","/design-pattern/behavioral/memento.html","/design-pattern/behavioral/observer.html","/design-pattern/behavioral/state.html","/design-pattern/behavioral/strategy.html","/design-pattern/behavioral/template-method.html","/design-pattern/behavioral/visitor.html","/design-pattern/creational/","/design-pattern/creational/abstract-factory.html","/design-pattern/creational/builder.html","/design-pattern/creational/factory-method.html","/design-pattern/creational/prototype.html","/design-pattern/creational/singleton.html","/design-pattern/structural/","/design-pattern/structural/adapter.html","/design-pattern/structural/bridge.html","/design-pattern/structural/composite.html","/design-pattern/structural/decorator.html","/design-pattern/structural/facade.html","/design-pattern/structural/flyweight.html","/design-pattern/structural/proxy.html","/develop/android/","/develop/android/adb-wireless-debug.html","/develop/angular/","/develop/angular/angular-i18n.html","/develop/angular/azure-login.html","/develop/angular/components-share-data.html","/develop/angular/karma-config.html","/develop/database/","/develop/database/transaction-isolation-level.html","/develop/git/","/develop/git/git-installation.html","/develop/git/git-tag.html","/develop/git/git-use.html","/develop/html/","/develop/html/classical-layout.html","/develop/html/flex-layout.html","/develop/html/grid-layout.html","/develop/nestjs/","/develop/python/","/develop/react/","/develop/react/usage-of-state.html","/develop/test/","/develop/test/test-coverage-example.html","/develop/typescript/","/develop/typescript/custom-decorator.html","/develop/typescript/generic-function.html","/dump/algorithm/","/dump/algorithm/sort.html","/dump/cloud-native/","/dump/en/","/dump/knowledge/%E5%92%8C___.html","/dump/knowledge/GET%E5%92%8CPOST.html","/dump/knowledge/HTTP%E5%92%8CHTTPS.html","/dump/knowledge/JS%E6%95%B0%E5%AD%97%E7%B2%BE%E5%BA%A6%E4%B8%A2%E5%A4%B1%E9%97%AE%E9%A2%98.html","/dump/knowledge/","/dump/knowledge/apply%E3%80%81call%E3%80%81bind.html","/dump/knowledge/arguments%E5%AF%B9%E8%B1%A1.html","/dump/knowledge/px%E3%80%81em%E3%80%81rem%E3%80%81vh%E3%80%81vw.html","/dump/knowledge/state%E5%92%8Cprops.html","/dump/knowledge/this%E5%AF%B9%E8%B1%A1.html","/dump/knowledge/typeof%E5%92%8Cinstanceof.html","/dump/knowledge/var%E3%80%81let%E3%80%81const.html","/dump/knowledge/%E4%BB%80%E4%B9%88%E6%98%AFJavaScript.html","/dump/knowledge/%E4%BD%9C%E7%94%A8%E5%9F%9F.html","/dump/knowledge/%E5%87%BD%E6%95%B0%E6%9F%AF%E9%87%8C%E5%8C%96.html","/dump/knowledge/%E5%89%A9%E4%BD%99%E5%8F%82%E6%95%B0.html","/dump/knowledge/%E5%93%88%E5%B8%8C%E8%B7%AF%E7%94%B1%E5%92%8CHistory%E8%B7%AF%E7%94%B1.html","/dump/knowledge/%E6%B7%B1%E6%8B%B7%E8%B4%9D%E5%92%8C%E6%B5%85%E6%8B%B7%E8%B4%9D.html","/dump/knowledge/%E7%AE%AD%E5%A4%B4%E5%87%BD%E6%95%B0.html","/dump/knowledge/%E9%97%AD%E5%8C%85.html","/dump/projects/","/dump/software-engineering/","/reading/2022/human-weakness.html","/reading/2022/nonviolent-communication.html","/reading/2023/001-self-control.html","/reading/2023/002-the-great-gatsby.html","/reading/2023/003-intimate-relationship.html","/reading/2023/004-the-courage-to-be-hated.html","/reading/2023/005-devilish-chatting-techniques.html","/reading/2023/006-lean-entrepreneurial-practice.html","/reading/2023/007-island-economics.html","/reading/2023/008-micro-habits-slimming.html","/reading/2023/009-introverts-communicate-the-bible.html","/reading/2023/010-%E5%B0%8F%E7%8E%8B%E5%AD%90.html","/reading/2023/011-rockefeller-letters.html","/reading/2023/012-autobiography-of-franklin.html","/reading/2023/013-secret.html","/reading/2023/014-quotations-from-kazuo-inamori.html","/reading/2023/015-entertain-oneself-to-death.html","/reading/2023/016-changed-my-life-by-learning-english.html","/reading/2023/017-biblical-wisdom.html","/reading/2023/018-desire-and-dignity.html","/reading/2023/019-rural-china.html","/reading/2023/021-addicted.html","/reading/2023/022-excellent-sheep.html","/reading/2024/001-pyramid-principle.html","/reading/2024/002-those-ming-dynasty-things.html","/reading/2024/003-naval.html","/reading/2024/004-xiaomi-entrepreneurial-thinking.html","/reading/2024/005-small-and-beautiful.html","/dump/algorithm/sort/","/dump/algorithm/sort/selection-sort.html","/dump/cloud-native/argocd/","/dump/cloud-native/argocd/argocd.html","/dump/cloud-native/docker/","/dump/cloud-native/docker/docker-architecture.html","/dump/cloud-native/docker/docker-image-build.html","/dump/cloud-native/docker/docker-image-structure.html","/dump/cloud-native/docker/docker-installation.html","/dump/cloud-native/docker/docker-use.html","/dump/cloud-native/kubernetes/","/dump/cloud-native/kubernetes/k8s-release-strategy.html","/dump/cloud-native/kubernetes/sealed-secrets-client-side.html","/dump/en/algorithm/","/dump/en/algorithm/sort.html","/dump/en/projects/","/dump/projects/SKIP-Docs/","/dump/projects/SKIP-Docs/contribute.html","/dump/projects/SKIP-Docs/how-to-use.html","/dump/projects/SKIP-Docs/xiaomi.html","/dump/projects/TinyCRUD-Docs/","/dump/projects/TinyCRUD-Docs/contribution-guide.html","/dump/projects/TinyCRUD-Docs/create-request.html","/dump/projects/TinyCRUD-Docs/start-using.html","/dump/software-engineering/twelve-factor/001-codebase.html","/dump/software-engineering/twelve-factor/002-dependencies.html","/dump/software-engineering/twelve-factor/003-config.html","/dump/software-engineering/twelve-factor/004-backing-services.html","/dump/software-engineering/twelve-factor/005-build-release-run.html","/dump/software-engineering/twelve-factor/006-processes.html","/dump/software-engineering/twelve-factor/007-port-binding.html","/dump/software-engineering/twelve-factor/008-concurrency.html","/dump/software-engineering/twelve-factor/009-disposability.html","/dump/software-engineering/twelve-factor/010-dev-prod-parity.html","/dump/software-engineering/twelve-factor/011-logs.html","/dump/software-engineering/twelve-factor/012-admin-processes.html","/dump/software-engineering/twelve-factor/","/dump/en/algorithm/sort/","/dump/en/algorithm/sort/selection-sort.html","/dump/en/projects/SKIP-Docs/","/dump/en/projects/SKIP-Docs/contribute.html","/dump/en/projects/SKIP-Docs/how-to-use.html","/dump/en/projects/SKIP-Docs/xiaomi.html","/dump/en/projects/TinyCRUD-Docs/","/dump/en/projects/TinyCRUD-Docs/contribution-guide.html","/dump/en/projects/TinyCRUD-Docs/create-request.html","/dump/en/projects/TinyCRUD-Docs/start-using.html","/404.html","/dump/","/reading/2022/","/reading/2023/","/reading/2024/"],De="SEARCH_PRO_QUERY_HISTORY",y=O(De,[]),Be=()=>{const{queryHistoryCount:a}=C,r=a>0;return{enabled:r,queryHistory:y,addQueryHistory:s=>{r&&(y.value=Array.from(new Set([s,...y.value.slice(0,a-1)])))},removeQueryHistory:s=>{y.value=[...y.value.slice(0,s),...y.value.slice(s+1)]}}},F=a=>be[a.id]+("anchor"in a?`#${a.anchor}`:""),Ce="SEARCH_PRO_RESULT_HISTORY",{resultHistoryCount:_}=C,f=O(Ce,[]),Ae=()=>{const a=_>0;return{enabled:a,resultHistory:f,addResultHistory:r=>{if(a){const s={link:F(r),display:r.display};"header"in r&&(s.header=r.header),f.value=[s,...f.value.slice(0,_-1)]}},removeResultHistory:r=>{f.value=[...f.value.slice(0,r),...f.value.slice(r+1)]}}},Re=a=>{const r=ce(),s=$(),A=pe(),n=q(0),k=B(()=>n.value>0),h=he([]);return ge(()=>{const{search:g,terminate:R}=ve(),E=ye(d=>{const w=d.join(" "),{searchFilter:H=p=>p,splitWord:j,suggestionsFilter:P,...v}=r.value;w?(n.value+=1,g(d.join(" "),s.value,v).then(p=>H(p,w,s.value,A.value)).then(p=>{n.value-=1,h.value=p}).catch(p=>{console.warn(p),n.value-=1,n.value||(h.value=[])})):h.value=[]},C.searchDelay-C.suggestDelay);z([a,s],([d])=>E(d),{immediate:!0}),fe(()=>{R()})}),{isSearching:k,results:h}};var je=te({name:"SearchResult",props:{queries:{type:Array,required:!0},isFocusing:Boolean},emits:["close","updateQuery"],setup(a,{emit:r}){const s=le(),A=$(),n=ae(re),{enabled:k,addQueryHistory:h,queryHistory:g,removeQueryHistory:R}=Be(),{enabled:E,resultHistory:d,addResultHistory:w,removeResultHistory:H}=Ae(),j=k||E,P=se(a,"queries"),{results:v,isSearching:p}=Re(P),i=ie({isQuery:!0,index:0}),m=q(0),c=q(0),Q=B(()=>j&&(g.value.length>0||d.value.length>0)),S=B(()=>v.value.length>0),x=B(()=>v.value[m.value]||null),J=()=>{const{isQuery:e,index:t}=i;t===0?(i.isQuery=!e,i.index=e?d.value.length-1:g.value.length-1):i.index=t-1},Y=()=>{const{isQuery:e,index:t}=i;t===(e?g.value.length-1:d.value.length-1)?(i.isQuery=!e,i.index=0):i.index=t+1},G=()=>{m.value=m.value>0?m.value-1:v.value.length-1,c.value=x.value.contents.length-1},M=()=>{m.value=m.value{c.value{c.value>0?c.value-=1:G()},T=e=>e.map(t=>ke(t)?t:l(t[0],t[1])),W=e=>{if(e.type==="customField"){const t=Ee[e.index]||"$content",[o,D=""]=we(t)?t[A.value].split("$content"):t.split("$content");return e.display.map(u=>l("div",T([o,...u,D])))}return e.display.map(t=>l("div",T(t)))},b=()=>{m.value=0,c.value=0,r("updateQuery",""),r("close")},X=()=>k?l("ul",{class:"search-pro-result-list"},l("li",{class:"search-pro-result-list-item"},[l("div",{class:"search-pro-result-title"},n.value.queryHistory),g.value.map((e,t)=>l("div",{class:["search-pro-result-item",{active:i.isQuery&&i.index===t}],onClick:()=>{r("updateQuery",e)}},[l(L,{class:"search-pro-result-type"}),l("div",{class:"search-pro-result-content"},e),l("button",{class:"search-pro-remove-icon",innerHTML:K,onClick:o=>{o.preventDefault(),o.stopPropagation(),R(t)}})]))])):null,Z=()=>E?l("ul",{class:"search-pro-result-list"},l("li",{class:"search-pro-result-list-item"},[l("div",{class:"search-pro-result-title"},n.value.resultHistory),d.value.map((e,t)=>l(U,{to:e.link,class:["search-pro-result-item",{active:!i.isQuery&&i.index===t}],onClick:()=>{b()}},()=>[l(L,{class:"search-pro-result-type"}),l("div",{class:"search-pro-result-content"},[e.header?l("div",{class:"content-header"},e.header):null,l("div",e.display.map(o=>T(o)).flat())]),l("button",{class:"search-pro-remove-icon",innerHTML:K,onClick:o=>{o.preventDefault(),o.stopPropagation(),H(t)}})]))])):null;return ne("keydown",e=>{if(a.isFocusing){if(S.value){if(e.key==="ArrowUp")N();else if(e.key==="ArrowDown")V();else if(e.key==="Enter"){const t=x.value.contents[c.value];h(a.queries.join(" ")),w(t),s.push(F(t)),b()}}else if(E){if(e.key==="ArrowUp")J();else if(e.key==="ArrowDown")Y();else if(e.key==="Enter"){const{index:t}=i;i.isQuery?(r("updateQuery",g.value[t]),e.preventDefault()):(s.push(d.value[t].link),b())}}}}),z([m,c],()=>{var e;(e=document.querySelector(".search-pro-result-list-item.active .search-pro-result-item.active"))==null||e.scrollIntoView(!1)},{flush:"post"}),()=>l("div",{class:["search-pro-result-wrapper",{empty:a.queries.length?!S.value:!Q.value}],id:"search-pro-results"},a.queries.length?p.value?l(oe,{hint:n.value.searching}):S.value?l("ul",{class:"search-pro-result-list"},v.value.map(({title:e,contents:t},o)=>{const D=m.value===o;return l("li",{class:["search-pro-result-list-item",{active:D}]},[l("div",{class:"search-pro-result-title"},e||n.value.defaultTitle),t.map((u,ee)=>{const I=D&&c.value===ee;return l(U,{to:F(u),class:["search-pro-result-item",{active:I,"aria-selected":I}],onClick:()=>{h(a.queries.join(" ")),w(u),b()}},()=>[u.type==="text"?null:l(u.type==="title"?ue:u.type==="heading"?de:me,{class:"search-pro-result-type"}),l("div",{class:"search-pro-result-content"},[u.type==="text"&&u.header?l("div",{class:"content-header"},u.header):null,l("div",W(u))])])})])})):n.value.emptyResult:j?Q.value?[X(),Z()]:n.value.emptyHistory:n.value.emptyResult)}});export{je as default}; diff --git a/assets/SearchResult-DX69bCr2.js b/assets/SearchResult-DX69bCr2.js new file mode 100644 index 000000000..6eac0be45 --- /dev/null +++ b/assets/SearchResult-DX69bCr2.js @@ -0,0 +1 @@ +import{u as O,f as te,g as le,h as $,i as ae,P as re,t as se,j as ie,k as q,l as B,m as ne,n as z,p as l,q as oe,R as U,s as ue,v as de,x as me,C as ce,y as pe,z as he,A as ge,B as ve,D as ye,E as C,F as fe,G as Ee,H as we,I as L,J as K,K as ke}from"./app-BSa8cFh0.js";const be=["/","/article/","/article/android-compose-toggle-theme.html","/article/app-deployment-evolution.html","/article/cross-domain.html","/article/debounce-throttle.html","/article/history-of-javascript.html","/article/make-npm-lib.html","/article/sftp-usage.html","/design-pattern/","/develop/","/dump/js-full-stack.html","/reading/","/design-pattern/behavioral/","/design-pattern/behavioral/chain-of-responsibility.html","/design-pattern/behavioral/command.html","/design-pattern/behavioral/iterator.html","/design-pattern/behavioral/mediator.html","/design-pattern/behavioral/memento.html","/design-pattern/behavioral/observer.html","/design-pattern/behavioral/state.html","/design-pattern/behavioral/strategy.html","/design-pattern/behavioral/template-method.html","/design-pattern/behavioral/visitor.html","/design-pattern/creational/","/design-pattern/creational/abstract-factory.html","/design-pattern/creational/builder.html","/design-pattern/creational/factory-method.html","/design-pattern/creational/prototype.html","/design-pattern/creational/singleton.html","/design-pattern/structural/","/design-pattern/structural/adapter.html","/design-pattern/structural/bridge.html","/design-pattern/structural/composite.html","/design-pattern/structural/decorator.html","/design-pattern/structural/facade.html","/design-pattern/structural/flyweight.html","/design-pattern/structural/proxy.html","/develop/android/","/develop/android/adb-wireless-debug.html","/develop/angular/","/develop/angular/angular-i18n.html","/develop/angular/azure-login.html","/develop/angular/components-share-data.html","/develop/angular/karma-config.html","/develop/database/","/develop/database/transaction-isolation-level.html","/develop/git/","/develop/git/git-installation.html","/develop/git/git-tag.html","/develop/git/git-use.html","/develop/html/","/develop/html/classical-layout.html","/develop/html/flex-layout.html","/develop/html/grid-layout.html","/develop/nestjs/","/develop/python/","/develop/react/","/develop/react/usage-of-state.html","/develop/test/","/develop/test/test-coverage-example.html","/develop/typescript/","/develop/typescript/custom-decorator.html","/develop/typescript/generic-function.html","/dump/algorithm/","/dump/algorithm/sort.html","/dump/cloud-native/","/dump/en/","/dump/knowledge/%E5%92%8C___.html","/dump/knowledge/GET%E5%92%8CPOST.html","/dump/knowledge/HTTP%E5%92%8CHTTPS.html","/dump/knowledge/JS%E6%95%B0%E5%AD%97%E7%B2%BE%E5%BA%A6%E4%B8%A2%E5%A4%B1%E9%97%AE%E9%A2%98.html","/dump/knowledge/","/dump/knowledge/apply%E3%80%81call%E3%80%81bind.html","/dump/knowledge/arguments%E5%AF%B9%E8%B1%A1.html","/dump/knowledge/px%E3%80%81em%E3%80%81rem%E3%80%81vh%E3%80%81vw.html","/dump/knowledge/state%E5%92%8Cprops.html","/dump/knowledge/this%E5%AF%B9%E8%B1%A1.html","/dump/knowledge/typeof%E5%92%8Cinstanceof.html","/dump/knowledge/var%E3%80%81let%E3%80%81const.html","/dump/knowledge/%E4%BB%80%E4%B9%88%E6%98%AFJavaScript.html","/dump/knowledge/%E4%BD%9C%E7%94%A8%E5%9F%9F.html","/dump/knowledge/%E5%87%BD%E6%95%B0%E6%9F%AF%E9%87%8C%E5%8C%96.html","/dump/knowledge/%E5%89%A9%E4%BD%99%E5%8F%82%E6%95%B0.html","/dump/knowledge/%E5%93%88%E5%B8%8C%E8%B7%AF%E7%94%B1%E5%92%8CHistory%E8%B7%AF%E7%94%B1.html","/dump/knowledge/%E6%B7%B1%E6%8B%B7%E8%B4%9D%E5%92%8C%E6%B5%85%E6%8B%B7%E8%B4%9D.html","/dump/knowledge/%E7%AE%AD%E5%A4%B4%E5%87%BD%E6%95%B0.html","/dump/knowledge/%E9%97%AD%E5%8C%85.html","/dump/projects/","/dump/software-engineering/","/reading/2022/human-weakness.html","/reading/2022/nonviolent-communication.html","/reading/2023/001-self-control.html","/reading/2023/002-the-great-gatsby.html","/reading/2023/003-intimate-relationship.html","/reading/2023/004-the-courage-to-be-hated.html","/reading/2023/005-devilish-chatting-techniques.html","/reading/2023/006-lean-entrepreneurial-practice.html","/reading/2023/007-island-economics.html","/reading/2023/008-micro-habits-slimming.html","/reading/2023/009-introverts-communicate-the-bible.html","/reading/2023/010-%E5%B0%8F%E7%8E%8B%E5%AD%90.html","/reading/2023/011-rockefeller-letters.html","/reading/2023/012-autobiography-of-franklin.html","/reading/2023/013-secret.html","/reading/2023/014-quotations-from-kazuo-inamori.html","/reading/2023/015-entertain-oneself-to-death.html","/reading/2023/016-changed-my-life-by-learning-english.html","/reading/2023/017-biblical-wisdom.html","/reading/2023/018-desire-and-dignity.html","/reading/2023/019-rural-china.html","/reading/2023/021-addicted.html","/reading/2023/022-excellent-sheep.html","/reading/2024/001-pyramid-principle.html","/reading/2024/002-those-ming-dynasty-things.html","/reading/2024/003-naval.html","/reading/2024/004-xiaomi-entrepreneurial-thinking.html","/reading/2024/005-small-and-beautiful.html","/reading/2024/006-low-risk-entrepreneurship.html","/dump/algorithm/sort/","/dump/algorithm/sort/selection-sort.html","/dump/cloud-native/argocd/","/dump/cloud-native/argocd/argocd.html","/dump/cloud-native/docker/","/dump/cloud-native/docker/docker-architecture.html","/dump/cloud-native/docker/docker-image-build.html","/dump/cloud-native/docker/docker-image-structure.html","/dump/cloud-native/docker/docker-installation.html","/dump/cloud-native/docker/docker-use.html","/dump/cloud-native/kubernetes/","/dump/cloud-native/kubernetes/k8s-release-strategy.html","/dump/cloud-native/kubernetes/sealed-secrets-client-side.html","/dump/en/algorithm/","/dump/en/algorithm/sort.html","/dump/en/projects/","/dump/projects/SKIP-Docs/","/dump/projects/SKIP-Docs/contribute.html","/dump/projects/SKIP-Docs/how-to-use.html","/dump/projects/SKIP-Docs/xiaomi.html","/dump/projects/TinyCRUD-Docs/","/dump/projects/TinyCRUD-Docs/contribution-guide.html","/dump/projects/TinyCRUD-Docs/create-request.html","/dump/projects/TinyCRUD-Docs/start-using.html","/dump/software-engineering/twelve-factor/001-codebase.html","/dump/software-engineering/twelve-factor/002-dependencies.html","/dump/software-engineering/twelve-factor/003-config.html","/dump/software-engineering/twelve-factor/004-backing-services.html","/dump/software-engineering/twelve-factor/005-build-release-run.html","/dump/software-engineering/twelve-factor/006-processes.html","/dump/software-engineering/twelve-factor/007-port-binding.html","/dump/software-engineering/twelve-factor/008-concurrency.html","/dump/software-engineering/twelve-factor/009-disposability.html","/dump/software-engineering/twelve-factor/010-dev-prod-parity.html","/dump/software-engineering/twelve-factor/011-logs.html","/dump/software-engineering/twelve-factor/012-admin-processes.html","/dump/software-engineering/twelve-factor/","/dump/en/algorithm/sort/","/dump/en/algorithm/sort/selection-sort.html","/dump/en/projects/SKIP-Docs/","/dump/en/projects/SKIP-Docs/contribute.html","/dump/en/projects/SKIP-Docs/how-to-use.html","/dump/en/projects/SKIP-Docs/xiaomi.html","/dump/en/projects/TinyCRUD-Docs/","/dump/en/projects/TinyCRUD-Docs/contribution-guide.html","/dump/en/projects/TinyCRUD-Docs/create-request.html","/dump/en/projects/TinyCRUD-Docs/start-using.html","/404.html","/dump/","/reading/2022/","/reading/2023/","/reading/2024/"],De="SEARCH_PRO_QUERY_HISTORY",y=O(De,[]),Be=()=>{const{queryHistoryCount:a}=C,r=a>0;return{enabled:r,queryHistory:y,addQueryHistory:s=>{r&&(y.value=Array.from(new Set([s,...y.value.slice(0,a-1)])))},removeQueryHistory:s=>{y.value=[...y.value.slice(0,s),...y.value.slice(s+1)]}}},F=a=>be[a.id]+("anchor"in a?`#${a.anchor}`:""),Ce="SEARCH_PRO_RESULT_HISTORY",{resultHistoryCount:_}=C,f=O(Ce,[]),Ae=()=>{const a=_>0;return{enabled:a,resultHistory:f,addResultHistory:r=>{if(a){const s={link:F(r),display:r.display};"header"in r&&(s.header=r.header),f.value=[s,...f.value.slice(0,_-1)]}},removeResultHistory:r=>{f.value=[...f.value.slice(0,r),...f.value.slice(r+1)]}}},Re=a=>{const r=ce(),s=$(),A=pe(),n=q(0),k=B(()=>n.value>0),h=he([]);return ge(()=>{const{search:g,terminate:R}=ve(),E=ye(d=>{const w=d.join(" "),{searchFilter:H=p=>p,splitWord:j,suggestionsFilter:P,...v}=r.value;w?(n.value+=1,g(d.join(" "),s.value,v).then(p=>H(p,w,s.value,A.value)).then(p=>{n.value-=1,h.value=p}).catch(p=>{console.warn(p),n.value-=1,n.value||(h.value=[])})):h.value=[]},C.searchDelay-C.suggestDelay);z([a,s],([d])=>E(d),{immediate:!0}),fe(()=>{R()})}),{isSearching:k,results:h}};var je=te({name:"SearchResult",props:{queries:{type:Array,required:!0},isFocusing:Boolean},emits:["close","updateQuery"],setup(a,{emit:r}){const s=le(),A=$(),n=ae(re),{enabled:k,addQueryHistory:h,queryHistory:g,removeQueryHistory:R}=Be(),{enabled:E,resultHistory:d,addResultHistory:w,removeResultHistory:H}=Ae(),j=k||E,P=se(a,"queries"),{results:v,isSearching:p}=Re(P),i=ie({isQuery:!0,index:0}),m=q(0),c=q(0),Q=B(()=>j&&(g.value.length>0||d.value.length>0)),S=B(()=>v.value.length>0),x=B(()=>v.value[m.value]||null),J=()=>{const{isQuery:e,index:t}=i;t===0?(i.isQuery=!e,i.index=e?d.value.length-1:g.value.length-1):i.index=t-1},Y=()=>{const{isQuery:e,index:t}=i;t===(e?g.value.length-1:d.value.length-1)?(i.isQuery=!e,i.index=0):i.index=t+1},G=()=>{m.value=m.value>0?m.value-1:v.value.length-1,c.value=x.value.contents.length-1},M=()=>{m.value=m.value{c.value{c.value>0?c.value-=1:G()},T=e=>e.map(t=>ke(t)?t:l(t[0],t[1])),W=e=>{if(e.type==="customField"){const t=Ee[e.index]||"$content",[o,D=""]=we(t)?t[A.value].split("$content"):t.split("$content");return e.display.map(u=>l("div",T([o,...u,D])))}return e.display.map(t=>l("div",T(t)))},b=()=>{m.value=0,c.value=0,r("updateQuery",""),r("close")},X=()=>k?l("ul",{class:"search-pro-result-list"},l("li",{class:"search-pro-result-list-item"},[l("div",{class:"search-pro-result-title"},n.value.queryHistory),g.value.map((e,t)=>l("div",{class:["search-pro-result-item",{active:i.isQuery&&i.index===t}],onClick:()=>{r("updateQuery",e)}},[l(L,{class:"search-pro-result-type"}),l("div",{class:"search-pro-result-content"},e),l("button",{class:"search-pro-remove-icon",innerHTML:K,onClick:o=>{o.preventDefault(),o.stopPropagation(),R(t)}})]))])):null,Z=()=>E?l("ul",{class:"search-pro-result-list"},l("li",{class:"search-pro-result-list-item"},[l("div",{class:"search-pro-result-title"},n.value.resultHistory),d.value.map((e,t)=>l(U,{to:e.link,class:["search-pro-result-item",{active:!i.isQuery&&i.index===t}],onClick:()=>{b()}},()=>[l(L,{class:"search-pro-result-type"}),l("div",{class:"search-pro-result-content"},[e.header?l("div",{class:"content-header"},e.header):null,l("div",e.display.map(o=>T(o)).flat())]),l("button",{class:"search-pro-remove-icon",innerHTML:K,onClick:o=>{o.preventDefault(),o.stopPropagation(),H(t)}})]))])):null;return ne("keydown",e=>{if(a.isFocusing){if(S.value){if(e.key==="ArrowUp")N();else if(e.key==="ArrowDown")V();else if(e.key==="Enter"){const t=x.value.contents[c.value];h(a.queries.join(" ")),w(t),s.push(F(t)),b()}}else if(E){if(e.key==="ArrowUp")J();else if(e.key==="ArrowDown")Y();else if(e.key==="Enter"){const{index:t}=i;i.isQuery?(r("updateQuery",g.value[t]),e.preventDefault()):(s.push(d.value[t].link),b())}}}}),z([m,c],()=>{var e;(e=document.querySelector(".search-pro-result-list-item.active .search-pro-result-item.active"))==null||e.scrollIntoView(!1)},{flush:"post"}),()=>l("div",{class:["search-pro-result-wrapper",{empty:a.queries.length?!S.value:!Q.value}],id:"search-pro-results"},a.queries.length?p.value?l(oe,{hint:n.value.searching}):S.value?l("ul",{class:"search-pro-result-list"},v.value.map(({title:e,contents:t},o)=>{const D=m.value===o;return l("li",{class:["search-pro-result-list-item",{active:D}]},[l("div",{class:"search-pro-result-title"},e||n.value.defaultTitle),t.map((u,ee)=>{const I=D&&c.value===ee;return l(U,{to:F(u),class:["search-pro-result-item",{active:I,"aria-selected":I}],onClick:()=>{h(a.queries.join(" ")),w(u),b()}},()=>[u.type==="text"?null:l(u.type==="title"?ue:u.type==="heading"?de:me,{class:"search-pro-result-type"}),l("div",{class:"search-pro-result-content"},[u.type==="text"&&u.header?l("div",{class:"content-header"},u.header):null,l("div",W(u))])])})])})):n.value.emptyResult:j?Q.value?[X(),Z()]:n.value.emptyHistory:n.value.emptyResult)}});export{je as default}; diff --git a/assets/WordCard-DIHApE6q.js b/assets/WordCard-CtytuN7W.js similarity index 78% rename from assets/WordCard-DIHApE6q.js rename to assets/WordCard-CtytuN7W.js index 74bd74055..8eea0164e 100644 --- a/assets/WordCard-DIHApE6q.js +++ b/assets/WordCard-CtytuN7W.js @@ -1 +1 @@ -import{_ as l}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as a,c as o,b as e,L as r,e as u,M as s,N as d}from"./app-BLyK9ZJy.js";const c={props:{word:{type:String,required:!0},meaning:{type:String,required:!0},examples:{type:Array,required:!0}}},i=e("strong",null,"含义",-1);function p(_,m,n,f,g,x){return a(),o(s,null,[e("h2",null,r(n.word),1),e("p",null,[i,u(" "+r(n.meaning),1)]),(a(!0),o(s,null,d(n.examples,t=>(a(),o("div",{key:t.en},[e("p",null,r(t.en),1),e("p",null,r(t.cn),1)]))),128))],64)}const k=l(c,[["render",p],["__file","WordCard.vue"]]);export{k as default}; +import{_ as l}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as a,c as o,b as e,L as r,e as u,M as s,N as d}from"./app-BSa8cFh0.js";const c={props:{word:{type:String,required:!0},meaning:{type:String,required:!0},examples:{type:Array,required:!0}}},i=e("strong",null,"含义",-1);function p(_,m,n,f,g,x){return a(),o(s,null,[e("h2",null,r(n.word),1),e("p",null,[i,u(" "+r(n.meaning),1)]),(a(!0),o(s,null,d(n.examples,t=>(a(),o("div",{key:t.en},[e("p",null,r(t.en),1),e("p",null,r(t.cn),1)]))),128))],64)}const k=l(c,[["render",p],["__file","WordCard.vue"]]);export{k as default}; diff --git a/assets/abstract-factory.html-Wu5LLP-V.js b/assets/abstract-factory.html-D18YVWOO.js similarity index 99% rename from assets/abstract-factory.html-Wu5LLP-V.js rename to assets/abstract-factory.html-D18YVWOO.js index 88704626f..3e8775931 100644 --- a/assets/abstract-factory.html-Wu5LLP-V.js +++ b/assets/abstract-factory.html-D18YVWOO.js @@ -1,4 +1,4 @@ -import{_ as s}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as a,a as n}from"./app-BLyK9ZJy.js";const l={},h=n(`

抽象工厂模式

核心思想

抽象工厂模式提供一个创建一系列相关对象的接口,而无需指定具体的类。

典型用例

切换环境

抽象工厂模式可以用来切换不同的环境而无需修改客户端代码,例如:在测试环境中,使用模拟对象;而在生产环境中,使用实际对象。

// npm run code src/code/design-pattern/abstract-factory/switch-environment.ts
+import{_ as s}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as a,a as n}from"./app-BSa8cFh0.js";const l={},h=n(`

抽象工厂模式

核心思想

抽象工厂模式提供一个创建一系列相关对象的接口,而无需指定具体的类。

典型用例

切换环境

抽象工厂模式可以用来切换不同的环境而无需修改客户端代码,例如:在测试环境中,使用模拟对象;而在生产环境中,使用实际对象。

// npm run code src/code/design-pattern/abstract-factory/switch-environment.ts
 
 export {};
 
diff --git a/assets/adapter.html-DjsE011W.js b/assets/adapter.html-DQLmqzpw.js
similarity index 99%
rename from assets/adapter.html-DjsE011W.js
rename to assets/adapter.html-DQLmqzpw.js
index ebad25321..5d6c2e7a4 100644
--- a/assets/adapter.html-DjsE011W.js
+++ b/assets/adapter.html-DQLmqzpw.js
@@ -1,4 +1,4 @@
-import{_ as s}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as a,a as n}from"./app-BLyK9ZJy.js";const l={},h=n(`

适配器模式

核心思想

适配器模式负责在一个或多个类之间做接口转换,使得原本不兼容的接口能在一起工作。

典型用例

统一不同的接口

在处理多个具有不同接口的类时,适配器模式可以用来提供一个统一的接口,使得客户端代码可以以统一的方式与这些类交互。

在这个例子中,适配器实现了新的接口,但在内部使用了旧的接口实例,使得客户端代码可以通过新接口与旧的接口交互,而无需关心内部的具体实现。

// npm run code src/code/design-pattern/adapter/unify-interfaces.ts
+import{_ as s}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as a,a as n}from"./app-BSa8cFh0.js";const l={},h=n(`

适配器模式

核心思想

适配器模式负责在一个或多个类之间做接口转换,使得原本不兼容的接口能在一起工作。

典型用例

统一不同的接口

在处理多个具有不同接口的类时,适配器模式可以用来提供一个统一的接口,使得客户端代码可以以统一的方式与这些类交互。

在这个例子中,适配器实现了新的接口,但在内部使用了旧的接口实例,使得客户端代码可以通过新接口与旧的接口交互,而无需关心内部的具体实现。

// npm run code src/code/design-pattern/adapter/unify-interfaces.ts
 
 export {};
 
diff --git a/assets/adb-wireless-debug.html-BaIOZTa9.js b/assets/adb-wireless-debug.html-G1B5jZF7.js
similarity index 98%
rename from assets/adb-wireless-debug.html-BaIOZTa9.js
rename to assets/adb-wireless-debug.html-G1B5jZF7.js
index 2d1423c16..d72bb7cb4 100644
--- a/assets/adb-wireless-debug.html-BaIOZTa9.js
+++ b/assets/adb-wireless-debug.html-G1B5jZF7.js
@@ -1 +1 @@
-import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as a,c as t,a as d}from"./app-BLyK9ZJy.js";const n={},i=d('

ADB无线调试

准备工作

首次设置无线调试需要使用数据线连接手机,开启开发者模式和USB调试,确保手机和电脑处于同一WIFI下(电脑连接手机热点也可)。

查看当前连接的设备

使用USB连接手机,在命令行中输入adb devices,可以看到当前连接的设备列表。

为手机设置监听的端口号

在命令行中输入adb tcpip 5555,将手机的端口号设置为5555

查看手机的IP地址

在命令行中输入adb shell ifconfig,可以看到手机的IP地址,如192.168.1.100

连接手机

在命令行中输入adb connect 192.168.1.100:5555,连接手机

查看是否连接成功

在命令行中输入adb devices,可以看到当前连接的设备列表,如果列表中出现192.168.1.100:5555,说明连接成功。
此时可以拔掉USB数据线,再次输入adb devices,如果仍然可以看到192.168.1.100:5555,说明无线调试连接成功。

断开连接

在命令行中输入adb disconnect,断开连接

',15),c=[i];function o(p,l){return a(),t("div",null,c)}const h=e(n,[["render",o],["__file","adb-wireless-debug.html.vue"]]),b=JSON.parse(`{"path":"/develop/android/adb-wireless-debug.html","title":"ADB无线调试","lang":"zh-CN","frontmatter":{"description":"ADB无线调试 准备工作 首次设置无线调试需要使用数据线连接手机,开启开发者模式和USB调试,确保手机和电脑处于同一WIFI下(电脑连接手机热点也可)。 查看当前连接的设备 使用USB连接手机,在命令行中输入adb devices,可以看到当前连接的设备列表。 为手机设置监听的端口号 在命令行中输入adb tcpip 5555,将手机的端口号设置为55...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/develop/android/adb-wireless-debug.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"ADB无线调试"}],["meta",{"property":"og:description","content":"ADB无线调试 准备工作 首次设置无线调试需要使用数据线连接手机,开启开发者模式和USB调试,确保手机和电脑处于同一WIFI下(电脑连接手机热点也可)。 查看当前连接的设备 使用USB连接手机,在命令行中输入adb devices,可以看到当前连接的设备列表。 为手机设置监听的端口号 在命令行中输入adb tcpip 5555,将手机的端口号设置为55..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-03-01T05:30:25.000Z"}],["meta",{"property":"article:modified_time","content":"2024-03-01T05:30:25.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"ADB无线调试\\",\\"image\\":[\\"\\"],\\"dateModified\\":\\"2024-03-01T05:30:25.000Z\\",\\"author\\":[]}"]]},"headers":[{"level":2,"title":"准备工作","slug":"准备工作","link":"#准备工作","children":[]},{"level":2,"title":"查看当前连接的设备","slug":"查看当前连接的设备","link":"#查看当前连接的设备","children":[]},{"level":2,"title":"为手机设置监听的端口号","slug":"为手机设置监听的端口号","link":"#为手机设置监听的端口号","children":[]},{"level":2,"title":"查看手机的IP地址","slug":"查看手机的ip地址","link":"#查看手机的ip地址","children":[]},{"level":2,"title":"连接手机","slug":"连接手机","link":"#连接手机","children":[]},{"level":2,"title":"查看是否连接成功","slug":"查看是否连接成功","link":"#查看是否连接成功","children":[]},{"level":2,"title":"断开连接","slug":"断开连接","link":"#断开连接","children":[]}],"git":{"createdTime":1697638485000,"updatedTime":1709271025000},"readingTime":{"minutes":0.93,"words":279},"filePathRelative":"develop/android/adb-wireless-debug.md","localizedDate":"2023年10月18日","autoDesc":true,"excerpt":"\\n

准备工作

\\n

首次设置无线调试需要使用数据线连接手机,开启开发者模式和USB调试,确保手机和电脑处于同一WIFI下(电脑连接手机热点也可)。

\\n

查看当前连接的设备

\\n

使用USB连接手机,在命令行中输入adb devices,可以看到当前连接的设备列表。

\\n

为手机设置监听的端口号

\\n

在命令行中输入adb tcpip 5555,将手机的端口号设置为5555

\\n

查看手机的IP地址

\\n

在命令行中输入adb shell ifconfig,可以看到手机的IP地址,如192.168.1.100

"}`);export{h as comp,b as data}; +import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as a,c as t,a as d}from"./app-BSa8cFh0.js";const n={},i=d('

ADB无线调试

准备工作

首次设置无线调试需要使用数据线连接手机,开启开发者模式和USB调试,确保手机和电脑处于同一WIFI下(电脑连接手机热点也可)。

查看当前连接的设备

使用USB连接手机,在命令行中输入adb devices,可以看到当前连接的设备列表。

为手机设置监听的端口号

在命令行中输入adb tcpip 5555,将手机的端口号设置为5555

查看手机的IP地址

在命令行中输入adb shell ifconfig,可以看到手机的IP地址,如192.168.1.100

连接手机

在命令行中输入adb connect 192.168.1.100:5555,连接手机

查看是否连接成功

在命令行中输入adb devices,可以看到当前连接的设备列表,如果列表中出现192.168.1.100:5555,说明连接成功。
此时可以拔掉USB数据线,再次输入adb devices,如果仍然可以看到192.168.1.100:5555,说明无线调试连接成功。

断开连接

在命令行中输入adb disconnect,断开连接

',15),c=[i];function o(p,l){return a(),t("div",null,c)}const h=e(n,[["render",o],["__file","adb-wireless-debug.html.vue"]]),b=JSON.parse(`{"path":"/develop/android/adb-wireless-debug.html","title":"ADB无线调试","lang":"zh-CN","frontmatter":{"description":"ADB无线调试 准备工作 首次设置无线调试需要使用数据线连接手机,开启开发者模式和USB调试,确保手机和电脑处于同一WIFI下(电脑连接手机热点也可)。 查看当前连接的设备 使用USB连接手机,在命令行中输入adb devices,可以看到当前连接的设备列表。 为手机设置监听的端口号 在命令行中输入adb tcpip 5555,将手机的端口号设置为55...","head":[["meta",{"property":"og:url","content":"https://guoxicheng.top/develop/android/adb-wireless-debug.html"}],["meta",{"property":"og:site_name","content":"Guo's Page"}],["meta",{"property":"og:title","content":"ADB无线调试"}],["meta",{"property":"og:description","content":"ADB无线调试 准备工作 首次设置无线调试需要使用数据线连接手机,开启开发者模式和USB调试,确保手机和电脑处于同一WIFI下(电脑连接手机热点也可)。 查看当前连接的设备 使用USB连接手机,在命令行中输入adb devices,可以看到当前连接的设备列表。 为手机设置监听的端口号 在命令行中输入adb tcpip 5555,将手机的端口号设置为55..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-03-01T05:30:25.000Z"}],["meta",{"property":"article:modified_time","content":"2024-03-01T05:30:25.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"ADB无线调试\\",\\"image\\":[\\"\\"],\\"dateModified\\":\\"2024-03-01T05:30:25.000Z\\",\\"author\\":[]}"]]},"headers":[{"level":2,"title":"准备工作","slug":"准备工作","link":"#准备工作","children":[]},{"level":2,"title":"查看当前连接的设备","slug":"查看当前连接的设备","link":"#查看当前连接的设备","children":[]},{"level":2,"title":"为手机设置监听的端口号","slug":"为手机设置监听的端口号","link":"#为手机设置监听的端口号","children":[]},{"level":2,"title":"查看手机的IP地址","slug":"查看手机的ip地址","link":"#查看手机的ip地址","children":[]},{"level":2,"title":"连接手机","slug":"连接手机","link":"#连接手机","children":[]},{"level":2,"title":"查看是否连接成功","slug":"查看是否连接成功","link":"#查看是否连接成功","children":[]},{"level":2,"title":"断开连接","slug":"断开连接","link":"#断开连接","children":[]}],"git":{"createdTime":1697638485000,"updatedTime":1709271025000},"readingTime":{"minutes":0.93,"words":279},"filePathRelative":"develop/android/adb-wireless-debug.md","localizedDate":"2023年10月18日","autoDesc":true,"excerpt":"\\n

准备工作

\\n

首次设置无线调试需要使用数据线连接手机,开启开发者模式和USB调试,确保手机和电脑处于同一WIFI下(电脑连接手机热点也可)。

\\n

查看当前连接的设备

\\n

使用USB连接手机,在命令行中输入adb devices,可以看到当前连接的设备列表。

\\n

为手机设置监听的端口号

\\n

在命令行中输入adb tcpip 5555,将手机的端口号设置为5555

\\n

查看手机的IP地址

\\n

在命令行中输入adb shell ifconfig,可以看到手机的IP地址,如192.168.1.100

"}`);export{h as comp,b as data}; diff --git a/assets/android-compose-toggle-theme.html-Brs5hZ4b.js b/assets/android-compose-toggle-theme.html-BonZxZaP.js similarity index 99% rename from assets/android-compose-toggle-theme.html-Brs5hZ4b.js rename to assets/android-compose-toggle-theme.html-BonZxZaP.js index 7690e9ed0..1f59001c8 100644 --- a/assets/android-compose-toggle-theme.html-Brs5hZ4b.js +++ b/assets/android-compose-toggle-theme.html-BonZxZaP.js @@ -1,4 +1,4 @@ -import{_ as s}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as a,a as n}from"./app-BLyK9ZJy.js";const l={},h=n(`

Android Compose 切换应用主题

实现思路

Android 中常见的切换深色主题和浅色主题的方式:在使用 Compose 绘制的界面中,可以使用一个状态来标识当前的主题。当用户切换主题时,使用 DataStore 保存并更新主题状态,UI 会自动刷新。

MaterialTheme

在 ui.theme. Theme.kt 文件中,定义好了深色和浅色主题的样式:

private val darkColorScheme = darkColorScheme(
+import{_ as s}from"./plugin-vue_export-helper-DlAUqK2U.js";import{o as i,c as a,a as n}from"./app-BSa8cFh0.js";const l={},h=n(`

Android Compose 切换应用主题

实现思路

Android 中常见的切换深色主题和浅色主题的方式:在使用 Compose 绘制的界面中,可以使用一个状态来标识当前的主题。当用户切换主题时,使用 DataStore 保存并更新主题状态,UI 会自动刷新。

MaterialTheme

在 ui.theme. Theme.kt 文件中,定义好了深色和浅色主题的样式:

private val darkColorScheme = darkColorScheme(
     // ...
 )
 
diff --git a/assets/angular-i18n.html-96EcSr1B.js b/assets/angular-i18n.html-4oaPX1f4.js
similarity index 99%
rename from assets/angular-i18n.html-96EcSr1B.js
rename to assets/angular-i18n.html-4oaPX1f4.js
index b925155cf..a14de5e6f 100644
--- a/assets/angular-i18n.html-96EcSr1B.js
+++ b/assets/angular-i18n.html-4oaPX1f4.js
@@ -1,4 +1,4 @@
-import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as k,o as p,c as d,d as r,w as a,a as h,e as i,b as s}from"./app-BLyK9ZJy.js";const g={},B=h(`

多国语系设置

读取浏览器设置语言

const lang = (localStorage.getItem('currentLanguage') 
+import{_ as e}from"./plugin-vue_export-helper-DlAUqK2U.js";import{r as k,o as p,c as d,d as r,w as a,a as h,e as i,b as s}from"./app-BSa8cFh0.js";const g={},B=h(`

多国语系设置

读取浏览器设置语言

const lang = (localStorage.getItem('currentLanguage') 
     || window.navigator.language || '').includes('zh') ? 'zh' : 'en';

安装依赖

npm install @ngx-translate/core --save
 npm install @ngx-translate/http-loader  --save

app.module.ts 导入

// 自定义的语言处理
 import { HttpClientModule } from '@angular/common/http';
diff --git a/assets/app-BLyK9ZJy.js b/assets/app-BSa8cFh0.js
similarity index 59%
rename from assets/app-BLyK9ZJy.js
rename to assets/app-BSa8cFh0.js
index 9b0203069..92fcab94f 100644
--- a/assets/app-BLyK9ZJy.js
+++ b/assets/app-BSa8cFh0.js
@@ -1,30 +1,30 @@
-const __vite__fileDeps=["assets/index.html-Brn939rB.js","assets/plugin-vue_export-helper-DlAUqK2U.js","assets/index.html-Eo1iEqhj.js","assets/android-compose-toggle-theme.html-Brs5hZ4b.js","assets/app-deployment-evolution.html-B1ZbtAoX.js","assets/cross-domain.html-Dq4Ypu1w.js","assets/debounce-throttle.html-Dfl2Vj7I.js","assets/history-of-javascript.html-DCfoyA9S.js","assets/make-npm-lib.html-BaLa_mBq.js","assets/sftp-usage.html-CO07ahcX.js","assets/index.html-DNtUiDEP.js","assets/index.html-CTwfMSoe.js","assets/js-full-stack.html-D_YQ3YVv.js","assets/index.html-DGnA2D96.js","assets/index.html-BIXYqJe2.js","assets/chain-of-responsibility.html-0BcdiADK.js","assets/command.html-zpn787bM.js","assets/iterator.html-CckuVqGa.js","assets/mediator.html-CGoyAa8j.js","assets/memento.html-CLlR2vRm.js","assets/observer.html-9_C195L8.js","assets/state.html-cuYqQBsU.js","assets/strategy.html-DLA0XV4y.js","assets/template-method.html-ButBn21i.js","assets/visitor.html-DtkMbRgK.js","assets/index.html-yPCDSSRB.js","assets/abstract-factory.html-Wu5LLP-V.js","assets/builder.html-6l2usi86.js","assets/factory-method.html-DzmDLQ0_.js","assets/prototype.html-8ajIxDam.js","assets/singleton.html-B1y_iO-_.js","assets/index.html-W6zBPAHf.js","assets/adapter.html-DjsE011W.js","assets/bridge.html-VXpPTkm3.js","assets/composite.html-Bw9sukCu.js","assets/decorator.html-DOJkfU3t.js","assets/facade.html-ByUeF5P7.js","assets/flyweight.html-DhgRwv1u.js","assets/proxy.html-D5hZb8Uf.js","assets/index.html-ByYI5bBM.js","assets/adb-wireless-debug.html-BaIOZTa9.js","assets/index.html-vqqXZDmF.js","assets/angular-i18n.html-96EcSr1B.js","assets/azure-login.html-C2WjpbXp.js","assets/components-share-data.html-DEHhkM7l.js","assets/karma-config.html-DdxmtQ3K.js","assets/index.html-BKlFuXNy.js","assets/transaction-isolation-level.html-AnQn_T2L.js","assets/index.html-Bq3aqi-a.js","assets/git-installation.html-Ct9_nJiT.js","assets/git-tag.html-Bc8xXnd-.js","assets/git-use.html-BvmFr3U4.js","assets/index.html-IZCWuNPl.js","assets/classical-layout.html-DsIh35a_.js","assets/flex-layout.html-Z9RzFOgN.js","assets/grid-layout.html-OjUOD_yh.js","assets/index.html-DrsyYefh.js","assets/index.html-C6gjscMY.js","assets/index.html-DRk4K6B0.js","assets/usage-of-state.html-CcyfTEP_.js","assets/index.html-jUfzWAal.js","assets/test-coverage-example.html-DgO5999B.js","assets/index.html-BM3l3NJU.js","assets/custom-decorator.html-Cdr2pDf7.js","assets/generic-function.html-BSF7rs36.js","assets/index.html-BTOqXWty.js","assets/sort.html-DZfxn26Q.js","assets/index.html-C6v0fv_i.js","assets/index.html-CLCzT4cm.js","assets/和___.html-BqWbjAWt.js","assets/GET和POST.html-BPLasswN.js","assets/HTTP和HTTPS.html-CYv0fRc1.js","assets/JS数字精度丢失问题.html-BNq6k-BX.js","assets/index.html-DstrKOuP.js","assets/apply、call、bind.html-FjN1eK2s.js","assets/arguments对象.html-DbOI2hAS.js","assets/px、em、rem、vh、vw.html-DPhcOAED.js","assets/state和props.html-CYD9ymzQ.js","assets/this对象.html-DnU7gRt8.js","assets/typeof和instanceof.html-CQtQooo5.js","assets/var、let、const.html-DvA3jqBm.js","assets/什么是JavaScript.html-CwIdVKGi.js","assets/作用域.html-CHCt_X4Y.js","assets/函数柯里化.html-CniUOAZ3.js","assets/剩余参数.html-DjmiH_jD.js","assets/哈希路由和History路由.html-DJjWAC2X.js","assets/深拷贝和浅拷贝.html-DhcWyWfj.js","assets/箭头函数.html-Cu5dB0ds.js","assets/闭包.html-128NLDXX.js","assets/index.html-BtHx2QpR.js","assets/index.html-Bm0ydy6q.js","assets/human-weakness.html-CX1gm9vJ.js","assets/nonviolent-communication.html-B53Ryvo4.js","assets/001-self-control.html-rHldA_Mg.js","assets/002-the-great-gatsby.html-P4drTvUC.js","assets/003-intimate-relationship.html-DjQFKM8p.js","assets/004-the-courage-to-be-hated.html-C3nKxC1V.js","assets/005-devilish-chatting-techniques.html-BQgV7FQe.js","assets/006-lean-entrepreneurial-practice.html-DxZ4DEfK.js","assets/007-island-economics.html-BQdhw1NV.js","assets/008-micro-habits-slimming.html-DC76RlLZ.js","assets/009-introverts-communicate-the-bible.html-DyEf-zfw.js","assets/010-小王子.html-DpF9cDJi.js","assets/011-rockefeller-letters.html-xT3XBJEQ.js","assets/012-autobiography-of-franklin.html-D2HqNmSa.js","assets/013-secret.html-DrWH3UIQ.js","assets/014-quotations-from-kazuo-inamori.html-DtQ7fJCV.js","assets/015-entertain-oneself-to-death.html-25tPWoFC.js","assets/016-changed-my-life-by-learning-english.html-N66A6BX3.js","assets/017-biblical-wisdom.html-B5CHtaoM.js","assets/018-desire-and-dignity.html-UmwJOa0K.js","assets/019-rural-china.html-D_D8w-vu.js","assets/021-addicted.html-D8v-7oR9.js","assets/022-excellent-sheep.html-DseGRHOf.js","assets/001-pyramid-principle.html-BFmEMeNM.js","assets/002-those-ming-dynasty-things.html-Dom19Hpy.js","assets/003-naval.html-D-e1jHRy.js","assets/004-xiaomi-entrepreneurial-thinking.html-5OdYnxWt.js","assets/005-small-and-beautiful.html-BguQ-TEF.js","assets/index.html-bJIw4wiH.js","assets/selection-sort.html-VEta-KXx.js","assets/index.html-BKb90yGU.js","assets/argocd.html-pQvbjtMj.js","assets/index.html-DJHLZ2ri.js","assets/docker-architecture.html-DAdK6H_Q.js","assets/docker-image-build.html-CZwg1zYd.js","assets/docker-image-structure.html-Bq9JKLEi.js","assets/docker-installation.html-BBjEo4iD.js","assets/docker-use.html-B0lD3A5V.js","assets/index.html-CjOsnn8U.js","assets/k8s-release-strategy.html-DbJ1H0-h.js","assets/sealed-secrets-client-side.html-BD2OyOLa.js","assets/index.html-BDg5NsVa.js","assets/sort.html-CFiSWZCM.js","assets/index.html-DDe17mRU.js","assets/index.html-mlTZ9KWn.js","assets/main-interface-dark-CcLeW7jq.js","assets/contribute.html-n4axwz4J.js","assets/android-rect-rdWkx8Q9.js","assets/how-to-use.html-yvK2kVAf.js","assets/use-accessibility-dark-CEKkbCfL.js","assets/xiaomi.html-DhVwP4Aw.js","assets/xiaomi-enable-self-start-dark-ji3Q4Oe9.js","assets/index.html-Cn0-1OB3.js","assets/wechat-3rsSBYyx.js","assets/contribution-guide.html-DFwkBPLx.js","assets/create-request.html-DKjZdQP4.js","assets/start-using.html-BFC0yotD.js","assets/001-codebase.html-BenIOnKZ.js","assets/002-dependencies.html-CCTivZci.js","assets/003-config.html-BODubnRc.js","assets/004-backing-services.html-BU9TVUpC.js","assets/005-build-release-run.html-DXvVYxAI.js","assets/006-processes.html-PQNeUWrx.js","assets/007-port-binding.html-5zvAZ7Uu.js","assets/008-concurrency.html-C9yJTBMF.js","assets/009-disposability.html-YYnQkiDh.js","assets/010-dev-prod-parity.html-6Dg87FXo.js","assets/011-logs.html-DF3YswRh.js","assets/012-admin-processes.html-BsVbs3RW.js","assets/index.html-BJd4c1Mt.js","assets/index.html-xC86tdB3.js","assets/selection-sort.html--xn9tGKa.js","assets/index.html-Dg-5FtzE.js","assets/contribute.html-DStPuMz0.js","assets/how-to-use.html-B2OjJnxe.js","assets/xiaomi.html-3MxuZCp2.js","assets/index.html-CWHLjlxv.js","assets/contribution-guide.html-BkK6AUgX.js","assets/create-request.html-B4nOTG3s.js","assets/start-using.html-CGP1tZkO.js","assets/404.html-CGRfCgAP.js","assets/index.html-BW3MSdrG.js","assets/index.html-OBp4GXmd.js","assets/index.html-BYOuHqGL.js","assets/index.html-JunUIZOc.js","assets/WordCard-DIHApE6q.js"],__vite__mapDeps=i=>i.map(i=>__vite__fileDeps[i]);
+const __vite__fileDeps=["assets/index.html-CRR3bmkZ.js","assets/plugin-vue_export-helper-DlAUqK2U.js","assets/index.html-yATyb_At.js","assets/android-compose-toggle-theme.html-BonZxZaP.js","assets/app-deployment-evolution.html-CqbAAGOt.js","assets/cross-domain.html-DngXa6Oa.js","assets/debounce-throttle.html-8nVLpaD-.js","assets/history-of-javascript.html-CJoiSEgi.js","assets/make-npm-lib.html-DSasP1Ka.js","assets/sftp-usage.html-BxUF5tYw.js","assets/index.html-DaIlkqyf.js","assets/index.html-CA9GwR5b.js","assets/js-full-stack.html-CrboZL7D.js","assets/index.html-fo57XW3Z.js","assets/index.html-BBAY8kzd.js","assets/chain-of-responsibility.html-BksNeTnb.js","assets/command.html-ja-KViWA.js","assets/iterator.html-QU1R76zp.js","assets/mediator.html-xqpIWDq-.js","assets/memento.html-OvYYHGi_.js","assets/observer.html-DSrDqkvF.js","assets/state.html-Bku4FWRp.js","assets/strategy.html-BjlQmvob.js","assets/template-method.html-DQLCUMq7.js","assets/visitor.html-D3II45NS.js","assets/index.html-BPjJKngv.js","assets/abstract-factory.html-D18YVWOO.js","assets/builder.html-B0eKILcP.js","assets/factory-method.html-Cqrklfa7.js","assets/prototype.html-C1r-5LRr.js","assets/singleton.html-aLBuWcjG.js","assets/index.html-BBZ-UWKB.js","assets/adapter.html-DQLmqzpw.js","assets/bridge.html-CyV3bdrh.js","assets/composite.html-D4Q91ot1.js","assets/decorator.html-CrVuLbBN.js","assets/facade.html-DgrJ6BJA.js","assets/flyweight.html-khO-06ds.js","assets/proxy.html-CBUlxhqz.js","assets/index.html-B--VeDuB.js","assets/adb-wireless-debug.html-G1B5jZF7.js","assets/index.html-BDQc6rI7.js","assets/angular-i18n.html-4oaPX1f4.js","assets/azure-login.html-CW2Tg46q.js","assets/components-share-data.html-CAPYtWK_.js","assets/karma-config.html-Do7D2C9w.js","assets/index.html-_ztMlTab.js","assets/transaction-isolation-level.html--AMNUCzu.js","assets/index.html-BECZYh5k.js","assets/git-installation.html-BQLFVXJr.js","assets/git-tag.html-Mx9u7Wq0.js","assets/git-use.html-CZGAVEP0.js","assets/index.html-CE--NcW2.js","assets/classical-layout.html-BAaKS8KI.js","assets/flex-layout.html-QgaDp0-Z.js","assets/grid-layout.html-BJqOKAws.js","assets/index.html-C8dMdebp.js","assets/index.html-G-UghoaC.js","assets/index.html-BEXohZli.js","assets/usage-of-state.html-CSau87ub.js","assets/index.html-DN8J3LBn.js","assets/test-coverage-example.html-ChRD7921.js","assets/index.html-C-FT5TcK.js","assets/custom-decorator.html-DewcEI46.js","assets/generic-function.html-BIbNnbwB.js","assets/index.html-qe9rS8Zk.js","assets/sort.html-BnRkuj-d.js","assets/index.html-DjjexhjN.js","assets/index.html-Dz3vdB74.js","assets/和___.html-V67F7fio.js","assets/GET和POST.html-Dvujndbz.js","assets/HTTP和HTTPS.html-CEW_EhML.js","assets/JS数字精度丢失问题.html-CYAMyiCx.js","assets/index.html-R-10JjXe.js","assets/apply、call、bind.html-vYmZkFju.js","assets/arguments对象.html-B1Pz4srF.js","assets/px、em、rem、vh、vw.html-CI-pCqRO.js","assets/state和props.html-gfu7nakB.js","assets/this对象.html-Coax16p4.js","assets/typeof和instanceof.html-DLKZruzo.js","assets/var、let、const.html-By6eU2M5.js","assets/什么是JavaScript.html-DpPTW-9U.js","assets/作用域.html-CH0ewwLP.js","assets/函数柯里化.html-DqYSm1x6.js","assets/剩余参数.html-gNas6dNZ.js","assets/哈希路由和History路由.html-BIHIUYy6.js","assets/深拷贝和浅拷贝.html-Cpazt2UH.js","assets/箭头函数.html-CMWd-7na.js","assets/闭包.html-CAQNZh4l.js","assets/index.html-BFRJrx4i.js","assets/index.html-D7Q7APMY.js","assets/human-weakness.html-3JscoAxt.js","assets/nonviolent-communication.html-CPBsxeJ5.js","assets/001-self-control.html-DD2sWzcO.js","assets/002-the-great-gatsby.html-CbFWnlvh.js","assets/003-intimate-relationship.html-C5rFDAOQ.js","assets/004-the-courage-to-be-hated.html-DUfzzjRY.js","assets/005-devilish-chatting-techniques.html-yREWOw9j.js","assets/006-lean-entrepreneurial-practice.html-C-ACJWzO.js","assets/007-island-economics.html-D50o5pCb.js","assets/008-micro-habits-slimming.html-B7Ku9Ih6.js","assets/009-introverts-communicate-the-bible.html-BSvctGL9.js","assets/010-小王子.html-CIg6Zfpz.js","assets/011-rockefeller-letters.html-Djo_xIIJ.js","assets/012-autobiography-of-franklin.html-BpfRRZKr.js","assets/013-secret.html-DJJMPjUU.js","assets/014-quotations-from-kazuo-inamori.html-DK69K60U.js","assets/015-entertain-oneself-to-death.html-B5H-dasr.js","assets/016-changed-my-life-by-learning-english.html-CPjXV3Xe.js","assets/017-biblical-wisdom.html-4jKkvJns.js","assets/018-desire-and-dignity.html-C_rjUwoi.js","assets/019-rural-china.html-B2zejjSr.js","assets/021-addicted.html-PVwbcCu-.js","assets/022-excellent-sheep.html-B5hvhU1e.js","assets/001-pyramid-principle.html-B29R0TZU.js","assets/002-those-ming-dynasty-things.html-LZIqC68F.js","assets/003-naval.html-Cgl8Tfeb.js","assets/004-xiaomi-entrepreneurial-thinking.html-BCygaWwM.js","assets/005-small-and-beautiful.html-CXAbnsZT.js","assets/006-low-risk-entrepreneurship.html-PiGZ1Hcf.js","assets/index.html-Dio_lk3z.js","assets/selection-sort.html-njwSqnNX.js","assets/index.html-BEILxa9L.js","assets/argocd.html-CAOH8OYQ.js","assets/index.html-DOn0miG_.js","assets/docker-architecture.html-D8_QhbIq.js","assets/docker-image-build.html-D9lj3ET4.js","assets/docker-image-structure.html-BRk-bkgw.js","assets/docker-installation.html-DhBFg_hi.js","assets/docker-use.html-8ucPnw8W.js","assets/index.html-BrBK_lGu.js","assets/k8s-release-strategy.html-D1be4wgQ.js","assets/sealed-secrets-client-side.html-DRSNRzib.js","assets/index.html-DPisnqRp.js","assets/sort.html-1fSWpaEb.js","assets/index.html-CA0wOLSR.js","assets/index.html-DUBkicuy.js","assets/main-interface-dark-CcLeW7jq.js","assets/contribute.html-DiBtGwJa.js","assets/android-rect-rdWkx8Q9.js","assets/how-to-use.html-Df7evFYJ.js","assets/use-accessibility-dark-CEKkbCfL.js","assets/xiaomi.html-Cfhsz-S6.js","assets/xiaomi-enable-self-start-dark-ji3Q4Oe9.js","assets/index.html-lJje50V4.js","assets/wechat-3rsSBYyx.js","assets/contribution-guide.html-xMZ-uu8m.js","assets/create-request.html-C6tXKLFg.js","assets/start-using.html-Cg5I1wB_.js","assets/001-codebase.html-KE09tOka.js","assets/002-dependencies.html-BJWeHlsl.js","assets/003-config.html-CG0yPUOa.js","assets/004-backing-services.html-d053y8dM.js","assets/005-build-release-run.html-C_eqmPUo.js","assets/006-processes.html-CiX1ZK1e.js","assets/007-port-binding.html-DdoumpZG.js","assets/008-concurrency.html-CHlHe31d.js","assets/009-disposability.html-DpW9rlw5.js","assets/010-dev-prod-parity.html-Hq-Q3YXn.js","assets/011-logs.html-DMqKoo1n.js","assets/012-admin-processes.html-BF1MZhXi.js","assets/index.html-CHno9ym-.js","assets/index.html-7_htggJc.js","assets/selection-sort.html-NY7mNJ_4.js","assets/index.html-DNI_yerb.js","assets/contribute.html-DyVlnPhx.js","assets/how-to-use.html-QQkFaj57.js","assets/xiaomi.html-Cj_NhqOu.js","assets/index.html-D0d6l9g2.js","assets/contribution-guide.html-CNV93BuF.js","assets/create-request.html-vnXUgMlO.js","assets/start-using.html-B71qv67K.js","assets/404.html-CjZ4flCW.js","assets/index.html-CzVhMQ8i.js","assets/index.html-BQTIvK78.js","assets/index.html-442_0BoN.js","assets/index.html-CU1tcaYR.js","assets/WordCard-CtytuN7W.js"],__vite__mapDeps=i=>i.map(i=>__vite__fileDeps[i]);
 /**
 * @vue/shared v3.4.27
 * (c) 2018-present Yuxi (Evan) You and Vue contributors
 * @license MIT
-**//*! #__NO_SIDE_EFFECTS__ */function Cl(e,t){const n=new Set(e.split(","));return r=>n.has(r)}const ye={},An=[],ot=()=>{},Yu=()=>!1,br=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Al=e=>e.startsWith("onUpdate:"),ke=Object.assign,kl=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Qu=Object.prototype.hasOwnProperty,ie=(e,t)=>Qu.call(e,t),Z=Array.isArray,kn=e=>so(e)==="[object Map]",Ks=e=>so(e)==="[object Set]",re=e=>typeof e=="function",xe=e=>typeof e=="string",mn=e=>typeof e=="symbol",me=e=>e!==null&&typeof e=="object",Js=e=>(me(e)||re(e))&&re(e.then)&&re(e.catch),Ys=Object.prototype.toString,so=e=>Ys.call(e),Xu=e=>so(e).slice(8,-1),Qs=e=>so(e)==="[object Object]",Ll=e=>xe(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Ln=Cl(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),io=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Zu=/-(\w)/g,st=io(e=>e.replace(Zu,(t,n)=>n?n.toUpperCase():"")),ed=/\B([A-Z])/g,Vn=io(e=>e.replace(ed,"-$1").toLowerCase()),yr=io(e=>e.charAt(0).toUpperCase()+e.slice(1)),wo=io(e=>e?`on${yr(e)}`:""),Kt=(e,t)=>!Object.is(e,t),To=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},td=e=>{const t=parseFloat(e);return isNaN(t)?e:t},nd=e=>{const t=xe(e)?Number(e):NaN;return isNaN(t)?e:t};let ya;const Zs=()=>ya||(ya=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Sl(e){if(Z(e)){const t={};for(let n=0;n{if(n){const r=n.split(od);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function Ol(e){let t="";if(xe(e))t=e;else if(Z(e))for(let n=0;nxe(e)?e:e==null?"":Z(e)||me(e)&&(e.toString===Ys||!re(e.toString))?JSON.stringify(e,ti,2):String(e),ti=(e,t)=>t&&t.__v_isRef?ti(e,t.value):kn(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,o],l)=>(n[Co(r,l)+" =>"]=o,n),{})}:Ks(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Co(n))}:mn(t)?Co(t):me(t)&&!Z(t)&&!Qs(t)?String(t):t,Co=(e,t="")=>{var n;return mn(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/**
+**//*! #__NO_SIDE_EFFECTS__ */function Al(e,t){const n=new Set(e.split(","));return r=>n.has(r)}const ye={},Cn=[],ot=()=>{},Yu=()=>!1,br=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Cl=e=>e.startsWith("onUpdate:"),ke=Object.assign,kl=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Qu=Object.prototype.hasOwnProperty,ie=(e,t)=>Qu.call(e,t),Z=Array.isArray,kn=e=>so(e)==="[object Map]",Ks=e=>so(e)==="[object Set]",re=e=>typeof e=="function",xe=e=>typeof e=="string",mn=e=>typeof e=="symbol",me=e=>e!==null&&typeof e=="object",Js=e=>(me(e)||re(e))&&re(e.then)&&re(e.catch),Ys=Object.prototype.toString,so=e=>Ys.call(e),Xu=e=>so(e).slice(8,-1),Qs=e=>so(e)==="[object Object]",Ll=e=>xe(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Ln=Al(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),io=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Zu=/-(\w)/g,st=io(e=>e.replace(Zu,(t,n)=>n?n.toUpperCase():"")),ed=/\B([A-Z])/g,Vn=io(e=>e.replace(ed,"-$1").toLowerCase()),yr=io(e=>e.charAt(0).toUpperCase()+e.slice(1)),wo=io(e=>e?`on${yr(e)}`:""),Kt=(e,t)=>!Object.is(e,t),To=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},td=e=>{const t=parseFloat(e);return isNaN(t)?e:t},nd=e=>{const t=xe(e)?Number(e):NaN;return isNaN(t)?e:t};let ya;const Zs=()=>ya||(ya=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Sl(e){if(Z(e)){const t={};for(let n=0;n{if(n){const r=n.split(od);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function Ol(e){let t="";if(xe(e))t=e;else if(Z(e))for(let n=0;nxe(e)?e:e==null?"":Z(e)||me(e)&&(e.toString===Ys||!re(e.toString))?JSON.stringify(e,ti,2):String(e),ti=(e,t)=>t&&t.__v_isRef?ti(e,t.value):kn(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,o],l)=>(n[Ao(r,l)+" =>"]=o,n),{})}:Ks(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Ao(n))}:mn(t)?Ao(t):me(t)&&!Z(t)&&!Qs(t)?String(t):t,Ao=(e,t="")=>{var n;return mn(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/**
 * @vue/reactivity v3.4.27
 * (c) 2018-present Yuxi (Evan) You and Vue contributors
 * @license MIT
-**/let Je;class cd{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=Je,!t&&Je&&(this.index=(Je.scopes||(Je.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=Je;try{return Je=this,t()}finally{Je=n}}}on(){Je=this}off(){Je=this.parent}stop(t){if(this._active){let n,r;for(n=0,r=this.effects.length;n=4))break}this._dirtyLevel===1&&(this._dirtyLevel=0),Xt()}return this._dirtyLevel>=4}set dirty(t){this._dirtyLevel=t?4:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let t=Wt,n=dn;try{return Wt=!0,dn=this,this._runnings++,Ea(this),this.fn()}finally{wa(this),this._runnings--,dn=n,Wt=t}}stop(){this.active&&(Ea(this),wa(this),this.onStop&&this.onStop(),this.active=!1)}}function fd(e){return e.value}function Ea(e){e._trackId++,e._depsLength=0}function wa(e){if(e.deps.length>e._depsLength){for(let t=e._depsLength;t{const n=new Map;return n.cleanup=e,n.computed=t,n},Yr=new WeakMap,fn=Symbol(""),Zo=Symbol("");function We(e,t,n){if(Wt&&dn){let r=Yr.get(e);r||Yr.set(e,r=new Map);let o=r.get(n);o||r.set(n,o=si(()=>r.delete(n))),li(dn,o)}}function xt(e,t,n,r,o,l){const a=Yr.get(e);if(!a)return;let s=[];if(t==="clear")s=[...a.values()];else if(n==="length"&&Z(e)){const i=Number(r);a.forEach((c,d)=>{(d==="length"||!mn(d)&&d>=i)&&s.push(c)})}else switch(n!==void 0&&s.push(a.get(n)),t){case"add":Z(e)?Ll(n)&&s.push(a.get("length")):(s.push(a.get(fn)),kn(e)&&s.push(a.get(Zo)));break;case"delete":Z(e)||(s.push(a.get(fn)),kn(e)&&s.push(a.get(Zo)));break;case"set":kn(e)&&s.push(a.get(fn));break}xl();for(const i of s)i&&ai(i,4);Rl()}function pd(e,t){const n=Yr.get(e);return n&&n.get(t)}const hd=Cl("__proto__,__v_isRef,__isVue"),ii=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(mn)),Ta=md();function md(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const r=ce(this);for(let l=0,a=this.length;l{e[t]=function(...n){Qt(),xl();const r=ce(this)[t].apply(this,n);return Rl(),Xt(),r}}),e}function vd(e){mn(e)||(e=String(e));const t=ce(this);return We(t,"has",e),t.hasOwnProperty(e)}class ci{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,r){const o=this._isReadonly,l=this._isShallow;if(n==="__v_isReactive")return!o;if(n==="__v_isReadonly")return o;if(n==="__v_isShallow")return l;if(n==="__v_raw")return r===(o?l?Od:pi:l?fi:di).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;const a=Z(t);if(!o){if(a&&ie(Ta,n))return Reflect.get(Ta,n,r);if(n==="hasOwnProperty")return vd}const s=Reflect.get(t,n,r);return(mn(n)?ii.has(n):hd(n))||(o||We(t,"get",n),l)?s:Ve(s)?a&&Ll(n)?s:s.value:me(s)?o?jn(s):Er(s):s}}class ui extends ci{constructor(t=!1){super(!1,t)}set(t,n,r,o){let l=t[n];if(!this._isShallow){const i=ar(l);if(!Qr(r)&&!ar(r)&&(l=ce(l),r=ce(r)),!Z(t)&&Ve(l)&&!Ve(r))return i?!1:(l.value=r,!0)}const a=Z(t)&&Ll(n)?Number(n)e,co=e=>Reflect.getPrototypeOf(e);function Rr(e,t,n=!1,r=!1){e=e.__v_raw;const o=ce(e),l=ce(t);n||(Kt(t,l)&&We(o,"get",t),We(o,"get",l));const{has:a}=co(o),s=r?Il:n?Ml:sr;if(a.call(o,t))return s(e.get(t));if(a.call(o,l))return s(e.get(l));e!==o&&e.get(t)}function Ir(e,t=!1){const n=this.__v_raw,r=ce(n),o=ce(e);return t||(Kt(e,o)&&We(r,"has",e),We(r,"has",o)),e===o?n.has(e):n.has(e)||n.has(o)}function Dr(e,t=!1){return e=e.__v_raw,!t&&We(ce(e),"iterate",fn),Reflect.get(e,"size",e)}function Ca(e){e=ce(e);const t=ce(this);return co(t).has.call(t,e)||(t.add(e),xt(t,"add",e,e)),this}function Aa(e,t){t=ce(t);const n=ce(this),{has:r,get:o}=co(n);let l=r.call(n,e);l||(e=ce(e),l=r.call(n,e));const a=o.call(n,e);return n.set(e,t),l?Kt(t,a)&&xt(n,"set",e,t):xt(n,"add",e,t),this}function ka(e){const t=ce(this),{has:n,get:r}=co(t);let o=n.call(t,e);o||(e=ce(e),o=n.call(t,e)),r&&r.call(t,e);const l=t.delete(e);return o&&xt(t,"delete",e,void 0),l}function La(){const e=ce(this),t=e.size!==0,n=e.clear();return t&&xt(e,"clear",void 0,void 0),n}function $r(e,t){return function(r,o){const l=this,a=l.__v_raw,s=ce(a),i=t?Il:e?Ml:sr;return!e&&We(s,"iterate",fn),a.forEach((c,d)=>r.call(o,i(c),i(d),l))}}function Mr(e,t,n){return function(...r){const o=this.__v_raw,l=ce(o),a=kn(l),s=e==="entries"||e===Symbol.iterator&&a,i=e==="keys"&&a,c=o[e](...r),d=n?Il:t?Ml:sr;return!t&&We(l,"iterate",i?Zo:fn),{next(){const{value:f,done:p}=c.next();return p?{value:f,done:p}:{value:s?[d(f[0]),d(f[1])]:d(f),done:p}},[Symbol.iterator](){return this}}}}function $t(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Ed(){const e={get(l){return Rr(this,l)},get size(){return Dr(this)},has:Ir,add:Ca,set:Aa,delete:ka,clear:La,forEach:$r(!1,!1)},t={get(l){return Rr(this,l,!1,!0)},get size(){return Dr(this)},has:Ir,add:Ca,set:Aa,delete:ka,clear:La,forEach:$r(!1,!0)},n={get(l){return Rr(this,l,!0)},get size(){return Dr(this,!0)},has(l){return Ir.call(this,l,!0)},add:$t("add"),set:$t("set"),delete:$t("delete"),clear:$t("clear"),forEach:$r(!0,!1)},r={get(l){return Rr(this,l,!0,!0)},get size(){return Dr(this,!0)},has(l){return Ir.call(this,l,!0)},add:$t("add"),set:$t("set"),delete:$t("delete"),clear:$t("clear"),forEach:$r(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(l=>{e[l]=Mr(l,!1,!1),n[l]=Mr(l,!0,!1),t[l]=Mr(l,!1,!0),r[l]=Mr(l,!0,!0)}),[e,n,t,r]}const[wd,Td,Cd,Ad]=Ed();function Dl(e,t){const n=t?e?Ad:Cd:e?Td:wd;return(r,o,l)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?r:Reflect.get(ie(n,o)&&o in r?n:r,o,l)}const kd={get:Dl(!1,!1)},Ld={get:Dl(!1,!0)},Sd={get:Dl(!0,!1)};const di=new WeakMap,fi=new WeakMap,pi=new WeakMap,Od=new WeakMap;function Pd(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function xd(e){return e.__v_skip||!Object.isExtensible(e)?0:Pd(Xu(e))}function Er(e){return ar(e)?e:$l(e,!1,_d,kd,di)}function hi(e){return $l(e,!1,yd,Ld,fi)}function jn(e){return $l(e,!0,bd,Sd,pi)}function $l(e,t,n,r,o){if(!me(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const l=o.get(e);if(l)return l;const a=xd(e);if(a===0)return e;const s=new Proxy(e,a===2?r:n);return o.set(e,s),s}function Yn(e){return ar(e)?Yn(e.__v_raw):!!(e&&e.__v_isReactive)}function ar(e){return!!(e&&e.__v_isReadonly)}function Qr(e){return!!(e&&e.__v_isShallow)}function mi(e){return e?!!e.__v_raw:!1}function ce(e){const t=e&&e.__v_raw;return t?ce(t):e}function Rd(e){return Object.isExtensible(e)&&Xs(e,"__v_skip",!0),e}const sr=e=>me(e)?Er(e):e,Ml=e=>me(e)?jn(e):e;class vi{constructor(t,n,r,o){this.getter=t,this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new Pl(()=>t(this._value),()=>Qn(this,this.effect._dirtyLevel===2?2:3)),this.effect.computed=this,this.effect.active=this._cacheable=!o,this.__v_isReadonly=r}get value(){const t=ce(this);return(!t._cacheable||t.effect.dirty)&&Kt(t._value,t._value=t.effect.run())&&Qn(t,4),Vl(t),t.effect._dirtyLevel>=2&&Qn(t,2),t._value}set value(t){this._setter(t)}get _dirty(){return this.effect.dirty}set _dirty(t){this.effect.dirty=t}}function Id(e,t,n=!1){let r,o;const l=re(e);return l?(r=e,o=ot):(r=e.get,o=e.set),new vi(r,o,l||!o,n)}function Vl(e){var t;Wt&&dn&&(e=ce(e),li(dn,(t=e.dep)!=null?t:e.dep=si(()=>e.dep=void 0,e instanceof vi?e:void 0)))}function Qn(e,t=4,n){e=ce(e);const r=e.dep;r&&ai(r,t)}function Ve(e){return!!(e&&e.__v_isRef===!0)}function U(e){return gi(e,!1)}function Le(e){return gi(e,!0)}function gi(e,t){return Ve(e)?e:new Dd(e,t)}class Dd{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:ce(t),this._value=n?t:sr(t)}get value(){return Vl(this),this._value}set value(t){const n=this.__v_isShallow||Qr(t)||ar(t);t=n?t:ce(t),Kt(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:sr(t),Qn(this,4))}}function pn(e){return Ve(e)?e.value:e}const $d={get:(e,t,n)=>pn(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const o=e[t];return Ve(o)&&!Ve(n)?(o.value=n,!0):Reflect.set(e,t,n,r)}};function _i(e){return Yn(e)?e:new Proxy(e,$d)}class Md{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:r}=t(()=>Vl(this),()=>Qn(this));this._get=n,this._set=r}get value(){return this._get()}set value(t){this._set(t)}}function bi(e){return new Md(e)}class Vd{constructor(t,n,r){this._object=t,this._key=n,this._defaultValue=r,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return pd(ce(this._object),this._key)}}class jd{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function uo(e,t,n){return Ve(e)?e:re(e)?new jd(e):me(e)&&arguments.length>1?Nd(e,t,n):U(e)}function Nd(e,t,n){const r=e[t];return Ve(r)?r:new Vd(e,t,n)}/**
+**/let Je;class cd{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=Je,!t&&Je&&(this.index=(Je.scopes||(Je.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=Je;try{return Je=this,t()}finally{Je=n}}}on(){Je=this}off(){Je=this.parent}stop(t){if(this._active){let n,r;for(n=0,r=this.effects.length;n=4))break}this._dirtyLevel===1&&(this._dirtyLevel=0),Xt()}return this._dirtyLevel>=4}set dirty(t){this._dirtyLevel=t?4:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let t=Wt,n=dn;try{return Wt=!0,dn=this,this._runnings++,Ea(this),this.fn()}finally{wa(this),this._runnings--,dn=n,Wt=t}}stop(){this.active&&(Ea(this),wa(this),this.onStop&&this.onStop(),this.active=!1)}}function fd(e){return e.value}function Ea(e){e._trackId++,e._depsLength=0}function wa(e){if(e.deps.length>e._depsLength){for(let t=e._depsLength;t{const n=new Map;return n.cleanup=e,n.computed=t,n},Yr=new WeakMap,fn=Symbol(""),Zo=Symbol("");function We(e,t,n){if(Wt&&dn){let r=Yr.get(e);r||Yr.set(e,r=new Map);let o=r.get(n);o||r.set(n,o=si(()=>r.delete(n))),li(dn,o)}}function xt(e,t,n,r,o,l){const a=Yr.get(e);if(!a)return;let s=[];if(t==="clear")s=[...a.values()];else if(n==="length"&&Z(e)){const i=Number(r);a.forEach((c,d)=>{(d==="length"||!mn(d)&&d>=i)&&s.push(c)})}else switch(n!==void 0&&s.push(a.get(n)),t){case"add":Z(e)?Ll(n)&&s.push(a.get("length")):(s.push(a.get(fn)),kn(e)&&s.push(a.get(Zo)));break;case"delete":Z(e)||(s.push(a.get(fn)),kn(e)&&s.push(a.get(Zo)));break;case"set":kn(e)&&s.push(a.get(fn));break}xl();for(const i of s)i&&ai(i,4);Rl()}function pd(e,t){const n=Yr.get(e);return n&&n.get(t)}const hd=Al("__proto__,__v_isRef,__isVue"),ii=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(mn)),Ta=md();function md(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const r=ce(this);for(let l=0,a=this.length;l{e[t]=function(...n){Qt(),xl();const r=ce(this)[t].apply(this,n);return Rl(),Xt(),r}}),e}function vd(e){mn(e)||(e=String(e));const t=ce(this);return We(t,"has",e),t.hasOwnProperty(e)}class ci{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,r){const o=this._isReadonly,l=this._isShallow;if(n==="__v_isReactive")return!o;if(n==="__v_isReadonly")return o;if(n==="__v_isShallow")return l;if(n==="__v_raw")return r===(o?l?Od:pi:l?fi:di).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;const a=Z(t);if(!o){if(a&&ie(Ta,n))return Reflect.get(Ta,n,r);if(n==="hasOwnProperty")return vd}const s=Reflect.get(t,n,r);return(mn(n)?ii.has(n):hd(n))||(o||We(t,"get",n),l)?s:Ve(s)?a&&Ll(n)?s:s.value:me(s)?o?jn(s):Er(s):s}}class ui extends ci{constructor(t=!1){super(!1,t)}set(t,n,r,o){let l=t[n];if(!this._isShallow){const i=ar(l);if(!Qr(r)&&!ar(r)&&(l=ce(l),r=ce(r)),!Z(t)&&Ve(l)&&!Ve(r))return i?!1:(l.value=r,!0)}const a=Z(t)&&Ll(n)?Number(n)e,co=e=>Reflect.getPrototypeOf(e);function Rr(e,t,n=!1,r=!1){e=e.__v_raw;const o=ce(e),l=ce(t);n||(Kt(t,l)&&We(o,"get",t),We(o,"get",l));const{has:a}=co(o),s=r?Il:n?Ml:sr;if(a.call(o,t))return s(e.get(t));if(a.call(o,l))return s(e.get(l));e!==o&&e.get(t)}function Ir(e,t=!1){const n=this.__v_raw,r=ce(n),o=ce(e);return t||(Kt(e,o)&&We(r,"has",e),We(r,"has",o)),e===o?n.has(e):n.has(e)||n.has(o)}function Dr(e,t=!1){return e=e.__v_raw,!t&&We(ce(e),"iterate",fn),Reflect.get(e,"size",e)}function Aa(e){e=ce(e);const t=ce(this);return co(t).has.call(t,e)||(t.add(e),xt(t,"add",e,e)),this}function Ca(e,t){t=ce(t);const n=ce(this),{has:r,get:o}=co(n);let l=r.call(n,e);l||(e=ce(e),l=r.call(n,e));const a=o.call(n,e);return n.set(e,t),l?Kt(t,a)&&xt(n,"set",e,t):xt(n,"add",e,t),this}function ka(e){const t=ce(this),{has:n,get:r}=co(t);let o=n.call(t,e);o||(e=ce(e),o=n.call(t,e)),r&&r.call(t,e);const l=t.delete(e);return o&&xt(t,"delete",e,void 0),l}function La(){const e=ce(this),t=e.size!==0,n=e.clear();return t&&xt(e,"clear",void 0,void 0),n}function $r(e,t){return function(r,o){const l=this,a=l.__v_raw,s=ce(a),i=t?Il:e?Ml:sr;return!e&&We(s,"iterate",fn),a.forEach((c,d)=>r.call(o,i(c),i(d),l))}}function Mr(e,t,n){return function(...r){const o=this.__v_raw,l=ce(o),a=kn(l),s=e==="entries"||e===Symbol.iterator&&a,i=e==="keys"&&a,c=o[e](...r),d=n?Il:t?Ml:sr;return!t&&We(l,"iterate",i?Zo:fn),{next(){const{value:f,done:p}=c.next();return p?{value:f,done:p}:{value:s?[d(f[0]),d(f[1])]:d(f),done:p}},[Symbol.iterator](){return this}}}}function $t(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Ed(){const e={get(l){return Rr(this,l)},get size(){return Dr(this)},has:Ir,add:Aa,set:Ca,delete:ka,clear:La,forEach:$r(!1,!1)},t={get(l){return Rr(this,l,!1,!0)},get size(){return Dr(this)},has:Ir,add:Aa,set:Ca,delete:ka,clear:La,forEach:$r(!1,!0)},n={get(l){return Rr(this,l,!0)},get size(){return Dr(this,!0)},has(l){return Ir.call(this,l,!0)},add:$t("add"),set:$t("set"),delete:$t("delete"),clear:$t("clear"),forEach:$r(!0,!1)},r={get(l){return Rr(this,l,!0,!0)},get size(){return Dr(this,!0)},has(l){return Ir.call(this,l,!0)},add:$t("add"),set:$t("set"),delete:$t("delete"),clear:$t("clear"),forEach:$r(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(l=>{e[l]=Mr(l,!1,!1),n[l]=Mr(l,!0,!1),t[l]=Mr(l,!1,!0),r[l]=Mr(l,!0,!0)}),[e,n,t,r]}const[wd,Td,Ad,Cd]=Ed();function Dl(e,t){const n=t?e?Cd:Ad:e?Td:wd;return(r,o,l)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?r:Reflect.get(ie(n,o)&&o in r?n:r,o,l)}const kd={get:Dl(!1,!1)},Ld={get:Dl(!1,!0)},Sd={get:Dl(!0,!1)};const di=new WeakMap,fi=new WeakMap,pi=new WeakMap,Od=new WeakMap;function Pd(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function xd(e){return e.__v_skip||!Object.isExtensible(e)?0:Pd(Xu(e))}function Er(e){return ar(e)?e:$l(e,!1,_d,kd,di)}function hi(e){return $l(e,!1,yd,Ld,fi)}function jn(e){return $l(e,!0,bd,Sd,pi)}function $l(e,t,n,r,o){if(!me(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const l=o.get(e);if(l)return l;const a=xd(e);if(a===0)return e;const s=new Proxy(e,a===2?r:n);return o.set(e,s),s}function Yn(e){return ar(e)?Yn(e.__v_raw):!!(e&&e.__v_isReactive)}function ar(e){return!!(e&&e.__v_isReadonly)}function Qr(e){return!!(e&&e.__v_isShallow)}function mi(e){return e?!!e.__v_raw:!1}function ce(e){const t=e&&e.__v_raw;return t?ce(t):e}function Rd(e){return Object.isExtensible(e)&&Xs(e,"__v_skip",!0),e}const sr=e=>me(e)?Er(e):e,Ml=e=>me(e)?jn(e):e;class vi{constructor(t,n,r,o){this.getter=t,this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new Pl(()=>t(this._value),()=>Qn(this,this.effect._dirtyLevel===2?2:3)),this.effect.computed=this,this.effect.active=this._cacheable=!o,this.__v_isReadonly=r}get value(){const t=ce(this);return(!t._cacheable||t.effect.dirty)&&Kt(t._value,t._value=t.effect.run())&&Qn(t,4),Vl(t),t.effect._dirtyLevel>=2&&Qn(t,2),t._value}set value(t){this._setter(t)}get _dirty(){return this.effect.dirty}set _dirty(t){this.effect.dirty=t}}function Id(e,t,n=!1){let r,o;const l=re(e);return l?(r=e,o=ot):(r=e.get,o=e.set),new vi(r,o,l||!o,n)}function Vl(e){var t;Wt&&dn&&(e=ce(e),li(dn,(t=e.dep)!=null?t:e.dep=si(()=>e.dep=void 0,e instanceof vi?e:void 0)))}function Qn(e,t=4,n){e=ce(e);const r=e.dep;r&&ai(r,t)}function Ve(e){return!!(e&&e.__v_isRef===!0)}function U(e){return gi(e,!1)}function Le(e){return gi(e,!0)}function gi(e,t){return Ve(e)?e:new Dd(e,t)}class Dd{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:ce(t),this._value=n?t:sr(t)}get value(){return Vl(this),this._value}set value(t){const n=this.__v_isShallow||Qr(t)||ar(t);t=n?t:ce(t),Kt(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:sr(t),Qn(this,4))}}function pn(e){return Ve(e)?e.value:e}const $d={get:(e,t,n)=>pn(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const o=e[t];return Ve(o)&&!Ve(n)?(o.value=n,!0):Reflect.set(e,t,n,r)}};function _i(e){return Yn(e)?e:new Proxy(e,$d)}class Md{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:r}=t(()=>Vl(this),()=>Qn(this));this._get=n,this._set=r}get value(){return this._get()}set value(t){this._set(t)}}function bi(e){return new Md(e)}class Vd{constructor(t,n,r){this._object=t,this._key=n,this._defaultValue=r,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return pd(ce(this._object),this._key)}}class jd{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function uo(e,t,n){return Ve(e)?e:re(e)?new jd(e):me(e)&&arguments.length>1?Nd(e,t,n):U(e)}function Nd(e,t,n){const r=e[t];return Ve(r)?r:new Vd(e,t,n)}/**
 * @vue/runtime-core v3.4.27
 * (c) 2018-present Yuxi (Evan) You and Vue contributors
 * @license MIT
-**/function Gt(e,t,n,r){try{return r?e(...r):e()}catch(o){wr(o,t,n)}}function at(e,t,n,r){if(re(e)){const o=Gt(e,t,n,r);return o&&Js(o)&&o.catch(l=>{wr(l,t,n)}),o}if(Z(e)){const o=[];for(let l=0;l>>1,o=Ne[r],l=cr(o);lTt&&Ne.splice(t,1)}function zd(e){Z(e)?Sn.push(...e):(!Ht||!Ht.includes(e,e.allowRecurse?sn+1:sn))&&Sn.push(e),Ei()}function Sa(e,t,n=ir?Tt+1:0){for(;ncr(n)-cr(r));if(Sn.length=0,Ht){Ht.push(...t);return}for(Ht=t,sn=0;sne.id==null?1/0:e.id,qd=(e,t)=>{const n=cr(e)-cr(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function wi(e){el=!1,ir=!0,Ne.sort(qd);try{for(Tt=0;Ttxe(h)?h.trim():h)),f&&(o=n.map(td))}let s,i=r[s=wo(t)]||r[s=wo(st(t))];!i&&l&&(i=r[s=wo(Vn(t))]),i&&at(i,e,6,o);const c=r[s+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[s])return;e.emitted[s]=!0,at(c,e,6,o)}}function Ti(e,t,n=!1){const r=t.emitsCache,o=r.get(e);if(o!==void 0)return o;const l=e.emits;let a={},s=!1;if(!re(e)){const i=c=>{const d=Ti(c,t,!0);d&&(s=!0,ke(a,d))};!n&&t.mixins.length&&t.mixins.forEach(i),e.extends&&i(e.extends),e.mixins&&e.mixins.forEach(i)}return!l&&!s?(me(e)&&r.set(e,null),null):(Z(l)?l.forEach(i=>a[i]=null):ke(a,l),me(e)&&r.set(e,a),a)}function po(e,t){return!e||!br(t)?!1:(t=t.slice(2).replace(/Once$/,""),ie(e,t[0].toLowerCase()+t.slice(1))||ie(e,Vn(t))||ie(e,t))}let lt=null,Ci=null;function Zr(e){const t=lt;return lt=e,Ci=e&&e.type.__scopeId||null,t}function Wd(e,t=lt,n){if(!t||e._n)return e;const r=(...o)=>{r._d&&Ba(-1);const l=Zr(t);let a;try{a=e(...o)}finally{Zr(l),r._d&&Ba(1)}return a};return r._n=!0,r._c=!0,r._d=!0,r}function Ao(e){const{type:t,vnode:n,proxy:r,withProxy:o,propsOptions:[l],slots:a,attrs:s,emit:i,render:c,renderCache:d,props:f,data:p,setupState:h,ctx:v,inheritAttrs:w}=e,E=Zr(e);let b,T;try{if(n.shapeFlag&4){const k=o||r,V=k;b=ft(c.call(V,k,d,f,h,p,v)),T=s}else{const k=t;b=ft(k.length>1?k(f,{attrs:s,slots:a,emit:i}):k(f,null)),T=t.props?s:Gd(s)}}catch(k){nr.length=0,wr(k,e,1),b=Re(pt)}let _=b;if(T&&w!==!1){const k=Object.keys(T),{shapeFlag:V}=_;k.length&&V&7&&(l&&k.some(Al)&&(T=Kd(T,l)),_=Jt(_,T,!1,!0))}return n.dirs&&(_=Jt(_,null,!1,!0),_.dirs=_.dirs?_.dirs.concat(n.dirs):n.dirs),n.transition&&(_.transition=n.transition),b=_,Zr(E),b}const Gd=e=>{let t;for(const n in e)(n==="class"||n==="style"||br(n))&&((t||(t={}))[n]=e[n]);return t},Kd=(e,t)=>{const n={};for(const r in e)(!Al(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function Jd(e,t,n){const{props:r,children:o,component:l}=e,{props:a,children:s,patchFlag:i}=t,c=l.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&i>=0){if(i&1024)return!0;if(i&16)return r?Oa(r,a,c):!!a;if(i&8){const d=t.dynamicProps;for(let f=0;fe.__isSuspense;function ki(e,t){t&&t.pendingBranch?Z(e)?t.effects.push(...e):t.effects.push(e):zd(e)}const ef=Symbol.for("v-scx"),tf=()=>Ce(ef);function Li(e,t){return Nl(e,null,t)}const Vr={};function oe(e,t,n){return Nl(e,t,n)}function Nl(e,t,{immediate:n,deep:r,flush:o,once:l,onTrack:a,onTrigger:s}=ye){if(t&&l){const D=t;t=(...P)=>{D(...P),V()}}const i=$e,c=D=>r===!0?D:Tn(D,r===!1?1:void 0);let d,f=!1,p=!1;if(Ve(e)?(d=()=>e.value,f=Qr(e)):Yn(e)?(d=()=>c(e),f=!0):Z(e)?(p=!0,f=e.some(D=>Yn(D)||Qr(D)),d=()=>e.map(D=>{if(Ve(D))return D.value;if(Yn(D))return c(D);if(re(D))return Gt(D,i,2)})):re(e)?t?d=()=>Gt(e,i,2):d=()=>(h&&h(),at(e,i,3,[v])):d=ot,t&&r){const D=d;d=()=>Tn(D())}let h,v=D=>{h=_.onStop=()=>{Gt(D,i,4),h=_.onStop=void 0}},w;if(Ar)if(v=ot,t?n&&at(t,i,3,[d(),p?[]:void 0,v]):d(),o==="sync"){const D=tf();w=D.__watcherHandles||(D.__watcherHandles=[])}else return ot;let E=p?new Array(e.length).fill(Vr):Vr;const b=()=>{if(!(!_.active||!_.dirty))if(t){const D=_.run();(r||f||(p?D.some((P,R)=>Kt(P,E[R])):Kt(D,E)))&&(h&&h(),at(t,i,3,[D,E===Vr?void 0:p&&E[0]===Vr?[]:E,v]),E=D)}else _.run()};b.allowRecurse=!!t;let T;o==="sync"?T=b:o==="post"?T=()=>Fe(b,i&&i.suspense):(b.pre=!0,i&&(b.id=i.uid),T=()=>fo(b));const _=new Pl(d,ot,T),k=ni(),V=()=>{_.stop(),k&&kl(k.effects,_)};return t?n?b():E=_.run():o==="post"?Fe(_.run.bind(_),i&&i.suspense):_.run(),w&&w.push(V),V}function nf(e,t,n){const r=this.proxy,o=xe(e)?e.includes(".")?Si(r,e):()=>r[e]:e.bind(r,r);let l;re(t)?l=t:(l=t.handler,n=t);const a=Cr(this),s=Nl(o,l.bind(r),n);return a(),s}function Si(e,t){const n=t.split(".");return()=>{let r=e;for(let o=0;o{Tn(r,t,n)});else if(Qs(e))for(const r in e)Tn(e[r],t,n);return e}function wt(e,t,n,r){const o=e.dirs,l=t&&t.dirs;for(let a=0;a{e.isMounted=!0}),Di(()=>{e.isUnmounting=!0}),e}const et=[Function,Array],Pi={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:et,onEnter:et,onAfterEnter:et,onEnterCancelled:et,onBeforeLeave:et,onLeave:et,onAfterLeave:et,onLeaveCancelled:et,onBeforeAppear:et,onAppear:et,onAfterAppear:et,onAppearCancelled:et},rf={name:"BaseTransition",props:Pi,setup(e,{slots:t}){const n=Nn(),r=Oi();return()=>{const o=t.default&&Bl(t.default(),!0);if(!o||!o.length)return;let l=o[0];if(o.length>1){for(const p of o)if(p.type!==pt){l=p;break}}const a=ce(e),{mode:s}=a;if(r.isLeaving)return ko(l);const i=xa(l);if(!i)return ko(l);const c=ur(i,a,r,n);dr(i,c);const d=n.subTree,f=d&&xa(d);if(f&&f.type!==pt&&!cn(i,f)){const p=ur(f,a,r,n);if(dr(f,p),s==="out-in"&&i.type!==pt)return r.isLeaving=!0,p.afterLeave=()=>{r.isLeaving=!1,n.update.active!==!1&&(n.effect.dirty=!0,n.update())},ko(l);s==="in-out"&&i.type!==pt&&(p.delayLeave=(h,v,w)=>{const E=xi(r,f);E[String(f.key)]=f,h[Ft]=()=>{v(),h[Ft]=void 0,delete c.delayedLeave},c.delayedLeave=w})}return l}}},of=rf;function xi(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function ur(e,t,n,r){const{appear:o,mode:l,persisted:a=!1,onBeforeEnter:s,onEnter:i,onAfterEnter:c,onEnterCancelled:d,onBeforeLeave:f,onLeave:p,onAfterLeave:h,onLeaveCancelled:v,onBeforeAppear:w,onAppear:E,onAfterAppear:b,onAppearCancelled:T}=t,_=String(e.key),k=xi(n,e),V=(R,G)=>{R&&at(R,r,9,G)},D=(R,G)=>{const I=G[1];V(R,G),Z(R)?R.every(W=>W.length<=1)&&I():R.length<=1&&I()},P={mode:l,persisted:a,beforeEnter(R){let G=s;if(!n.isMounted)if(o)G=w||s;else return;R[Ft]&&R[Ft](!0);const I=k[_];I&&cn(e,I)&&I.el[Ft]&&I.el[Ft](),V(G,[R])},enter(R){let G=i,I=c,W=d;if(!n.isMounted)if(o)G=E||i,I=b||c,W=T||d;else return;let $=!1;const ee=R[jr]=Te=>{$||($=!0,Te?V(W,[R]):V(I,[R]),P.delayedLeave&&P.delayedLeave(),R[jr]=void 0)};G?D(G,[R,ee]):ee()},leave(R,G){const I=String(e.key);if(R[jr]&&R[jr](!0),n.isUnmounting)return G();V(f,[R]);let W=!1;const $=R[Ft]=ee=>{W||(W=!0,G(),ee?V(v,[R]):V(h,[R]),R[Ft]=void 0,k[I]===e&&delete k[I])};k[I]=e,p?D(p,[R,$]):$()},clone(R){return ur(R,t,n,r)}};return P}function ko(e){if(Tr(e))return e=Jt(e),e.children=null,e}function xa(e){if(!Tr(e))return e;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&re(n.default))return n.default()}}function dr(e,t){e.shapeFlag&6&&e.component?dr(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Bl(e,t=!1,n){let r=[],o=0;for(let l=0;l1)for(let l=0;l!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function Hl(e){re(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:r,delay:o=200,timeout:l,suspensible:a=!0,onError:s}=e;let i=null,c,d=0;const f=()=>(d++,i=null,p()),p=()=>{let h;return i||(h=i=t().catch(v=>{if(v=v instanceof Error?v:new Error(String(v)),s)return new Promise((w,E)=>{s(v,()=>w(f()),()=>E(v),d+1)});throw v}).then(v=>h!==i&&i?i:(v&&(v.__esModule||v[Symbol.toStringTag]==="Module")&&(v=v.default),c=v,v)))};return z({name:"AsyncComponentWrapper",__asyncLoader:p,get __asyncResolved(){return c},setup(){const h=$e;if(c)return()=>Lo(c,h);const v=T=>{i=null,wr(T,h,13,!r)};if(a&&h.suspense||Ar)return p().then(T=>()=>Lo(T,h)).catch(T=>(v(T),()=>r?Re(r,{error:T}):null));const w=U(!1),E=U(),b=U(!!o);return o&&setTimeout(()=>{b.value=!1},o),l!=null&&setTimeout(()=>{if(!w.value&&!E.value){const T=new Error(`Async component timed out after ${l}ms.`);v(T),E.value=T}},l),p().then(()=>{w.value=!0,h.parent&&Tr(h.parent.vnode)&&(h.parent.effect.dirty=!0,fo(h.parent.update))}).catch(T=>{v(T),E.value=T}),()=>{if(w.value&&c)return Lo(c,h);if(E.value&&r)return Re(r,{error:E.value});if(n&&!b.value)return Re(n)}}})}function Lo(e,t){const{ref:n,props:r,children:o,ce:l}=t.vnode,a=Re(e,r,o);return a.ref=n,a.ce=l,delete t.vnode.ce,a}const Tr=e=>e.type.__isKeepAlive;function lf(e,t){Ri(e,"a",t)}function af(e,t){Ri(e,"da",t)}function Ri(e,t,n=$e){const r=e.__wdc||(e.__wdc=()=>{let o=n;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(ho(t,r,n),n){let o=n.parent;for(;o&&o.parent;)Tr(o.parent.vnode)&&sf(r,t,n,o),o=o.parent}}function sf(e,t,n,r){const o=ho(t,e,r,!0);Zt(()=>{kl(r[t],o)},n)}function ho(e,t,n=$e,r=!1){if(n){const o=n[e]||(n[e]=[]),l=t.__weh||(t.__weh=(...a)=>{if(n.isUnmounted)return;Qt();const s=Cr(n),i=at(t,n,e,a);return s(),Xt(),i});return r?o.unshift(l):o.push(l),l}}const It=e=>(t,n=$e)=>(!Ar||e==="sp")&&ho(e,(...r)=>t(...r),n),cf=It("bm"),de=It("m"),uf=It("bu"),Ii=It("u"),Di=It("bum"),Zt=It("um"),df=It("sp"),ff=It("rtg"),pf=It("rtc");function hf(e,t=$e){ho("ec",e,t)}function w4(e,t,n,r){let o;const l=n;if(Z(e)||xe(e)){o=new Array(e.length);for(let a=0,s=e.length;at(a,s,void 0,l));else{const a=Object.keys(e);o=new Array(a.length);for(let s=0,i=a.length;se?Qi(e)?Ul(e)||e.proxy:tl(e.parent):null,Zn=ke(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>tl(e.parent),$root:e=>tl(e.root),$emit:e=>e.emit,$options:e=>Fl(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,fo(e.update)}),$nextTick:e=>e.n||(e.n=kt.bind(e.proxy)),$watch:e=>nf.bind(e)}),So=(e,t)=>e!==ye&&!e.__isScriptSetup&&ie(e,t),mf={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:r,data:o,props:l,accessCache:a,type:s,appContext:i}=e;let c;if(t[0]!=="$"){const h=a[t];if(h!==void 0)switch(h){case 1:return r[t];case 2:return o[t];case 4:return n[t];case 3:return l[t]}else{if(So(r,t))return a[t]=1,r[t];if(o!==ye&&ie(o,t))return a[t]=2,o[t];if((c=e.propsOptions[0])&&ie(c,t))return a[t]=3,l[t];if(n!==ye&&ie(n,t))return a[t]=4,n[t];nl&&(a[t]=0)}}const d=Zn[t];let f,p;if(d)return t==="$attrs"&&We(e.attrs,"get",""),d(e);if((f=s.__cssModules)&&(f=f[t]))return f;if(n!==ye&&ie(n,t))return a[t]=4,n[t];if(p=i.config.globalProperties,ie(p,t))return p[t]},set({_:e},t,n){const{data:r,setupState:o,ctx:l}=e;return So(o,t)?(o[t]=n,!0):r!==ye&&ie(r,t)?(r[t]=n,!0):ie(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(l[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:o,propsOptions:l}},a){let s;return!!n[a]||e!==ye&&ie(e,a)||So(t,a)||(s=l[0])&&ie(s,a)||ie(r,a)||ie(Zn,a)||ie(o.config.globalProperties,a)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:ie(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Ra(e){return Z(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let nl=!0;function vf(e){const t=Fl(e),n=e.proxy,r=e.ctx;nl=!1,t.beforeCreate&&Ia(t.beforeCreate,e,"bc");const{data:o,computed:l,methods:a,watch:s,provide:i,inject:c,created:d,beforeMount:f,mounted:p,beforeUpdate:h,updated:v,activated:w,deactivated:E,beforeDestroy:b,beforeUnmount:T,destroyed:_,unmounted:k,render:V,renderTracked:D,renderTriggered:P,errorCaptured:R,serverPrefetch:G,expose:I,inheritAttrs:W,components:$,directives:ee,filters:Te}=t;if(c&&gf(c,r,null),a)for(const te in a){const J=a[te];re(J)&&(r[te]=J.bind(n))}if(o){const te=o.call(n,n);me(te)&&(e.data=Er(te))}if(nl=!0,l)for(const te in l){const J=l[te],Oe=re(J)?J.bind(n,n):re(J.get)?J.get.bind(n,n):ot,bt=!re(J)&&re(J.set)?J.set.bind(n):ot,Ze=C({get:Oe,set:bt});Object.defineProperty(r,te,{enumerable:!0,configurable:!0,get:()=>Ze.value,set:Ie=>Ze.value=Ie})}if(s)for(const te in s)$i(s[te],r,n,te);if(i){const te=re(i)?i.call(n):i;Reflect.ownKeys(te).forEach(J=>{hn(J,te[J])})}d&&Ia(d,e,"c");function K(te,J){Z(J)?J.forEach(Oe=>te(Oe.bind(n))):J&&te(J.bind(n))}if(K(cf,f),K(de,p),K(uf,h),K(Ii,v),K(lf,w),K(af,E),K(hf,R),K(pf,D),K(ff,P),K(Di,T),K(Zt,k),K(df,G),Z(I))if(I.length){const te=e.exposed||(e.exposed={});I.forEach(J=>{Object.defineProperty(te,J,{get:()=>n[J],set:Oe=>n[J]=Oe})})}else e.exposed||(e.exposed={});V&&e.render===ot&&(e.render=V),W!=null&&(e.inheritAttrs=W),$&&(e.components=$),ee&&(e.directives=ee)}function gf(e,t,n=ot){Z(e)&&(e=rl(e));for(const r in e){const o=e[r];let l;me(o)?"default"in o?l=Ce(o.from||r,o.default,!0):l=Ce(o.from||r):l=Ce(o),Ve(l)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>l.value,set:a=>l.value=a}):t[r]=l}}function Ia(e,t,n){at(Z(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function $i(e,t,n,r){const o=r.includes(".")?Si(n,r):()=>n[r];if(xe(e)){const l=t[e];re(l)&&oe(o,l)}else if(re(e))oe(o,e.bind(n));else if(me(e))if(Z(e))e.forEach(l=>$i(l,t,n,r));else{const l=re(e.handler)?e.handler.bind(n):t[e.handler];re(l)&&oe(o,l,e)}}function Fl(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:o,optionsCache:l,config:{optionMergeStrategies:a}}=e.appContext,s=l.get(t);let i;return s?i=s:!o.length&&!n&&!r?i=t:(i={},o.length&&o.forEach(c=>eo(i,c,a,!0)),eo(i,t,a)),me(t)&&l.set(t,i),i}function eo(e,t,n,r=!1){const{mixins:o,extends:l}=t;l&&eo(e,l,n,!0),o&&o.forEach(a=>eo(e,a,n,!0));for(const a in t)if(!(r&&a==="expose")){const s=_f[a]||n&&n[a];e[a]=s?s(e[a],t[a]):t[a]}return e}const _f={data:Da,props:$a,emits:$a,methods:Kn,computed:Kn,beforeCreate:Be,created:Be,beforeMount:Be,mounted:Be,beforeUpdate:Be,updated:Be,beforeDestroy:Be,beforeUnmount:Be,destroyed:Be,unmounted:Be,activated:Be,deactivated:Be,errorCaptured:Be,serverPrefetch:Be,components:Kn,directives:Kn,watch:yf,provide:Da,inject:bf};function Da(e,t){return t?e?function(){return ke(re(e)?e.call(this,this):e,re(t)?t.call(this,this):t)}:t:e}function bf(e,t){return Kn(rl(e),rl(t))}function rl(e){if(Z(e)){const t={};for(let n=0;n1)return n&&re(t)?t.call(r&&r.proxy):t}}const Vi={},ji=()=>Object.create(Vi),Ni=e=>Object.getPrototypeOf(e)===Vi;function Tf(e,t,n,r=!1){const o={},l=ji();e.propsDefaults=Object.create(null),Bi(e,t,o,l);for(const a in e.propsOptions[0])a in o||(o[a]=void 0);n?e.props=r?o:hi(o):e.type.props?e.props=o:e.props=l,e.attrs=l}function Cf(e,t,n,r){const{props:o,attrs:l,vnode:{patchFlag:a}}=e,s=ce(o),[i]=e.propsOptions;let c=!1;if((r||a>0)&&!(a&16)){if(a&8){const d=e.vnode.dynamicProps;for(let f=0;f{i=!0;const[p,h]=Hi(f,t,!0);ke(a,p),h&&s.push(...h)};!n&&t.mixins.length&&t.mixins.forEach(d),e.extends&&d(e.extends),e.mixins&&e.mixins.forEach(d)}if(!l&&!i)return me(e)&&r.set(e,An),An;if(Z(l))for(let d=0;d-1,h[1]=w<0||v-1||ie(h,"default"))&&s.push(f)}}}const c=[a,s];return me(e)&&r.set(e,c),c}function Ma(e){return e[0]!=="$"&&!Ln(e)}function Va(e){return e===null?"null":typeof e=="function"?e.name||"":typeof e=="object"&&e.constructor&&e.constructor.name||""}function ja(e,t){return Va(e)===Va(t)}function Na(e,t){return Z(t)?t.findIndex(n=>ja(n,e)):re(t)&&ja(t,e)?0:-1}const Fi=e=>e[0]==="_"||e==="$stable",zl=e=>Z(e)?e.map(ft):[ft(e)],Af=(e,t,n)=>{if(t._n)return t;const r=Wd((...o)=>zl(t(...o)),n);return r._c=!1,r},zi=(e,t,n)=>{const r=e._ctx;for(const o in e){if(Fi(o))continue;const l=e[o];if(re(l))t[o]=Af(o,l,r);else if(l!=null){const a=zl(l);t[o]=()=>a}}},qi=(e,t)=>{const n=zl(t);e.slots.default=()=>n},kf=(e,t)=>{const n=e.slots=ji();if(e.vnode.shapeFlag&32){const r=t._;r?(ke(n,t),Xs(n,"_",r,!0)):zi(t,n)}else t&&qi(e,t)},Lf=(e,t,n)=>{const{vnode:r,slots:o}=e;let l=!0,a=ye;if(r.shapeFlag&32){const s=t._;s?n&&s===1?l=!1:(ke(o,t),!n&&s===1&&delete o._):(l=!t.$stable,zi(t,o)),a=t}else t&&(qi(e,t),a={default:1});if(l)for(const s in o)!Fi(s)&&a[s]==null&&delete o[s]};function to(e,t,n,r,o=!1){if(Z(e)){e.forEach((p,h)=>to(p,t&&(Z(t)?t[h]:t),n,r,o));return}if(Xn(r)&&!o)return;const l=r.shapeFlag&4?Ul(r.component)||r.component.proxy:r.el,a=o?null:l,{i:s,r:i}=e,c=t&&t.r,d=s.refs===ye?s.refs={}:s.refs,f=s.setupState;if(c!=null&&c!==i&&(xe(c)?(d[c]=null,ie(f,c)&&(f[c]=null)):Ve(c)&&(c.value=null)),re(i))Gt(i,s,12,[a,d]);else{const p=xe(i),h=Ve(i);if(p||h){const v=()=>{if(e.f){const w=p?ie(f,i)?f[i]:d[i]:i.value;o?Z(w)&&kl(w,l):Z(w)?w.includes(l)||w.push(l):p?(d[i]=[l],ie(f,i)&&(f[i]=d[i])):(i.value=[l],e.k&&(d[e.k]=i.value))}else p?(d[i]=a,ie(f,i)&&(f[i]=a)):h&&(i.value=a,e.k&&(d[e.k]=a))};a?(v.id=-1,Fe(v,n)):v()}}}let Mt=!1;const Sf=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",Of=e=>e.namespaceURI.includes("MathML"),Nr=e=>{if(Sf(e))return"svg";if(Of(e))return"mathml"},Br=e=>e.nodeType===8;function Pf(e){const{mt:t,p:n,o:{patchProp:r,createText:o,nextSibling:l,parentNode:a,remove:s,insert:i,createComment:c}}=e,d=(_,k)=>{if(!k.hasChildNodes()){n(null,_,k),Xr(),k._vnode=_;return}Mt=!1,f(k.firstChild,_,null,null,null),Xr(),k._vnode=_,Mt&&console.error("Hydration completed but contains mismatches.")},f=(_,k,V,D,P,R=!1)=>{R=R||!!k.dynamicChildren;const G=Br(_)&&_.data==="[",I=()=>w(_,k,V,D,P,G),{type:W,ref:$,shapeFlag:ee,patchFlag:Te}=k;let _e=_.nodeType;k.el=_,Te===-2&&(R=!1,k.dynamicChildren=null);let K=null;switch(W){case Rn:_e!==3?k.children===""?(i(k.el=o(""),a(_),_),K=_):K=I():(_.data!==k.children&&(Mt=!0,_.data=k.children),K=l(_));break;case pt:T(_)?(K=l(_),b(k.el=_.content.firstChild,_,V)):_e!==8||G?K=I():K=l(_);break;case tr:if(G&&(_=l(_),_e=_.nodeType),_e===1||_e===3){K=_;const te=!k.children.length;for(let J=0;J{R=R||!!k.dynamicChildren;const{type:G,props:I,patchFlag:W,shapeFlag:$,dirs:ee,transition:Te}=k,_e=G==="input"||G==="option";if(_e||W!==-1){ee&&wt(k,null,V,"created");let K=!1;if(T(_)){K=Ui(D,Te)&&V&&V.vnode.props&&V.vnode.props.appear;const J=_.content.firstChild;K&&Te.beforeEnter(J),b(J,_,V),k.el=_=J}if($&16&&!(I&&(I.innerHTML||I.textContent))){let J=h(_.firstChild,k,_,V,D,P,R);for(;J;){Mt=!0;const Oe=J;J=J.nextSibling,s(Oe)}}else $&8&&_.textContent!==k.children&&(Mt=!0,_.textContent=k.children);if(I)if(_e||!R||W&48)for(const J in I)(_e&&(J.endsWith("value")||J==="indeterminate")||br(J)&&!Ln(J)||J[0]===".")&&r(_,J,null,I[J],void 0,void 0,V);else I.onClick&&r(_,"onClick",null,I.onClick,void 0,void 0,V);let te;(te=I&&I.onVnodeBeforeMount)&&tt(te,V,k),ee&&wt(k,null,V,"beforeMount"),((te=I&&I.onVnodeMounted)||ee||K)&&ki(()=>{te&&tt(te,V,k),K&&Te.enter(_),ee&&wt(k,null,V,"mounted")},D)}return _.nextSibling},h=(_,k,V,D,P,R,G)=>{G=G||!!k.dynamicChildren;const I=k.children,W=I.length;for(let $=0;${const{slotScopeIds:G}=k;G&&(P=P?P.concat(G):G);const I=a(_),W=h(l(_),k,I,V,D,P,R);return W&&Br(W)&&W.data==="]"?l(k.anchor=W):(Mt=!0,i(k.anchor=c("]"),I,W),W)},w=(_,k,V,D,P,R)=>{if(Mt=!0,k.el=null,R){const W=E(_);for(;;){const $=l(_);if($&&$!==W)s($);else break}}const G=l(_),I=a(_);return s(_),n(null,k,I,G,V,D,Nr(I),P),G},E=(_,k="[",V="]")=>{let D=0;for(;_;)if(_=l(_),_&&Br(_)&&(_.data===k&&D++,_.data===V)){if(D===0)return l(_);D--}return _},b=(_,k,V)=>{const D=k.parentNode;D&&D.replaceChild(_,k);let P=V;for(;P;)P.vnode.el===k&&(P.vnode.el=P.subTree.el=_),P=P.parent},T=_=>_.nodeType===1&&_.tagName.toLowerCase()==="template";return[d,f]}const Fe=ki;function xf(e){return Rf(e,Pf)}function Rf(e,t){const n=Zs();n.__VUE__=!0;const{insert:r,remove:o,patchProp:l,createElement:a,createText:s,createComment:i,setText:c,setElementText:d,parentNode:f,nextSibling:p,setScopeId:h=ot,insertStaticContent:v}=e,w=(m,g,A,O=null,S=null,j=null,H=void 0,M=null,N=!!g.dynamicChildren)=>{if(m===g)return;m&&!cn(m,g)&&(O=L(m),Ie(m,S,j,!0),m=null),g.patchFlag===-2&&(N=!1,g.dynamicChildren=null);const{type:x,ref:q,shapeFlag:X}=g;switch(x){case Rn:E(m,g,A,O);break;case pt:b(m,g,A,O);break;case tr:m==null&&T(g,A,O,H);break;case Ye:$(m,g,A,O,S,j,H,M,N);break;default:X&1?V(m,g,A,O,S,j,H,M,N):X&6?ee(m,g,A,O,S,j,H,M,N):(X&64||X&128)&&x.process(m,g,A,O,S,j,H,M,N,Y)}q!=null&&S&&to(q,m&&m.ref,j,g||m,!g)},E=(m,g,A,O)=>{if(m==null)r(g.el=s(g.children),A,O);else{const S=g.el=m.el;g.children!==m.children&&c(S,g.children)}},b=(m,g,A,O)=>{m==null?r(g.el=i(g.children||""),A,O):g.el=m.el},T=(m,g,A,O)=>{[m.el,m.anchor]=v(m.children,g,A,O,m.el,m.anchor)},_=({el:m,anchor:g},A,O)=>{let S;for(;m&&m!==g;)S=p(m),r(m,A,O),m=S;r(g,A,O)},k=({el:m,anchor:g})=>{let A;for(;m&&m!==g;)A=p(m),o(m),m=A;o(g)},V=(m,g,A,O,S,j,H,M,N)=>{g.type==="svg"?H="svg":g.type==="math"&&(H="mathml"),m==null?D(g,A,O,S,j,H,M,N):G(m,g,S,j,H,M,N)},D=(m,g,A,O,S,j,H,M)=>{let N,x;const{props:q,shapeFlag:X,transition:Q,dirs:ne}=m;if(N=m.el=a(m.type,j,q&&q.is,q),X&8?d(N,m.children):X&16&&R(m.children,N,null,O,S,Oo(m,j),H,M),ne&&wt(m,null,O,"created"),P(N,m,m.scopeId,H,O),q){for(const fe in q)fe!=="value"&&!Ln(fe)&&l(N,fe,null,q[fe],j,m.children,O,S,Pe);"value"in q&&l(N,"value",null,q.value,j),(x=q.onVnodeBeforeMount)&&tt(x,O,m)}ne&&wt(m,null,O,"beforeMount");const le=Ui(S,Q);le&&Q.beforeEnter(N),r(N,g,A),((x=q&&q.onVnodeMounted)||le||ne)&&Fe(()=>{x&&tt(x,O,m),le&&Q.enter(N),ne&&wt(m,null,O,"mounted")},S)},P=(m,g,A,O,S)=>{if(A&&h(m,A),O)for(let j=0;j{for(let x=N;x{const M=g.el=m.el;let{patchFlag:N,dynamicChildren:x,dirs:q}=g;N|=m.patchFlag&16;const X=m.props||ye,Q=g.props||ye;let ne;if(A&&on(A,!1),(ne=Q.onVnodeBeforeUpdate)&&tt(ne,A,g,m),q&&wt(g,m,A,"beforeUpdate"),A&&on(A,!0),x?I(m.dynamicChildren,x,M,A,O,Oo(g,S),j):H||J(m,g,M,null,A,O,Oo(g,S),j,!1),N>0){if(N&16)W(M,g,X,Q,A,O,S);else if(N&2&&X.class!==Q.class&&l(M,"class",null,Q.class,S),N&4&&l(M,"style",X.style,Q.style,S),N&8){const le=g.dynamicProps;for(let fe=0;fe{ne&&tt(ne,A,g,m),q&&wt(g,m,A,"updated")},O)},I=(m,g,A,O,S,j,H)=>{for(let M=0;M{if(A!==O){if(A!==ye)for(const M in A)!Ln(M)&&!(M in O)&&l(m,M,A[M],null,H,g.children,S,j,Pe);for(const M in O){if(Ln(M))continue;const N=O[M],x=A[M];N!==x&&M!=="value"&&l(m,M,x,N,H,g.children,S,j,Pe)}"value"in O&&l(m,"value",A.value,O.value,H)}},$=(m,g,A,O,S,j,H,M,N)=>{const x=g.el=m?m.el:s(""),q=g.anchor=m?m.anchor:s("");let{patchFlag:X,dynamicChildren:Q,slotScopeIds:ne}=g;ne&&(M=M?M.concat(ne):ne),m==null?(r(x,A,O),r(q,A,O),R(g.children||[],A,q,S,j,H,M,N)):X>0&&X&64&&Q&&m.dynamicChildren?(I(m.dynamicChildren,Q,A,S,j,H,M),(g.key!=null||S&&g===S.subTree)&&Wi(m,g,!0)):J(m,g,A,q,S,j,H,M,N)},ee=(m,g,A,O,S,j,H,M,N)=>{g.slotScopeIds=M,m==null?g.shapeFlag&512?S.ctx.activate(g,A,O,H,N):Te(g,A,O,S,j,H,N):_e(m,g,N)},Te=(m,g,A,O,S,j,H)=>{const M=m.component=Ff(m,O,S);if(Tr(m)&&(M.ctx.renderer=Y),zf(M),M.asyncDep){if(S&&S.registerDep(M,K),!m.el){const N=M.subTree=Re(pt);b(null,N,g,A)}}else K(M,m,g,A,S,j,H)},_e=(m,g,A)=>{const O=g.component=m.component;if(Jd(m,g,A))if(O.asyncDep&&!O.asyncResolved){te(O,g,A);return}else O.next=g,Fd(O.update),O.effect.dirty=!0,O.update();else g.el=m.el,O.vnode=g},K=(m,g,A,O,S,j,H)=>{const M=()=>{if(m.isMounted){let{next:q,bu:X,u:Q,parent:ne,vnode:le}=m;{const _n=Gi(m);if(_n){q&&(q.el=le.el,te(m,q,H)),_n.asyncDep.then(()=>{m.isUnmounted||M()});return}}let fe=q,be;on(m,!1),q?(q.el=le.el,te(m,q,H)):q=le,X&&To(X),(be=q.props&&q.props.onVnodeBeforeUpdate)&&tt(be,ne,q,le),on(m,!0);const De=Ao(m),ut=m.subTree;m.subTree=De,w(ut,De,f(ut.el),L(ut),m,S,j),q.el=De.el,fe===null&&Yd(m,De.el),Q&&Fe(Q,S),(be=q.props&&q.props.onVnodeUpdated)&&Fe(()=>tt(be,ne,q,le),S)}else{let q;const{el:X,props:Q}=g,{bm:ne,m:le,parent:fe}=m,be=Xn(g);if(on(m,!1),ne&&To(ne),!be&&(q=Q&&Q.onVnodeBeforeMount)&&tt(q,fe,g),on(m,!0),X&&pe){const De=()=>{m.subTree=Ao(m),pe(X,m.subTree,m,S,null)};be?g.type.__asyncLoader().then(()=>!m.isUnmounted&&De()):De()}else{const De=m.subTree=Ao(m);w(null,De,A,O,m,S,j),g.el=De.el}if(le&&Fe(le,S),!be&&(q=Q&&Q.onVnodeMounted)){const De=g;Fe(()=>tt(q,fe,De),S)}(g.shapeFlag&256||fe&&Xn(fe.vnode)&&fe.vnode.shapeFlag&256)&&m.a&&Fe(m.a,S),m.isMounted=!0,g=A=O=null}},N=m.effect=new Pl(M,ot,()=>fo(x),m.scope),x=m.update=()=>{N.dirty&&N.run()};x.id=m.uid,on(m,!0),x()},te=(m,g,A)=>{g.component=m;const O=m.vnode.props;m.vnode=g,m.next=null,Cf(m,g.props,O,A),Lf(m,g.children,A),Qt(),Sa(m),Xt()},J=(m,g,A,O,S,j,H,M,N=!1)=>{const x=m&&m.children,q=m?m.shapeFlag:0,X=g.children,{patchFlag:Q,shapeFlag:ne}=g;if(Q>0){if(Q&128){bt(x,X,A,O,S,j,H,M,N);return}else if(Q&256){Oe(x,X,A,O,S,j,H,M,N);return}}ne&8?(q&16&&Pe(x,S,j),X!==x&&d(A,X)):q&16?ne&16?bt(x,X,A,O,S,j,H,M,N):Pe(x,S,j,!0):(q&8&&d(A,""),ne&16&&R(X,A,O,S,j,H,M,N))},Oe=(m,g,A,O,S,j,H,M,N)=>{m=m||An,g=g||An;const x=m.length,q=g.length,X=Math.min(x,q);let Q;for(Q=0;Qq?Pe(m,S,j,!0,!1,X):R(g,A,O,S,j,H,M,N,X)},bt=(m,g,A,O,S,j,H,M,N)=>{let x=0;const q=g.length;let X=m.length-1,Q=q-1;for(;x<=X&&x<=Q;){const ne=m[x],le=g[x]=N?zt(g[x]):ft(g[x]);if(cn(ne,le))w(ne,le,A,null,S,j,H,M,N);else break;x++}for(;x<=X&&x<=Q;){const ne=m[X],le=g[Q]=N?zt(g[Q]):ft(g[Q]);if(cn(ne,le))w(ne,le,A,null,S,j,H,M,N);else break;X--,Q--}if(x>X){if(x<=Q){const ne=Q+1,le=neQ)for(;x<=X;)Ie(m[x],S,j,!0),x++;else{const ne=x,le=x,fe=new Map;for(x=le;x<=Q;x++){const Ke=g[x]=N?zt(g[x]):ft(g[x]);Ke.key!=null&&fe.set(Ke.key,x)}let be,De=0;const ut=Q-le+1;let _n=!1,ga=0;const qn=new Array(ut);for(x=0;x=ut){Ie(Ke,S,j,!0);continue}let Et;if(Ke.key!=null)Et=fe.get(Ke.key);else for(be=le;be<=Q;be++)if(qn[be-le]===0&&cn(Ke,g[be])){Et=be;break}Et===void 0?Ie(Ke,S,j,!0):(qn[Et-le]=x+1,Et>=ga?ga=Et:_n=!0,w(Ke,g[Et],A,null,S,j,H,M,N),De++)}const _a=_n?If(qn):An;for(be=_a.length-1,x=ut-1;x>=0;x--){const Ke=le+x,Et=g[Ke],ba=Ke+1{const{el:j,type:H,transition:M,children:N,shapeFlag:x}=m;if(x&6){Ze(m.component.subTree,g,A,O);return}if(x&128){m.suspense.move(g,A,O);return}if(x&64){H.move(m,g,A,Y);return}if(H===Ye){r(j,g,A);for(let X=0;XM.enter(j),S);else{const{leave:X,delayLeave:Q,afterLeave:ne}=M,le=()=>r(j,g,A),fe=()=>{X(j,()=>{le(),ne&&ne()})};Q?Q(j,le,fe):fe()}else r(j,g,A)},Ie=(m,g,A,O=!1,S=!1)=>{const{type:j,props:H,ref:M,children:N,dynamicChildren:x,shapeFlag:q,patchFlag:X,dirs:Q}=m;if(M!=null&&to(M,null,A,m,!0),q&256){g.ctx.deactivate(m);return}const ne=q&1&&Q,le=!Xn(m);let fe;if(le&&(fe=H&&H.onVnodeBeforeUnmount)&&tt(fe,g,m),q&6)yt(m.component,A,O);else{if(q&128){m.suspense.unmount(A,O);return}ne&&wt(m,null,g,"beforeUnmount"),q&64?m.type.remove(m,g,A,S,Y,O):x&&(j!==Ye||X>0&&X&64)?Pe(x,g,A,!1,!0):(j===Ye&&X&384||!S&&q&16)&&Pe(N,g,A),O&&Ge(m)}(le&&(fe=H&&H.onVnodeUnmounted)||ne)&&Fe(()=>{fe&&tt(fe,g,m),ne&&wt(m,null,g,"unmounted")},A)},Ge=m=>{const{type:g,el:A,anchor:O,transition:S}=m;if(g===Ye){Lt(A,O);return}if(g===tr){k(m);return}const j=()=>{o(A),S&&!S.persisted&&S.afterLeave&&S.afterLeave()};if(m.shapeFlag&1&&S&&!S.persisted){const{leave:H,delayLeave:M}=S,N=()=>H(A,j);M?M(m.el,j,N):N()}else j()},Lt=(m,g)=>{let A;for(;m!==g;)A=p(m),o(m),m=A;o(g)},yt=(m,g,A)=>{const{bum:O,scope:S,update:j,subTree:H,um:M}=m;O&&To(O),S.stop(),j&&(j.active=!1,Ie(H,m,g,A)),M&&Fe(M,g),Fe(()=>{m.isUnmounted=!0},g),g&&g.pendingBranch&&!g.isUnmounted&&m.asyncDep&&!m.asyncResolved&&m.suspenseId===g.pendingId&&(g.deps--,g.deps===0&&g.resolve())},Pe=(m,g,A,O=!1,S=!1,j=0)=>{for(let H=j;Hm.shapeFlag&6?L(m.component.subTree):m.shapeFlag&128?m.suspense.next():p(m.anchor||m.el);let F=!1;const B=(m,g,A)=>{m==null?g._vnode&&Ie(g._vnode,null,null,!0):w(g._vnode||null,m,g,null,null,null,A),F||(F=!0,Sa(),Xr(),F=!1),g._vnode=m},Y={p:w,um:Ie,m:Ze,r:Ge,mt:Te,mc:R,pc:J,pbc:I,n:L,o:e};let ae,pe;return t&&([ae,pe]=t(Y)),{render:B,hydrate:ae,createApp:wf(B,ae)}}function Oo({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function on({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Ui(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Wi(e,t,n=!1){const r=e.children,o=t.children;if(Z(r)&&Z(o))for(let l=0;l>1,e[n[s]]0&&(t[r]=n[l-1]),n[l]=r)}}for(l=n.length,a=n[l-1];l-- >0;)n[l]=a,a=t[a];return n}function Gi(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Gi(t)}const Df=e=>e.__isTeleport,Ye=Symbol.for("v-fgt"),Rn=Symbol.for("v-txt"),pt=Symbol.for("v-cmt"),tr=Symbol.for("v-stc"),nr=[];let ht=null;function T4(e=!1){nr.push(ht=e?null:[])}function $f(){nr.pop(),ht=nr[nr.length-1]||null}let fr=1;function Ba(e){fr+=e}function Mf(e){return e.dynamicChildren=fr>0?ht||An:null,$f(),fr>0&&ht&&ht.push(e),e}function C4(e,t,n,r,o,l){return Mf(Ji(e,t,n,r,o,l,!0))}function ll(e){return e?e.__v_isVNode===!0:!1}function cn(e,t){return e.type===t.type&&e.key===t.key}const Ki=({key:e})=>e??null,Gr=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?xe(e)||Ve(e)||re(e)?{i:lt,r:e,k:t,f:!!n}:e:null);function Ji(e,t=null,n=null,r=0,o=null,l=e===Ye?0:1,a=!1,s=!1){const i={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Ki(t),ref:t&&Gr(t),scopeId:Ci,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:l,patchFlag:r,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:lt};return s?(ql(i,n),l&128&&e.normalize(i)):n&&(i.shapeFlag|=xe(n)?8:16),fr>0&&!a&&ht&&(i.patchFlag>0||l&6)&&i.patchFlag!==32&&ht.push(i),i}const Re=Vf;function Vf(e,t=null,n=null,r=0,o=null,l=!1){if((!e||e===Qd)&&(e=pt),ll(e)){const s=Jt(e,t,!0);return n&&ql(s,n),fr>0&&!l&&ht&&(s.shapeFlag&6?ht[ht.indexOf(e)]=s:ht.push(s)),s.patchFlag|=-2,s}if(Kf(e)&&(e=e.__vccOpts),t){t=jf(t);let{class:s,style:i}=t;s&&!xe(s)&&(t.class=Ol(s)),me(i)&&(mi(i)&&!Z(i)&&(i=ke({},i)),t.style=Sl(i))}const a=xe(e)?1:Zd(e)?128:Df(e)?64:me(e)?4:re(e)?2:0;return Ji(e,t,n,r,o,a,l,!0)}function jf(e){return e?mi(e)||Ni(e)?ke({},e):e:null}function Jt(e,t,n=!1,r=!1){const{props:o,ref:l,patchFlag:a,children:s,transition:i}=e,c=t?Nf(o||{},t):o,d={__v_isVNode:!0,__v_skip:!0,type:e.type,props:c,key:c&&Ki(c),ref:t&&t.ref?n&&l?Z(l)?l.concat(Gr(t)):[l,Gr(t)]:Gr(t):l,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:s,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Ye?a===-1?16:a|16:a,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:i,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Jt(e.ssContent),ssFallback:e.ssFallback&&Jt(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return i&&r&&(d.transition=i.clone(d)),d}function Yi(e=" ",t=0){return Re(Rn,null,e,t)}function A4(e,t){const n=Re(tr,null,e);return n.staticCount=t,n}function ft(e){return e==null||typeof e=="boolean"?Re(pt):Z(e)?Re(Ye,null,e.slice()):typeof e=="object"?zt(e):Re(Rn,null,String(e))}function zt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Jt(e)}function ql(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(Z(t))n=16;else if(typeof t=="object")if(r&65){const o=t.default;o&&(o._c&&(o._d=!1),ql(e,o()),o._c&&(o._d=!0));return}else{n=32;const o=t._;!o&&!Ni(t)?t._ctx=lt:o===3&<&&(lt.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else re(t)?(t={default:t,_ctx:lt},n=32):(t=String(t),r&64?(n=16,t=[Yi(t)]):n=8);e.children=t,e.shapeFlag|=n}function Nf(...e){const t={};for(let n=0;n$e||lt;let no,al;{const e=Zs(),t=(n,r)=>{let o;return(o=e[n])||(o=e[n]=[]),o.push(r),l=>{o.length>1?o.forEach(a=>a(l)):o[0](l)}};no=t("__VUE_INSTANCE_SETTERS__",n=>$e=n),al=t("__VUE_SSR_SETTERS__",n=>Ar=n)}const Cr=e=>{const t=$e;return no(e),e.scope.on(),()=>{e.scope.off(),no(t)}},Ha=()=>{$e&&$e.scope.off(),no(null)};function Qi(e){return e.vnode.shapeFlag&4}let Ar=!1;function zf(e,t=!1){t&&al(t);const{props:n,children:r}=e.vnode,o=Qi(e);Tf(e,n,o,t),kf(e,r);const l=o?qf(e,t):void 0;return t&&al(!1),l}function qf(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,mf);const{setup:r}=n;if(r){const o=e.setupContext=r.length>1?Wf(e):null,l=Cr(e);Qt();const a=Gt(r,e,0,[e.props,o]);if(Xt(),l(),Js(a)){if(a.then(Ha,Ha),t)return a.then(s=>{Fa(e,s,t)}).catch(s=>{wr(s,e,0)});e.asyncDep=a}else Fa(e,a,t)}else Xi(e,t)}function Fa(e,t,n){re(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:me(t)&&(e.setupState=_i(t)),Xi(e,n)}let za;function Xi(e,t,n){const r=e.type;if(!e.render){if(!t&&za&&!r.render){const o=r.template||Fl(e).template;if(o){const{isCustomElement:l,compilerOptions:a}=e.appContext.config,{delimiters:s,compilerOptions:i}=r,c=ke(ke({isCustomElement:l,delimiters:s},a),i);r.render=za(o,c)}}e.render=r.render||ot}{const o=Cr(e);Qt();try{vf(e)}finally{Xt(),o()}}}const Uf={get(e,t){return We(e,"get",""),e[t]}};function Wf(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Uf),slots:e.slots,emit:e.emit,expose:t}}function Ul(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(_i(Rd(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Zn)return Zn[n](e)},has(t,n){return n in t||n in Zn}}))}function Gf(e,t=!0){return re(e)?e.displayName||e.name:e.name||t&&e.__name}function Kf(e){return re(e)&&"__vccOpts"in e}const C=(e,t)=>Id(e,t,Ar);function u(e,t,n){const r=arguments.length;return r===2?me(t)&&!Z(t)?ll(t)?Re(e,null,[t]):Re(e,t):Re(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&ll(n)&&(n=[n]),Re(e,t,n))}const Jf="3.4.27";/**
+**/function Gt(e,t,n,r){try{return r?e(...r):e()}catch(o){wr(o,t,n)}}function at(e,t,n,r){if(re(e)){const o=Gt(e,t,n,r);return o&&Js(o)&&o.catch(l=>{wr(l,t,n)}),o}if(Z(e)){const o=[];for(let l=0;l>>1,o=Ne[r],l=cr(o);lTt&&Ne.splice(t,1)}function zd(e){Z(e)?Sn.push(...e):(!Ht||!Ht.includes(e,e.allowRecurse?sn+1:sn))&&Sn.push(e),Ei()}function Sa(e,t,n=ir?Tt+1:0){for(;ncr(n)-cr(r));if(Sn.length=0,Ht){Ht.push(...t);return}for(Ht=t,sn=0;sne.id==null?1/0:e.id,qd=(e,t)=>{const n=cr(e)-cr(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function wi(e){el=!1,ir=!0,Ne.sort(qd);try{for(Tt=0;Ttxe(h)?h.trim():h)),f&&(o=n.map(td))}let s,i=r[s=wo(t)]||r[s=wo(st(t))];!i&&l&&(i=r[s=wo(Vn(t))]),i&&at(i,e,6,o);const c=r[s+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[s])return;e.emitted[s]=!0,at(c,e,6,o)}}function Ti(e,t,n=!1){const r=t.emitsCache,o=r.get(e);if(o!==void 0)return o;const l=e.emits;let a={},s=!1;if(!re(e)){const i=c=>{const d=Ti(c,t,!0);d&&(s=!0,ke(a,d))};!n&&t.mixins.length&&t.mixins.forEach(i),e.extends&&i(e.extends),e.mixins&&e.mixins.forEach(i)}return!l&&!s?(me(e)&&r.set(e,null),null):(Z(l)?l.forEach(i=>a[i]=null):ke(a,l),me(e)&&r.set(e,a),a)}function po(e,t){return!e||!br(t)?!1:(t=t.slice(2).replace(/Once$/,""),ie(e,t[0].toLowerCase()+t.slice(1))||ie(e,Vn(t))||ie(e,t))}let lt=null,Ai=null;function Zr(e){const t=lt;return lt=e,Ai=e&&e.type.__scopeId||null,t}function Wd(e,t=lt,n){if(!t||e._n)return e;const r=(...o)=>{r._d&&Ba(-1);const l=Zr(t);let a;try{a=e(...o)}finally{Zr(l),r._d&&Ba(1)}return a};return r._n=!0,r._c=!0,r._d=!0,r}function Co(e){const{type:t,vnode:n,proxy:r,withProxy:o,propsOptions:[l],slots:a,attrs:s,emit:i,render:c,renderCache:d,props:f,data:p,setupState:h,ctx:v,inheritAttrs:w}=e,E=Zr(e);let b,T;try{if(n.shapeFlag&4){const k=o||r,V=k;b=ft(c.call(V,k,d,f,h,p,v)),T=s}else{const k=t;b=ft(k.length>1?k(f,{attrs:s,slots:a,emit:i}):k(f,null)),T=t.props?s:Gd(s)}}catch(k){nr.length=0,wr(k,e,1),b=Re(pt)}let _=b;if(T&&w!==!1){const k=Object.keys(T),{shapeFlag:V}=_;k.length&&V&7&&(l&&k.some(Cl)&&(T=Kd(T,l)),_=Jt(_,T,!1,!0))}return n.dirs&&(_=Jt(_,null,!1,!0),_.dirs=_.dirs?_.dirs.concat(n.dirs):n.dirs),n.transition&&(_.transition=n.transition),b=_,Zr(E),b}const Gd=e=>{let t;for(const n in e)(n==="class"||n==="style"||br(n))&&((t||(t={}))[n]=e[n]);return t},Kd=(e,t)=>{const n={};for(const r in e)(!Cl(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function Jd(e,t,n){const{props:r,children:o,component:l}=e,{props:a,children:s,patchFlag:i}=t,c=l.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&i>=0){if(i&1024)return!0;if(i&16)return r?Oa(r,a,c):!!a;if(i&8){const d=t.dynamicProps;for(let f=0;fe.__isSuspense;function ki(e,t){t&&t.pendingBranch?Z(e)?t.effects.push(...e):t.effects.push(e):zd(e)}const ef=Symbol.for("v-scx"),tf=()=>Ae(ef);function Li(e,t){return Nl(e,null,t)}const Vr={};function oe(e,t,n){return Nl(e,t,n)}function Nl(e,t,{immediate:n,deep:r,flush:o,once:l,onTrack:a,onTrigger:s}=ye){if(t&&l){const D=t;t=(...P)=>{D(...P),V()}}const i=$e,c=D=>r===!0?D:Tn(D,r===!1?1:void 0);let d,f=!1,p=!1;if(Ve(e)?(d=()=>e.value,f=Qr(e)):Yn(e)?(d=()=>c(e),f=!0):Z(e)?(p=!0,f=e.some(D=>Yn(D)||Qr(D)),d=()=>e.map(D=>{if(Ve(D))return D.value;if(Yn(D))return c(D);if(re(D))return Gt(D,i,2)})):re(e)?t?d=()=>Gt(e,i,2):d=()=>(h&&h(),at(e,i,3,[v])):d=ot,t&&r){const D=d;d=()=>Tn(D())}let h,v=D=>{h=_.onStop=()=>{Gt(D,i,4),h=_.onStop=void 0}},w;if(Cr)if(v=ot,t?n&&at(t,i,3,[d(),p?[]:void 0,v]):d(),o==="sync"){const D=tf();w=D.__watcherHandles||(D.__watcherHandles=[])}else return ot;let E=p?new Array(e.length).fill(Vr):Vr;const b=()=>{if(!(!_.active||!_.dirty))if(t){const D=_.run();(r||f||(p?D.some((P,R)=>Kt(P,E[R])):Kt(D,E)))&&(h&&h(),at(t,i,3,[D,E===Vr?void 0:p&&E[0]===Vr?[]:E,v]),E=D)}else _.run()};b.allowRecurse=!!t;let T;o==="sync"?T=b:o==="post"?T=()=>Fe(b,i&&i.suspense):(b.pre=!0,i&&(b.id=i.uid),T=()=>fo(b));const _=new Pl(d,ot,T),k=ni(),V=()=>{_.stop(),k&&kl(k.effects,_)};return t?n?b():E=_.run():o==="post"?Fe(_.run.bind(_),i&&i.suspense):_.run(),w&&w.push(V),V}function nf(e,t,n){const r=this.proxy,o=xe(e)?e.includes(".")?Si(r,e):()=>r[e]:e.bind(r,r);let l;re(t)?l=t:(l=t.handler,n=t);const a=Ar(this),s=Nl(o,l.bind(r),n);return a(),s}function Si(e,t){const n=t.split(".");return()=>{let r=e;for(let o=0;o{Tn(r,t,n)});else if(Qs(e))for(const r in e)Tn(e[r],t,n);return e}function wt(e,t,n,r){const o=e.dirs,l=t&&t.dirs;for(let a=0;a{e.isMounted=!0}),Di(()=>{e.isUnmounting=!0}),e}const et=[Function,Array],Pi={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:et,onEnter:et,onAfterEnter:et,onEnterCancelled:et,onBeforeLeave:et,onLeave:et,onAfterLeave:et,onLeaveCancelled:et,onBeforeAppear:et,onAppear:et,onAfterAppear:et,onAppearCancelled:et},rf={name:"BaseTransition",props:Pi,setup(e,{slots:t}){const n=Nn(),r=Oi();return()=>{const o=t.default&&Bl(t.default(),!0);if(!o||!o.length)return;let l=o[0];if(o.length>1){for(const p of o)if(p.type!==pt){l=p;break}}const a=ce(e),{mode:s}=a;if(r.isLeaving)return ko(l);const i=xa(l);if(!i)return ko(l);const c=ur(i,a,r,n);dr(i,c);const d=n.subTree,f=d&&xa(d);if(f&&f.type!==pt&&!cn(i,f)){const p=ur(f,a,r,n);if(dr(f,p),s==="out-in"&&i.type!==pt)return r.isLeaving=!0,p.afterLeave=()=>{r.isLeaving=!1,n.update.active!==!1&&(n.effect.dirty=!0,n.update())},ko(l);s==="in-out"&&i.type!==pt&&(p.delayLeave=(h,v,w)=>{const E=xi(r,f);E[String(f.key)]=f,h[Ft]=()=>{v(),h[Ft]=void 0,delete c.delayedLeave},c.delayedLeave=w})}return l}}},of=rf;function xi(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function ur(e,t,n,r){const{appear:o,mode:l,persisted:a=!1,onBeforeEnter:s,onEnter:i,onAfterEnter:c,onEnterCancelled:d,onBeforeLeave:f,onLeave:p,onAfterLeave:h,onLeaveCancelled:v,onBeforeAppear:w,onAppear:E,onAfterAppear:b,onAppearCancelled:T}=t,_=String(e.key),k=xi(n,e),V=(R,G)=>{R&&at(R,r,9,G)},D=(R,G)=>{const I=G[1];V(R,G),Z(R)?R.every(W=>W.length<=1)&&I():R.length<=1&&I()},P={mode:l,persisted:a,beforeEnter(R){let G=s;if(!n.isMounted)if(o)G=w||s;else return;R[Ft]&&R[Ft](!0);const I=k[_];I&&cn(e,I)&&I.el[Ft]&&I.el[Ft](),V(G,[R])},enter(R){let G=i,I=c,W=d;if(!n.isMounted)if(o)G=E||i,I=b||c,W=T||d;else return;let $=!1;const ee=R[jr]=Te=>{$||($=!0,Te?V(W,[R]):V(I,[R]),P.delayedLeave&&P.delayedLeave(),R[jr]=void 0)};G?D(G,[R,ee]):ee()},leave(R,G){const I=String(e.key);if(R[jr]&&R[jr](!0),n.isUnmounting)return G();V(f,[R]);let W=!1;const $=R[Ft]=ee=>{W||(W=!0,G(),ee?V(v,[R]):V(h,[R]),R[Ft]=void 0,k[I]===e&&delete k[I])};k[I]=e,p?D(p,[R,$]):$()},clone(R){return ur(R,t,n,r)}};return P}function ko(e){if(Tr(e))return e=Jt(e),e.children=null,e}function xa(e){if(!Tr(e))return e;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&re(n.default))return n.default()}}function dr(e,t){e.shapeFlag&6&&e.component?dr(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Bl(e,t=!1,n){let r=[],o=0;for(let l=0;l1)for(let l=0;l!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function Hl(e){re(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:r,delay:o=200,timeout:l,suspensible:a=!0,onError:s}=e;let i=null,c,d=0;const f=()=>(d++,i=null,p()),p=()=>{let h;return i||(h=i=t().catch(v=>{if(v=v instanceof Error?v:new Error(String(v)),s)return new Promise((w,E)=>{s(v,()=>w(f()),()=>E(v),d+1)});throw v}).then(v=>h!==i&&i?i:(v&&(v.__esModule||v[Symbol.toStringTag]==="Module")&&(v=v.default),c=v,v)))};return z({name:"AsyncComponentWrapper",__asyncLoader:p,get __asyncResolved(){return c},setup(){const h=$e;if(c)return()=>Lo(c,h);const v=T=>{i=null,wr(T,h,13,!r)};if(a&&h.suspense||Cr)return p().then(T=>()=>Lo(T,h)).catch(T=>(v(T),()=>r?Re(r,{error:T}):null));const w=U(!1),E=U(),b=U(!!o);return o&&setTimeout(()=>{b.value=!1},o),l!=null&&setTimeout(()=>{if(!w.value&&!E.value){const T=new Error(`Async component timed out after ${l}ms.`);v(T),E.value=T}},l),p().then(()=>{w.value=!0,h.parent&&Tr(h.parent.vnode)&&(h.parent.effect.dirty=!0,fo(h.parent.update))}).catch(T=>{v(T),E.value=T}),()=>{if(w.value&&c)return Lo(c,h);if(E.value&&r)return Re(r,{error:E.value});if(n&&!b.value)return Re(n)}}})}function Lo(e,t){const{ref:n,props:r,children:o,ce:l}=t.vnode,a=Re(e,r,o);return a.ref=n,a.ce=l,delete t.vnode.ce,a}const Tr=e=>e.type.__isKeepAlive;function lf(e,t){Ri(e,"a",t)}function af(e,t){Ri(e,"da",t)}function Ri(e,t,n=$e){const r=e.__wdc||(e.__wdc=()=>{let o=n;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(ho(t,r,n),n){let o=n.parent;for(;o&&o.parent;)Tr(o.parent.vnode)&&sf(r,t,n,o),o=o.parent}}function sf(e,t,n,r){const o=ho(t,e,r,!0);Zt(()=>{kl(r[t],o)},n)}function ho(e,t,n=$e,r=!1){if(n){const o=n[e]||(n[e]=[]),l=t.__weh||(t.__weh=(...a)=>{if(n.isUnmounted)return;Qt();const s=Ar(n),i=at(t,n,e,a);return s(),Xt(),i});return r?o.unshift(l):o.push(l),l}}const It=e=>(t,n=$e)=>(!Cr||e==="sp")&&ho(e,(...r)=>t(...r),n),cf=It("bm"),de=It("m"),uf=It("bu"),Ii=It("u"),Di=It("bum"),Zt=It("um"),df=It("sp"),ff=It("rtg"),pf=It("rtc");function hf(e,t=$e){ho("ec",e,t)}function w4(e,t,n,r){let o;const l=n;if(Z(e)||xe(e)){o=new Array(e.length);for(let a=0,s=e.length;at(a,s,void 0,l));else{const a=Object.keys(e);o=new Array(a.length);for(let s=0,i=a.length;se?Qi(e)?Ul(e)||e.proxy:tl(e.parent):null,Zn=ke(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>tl(e.parent),$root:e=>tl(e.root),$emit:e=>e.emit,$options:e=>Fl(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,fo(e.update)}),$nextTick:e=>e.n||(e.n=kt.bind(e.proxy)),$watch:e=>nf.bind(e)}),So=(e,t)=>e!==ye&&!e.__isScriptSetup&&ie(e,t),mf={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:r,data:o,props:l,accessCache:a,type:s,appContext:i}=e;let c;if(t[0]!=="$"){const h=a[t];if(h!==void 0)switch(h){case 1:return r[t];case 2:return o[t];case 4:return n[t];case 3:return l[t]}else{if(So(r,t))return a[t]=1,r[t];if(o!==ye&&ie(o,t))return a[t]=2,o[t];if((c=e.propsOptions[0])&&ie(c,t))return a[t]=3,l[t];if(n!==ye&&ie(n,t))return a[t]=4,n[t];nl&&(a[t]=0)}}const d=Zn[t];let f,p;if(d)return t==="$attrs"&&We(e.attrs,"get",""),d(e);if((f=s.__cssModules)&&(f=f[t]))return f;if(n!==ye&&ie(n,t))return a[t]=4,n[t];if(p=i.config.globalProperties,ie(p,t))return p[t]},set({_:e},t,n){const{data:r,setupState:o,ctx:l}=e;return So(o,t)?(o[t]=n,!0):r!==ye&&ie(r,t)?(r[t]=n,!0):ie(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(l[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:o,propsOptions:l}},a){let s;return!!n[a]||e!==ye&&ie(e,a)||So(t,a)||(s=l[0])&&ie(s,a)||ie(r,a)||ie(Zn,a)||ie(o.config.globalProperties,a)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:ie(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Ra(e){return Z(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let nl=!0;function vf(e){const t=Fl(e),n=e.proxy,r=e.ctx;nl=!1,t.beforeCreate&&Ia(t.beforeCreate,e,"bc");const{data:o,computed:l,methods:a,watch:s,provide:i,inject:c,created:d,beforeMount:f,mounted:p,beforeUpdate:h,updated:v,activated:w,deactivated:E,beforeDestroy:b,beforeUnmount:T,destroyed:_,unmounted:k,render:V,renderTracked:D,renderTriggered:P,errorCaptured:R,serverPrefetch:G,expose:I,inheritAttrs:W,components:$,directives:ee,filters:Te}=t;if(c&&gf(c,r,null),a)for(const te in a){const J=a[te];re(J)&&(r[te]=J.bind(n))}if(o){const te=o.call(n,n);me(te)&&(e.data=Er(te))}if(nl=!0,l)for(const te in l){const J=l[te],Oe=re(J)?J.bind(n,n):re(J.get)?J.get.bind(n,n):ot,bt=!re(J)&&re(J.set)?J.set.bind(n):ot,Ze=A({get:Oe,set:bt});Object.defineProperty(r,te,{enumerable:!0,configurable:!0,get:()=>Ze.value,set:Ie=>Ze.value=Ie})}if(s)for(const te in s)$i(s[te],r,n,te);if(i){const te=re(i)?i.call(n):i;Reflect.ownKeys(te).forEach(J=>{hn(J,te[J])})}d&&Ia(d,e,"c");function K(te,J){Z(J)?J.forEach(Oe=>te(Oe.bind(n))):J&&te(J.bind(n))}if(K(cf,f),K(de,p),K(uf,h),K(Ii,v),K(lf,w),K(af,E),K(hf,R),K(pf,D),K(ff,P),K(Di,T),K(Zt,k),K(df,G),Z(I))if(I.length){const te=e.exposed||(e.exposed={});I.forEach(J=>{Object.defineProperty(te,J,{get:()=>n[J],set:Oe=>n[J]=Oe})})}else e.exposed||(e.exposed={});V&&e.render===ot&&(e.render=V),W!=null&&(e.inheritAttrs=W),$&&(e.components=$),ee&&(e.directives=ee)}function gf(e,t,n=ot){Z(e)&&(e=rl(e));for(const r in e){const o=e[r];let l;me(o)?"default"in o?l=Ae(o.from||r,o.default,!0):l=Ae(o.from||r):l=Ae(o),Ve(l)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>l.value,set:a=>l.value=a}):t[r]=l}}function Ia(e,t,n){at(Z(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function $i(e,t,n,r){const o=r.includes(".")?Si(n,r):()=>n[r];if(xe(e)){const l=t[e];re(l)&&oe(o,l)}else if(re(e))oe(o,e.bind(n));else if(me(e))if(Z(e))e.forEach(l=>$i(l,t,n,r));else{const l=re(e.handler)?e.handler.bind(n):t[e.handler];re(l)&&oe(o,l,e)}}function Fl(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:o,optionsCache:l,config:{optionMergeStrategies:a}}=e.appContext,s=l.get(t);let i;return s?i=s:!o.length&&!n&&!r?i=t:(i={},o.length&&o.forEach(c=>eo(i,c,a,!0)),eo(i,t,a)),me(t)&&l.set(t,i),i}function eo(e,t,n,r=!1){const{mixins:o,extends:l}=t;l&&eo(e,l,n,!0),o&&o.forEach(a=>eo(e,a,n,!0));for(const a in t)if(!(r&&a==="expose")){const s=_f[a]||n&&n[a];e[a]=s?s(e[a],t[a]):t[a]}return e}const _f={data:Da,props:$a,emits:$a,methods:Kn,computed:Kn,beforeCreate:Be,created:Be,beforeMount:Be,mounted:Be,beforeUpdate:Be,updated:Be,beforeDestroy:Be,beforeUnmount:Be,destroyed:Be,unmounted:Be,activated:Be,deactivated:Be,errorCaptured:Be,serverPrefetch:Be,components:Kn,directives:Kn,watch:yf,provide:Da,inject:bf};function Da(e,t){return t?e?function(){return ke(re(e)?e.call(this,this):e,re(t)?t.call(this,this):t)}:t:e}function bf(e,t){return Kn(rl(e),rl(t))}function rl(e){if(Z(e)){const t={};for(let n=0;n1)return n&&re(t)?t.call(r&&r.proxy):t}}const Vi={},ji=()=>Object.create(Vi),Ni=e=>Object.getPrototypeOf(e)===Vi;function Tf(e,t,n,r=!1){const o={},l=ji();e.propsDefaults=Object.create(null),Bi(e,t,o,l);for(const a in e.propsOptions[0])a in o||(o[a]=void 0);n?e.props=r?o:hi(o):e.type.props?e.props=o:e.props=l,e.attrs=l}function Af(e,t,n,r){const{props:o,attrs:l,vnode:{patchFlag:a}}=e,s=ce(o),[i]=e.propsOptions;let c=!1;if((r||a>0)&&!(a&16)){if(a&8){const d=e.vnode.dynamicProps;for(let f=0;f{i=!0;const[p,h]=Hi(f,t,!0);ke(a,p),h&&s.push(...h)};!n&&t.mixins.length&&t.mixins.forEach(d),e.extends&&d(e.extends),e.mixins&&e.mixins.forEach(d)}if(!l&&!i)return me(e)&&r.set(e,Cn),Cn;if(Z(l))for(let d=0;d-1,h[1]=w<0||v-1||ie(h,"default"))&&s.push(f)}}}const c=[a,s];return me(e)&&r.set(e,c),c}function Ma(e){return e[0]!=="$"&&!Ln(e)}function Va(e){return e===null?"null":typeof e=="function"?e.name||"":typeof e=="object"&&e.constructor&&e.constructor.name||""}function ja(e,t){return Va(e)===Va(t)}function Na(e,t){return Z(t)?t.findIndex(n=>ja(n,e)):re(t)&&ja(t,e)?0:-1}const Fi=e=>e[0]==="_"||e==="$stable",zl=e=>Z(e)?e.map(ft):[ft(e)],Cf=(e,t,n)=>{if(t._n)return t;const r=Wd((...o)=>zl(t(...o)),n);return r._c=!1,r},zi=(e,t,n)=>{const r=e._ctx;for(const o in e){if(Fi(o))continue;const l=e[o];if(re(l))t[o]=Cf(o,l,r);else if(l!=null){const a=zl(l);t[o]=()=>a}}},qi=(e,t)=>{const n=zl(t);e.slots.default=()=>n},kf=(e,t)=>{const n=e.slots=ji();if(e.vnode.shapeFlag&32){const r=t._;r?(ke(n,t),Xs(n,"_",r,!0)):zi(t,n)}else t&&qi(e,t)},Lf=(e,t,n)=>{const{vnode:r,slots:o}=e;let l=!0,a=ye;if(r.shapeFlag&32){const s=t._;s?n&&s===1?l=!1:(ke(o,t),!n&&s===1&&delete o._):(l=!t.$stable,zi(t,o)),a=t}else t&&(qi(e,t),a={default:1});if(l)for(const s in o)!Fi(s)&&a[s]==null&&delete o[s]};function to(e,t,n,r,o=!1){if(Z(e)){e.forEach((p,h)=>to(p,t&&(Z(t)?t[h]:t),n,r,o));return}if(Xn(r)&&!o)return;const l=r.shapeFlag&4?Ul(r.component)||r.component.proxy:r.el,a=o?null:l,{i:s,r:i}=e,c=t&&t.r,d=s.refs===ye?s.refs={}:s.refs,f=s.setupState;if(c!=null&&c!==i&&(xe(c)?(d[c]=null,ie(f,c)&&(f[c]=null)):Ve(c)&&(c.value=null)),re(i))Gt(i,s,12,[a,d]);else{const p=xe(i),h=Ve(i);if(p||h){const v=()=>{if(e.f){const w=p?ie(f,i)?f[i]:d[i]:i.value;o?Z(w)&&kl(w,l):Z(w)?w.includes(l)||w.push(l):p?(d[i]=[l],ie(f,i)&&(f[i]=d[i])):(i.value=[l],e.k&&(d[e.k]=i.value))}else p?(d[i]=a,ie(f,i)&&(f[i]=a)):h&&(i.value=a,e.k&&(d[e.k]=a))};a?(v.id=-1,Fe(v,n)):v()}}}let Mt=!1;const Sf=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",Of=e=>e.namespaceURI.includes("MathML"),Nr=e=>{if(Sf(e))return"svg";if(Of(e))return"mathml"},Br=e=>e.nodeType===8;function Pf(e){const{mt:t,p:n,o:{patchProp:r,createText:o,nextSibling:l,parentNode:a,remove:s,insert:i,createComment:c}}=e,d=(_,k)=>{if(!k.hasChildNodes()){n(null,_,k),Xr(),k._vnode=_;return}Mt=!1,f(k.firstChild,_,null,null,null),Xr(),k._vnode=_,Mt&&console.error("Hydration completed but contains mismatches.")},f=(_,k,V,D,P,R=!1)=>{R=R||!!k.dynamicChildren;const G=Br(_)&&_.data==="[",I=()=>w(_,k,V,D,P,G),{type:W,ref:$,shapeFlag:ee,patchFlag:Te}=k;let _e=_.nodeType;k.el=_,Te===-2&&(R=!1,k.dynamicChildren=null);let K=null;switch(W){case Rn:_e!==3?k.children===""?(i(k.el=o(""),a(_),_),K=_):K=I():(_.data!==k.children&&(Mt=!0,_.data=k.children),K=l(_));break;case pt:T(_)?(K=l(_),b(k.el=_.content.firstChild,_,V)):_e!==8||G?K=I():K=l(_);break;case tr:if(G&&(_=l(_),_e=_.nodeType),_e===1||_e===3){K=_;const te=!k.children.length;for(let J=0;J{R=R||!!k.dynamicChildren;const{type:G,props:I,patchFlag:W,shapeFlag:$,dirs:ee,transition:Te}=k,_e=G==="input"||G==="option";if(_e||W!==-1){ee&&wt(k,null,V,"created");let K=!1;if(T(_)){K=Ui(D,Te)&&V&&V.vnode.props&&V.vnode.props.appear;const J=_.content.firstChild;K&&Te.beforeEnter(J),b(J,_,V),k.el=_=J}if($&16&&!(I&&(I.innerHTML||I.textContent))){let J=h(_.firstChild,k,_,V,D,P,R);for(;J;){Mt=!0;const Oe=J;J=J.nextSibling,s(Oe)}}else $&8&&_.textContent!==k.children&&(Mt=!0,_.textContent=k.children);if(I)if(_e||!R||W&48)for(const J in I)(_e&&(J.endsWith("value")||J==="indeterminate")||br(J)&&!Ln(J)||J[0]===".")&&r(_,J,null,I[J],void 0,void 0,V);else I.onClick&&r(_,"onClick",null,I.onClick,void 0,void 0,V);let te;(te=I&&I.onVnodeBeforeMount)&&tt(te,V,k),ee&&wt(k,null,V,"beforeMount"),((te=I&&I.onVnodeMounted)||ee||K)&&ki(()=>{te&&tt(te,V,k),K&&Te.enter(_),ee&&wt(k,null,V,"mounted")},D)}return _.nextSibling},h=(_,k,V,D,P,R,G)=>{G=G||!!k.dynamicChildren;const I=k.children,W=I.length;for(let $=0;${const{slotScopeIds:G}=k;G&&(P=P?P.concat(G):G);const I=a(_),W=h(l(_),k,I,V,D,P,R);return W&&Br(W)&&W.data==="]"?l(k.anchor=W):(Mt=!0,i(k.anchor=c("]"),I,W),W)},w=(_,k,V,D,P,R)=>{if(Mt=!0,k.el=null,R){const W=E(_);for(;;){const $=l(_);if($&&$!==W)s($);else break}}const G=l(_),I=a(_);return s(_),n(null,k,I,G,V,D,Nr(I),P),G},E=(_,k="[",V="]")=>{let D=0;for(;_;)if(_=l(_),_&&Br(_)&&(_.data===k&&D++,_.data===V)){if(D===0)return l(_);D--}return _},b=(_,k,V)=>{const D=k.parentNode;D&&D.replaceChild(_,k);let P=V;for(;P;)P.vnode.el===k&&(P.vnode.el=P.subTree.el=_),P=P.parent},T=_=>_.nodeType===1&&_.tagName.toLowerCase()==="template";return[d,f]}const Fe=ki;function xf(e){return Rf(e,Pf)}function Rf(e,t){const n=Zs();n.__VUE__=!0;const{insert:r,remove:o,patchProp:l,createElement:a,createText:s,createComment:i,setText:c,setElementText:d,parentNode:f,nextSibling:p,setScopeId:h=ot,insertStaticContent:v}=e,w=(m,g,C,O=null,S=null,j=null,H=void 0,M=null,N=!!g.dynamicChildren)=>{if(m===g)return;m&&!cn(m,g)&&(O=L(m),Ie(m,S,j,!0),m=null),g.patchFlag===-2&&(N=!1,g.dynamicChildren=null);const{type:x,ref:q,shapeFlag:X}=g;switch(x){case Rn:E(m,g,C,O);break;case pt:b(m,g,C,O);break;case tr:m==null&&T(g,C,O,H);break;case Ye:$(m,g,C,O,S,j,H,M,N);break;default:X&1?V(m,g,C,O,S,j,H,M,N):X&6?ee(m,g,C,O,S,j,H,M,N):(X&64||X&128)&&x.process(m,g,C,O,S,j,H,M,N,Y)}q!=null&&S&&to(q,m&&m.ref,j,g||m,!g)},E=(m,g,C,O)=>{if(m==null)r(g.el=s(g.children),C,O);else{const S=g.el=m.el;g.children!==m.children&&c(S,g.children)}},b=(m,g,C,O)=>{m==null?r(g.el=i(g.children||""),C,O):g.el=m.el},T=(m,g,C,O)=>{[m.el,m.anchor]=v(m.children,g,C,O,m.el,m.anchor)},_=({el:m,anchor:g},C,O)=>{let S;for(;m&&m!==g;)S=p(m),r(m,C,O),m=S;r(g,C,O)},k=({el:m,anchor:g})=>{let C;for(;m&&m!==g;)C=p(m),o(m),m=C;o(g)},V=(m,g,C,O,S,j,H,M,N)=>{g.type==="svg"?H="svg":g.type==="math"&&(H="mathml"),m==null?D(g,C,O,S,j,H,M,N):G(m,g,S,j,H,M,N)},D=(m,g,C,O,S,j,H,M)=>{let N,x;const{props:q,shapeFlag:X,transition:Q,dirs:ne}=m;if(N=m.el=a(m.type,j,q&&q.is,q),X&8?d(N,m.children):X&16&&R(m.children,N,null,O,S,Oo(m,j),H,M),ne&&wt(m,null,O,"created"),P(N,m,m.scopeId,H,O),q){for(const fe in q)fe!=="value"&&!Ln(fe)&&l(N,fe,null,q[fe],j,m.children,O,S,Pe);"value"in q&&l(N,"value",null,q.value,j),(x=q.onVnodeBeforeMount)&&tt(x,O,m)}ne&&wt(m,null,O,"beforeMount");const le=Ui(S,Q);le&&Q.beforeEnter(N),r(N,g,C),((x=q&&q.onVnodeMounted)||le||ne)&&Fe(()=>{x&&tt(x,O,m),le&&Q.enter(N),ne&&wt(m,null,O,"mounted")},S)},P=(m,g,C,O,S)=>{if(C&&h(m,C),O)for(let j=0;j{for(let x=N;x{const M=g.el=m.el;let{patchFlag:N,dynamicChildren:x,dirs:q}=g;N|=m.patchFlag&16;const X=m.props||ye,Q=g.props||ye;let ne;if(C&&on(C,!1),(ne=Q.onVnodeBeforeUpdate)&&tt(ne,C,g,m),q&&wt(g,m,C,"beforeUpdate"),C&&on(C,!0),x?I(m.dynamicChildren,x,M,C,O,Oo(g,S),j):H||J(m,g,M,null,C,O,Oo(g,S),j,!1),N>0){if(N&16)W(M,g,X,Q,C,O,S);else if(N&2&&X.class!==Q.class&&l(M,"class",null,Q.class,S),N&4&&l(M,"style",X.style,Q.style,S),N&8){const le=g.dynamicProps;for(let fe=0;fe{ne&&tt(ne,C,g,m),q&&wt(g,m,C,"updated")},O)},I=(m,g,C,O,S,j,H)=>{for(let M=0;M{if(C!==O){if(C!==ye)for(const M in C)!Ln(M)&&!(M in O)&&l(m,M,C[M],null,H,g.children,S,j,Pe);for(const M in O){if(Ln(M))continue;const N=O[M],x=C[M];N!==x&&M!=="value"&&l(m,M,x,N,H,g.children,S,j,Pe)}"value"in O&&l(m,"value",C.value,O.value,H)}},$=(m,g,C,O,S,j,H,M,N)=>{const x=g.el=m?m.el:s(""),q=g.anchor=m?m.anchor:s("");let{patchFlag:X,dynamicChildren:Q,slotScopeIds:ne}=g;ne&&(M=M?M.concat(ne):ne),m==null?(r(x,C,O),r(q,C,O),R(g.children||[],C,q,S,j,H,M,N)):X>0&&X&64&&Q&&m.dynamicChildren?(I(m.dynamicChildren,Q,C,S,j,H,M),(g.key!=null||S&&g===S.subTree)&&Wi(m,g,!0)):J(m,g,C,q,S,j,H,M,N)},ee=(m,g,C,O,S,j,H,M,N)=>{g.slotScopeIds=M,m==null?g.shapeFlag&512?S.ctx.activate(g,C,O,H,N):Te(g,C,O,S,j,H,N):_e(m,g,N)},Te=(m,g,C,O,S,j,H)=>{const M=m.component=Ff(m,O,S);if(Tr(m)&&(M.ctx.renderer=Y),zf(M),M.asyncDep){if(S&&S.registerDep(M,K),!m.el){const N=M.subTree=Re(pt);b(null,N,g,C)}}else K(M,m,g,C,S,j,H)},_e=(m,g,C)=>{const O=g.component=m.component;if(Jd(m,g,C))if(O.asyncDep&&!O.asyncResolved){te(O,g,C);return}else O.next=g,Fd(O.update),O.effect.dirty=!0,O.update();else g.el=m.el,O.vnode=g},K=(m,g,C,O,S,j,H)=>{const M=()=>{if(m.isMounted){let{next:q,bu:X,u:Q,parent:ne,vnode:le}=m;{const _n=Gi(m);if(_n){q&&(q.el=le.el,te(m,q,H)),_n.asyncDep.then(()=>{m.isUnmounted||M()});return}}let fe=q,be;on(m,!1),q?(q.el=le.el,te(m,q,H)):q=le,X&&To(X),(be=q.props&&q.props.onVnodeBeforeUpdate)&&tt(be,ne,q,le),on(m,!0);const De=Co(m),ut=m.subTree;m.subTree=De,w(ut,De,f(ut.el),L(ut),m,S,j),q.el=De.el,fe===null&&Yd(m,De.el),Q&&Fe(Q,S),(be=q.props&&q.props.onVnodeUpdated)&&Fe(()=>tt(be,ne,q,le),S)}else{let q;const{el:X,props:Q}=g,{bm:ne,m:le,parent:fe}=m,be=Xn(g);if(on(m,!1),ne&&To(ne),!be&&(q=Q&&Q.onVnodeBeforeMount)&&tt(q,fe,g),on(m,!0),X&&pe){const De=()=>{m.subTree=Co(m),pe(X,m.subTree,m,S,null)};be?g.type.__asyncLoader().then(()=>!m.isUnmounted&&De()):De()}else{const De=m.subTree=Co(m);w(null,De,C,O,m,S,j),g.el=De.el}if(le&&Fe(le,S),!be&&(q=Q&&Q.onVnodeMounted)){const De=g;Fe(()=>tt(q,fe,De),S)}(g.shapeFlag&256||fe&&Xn(fe.vnode)&&fe.vnode.shapeFlag&256)&&m.a&&Fe(m.a,S),m.isMounted=!0,g=C=O=null}},N=m.effect=new Pl(M,ot,()=>fo(x),m.scope),x=m.update=()=>{N.dirty&&N.run()};x.id=m.uid,on(m,!0),x()},te=(m,g,C)=>{g.component=m;const O=m.vnode.props;m.vnode=g,m.next=null,Af(m,g.props,O,C),Lf(m,g.children,C),Qt(),Sa(m),Xt()},J=(m,g,C,O,S,j,H,M,N=!1)=>{const x=m&&m.children,q=m?m.shapeFlag:0,X=g.children,{patchFlag:Q,shapeFlag:ne}=g;if(Q>0){if(Q&128){bt(x,X,C,O,S,j,H,M,N);return}else if(Q&256){Oe(x,X,C,O,S,j,H,M,N);return}}ne&8?(q&16&&Pe(x,S,j),X!==x&&d(C,X)):q&16?ne&16?bt(x,X,C,O,S,j,H,M,N):Pe(x,S,j,!0):(q&8&&d(C,""),ne&16&&R(X,C,O,S,j,H,M,N))},Oe=(m,g,C,O,S,j,H,M,N)=>{m=m||Cn,g=g||Cn;const x=m.length,q=g.length,X=Math.min(x,q);let Q;for(Q=0;Qq?Pe(m,S,j,!0,!1,X):R(g,C,O,S,j,H,M,N,X)},bt=(m,g,C,O,S,j,H,M,N)=>{let x=0;const q=g.length;let X=m.length-1,Q=q-1;for(;x<=X&&x<=Q;){const ne=m[x],le=g[x]=N?zt(g[x]):ft(g[x]);if(cn(ne,le))w(ne,le,C,null,S,j,H,M,N);else break;x++}for(;x<=X&&x<=Q;){const ne=m[X],le=g[Q]=N?zt(g[Q]):ft(g[Q]);if(cn(ne,le))w(ne,le,C,null,S,j,H,M,N);else break;X--,Q--}if(x>X){if(x<=Q){const ne=Q+1,le=neQ)for(;x<=X;)Ie(m[x],S,j,!0),x++;else{const ne=x,le=x,fe=new Map;for(x=le;x<=Q;x++){const Ke=g[x]=N?zt(g[x]):ft(g[x]);Ke.key!=null&&fe.set(Ke.key,x)}let be,De=0;const ut=Q-le+1;let _n=!1,ga=0;const qn=new Array(ut);for(x=0;x=ut){Ie(Ke,S,j,!0);continue}let Et;if(Ke.key!=null)Et=fe.get(Ke.key);else for(be=le;be<=Q;be++)if(qn[be-le]===0&&cn(Ke,g[be])){Et=be;break}Et===void 0?Ie(Ke,S,j,!0):(qn[Et-le]=x+1,Et>=ga?ga=Et:_n=!0,w(Ke,g[Et],C,null,S,j,H,M,N),De++)}const _a=_n?If(qn):Cn;for(be=_a.length-1,x=ut-1;x>=0;x--){const Ke=le+x,Et=g[Ke],ba=Ke+1{const{el:j,type:H,transition:M,children:N,shapeFlag:x}=m;if(x&6){Ze(m.component.subTree,g,C,O);return}if(x&128){m.suspense.move(g,C,O);return}if(x&64){H.move(m,g,C,Y);return}if(H===Ye){r(j,g,C);for(let X=0;XM.enter(j),S);else{const{leave:X,delayLeave:Q,afterLeave:ne}=M,le=()=>r(j,g,C),fe=()=>{X(j,()=>{le(),ne&&ne()})};Q?Q(j,le,fe):fe()}else r(j,g,C)},Ie=(m,g,C,O=!1,S=!1)=>{const{type:j,props:H,ref:M,children:N,dynamicChildren:x,shapeFlag:q,patchFlag:X,dirs:Q}=m;if(M!=null&&to(M,null,C,m,!0),q&256){g.ctx.deactivate(m);return}const ne=q&1&&Q,le=!Xn(m);let fe;if(le&&(fe=H&&H.onVnodeBeforeUnmount)&&tt(fe,g,m),q&6)yt(m.component,C,O);else{if(q&128){m.suspense.unmount(C,O);return}ne&&wt(m,null,g,"beforeUnmount"),q&64?m.type.remove(m,g,C,S,Y,O):x&&(j!==Ye||X>0&&X&64)?Pe(x,g,C,!1,!0):(j===Ye&&X&384||!S&&q&16)&&Pe(N,g,C),O&&Ge(m)}(le&&(fe=H&&H.onVnodeUnmounted)||ne)&&Fe(()=>{fe&&tt(fe,g,m),ne&&wt(m,null,g,"unmounted")},C)},Ge=m=>{const{type:g,el:C,anchor:O,transition:S}=m;if(g===Ye){Lt(C,O);return}if(g===tr){k(m);return}const j=()=>{o(C),S&&!S.persisted&&S.afterLeave&&S.afterLeave()};if(m.shapeFlag&1&&S&&!S.persisted){const{leave:H,delayLeave:M}=S,N=()=>H(C,j);M?M(m.el,j,N):N()}else j()},Lt=(m,g)=>{let C;for(;m!==g;)C=p(m),o(m),m=C;o(g)},yt=(m,g,C)=>{const{bum:O,scope:S,update:j,subTree:H,um:M}=m;O&&To(O),S.stop(),j&&(j.active=!1,Ie(H,m,g,C)),M&&Fe(M,g),Fe(()=>{m.isUnmounted=!0},g),g&&g.pendingBranch&&!g.isUnmounted&&m.asyncDep&&!m.asyncResolved&&m.suspenseId===g.pendingId&&(g.deps--,g.deps===0&&g.resolve())},Pe=(m,g,C,O=!1,S=!1,j=0)=>{for(let H=j;Hm.shapeFlag&6?L(m.component.subTree):m.shapeFlag&128?m.suspense.next():p(m.anchor||m.el);let F=!1;const B=(m,g,C)=>{m==null?g._vnode&&Ie(g._vnode,null,null,!0):w(g._vnode||null,m,g,null,null,null,C),F||(F=!0,Sa(),Xr(),F=!1),g._vnode=m},Y={p:w,um:Ie,m:Ze,r:Ge,mt:Te,mc:R,pc:J,pbc:I,n:L,o:e};let ae,pe;return t&&([ae,pe]=t(Y)),{render:B,hydrate:ae,createApp:wf(B,ae)}}function Oo({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function on({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Ui(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Wi(e,t,n=!1){const r=e.children,o=t.children;if(Z(r)&&Z(o))for(let l=0;l>1,e[n[s]]0&&(t[r]=n[l-1]),n[l]=r)}}for(l=n.length,a=n[l-1];l-- >0;)n[l]=a,a=t[a];return n}function Gi(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Gi(t)}const Df=e=>e.__isTeleport,Ye=Symbol.for("v-fgt"),Rn=Symbol.for("v-txt"),pt=Symbol.for("v-cmt"),tr=Symbol.for("v-stc"),nr=[];let ht=null;function T4(e=!1){nr.push(ht=e?null:[])}function $f(){nr.pop(),ht=nr[nr.length-1]||null}let fr=1;function Ba(e){fr+=e}function Mf(e){return e.dynamicChildren=fr>0?ht||Cn:null,$f(),fr>0&&ht&&ht.push(e),e}function A4(e,t,n,r,o,l){return Mf(Ji(e,t,n,r,o,l,!0))}function ll(e){return e?e.__v_isVNode===!0:!1}function cn(e,t){return e.type===t.type&&e.key===t.key}const Ki=({key:e})=>e??null,Gr=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?xe(e)||Ve(e)||re(e)?{i:lt,r:e,k:t,f:!!n}:e:null);function Ji(e,t=null,n=null,r=0,o=null,l=e===Ye?0:1,a=!1,s=!1){const i={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Ki(t),ref:t&&Gr(t),scopeId:Ai,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:l,patchFlag:r,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:lt};return s?(ql(i,n),l&128&&e.normalize(i)):n&&(i.shapeFlag|=xe(n)?8:16),fr>0&&!a&&ht&&(i.patchFlag>0||l&6)&&i.patchFlag!==32&&ht.push(i),i}const Re=Vf;function Vf(e,t=null,n=null,r=0,o=null,l=!1){if((!e||e===Qd)&&(e=pt),ll(e)){const s=Jt(e,t,!0);return n&&ql(s,n),fr>0&&!l&&ht&&(s.shapeFlag&6?ht[ht.indexOf(e)]=s:ht.push(s)),s.patchFlag|=-2,s}if(Kf(e)&&(e=e.__vccOpts),t){t=jf(t);let{class:s,style:i}=t;s&&!xe(s)&&(t.class=Ol(s)),me(i)&&(mi(i)&&!Z(i)&&(i=ke({},i)),t.style=Sl(i))}const a=xe(e)?1:Zd(e)?128:Df(e)?64:me(e)?4:re(e)?2:0;return Ji(e,t,n,r,o,a,l,!0)}function jf(e){return e?mi(e)||Ni(e)?ke({},e):e:null}function Jt(e,t,n=!1,r=!1){const{props:o,ref:l,patchFlag:a,children:s,transition:i}=e,c=t?Nf(o||{},t):o,d={__v_isVNode:!0,__v_skip:!0,type:e.type,props:c,key:c&&Ki(c),ref:t&&t.ref?n&&l?Z(l)?l.concat(Gr(t)):[l,Gr(t)]:Gr(t):l,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:s,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Ye?a===-1?16:a|16:a,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:i,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Jt(e.ssContent),ssFallback:e.ssFallback&&Jt(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return i&&r&&(d.transition=i.clone(d)),d}function Yi(e=" ",t=0){return Re(Rn,null,e,t)}function C4(e,t){const n=Re(tr,null,e);return n.staticCount=t,n}function ft(e){return e==null||typeof e=="boolean"?Re(pt):Z(e)?Re(Ye,null,e.slice()):typeof e=="object"?zt(e):Re(Rn,null,String(e))}function zt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Jt(e)}function ql(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(Z(t))n=16;else if(typeof t=="object")if(r&65){const o=t.default;o&&(o._c&&(o._d=!1),ql(e,o()),o._c&&(o._d=!0));return}else{n=32;const o=t._;!o&&!Ni(t)?t._ctx=lt:o===3&<&&(lt.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else re(t)?(t={default:t,_ctx:lt},n=32):(t=String(t),r&64?(n=16,t=[Yi(t)]):n=8);e.children=t,e.shapeFlag|=n}function Nf(...e){const t={};for(let n=0;n$e||lt;let no,al;{const e=Zs(),t=(n,r)=>{let o;return(o=e[n])||(o=e[n]=[]),o.push(r),l=>{o.length>1?o.forEach(a=>a(l)):o[0](l)}};no=t("__VUE_INSTANCE_SETTERS__",n=>$e=n),al=t("__VUE_SSR_SETTERS__",n=>Cr=n)}const Ar=e=>{const t=$e;return no(e),e.scope.on(),()=>{e.scope.off(),no(t)}},Ha=()=>{$e&&$e.scope.off(),no(null)};function Qi(e){return e.vnode.shapeFlag&4}let Cr=!1;function zf(e,t=!1){t&&al(t);const{props:n,children:r}=e.vnode,o=Qi(e);Tf(e,n,o,t),kf(e,r);const l=o?qf(e,t):void 0;return t&&al(!1),l}function qf(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,mf);const{setup:r}=n;if(r){const o=e.setupContext=r.length>1?Wf(e):null,l=Ar(e);Qt();const a=Gt(r,e,0,[e.props,o]);if(Xt(),l(),Js(a)){if(a.then(Ha,Ha),t)return a.then(s=>{Fa(e,s,t)}).catch(s=>{wr(s,e,0)});e.asyncDep=a}else Fa(e,a,t)}else Xi(e,t)}function Fa(e,t,n){re(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:me(t)&&(e.setupState=_i(t)),Xi(e,n)}let za;function Xi(e,t,n){const r=e.type;if(!e.render){if(!t&&za&&!r.render){const o=r.template||Fl(e).template;if(o){const{isCustomElement:l,compilerOptions:a}=e.appContext.config,{delimiters:s,compilerOptions:i}=r,c=ke(ke({isCustomElement:l,delimiters:s},a),i);r.render=za(o,c)}}e.render=r.render||ot}{const o=Ar(e);Qt();try{vf(e)}finally{Xt(),o()}}}const Uf={get(e,t){return We(e,"get",""),e[t]}};function Wf(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Uf),slots:e.slots,emit:e.emit,expose:t}}function Ul(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(_i(Rd(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Zn)return Zn[n](e)},has(t,n){return n in t||n in Zn}}))}function Gf(e,t=!0){return re(e)?e.displayName||e.name:e.name||t&&e.__name}function Kf(e){return re(e)&&"__vccOpts"in e}const A=(e,t)=>Id(e,t,Cr);function u(e,t,n){const r=arguments.length;return r===2?me(t)&&!Z(t)?ll(t)?Re(e,null,[t]):Re(e,t):Re(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&ll(n)&&(n=[n]),Re(e,t,n))}const Jf="3.4.27";/**
 * @vue/runtime-dom v3.4.27
 * (c) 2018-present Yuxi (Evan) You and Vue contributors
 * @license MIT
-**/const Yf="http://www.w3.org/2000/svg",Qf="http://www.w3.org/1998/Math/MathML",qt=typeof document<"u"?document:null,qa=qt&&qt.createElement("template"),Xf={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const o=t==="svg"?qt.createElementNS(Yf,e):t==="mathml"?qt.createElementNS(Qf,e):qt.createElement(e,n?{is:n}:void 0);return e==="select"&&r&&r.multiple!=null&&o.setAttribute("multiple",r.multiple),o},createText:e=>qt.createTextNode(e),createComment:e=>qt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>qt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,o,l){const a=n?n.previousSibling:t.lastChild;if(o&&(o===l||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===l||!(o=o.nextSibling)););else{qa.innerHTML=r==="svg"?`${e}`:r==="mathml"?`${e}`:e;const s=qa.content;if(r==="svg"||r==="mathml"){const i=s.firstChild;for(;i.firstChild;)s.appendChild(i.firstChild);s.removeChild(i)}t.insertBefore(s,n)}return[a?a.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Vt="transition",Un="animation",In=Symbol("_vtc"),Yt=(e,{slots:t})=>u(of,ec(e),t);Yt.displayName="Transition";const Zi={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},Zf=Yt.props=ke({},Pi,Zi),ln=(e,t=[])=>{Z(e)?e.forEach(n=>n(...t)):e&&e(...t)},Ua=e=>e?Z(e)?e.some(t=>t.length>1):e.length>1:!1;function ec(e){const t={};for(const $ in e)$ in Zi||(t[$]=e[$]);if(e.css===!1)return t;const{name:n="v",type:r,duration:o,enterFromClass:l=`${n}-enter-from`,enterActiveClass:a=`${n}-enter-active`,enterToClass:s=`${n}-enter-to`,appearFromClass:i=l,appearActiveClass:c=a,appearToClass:d=s,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:h=`${n}-leave-to`}=e,v=e1(o),w=v&&v[0],E=v&&v[1],{onBeforeEnter:b,onEnter:T,onEnterCancelled:_,onLeave:k,onLeaveCancelled:V,onBeforeAppear:D=b,onAppear:P=T,onAppearCancelled:R=_}=t,G=($,ee,Te)=>{Bt($,ee?d:s),Bt($,ee?c:a),Te&&Te()},I=($,ee)=>{$._isLeaving=!1,Bt($,f),Bt($,h),Bt($,p),ee&&ee()},W=$=>(ee,Te)=>{const _e=$?P:T,K=()=>G(ee,$,Te);ln(_e,[ee,K]),Wa(()=>{Bt(ee,$?i:l),Ot(ee,$?d:s),Ua(_e)||Ga(ee,r,w,K)})};return ke(t,{onBeforeEnter($){ln(b,[$]),Ot($,l),Ot($,a)},onBeforeAppear($){ln(D,[$]),Ot($,i),Ot($,c)},onEnter:W(!1),onAppear:W(!0),onLeave($,ee){$._isLeaving=!0;const Te=()=>I($,ee);Ot($,f),Ot($,p),nc(),Wa(()=>{$._isLeaving&&(Bt($,f),Ot($,h),Ua(k)||Ga($,r,E,Te))}),ln(k,[$,Te])},onEnterCancelled($){G($,!1),ln(_,[$])},onAppearCancelled($){G($,!0),ln(R,[$])},onLeaveCancelled($){I($),ln(V,[$])}})}function e1(e){if(e==null)return null;if(me(e))return[Po(e.enter),Po(e.leave)];{const t=Po(e);return[t,t]}}function Po(e){return nd(e)}function Ot(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[In]||(e[In]=new Set)).add(t)}function Bt(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const n=e[In];n&&(n.delete(t),n.size||(e[In]=void 0))}function Wa(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let t1=0;function Ga(e,t,n,r){const o=e._endId=++t1,l=()=>{o===e._endId&&r()};if(n)return setTimeout(l,n);const{type:a,timeout:s,propCount:i}=tc(e,t);if(!a)return r();const c=a+"end";let d=0;const f=()=>{e.removeEventListener(c,p),l()},p=h=>{h.target===e&&++d>=i&&f()};setTimeout(()=>{d(n[v]||"").split(", "),o=r(`${Vt}Delay`),l=r(`${Vt}Duration`),a=Ka(o,l),s=r(`${Un}Delay`),i=r(`${Un}Duration`),c=Ka(s,i);let d=null,f=0,p=0;t===Vt?a>0&&(d=Vt,f=a,p=l.length):t===Un?c>0&&(d=Un,f=c,p=i.length):(f=Math.max(a,c),d=f>0?a>c?Vt:Un:null,p=d?d===Vt?l.length:i.length:0);const h=d===Vt&&/\b(transform|all)(,|$)/.test(r(`${Vt}Property`).toString());return{type:d,timeout:f,propCount:p,hasTransform:h}}function Ka(e,t){for(;e.lengthJa(n)+Ja(e[r])))}function Ja(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function nc(){return document.body.offsetHeight}function n1(e,t,n){const r=e[In];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Ya=Symbol("_vod"),r1=Symbol("_vsh"),o1=Symbol(""),l1=/(^|;)\s*display\s*:/;function a1(e,t,n){const r=e.style,o=xe(n);let l=!1;if(n&&!o){if(t)if(xe(t))for(const a of t.split(";")){const s=a.slice(0,a.indexOf(":")).trim();n[s]==null&&Kr(r,s,"")}else for(const a in t)n[a]==null&&Kr(r,a,"");for(const a in n)a==="display"&&(l=!0),Kr(r,a,n[a])}else if(o){if(t!==n){const a=r[o1];a&&(n+=";"+a),r.cssText=n,l=l1.test(n)}}else t&&e.removeAttribute("style");Ya in e&&(e[Ya]=l?r.display:"",e[r1]&&(r.display="none"))}const Qa=/\s*!important$/;function Kr(e,t,n){if(Z(n))n.forEach(r=>Kr(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=s1(e,t);Qa.test(n)?e.setProperty(Vn(r),n.replace(Qa,""),"important"):e[r]=n}}const Xa=["Webkit","Moz","ms"],xo={};function s1(e,t){const n=xo[t];if(n)return n;let r=st(t);if(r!=="filter"&&r in e)return xo[t]=r;r=yr(r);for(let o=0;oRo||(h1.then(()=>Ro=0),Ro=Date.now());function v1(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;at(g1(r,n.value),t,5,[r])};return n.value=e,n.attached=m1(),n}function g1(e,t){if(Z(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>o=>!o._stopped&&r&&r(o))}else return t}const ns=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,_1=(e,t,n,r,o,l,a,s,i)=>{const c=o==="svg";t==="class"?n1(e,r,c):t==="style"?a1(e,n,r):br(t)?Al(t)||f1(e,t,n,r,a):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):b1(e,t,r,c))?c1(e,t,r,l,a,s,i):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),i1(e,t,r,c))};function b1(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&ns(t)&&re(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const o=e.tagName;if(o==="IMG"||o==="VIDEO"||o==="CANVAS"||o==="SOURCE")return!1}return ns(t)&&xe(n)?!1:t in e}const rc=new WeakMap,oc=new WeakMap,ro=Symbol("_moveCb"),rs=Symbol("_enterCb"),lc={name:"TransitionGroup",props:ke({},Zf,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=Nn(),r=Oi();let o,l;return Ii(()=>{if(!o.length)return;const a=e.moveClass||`${e.name||"v"}-move`;if(!A1(o[0].el,n.vnode.el,a))return;o.forEach(w1),o.forEach(T1);const s=o.filter(C1);nc(),s.forEach(i=>{const c=i.el,d=c.style;Ot(c,a),d.transform=d.webkitTransform=d.transitionDuration="";const f=c[ro]=p=>{p&&p.target!==c||(!p||/transform$/.test(p.propertyName))&&(c.removeEventListener("transitionend",f),c[ro]=null,Bt(c,a))};c.addEventListener("transitionend",f)})}),()=>{const a=ce(e),s=ec(a);let i=a.tag||Ye;if(o=[],l)for(let c=0;cdelete e.mode;lc.props;const E1=lc;function w1(e){const t=e.el;t[ro]&&t[ro](),t[rs]&&t[rs]()}function T1(e){oc.set(e,e.el.getBoundingClientRect())}function C1(e){const t=rc.get(e),n=oc.get(e),r=t.left-n.left,o=t.top-n.top;if(r||o){const l=e.el.style;return l.transform=l.webkitTransform=`translate(${r}px,${o}px)`,l.transitionDuration="0s",e}}function A1(e,t,n){const r=e.cloneNode(),o=e[In];o&&o.forEach(s=>{s.split(/\s+/).forEach(i=>i&&r.classList.remove(i))}),n.split(/\s+/).forEach(s=>s&&r.classList.add(s)),r.style.display="none";const l=t.nodeType===1?t:t.parentNode;l.appendChild(r);const{hasTransform:a}=tc(r);return l.removeChild(r),a}const k1=ke({patchProp:_1},Xf);let Io,os=!1;function L1(){return Io=os?Io:xf(k1),os=!0,Io}const S1=(...e)=>{const t=L1().createApp(...e),{mount:n}=t;return t.mount=r=>{const o=P1(r);if(o)return n(o,!0,O1(o))},t};function O1(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function P1(e){return xe(e)?document.querySelector(e):e}var kr=e=>/^[a-z][a-z0-9+.-]*:/.test(e)||e.startsWith("//"),x1=/.md((\?|#).*)?$/,Wl=(e,t="/")=>kr(e)||e.startsWith("/")&&!e.startsWith(t)&&!x1.test(e),Lr=e=>/^(https?:)?\/\//.test(e),ls=e=>{if(!e||e.endsWith("/"))return e;let t=e.replace(/(^|\/)README.md$/i,"$1index.html");return t.endsWith(".md")?t=t.substring(0,t.length-3)+".html":t.endsWith(".html")||(t=t+".html"),t.endsWith("/index.html")&&(t=t.substring(0,t.length-10)),t},R1="http://.",I1=(e,t)=>{if(!e.startsWith("/")&&t){const n=t.slice(0,t.lastIndexOf("/"));return ls(new URL(`${n}/${e}`,R1).pathname)}return ls(e)},D1=(e,t)=>{const n=Object.keys(e).sort((r,o)=>{const l=o.split("/").length-r.split("/").length;return l!==0?l:o.length-r.length});for(const r of n)if(t.startsWith(r))return r;return"/"},$1=/(#|\?)/,ac=e=>{const[t,...n]=e.split($1);return{pathname:t,hashAndQueries:n.join("")}},M1=["link","meta","script","style","noscript","template"],V1=["title","base"],j1=([e,t,n])=>V1.includes(e)?e:M1.includes(e)?e==="meta"&&t.name?`${e}.${t.name}`:e==="template"&&t.id?`${e}.${t.id}`:JSON.stringify([e,Object.entries(t).map(([r,o])=>typeof o=="boolean"?o?[r,""]:null:[r,o]).filter(r=>r!=null).sort(([r],[o])=>r.localeCompare(o)),n]):null,N1=e=>{const t=new Set,n=[];return e.forEach(r=>{const o=j1(r);o&&!t.has(o)&&(t.add(o),n.push(r))}),n},B1=e=>e[0]==="/"?e:`/${e}`,sc=e=>e[e.length-1]==="/"||e.endsWith(".html")?e:`${e}/`,Gl=e=>e[e.length-1]==="/"?e.slice(0,-1):e,ic=e=>e[0]==="/"?e.slice(1):e,H1=e=>typeof e=="function",Bn=e=>Object.prototype.toString.call(e)==="[object Object]",Ae=e=>typeof e=="string";const F1="modulepreload",z1=function(e){return"/"+e},as={},y=function(t,n,r){let o=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const l=document.querySelector("meta[property=csp-nonce]"),a=(l==null?void 0:l.nonce)||(l==null?void 0:l.getAttribute("nonce"));o=Promise.all(n.map(s=>{if(s=z1(s),s in as)return;as[s]=!0;const i=s.endsWith(".css"),c=i?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${s}"]${c}`))return;const d=document.createElement("link");if(d.rel=i?"stylesheet":F1,i||(d.as="script",d.crossOrigin=""),d.href=s,a&&d.setAttribute("nonce",a),document.head.appendChild(d),i)return new Promise((f,p)=>{d.addEventListener("load",f),d.addEventListener("error",()=>p(new Error(`Unable to preload CSS for ${s}`)))})}))}return o.then(()=>t()).catch(l=>{const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=l,window.dispatchEvent(a),!a.defaultPrevented)throw l})},q1=JSON.parse('{"/dump/knowledge/==%E5%92%8C===.html":"/dump/knowledge/%E5%92%8C___.html"}'),U1=Object.fromEntries([["/",{loader:()=>y(()=>import("./index.html-Brn939rB.js"),__vite__mapDeps([0,1])),meta:{t:"项目主页",i:"home"}}],["/article/",{loader:()=>y(()=>import("./index.html-Eo1iEqhj.js"),__vite__mapDeps([2,1])),meta:{t:"专栏",i:"fa-solid fa-newspaper"}}],["/article/android-compose-toggle-theme.html",{loader:()=>y(()=>import("./android-compose-toggle-theme.html-Brs5hZ4b.js"),__vite__mapDeps([3,1])),meta:{t:"Android Compose 切换应用主题"}}],["/article/app-deployment-evolution.html",{loader:()=>y(()=>import("./app-deployment-evolution.html-B1ZbtAoX.js"),__vite__mapDeps([4,1])),meta:{t:"应用部署的演变"}}],["/article/cross-domain.html",{loader:()=>y(()=>import("./cross-domain.html-Dq4Ypu1w.js"),__vite__mapDeps([5,1])),meta:{t:"跨域问题"}}],["/article/debounce-throttle.html",{loader:()=>y(()=>import("./debounce-throttle.html-Dfl2Vj7I.js"),__vite__mapDeps([6,1])),meta:{t:"防抖和节流"}}],["/article/history-of-javascript.html",{loader:()=>y(()=>import("./history-of-javascript.html-DCfoyA9S.js"),__vite__mapDeps([7,1])),meta:{t:"JavaScript的发展史"}}],["/article/make-npm-lib.html",{loader:()=>y(()=>import("./make-npm-lib.html-BaLa_mBq.js"),__vite__mapDeps([8,1])),meta:{t:"制作 npm 第三方库"}}],["/article/sftp-usage.html",{loader:()=>y(()=>import("./sftp-usage.html-CO07ahcX.js"),__vite__mapDeps([9,1])),meta:{t:"sftp 使用指南"}}],["/design-pattern/",{loader:()=>y(()=>import("./index.html-DNtUiDEP.js"),__vite__mapDeps([10,1])),meta:{t:"设计模式",i:"fa-solid fa-compass-drafting"}}],["/develop/",{loader:()=>y(()=>import("./index.html-CTwfMSoe.js"),__vite__mapDeps([11,1])),meta:{t:"开发",i:"fa-solid fa-code"}}],["/dump/js-full-stack.html",{loader:()=>y(()=>import("./js-full-stack.html-D_YQ3YVv.js"),__vite__mapDeps([12,1])),meta:{t:"JS全栈技能树"}}],["/reading/",{loader:()=>y(()=>import("./index.html-DGnA2D96.js"),__vite__mapDeps([13,1])),meta:{t:"读书摘记",i:"fa-solid fa-book"}}],["/design-pattern/behavioral/",{loader:()=>y(()=>import("./index.html-BIXYqJe2.js"),__vite__mapDeps([14,1])),meta:{t:"行为模式"}}],["/design-pattern/behavioral/chain-of-responsibility.html",{loader:()=>y(()=>import("./chain-of-responsibility.html-0BcdiADK.js"),__vite__mapDeps([15,1])),meta:{t:"责任链模式"}}],["/design-pattern/behavioral/command.html",{loader:()=>y(()=>import("./command.html-zpn787bM.js"),__vite__mapDeps([16,1])),meta:{t:"命令模式"}}],["/design-pattern/behavioral/iterator.html",{loader:()=>y(()=>import("./iterator.html-CckuVqGa.js"),__vite__mapDeps([17,1])),meta:{t:"迭代器模式"}}],["/design-pattern/behavioral/mediator.html",{loader:()=>y(()=>import("./mediator.html-CGoyAa8j.js"),__vite__mapDeps([18,1])),meta:{t:"中介者模式"}}],["/design-pattern/behavioral/memento.html",{loader:()=>y(()=>import("./memento.html-CLlR2vRm.js"),__vite__mapDeps([19,1])),meta:{t:"备忘录模式"}}],["/design-pattern/behavioral/observer.html",{loader:()=>y(()=>import("./observer.html-9_C195L8.js"),__vite__mapDeps([20,1])),meta:{t:"观察者模式"}}],["/design-pattern/behavioral/state.html",{loader:()=>y(()=>import("./state.html-cuYqQBsU.js"),__vite__mapDeps([21,1])),meta:{t:"状态模式"}}],["/design-pattern/behavioral/strategy.html",{loader:()=>y(()=>import("./strategy.html-DLA0XV4y.js"),__vite__mapDeps([22,1])),meta:{t:"策略模式"}}],["/design-pattern/behavioral/template-method.html",{loader:()=>y(()=>import("./template-method.html-ButBn21i.js"),__vite__mapDeps([23,1])),meta:{t:"模板方法模式"}}],["/design-pattern/behavioral/visitor.html",{loader:()=>y(()=>import("./visitor.html-DtkMbRgK.js"),__vite__mapDeps([24,1])),meta:{t:"访问者模式"}}],["/design-pattern/creational/",{loader:()=>y(()=>import("./index.html-yPCDSSRB.js"),__vite__mapDeps([25,1])),meta:{t:"创建型模式"}}],["/design-pattern/creational/abstract-factory.html",{loader:()=>y(()=>import("./abstract-factory.html-Wu5LLP-V.js"),__vite__mapDeps([26,1])),meta:{t:"抽象工厂模式",O:2}}],["/design-pattern/creational/builder.html",{loader:()=>y(()=>import("./builder.html-6l2usi86.js"),__vite__mapDeps([27,1])),meta:{t:"建造者模式",O:3}}],["/design-pattern/creational/factory-method.html",{loader:()=>y(()=>import("./factory-method.html-DzmDLQ0_.js"),__vite__mapDeps([28,1])),meta:{t:"工厂方法模式",O:1}}],["/design-pattern/creational/prototype.html",{loader:()=>y(()=>import("./prototype.html-8ajIxDam.js"),__vite__mapDeps([29,1])),meta:{t:"原型模式",O:4}}],["/design-pattern/creational/singleton.html",{loader:()=>y(()=>import("./singleton.html-B1y_iO-_.js"),__vite__mapDeps([30,1])),meta:{t:"单例模式",O:5}}],["/design-pattern/structural/",{loader:()=>y(()=>import("./index.html-W6zBPAHf.js"),__vite__mapDeps([31,1])),meta:{t:"结构型模式"}}],["/design-pattern/structural/adapter.html",{loader:()=>y(()=>import("./adapter.html-DjsE011W.js"),__vite__mapDeps([32,1])),meta:{t:"适配器模式"}}],["/design-pattern/structural/bridge.html",{loader:()=>y(()=>import("./bridge.html-VXpPTkm3.js"),__vite__mapDeps([33,1])),meta:{t:"桥接模式"}}],["/design-pattern/structural/composite.html",{loader:()=>y(()=>import("./composite.html-Bw9sukCu.js"),__vite__mapDeps([34,1])),meta:{t:"组合模式"}}],["/design-pattern/structural/decorator.html",{loader:()=>y(()=>import("./decorator.html-DOJkfU3t.js"),__vite__mapDeps([35,1])),meta:{t:"装饰模式"}}],["/design-pattern/structural/facade.html",{loader:()=>y(()=>import("./facade.html-ByUeF5P7.js"),__vite__mapDeps([36,1])),meta:{t:"外观模式"}}],["/design-pattern/structural/flyweight.html",{loader:()=>y(()=>import("./flyweight.html-DhgRwv1u.js"),__vite__mapDeps([37,1])),meta:{t:"享元模式"}}],["/design-pattern/structural/proxy.html",{loader:()=>y(()=>import("./proxy.html-D5hZb8Uf.js"),__vite__mapDeps([38,1])),meta:{t:"代理模式"}}],["/develop/android/",{loader:()=>y(()=>import("./index.html-ByYI5bBM.js"),__vite__mapDeps([39,1])),meta:{t:"Android",i:"fa-brands fa-android"}}],["/develop/android/adb-wireless-debug.html",{loader:()=>y(()=>import("./adb-wireless-debug.html-BaIOZTa9.js"),__vite__mapDeps([40,1])),meta:{t:"ADB无线调试"}}],["/develop/angular/",{loader:()=>y(()=>import("./index.html-vqqXZDmF.js"),__vite__mapDeps([41,1])),meta:{t:"Angular",i:"fa-brands fa-angular"}}],["/develop/angular/angular-i18n.html",{loader:()=>y(()=>import("./angular-i18n.html-96EcSr1B.js"),__vite__mapDeps([42,1])),meta:{t:"多国语系设置"}}],["/develop/angular/azure-login.html",{loader:()=>y(()=>import("./azure-login.html-C2WjpbXp.js"),__vite__mapDeps([43,1])),meta:{t:"接入Azure AD登录"}}],["/develop/angular/components-share-data.html",{loader:()=>y(()=>import("./components-share-data.html-DEHhkM7l.js"),__vite__mapDeps([44,1])),meta:{t:"组件间共享数据"}}],["/develop/angular/karma-config.html",{loader:()=>y(()=>import("./karma-config.html-DdxmtQ3K.js"),__vite__mapDeps([45,1])),meta:{t:"karma测试工具配置"}}],["/develop/database/",{loader:()=>y(()=>import("./index.html-BKlFuXNy.js"),__vite__mapDeps([46,1])),meta:{t:"Database",i:"fa-solid fa-database"}}],["/develop/database/transaction-isolation-level.html",{loader:()=>y(()=>import("./transaction-isolation-level.html-AnQn_T2L.js"),__vite__mapDeps([47,1])),meta:{t:"事务隔离级别"}}],["/develop/git/",{loader:()=>y(()=>import("./index.html-Bq3aqi-a.js"),__vite__mapDeps([48,1])),meta:{t:"Git",i:"fa-brands fa-git-alt"}}],["/develop/git/git-installation.html",{loader:()=>y(()=>import("./git-installation.html-Ct9_nJiT.js"),__vite__mapDeps([49,1])),meta:{t:"Git 初始化",O:1}}],["/develop/git/git-tag.html",{loader:()=>y(()=>import("./git-tag.html-Bc8xXnd-.js"),__vite__mapDeps([50,1])),meta:{t:"Git 标签",O:3}}],["/develop/git/git-use.html",{loader:()=>y(()=>import("./git-use.html-BvmFr3U4.js"),__vite__mapDeps([51,1])),meta:{t:"Git 基本操作",O:2}}],["/develop/html/",{loader:()=>y(()=>import("./index.html-IZCWuNPl.js"),__vite__mapDeps([52,1])),meta:{t:"Html&CSS",i:"fa-brands fa-html5"}}],["/develop/html/classical-layout.html",{loader:()=>y(()=>import("./classical-layout.html-DsIh35a_.js"),__vite__mapDeps([53,1])),meta:{t:"经典布局"}}],["/develop/html/flex-layout.html",{loader:()=>y(()=>import("./flex-layout.html-Z9RzFOgN.js"),__vite__mapDeps([54,1])),meta:{t:"Flex 布局"}}],["/develop/html/grid-layout.html",{loader:()=>y(()=>import("./grid-layout.html-OjUOD_yh.js"),__vite__mapDeps([55,1])),meta:{t:"Grid 布局"}}],["/develop/nestjs/",{loader:()=>y(()=>import("./index.html-DrsyYefh.js"),__vite__mapDeps([56,1])),meta:{t:"NestJS",i:"iconfont icon-gxcnestjs"}}],["/develop/python/",{loader:()=>y(()=>import("./index.html-C6gjscMY.js"),__vite__mapDeps([57,1])),meta:{t:"Python",i:"fa-brands fa-python"}}],["/develop/react/",{loader:()=>y(()=>import("./index.html-DRk4K6B0.js"),__vite__mapDeps([58,1])),meta:{t:"React",i:"fa-brands fa-react"}}],["/develop/react/usage-of-state.html",{loader:()=>y(()=>import("./usage-of-state.html-CcyfTEP_.js"),__vite__mapDeps([59,1])),meta:{t:"state 的用法"}}],["/develop/test/",{loader:()=>y(()=>import("./index.html-jUfzWAal.js"),__vite__mapDeps([60,1])),meta:{t:"Test",i:"fa-solid fa-vials"}}],["/develop/test/test-coverage-example.html",{loader:()=>y(()=>import("./test-coverage-example.html-DgO5999B.js"),__vite__mapDeps([61,1])),meta:{t:"Test Coverage Example"}}],["/develop/typescript/",{loader:()=>y(()=>import("./index.html-BM3l3NJU.js"),__vite__mapDeps([62,1])),meta:{t:"Typescript",i:"fa-brands fa-js-square"}}],["/develop/typescript/custom-decorator.html",{loader:()=>y(()=>import("./custom-decorator.html-Cdr2pDf7.js"),__vite__mapDeps([63,1])),meta:{t:"自定义装饰器"}}],["/develop/typescript/generic-function.html",{loader:()=>y(()=>import("./generic-function.html-BSF7rs36.js"),__vite__mapDeps([64,1])),meta:{t:"TS 中的泛型函数"}}],["/dump/algorithm/",{loader:()=>y(()=>import("./index.html-BTOqXWty.js"),__vite__mapDeps([65,1])),meta:{t:"算法",i:"fa-solid fa-trophy"}}],["/dump/algorithm/sort.html",{loader:()=>y(()=>import("./sort.html-DZfxn26Q.js"),__vite__mapDeps([66,1])),meta:{t:"排序算法",I:!1}}],["/dump/cloud-native/",{loader:()=>y(()=>import("./index.html-C6v0fv_i.js"),__vite__mapDeps([67,1])),meta:{t:"云原生",i:"fa-solid fa-cloud"}}],["/dump/en/",{loader:()=>y(()=>import("./index.html-CLCzT4cm.js"),__vite__mapDeps([68,1])),meta:{t:"HomePage",i:"home"}}],["/dump/knowledge/%E5%92%8C___.html",{loader:()=>y(()=>import("./和___.html-BqWbjAWt.js"),__vite__mapDeps([69,1])),meta:{t:"==和==="}}],["/dump/knowledge/GET%E5%92%8CPOST.html",{loader:()=>y(()=>import("./GET和POST.html-BPLasswN.js"),__vite__mapDeps([70,1])),meta:{t:"GET和POST"}}],["/dump/knowledge/HTTP%E5%92%8CHTTPS.html",{loader:()=>y(()=>import("./HTTP和HTTPS.html-CYv0fRc1.js"),__vite__mapDeps([71,1])),meta:{t:"HTTP和HTTPS"}}],["/dump/knowledge/JS%E6%95%B0%E5%AD%97%E7%B2%BE%E5%BA%A6%E4%B8%A2%E5%A4%B1%E9%97%AE%E9%A2%98.html",{loader:()=>y(()=>import("./JS数字精度丢失问题.html-BNq6k-BX.js"),__vite__mapDeps([72,1])),meta:{t:"JS数字精度丢失问题"}}],["/dump/knowledge/",{loader:()=>y(()=>import("./index.html-DstrKOuP.js"),__vite__mapDeps([73,1])),meta:{t:"知识点",i:"lightbulb"}}],["/dump/knowledge/apply%E3%80%81call%E3%80%81bind.html",{loader:()=>y(()=>import("./apply、call、bind.html-FjN1eK2s.js"),__vite__mapDeps([74,1])),meta:{t:"apply、call、bind"}}],["/dump/knowledge/arguments%E5%AF%B9%E8%B1%A1.html",{loader:()=>y(()=>import("./arguments对象.html-DbOI2hAS.js"),__vite__mapDeps([75,1])),meta:{t:"arguments对象"}}],["/dump/knowledge/px%E3%80%81em%E3%80%81rem%E3%80%81vh%E3%80%81vw.html",{loader:()=>y(()=>import("./px、em、rem、vh、vw.html-DPhcOAED.js"),__vite__mapDeps([76,1])),meta:{t:"px、em、rem、vh、vw"}}],["/dump/knowledge/state%E5%92%8Cprops.html",{loader:()=>y(()=>import("./state和props.html-CYD9ymzQ.js"),__vite__mapDeps([77,1])),meta:{t:"state和props"}}],["/dump/knowledge/this%E5%AF%B9%E8%B1%A1.html",{loader:()=>y(()=>import("./this对象.html-DnU7gRt8.js"),__vite__mapDeps([78,1])),meta:{t:"this对象"}}],["/dump/knowledge/typeof%E5%92%8Cinstanceof.html",{loader:()=>y(()=>import("./typeof和instanceof.html-CQtQooo5.js"),__vite__mapDeps([79,1])),meta:{t:"typeof和instanceof"}}],["/dump/knowledge/var%E3%80%81let%E3%80%81const.html",{loader:()=>y(()=>import("./var、let、const.html-DvA3jqBm.js"),__vite__mapDeps([80,1])),meta:{t:"var、let、const"}}],["/dump/knowledge/%E4%BB%80%E4%B9%88%E6%98%AFJavaScript.html",{loader:()=>y(()=>import("./什么是JavaScript.html-CwIdVKGi.js"),__vite__mapDeps([81,1])),meta:{t:"什么是JavaScript"}}],["/dump/knowledge/%E4%BD%9C%E7%94%A8%E5%9F%9F.html",{loader:()=>y(()=>import("./作用域.html-CHCt_X4Y.js"),__vite__mapDeps([82,1])),meta:{t:"作用域"}}],["/dump/knowledge/%E5%87%BD%E6%95%B0%E6%9F%AF%E9%87%8C%E5%8C%96.html",{loader:()=>y(()=>import("./函数柯里化.html-CniUOAZ3.js"),__vite__mapDeps([83,1])),meta:{t:"函数柯里化"}}],["/dump/knowledge/%E5%89%A9%E4%BD%99%E5%8F%82%E6%95%B0.html",{loader:()=>y(()=>import("./剩余参数.html-DjmiH_jD.js"),__vite__mapDeps([84,1])),meta:{t:"剩余参数"}}],["/dump/knowledge/%E5%93%88%E5%B8%8C%E8%B7%AF%E7%94%B1%E5%92%8CHistory%E8%B7%AF%E7%94%B1.html",{loader:()=>y(()=>import("./哈希路由和History路由.html-DJjWAC2X.js"),__vite__mapDeps([85,1])),meta:{t:"哈希路由和History路由"}}],["/dump/knowledge/%E6%B7%B1%E6%8B%B7%E8%B4%9D%E5%92%8C%E6%B5%85%E6%8B%B7%E8%B4%9D.html",{loader:()=>y(()=>import("./深拷贝和浅拷贝.html-DhcWyWfj.js"),__vite__mapDeps([86,1])),meta:{t:"深拷贝和浅拷贝"}}],["/dump/knowledge/%E7%AE%AD%E5%A4%B4%E5%87%BD%E6%95%B0.html",{loader:()=>y(()=>import("./箭头函数.html-Cu5dB0ds.js"),__vite__mapDeps([87,1])),meta:{t:"箭头函数"}}],["/dump/knowledge/%E9%97%AD%E5%8C%85.html",{loader:()=>y(()=>import("./闭包.html-128NLDXX.js"),__vite__mapDeps([88,1])),meta:{t:"闭包"}}],["/dump/projects/",{loader:()=>y(()=>import("./index.html-BtHx2QpR.js"),__vite__mapDeps([89,1])),meta:{t:"项目文档",i:"fa-solid fa-file-code"}}],["/dump/software-engineering/",{loader:()=>y(()=>import("./index.html-Bm0ydy6q.js"),__vite__mapDeps([90,1])),meta:{t:"软件工程",i:"fa-solid fa-diagram-project"}}],["/reading/2022/human-weakness.html",{loader:()=>y(()=>import("./human-weakness.html-CX1gm9vJ.js"),__vite__mapDeps([91,1])),meta:{t:"人性的弱点"}}],["/reading/2022/nonviolent-communication.html",{loader:()=>y(()=>import("./nonviolent-communication.html-B53Ryvo4.js"),__vite__mapDeps([92,1])),meta:{t:"非暴力沟通"}}],["/reading/2023/001-self-control.html",{loader:()=>y(()=>import("./001-self-control.html-rHldA_Mg.js"),__vite__mapDeps([93,1])),meta:{t:"自控力"}}],["/reading/2023/002-the-great-gatsby.html",{loader:()=>y(()=>import("./002-the-great-gatsby.html-P4drTvUC.js"),__vite__mapDeps([94,1])),meta:{t:"了不起的盖茨比"}}],["/reading/2023/003-intimate-relationship.html",{loader:()=>y(()=>import("./003-intimate-relationship.html-DjQFKM8p.js"),__vite__mapDeps([95,1])),meta:{t:"亲密关系"}}],["/reading/2023/004-the-courage-to-be-hated.html",{loader:()=>y(()=>import("./004-the-courage-to-be-hated.html-C3nKxC1V.js"),__vite__mapDeps([96,1])),meta:{t:"被讨厌的勇气"}}],["/reading/2023/005-devilish-chatting-techniques.html",{loader:()=>y(()=>import("./005-devilish-chatting-techniques.html-BQgV7FQe.js"),__vite__mapDeps([97,1])),meta:{t:"魔鬼聊天术"}}],["/reading/2023/006-lean-entrepreneurial-practice.html",{loader:()=>y(()=>import("./006-lean-entrepreneurial-practice.html-DxZ4DEfK.js"),__vite__mapDeps([98,1])),meta:{t:"精益创业实战"}}],["/reading/2023/007-island-economics.html",{loader:()=>y(()=>import("./007-island-economics.html-BQdhw1NV.js"),__vite__mapDeps([99,1])),meta:{t:"小岛经济学"}}],["/reading/2023/008-micro-habits-slimming.html",{loader:()=>y(()=>import("./008-micro-habits-slimming.html-DC76RlLZ.js"),__vite__mapDeps([100,1])),meta:{t:"微习惯 · 瘦身篇"}}],["/reading/2023/009-introverts-communicate-the-bible.html",{loader:()=>y(()=>import("./009-introverts-communicate-the-bible.html-DyEf-zfw.js"),__vite__mapDeps([101,1])),meta:{t:"内向者沟通圣经"}}],["/reading/2023/010-%E5%B0%8F%E7%8E%8B%E5%AD%90.html",{loader:()=>y(()=>import("./010-小王子.html-DpF9cDJi.js"),__vite__mapDeps([102,1])),meta:{t:"《小王子》"}}],["/reading/2023/011-rockefeller-letters.html",{loader:()=>y(()=>import("./011-rockefeller-letters.html-xT3XBJEQ.js"),__vite__mapDeps([103,1])),meta:{t:"洛克菲勒家书"}}],["/reading/2023/012-autobiography-of-franklin.html",{loader:()=>y(()=>import("./012-autobiography-of-franklin.html-D2HqNmSa.js"),__vite__mapDeps([104,1])),meta:{t:"富兰克林自传"}}],["/reading/2023/013-secret.html",{loader:()=>y(()=>import("./013-secret.html-DrWH3UIQ.js"),__vite__mapDeps([105,1])),meta:{t:"秘密: 爱、健康与金钱"}}],["/reading/2023/014-quotations-from-kazuo-inamori.html",{loader:()=>y(()=>import("./014-quotations-from-kazuo-inamori.html-DtQ7fJCV.js"),__vite__mapDeps([106,1])),meta:{t:"稻盛和夫语录 100 条"}}],["/reading/2023/015-entertain-oneself-to-death.html",{loader:()=>y(()=>import("./015-entertain-oneself-to-death.html-25tPWoFC.js"),__vite__mapDeps([107,1])),meta:{t:"娱乐至死"}}],["/reading/2023/016-changed-my-life-by-learning-english.html",{loader:()=>y(()=>import("./016-changed-my-life-by-learning-english.html-N66A6BX3.js"),__vite__mapDeps([108,1])),meta:{t:"我在 100 天内自学英语翻转人生"}}],["/reading/2023/017-biblical-wisdom.html",{loader:()=>y(()=>import("./017-biblical-wisdom.html-B5CHtaoM.js"),__vite__mapDeps([109,1])),meta:{t:"圣经的智慧"}}],["/reading/2023/018-desire-and-dignity.html",{loader:()=>y(()=>import("./018-desire-and-dignity.html-UmwJOa0K.js"),__vite__mapDeps([110,1])),meta:{t:"欲望与尊严:转型期中国的阶层、性别与亲密关系"}}],["/reading/2023/019-rural-china.html",{loader:()=>y(()=>import("./019-rural-china.html-D_D8w-vu.js"),__vite__mapDeps([111,1])),meta:{t:"乡土中国"}}],["/reading/2023/021-addicted.html",{loader:()=>y(()=>import("./021-addicted.html-D8v-7oR9.js"),__vite__mapDeps([112,1])),meta:{t:"上瘾:让用户养成使用习惯的四大产品逻辑"}}],["/reading/2023/022-excellent-sheep.html",{loader:()=>y(()=>import("./022-excellent-sheep.html-DseGRHOf.js"),__vite__mapDeps([113,1])),meta:{t:"优秀的绵羊"}}],["/reading/2024/001-pyramid-principle.html",{loader:()=>y(()=>import("./001-pyramid-principle.html-BFmEMeNM.js"),__vite__mapDeps([114,1])),meta:{t:"金字塔原理"}}],["/reading/2024/002-those-ming-dynasty-things.html",{loader:()=>y(()=>import("./002-those-ming-dynasty-things.html-Dom19Hpy.js"),__vite__mapDeps([115,1])),meta:{t:"明朝那些事儿(1-7)"}}],["/reading/2024/003-naval.html",{loader:()=>y(()=>import("./003-naval.html-D-e1jHRy.js"),__vite__mapDeps([116,1])),meta:{t:"纳瓦尔宝典"}}],["/reading/2024/004-xiaomi-entrepreneurial-thinking.html",{loader:()=>y(()=>import("./004-xiaomi-entrepreneurial-thinking.html-5OdYnxWt.js"),__vite__mapDeps([117,1])),meta:{t:"小米创业思考"}}],["/reading/2024/005-small-and-beautiful.html",{loader:()=>y(()=>import("./005-small-and-beautiful.html-BguQ-TEF.js"),__vite__mapDeps([118,1])),meta:{t:"小而美: 持续盈利的经营法则"}}],["/dump/algorithm/sort/",{loader:()=>y(()=>import("./index.html-bJIw4wiH.js"),__vite__mapDeps([119,1])),meta:{t:"排序算法"}}],["/dump/algorithm/sort/selection-sort.html",{loader:()=>y(()=>import("./selection-sort.html-VEta-KXx.js"),__vite__mapDeps([120,1])),meta:{t:"选择排序"}}],["/dump/cloud-native/argocd/",{loader:()=>y(()=>import("./index.html-BKb90yGU.js"),__vite__mapDeps([121,1])),meta:{t:"argocd",i:"fa-brands fa-octopus-deploy"}}],["/dump/cloud-native/argocd/argocd.html",{loader:()=>y(()=>import("./argocd.html-pQvbjtMj.js"),__vite__mapDeps([122,1])),meta:{t:"部署 Argocd"}}],["/dump/cloud-native/docker/",{loader:()=>y(()=>import("./index.html-DJHLZ2ri.js"),__vite__mapDeps([123,1])),meta:{t:"docker",i:"fa-brands fa-docker"}}],["/dump/cloud-native/docker/docker-architecture.html",{loader:()=>y(()=>import("./docker-architecture.html-DAdK6H_Q.js"),__vite__mapDeps([124,1])),meta:{t:"docker 架构",O:1}}],["/dump/cloud-native/docker/docker-image-build.html",{loader:()=>y(()=>import("./docker-image-build.html-CZwg1zYd.js"),__vite__mapDeps([125,1])),meta:{t:"docker 镜像构建",O:5}}],["/dump/cloud-native/docker/docker-image-structure.html",{loader:()=>y(()=>import("./docker-image-structure.html-Bq9JKLEi.js"),__vite__mapDeps([126,1])),meta:{t:"docker 镜像结构",O:4}}],["/dump/cloud-native/docker/docker-installation.html",{loader:()=>y(()=>import("./docker-installation.html-BBjEo4iD.js"),__vite__mapDeps([127,1])),meta:{t:"docker 安装",O:2}}],["/dump/cloud-native/docker/docker-use.html",{loader:()=>y(()=>import("./docker-use.html-B0lD3A5V.js"),__vite__mapDeps([128,1])),meta:{t:"docker 基本用法",O:3}}],["/dump/cloud-native/kubernetes/",{loader:()=>y(()=>import("./index.html-CjOsnn8U.js"),__vite__mapDeps([129,1])),meta:{t:"kubernetes",i:"fa-solid fa-dharmachakra"}}],["/dump/cloud-native/kubernetes/k8s-release-strategy.html",{loader:()=>y(()=>import("./k8s-release-strategy.html-DbJ1H0-h.js"),__vite__mapDeps([130,1])),meta:{t:"K8S应用发布策略"}}],["/dump/cloud-native/kubernetes/sealed-secrets-client-side.html",{loader:()=>y(()=>import("./sealed-secrets-client-side.html-BD2OyOLa.js"),__vite__mapDeps([131,1])),meta:{t:"Sealed Secrets - Client Side"}}],["/dump/en/algorithm/",{loader:()=>y(()=>import("./index.html-BDg5NsVa.js"),__vite__mapDeps([132,1])),meta:{t:"algorithm",i:"fa-solid fa-trophy"}}],["/dump/en/algorithm/sort.html",{loader:()=>y(()=>import("./sort.html-CFiSWZCM.js"),__vite__mapDeps([133,1])),meta:{t:"排序算法",I:!1}}],["/dump/en/projects/",{loader:()=>y(()=>import("./index.html-DDe17mRU.js"),__vite__mapDeps([134,1])),meta:{t:"Projects",i:"fa-solid fa-file-code"}}],["/dump/projects/SKIP-Docs/",{loader:()=>y(()=>import("./index.html-mlTZ9KWn.js"),__vite__mapDeps([135,136,1])),meta:{t:"SKIP 项目文档"}}],["/dump/projects/SKIP-Docs/contribute.html",{loader:()=>y(()=>import("./contribute.html-n4axwz4J.js"),__vite__mapDeps([137,138,1])),meta:{t:"贡献指南参考",O:3}}],["/dump/projects/SKIP-Docs/how-to-use.html",{loader:()=>y(()=>import("./how-to-use.html-yvK2kVAf.js"),__vite__mapDeps([139,140,1])),meta:{t:"使用方法介绍",O:1}}],["/dump/projects/SKIP-Docs/xiaomi.html",{loader:()=>y(()=>import("./xiaomi.html-DhVwP4Aw.js"),__vite__mapDeps([141,142,1])),meta:{t:"小米后台保活",O:2}}],["/dump/projects/TinyCRUD-Docs/",{loader:()=>y(()=>import("./index.html-Cn0-1OB3.js"),__vite__mapDeps([143,144,1])),meta:{t:"TinyCRUD 项目文档"}}],["/dump/projects/TinyCRUD-Docs/contribution-guide.html",{loader:()=>y(()=>import("./contribution-guide.html-DFwkBPLx.js"),__vite__mapDeps([145,1])),meta:{t:"贡献指南",O:3}}],["/dump/projects/TinyCRUD-Docs/create-request.html",{loader:()=>y(()=>import("./create-request.html-DKjZdQP4.js"),__vite__mapDeps([146,1])),meta:{t:"创建请求",O:1}}],["/dump/projects/TinyCRUD-Docs/start-using.html",{loader:()=>y(()=>import("./start-using.html-BFC0yotD.js"),__vite__mapDeps([147,1])),meta:{t:"开始使用",O:2}}],["/dump/software-engineering/twelve-factor/001-codebase.html",{loader:()=>y(()=>import("./001-codebase.html-BenIOnKZ.js"),__vite__mapDeps([148,1])),meta:{t:"基准代码"}}],["/dump/software-engineering/twelve-factor/002-dependencies.html",{loader:()=>y(()=>import("./002-dependencies.html-CCTivZci.js"),__vite__mapDeps([149,1])),meta:{t:"依赖"}}],["/dump/software-engineering/twelve-factor/003-config.html",{loader:()=>y(()=>import("./003-config.html-BODubnRc.js"),__vite__mapDeps([150,1])),meta:{t:"配置"}}],["/dump/software-engineering/twelve-factor/004-backing-services.html",{loader:()=>y(()=>import("./004-backing-services.html-BU9TVUpC.js"),__vite__mapDeps([151,1])),meta:{t:"后端服务"}}],["/dump/software-engineering/twelve-factor/005-build-release-run.html",{loader:()=>y(()=>import("./005-build-release-run.html-DXvVYxAI.js"),__vite__mapDeps([152,1])),meta:{t:"构建,发布,运行"}}],["/dump/software-engineering/twelve-factor/006-processes.html",{loader:()=>y(()=>import("./006-processes.html-PQNeUWrx.js"),__vite__mapDeps([153,1])),meta:{t:"进程"}}],["/dump/software-engineering/twelve-factor/007-port-binding.html",{loader:()=>y(()=>import("./007-port-binding.html-5zvAZ7Uu.js"),__vite__mapDeps([154,1])),meta:{t:"端口绑定"}}],["/dump/software-engineering/twelve-factor/008-concurrency.html",{loader:()=>y(()=>import("./008-concurrency.html-C9yJTBMF.js"),__vite__mapDeps([155,1])),meta:{t:"并发"}}],["/dump/software-engineering/twelve-factor/009-disposability.html",{loader:()=>y(()=>import("./009-disposability.html-YYnQkiDh.js"),__vite__mapDeps([156,1])),meta:{t:"易处理"}}],["/dump/software-engineering/twelve-factor/010-dev-prod-parity.html",{loader:()=>y(()=>import("./010-dev-prod-parity.html-6Dg87FXo.js"),__vite__mapDeps([157,1])),meta:{t:"开发环境与线上环境等价"}}],["/dump/software-engineering/twelve-factor/011-logs.html",{loader:()=>y(()=>import("./011-logs.html-DF3YswRh.js"),__vite__mapDeps([158,1])),meta:{t:"日志"}}],["/dump/software-engineering/twelve-factor/012-admin-processes.html",{loader:()=>y(()=>import("./012-admin-processes.html-BsVbs3RW.js"),__vite__mapDeps([159,1])),meta:{t:"管理进程"}}],["/dump/software-engineering/twelve-factor/",{loader:()=>y(()=>import("./index.html-BJd4c1Mt.js"),__vite__mapDeps([160,1])),meta:{t:"12 Factor APP"}}],["/dump/en/algorithm/sort/",{loader:()=>y(()=>import("./index.html-xC86tdB3.js"),__vite__mapDeps([161,1])),meta:{t:"Sorting Algorithm"}}],["/dump/en/algorithm/sort/selection-sort.html",{loader:()=>y(()=>import("./selection-sort.html--xn9tGKa.js"),__vite__mapDeps([162,1])),meta:{t:"Selection Sort"}}],["/dump/en/projects/SKIP-Docs/",{loader:()=>y(()=>import("./index.html-Dg-5FtzE.js"),__vite__mapDeps([163,136,1])),meta:{t:"SKIP Docs"}}],["/dump/en/projects/SKIP-Docs/contribute.html",{loader:()=>y(()=>import("./contribute.html-DStPuMz0.js"),__vite__mapDeps([164,138,1])),meta:{t:"Contribute",O:3}}],["/dump/en/projects/SKIP-Docs/how-to-use.html",{loader:()=>y(()=>import("./how-to-use.html-B2OjJnxe.js"),__vite__mapDeps([165,140,1])),meta:{t:"How to use",O:1}}],["/dump/en/projects/SKIP-Docs/xiaomi.html",{loader:()=>y(()=>import("./xiaomi.html-3MxuZCp2.js"),__vite__mapDeps([166,142,1])),meta:{t:"How to Keep Alive",O:2}}],["/dump/en/projects/TinyCRUD-Docs/",{loader:()=>y(()=>import("./index.html-CWHLjlxv.js"),__vite__mapDeps([167,144,1])),meta:{t:"TinyCRUD Docs"}}],["/dump/en/projects/TinyCRUD-Docs/contribution-guide.html",{loader:()=>y(()=>import("./contribution-guide.html-BkK6AUgX.js"),__vite__mapDeps([168,1])),meta:{t:"Contribution Guide",O:3}}],["/dump/en/projects/TinyCRUD-Docs/create-request.html",{loader:()=>y(()=>import("./create-request.html-B4nOTG3s.js"),__vite__mapDeps([169,1])),meta:{t:"Create Request",O:1}}],["/dump/en/projects/TinyCRUD-Docs/start-using.html",{loader:()=>y(()=>import("./start-using.html-CGP1tZkO.js"),__vite__mapDeps([170,1])),meta:{t:"Start Using",O:2}}],["/404.html",{loader:()=>y(()=>import("./404.html-CGRfCgAP.js"),__vite__mapDeps([171,1])),meta:{t:""}}],["/dump/",{loader:()=>y(()=>import("./index.html-BW3MSdrG.js"),__vite__mapDeps([172,1])),meta:{t:"Dump"}}],["/reading/2022/",{loader:()=>y(()=>import("./index.html-OBp4GXmd.js"),__vite__mapDeps([173,1])),meta:{t:"2022"}}],["/reading/2023/",{loader:()=>y(()=>import("./index.html-BYOuHqGL.js"),__vite__mapDeps([174,1])),meta:{t:"2023"}}],["/reading/2024/",{loader:()=>y(()=>import("./index.html-JunUIZOc.js"),__vite__mapDeps([175,1])),meta:{t:"2024"}}]]);/*!
+**/const Yf="http://www.w3.org/2000/svg",Qf="http://www.w3.org/1998/Math/MathML",qt=typeof document<"u"?document:null,qa=qt&&qt.createElement("template"),Xf={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const o=t==="svg"?qt.createElementNS(Yf,e):t==="mathml"?qt.createElementNS(Qf,e):qt.createElement(e,n?{is:n}:void 0);return e==="select"&&r&&r.multiple!=null&&o.setAttribute("multiple",r.multiple),o},createText:e=>qt.createTextNode(e),createComment:e=>qt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>qt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,o,l){const a=n?n.previousSibling:t.lastChild;if(o&&(o===l||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===l||!(o=o.nextSibling)););else{qa.innerHTML=r==="svg"?`${e}`:r==="mathml"?`${e}`:e;const s=qa.content;if(r==="svg"||r==="mathml"){const i=s.firstChild;for(;i.firstChild;)s.appendChild(i.firstChild);s.removeChild(i)}t.insertBefore(s,n)}return[a?a.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Vt="transition",Un="animation",In=Symbol("_vtc"),Yt=(e,{slots:t})=>u(of,ec(e),t);Yt.displayName="Transition";const Zi={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},Zf=Yt.props=ke({},Pi,Zi),ln=(e,t=[])=>{Z(e)?e.forEach(n=>n(...t)):e&&e(...t)},Ua=e=>e?Z(e)?e.some(t=>t.length>1):e.length>1:!1;function ec(e){const t={};for(const $ in e)$ in Zi||(t[$]=e[$]);if(e.css===!1)return t;const{name:n="v",type:r,duration:o,enterFromClass:l=`${n}-enter-from`,enterActiveClass:a=`${n}-enter-active`,enterToClass:s=`${n}-enter-to`,appearFromClass:i=l,appearActiveClass:c=a,appearToClass:d=s,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:h=`${n}-leave-to`}=e,v=e1(o),w=v&&v[0],E=v&&v[1],{onBeforeEnter:b,onEnter:T,onEnterCancelled:_,onLeave:k,onLeaveCancelled:V,onBeforeAppear:D=b,onAppear:P=T,onAppearCancelled:R=_}=t,G=($,ee,Te)=>{Bt($,ee?d:s),Bt($,ee?c:a),Te&&Te()},I=($,ee)=>{$._isLeaving=!1,Bt($,f),Bt($,h),Bt($,p),ee&&ee()},W=$=>(ee,Te)=>{const _e=$?P:T,K=()=>G(ee,$,Te);ln(_e,[ee,K]),Wa(()=>{Bt(ee,$?i:l),Ot(ee,$?d:s),Ua(_e)||Ga(ee,r,w,K)})};return ke(t,{onBeforeEnter($){ln(b,[$]),Ot($,l),Ot($,a)},onBeforeAppear($){ln(D,[$]),Ot($,i),Ot($,c)},onEnter:W(!1),onAppear:W(!0),onLeave($,ee){$._isLeaving=!0;const Te=()=>I($,ee);Ot($,f),Ot($,p),nc(),Wa(()=>{$._isLeaving&&(Bt($,f),Ot($,h),Ua(k)||Ga($,r,E,Te))}),ln(k,[$,Te])},onEnterCancelled($){G($,!1),ln(_,[$])},onAppearCancelled($){G($,!0),ln(R,[$])},onLeaveCancelled($){I($),ln(V,[$])}})}function e1(e){if(e==null)return null;if(me(e))return[Po(e.enter),Po(e.leave)];{const t=Po(e);return[t,t]}}function Po(e){return nd(e)}function Ot(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[In]||(e[In]=new Set)).add(t)}function Bt(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const n=e[In];n&&(n.delete(t),n.size||(e[In]=void 0))}function Wa(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let t1=0;function Ga(e,t,n,r){const o=e._endId=++t1,l=()=>{o===e._endId&&r()};if(n)return setTimeout(l,n);const{type:a,timeout:s,propCount:i}=tc(e,t);if(!a)return r();const c=a+"end";let d=0;const f=()=>{e.removeEventListener(c,p),l()},p=h=>{h.target===e&&++d>=i&&f()};setTimeout(()=>{d(n[v]||"").split(", "),o=r(`${Vt}Delay`),l=r(`${Vt}Duration`),a=Ka(o,l),s=r(`${Un}Delay`),i=r(`${Un}Duration`),c=Ka(s,i);let d=null,f=0,p=0;t===Vt?a>0&&(d=Vt,f=a,p=l.length):t===Un?c>0&&(d=Un,f=c,p=i.length):(f=Math.max(a,c),d=f>0?a>c?Vt:Un:null,p=d?d===Vt?l.length:i.length:0);const h=d===Vt&&/\b(transform|all)(,|$)/.test(r(`${Vt}Property`).toString());return{type:d,timeout:f,propCount:p,hasTransform:h}}function Ka(e,t){for(;e.lengthJa(n)+Ja(e[r])))}function Ja(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function nc(){return document.body.offsetHeight}function n1(e,t,n){const r=e[In];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Ya=Symbol("_vod"),r1=Symbol("_vsh"),o1=Symbol(""),l1=/(^|;)\s*display\s*:/;function a1(e,t,n){const r=e.style,o=xe(n);let l=!1;if(n&&!o){if(t)if(xe(t))for(const a of t.split(";")){const s=a.slice(0,a.indexOf(":")).trim();n[s]==null&&Kr(r,s,"")}else for(const a in t)n[a]==null&&Kr(r,a,"");for(const a in n)a==="display"&&(l=!0),Kr(r,a,n[a])}else if(o){if(t!==n){const a=r[o1];a&&(n+=";"+a),r.cssText=n,l=l1.test(n)}}else t&&e.removeAttribute("style");Ya in e&&(e[Ya]=l?r.display:"",e[r1]&&(r.display="none"))}const Qa=/\s*!important$/;function Kr(e,t,n){if(Z(n))n.forEach(r=>Kr(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=s1(e,t);Qa.test(n)?e.setProperty(Vn(r),n.replace(Qa,""),"important"):e[r]=n}}const Xa=["Webkit","Moz","ms"],xo={};function s1(e,t){const n=xo[t];if(n)return n;let r=st(t);if(r!=="filter"&&r in e)return xo[t]=r;r=yr(r);for(let o=0;oRo||(h1.then(()=>Ro=0),Ro=Date.now());function v1(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;at(g1(r,n.value),t,5,[r])};return n.value=e,n.attached=m1(),n}function g1(e,t){if(Z(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>o=>!o._stopped&&r&&r(o))}else return t}const ns=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,_1=(e,t,n,r,o,l,a,s,i)=>{const c=o==="svg";t==="class"?n1(e,r,c):t==="style"?a1(e,n,r):br(t)?Cl(t)||f1(e,t,n,r,a):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):b1(e,t,r,c))?c1(e,t,r,l,a,s,i):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),i1(e,t,r,c))};function b1(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&ns(t)&&re(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const o=e.tagName;if(o==="IMG"||o==="VIDEO"||o==="CANVAS"||o==="SOURCE")return!1}return ns(t)&&xe(n)?!1:t in e}const rc=new WeakMap,oc=new WeakMap,ro=Symbol("_moveCb"),rs=Symbol("_enterCb"),lc={name:"TransitionGroup",props:ke({},Zf,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=Nn(),r=Oi();let o,l;return Ii(()=>{if(!o.length)return;const a=e.moveClass||`${e.name||"v"}-move`;if(!C1(o[0].el,n.vnode.el,a))return;o.forEach(w1),o.forEach(T1);const s=o.filter(A1);nc(),s.forEach(i=>{const c=i.el,d=c.style;Ot(c,a),d.transform=d.webkitTransform=d.transitionDuration="";const f=c[ro]=p=>{p&&p.target!==c||(!p||/transform$/.test(p.propertyName))&&(c.removeEventListener("transitionend",f),c[ro]=null,Bt(c,a))};c.addEventListener("transitionend",f)})}),()=>{const a=ce(e),s=ec(a);let i=a.tag||Ye;if(o=[],l)for(let c=0;cdelete e.mode;lc.props;const E1=lc;function w1(e){const t=e.el;t[ro]&&t[ro](),t[rs]&&t[rs]()}function T1(e){oc.set(e,e.el.getBoundingClientRect())}function A1(e){const t=rc.get(e),n=oc.get(e),r=t.left-n.left,o=t.top-n.top;if(r||o){const l=e.el.style;return l.transform=l.webkitTransform=`translate(${r}px,${o}px)`,l.transitionDuration="0s",e}}function C1(e,t,n){const r=e.cloneNode(),o=e[In];o&&o.forEach(s=>{s.split(/\s+/).forEach(i=>i&&r.classList.remove(i))}),n.split(/\s+/).forEach(s=>s&&r.classList.add(s)),r.style.display="none";const l=t.nodeType===1?t:t.parentNode;l.appendChild(r);const{hasTransform:a}=tc(r);return l.removeChild(r),a}const k1=ke({patchProp:_1},Xf);let Io,os=!1;function L1(){return Io=os?Io:xf(k1),os=!0,Io}const S1=(...e)=>{const t=L1().createApp(...e),{mount:n}=t;return t.mount=r=>{const o=P1(r);if(o)return n(o,!0,O1(o))},t};function O1(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function P1(e){return xe(e)?document.querySelector(e):e}var kr=e=>/^[a-z][a-z0-9+.-]*:/.test(e)||e.startsWith("//"),x1=/.md((\?|#).*)?$/,Wl=(e,t="/")=>kr(e)||e.startsWith("/")&&!e.startsWith(t)&&!x1.test(e),Lr=e=>/^(https?:)?\/\//.test(e),ls=e=>{if(!e||e.endsWith("/"))return e;let t=e.replace(/(^|\/)README.md$/i,"$1index.html");return t.endsWith(".md")?t=t.substring(0,t.length-3)+".html":t.endsWith(".html")||(t=t+".html"),t.endsWith("/index.html")&&(t=t.substring(0,t.length-10)),t},R1="http://.",I1=(e,t)=>{if(!e.startsWith("/")&&t){const n=t.slice(0,t.lastIndexOf("/"));return ls(new URL(`${n}/${e}`,R1).pathname)}return ls(e)},D1=(e,t)=>{const n=Object.keys(e).sort((r,o)=>{const l=o.split("/").length-r.split("/").length;return l!==0?l:o.length-r.length});for(const r of n)if(t.startsWith(r))return r;return"/"},$1=/(#|\?)/,ac=e=>{const[t,...n]=e.split($1);return{pathname:t,hashAndQueries:n.join("")}},M1=["link","meta","script","style","noscript","template"],V1=["title","base"],j1=([e,t,n])=>V1.includes(e)?e:M1.includes(e)?e==="meta"&&t.name?`${e}.${t.name}`:e==="template"&&t.id?`${e}.${t.id}`:JSON.stringify([e,Object.entries(t).map(([r,o])=>typeof o=="boolean"?o?[r,""]:null:[r,o]).filter(r=>r!=null).sort(([r],[o])=>r.localeCompare(o)),n]):null,N1=e=>{const t=new Set,n=[];return e.forEach(r=>{const o=j1(r);o&&!t.has(o)&&(t.add(o),n.push(r))}),n},B1=e=>e[0]==="/"?e:`/${e}`,sc=e=>e[e.length-1]==="/"||e.endsWith(".html")?e:`${e}/`,Gl=e=>e[e.length-1]==="/"?e.slice(0,-1):e,ic=e=>e[0]==="/"?e.slice(1):e,H1=e=>typeof e=="function",Bn=e=>Object.prototype.toString.call(e)==="[object Object]",Ce=e=>typeof e=="string";const F1="modulepreload",z1=function(e){return"/"+e},as={},y=function(t,n,r){let o=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const l=document.querySelector("meta[property=csp-nonce]"),a=(l==null?void 0:l.nonce)||(l==null?void 0:l.getAttribute("nonce"));o=Promise.all(n.map(s=>{if(s=z1(s),s in as)return;as[s]=!0;const i=s.endsWith(".css"),c=i?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${s}"]${c}`))return;const d=document.createElement("link");if(d.rel=i?"stylesheet":F1,i||(d.as="script",d.crossOrigin=""),d.href=s,a&&d.setAttribute("nonce",a),document.head.appendChild(d),i)return new Promise((f,p)=>{d.addEventListener("load",f),d.addEventListener("error",()=>p(new Error(`Unable to preload CSS for ${s}`)))})}))}return o.then(()=>t()).catch(l=>{const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=l,window.dispatchEvent(a),!a.defaultPrevented)throw l})},q1=JSON.parse('{"/dump/knowledge/==%E5%92%8C===.html":"/dump/knowledge/%E5%92%8C___.html"}'),U1=Object.fromEntries([["/",{loader:()=>y(()=>import("./index.html-CRR3bmkZ.js"),__vite__mapDeps([0,1])),meta:{t:"项目主页",i:"home"}}],["/article/",{loader:()=>y(()=>import("./index.html-yATyb_At.js"),__vite__mapDeps([2,1])),meta:{t:"专栏",i:"fa-solid fa-newspaper"}}],["/article/android-compose-toggle-theme.html",{loader:()=>y(()=>import("./android-compose-toggle-theme.html-BonZxZaP.js"),__vite__mapDeps([3,1])),meta:{t:"Android Compose 切换应用主题"}}],["/article/app-deployment-evolution.html",{loader:()=>y(()=>import("./app-deployment-evolution.html-CqbAAGOt.js"),__vite__mapDeps([4,1])),meta:{t:"应用部署的演变"}}],["/article/cross-domain.html",{loader:()=>y(()=>import("./cross-domain.html-DngXa6Oa.js"),__vite__mapDeps([5,1])),meta:{t:"跨域问题"}}],["/article/debounce-throttle.html",{loader:()=>y(()=>import("./debounce-throttle.html-8nVLpaD-.js"),__vite__mapDeps([6,1])),meta:{t:"防抖和节流"}}],["/article/history-of-javascript.html",{loader:()=>y(()=>import("./history-of-javascript.html-CJoiSEgi.js"),__vite__mapDeps([7,1])),meta:{t:"JavaScript的发展史"}}],["/article/make-npm-lib.html",{loader:()=>y(()=>import("./make-npm-lib.html-DSasP1Ka.js"),__vite__mapDeps([8,1])),meta:{t:"制作 npm 第三方库"}}],["/article/sftp-usage.html",{loader:()=>y(()=>import("./sftp-usage.html-BxUF5tYw.js"),__vite__mapDeps([9,1])),meta:{t:"sftp 使用指南"}}],["/design-pattern/",{loader:()=>y(()=>import("./index.html-DaIlkqyf.js"),__vite__mapDeps([10,1])),meta:{t:"设计模式",i:"fa-solid fa-compass-drafting"}}],["/develop/",{loader:()=>y(()=>import("./index.html-CA9GwR5b.js"),__vite__mapDeps([11,1])),meta:{t:"开发",i:"fa-solid fa-code"}}],["/dump/js-full-stack.html",{loader:()=>y(()=>import("./js-full-stack.html-CrboZL7D.js"),__vite__mapDeps([12,1])),meta:{t:"JS全栈技能树"}}],["/reading/",{loader:()=>y(()=>import("./index.html-fo57XW3Z.js"),__vite__mapDeps([13,1])),meta:{t:"读书摘记",i:"fa-solid fa-book"}}],["/design-pattern/behavioral/",{loader:()=>y(()=>import("./index.html-BBAY8kzd.js"),__vite__mapDeps([14,1])),meta:{t:"行为模式"}}],["/design-pattern/behavioral/chain-of-responsibility.html",{loader:()=>y(()=>import("./chain-of-responsibility.html-BksNeTnb.js"),__vite__mapDeps([15,1])),meta:{t:"责任链模式"}}],["/design-pattern/behavioral/command.html",{loader:()=>y(()=>import("./command.html-ja-KViWA.js"),__vite__mapDeps([16,1])),meta:{t:"命令模式"}}],["/design-pattern/behavioral/iterator.html",{loader:()=>y(()=>import("./iterator.html-QU1R76zp.js"),__vite__mapDeps([17,1])),meta:{t:"迭代器模式"}}],["/design-pattern/behavioral/mediator.html",{loader:()=>y(()=>import("./mediator.html-xqpIWDq-.js"),__vite__mapDeps([18,1])),meta:{t:"中介者模式"}}],["/design-pattern/behavioral/memento.html",{loader:()=>y(()=>import("./memento.html-OvYYHGi_.js"),__vite__mapDeps([19,1])),meta:{t:"备忘录模式"}}],["/design-pattern/behavioral/observer.html",{loader:()=>y(()=>import("./observer.html-DSrDqkvF.js"),__vite__mapDeps([20,1])),meta:{t:"观察者模式"}}],["/design-pattern/behavioral/state.html",{loader:()=>y(()=>import("./state.html-Bku4FWRp.js"),__vite__mapDeps([21,1])),meta:{t:"状态模式"}}],["/design-pattern/behavioral/strategy.html",{loader:()=>y(()=>import("./strategy.html-BjlQmvob.js"),__vite__mapDeps([22,1])),meta:{t:"策略模式"}}],["/design-pattern/behavioral/template-method.html",{loader:()=>y(()=>import("./template-method.html-DQLCUMq7.js"),__vite__mapDeps([23,1])),meta:{t:"模板方法模式"}}],["/design-pattern/behavioral/visitor.html",{loader:()=>y(()=>import("./visitor.html-D3II45NS.js"),__vite__mapDeps([24,1])),meta:{t:"访问者模式"}}],["/design-pattern/creational/",{loader:()=>y(()=>import("./index.html-BPjJKngv.js"),__vite__mapDeps([25,1])),meta:{t:"创建型模式"}}],["/design-pattern/creational/abstract-factory.html",{loader:()=>y(()=>import("./abstract-factory.html-D18YVWOO.js"),__vite__mapDeps([26,1])),meta:{t:"抽象工厂模式",O:2}}],["/design-pattern/creational/builder.html",{loader:()=>y(()=>import("./builder.html-B0eKILcP.js"),__vite__mapDeps([27,1])),meta:{t:"建造者模式",O:3}}],["/design-pattern/creational/factory-method.html",{loader:()=>y(()=>import("./factory-method.html-Cqrklfa7.js"),__vite__mapDeps([28,1])),meta:{t:"工厂方法模式",O:1}}],["/design-pattern/creational/prototype.html",{loader:()=>y(()=>import("./prototype.html-C1r-5LRr.js"),__vite__mapDeps([29,1])),meta:{t:"原型模式",O:4}}],["/design-pattern/creational/singleton.html",{loader:()=>y(()=>import("./singleton.html-aLBuWcjG.js"),__vite__mapDeps([30,1])),meta:{t:"单例模式",O:5}}],["/design-pattern/structural/",{loader:()=>y(()=>import("./index.html-BBZ-UWKB.js"),__vite__mapDeps([31,1])),meta:{t:"结构型模式"}}],["/design-pattern/structural/adapter.html",{loader:()=>y(()=>import("./adapter.html-DQLmqzpw.js"),__vite__mapDeps([32,1])),meta:{t:"适配器模式"}}],["/design-pattern/structural/bridge.html",{loader:()=>y(()=>import("./bridge.html-CyV3bdrh.js"),__vite__mapDeps([33,1])),meta:{t:"桥接模式"}}],["/design-pattern/structural/composite.html",{loader:()=>y(()=>import("./composite.html-D4Q91ot1.js"),__vite__mapDeps([34,1])),meta:{t:"组合模式"}}],["/design-pattern/structural/decorator.html",{loader:()=>y(()=>import("./decorator.html-CrVuLbBN.js"),__vite__mapDeps([35,1])),meta:{t:"装饰模式"}}],["/design-pattern/structural/facade.html",{loader:()=>y(()=>import("./facade.html-DgrJ6BJA.js"),__vite__mapDeps([36,1])),meta:{t:"外观模式"}}],["/design-pattern/structural/flyweight.html",{loader:()=>y(()=>import("./flyweight.html-khO-06ds.js"),__vite__mapDeps([37,1])),meta:{t:"享元模式"}}],["/design-pattern/structural/proxy.html",{loader:()=>y(()=>import("./proxy.html-CBUlxhqz.js"),__vite__mapDeps([38,1])),meta:{t:"代理模式"}}],["/develop/android/",{loader:()=>y(()=>import("./index.html-B--VeDuB.js"),__vite__mapDeps([39,1])),meta:{t:"Android",i:"fa-brands fa-android"}}],["/develop/android/adb-wireless-debug.html",{loader:()=>y(()=>import("./adb-wireless-debug.html-G1B5jZF7.js"),__vite__mapDeps([40,1])),meta:{t:"ADB无线调试"}}],["/develop/angular/",{loader:()=>y(()=>import("./index.html-BDQc6rI7.js"),__vite__mapDeps([41,1])),meta:{t:"Angular",i:"fa-brands fa-angular"}}],["/develop/angular/angular-i18n.html",{loader:()=>y(()=>import("./angular-i18n.html-4oaPX1f4.js"),__vite__mapDeps([42,1])),meta:{t:"多国语系设置"}}],["/develop/angular/azure-login.html",{loader:()=>y(()=>import("./azure-login.html-CW2Tg46q.js"),__vite__mapDeps([43,1])),meta:{t:"接入Azure AD登录"}}],["/develop/angular/components-share-data.html",{loader:()=>y(()=>import("./components-share-data.html-CAPYtWK_.js"),__vite__mapDeps([44,1])),meta:{t:"组件间共享数据"}}],["/develop/angular/karma-config.html",{loader:()=>y(()=>import("./karma-config.html-Do7D2C9w.js"),__vite__mapDeps([45,1])),meta:{t:"karma测试工具配置"}}],["/develop/database/",{loader:()=>y(()=>import("./index.html-_ztMlTab.js"),__vite__mapDeps([46,1])),meta:{t:"Database",i:"fa-solid fa-database"}}],["/develop/database/transaction-isolation-level.html",{loader:()=>y(()=>import("./transaction-isolation-level.html--AMNUCzu.js"),__vite__mapDeps([47,1])),meta:{t:"事务隔离级别"}}],["/develop/git/",{loader:()=>y(()=>import("./index.html-BECZYh5k.js"),__vite__mapDeps([48,1])),meta:{t:"Git",i:"fa-brands fa-git-alt"}}],["/develop/git/git-installation.html",{loader:()=>y(()=>import("./git-installation.html-BQLFVXJr.js"),__vite__mapDeps([49,1])),meta:{t:"Git 初始化",O:1}}],["/develop/git/git-tag.html",{loader:()=>y(()=>import("./git-tag.html-Mx9u7Wq0.js"),__vite__mapDeps([50,1])),meta:{t:"Git 标签",O:3}}],["/develop/git/git-use.html",{loader:()=>y(()=>import("./git-use.html-CZGAVEP0.js"),__vite__mapDeps([51,1])),meta:{t:"Git 基本操作",O:2}}],["/develop/html/",{loader:()=>y(()=>import("./index.html-CE--NcW2.js"),__vite__mapDeps([52,1])),meta:{t:"Html&CSS",i:"fa-brands fa-html5"}}],["/develop/html/classical-layout.html",{loader:()=>y(()=>import("./classical-layout.html-BAaKS8KI.js"),__vite__mapDeps([53,1])),meta:{t:"经典布局"}}],["/develop/html/flex-layout.html",{loader:()=>y(()=>import("./flex-layout.html-QgaDp0-Z.js"),__vite__mapDeps([54,1])),meta:{t:"Flex 布局"}}],["/develop/html/grid-layout.html",{loader:()=>y(()=>import("./grid-layout.html-BJqOKAws.js"),__vite__mapDeps([55,1])),meta:{t:"Grid 布局"}}],["/develop/nestjs/",{loader:()=>y(()=>import("./index.html-C8dMdebp.js"),__vite__mapDeps([56,1])),meta:{t:"NestJS",i:"iconfont icon-gxcnestjs"}}],["/develop/python/",{loader:()=>y(()=>import("./index.html-G-UghoaC.js"),__vite__mapDeps([57,1])),meta:{t:"Python",i:"fa-brands fa-python"}}],["/develop/react/",{loader:()=>y(()=>import("./index.html-BEXohZli.js"),__vite__mapDeps([58,1])),meta:{t:"React",i:"fa-brands fa-react"}}],["/develop/react/usage-of-state.html",{loader:()=>y(()=>import("./usage-of-state.html-CSau87ub.js"),__vite__mapDeps([59,1])),meta:{t:"state 的用法"}}],["/develop/test/",{loader:()=>y(()=>import("./index.html-DN8J3LBn.js"),__vite__mapDeps([60,1])),meta:{t:"Test",i:"fa-solid fa-vials"}}],["/develop/test/test-coverage-example.html",{loader:()=>y(()=>import("./test-coverage-example.html-ChRD7921.js"),__vite__mapDeps([61,1])),meta:{t:"Test Coverage Example"}}],["/develop/typescript/",{loader:()=>y(()=>import("./index.html-C-FT5TcK.js"),__vite__mapDeps([62,1])),meta:{t:"Typescript",i:"fa-brands fa-js-square"}}],["/develop/typescript/custom-decorator.html",{loader:()=>y(()=>import("./custom-decorator.html-DewcEI46.js"),__vite__mapDeps([63,1])),meta:{t:"自定义装饰器"}}],["/develop/typescript/generic-function.html",{loader:()=>y(()=>import("./generic-function.html-BIbNnbwB.js"),__vite__mapDeps([64,1])),meta:{t:"TS 中的泛型函数"}}],["/dump/algorithm/",{loader:()=>y(()=>import("./index.html-qe9rS8Zk.js"),__vite__mapDeps([65,1])),meta:{t:"算法",i:"fa-solid fa-trophy"}}],["/dump/algorithm/sort.html",{loader:()=>y(()=>import("./sort.html-BnRkuj-d.js"),__vite__mapDeps([66,1])),meta:{t:"排序算法",I:!1}}],["/dump/cloud-native/",{loader:()=>y(()=>import("./index.html-DjjexhjN.js"),__vite__mapDeps([67,1])),meta:{t:"云原生",i:"fa-solid fa-cloud"}}],["/dump/en/",{loader:()=>y(()=>import("./index.html-Dz3vdB74.js"),__vite__mapDeps([68,1])),meta:{t:"HomePage",i:"home"}}],["/dump/knowledge/%E5%92%8C___.html",{loader:()=>y(()=>import("./和___.html-V67F7fio.js"),__vite__mapDeps([69,1])),meta:{t:"==和==="}}],["/dump/knowledge/GET%E5%92%8CPOST.html",{loader:()=>y(()=>import("./GET和POST.html-Dvujndbz.js"),__vite__mapDeps([70,1])),meta:{t:"GET和POST"}}],["/dump/knowledge/HTTP%E5%92%8CHTTPS.html",{loader:()=>y(()=>import("./HTTP和HTTPS.html-CEW_EhML.js"),__vite__mapDeps([71,1])),meta:{t:"HTTP和HTTPS"}}],["/dump/knowledge/JS%E6%95%B0%E5%AD%97%E7%B2%BE%E5%BA%A6%E4%B8%A2%E5%A4%B1%E9%97%AE%E9%A2%98.html",{loader:()=>y(()=>import("./JS数字精度丢失问题.html-CYAMyiCx.js"),__vite__mapDeps([72,1])),meta:{t:"JS数字精度丢失问题"}}],["/dump/knowledge/",{loader:()=>y(()=>import("./index.html-R-10JjXe.js"),__vite__mapDeps([73,1])),meta:{t:"知识点",i:"lightbulb"}}],["/dump/knowledge/apply%E3%80%81call%E3%80%81bind.html",{loader:()=>y(()=>import("./apply、call、bind.html-vYmZkFju.js"),__vite__mapDeps([74,1])),meta:{t:"apply、call、bind"}}],["/dump/knowledge/arguments%E5%AF%B9%E8%B1%A1.html",{loader:()=>y(()=>import("./arguments对象.html-B1Pz4srF.js"),__vite__mapDeps([75,1])),meta:{t:"arguments对象"}}],["/dump/knowledge/px%E3%80%81em%E3%80%81rem%E3%80%81vh%E3%80%81vw.html",{loader:()=>y(()=>import("./px、em、rem、vh、vw.html-CI-pCqRO.js"),__vite__mapDeps([76,1])),meta:{t:"px、em、rem、vh、vw"}}],["/dump/knowledge/state%E5%92%8Cprops.html",{loader:()=>y(()=>import("./state和props.html-gfu7nakB.js"),__vite__mapDeps([77,1])),meta:{t:"state和props"}}],["/dump/knowledge/this%E5%AF%B9%E8%B1%A1.html",{loader:()=>y(()=>import("./this对象.html-Coax16p4.js"),__vite__mapDeps([78,1])),meta:{t:"this对象"}}],["/dump/knowledge/typeof%E5%92%8Cinstanceof.html",{loader:()=>y(()=>import("./typeof和instanceof.html-DLKZruzo.js"),__vite__mapDeps([79,1])),meta:{t:"typeof和instanceof"}}],["/dump/knowledge/var%E3%80%81let%E3%80%81const.html",{loader:()=>y(()=>import("./var、let、const.html-By6eU2M5.js"),__vite__mapDeps([80,1])),meta:{t:"var、let、const"}}],["/dump/knowledge/%E4%BB%80%E4%B9%88%E6%98%AFJavaScript.html",{loader:()=>y(()=>import("./什么是JavaScript.html-DpPTW-9U.js"),__vite__mapDeps([81,1])),meta:{t:"什么是JavaScript"}}],["/dump/knowledge/%E4%BD%9C%E7%94%A8%E5%9F%9F.html",{loader:()=>y(()=>import("./作用域.html-CH0ewwLP.js"),__vite__mapDeps([82,1])),meta:{t:"作用域"}}],["/dump/knowledge/%E5%87%BD%E6%95%B0%E6%9F%AF%E9%87%8C%E5%8C%96.html",{loader:()=>y(()=>import("./函数柯里化.html-DqYSm1x6.js"),__vite__mapDeps([83,1])),meta:{t:"函数柯里化"}}],["/dump/knowledge/%E5%89%A9%E4%BD%99%E5%8F%82%E6%95%B0.html",{loader:()=>y(()=>import("./剩余参数.html-gNas6dNZ.js"),__vite__mapDeps([84,1])),meta:{t:"剩余参数"}}],["/dump/knowledge/%E5%93%88%E5%B8%8C%E8%B7%AF%E7%94%B1%E5%92%8CHistory%E8%B7%AF%E7%94%B1.html",{loader:()=>y(()=>import("./哈希路由和History路由.html-BIHIUYy6.js"),__vite__mapDeps([85,1])),meta:{t:"哈希路由和History路由"}}],["/dump/knowledge/%E6%B7%B1%E6%8B%B7%E8%B4%9D%E5%92%8C%E6%B5%85%E6%8B%B7%E8%B4%9D.html",{loader:()=>y(()=>import("./深拷贝和浅拷贝.html-Cpazt2UH.js"),__vite__mapDeps([86,1])),meta:{t:"深拷贝和浅拷贝"}}],["/dump/knowledge/%E7%AE%AD%E5%A4%B4%E5%87%BD%E6%95%B0.html",{loader:()=>y(()=>import("./箭头函数.html-CMWd-7na.js"),__vite__mapDeps([87,1])),meta:{t:"箭头函数"}}],["/dump/knowledge/%E9%97%AD%E5%8C%85.html",{loader:()=>y(()=>import("./闭包.html-CAQNZh4l.js"),__vite__mapDeps([88,1])),meta:{t:"闭包"}}],["/dump/projects/",{loader:()=>y(()=>import("./index.html-BFRJrx4i.js"),__vite__mapDeps([89,1])),meta:{t:"项目文档",i:"fa-solid fa-file-code"}}],["/dump/software-engineering/",{loader:()=>y(()=>import("./index.html-D7Q7APMY.js"),__vite__mapDeps([90,1])),meta:{t:"软件工程",i:"fa-solid fa-diagram-project"}}],["/reading/2022/human-weakness.html",{loader:()=>y(()=>import("./human-weakness.html-3JscoAxt.js"),__vite__mapDeps([91,1])),meta:{t:"人性的弱点"}}],["/reading/2022/nonviolent-communication.html",{loader:()=>y(()=>import("./nonviolent-communication.html-CPBsxeJ5.js"),__vite__mapDeps([92,1])),meta:{t:"非暴力沟通"}}],["/reading/2023/001-self-control.html",{loader:()=>y(()=>import("./001-self-control.html-DD2sWzcO.js"),__vite__mapDeps([93,1])),meta:{t:"自控力"}}],["/reading/2023/002-the-great-gatsby.html",{loader:()=>y(()=>import("./002-the-great-gatsby.html-CbFWnlvh.js"),__vite__mapDeps([94,1])),meta:{t:"了不起的盖茨比"}}],["/reading/2023/003-intimate-relationship.html",{loader:()=>y(()=>import("./003-intimate-relationship.html-C5rFDAOQ.js"),__vite__mapDeps([95,1])),meta:{t:"亲密关系"}}],["/reading/2023/004-the-courage-to-be-hated.html",{loader:()=>y(()=>import("./004-the-courage-to-be-hated.html-DUfzzjRY.js"),__vite__mapDeps([96,1])),meta:{t:"被讨厌的勇气"}}],["/reading/2023/005-devilish-chatting-techniques.html",{loader:()=>y(()=>import("./005-devilish-chatting-techniques.html-yREWOw9j.js"),__vite__mapDeps([97,1])),meta:{t:"魔鬼聊天术"}}],["/reading/2023/006-lean-entrepreneurial-practice.html",{loader:()=>y(()=>import("./006-lean-entrepreneurial-practice.html-C-ACJWzO.js"),__vite__mapDeps([98,1])),meta:{t:"精益创业实战"}}],["/reading/2023/007-island-economics.html",{loader:()=>y(()=>import("./007-island-economics.html-D50o5pCb.js"),__vite__mapDeps([99,1])),meta:{t:"小岛经济学"}}],["/reading/2023/008-micro-habits-slimming.html",{loader:()=>y(()=>import("./008-micro-habits-slimming.html-B7Ku9Ih6.js"),__vite__mapDeps([100,1])),meta:{t:"微习惯 · 瘦身篇"}}],["/reading/2023/009-introverts-communicate-the-bible.html",{loader:()=>y(()=>import("./009-introverts-communicate-the-bible.html-BSvctGL9.js"),__vite__mapDeps([101,1])),meta:{t:"内向者沟通圣经"}}],["/reading/2023/010-%E5%B0%8F%E7%8E%8B%E5%AD%90.html",{loader:()=>y(()=>import("./010-小王子.html-CIg6Zfpz.js"),__vite__mapDeps([102,1])),meta:{t:"《小王子》"}}],["/reading/2023/011-rockefeller-letters.html",{loader:()=>y(()=>import("./011-rockefeller-letters.html-Djo_xIIJ.js"),__vite__mapDeps([103,1])),meta:{t:"洛克菲勒家书"}}],["/reading/2023/012-autobiography-of-franklin.html",{loader:()=>y(()=>import("./012-autobiography-of-franklin.html-BpfRRZKr.js"),__vite__mapDeps([104,1])),meta:{t:"富兰克林自传"}}],["/reading/2023/013-secret.html",{loader:()=>y(()=>import("./013-secret.html-DJJMPjUU.js"),__vite__mapDeps([105,1])),meta:{t:"秘密: 爱、健康与金钱"}}],["/reading/2023/014-quotations-from-kazuo-inamori.html",{loader:()=>y(()=>import("./014-quotations-from-kazuo-inamori.html-DK69K60U.js"),__vite__mapDeps([106,1])),meta:{t:"稻盛和夫语录 100 条"}}],["/reading/2023/015-entertain-oneself-to-death.html",{loader:()=>y(()=>import("./015-entertain-oneself-to-death.html-B5H-dasr.js"),__vite__mapDeps([107,1])),meta:{t:"娱乐至死"}}],["/reading/2023/016-changed-my-life-by-learning-english.html",{loader:()=>y(()=>import("./016-changed-my-life-by-learning-english.html-CPjXV3Xe.js"),__vite__mapDeps([108,1])),meta:{t:"我在 100 天内自学英语翻转人生"}}],["/reading/2023/017-biblical-wisdom.html",{loader:()=>y(()=>import("./017-biblical-wisdom.html-4jKkvJns.js"),__vite__mapDeps([109,1])),meta:{t:"圣经的智慧"}}],["/reading/2023/018-desire-and-dignity.html",{loader:()=>y(()=>import("./018-desire-and-dignity.html-C_rjUwoi.js"),__vite__mapDeps([110,1])),meta:{t:"欲望与尊严:转型期中国的阶层、性别与亲密关系"}}],["/reading/2023/019-rural-china.html",{loader:()=>y(()=>import("./019-rural-china.html-B2zejjSr.js"),__vite__mapDeps([111,1])),meta:{t:"乡土中国"}}],["/reading/2023/021-addicted.html",{loader:()=>y(()=>import("./021-addicted.html-PVwbcCu-.js"),__vite__mapDeps([112,1])),meta:{t:"上瘾:让用户养成使用习惯的四大产品逻辑"}}],["/reading/2023/022-excellent-sheep.html",{loader:()=>y(()=>import("./022-excellent-sheep.html-B5hvhU1e.js"),__vite__mapDeps([113,1])),meta:{t:"优秀的绵羊"}}],["/reading/2024/001-pyramid-principle.html",{loader:()=>y(()=>import("./001-pyramid-principle.html-B29R0TZU.js"),__vite__mapDeps([114,1])),meta:{t:"金字塔原理"}}],["/reading/2024/002-those-ming-dynasty-things.html",{loader:()=>y(()=>import("./002-those-ming-dynasty-things.html-LZIqC68F.js"),__vite__mapDeps([115,1])),meta:{t:"明朝那些事儿(1-7)"}}],["/reading/2024/003-naval.html",{loader:()=>y(()=>import("./003-naval.html-Cgl8Tfeb.js"),__vite__mapDeps([116,1])),meta:{t:"纳瓦尔宝典"}}],["/reading/2024/004-xiaomi-entrepreneurial-thinking.html",{loader:()=>y(()=>import("./004-xiaomi-entrepreneurial-thinking.html-BCygaWwM.js"),__vite__mapDeps([117,1])),meta:{t:"小米创业思考"}}],["/reading/2024/005-small-and-beautiful.html",{loader:()=>y(()=>import("./005-small-and-beautiful.html-CXAbnsZT.js"),__vite__mapDeps([118,1])),meta:{t:"小而美: 持续盈利的经营法则"}}],["/reading/2024/006-low-risk-entrepreneurship.html",{loader:()=>y(()=>import("./006-low-risk-entrepreneurship.html-PiGZ1Hcf.js"),__vite__mapDeps([119,1])),meta:{t:"低风险创业"}}],["/dump/algorithm/sort/",{loader:()=>y(()=>import("./index.html-Dio_lk3z.js"),__vite__mapDeps([120,1])),meta:{t:"排序算法"}}],["/dump/algorithm/sort/selection-sort.html",{loader:()=>y(()=>import("./selection-sort.html-njwSqnNX.js"),__vite__mapDeps([121,1])),meta:{t:"选择排序"}}],["/dump/cloud-native/argocd/",{loader:()=>y(()=>import("./index.html-BEILxa9L.js"),__vite__mapDeps([122,1])),meta:{t:"argocd",i:"fa-brands fa-octopus-deploy"}}],["/dump/cloud-native/argocd/argocd.html",{loader:()=>y(()=>import("./argocd.html-CAOH8OYQ.js"),__vite__mapDeps([123,1])),meta:{t:"部署 Argocd"}}],["/dump/cloud-native/docker/",{loader:()=>y(()=>import("./index.html-DOn0miG_.js"),__vite__mapDeps([124,1])),meta:{t:"docker",i:"fa-brands fa-docker"}}],["/dump/cloud-native/docker/docker-architecture.html",{loader:()=>y(()=>import("./docker-architecture.html-D8_QhbIq.js"),__vite__mapDeps([125,1])),meta:{t:"docker 架构",O:1}}],["/dump/cloud-native/docker/docker-image-build.html",{loader:()=>y(()=>import("./docker-image-build.html-D9lj3ET4.js"),__vite__mapDeps([126,1])),meta:{t:"docker 镜像构建",O:5}}],["/dump/cloud-native/docker/docker-image-structure.html",{loader:()=>y(()=>import("./docker-image-structure.html-BRk-bkgw.js"),__vite__mapDeps([127,1])),meta:{t:"docker 镜像结构",O:4}}],["/dump/cloud-native/docker/docker-installation.html",{loader:()=>y(()=>import("./docker-installation.html-DhBFg_hi.js"),__vite__mapDeps([128,1])),meta:{t:"docker 安装",O:2}}],["/dump/cloud-native/docker/docker-use.html",{loader:()=>y(()=>import("./docker-use.html-8ucPnw8W.js"),__vite__mapDeps([129,1])),meta:{t:"docker 基本用法",O:3}}],["/dump/cloud-native/kubernetes/",{loader:()=>y(()=>import("./index.html-BrBK_lGu.js"),__vite__mapDeps([130,1])),meta:{t:"kubernetes",i:"fa-solid fa-dharmachakra"}}],["/dump/cloud-native/kubernetes/k8s-release-strategy.html",{loader:()=>y(()=>import("./k8s-release-strategy.html-D1be4wgQ.js"),__vite__mapDeps([131,1])),meta:{t:"K8S应用发布策略"}}],["/dump/cloud-native/kubernetes/sealed-secrets-client-side.html",{loader:()=>y(()=>import("./sealed-secrets-client-side.html-DRSNRzib.js"),__vite__mapDeps([132,1])),meta:{t:"Sealed Secrets - Client Side"}}],["/dump/en/algorithm/",{loader:()=>y(()=>import("./index.html-DPisnqRp.js"),__vite__mapDeps([133,1])),meta:{t:"algorithm",i:"fa-solid fa-trophy"}}],["/dump/en/algorithm/sort.html",{loader:()=>y(()=>import("./sort.html-1fSWpaEb.js"),__vite__mapDeps([134,1])),meta:{t:"排序算法",I:!1}}],["/dump/en/projects/",{loader:()=>y(()=>import("./index.html-CA0wOLSR.js"),__vite__mapDeps([135,1])),meta:{t:"Projects",i:"fa-solid fa-file-code"}}],["/dump/projects/SKIP-Docs/",{loader:()=>y(()=>import("./index.html-DUBkicuy.js"),__vite__mapDeps([136,137,1])),meta:{t:"SKIP 项目文档"}}],["/dump/projects/SKIP-Docs/contribute.html",{loader:()=>y(()=>import("./contribute.html-DiBtGwJa.js"),__vite__mapDeps([138,139,1])),meta:{t:"贡献指南参考",O:3}}],["/dump/projects/SKIP-Docs/how-to-use.html",{loader:()=>y(()=>import("./how-to-use.html-Df7evFYJ.js"),__vite__mapDeps([140,141,1])),meta:{t:"使用方法介绍",O:1}}],["/dump/projects/SKIP-Docs/xiaomi.html",{loader:()=>y(()=>import("./xiaomi.html-Cfhsz-S6.js"),__vite__mapDeps([142,143,1])),meta:{t:"小米后台保活",O:2}}],["/dump/projects/TinyCRUD-Docs/",{loader:()=>y(()=>import("./index.html-lJje50V4.js"),__vite__mapDeps([144,145,1])),meta:{t:"TinyCRUD 项目文档"}}],["/dump/projects/TinyCRUD-Docs/contribution-guide.html",{loader:()=>y(()=>import("./contribution-guide.html-xMZ-uu8m.js"),__vite__mapDeps([146,1])),meta:{t:"贡献指南",O:3}}],["/dump/projects/TinyCRUD-Docs/create-request.html",{loader:()=>y(()=>import("./create-request.html-C6tXKLFg.js"),__vite__mapDeps([147,1])),meta:{t:"创建请求",O:1}}],["/dump/projects/TinyCRUD-Docs/start-using.html",{loader:()=>y(()=>import("./start-using.html-Cg5I1wB_.js"),__vite__mapDeps([148,1])),meta:{t:"开始使用",O:2}}],["/dump/software-engineering/twelve-factor/001-codebase.html",{loader:()=>y(()=>import("./001-codebase.html-KE09tOka.js"),__vite__mapDeps([149,1])),meta:{t:"基准代码"}}],["/dump/software-engineering/twelve-factor/002-dependencies.html",{loader:()=>y(()=>import("./002-dependencies.html-BJWeHlsl.js"),__vite__mapDeps([150,1])),meta:{t:"依赖"}}],["/dump/software-engineering/twelve-factor/003-config.html",{loader:()=>y(()=>import("./003-config.html-CG0yPUOa.js"),__vite__mapDeps([151,1])),meta:{t:"配置"}}],["/dump/software-engineering/twelve-factor/004-backing-services.html",{loader:()=>y(()=>import("./004-backing-services.html-d053y8dM.js"),__vite__mapDeps([152,1])),meta:{t:"后端服务"}}],["/dump/software-engineering/twelve-factor/005-build-release-run.html",{loader:()=>y(()=>import("./005-build-release-run.html-C_eqmPUo.js"),__vite__mapDeps([153,1])),meta:{t:"构建,发布,运行"}}],["/dump/software-engineering/twelve-factor/006-processes.html",{loader:()=>y(()=>import("./006-processes.html-CiX1ZK1e.js"),__vite__mapDeps([154,1])),meta:{t:"进程"}}],["/dump/software-engineering/twelve-factor/007-port-binding.html",{loader:()=>y(()=>import("./007-port-binding.html-DdoumpZG.js"),__vite__mapDeps([155,1])),meta:{t:"端口绑定"}}],["/dump/software-engineering/twelve-factor/008-concurrency.html",{loader:()=>y(()=>import("./008-concurrency.html-CHlHe31d.js"),__vite__mapDeps([156,1])),meta:{t:"并发"}}],["/dump/software-engineering/twelve-factor/009-disposability.html",{loader:()=>y(()=>import("./009-disposability.html-DpW9rlw5.js"),__vite__mapDeps([157,1])),meta:{t:"易处理"}}],["/dump/software-engineering/twelve-factor/010-dev-prod-parity.html",{loader:()=>y(()=>import("./010-dev-prod-parity.html-Hq-Q3YXn.js"),__vite__mapDeps([158,1])),meta:{t:"开发环境与线上环境等价"}}],["/dump/software-engineering/twelve-factor/011-logs.html",{loader:()=>y(()=>import("./011-logs.html-DMqKoo1n.js"),__vite__mapDeps([159,1])),meta:{t:"日志"}}],["/dump/software-engineering/twelve-factor/012-admin-processes.html",{loader:()=>y(()=>import("./012-admin-processes.html-BF1MZhXi.js"),__vite__mapDeps([160,1])),meta:{t:"管理进程"}}],["/dump/software-engineering/twelve-factor/",{loader:()=>y(()=>import("./index.html-CHno9ym-.js"),__vite__mapDeps([161,1])),meta:{t:"12 Factor APP"}}],["/dump/en/algorithm/sort/",{loader:()=>y(()=>import("./index.html-7_htggJc.js"),__vite__mapDeps([162,1])),meta:{t:"Sorting Algorithm"}}],["/dump/en/algorithm/sort/selection-sort.html",{loader:()=>y(()=>import("./selection-sort.html-NY7mNJ_4.js"),__vite__mapDeps([163,1])),meta:{t:"Selection Sort"}}],["/dump/en/projects/SKIP-Docs/",{loader:()=>y(()=>import("./index.html-DNI_yerb.js"),__vite__mapDeps([164,137,1])),meta:{t:"SKIP Docs"}}],["/dump/en/projects/SKIP-Docs/contribute.html",{loader:()=>y(()=>import("./contribute.html-DyVlnPhx.js"),__vite__mapDeps([165,139,1])),meta:{t:"Contribute",O:3}}],["/dump/en/projects/SKIP-Docs/how-to-use.html",{loader:()=>y(()=>import("./how-to-use.html-QQkFaj57.js"),__vite__mapDeps([166,141,1])),meta:{t:"How to use",O:1}}],["/dump/en/projects/SKIP-Docs/xiaomi.html",{loader:()=>y(()=>import("./xiaomi.html-Cj_NhqOu.js"),__vite__mapDeps([167,143,1])),meta:{t:"How to Keep Alive",O:2}}],["/dump/en/projects/TinyCRUD-Docs/",{loader:()=>y(()=>import("./index.html-D0d6l9g2.js"),__vite__mapDeps([168,145,1])),meta:{t:"TinyCRUD Docs"}}],["/dump/en/projects/TinyCRUD-Docs/contribution-guide.html",{loader:()=>y(()=>import("./contribution-guide.html-CNV93BuF.js"),__vite__mapDeps([169,1])),meta:{t:"Contribution Guide",O:3}}],["/dump/en/projects/TinyCRUD-Docs/create-request.html",{loader:()=>y(()=>import("./create-request.html-vnXUgMlO.js"),__vite__mapDeps([170,1])),meta:{t:"Create Request",O:1}}],["/dump/en/projects/TinyCRUD-Docs/start-using.html",{loader:()=>y(()=>import("./start-using.html-B71qv67K.js"),__vite__mapDeps([171,1])),meta:{t:"Start Using",O:2}}],["/404.html",{loader:()=>y(()=>import("./404.html-CjZ4flCW.js"),__vite__mapDeps([172,1])),meta:{t:""}}],["/dump/",{loader:()=>y(()=>import("./index.html-CzVhMQ8i.js"),__vite__mapDeps([173,1])),meta:{t:"Dump"}}],["/reading/2022/",{loader:()=>y(()=>import("./index.html-BQTIvK78.js"),__vite__mapDeps([174,1])),meta:{t:"2022"}}],["/reading/2023/",{loader:()=>y(()=>import("./index.html-442_0BoN.js"),__vite__mapDeps([175,1])),meta:{t:"2023"}}],["/reading/2024/",{loader:()=>y(()=>import("./index.html-CU1tcaYR.js"),__vite__mapDeps([176,1])),meta:{t:"2024"}}]]);/*!
   * vue-router v4.3.3
   * (c) 2024 Eduardo San Martin Morote
   * @license MIT
-  */const En=typeof document<"u";function W1(e){return e.__esModule||e[Symbol.toStringTag]==="Module"}const ue=Object.assign;function Do(e,t){const n={};for(const r in t){const o=t[r];n[r]=gt(o)?o.map(e):e(o)}return n}const rr=()=>{},gt=Array.isArray,cc=/#/g,G1=/&/g,K1=/\//g,J1=/=/g,Y1=/\?/g,uc=/\+/g,Q1=/%5B/g,X1=/%5D/g,dc=/%5E/g,Z1=/%60/g,fc=/%7B/g,e0=/%7C/g,pc=/%7D/g,t0=/%20/g;function Kl(e){return encodeURI(""+e).replace(e0,"|").replace(Q1,"[").replace(X1,"]")}function n0(e){return Kl(e).replace(fc,"{").replace(pc,"}").replace(dc,"^")}function sl(e){return Kl(e).replace(uc,"%2B").replace(t0,"+").replace(cc,"%23").replace(G1,"%26").replace(Z1,"`").replace(fc,"{").replace(pc,"}").replace(dc,"^")}function r0(e){return sl(e).replace(J1,"%3D")}function o0(e){return Kl(e).replace(cc,"%23").replace(Y1,"%3F")}function l0(e){return e==null?"":o0(e).replace(K1,"%2F")}function pr(e){try{return decodeURIComponent(""+e)}catch{}return""+e}const a0=/\/$/,s0=e=>e.replace(a0,"");function $o(e,t,n="/"){let r,o={},l="",a="";const s=t.indexOf("#");let i=t.indexOf("?");return s=0&&(i=-1),i>-1&&(r=t.slice(0,i),l=t.slice(i+1,s>-1?s:t.length),o=e(l)),s>-1&&(r=r||t.slice(0,s),a=t.slice(s,t.length)),r=d0(r??t,n),{fullPath:r+(l&&"?")+l+a,path:r,query:o,hash:pr(a)}}function i0(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function ss(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function c0(e,t,n){const r=t.matched.length-1,o=n.matched.length-1;return r>-1&&r===o&&Dn(t.matched[r],n.matched[o])&&hc(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function Dn(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function hc(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!u0(e[n],t[n]))return!1;return!0}function u0(e,t){return gt(e)?is(e,t):gt(t)?is(t,e):e===t}function is(e,t){return gt(t)?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function d0(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),r=e.split("/"),o=r[r.length-1];(o===".."||o===".")&&r.push("");let l=n.length-1,a,s;for(a=0;a1&&l--;else break;return n.slice(0,l).join("/")+"/"+r.slice(a).join("/")}var hr;(function(e){e.pop="pop",e.push="push"})(hr||(hr={}));var or;(function(e){e.back="back",e.forward="forward",e.unknown=""})(or||(or={}));function f0(e){if(!e)if(En){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),s0(e)}const p0=/^[^#]+#/;function h0(e,t){return e.replace(p0,"#")+t}function m0(e,t){const n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}const mo=()=>({left:window.scrollX,top:window.scrollY});function v0(e){let t;if("el"in e){const n=e.el,r=typeof n=="string"&&n.startsWith("#"),o=typeof n=="string"?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!o)return;t=m0(o,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function cs(e,t){return(history.state?history.state.position-t:-1)+e}const il=new Map;function g0(e,t){il.set(e,t)}function _0(e){const t=il.get(e);return il.delete(e),t}let b0=()=>location.protocol+"//"+location.host;function mc(e,t){const{pathname:n,search:r,hash:o}=t,l=e.indexOf("#");if(l>-1){let s=o.includes(e.slice(l))?e.slice(l).length:1,i=o.slice(s);return i[0]!=="/"&&(i="/"+i),ss(i,"")}return ss(n,e)+r+o}function y0(e,t,n,r){let o=[],l=[],a=null;const s=({state:p})=>{const h=mc(e,location),v=n.value,w=t.value;let E=0;if(p){if(n.value=h,t.value=p,a&&a===v){a=null;return}E=w?p.position-w.position:0}else r(h);o.forEach(b=>{b(n.value,v,{delta:E,type:hr.pop,direction:E?E>0?or.forward:or.back:or.unknown})})};function i(){a=n.value}function c(p){o.push(p);const h=()=>{const v=o.indexOf(p);v>-1&&o.splice(v,1)};return l.push(h),h}function d(){const{history:p}=window;p.state&&p.replaceState(ue({},p.state,{scroll:mo()}),"")}function f(){for(const p of l)p();l=[],window.removeEventListener("popstate",s),window.removeEventListener("beforeunload",d)}return window.addEventListener("popstate",s),window.addEventListener("beforeunload",d,{passive:!0}),{pauseListeners:i,listen:c,destroy:f}}function us(e,t,n,r=!1,o=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:o?mo():null}}function E0(e){const{history:t,location:n}=window,r={value:mc(e,n)},o={value:t.state};o.value||l(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function l(i,c,d){const f=e.indexOf("#"),p=f>-1?(n.host&&document.querySelector("base")?e:e.slice(f))+i:b0()+e+i;try{t[d?"replaceState":"pushState"](c,"",p),o.value=c}catch(h){console.error(h),n[d?"replace":"assign"](p)}}function a(i,c){const d=ue({},t.state,us(o.value.back,i,o.value.forward,!0),c,{position:o.value.position});l(i,d,!0),r.value=i}function s(i,c){const d=ue({},o.value,t.state,{forward:i,scroll:mo()});l(d.current,d,!0);const f=ue({},us(r.value,i,null),{position:d.position+1},c);l(i,f,!1),r.value=i}return{location:r,state:o,push:s,replace:a}}function w0(e){e=f0(e);const t=E0(e),n=y0(e,t.state,t.location,t.replace);function r(l,a=!0){a||n.pauseListeners(),history.go(l)}const o=ue({location:"",base:e,go:r,createHref:h0.bind(null,e)},t,n);return Object.defineProperty(o,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(o,"state",{enumerable:!0,get:()=>t.state.value}),o}function T0(e){return typeof e=="string"||e&&typeof e=="object"}function vc(e){return typeof e=="string"||typeof e=="symbol"}const Pt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},gc=Symbol("");var ds;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(ds||(ds={}));function $n(e,t){return ue(new Error,{type:e,[gc]:!0},t)}function St(e,t){return e instanceof Error&&gc in e&&(t==null||!!(e.type&t))}const fs="[^/]+?",C0={sensitive:!1,strict:!1,start:!0,end:!0},A0=/[.+*?^${}()[\]/\\]/g;function k0(e,t){const n=ue({},C0,t),r=[];let o=n.start?"^":"";const l=[];for(const c of e){const d=c.length?[]:[90];n.strict&&!c.length&&(o+="/");for(let f=0;ft.length?t.length===1&&t[0]===80?1:-1:0}function _c(e,t){let n=0;const r=e.score,o=t.score;for(;n0&&t[t.length-1]<0}const S0={type:0,value:""},O0=/[a-zA-Z0-9_]/;function P0(e){if(!e)return[[]];if(e==="/")return[[S0]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(h){throw new Error(`ERR (${n})/"${c}": ${h}`)}let n=0,r=n;const o=[];let l;function a(){l&&o.push(l),l=[]}let s=0,i,c="",d="";function f(){c&&(n===0?l.push({type:0,value:c}):n===1||n===2||n===3?(l.length>1&&(i==="*"||i==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),l.push({type:1,value:c,regexp:d,repeatable:i==="*"||i==="+",optional:i==="*"||i==="?"})):t("Invalid state to consume buffer"),c="")}function p(){c+=i}for(;s{a(T)}:rr}function a(d){if(vc(d)){const f=r.get(d);f&&(r.delete(d),n.splice(n.indexOf(f),1),f.children.forEach(a),f.alias.forEach(a))}else{const f=n.indexOf(d);f>-1&&(n.splice(f,1),d.record.name&&r.delete(d.record.name),d.children.forEach(a),d.alias.forEach(a))}}function s(){return n}function i(d){const f=M0(d,n);n.splice(f,0,d),d.record.name&&!ms(d)&&r.set(d.record.name,d)}function c(d,f){let p,h={},v,w;if("name"in d&&d.name){if(p=r.get(d.name),!p)throw $n(1,{location:d});w=p.record.name,h=ue(hs(f.params,p.keys.filter(T=>!T.optional).concat(p.parent?p.parent.keys.filter(T=>T.optional):[]).map(T=>T.name)),d.params&&hs(d.params,p.keys.map(T=>T.name))),v=p.stringify(h)}else if(d.path!=null)v=d.path,p=n.find(T=>T.re.test(v)),p&&(h=p.parse(v),w=p.record.name);else{if(p=f.name?r.get(f.name):n.find(T=>T.re.test(f.path)),!p)throw $n(1,{location:d,currentLocation:f});w=p.record.name,h=ue({},f.params,d.params),v=p.stringify(h)}const E=[];let b=p;for(;b;)E.unshift(b.record),b=b.parent;return{name:w,path:v,params:h,matched:E,meta:$0(E)}}return e.forEach(d=>l(d)),{addRoute:l,resolve:c,removeRoute:a,getRoutes:s,getRecordMatcher:o}}function hs(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function I0(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:D0(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function D0(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const r in e.components)t[r]=typeof n=="object"?n[r]:n;return t}function ms(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function $0(e){return e.reduce((t,n)=>ue(t,n.meta),{})}function vs(e,t){const n={};for(const r in e)n[r]=r in t?t[r]:e[r];return n}function M0(e,t){let n=0,r=t.length;for(;n!==r;){const l=n+r>>1;_c(e,t[l])<0?r=l:n=l+1}const o=V0(e);return o&&(r=t.lastIndexOf(o,r-1)),r}function V0(e){let t=e;for(;t=t.parent;)if(bc(t)&&_c(e,t)===0)return t}function bc({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function j0(e){const t={};if(e===""||e==="?")return t;const r=(e[0]==="?"?e.slice(1):e).split("&");for(let o=0;ol&&sl(l)):[r&&sl(r)]).forEach(l=>{l!==void 0&&(t+=(t.length?"&":"")+n,l!=null&&(t+="="+l))})}return t}function N0(e){const t={};for(const n in e){const r=e[n];r!==void 0&&(t[n]=gt(r)?r.map(o=>o==null?null:""+o):r==null?r:""+r)}return t}const B0=Symbol(""),_s=Symbol(""),vo=Symbol(""),Jl=Symbol(""),cl=Symbol("");function Wn(){let e=[];function t(r){return e.push(r),()=>{const o=e.indexOf(r);o>-1&&e.splice(o,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function Ut(e,t,n,r,o,l=a=>a()){const a=r&&(r.enterCallbacks[o]=r.enterCallbacks[o]||[]);return()=>new Promise((s,i)=>{const c=p=>{p===!1?i($n(4,{from:n,to:t})):p instanceof Error?i(p):T0(p)?i($n(2,{from:t,to:p})):(a&&r.enterCallbacks[o]===a&&typeof p=="function"&&a.push(p),s())},d=l(()=>e.call(r&&r.instances[o],t,n,c));let f=Promise.resolve(d);e.length<3&&(f=f.then(c)),f.catch(p=>i(p))})}function Mo(e,t,n,r,o=l=>l()){const l=[];for(const a of e)for(const s in a.components){let i=a.components[s];if(!(t!=="beforeRouteEnter"&&!a.instances[s]))if(H0(i)){const d=(i.__vccOpts||i)[t];d&&l.push(Ut(d,n,r,a,s,o))}else{let c=i();l.push(()=>c.then(d=>{if(!d)return Promise.reject(new Error(`Couldn't resolve component "${s}" at "${a.path}"`));const f=W1(d)?d.default:d;a.components[s]=f;const h=(f.__vccOpts||f)[t];return h&&Ut(h,n,r,a,s,o)()}))}}return l}function H0(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function bs(e){const t=Ce(vo),n=Ce(Jl),r=C(()=>{const i=pn(e.to);return t.resolve(i)}),o=C(()=>{const{matched:i}=r.value,{length:c}=i,d=i[c-1],f=n.matched;if(!d||!f.length)return-1;const p=f.findIndex(Dn.bind(null,d));if(p>-1)return p;const h=ys(i[c-2]);return c>1&&ys(d)===h&&f[f.length-1].path!==h?f.findIndex(Dn.bind(null,i[c-2])):p}),l=C(()=>o.value>-1&&U0(n.params,r.value.params)),a=C(()=>o.value>-1&&o.value===n.matched.length-1&&hc(n.params,r.value.params));function s(i={}){return q0(i)?t[pn(e.replace)?"replace":"push"](pn(e.to)).catch(rr):Promise.resolve()}return{route:r,href:C(()=>r.value.href),isActive:l,isExactActive:a,navigate:s}}const F0=z({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:bs,setup(e,{slots:t}){const n=Er(bs(e)),{options:r}=Ce(vo),o=C(()=>({[Es(e.activeClass,r.linkActiveClass,"router-link-active")]:n.isActive,[Es(e.exactActiveClass,r.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const l=t.default&&t.default(n);return e.custom?l:u("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:o.value},l)}}}),z0=F0;function q0(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function U0(e,t){for(const n in t){const r=t[n],o=e[n];if(typeof r=="string"){if(r!==o)return!1}else if(!gt(o)||o.length!==r.length||r.some((l,a)=>l!==o[a]))return!1}return!0}function ys(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Es=(e,t,n)=>e??t??n,W0=z({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const r=Ce(cl),o=C(()=>e.route||r.value),l=Ce(_s,0),a=C(()=>{let c=pn(l);const{matched:d}=o.value;let f;for(;(f=d[c])&&!f.components;)c++;return c}),s=C(()=>o.value.matched[a.value]);hn(_s,C(()=>a.value+1)),hn(B0,s),hn(cl,o);const i=U();return oe(()=>[i.value,s.value,e.name],([c,d,f],[p,h,v])=>{d&&(d.instances[f]=c,h&&h!==d&&c&&c===p&&(d.leaveGuards.size||(d.leaveGuards=h.leaveGuards),d.updateGuards.size||(d.updateGuards=h.updateGuards))),c&&d&&(!h||!Dn(d,h)||!p)&&(d.enterCallbacks[f]||[]).forEach(w=>w(c))},{flush:"post"}),()=>{const c=o.value,d=e.name,f=s.value,p=f&&f.components[d];if(!p)return ws(n.default,{Component:p,route:c});const h=f.props[d],v=h?h===!0?c.params:typeof h=="function"?h(c):h:null,E=u(p,ue({},v,t,{onVnodeUnmounted:b=>{b.component.isUnmounted&&(f.instances[d]=null)},ref:i}));return ws(n.default,{Component:E,route:c})||E}}});function ws(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const G0=W0;function K0(e){const t=R0(e.routes,e),n=e.parseQuery||j0,r=e.stringifyQuery||gs,o=e.history,l=Wn(),a=Wn(),s=Wn(),i=Le(Pt);let c=Pt;En&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const d=Do.bind(null,L=>""+L),f=Do.bind(null,l0),p=Do.bind(null,pr);function h(L,F){let B,Y;return vc(L)?(B=t.getRecordMatcher(L),Y=F):Y=L,t.addRoute(Y,B)}function v(L){const F=t.getRecordMatcher(L);F&&t.removeRoute(F)}function w(){return t.getRoutes().map(L=>L.record)}function E(L){return!!t.getRecordMatcher(L)}function b(L,F){if(F=ue({},F||i.value),typeof L=="string"){const g=$o(n,L,F.path),A=t.resolve({path:g.path},F),O=o.createHref(g.fullPath);return ue(g,A,{params:p(A.params),hash:pr(g.hash),redirectedFrom:void 0,href:O})}let B;if(L.path!=null)B=ue({},L,{path:$o(n,L.path,F.path).path});else{const g=ue({},L.params);for(const A in g)g[A]==null&&delete g[A];B=ue({},L,{params:f(g)}),F.params=f(F.params)}const Y=t.resolve(B,F),ae=L.hash||"";Y.params=d(p(Y.params));const pe=i0(r,ue({},L,{hash:n0(ae),path:Y.path})),m=o.createHref(pe);return ue({fullPath:pe,hash:ae,query:r===gs?N0(L.query):L.query||{}},Y,{redirectedFrom:void 0,href:m})}function T(L){return typeof L=="string"?$o(n,L,i.value.path):ue({},L)}function _(L,F){if(c!==L)return $n(8,{from:F,to:L})}function k(L){return P(L)}function V(L){return k(ue(T(L),{replace:!0}))}function D(L){const F=L.matched[L.matched.length-1];if(F&&F.redirect){const{redirect:B}=F;let Y=typeof B=="function"?B(L):B;return typeof Y=="string"&&(Y=Y.includes("?")||Y.includes("#")?Y=T(Y):{path:Y},Y.params={}),ue({query:L.query,hash:L.hash,params:Y.path!=null?{}:L.params},Y)}}function P(L,F){const B=c=b(L),Y=i.value,ae=L.state,pe=L.force,m=L.replace===!0,g=D(B);if(g)return P(ue(T(g),{state:typeof g=="object"?ue({},ae,g.state):ae,force:pe,replace:m}),F||B);const A=B;A.redirectedFrom=F;let O;return!pe&&c0(r,Y,B)&&(O=$n(16,{to:A,from:Y}),Ze(Y,Y,!0,!1)),(O?Promise.resolve(O):I(A,Y)).catch(S=>St(S)?St(S,2)?S:bt(S):J(S,A,Y)).then(S=>{if(S){if(St(S,2))return P(ue({replace:m},T(S.to),{state:typeof S.to=="object"?ue({},ae,S.to.state):ae,force:pe}),F||A)}else S=$(A,Y,!0,m,ae);return W(A,Y,S),S})}function R(L,F){const B=_(L,F);return B?Promise.reject(B):Promise.resolve()}function G(L){const F=Lt.values().next().value;return F&&typeof F.runWithContext=="function"?F.runWithContext(L):L()}function I(L,F){let B;const[Y,ae,pe]=J0(L,F);B=Mo(Y.reverse(),"beforeRouteLeave",L,F);for(const g of Y)g.leaveGuards.forEach(A=>{B.push(Ut(A,L,F))});const m=R.bind(null,L,F);return B.push(m),Pe(B).then(()=>{B=[];for(const g of l.list())B.push(Ut(g,L,F));return B.push(m),Pe(B)}).then(()=>{B=Mo(ae,"beforeRouteUpdate",L,F);for(const g of ae)g.updateGuards.forEach(A=>{B.push(Ut(A,L,F))});return B.push(m),Pe(B)}).then(()=>{B=[];for(const g of pe)if(g.beforeEnter)if(gt(g.beforeEnter))for(const A of g.beforeEnter)B.push(Ut(A,L,F));else B.push(Ut(g.beforeEnter,L,F));return B.push(m),Pe(B)}).then(()=>(L.matched.forEach(g=>g.enterCallbacks={}),B=Mo(pe,"beforeRouteEnter",L,F,G),B.push(m),Pe(B))).then(()=>{B=[];for(const g of a.list())B.push(Ut(g,L,F));return B.push(m),Pe(B)}).catch(g=>St(g,8)?g:Promise.reject(g))}function W(L,F,B){s.list().forEach(Y=>G(()=>Y(L,F,B)))}function $(L,F,B,Y,ae){const pe=_(L,F);if(pe)return pe;const m=F===Pt,g=En?history.state:{};B&&(Y||m?o.replace(L.fullPath,ue({scroll:m&&g&&g.scroll},ae)):o.push(L.fullPath,ae)),i.value=L,Ze(L,F,B,m),bt()}let ee;function Te(){ee||(ee=o.listen((L,F,B)=>{if(!yt.listening)return;const Y=b(L),ae=D(Y);if(ae){P(ue(ae,{replace:!0}),Y).catch(rr);return}c=Y;const pe=i.value;En&&g0(cs(pe.fullPath,B.delta),mo()),I(Y,pe).catch(m=>St(m,12)?m:St(m,2)?(P(m.to,Y).then(g=>{St(g,20)&&!B.delta&&B.type===hr.pop&&o.go(-1,!1)}).catch(rr),Promise.reject()):(B.delta&&o.go(-B.delta,!1),J(m,Y,pe))).then(m=>{m=m||$(Y,pe,!1),m&&(B.delta&&!St(m,8)?o.go(-B.delta,!1):B.type===hr.pop&&St(m,20)&&o.go(-1,!1)),W(Y,pe,m)}).catch(rr)}))}let _e=Wn(),K=Wn(),te;function J(L,F,B){bt(L);const Y=K.list();return Y.length?Y.forEach(ae=>ae(L,F,B)):console.error(L),Promise.reject(L)}function Oe(){return te&&i.value!==Pt?Promise.resolve():new Promise((L,F)=>{_e.add([L,F])})}function bt(L){return te||(te=!L,Te(),_e.list().forEach(([F,B])=>L?B(L):F()),_e.reset()),L}function Ze(L,F,B,Y){const{scrollBehavior:ae}=e;if(!En||!ae)return Promise.resolve();const pe=!B&&_0(cs(L.fullPath,0))||(Y||!B)&&history.state&&history.state.scroll||null;return kt().then(()=>ae(L,F,pe)).then(m=>m&&v0(m)).catch(m=>J(m,L,F))}const Ie=L=>o.go(L);let Ge;const Lt=new Set,yt={currentRoute:i,listening:!0,addRoute:h,removeRoute:v,hasRoute:E,getRoutes:w,resolve:b,options:e,push:k,replace:V,go:Ie,back:()=>Ie(-1),forward:()=>Ie(1),beforeEach:l.add,beforeResolve:a.add,afterEach:s.add,onError:K.add,isReady:Oe,install(L){const F=this;L.component("RouterLink",z0),L.component("RouterView",G0),L.config.globalProperties.$router=F,Object.defineProperty(L.config.globalProperties,"$route",{enumerable:!0,get:()=>pn(i)}),En&&!Ge&&i.value===Pt&&(Ge=!0,k(o.location).catch(ae=>{}));const B={};for(const ae in Pt)Object.defineProperty(B,ae,{get:()=>i.value[ae],enumerable:!0});L.provide(vo,F),L.provide(Jl,hi(B)),L.provide(cl,i);const Y=L.unmount;Lt.add(L),L.unmount=function(){Lt.delete(L),Lt.size<1&&(c=Pt,ee&&ee(),ee=null,i.value=Pt,Ge=!1,te=!1),Y()}}};function Pe(L){return L.reduce((F,B)=>F.then(()=>G(B)),Promise.resolve())}return yt}function J0(e,t){const n=[],r=[],o=[],l=Math.max(t.matched.length,e.matched.length);for(let a=0;aDn(c,s))?r.push(s):n.push(s));const i=e.matched[a];i&&(t.matched.find(c=>Dn(c,i))||o.push(i))}return[n,r,o]}function Hn(){return Ce(vo)}function Dt(){return Ce(Jl)}var Yl=Symbol(""),_t=()=>{const e=Ce(Yl);if(!e)throw new Error("useClientData() is called without provider.");return e},Y0=()=>_t().pageComponent,Se=()=>_t().pageData,we=()=>_t().pageFrontmatter,Q0=()=>_t().pageHead,Ql=()=>_t().pageLang,X0=()=>_t().pageLayout,vn=()=>_t().routeLocale,Z0=()=>_t().routePath,ep=()=>_t().routes,yc=()=>_t().siteData,go=()=>_t().siteLocaleData,tp=Symbol(""),ul=Le(q1),On=Le(U1),Ec=(e,t)=>{const n=I1(e,t);if(On.value[n])return n;const r=encodeURI(n);if(On.value[r])return r;const o=ul.value[n]||ul.value[r];return o||n},Rt=(e,t)=>{const{pathname:n,hashAndQueries:r}=ac(e),o=Ec(n,t),l=o+r;return On.value[o]?{...On.value[o],path:l,notFound:!1}:{...On.value["/404.html"],path:l,notFound:!0}},np=(e,t)=>{const{pathname:n,hashAndQueries:r}=ac(e);return Ec(n,t)+r},rp=e=>{if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget){const t=e.currentTarget.getAttribute("target");if(t!=null&&t.match(/\b_blank\b/i))return}return e.preventDefault(),!0}},mt=z({name:"RouteLink",props:{to:{type:String,required:!0},active:Boolean,activeClass:{type:String,default:"route-link-active"}},slots:Object,setup(e,{slots:t}){const n=Hn(),r=Dt(),o=C(()=>e.to.startsWith("#")||e.to.startsWith("?")?e.to:`/${np(e.to,r.path).substring(1)}`);return()=>{var l;return u("a",{class:["route-link",{[e.activeClass]:e.active}],href:o.value,onClick:(a={})=>{rp(a)&&n.push(e.to).catch()}},(l=t.default)==null?void 0:l.call(t))}}}),op=z({name:"AutoLink",props:{config:{type:Object,required:!0}},slots:Object,setup(e,{slots:t}){const n=uo(e,"config"),r=Dt(),o=yc(),l=C(()=>kr(n.value.link)),a=C(()=>n.value.target||(l.value?"_blank":void 0)),s=C(()=>a.value==="_blank"),i=C(()=>!l.value&&!s.value),c=C(()=>n.value.rel||(s.value?"noopener noreferrer":null)),d=C(()=>n.value.ariaLabel??n.value.text),f=C(()=>{if(n.value.exact)return!1;const h=Object.keys(o.value.locales);return h.length?h.every(v=>v!==n.value.link):n.value.link!=="/"}),p=C(()=>i.value?n.value.activeMatch?(n.value.activeMatch instanceof RegExp?n.value.activeMatch:new RegExp(n.value.activeMatch,"u")).test(r.path):f.value?r.path.startsWith(n.value.link):r.path===n.value.link:!1);return()=>{const{before:h,after:v,default:w}=t,E=(w==null?void 0:w(n.value))||[h==null?void 0:h(n.value),n.value.text,v==null?void 0:v(n.value)];return i.value?u(mt,{class:"auto-link",to:n.value.link,active:p.value,"aria-label":d.value},()=>E):u("a",{class:"auto-link external-link",href:n.value.link,"aria-label":d.value,rel:c.value,target:a.value},E)}}}),_o=z({name:"ClientOnly",setup(e,t){const n=U(!1);return de(()=>{n.value=!0}),()=>{var r,o;return n.value?(o=(r=t.slots).default)==null?void 0:o.call(r):null}}}),wc=z({name:"Content",props:{path:{type:String,required:!1,default:""}},setup(e){const t=Y0(),n=C(()=>{if(!e.path)return t.value;const r=Rt(e.path);return Hl(()=>r.loader().then(({comp:o})=>o))});return()=>u(n.value)}}),lp="Layout",ap="en-US",an=Er({resolveLayouts:e=>e.reduce((t,n)=>({...t,...n.layouts}),{}),resolvePageHead:(e,t,n)=>{const r=Ae(t.description)?t.description:n.description,o=[...Array.isArray(t.head)?t.head:[],...n.head,["title",{},e],["meta",{name:"description",content:r}]];return N1(o)},resolvePageHeadTitle:(e,t)=>[e.title,t.title].filter(n=>!!n).join(" | "),resolvePageLang:(e,t)=>e.lang||t.lang||ap,resolvePageLayout:(e,t)=>{const n=Ae(e.frontmatter.layout)?e.frontmatter.layout:lp;if(!t[n])throw new Error(`[vuepress] Cannot resolve layout: ${n}`);return t[n]},resolveRouteLocale:(e,t)=>D1(e,decodeURI(t)),resolveSiteLocaleData:({base:e,locales:t,...n},r)=>{var o;return{...n,...t[r],head:[...((o=t[r])==null?void 0:o.head)??[],...n.head??[]]}}}),ct=(e={})=>e,je=e=>Lr(e)?e:`/${ic(e)}`;const sp=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),en=e=>{const t=vn();return C(()=>e[t.value]??{})};var Qe=Uint8Array,Cn=Uint16Array,ip=Int32Array,Tc=new Qe([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),Cc=new Qe([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),cp=new Qe([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Ac=function(e,t){for(var n=new Cn(31),r=0;r<31;++r)n[r]=t+=1<>1|(ve&21845)<<1;jt=(jt&52428)>>2|(jt&13107)<<2,jt=(jt&61680)>>4|(jt&3855)<<4,dl[ve]=((jt&65280)>>8|(jt&255)<<8)>>1}var lr=function(e,t,n){for(var r=e.length,o=0,l=new Cn(t);o>i]=c}else for(s=new Cn(r),o=0;o>15-e[o]);return s},Sr=new Qe(288);for(var ve=0;ve<144;++ve)Sr[ve]=8;for(var ve=144;ve<256;++ve)Sr[ve]=9;for(var ve=256;ve<280;++ve)Sr[ve]=7;for(var ve=280;ve<288;++ve)Sr[ve]=8;var Sc=new Qe(32);for(var ve=0;ve<32;++ve)Sc[ve]=5;var pp=lr(Sr,9,1),hp=lr(Sc,5,1),Vo=function(e){for(var t=e[0],n=1;nt&&(t=e[n]);return t},dt=function(e,t,n){var r=t/8|0;return(e[r]|e[r+1]<<8)>>(t&7)&n},jo=function(e,t){var n=t/8|0;return(e[n]|e[n+1]<<8|e[n+2]<<16)>>(t&7)},mp=function(e){return(e+7)/8|0},Oc=function(e,t,n){return(t==null||t<0)&&(t=0),(n==null||n>e.length)&&(n=e.length),new Qe(e.subarray(t,n))},vp=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],nt=function(e,t,n){var r=new Error(t||vp[e]);if(r.code=e,Error.captureStackTrace&&Error.captureStackTrace(r,nt),!n)throw r;return r},gp=function(e,t,n,r){var o=e.length,l=0;if(!o||t.f&&!t.l)return n||new Qe(0);var a=!n,s=a||t.i!=2,i=t.i;a&&(n=new Qe(o*3));var c=function(ae){var pe=n.length;if(ae>pe){var m=new Qe(Math.max(pe*2,ae));m.set(n),n=m}},d=t.f||0,f=t.p||0,p=t.b||0,h=t.l,v=t.d,w=t.m,E=t.n,b=o*8;do{if(!h){d=dt(e,f,1);var T=dt(e,f+1,3);if(f+=3,T)if(T==1)h=pp,v=hp,w=9,E=5;else if(T==2){var D=dt(e,f,31)+257,P=dt(e,f+10,15)+4,R=D+dt(e,f+5,31)+1;f+=14;for(var G=new Qe(R),I=new Qe(19),W=0;W>4;if(_<16)G[W++]=_;else{var K=0,te=0;for(_==16?(te=3+dt(e,f,3),f+=2,K=G[W-1]):_==17?(te=3+dt(e,f,7),f+=3):_==18&&(te=11+dt(e,f,127),f+=7);te--;)G[W++]=K}}var J=G.subarray(0,D),Oe=G.subarray(D);w=Vo(J),E=Vo(Oe),h=lr(J,w,1),v=lr(Oe,E,1)}else nt(1);else{var _=mp(f)+4,k=e[_-4]|e[_-3]<<8,V=_+k;if(V>o){i&&nt(0);break}s&&c(p+k),n.set(e.subarray(_,V),p),t.b=p+=k,t.p=f=V*8,t.f=d;continue}if(f>b){i&&nt(0);break}}s&&c(p+131072);for(var bt=(1<>4;if(f+=K&15,f>b){i&&nt(0);break}if(K||nt(2),Ge<256)n[p++]=Ge;else if(Ge==256){Ie=f,h=null;break}else{var Lt=Ge-254;if(Ge>264){var W=Ge-257,yt=Tc[W];Lt=dt(e,f,(1<>4;Pe||nt(3),f+=Pe&15;var Oe=fp[L];if(L>3){var yt=Cc[L];Oe+=jo(e,f)&(1<b){i&&nt(0);break}s&&c(p+131072);var F=p+Lt;if(p>4>7||(e[0]<<8|e[1])%31)&&nt(6,"invalid zlib data"),(e[1]>>5&1)==+!t&&nt(6,"invalid zlib data: "+(e[1]&32?"need":"unexpected")+" dictionary"),(e[1]>>3&4)+2};function yp(e,t){return gp(e.subarray(bp(e,t),-4),{i:2},t,t)}var fl=typeof TextDecoder<"u"&&new TextDecoder,Ep=0;try{fl.decode(_p,{stream:!0}),Ep=1}catch{}var wp=function(e){for(var t="",n=0;;){var r=e[n++],o=(r>127)+(r>223)+(r>239);if(n+o>e.length)return{s:t,r:Oc(e,n-1)};o?o==3?(r=((r&15)<<18|(e[n++]&63)<<12|(e[n++]&63)<<6|e[n++]&63)-65536,t+=String.fromCharCode(55296|r>>10,56320|r&1023)):o&1?t+=String.fromCharCode((r&31)<<6|e[n++]&63):t+=String.fromCharCode((r&15)<<12|(e[n++]&63)<<6|e[n++]&63):t+=String.fromCharCode(r)}};function Tp(e,t){{for(var n=new Qe(e.length),r=0;r{const t=atob(e);return Cp(yp(Tp(t)))},qe=(e,t)=>{var r;const n=(r=(t==null?void 0:t._instance)||Nn())==null?void 0:r.appContext.components;return n?e in n||st(e)in n||yr(st(e))in n:!1},Pc=e=>new Promise(t=>setTimeout(t,e)),xc=e=>typeof e<"u",No=e=>typeof e=="number",pl=Array.isArray,Mn=(e,t)=>Ae(e)&&e.startsWith(t),Ap=(e,t)=>Ae(e)&&e.endsWith(t),kp=Object.entries,Fn=Object.keys,Lp=Object.values,Sp=e=>{if(e){if(typeof e=="number")return new Date(e);const t=Date.parse(e.toString());if(!Number.isNaN(t))return new Date(t)}return null},Xl=e=>Mn(e,"/");function tn(e){return ni()?(dd(e),!0):!1}function Me(e){return typeof e=="function"?e():pn(e)}const Or=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Op=e=>e!=null,Pp=Object.prototype.toString,xp=e=>Pp.call(e)==="[object Object]",At=()=>{},hl=Rp();function Rp(){var e,t;return Or&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function Zl(e,t){function n(...r){return new Promise((o,l)=>{Promise.resolve(e(()=>t.apply(this,r),{fn:t,thisArg:this,args:r})).then(o).catch(l)})}return n}const Rc=e=>e();function Ip(e,t={}){let n,r,o=At;const l=s=>{clearTimeout(s),o(),o=At};return s=>{const i=Me(e),c=Me(t.maxWait);return n&&l(n),i<=0||c!==void 0&&c<=0?(r&&(l(r),r=null),Promise.resolve(s())):new Promise((d,f)=>{o=t.rejectOnCancel?f:d,c&&!r&&(r=setTimeout(()=>{n&&l(n),r=null,d(s())},c)),n=setTimeout(()=>{r&&l(r),r=null,d(s())},i)})}}function Dp(...e){let t=0,n,r=!0,o=At,l,a,s,i,c;!Ve(e[0])&&typeof e[0]=="object"?{delay:a,trailing:s=!0,leading:i=!0,rejectOnCancel:c=!1}=e[0]:[a,s=!0,i=!0,c=!1]=e;const d=()=>{n&&(clearTimeout(n),n=void 0,o(),o=At)};return p=>{const h=Me(a),v=Date.now()-t,w=()=>l=p();return d(),h<=0?(t=Date.now(),w()):(v>h&&(i||!r)?(t=Date.now(),w()):s&&(l=new Promise((E,b)=>{o=c?b:E,n=setTimeout(()=>{t=Date.now(),r=!0,E(w()),d()},Math.max(0,h-v))})),!i&&!n&&(n=setTimeout(()=>r=!0,h)),r=!1,l)}}function $p(e=Rc){const t=U(!0);function n(){t.value=!1}function r(){t.value=!0}const o=(...l)=>{t.value&&e(...l)};return{isActive:jn(t),pause:n,resume:r,eventFilter:o}}function Mp(e){let t;function n(){return t||(t=e()),t}return n.reset=async()=>{const r=t;t=void 0,r&&await r},n}function Ic(e){return Nn()}function Vp(...e){if(e.length!==1)return uo(...e);const t=e[0];return typeof t=="function"?jn(bi(()=>({get:t,set:At}))):U(t)}function Dc(e,t=200,n={}){return Zl(Ip(t,n),e)}function jp(e,t=200,n=!1,r=!0,o=!1){return Zl(Dp(t,n,r,o),e)}function Np(e,t,n={}){const{eventFilter:r=Rc,...o}=n;return oe(e,Zl(r,t),o)}function Bp(e,t,n={}){const{eventFilter:r,...o}=n,{eventFilter:l,pause:a,resume:s,isActive:i}=$p(r);return{stop:Np(e,t,{...o,eventFilter:l}),pause:a,resume:s,isActive:i}}function Pr(e,t=!0,n){Ic()?de(e,n):t?e():kt(e)}function Hp(e,t){Ic()&&Zt(e,t)}function Fp(e,t,n={}){const{immediate:r=!0}=n,o=U(!1);let l=null;function a(){l&&(clearTimeout(l),l=null)}function s(){o.value=!1,a()}function i(...c){a(),o.value=!0,l=setTimeout(()=>{o.value=!1,l=null,e(...c)},Me(t))}return r&&(o.value=!0,Or&&i()),tn(s),{isPending:jn(o),start:i,stop:s}}function mr(e=!1,t={}){const{truthyValue:n=!0,falsyValue:r=!1}=t,o=Ve(e),l=U(e);function a(s){if(arguments.length)return l.value=s,l.value;{const i=Me(n);return l.value=l.value===i?Me(r):i,l.value}}return o?a:[l,a]}function ze(e){var t;const n=Me(e);return(t=n==null?void 0:n.$el)!=null?t:n}const it=Or?window:void 0,ea=Or?window.document:void 0,$c=Or?window.navigator:void 0;function Ee(...e){let t,n,r,o;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,r,o]=e,t=it):[t,n,r,o]=e,!t)return At;Array.isArray(n)||(n=[n]),Array.isArray(r)||(r=[r]);const l=[],a=()=>{l.forEach(d=>d()),l.length=0},s=(d,f,p,h)=>(d.addEventListener(f,p,h),()=>d.removeEventListener(f,p,h)),i=oe(()=>[ze(t),Me(o)],([d,f])=>{if(a(),!d)return;const p=xp(f)?{...f}:f;l.push(...n.flatMap(h=>r.map(v=>s(d,h,v,p))))},{immediate:!0,flush:"post"}),c=()=>{i(),a()};return tn(c),c}let Ts=!1;function zp(e,t,n={}){const{window:r=it,ignore:o=[],capture:l=!0,detectIframe:a=!1}=n;if(!r)return At;hl&&!Ts&&(Ts=!0,Array.from(r.document.body.children).forEach(p=>p.addEventListener("click",At)),r.document.documentElement.addEventListener("click",At));let s=!0;const i=p=>o.some(h=>{if(typeof h=="string")return Array.from(r.document.querySelectorAll(h)).some(v=>v===p.target||p.composedPath().includes(v));{const v=ze(h);return v&&(p.target===v||p.composedPath().includes(v))}}),d=[Ee(r,"click",p=>{const h=ze(e);if(!(!h||h===p.target||p.composedPath().includes(h))){if(p.detail===0&&(s=!i(p)),!s){s=!0;return}t(p)}},{passive:!0,capture:l}),Ee(r,"pointerdown",p=>{const h=ze(e);s=!i(p)&&!!(h&&!p.composedPath().includes(h))},{passive:!0}),a&&Ee(r,"blur",p=>{setTimeout(()=>{var h;const v=ze(e);((h=r.document.activeElement)==null?void 0:h.tagName)==="IFRAME"&&!(v!=null&&v.contains(r.document.activeElement))&&t(p)},0)})].filter(Boolean);return()=>d.forEach(p=>p())}function qp(){const e=U(!1),t=Nn();return t&&de(()=>{e.value=!0},t),e}function zn(e){const t=qp();return C(()=>(t.value,!!e()))}function Up(e,t,n={}){const{window:r=it,...o}=n;let l;const a=zn(()=>r&&"MutationObserver"in r),s=()=>{l&&(l.disconnect(),l=void 0)},i=C(()=>{const p=Me(e),h=(Array.isArray(p)?p:[p]).map(ze).filter(Op);return new Set(h)}),c=oe(()=>i.value,p=>{s(),a.value&&p.size&&(l=new MutationObserver(t),p.forEach(h=>l.observe(h,o)))},{immediate:!0,flush:"post"}),d=()=>l==null?void 0:l.takeRecords(),f=()=>{s(),c()};return tn(f),{isSupported:a,stop:f,takeRecords:d}}function ta(e,t={}){const{window:n=it}=t,r=zn(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let o;const l=U(!1),a=c=>{l.value=c.matches},s=()=>{o&&("removeEventListener"in o?o.removeEventListener("change",a):o.removeListener(a))},i=Li(()=>{r.value&&(s(),o=n.matchMedia(Me(e)),"addEventListener"in o?o.addEventListener("change",a):o.addListener(a),l.value=o.matches)});return tn(()=>{i(),s(),o=void 0}),l}function Cs(e,t={}){const{controls:n=!1,navigator:r=$c}=t,o=zn(()=>r&&"permissions"in r);let l;const a=typeof e=="string"?{name:e}:e,s=U(),i=()=>{l&&(s.value=l.state)},c=Mp(async()=>{if(o.value){if(!l)try{l=await r.permissions.query(a),Ee(l,"change",i),i()}catch{s.value="prompt"}return l}});return c(),n?{state:s,isSupported:o,query:c}:s}function Wp(e={}){const{navigator:t=$c,read:n=!1,source:r,copiedDuring:o=1500,legacy:l=!1}=e,a=zn(()=>t&&"clipboard"in t),s=Cs("clipboard-read"),i=Cs("clipboard-write"),c=C(()=>a.value||l),d=U(""),f=U(!1),p=Fp(()=>f.value=!1,o);function h(){a.value&&b(s.value)?t.clipboard.readText().then(T=>{d.value=T}):d.value=E()}c.value&&n&&Ee(["copy","cut"],h);async function v(T=Me(r)){c.value&&T!=null&&(a.value&&b(i.value)?await t.clipboard.writeText(T):w(T),d.value=T,f.value=!0,p.start())}function w(T){const _=document.createElement("textarea");_.value=T??"",_.style.position="absolute",_.style.opacity="0",document.body.appendChild(_),_.select(),document.execCommand("copy"),_.remove()}function E(){var T,_,k;return(k=(_=(T=document==null?void 0:document.getSelection)==null?void 0:T.call(document))==null?void 0:_.toString())!=null?k:""}function b(T){return T==="granted"||T==="prompt"}return{isSupported:c,text:d,copied:f,copy:v}}const Hr=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},Fr="__vueuse_ssr_handlers__",Gp=Kp();function Kp(){return Fr in Hr||(Hr[Fr]=Hr[Fr]||{}),Hr[Fr]}function Jp(e,t){return Gp[e]||t}function Yp(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const Qp={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},As="vueuse-storage";function gn(e,t,n,r={}){var o;const{flush:l="pre",deep:a=!0,listenToStorageChanges:s=!0,writeDefaults:i=!0,mergeDefaults:c=!1,shallow:d,window:f=it,eventFilter:p,onError:h=I=>{console.error(I)},initOnMounted:v}=r,w=(d?Le:U)(typeof t=="function"?t():t);if(!n)try{n=Jp("getDefaultStorage",()=>{var I;return(I=it)==null?void 0:I.localStorage})()}catch(I){h(I)}if(!n)return w;const E=Me(t),b=Yp(E),T=(o=r.serializer)!=null?o:Qp[b],{pause:_,resume:k}=Bp(w,()=>D(w.value),{flush:l,deep:a,eventFilter:p});f&&s&&Pr(()=>{Ee(f,"storage",R),Ee(f,As,G),v&&R()}),v||R();function V(I,W){f&&f.dispatchEvent(new CustomEvent(As,{detail:{key:e,oldValue:I,newValue:W,storageArea:n}}))}function D(I){try{const W=n.getItem(e);if(I==null)V(W,null),n.removeItem(e);else{const $=T.write(I);W!==$&&(n.setItem(e,$),V(W,$))}}catch(W){h(W)}}function P(I){const W=I?I.newValue:n.getItem(e);if(W==null)return i&&E!=null&&n.setItem(e,T.write(E)),E;if(!I&&c){const $=T.read(W);return typeof c=="function"?c($,E):b==="object"&&!Array.isArray($)?{...E,...$}:$}else return typeof W!="string"?W:T.read(W)}function R(I){if(!(I&&I.storageArea!==n)){if(I&&I.key==null){w.value=E;return}if(!(I&&I.key!==e)){_();try{(I==null?void 0:I.newValue)!==T.write(w.value)&&(w.value=P(I))}catch(W){h(W)}finally{I?kt(k):k()}}}}function G(I){R(I.detail)}return w}function Xp(e){return ta("(prefers-color-scheme: dark)",e)}function Zp(e,t,n={}){const{window:r=it,...o}=n;let l;const a=zn(()=>r&&"ResizeObserver"in r),s=()=>{l&&(l.disconnect(),l=void 0)},i=C(()=>Array.isArray(e)?e.map(f=>ze(f)):[ze(e)]),c=oe(i,f=>{if(s(),a.value&&r){l=new ResizeObserver(t);for(const p of f)p&&l.observe(p,o)}},{immediate:!0,flush:"post"}),d=()=>{s(),c()};return tn(d),{isSupported:a,stop:d}}function e2(e,t={width:0,height:0},n={}){const{window:r=it,box:o="content-box"}=n,l=C(()=>{var f,p;return(p=(f=ze(e))==null?void 0:f.namespaceURI)==null?void 0:p.includes("svg")}),a=U(t.width),s=U(t.height),{stop:i}=Zp(e,([f])=>{const p=o==="border-box"?f.borderBoxSize:o==="content-box"?f.contentBoxSize:f.devicePixelContentBoxSize;if(r&&l.value){const h=ze(e);if(h){const v=h.getBoundingClientRect();a.value=v.width,s.value=v.height}}else if(p){const h=Array.isArray(p)?p:[p];a.value=h.reduce((v,{inlineSize:w})=>v+w,0),s.value=h.reduce((v,{blockSize:w})=>v+w,0)}else a.value=f.contentRect.width,s.value=f.contentRect.height},n);Pr(()=>{const f=ze(e);f&&(a.value="offsetWidth"in f?f.offsetWidth:t.width,s.value="offsetHeight"in f?f.offsetHeight:t.height)});const c=oe(()=>ze(e),f=>{a.value=f?t.width:0,s.value=f?t.height:0});function d(){i(),c()}return{width:a,height:s,stop:d}}const ks=["fullscreenchange","webkitfullscreenchange","webkitendfullscreen","mozfullscreenchange","MSFullscreenChange"];function na(e,t={}){const{document:n=ea,autoExit:r=!1}=t,o=C(()=>{var b;return(b=ze(e))!=null?b:n==null?void 0:n.querySelector("html")}),l=U(!1),a=C(()=>["requestFullscreen","webkitRequestFullscreen","webkitEnterFullscreen","webkitEnterFullScreen","webkitRequestFullScreen","mozRequestFullScreen","msRequestFullscreen"].find(b=>n&&b in n||o.value&&b in o.value)),s=C(()=>["exitFullscreen","webkitExitFullscreen","webkitExitFullScreen","webkitCancelFullScreen","mozCancelFullScreen","msExitFullscreen"].find(b=>n&&b in n||o.value&&b in o.value)),i=C(()=>["fullScreen","webkitIsFullScreen","webkitDisplayingFullscreen","mozFullScreen","msFullscreenElement"].find(b=>n&&b in n||o.value&&b in o.value)),c=["fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement"].find(b=>n&&b in n),d=zn(()=>o.value&&n&&a.value!==void 0&&s.value!==void 0&&i.value!==void 0),f=()=>c?(n==null?void 0:n[c])===o.value:!1,p=()=>{if(i.value){if(n&&n[i.value]!=null)return n[i.value];{const b=o.value;if((b==null?void 0:b[i.value])!=null)return!!b[i.value]}}return!1};async function h(){if(!(!d.value||!l.value)){if(s.value)if((n==null?void 0:n[s.value])!=null)await n[s.value]();else{const b=o.value;(b==null?void 0:b[s.value])!=null&&await b[s.value]()}l.value=!1}}async function v(){if(!d.value||l.value)return;p()&&await h();const b=o.value;a.value&&(b==null?void 0:b[a.value])!=null&&(await b[a.value](),l.value=!0)}async function w(){await(l.value?h():v())}const E=()=>{const b=p();(!b||b&&f())&&(l.value=b)};return Ee(n,ks,E,!1),Ee(()=>ze(o),ks,E,!1),r&&tn(h),{isSupported:d,isFullscreen:l,enter:v,exit:h,toggle:w}}function Bo(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function k4(e,t,n={}){const{window:r=it}=n;return gn(e,t,r==null?void 0:r.localStorage,n)}function Ho(e,t=At,n={}){const{immediate:r=!0,manual:o=!1,type:l="text/javascript",async:a=!0,crossOrigin:s,referrerPolicy:i,noModule:c,defer:d,document:f=ea,attrs:p={}}=n,h=U(null);let v=null;const w=T=>new Promise((_,k)=>{const V=R=>(h.value=R,_(R),R);if(!f){_(!1);return}let D=!1,P=f.querySelector(`script[src="${Me(e)}"]`);P?P.hasAttribute("data-loaded")&&V(P):(P=f.createElement("script"),P.type=l,P.async=a,P.src=Me(e),d&&(P.defer=d),s&&(P.crossOrigin=s),c&&(P.noModule=c),i&&(P.referrerPolicy=i),Object.entries(p).forEach(([R,G])=>P==null?void 0:P.setAttribute(R,G)),D=!0),P.addEventListener("error",R=>k(R)),P.addEventListener("abort",R=>k(R)),P.addEventListener("load",()=>{P.setAttribute("data-loaded","true"),t(P),V(P)}),D&&(P=f.head.appendChild(P)),T||V(P)}),E=(T=!0)=>(v||(v=w(T)),v),b=()=>{if(!f)return;v=null,h.value&&(h.value=null);const T=f.querySelector(`script[src="${Me(e)}"]`);T&&f.head.removeChild(T)};return r&&!o&&Pr(E),o||Hp(b),{scriptTag:h,load:E,unload:b}}function Mc(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const Fo=new WeakMap;function ra(e,t=!1){const n=U(t);let r=null,o="";oe(Vp(e),s=>{const i=Bo(Me(s));if(i){const c=i;if(Fo.get(c)||Fo.set(c,c.style.overflow),c.style.overflow!=="hidden"&&(o=c.style.overflow),c.style.overflow==="hidden")return n.value=!0;if(n.value)return c.style.overflow="hidden"}},{immediate:!0});const l=()=>{const s=Bo(Me(e));!s||n.value||(hl&&(r=Ee(s,"touchmove",i=>{t2(i)},{passive:!1})),s.style.overflow="hidden",n.value=!0)},a=()=>{const s=Bo(Me(e));!s||!n.value||(hl&&(r==null||r()),s.style.overflow=o,Fo.delete(s),n.value=!1)};return tn(a),C({get(){return n.value},set(s){s?l():a()}})}function Vc(e,t,n={}){const{window:r=it}=n;return gn(e,t,r==null?void 0:r.sessionStorage,n)}let n2=0;function r2(e,t={}){const n=U(!1),{document:r=ea,immediate:o=!0,manual:l=!1,id:a=`vueuse_styletag_${++n2}`}=t,s=U(e);let i=()=>{};const c=()=>{if(!r)return;const f=r.getElementById(a)||r.createElement("style");f.isConnected||(f.id=a,t.media&&(f.media=t.media),r.head.appendChild(f)),!n.value&&(i=oe(s,p=>{f.textContent=p},{immediate:!0}),n.value=!0)},d=()=>{!r||!n.value||(i(),r.head.removeChild(r.getElementById(a)),n.value=!1)};return o&&!l&&Pr(c),l||tn(d),{id:a,css:s,unload:d,load:c,isLoaded:jn(n)}}function o2(e={}){const{window:t=it,behavior:n="auto"}=e;if(!t)return{x:U(0),y:U(0)};const r=U(t.scrollX),o=U(t.scrollY),l=C({get(){return r.value},set(s){scrollTo({left:s,behavior:n})}}),a=C({get(){return o.value},set(s){scrollTo({top:s,behavior:n})}});return Ee(t,"scroll",()=>{r.value=t.scrollX,o.value=t.scrollY},{capture:!1,passive:!0}),{x:l,y:a}}function l2(e={}){const{window:t=it,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:r=Number.POSITIVE_INFINITY,listenOrientation:o=!0,includeScrollbar:l=!0}=e,a=U(n),s=U(r),i=()=>{t&&(l?(a.value=t.innerWidth,s.value=t.innerHeight):(a.value=t.document.documentElement.clientWidth,s.value=t.document.documentElement.clientHeight))};if(i(),Pr(i),Ee("resize",i,{passive:!0}),o){const c=ta("(orientation: portrait)");oe(c,()=>i())}return{width:a,height:s}}const jc=({type:e="info",text:t="",vertical:n,color:r},{slots:o})=>{var l;return u("span",{class:["vp-badge",e,{diy:r}],style:{verticalAlign:n??!1,backgroundColor:r??!1}},((l=o.default)==null?void 0:l.call(o))??t)};jc.displayName="Badge";var a2=z({name:"FontIcon",props:{icon:{type:String,default:""},color:{type:String,default:""},size:{type:[String,Number],default:""}},setup(e){const t=C(()=>{const r=["font-icon icon"],o=`${e.icon}`;return r.push(o),r}),n=C(()=>{const r={};return e.color&&(r.color=e.color),e.size&&(r["font-size"]=Number.isNaN(Number(e.size))?e.size:`${e.size}px`),Fn(r).length?r:null});return()=>e.icon?u("span",{key:e.icon,class:t.value,style:n.value}):null}});const s2=ct({enhance:({app:e})=>{qe("Badge")||e.component("Badge",jc),qe("FontIcon")||e.component("FontIcon",a2)},setup:()=>{Ho("https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6/js/brands.min.js",()=>{},{attrs:{"data-auto-replace-svg":"nest"}}),Ho("https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6/js/solid.min.js",()=>{},{attrs:{"data-auto-replace-svg":"nest"}}),Ho("https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6/js/fontawesome.min.js",()=>{},{attrs:{"data-auto-replace-svg":"nest"}}),r2(`@import url("//at.alicdn.com/t/c/font_4381716_dtn01hmwmvf.css");
-`)},rootComponents:[]}),i2=Object.freeze(Object.defineProperty({__proto__:null,default:s2},Symbol.toStringTag,{value:"Module"})),Ls=async(e,t)=>{const{path:n,query:r}=e.currentRoute.value,{scrollBehavior:o}=e.options;e.options.scrollBehavior=void 0,await e.replace({path:n,query:r,hash:t}),e.options.scrollBehavior=o},c2=({headerLinkSelector:e,headerAnchorSelector:t,delay:n,offset:r=5})=>{const o=Hn();Ee("scroll",Dc(()=>{var v,w;const a=Math.max(window.scrollY,document.documentElement.scrollTop,document.body.scrollTop);if(Math.abs(a-0)f.some(b=>b.hash===E.hash));for(let E=0;E=(((v=b.parentElement)==null?void 0:v.offsetTop)??0)-r,k=!T||a<(((w=T.parentElement)==null?void 0:w.offsetTop)??0)-r;if(!(_&&k))continue;const D=decodeURIComponent(o.currentRoute.value.hash),P=decodeURIComponent(b.hash);if(D===P)return;if(d){for(let R=E+1;RAe(e.title)?{title:e.title}:null;const Bc=Symbol(""),v2=e=>{Nc=e},g2=()=>Ce(Bc),_2=e=>{e.provide(Bc,Nc)};var b2={"/":{title:"目录",empty:"暂无目录"}};const y2=z({name:"Catalog",props:{base:{type:String,default:""},level:{type:Number,default:3},index:Boolean,hideHeading:Boolean},setup(e){const t=g2(),n=en(b2),r=Se(),o=ep(),l=yc(),s=Le(kp(o.value).map(([c,{meta:d}])=>{const f=t(d);if(!f)return null;const p=c.split("/").length;return{level:Ap(c,"/")?p-2:p-1,base:c.replace(/\/[^/]+\/?$/,"/"),path:c,...f}}).filter(c=>Bn(c)&&Ae(c.title))),i=C(()=>{const c=e.base?B1(sc(e.base)):r.value.path.replace(/\/[^/]+$/,"/"),d=c.split("/").length-2,f=[];return s.value.filter(({level:p,path:h})=>{if(!Mn(h,c)||h===c)return!1;if(c==="/"){const v=Fn(l.value.locales).filter(w=>w!=="/");if(h==="/404.html"||v.some(w=>Mn(h,w)))return!1}return p-d<=e.level}).sort(({title:p,level:h,order:v},{title:w,level:E,order:b})=>{const T=h-E;return T||(No(v)?No(b)?v>0?b>0?v-b:-1:b<0?v-b:1:v:No(b)?b:p.localeCompare(w))}).forEach(p=>{var w;const{base:h,level:v}=p;switch(v-d){case 1:{f.push(p);break}case 2:{const E=f.find(b=>b.path===h);E&&(E.children??(E.children=[])).push(p);break}default:{const E=f.find(b=>b.path===h.replace(/\/[^/]+\/$/,"/"));if(E){const b=(w=E.children)==null?void 0:w.find(T=>T.path===h);b&&(b.children??(b.children=[])).push(p)}}}}),f});return()=>{const c=i.value.some(d=>d.children);return u("div",{class:["vp-catalog-wrapper",{index:e.index}]},[e.hideHeading?null:u("h2",{class:"vp-catalog-main-title"},n.value.title),i.value.length?u(e.index?"ol":"ul",{class:["vp-catalogs",{deep:c}]},i.value.map(({children:d=[],title:f,path:p,content:h})=>{const v=u(mt,{class:"vp-catalog-title",to:p},()=>h?u(h):f);return u("li",{class:"vp-catalog"},c?[u("h3",{id:f,class:["vp-catalog-child-title",{"has-children":d.length}]},[u("a",{href:`#${f}`,class:"vp-catalog-header-anchor","aria-hidden":!0},"#"),v]),d.length?u(e.index?"ol":"ul",{class:"vp-child-catalogs"},d.map(({children:w=[],content:E,path:b,title:T})=>u("li",{class:"vp-child-catalog"},[u("div",{class:["vp-catalog-sub-title",{"has-children":w.length}]},[u("a",{href:`#${T}`,class:"vp-catalog-header-anchor"},"#"),u(mt,{class:"vp-catalog-title",to:b},()=>E?u(E):T)]),w.length?u(e.index?"ol":"div",{class:e.index?"vp-sub-catalogs":"vp-sub-catalogs-wrapper"},w.map(({content:_,path:k,title:V})=>e.index?u("li",{class:"vp-sub-catalog"},u(mt,{to:k},()=>_?u(_):V)):u(mt,{class:"vp-sub-catalog-link",to:k},()=>_?u(_):V))):null]))):null]:u("div",{class:"vp-catalog-child-title"},v))})):u("p",{class:"vp-empty-catalog"},n.value.empty)])}}}),E2=ct({enhance:({app:e})=>{_2(e),qe("Catalog",e)||e.component("Catalog",y2)}}),w2=Object.freeze(Object.defineProperty({__proto__:null,default:E2},Symbol.toStringTag,{value:"Module"}));var T2={"/":{backToTop:"返回顶部"}};const C2=z({name:"BackToTop",setup(){const e=we(),t=en(T2),n=Le(),{height:r}=e2(n),{height:o}=l2(),{y:l}=o2(),a=C(()=>e.value.backToTop!==!1&&l.value>100),s=C(()=>l.value/(r.value-o.value)*100);return de(()=>{n.value=document.body}),()=>u(Yt,{name:"back-to-top"},()=>a.value?u("button",{type:"button",class:"vp-back-to-top-button","aria-label":t.value.backToTop,onClick:()=>{window.scrollTo({top:0,behavior:"smooth"})}},[u("span",{class:"vp-scroll-progress",role:"progressbar","aria-labelledby":"loadinglabel","aria-valuenow":s.value},u("svg",u("circle",{cx:"26",cy:"26",r:"24",fill:"none",stroke:"currentColor","stroke-width":"4","stroke-dasharray":`${Math.PI*s.value*.48} ${Math.PI*(100-s.value)*.48}`}))),u("div",{class:"back-to-top-icon"})]):null)}}),A2=ct({rootComponents:[C2]}),k2=Object.freeze(Object.defineProperty({__proto__:null,default:A2},Symbol.toStringTag,{value:"Module"}));/**
+  */const En=typeof document<"u";function W1(e){return e.__esModule||e[Symbol.toStringTag]==="Module"}const ue=Object.assign;function Do(e,t){const n={};for(const r in t){const o=t[r];n[r]=gt(o)?o.map(e):e(o)}return n}const rr=()=>{},gt=Array.isArray,cc=/#/g,G1=/&/g,K1=/\//g,J1=/=/g,Y1=/\?/g,uc=/\+/g,Q1=/%5B/g,X1=/%5D/g,dc=/%5E/g,Z1=/%60/g,fc=/%7B/g,e0=/%7C/g,pc=/%7D/g,t0=/%20/g;function Kl(e){return encodeURI(""+e).replace(e0,"|").replace(Q1,"[").replace(X1,"]")}function n0(e){return Kl(e).replace(fc,"{").replace(pc,"}").replace(dc,"^")}function sl(e){return Kl(e).replace(uc,"%2B").replace(t0,"+").replace(cc,"%23").replace(G1,"%26").replace(Z1,"`").replace(fc,"{").replace(pc,"}").replace(dc,"^")}function r0(e){return sl(e).replace(J1,"%3D")}function o0(e){return Kl(e).replace(cc,"%23").replace(Y1,"%3F")}function l0(e){return e==null?"":o0(e).replace(K1,"%2F")}function pr(e){try{return decodeURIComponent(""+e)}catch{}return""+e}const a0=/\/$/,s0=e=>e.replace(a0,"");function $o(e,t,n="/"){let r,o={},l="",a="";const s=t.indexOf("#");let i=t.indexOf("?");return s=0&&(i=-1),i>-1&&(r=t.slice(0,i),l=t.slice(i+1,s>-1?s:t.length),o=e(l)),s>-1&&(r=r||t.slice(0,s),a=t.slice(s,t.length)),r=d0(r??t,n),{fullPath:r+(l&&"?")+l+a,path:r,query:o,hash:pr(a)}}function i0(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function ss(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function c0(e,t,n){const r=t.matched.length-1,o=n.matched.length-1;return r>-1&&r===o&&Dn(t.matched[r],n.matched[o])&&hc(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function Dn(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function hc(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!u0(e[n],t[n]))return!1;return!0}function u0(e,t){return gt(e)?is(e,t):gt(t)?is(t,e):e===t}function is(e,t){return gt(t)?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function d0(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),r=e.split("/"),o=r[r.length-1];(o===".."||o===".")&&r.push("");let l=n.length-1,a,s;for(a=0;a1&&l--;else break;return n.slice(0,l).join("/")+"/"+r.slice(a).join("/")}var hr;(function(e){e.pop="pop",e.push="push"})(hr||(hr={}));var or;(function(e){e.back="back",e.forward="forward",e.unknown=""})(or||(or={}));function f0(e){if(!e)if(En){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),s0(e)}const p0=/^[^#]+#/;function h0(e,t){return e.replace(p0,"#")+t}function m0(e,t){const n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}const mo=()=>({left:window.scrollX,top:window.scrollY});function v0(e){let t;if("el"in e){const n=e.el,r=typeof n=="string"&&n.startsWith("#"),o=typeof n=="string"?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!o)return;t=m0(o,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function cs(e,t){return(history.state?history.state.position-t:-1)+e}const il=new Map;function g0(e,t){il.set(e,t)}function _0(e){const t=il.get(e);return il.delete(e),t}let b0=()=>location.protocol+"//"+location.host;function mc(e,t){const{pathname:n,search:r,hash:o}=t,l=e.indexOf("#");if(l>-1){let s=o.includes(e.slice(l))?e.slice(l).length:1,i=o.slice(s);return i[0]!=="/"&&(i="/"+i),ss(i,"")}return ss(n,e)+r+o}function y0(e,t,n,r){let o=[],l=[],a=null;const s=({state:p})=>{const h=mc(e,location),v=n.value,w=t.value;let E=0;if(p){if(n.value=h,t.value=p,a&&a===v){a=null;return}E=w?p.position-w.position:0}else r(h);o.forEach(b=>{b(n.value,v,{delta:E,type:hr.pop,direction:E?E>0?or.forward:or.back:or.unknown})})};function i(){a=n.value}function c(p){o.push(p);const h=()=>{const v=o.indexOf(p);v>-1&&o.splice(v,1)};return l.push(h),h}function d(){const{history:p}=window;p.state&&p.replaceState(ue({},p.state,{scroll:mo()}),"")}function f(){for(const p of l)p();l=[],window.removeEventListener("popstate",s),window.removeEventListener("beforeunload",d)}return window.addEventListener("popstate",s),window.addEventListener("beforeunload",d,{passive:!0}),{pauseListeners:i,listen:c,destroy:f}}function us(e,t,n,r=!1,o=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:o?mo():null}}function E0(e){const{history:t,location:n}=window,r={value:mc(e,n)},o={value:t.state};o.value||l(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function l(i,c,d){const f=e.indexOf("#"),p=f>-1?(n.host&&document.querySelector("base")?e:e.slice(f))+i:b0()+e+i;try{t[d?"replaceState":"pushState"](c,"",p),o.value=c}catch(h){console.error(h),n[d?"replace":"assign"](p)}}function a(i,c){const d=ue({},t.state,us(o.value.back,i,o.value.forward,!0),c,{position:o.value.position});l(i,d,!0),r.value=i}function s(i,c){const d=ue({},o.value,t.state,{forward:i,scroll:mo()});l(d.current,d,!0);const f=ue({},us(r.value,i,null),{position:d.position+1},c);l(i,f,!1),r.value=i}return{location:r,state:o,push:s,replace:a}}function w0(e){e=f0(e);const t=E0(e),n=y0(e,t.state,t.location,t.replace);function r(l,a=!0){a||n.pauseListeners(),history.go(l)}const o=ue({location:"",base:e,go:r,createHref:h0.bind(null,e)},t,n);return Object.defineProperty(o,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(o,"state",{enumerable:!0,get:()=>t.state.value}),o}function T0(e){return typeof e=="string"||e&&typeof e=="object"}function vc(e){return typeof e=="string"||typeof e=="symbol"}const Pt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},gc=Symbol("");var ds;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(ds||(ds={}));function $n(e,t){return ue(new Error,{type:e,[gc]:!0},t)}function St(e,t){return e instanceof Error&&gc in e&&(t==null||!!(e.type&t))}const fs="[^/]+?",A0={sensitive:!1,strict:!1,start:!0,end:!0},C0=/[.+*?^${}()[\]/\\]/g;function k0(e,t){const n=ue({},A0,t),r=[];let o=n.start?"^":"";const l=[];for(const c of e){const d=c.length?[]:[90];n.strict&&!c.length&&(o+="/");for(let f=0;ft.length?t.length===1&&t[0]===80?1:-1:0}function _c(e,t){let n=0;const r=e.score,o=t.score;for(;n0&&t[t.length-1]<0}const S0={type:0,value:""},O0=/[a-zA-Z0-9_]/;function P0(e){if(!e)return[[]];if(e==="/")return[[S0]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(h){throw new Error(`ERR (${n})/"${c}": ${h}`)}let n=0,r=n;const o=[];let l;function a(){l&&o.push(l),l=[]}let s=0,i,c="",d="";function f(){c&&(n===0?l.push({type:0,value:c}):n===1||n===2||n===3?(l.length>1&&(i==="*"||i==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),l.push({type:1,value:c,regexp:d,repeatable:i==="*"||i==="+",optional:i==="*"||i==="?"})):t("Invalid state to consume buffer"),c="")}function p(){c+=i}for(;s{a(T)}:rr}function a(d){if(vc(d)){const f=r.get(d);f&&(r.delete(d),n.splice(n.indexOf(f),1),f.children.forEach(a),f.alias.forEach(a))}else{const f=n.indexOf(d);f>-1&&(n.splice(f,1),d.record.name&&r.delete(d.record.name),d.children.forEach(a),d.alias.forEach(a))}}function s(){return n}function i(d){const f=M0(d,n);n.splice(f,0,d),d.record.name&&!ms(d)&&r.set(d.record.name,d)}function c(d,f){let p,h={},v,w;if("name"in d&&d.name){if(p=r.get(d.name),!p)throw $n(1,{location:d});w=p.record.name,h=ue(hs(f.params,p.keys.filter(T=>!T.optional).concat(p.parent?p.parent.keys.filter(T=>T.optional):[]).map(T=>T.name)),d.params&&hs(d.params,p.keys.map(T=>T.name))),v=p.stringify(h)}else if(d.path!=null)v=d.path,p=n.find(T=>T.re.test(v)),p&&(h=p.parse(v),w=p.record.name);else{if(p=f.name?r.get(f.name):n.find(T=>T.re.test(f.path)),!p)throw $n(1,{location:d,currentLocation:f});w=p.record.name,h=ue({},f.params,d.params),v=p.stringify(h)}const E=[];let b=p;for(;b;)E.unshift(b.record),b=b.parent;return{name:w,path:v,params:h,matched:E,meta:$0(E)}}return e.forEach(d=>l(d)),{addRoute:l,resolve:c,removeRoute:a,getRoutes:s,getRecordMatcher:o}}function hs(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function I0(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:D0(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function D0(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const r in e.components)t[r]=typeof n=="object"?n[r]:n;return t}function ms(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function $0(e){return e.reduce((t,n)=>ue(t,n.meta),{})}function vs(e,t){const n={};for(const r in e)n[r]=r in t?t[r]:e[r];return n}function M0(e,t){let n=0,r=t.length;for(;n!==r;){const l=n+r>>1;_c(e,t[l])<0?r=l:n=l+1}const o=V0(e);return o&&(r=t.lastIndexOf(o,r-1)),r}function V0(e){let t=e;for(;t=t.parent;)if(bc(t)&&_c(e,t)===0)return t}function bc({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function j0(e){const t={};if(e===""||e==="?")return t;const r=(e[0]==="?"?e.slice(1):e).split("&");for(let o=0;ol&&sl(l)):[r&&sl(r)]).forEach(l=>{l!==void 0&&(t+=(t.length?"&":"")+n,l!=null&&(t+="="+l))})}return t}function N0(e){const t={};for(const n in e){const r=e[n];r!==void 0&&(t[n]=gt(r)?r.map(o=>o==null?null:""+o):r==null?r:""+r)}return t}const B0=Symbol(""),_s=Symbol(""),vo=Symbol(""),Jl=Symbol(""),cl=Symbol("");function Wn(){let e=[];function t(r){return e.push(r),()=>{const o=e.indexOf(r);o>-1&&e.splice(o,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function Ut(e,t,n,r,o,l=a=>a()){const a=r&&(r.enterCallbacks[o]=r.enterCallbacks[o]||[]);return()=>new Promise((s,i)=>{const c=p=>{p===!1?i($n(4,{from:n,to:t})):p instanceof Error?i(p):T0(p)?i($n(2,{from:t,to:p})):(a&&r.enterCallbacks[o]===a&&typeof p=="function"&&a.push(p),s())},d=l(()=>e.call(r&&r.instances[o],t,n,c));let f=Promise.resolve(d);e.length<3&&(f=f.then(c)),f.catch(p=>i(p))})}function Mo(e,t,n,r,o=l=>l()){const l=[];for(const a of e)for(const s in a.components){let i=a.components[s];if(!(t!=="beforeRouteEnter"&&!a.instances[s]))if(H0(i)){const d=(i.__vccOpts||i)[t];d&&l.push(Ut(d,n,r,a,s,o))}else{let c=i();l.push(()=>c.then(d=>{if(!d)return Promise.reject(new Error(`Couldn't resolve component "${s}" at "${a.path}"`));const f=W1(d)?d.default:d;a.components[s]=f;const h=(f.__vccOpts||f)[t];return h&&Ut(h,n,r,a,s,o)()}))}}return l}function H0(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function bs(e){const t=Ae(vo),n=Ae(Jl),r=A(()=>{const i=pn(e.to);return t.resolve(i)}),o=A(()=>{const{matched:i}=r.value,{length:c}=i,d=i[c-1],f=n.matched;if(!d||!f.length)return-1;const p=f.findIndex(Dn.bind(null,d));if(p>-1)return p;const h=ys(i[c-2]);return c>1&&ys(d)===h&&f[f.length-1].path!==h?f.findIndex(Dn.bind(null,i[c-2])):p}),l=A(()=>o.value>-1&&U0(n.params,r.value.params)),a=A(()=>o.value>-1&&o.value===n.matched.length-1&&hc(n.params,r.value.params));function s(i={}){return q0(i)?t[pn(e.replace)?"replace":"push"](pn(e.to)).catch(rr):Promise.resolve()}return{route:r,href:A(()=>r.value.href),isActive:l,isExactActive:a,navigate:s}}const F0=z({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:bs,setup(e,{slots:t}){const n=Er(bs(e)),{options:r}=Ae(vo),o=A(()=>({[Es(e.activeClass,r.linkActiveClass,"router-link-active")]:n.isActive,[Es(e.exactActiveClass,r.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const l=t.default&&t.default(n);return e.custom?l:u("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:o.value},l)}}}),z0=F0;function q0(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function U0(e,t){for(const n in t){const r=t[n],o=e[n];if(typeof r=="string"){if(r!==o)return!1}else if(!gt(o)||o.length!==r.length||r.some((l,a)=>l!==o[a]))return!1}return!0}function ys(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Es=(e,t,n)=>e??t??n,W0=z({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const r=Ae(cl),o=A(()=>e.route||r.value),l=Ae(_s,0),a=A(()=>{let c=pn(l);const{matched:d}=o.value;let f;for(;(f=d[c])&&!f.components;)c++;return c}),s=A(()=>o.value.matched[a.value]);hn(_s,A(()=>a.value+1)),hn(B0,s),hn(cl,o);const i=U();return oe(()=>[i.value,s.value,e.name],([c,d,f],[p,h,v])=>{d&&(d.instances[f]=c,h&&h!==d&&c&&c===p&&(d.leaveGuards.size||(d.leaveGuards=h.leaveGuards),d.updateGuards.size||(d.updateGuards=h.updateGuards))),c&&d&&(!h||!Dn(d,h)||!p)&&(d.enterCallbacks[f]||[]).forEach(w=>w(c))},{flush:"post"}),()=>{const c=o.value,d=e.name,f=s.value,p=f&&f.components[d];if(!p)return ws(n.default,{Component:p,route:c});const h=f.props[d],v=h?h===!0?c.params:typeof h=="function"?h(c):h:null,E=u(p,ue({},v,t,{onVnodeUnmounted:b=>{b.component.isUnmounted&&(f.instances[d]=null)},ref:i}));return ws(n.default,{Component:E,route:c})||E}}});function ws(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const G0=W0;function K0(e){const t=R0(e.routes,e),n=e.parseQuery||j0,r=e.stringifyQuery||gs,o=e.history,l=Wn(),a=Wn(),s=Wn(),i=Le(Pt);let c=Pt;En&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const d=Do.bind(null,L=>""+L),f=Do.bind(null,l0),p=Do.bind(null,pr);function h(L,F){let B,Y;return vc(L)?(B=t.getRecordMatcher(L),Y=F):Y=L,t.addRoute(Y,B)}function v(L){const F=t.getRecordMatcher(L);F&&t.removeRoute(F)}function w(){return t.getRoutes().map(L=>L.record)}function E(L){return!!t.getRecordMatcher(L)}function b(L,F){if(F=ue({},F||i.value),typeof L=="string"){const g=$o(n,L,F.path),C=t.resolve({path:g.path},F),O=o.createHref(g.fullPath);return ue(g,C,{params:p(C.params),hash:pr(g.hash),redirectedFrom:void 0,href:O})}let B;if(L.path!=null)B=ue({},L,{path:$o(n,L.path,F.path).path});else{const g=ue({},L.params);for(const C in g)g[C]==null&&delete g[C];B=ue({},L,{params:f(g)}),F.params=f(F.params)}const Y=t.resolve(B,F),ae=L.hash||"";Y.params=d(p(Y.params));const pe=i0(r,ue({},L,{hash:n0(ae),path:Y.path})),m=o.createHref(pe);return ue({fullPath:pe,hash:ae,query:r===gs?N0(L.query):L.query||{}},Y,{redirectedFrom:void 0,href:m})}function T(L){return typeof L=="string"?$o(n,L,i.value.path):ue({},L)}function _(L,F){if(c!==L)return $n(8,{from:F,to:L})}function k(L){return P(L)}function V(L){return k(ue(T(L),{replace:!0}))}function D(L){const F=L.matched[L.matched.length-1];if(F&&F.redirect){const{redirect:B}=F;let Y=typeof B=="function"?B(L):B;return typeof Y=="string"&&(Y=Y.includes("?")||Y.includes("#")?Y=T(Y):{path:Y},Y.params={}),ue({query:L.query,hash:L.hash,params:Y.path!=null?{}:L.params},Y)}}function P(L,F){const B=c=b(L),Y=i.value,ae=L.state,pe=L.force,m=L.replace===!0,g=D(B);if(g)return P(ue(T(g),{state:typeof g=="object"?ue({},ae,g.state):ae,force:pe,replace:m}),F||B);const C=B;C.redirectedFrom=F;let O;return!pe&&c0(r,Y,B)&&(O=$n(16,{to:C,from:Y}),Ze(Y,Y,!0,!1)),(O?Promise.resolve(O):I(C,Y)).catch(S=>St(S)?St(S,2)?S:bt(S):J(S,C,Y)).then(S=>{if(S){if(St(S,2))return P(ue({replace:m},T(S.to),{state:typeof S.to=="object"?ue({},ae,S.to.state):ae,force:pe}),F||C)}else S=$(C,Y,!0,m,ae);return W(C,Y,S),S})}function R(L,F){const B=_(L,F);return B?Promise.reject(B):Promise.resolve()}function G(L){const F=Lt.values().next().value;return F&&typeof F.runWithContext=="function"?F.runWithContext(L):L()}function I(L,F){let B;const[Y,ae,pe]=J0(L,F);B=Mo(Y.reverse(),"beforeRouteLeave",L,F);for(const g of Y)g.leaveGuards.forEach(C=>{B.push(Ut(C,L,F))});const m=R.bind(null,L,F);return B.push(m),Pe(B).then(()=>{B=[];for(const g of l.list())B.push(Ut(g,L,F));return B.push(m),Pe(B)}).then(()=>{B=Mo(ae,"beforeRouteUpdate",L,F);for(const g of ae)g.updateGuards.forEach(C=>{B.push(Ut(C,L,F))});return B.push(m),Pe(B)}).then(()=>{B=[];for(const g of pe)if(g.beforeEnter)if(gt(g.beforeEnter))for(const C of g.beforeEnter)B.push(Ut(C,L,F));else B.push(Ut(g.beforeEnter,L,F));return B.push(m),Pe(B)}).then(()=>(L.matched.forEach(g=>g.enterCallbacks={}),B=Mo(pe,"beforeRouteEnter",L,F,G),B.push(m),Pe(B))).then(()=>{B=[];for(const g of a.list())B.push(Ut(g,L,F));return B.push(m),Pe(B)}).catch(g=>St(g,8)?g:Promise.reject(g))}function W(L,F,B){s.list().forEach(Y=>G(()=>Y(L,F,B)))}function $(L,F,B,Y,ae){const pe=_(L,F);if(pe)return pe;const m=F===Pt,g=En?history.state:{};B&&(Y||m?o.replace(L.fullPath,ue({scroll:m&&g&&g.scroll},ae)):o.push(L.fullPath,ae)),i.value=L,Ze(L,F,B,m),bt()}let ee;function Te(){ee||(ee=o.listen((L,F,B)=>{if(!yt.listening)return;const Y=b(L),ae=D(Y);if(ae){P(ue(ae,{replace:!0}),Y).catch(rr);return}c=Y;const pe=i.value;En&&g0(cs(pe.fullPath,B.delta),mo()),I(Y,pe).catch(m=>St(m,12)?m:St(m,2)?(P(m.to,Y).then(g=>{St(g,20)&&!B.delta&&B.type===hr.pop&&o.go(-1,!1)}).catch(rr),Promise.reject()):(B.delta&&o.go(-B.delta,!1),J(m,Y,pe))).then(m=>{m=m||$(Y,pe,!1),m&&(B.delta&&!St(m,8)?o.go(-B.delta,!1):B.type===hr.pop&&St(m,20)&&o.go(-1,!1)),W(Y,pe,m)}).catch(rr)}))}let _e=Wn(),K=Wn(),te;function J(L,F,B){bt(L);const Y=K.list();return Y.length?Y.forEach(ae=>ae(L,F,B)):console.error(L),Promise.reject(L)}function Oe(){return te&&i.value!==Pt?Promise.resolve():new Promise((L,F)=>{_e.add([L,F])})}function bt(L){return te||(te=!L,Te(),_e.list().forEach(([F,B])=>L?B(L):F()),_e.reset()),L}function Ze(L,F,B,Y){const{scrollBehavior:ae}=e;if(!En||!ae)return Promise.resolve();const pe=!B&&_0(cs(L.fullPath,0))||(Y||!B)&&history.state&&history.state.scroll||null;return kt().then(()=>ae(L,F,pe)).then(m=>m&&v0(m)).catch(m=>J(m,L,F))}const Ie=L=>o.go(L);let Ge;const Lt=new Set,yt={currentRoute:i,listening:!0,addRoute:h,removeRoute:v,hasRoute:E,getRoutes:w,resolve:b,options:e,push:k,replace:V,go:Ie,back:()=>Ie(-1),forward:()=>Ie(1),beforeEach:l.add,beforeResolve:a.add,afterEach:s.add,onError:K.add,isReady:Oe,install(L){const F=this;L.component("RouterLink",z0),L.component("RouterView",G0),L.config.globalProperties.$router=F,Object.defineProperty(L.config.globalProperties,"$route",{enumerable:!0,get:()=>pn(i)}),En&&!Ge&&i.value===Pt&&(Ge=!0,k(o.location).catch(ae=>{}));const B={};for(const ae in Pt)Object.defineProperty(B,ae,{get:()=>i.value[ae],enumerable:!0});L.provide(vo,F),L.provide(Jl,hi(B)),L.provide(cl,i);const Y=L.unmount;Lt.add(L),L.unmount=function(){Lt.delete(L),Lt.size<1&&(c=Pt,ee&&ee(),ee=null,i.value=Pt,Ge=!1,te=!1),Y()}}};function Pe(L){return L.reduce((F,B)=>F.then(()=>G(B)),Promise.resolve())}return yt}function J0(e,t){const n=[],r=[],o=[],l=Math.max(t.matched.length,e.matched.length);for(let a=0;aDn(c,s))?r.push(s):n.push(s));const i=e.matched[a];i&&(t.matched.find(c=>Dn(c,i))||o.push(i))}return[n,r,o]}function Hn(){return Ae(vo)}function Dt(){return Ae(Jl)}var Yl=Symbol(""),_t=()=>{const e=Ae(Yl);if(!e)throw new Error("useClientData() is called without provider.");return e},Y0=()=>_t().pageComponent,Se=()=>_t().pageData,we=()=>_t().pageFrontmatter,Q0=()=>_t().pageHead,Ql=()=>_t().pageLang,X0=()=>_t().pageLayout,vn=()=>_t().routeLocale,Z0=()=>_t().routePath,ep=()=>_t().routes,yc=()=>_t().siteData,go=()=>_t().siteLocaleData,tp=Symbol(""),ul=Le(q1),On=Le(U1),Ec=(e,t)=>{const n=I1(e,t);if(On.value[n])return n;const r=encodeURI(n);if(On.value[r])return r;const o=ul.value[n]||ul.value[r];return o||n},Rt=(e,t)=>{const{pathname:n,hashAndQueries:r}=ac(e),o=Ec(n,t),l=o+r;return On.value[o]?{...On.value[o],path:l,notFound:!1}:{...On.value["/404.html"],path:l,notFound:!0}},np=(e,t)=>{const{pathname:n,hashAndQueries:r}=ac(e);return Ec(n,t)+r},rp=e=>{if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget){const t=e.currentTarget.getAttribute("target");if(t!=null&&t.match(/\b_blank\b/i))return}return e.preventDefault(),!0}},mt=z({name:"RouteLink",props:{to:{type:String,required:!0},active:Boolean,activeClass:{type:String,default:"route-link-active"}},slots:Object,setup(e,{slots:t}){const n=Hn(),r=Dt(),o=A(()=>e.to.startsWith("#")||e.to.startsWith("?")?e.to:`/${np(e.to,r.path).substring(1)}`);return()=>{var l;return u("a",{class:["route-link",{[e.activeClass]:e.active}],href:o.value,onClick:(a={})=>{rp(a)&&n.push(e.to).catch()}},(l=t.default)==null?void 0:l.call(t))}}}),op=z({name:"AutoLink",props:{config:{type:Object,required:!0}},slots:Object,setup(e,{slots:t}){const n=uo(e,"config"),r=Dt(),o=yc(),l=A(()=>kr(n.value.link)),a=A(()=>n.value.target||(l.value?"_blank":void 0)),s=A(()=>a.value==="_blank"),i=A(()=>!l.value&&!s.value),c=A(()=>n.value.rel||(s.value?"noopener noreferrer":null)),d=A(()=>n.value.ariaLabel??n.value.text),f=A(()=>{if(n.value.exact)return!1;const h=Object.keys(o.value.locales);return h.length?h.every(v=>v!==n.value.link):n.value.link!=="/"}),p=A(()=>i.value?n.value.activeMatch?(n.value.activeMatch instanceof RegExp?n.value.activeMatch:new RegExp(n.value.activeMatch,"u")).test(r.path):f.value?r.path.startsWith(n.value.link):r.path===n.value.link:!1);return()=>{const{before:h,after:v,default:w}=t,E=(w==null?void 0:w(n.value))||[h==null?void 0:h(n.value),n.value.text,v==null?void 0:v(n.value)];return i.value?u(mt,{class:"auto-link",to:n.value.link,active:p.value,"aria-label":d.value},()=>E):u("a",{class:"auto-link external-link",href:n.value.link,"aria-label":d.value,rel:c.value,target:a.value},E)}}}),_o=z({name:"ClientOnly",setup(e,t){const n=U(!1);return de(()=>{n.value=!0}),()=>{var r,o;return n.value?(o=(r=t.slots).default)==null?void 0:o.call(r):null}}}),wc=z({name:"Content",props:{path:{type:String,required:!1,default:""}},setup(e){const t=Y0(),n=A(()=>{if(!e.path)return t.value;const r=Rt(e.path);return Hl(()=>r.loader().then(({comp:o})=>o))});return()=>u(n.value)}}),lp="Layout",ap="en-US",an=Er({resolveLayouts:e=>e.reduce((t,n)=>({...t,...n.layouts}),{}),resolvePageHead:(e,t,n)=>{const r=Ce(t.description)?t.description:n.description,o=[...Array.isArray(t.head)?t.head:[],...n.head,["title",{},e],["meta",{name:"description",content:r}]];return N1(o)},resolvePageHeadTitle:(e,t)=>[e.title,t.title].filter(n=>!!n).join(" | "),resolvePageLang:(e,t)=>e.lang||t.lang||ap,resolvePageLayout:(e,t)=>{const n=Ce(e.frontmatter.layout)?e.frontmatter.layout:lp;if(!t[n])throw new Error(`[vuepress] Cannot resolve layout: ${n}`);return t[n]},resolveRouteLocale:(e,t)=>D1(e,decodeURI(t)),resolveSiteLocaleData:({base:e,locales:t,...n},r)=>{var o;return{...n,...t[r],head:[...((o=t[r])==null?void 0:o.head)??[],...n.head??[]]}}}),ct=(e={})=>e,je=e=>Lr(e)?e:`/${ic(e)}`;const sp=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),en=e=>{const t=vn();return A(()=>e[t.value]??{})};var Qe=Uint8Array,An=Uint16Array,ip=Int32Array,Tc=new Qe([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),Ac=new Qe([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),cp=new Qe([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Cc=function(e,t){for(var n=new An(31),r=0;r<31;++r)n[r]=t+=1<>1|(ve&21845)<<1;jt=(jt&52428)>>2|(jt&13107)<<2,jt=(jt&61680)>>4|(jt&3855)<<4,dl[ve]=((jt&65280)>>8|(jt&255)<<8)>>1}var lr=function(e,t,n){for(var r=e.length,o=0,l=new An(t);o>i]=c}else for(s=new An(r),o=0;o>15-e[o]);return s},Sr=new Qe(288);for(var ve=0;ve<144;++ve)Sr[ve]=8;for(var ve=144;ve<256;++ve)Sr[ve]=9;for(var ve=256;ve<280;++ve)Sr[ve]=7;for(var ve=280;ve<288;++ve)Sr[ve]=8;var Sc=new Qe(32);for(var ve=0;ve<32;++ve)Sc[ve]=5;var pp=lr(Sr,9,1),hp=lr(Sc,5,1),Vo=function(e){for(var t=e[0],n=1;nt&&(t=e[n]);return t},dt=function(e,t,n){var r=t/8|0;return(e[r]|e[r+1]<<8)>>(t&7)&n},jo=function(e,t){var n=t/8|0;return(e[n]|e[n+1]<<8|e[n+2]<<16)>>(t&7)},mp=function(e){return(e+7)/8|0},Oc=function(e,t,n){return(t==null||t<0)&&(t=0),(n==null||n>e.length)&&(n=e.length),new Qe(e.subarray(t,n))},vp=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],nt=function(e,t,n){var r=new Error(t||vp[e]);if(r.code=e,Error.captureStackTrace&&Error.captureStackTrace(r,nt),!n)throw r;return r},gp=function(e,t,n,r){var o=e.length,l=0;if(!o||t.f&&!t.l)return n||new Qe(0);var a=!n,s=a||t.i!=2,i=t.i;a&&(n=new Qe(o*3));var c=function(ae){var pe=n.length;if(ae>pe){var m=new Qe(Math.max(pe*2,ae));m.set(n),n=m}},d=t.f||0,f=t.p||0,p=t.b||0,h=t.l,v=t.d,w=t.m,E=t.n,b=o*8;do{if(!h){d=dt(e,f,1);var T=dt(e,f+1,3);if(f+=3,T)if(T==1)h=pp,v=hp,w=9,E=5;else if(T==2){var D=dt(e,f,31)+257,P=dt(e,f+10,15)+4,R=D+dt(e,f+5,31)+1;f+=14;for(var G=new Qe(R),I=new Qe(19),W=0;W>4;if(_<16)G[W++]=_;else{var K=0,te=0;for(_==16?(te=3+dt(e,f,3),f+=2,K=G[W-1]):_==17?(te=3+dt(e,f,7),f+=3):_==18&&(te=11+dt(e,f,127),f+=7);te--;)G[W++]=K}}var J=G.subarray(0,D),Oe=G.subarray(D);w=Vo(J),E=Vo(Oe),h=lr(J,w,1),v=lr(Oe,E,1)}else nt(1);else{var _=mp(f)+4,k=e[_-4]|e[_-3]<<8,V=_+k;if(V>o){i&&nt(0);break}s&&c(p+k),n.set(e.subarray(_,V),p),t.b=p+=k,t.p=f=V*8,t.f=d;continue}if(f>b){i&&nt(0);break}}s&&c(p+131072);for(var bt=(1<>4;if(f+=K&15,f>b){i&&nt(0);break}if(K||nt(2),Ge<256)n[p++]=Ge;else if(Ge==256){Ie=f,h=null;break}else{var Lt=Ge-254;if(Ge>264){var W=Ge-257,yt=Tc[W];Lt=dt(e,f,(1<>4;Pe||nt(3),f+=Pe&15;var Oe=fp[L];if(L>3){var yt=Ac[L];Oe+=jo(e,f)&(1<b){i&&nt(0);break}s&&c(p+131072);var F=p+Lt;if(p>4>7||(e[0]<<8|e[1])%31)&&nt(6,"invalid zlib data"),(e[1]>>5&1)==+!t&&nt(6,"invalid zlib data: "+(e[1]&32?"need":"unexpected")+" dictionary"),(e[1]>>3&4)+2};function yp(e,t){return gp(e.subarray(bp(e,t),-4),{i:2},t,t)}var fl=typeof TextDecoder<"u"&&new TextDecoder,Ep=0;try{fl.decode(_p,{stream:!0}),Ep=1}catch{}var wp=function(e){for(var t="",n=0;;){var r=e[n++],o=(r>127)+(r>223)+(r>239);if(n+o>e.length)return{s:t,r:Oc(e,n-1)};o?o==3?(r=((r&15)<<18|(e[n++]&63)<<12|(e[n++]&63)<<6|e[n++]&63)-65536,t+=String.fromCharCode(55296|r>>10,56320|r&1023)):o&1?t+=String.fromCharCode((r&31)<<6|e[n++]&63):t+=String.fromCharCode((r&15)<<12|(e[n++]&63)<<6|e[n++]&63):t+=String.fromCharCode(r)}};function Tp(e,t){{for(var n=new Qe(e.length),r=0;r{const t=atob(e);return Ap(yp(Tp(t)))},qe=(e,t)=>{var r;const n=(r=(t==null?void 0:t._instance)||Nn())==null?void 0:r.appContext.components;return n?e in n||st(e)in n||yr(st(e))in n:!1},Pc=e=>new Promise(t=>setTimeout(t,e)),xc=e=>typeof e<"u",No=e=>typeof e=="number",pl=Array.isArray,Mn=(e,t)=>Ce(e)&&e.startsWith(t),Cp=(e,t)=>Ce(e)&&e.endsWith(t),kp=Object.entries,Fn=Object.keys,Lp=Object.values,Sp=e=>{if(e){if(typeof e=="number")return new Date(e);const t=Date.parse(e.toString());if(!Number.isNaN(t))return new Date(t)}return null},Xl=e=>Mn(e,"/");function tn(e){return ni()?(dd(e),!0):!1}function Me(e){return typeof e=="function"?e():pn(e)}const Or=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Op=e=>e!=null,Pp=Object.prototype.toString,xp=e=>Pp.call(e)==="[object Object]",Ct=()=>{},hl=Rp();function Rp(){var e,t;return Or&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function Zl(e,t){function n(...r){return new Promise((o,l)=>{Promise.resolve(e(()=>t.apply(this,r),{fn:t,thisArg:this,args:r})).then(o).catch(l)})}return n}const Rc=e=>e();function Ip(e,t={}){let n,r,o=Ct;const l=s=>{clearTimeout(s),o(),o=Ct};return s=>{const i=Me(e),c=Me(t.maxWait);return n&&l(n),i<=0||c!==void 0&&c<=0?(r&&(l(r),r=null),Promise.resolve(s())):new Promise((d,f)=>{o=t.rejectOnCancel?f:d,c&&!r&&(r=setTimeout(()=>{n&&l(n),r=null,d(s())},c)),n=setTimeout(()=>{r&&l(r),r=null,d(s())},i)})}}function Dp(...e){let t=0,n,r=!0,o=Ct,l,a,s,i,c;!Ve(e[0])&&typeof e[0]=="object"?{delay:a,trailing:s=!0,leading:i=!0,rejectOnCancel:c=!1}=e[0]:[a,s=!0,i=!0,c=!1]=e;const d=()=>{n&&(clearTimeout(n),n=void 0,o(),o=Ct)};return p=>{const h=Me(a),v=Date.now()-t,w=()=>l=p();return d(),h<=0?(t=Date.now(),w()):(v>h&&(i||!r)?(t=Date.now(),w()):s&&(l=new Promise((E,b)=>{o=c?b:E,n=setTimeout(()=>{t=Date.now(),r=!0,E(w()),d()},Math.max(0,h-v))})),!i&&!n&&(n=setTimeout(()=>r=!0,h)),r=!1,l)}}function $p(e=Rc){const t=U(!0);function n(){t.value=!1}function r(){t.value=!0}const o=(...l)=>{t.value&&e(...l)};return{isActive:jn(t),pause:n,resume:r,eventFilter:o}}function Mp(e){let t;function n(){return t||(t=e()),t}return n.reset=async()=>{const r=t;t=void 0,r&&await r},n}function Ic(e){return Nn()}function Vp(...e){if(e.length!==1)return uo(...e);const t=e[0];return typeof t=="function"?jn(bi(()=>({get:t,set:Ct}))):U(t)}function Dc(e,t=200,n={}){return Zl(Ip(t,n),e)}function jp(e,t=200,n=!1,r=!0,o=!1){return Zl(Dp(t,n,r,o),e)}function Np(e,t,n={}){const{eventFilter:r=Rc,...o}=n;return oe(e,Zl(r,t),o)}function Bp(e,t,n={}){const{eventFilter:r,...o}=n,{eventFilter:l,pause:a,resume:s,isActive:i}=$p(r);return{stop:Np(e,t,{...o,eventFilter:l}),pause:a,resume:s,isActive:i}}function Pr(e,t=!0,n){Ic()?de(e,n):t?e():kt(e)}function Hp(e,t){Ic()&&Zt(e,t)}function Fp(e,t,n={}){const{immediate:r=!0}=n,o=U(!1);let l=null;function a(){l&&(clearTimeout(l),l=null)}function s(){o.value=!1,a()}function i(...c){a(),o.value=!0,l=setTimeout(()=>{o.value=!1,l=null,e(...c)},Me(t))}return r&&(o.value=!0,Or&&i()),tn(s),{isPending:jn(o),start:i,stop:s}}function mr(e=!1,t={}){const{truthyValue:n=!0,falsyValue:r=!1}=t,o=Ve(e),l=U(e);function a(s){if(arguments.length)return l.value=s,l.value;{const i=Me(n);return l.value=l.value===i?Me(r):i,l.value}}return o?a:[l,a]}function ze(e){var t;const n=Me(e);return(t=n==null?void 0:n.$el)!=null?t:n}const it=Or?window:void 0,ea=Or?window.document:void 0,$c=Or?window.navigator:void 0;function Ee(...e){let t,n,r,o;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,r,o]=e,t=it):[t,n,r,o]=e,!t)return Ct;Array.isArray(n)||(n=[n]),Array.isArray(r)||(r=[r]);const l=[],a=()=>{l.forEach(d=>d()),l.length=0},s=(d,f,p,h)=>(d.addEventListener(f,p,h),()=>d.removeEventListener(f,p,h)),i=oe(()=>[ze(t),Me(o)],([d,f])=>{if(a(),!d)return;const p=xp(f)?{...f}:f;l.push(...n.flatMap(h=>r.map(v=>s(d,h,v,p))))},{immediate:!0,flush:"post"}),c=()=>{i(),a()};return tn(c),c}let Ts=!1;function zp(e,t,n={}){const{window:r=it,ignore:o=[],capture:l=!0,detectIframe:a=!1}=n;if(!r)return Ct;hl&&!Ts&&(Ts=!0,Array.from(r.document.body.children).forEach(p=>p.addEventListener("click",Ct)),r.document.documentElement.addEventListener("click",Ct));let s=!0;const i=p=>o.some(h=>{if(typeof h=="string")return Array.from(r.document.querySelectorAll(h)).some(v=>v===p.target||p.composedPath().includes(v));{const v=ze(h);return v&&(p.target===v||p.composedPath().includes(v))}}),d=[Ee(r,"click",p=>{const h=ze(e);if(!(!h||h===p.target||p.composedPath().includes(h))){if(p.detail===0&&(s=!i(p)),!s){s=!0;return}t(p)}},{passive:!0,capture:l}),Ee(r,"pointerdown",p=>{const h=ze(e);s=!i(p)&&!!(h&&!p.composedPath().includes(h))},{passive:!0}),a&&Ee(r,"blur",p=>{setTimeout(()=>{var h;const v=ze(e);((h=r.document.activeElement)==null?void 0:h.tagName)==="IFRAME"&&!(v!=null&&v.contains(r.document.activeElement))&&t(p)},0)})].filter(Boolean);return()=>d.forEach(p=>p())}function qp(){const e=U(!1),t=Nn();return t&&de(()=>{e.value=!0},t),e}function zn(e){const t=qp();return A(()=>(t.value,!!e()))}function Up(e,t,n={}){const{window:r=it,...o}=n;let l;const a=zn(()=>r&&"MutationObserver"in r),s=()=>{l&&(l.disconnect(),l=void 0)},i=A(()=>{const p=Me(e),h=(Array.isArray(p)?p:[p]).map(ze).filter(Op);return new Set(h)}),c=oe(()=>i.value,p=>{s(),a.value&&p.size&&(l=new MutationObserver(t),p.forEach(h=>l.observe(h,o)))},{immediate:!0,flush:"post"}),d=()=>l==null?void 0:l.takeRecords(),f=()=>{s(),c()};return tn(f),{isSupported:a,stop:f,takeRecords:d}}function ta(e,t={}){const{window:n=it}=t,r=zn(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let o;const l=U(!1),a=c=>{l.value=c.matches},s=()=>{o&&("removeEventListener"in o?o.removeEventListener("change",a):o.removeListener(a))},i=Li(()=>{r.value&&(s(),o=n.matchMedia(Me(e)),"addEventListener"in o?o.addEventListener("change",a):o.addListener(a),l.value=o.matches)});return tn(()=>{i(),s(),o=void 0}),l}function As(e,t={}){const{controls:n=!1,navigator:r=$c}=t,o=zn(()=>r&&"permissions"in r);let l;const a=typeof e=="string"?{name:e}:e,s=U(),i=()=>{l&&(s.value=l.state)},c=Mp(async()=>{if(o.value){if(!l)try{l=await r.permissions.query(a),Ee(l,"change",i),i()}catch{s.value="prompt"}return l}});return c(),n?{state:s,isSupported:o,query:c}:s}function Wp(e={}){const{navigator:t=$c,read:n=!1,source:r,copiedDuring:o=1500,legacy:l=!1}=e,a=zn(()=>t&&"clipboard"in t),s=As("clipboard-read"),i=As("clipboard-write"),c=A(()=>a.value||l),d=U(""),f=U(!1),p=Fp(()=>f.value=!1,o);function h(){a.value&&b(s.value)?t.clipboard.readText().then(T=>{d.value=T}):d.value=E()}c.value&&n&&Ee(["copy","cut"],h);async function v(T=Me(r)){c.value&&T!=null&&(a.value&&b(i.value)?await t.clipboard.writeText(T):w(T),d.value=T,f.value=!0,p.start())}function w(T){const _=document.createElement("textarea");_.value=T??"",_.style.position="absolute",_.style.opacity="0",document.body.appendChild(_),_.select(),document.execCommand("copy"),_.remove()}function E(){var T,_,k;return(k=(_=(T=document==null?void 0:document.getSelection)==null?void 0:T.call(document))==null?void 0:_.toString())!=null?k:""}function b(T){return T==="granted"||T==="prompt"}return{isSupported:c,text:d,copied:f,copy:v}}const Hr=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},Fr="__vueuse_ssr_handlers__",Gp=Kp();function Kp(){return Fr in Hr||(Hr[Fr]=Hr[Fr]||{}),Hr[Fr]}function Jp(e,t){return Gp[e]||t}function Yp(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const Qp={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},Cs="vueuse-storage";function gn(e,t,n,r={}){var o;const{flush:l="pre",deep:a=!0,listenToStorageChanges:s=!0,writeDefaults:i=!0,mergeDefaults:c=!1,shallow:d,window:f=it,eventFilter:p,onError:h=I=>{console.error(I)},initOnMounted:v}=r,w=(d?Le:U)(typeof t=="function"?t():t);if(!n)try{n=Jp("getDefaultStorage",()=>{var I;return(I=it)==null?void 0:I.localStorage})()}catch(I){h(I)}if(!n)return w;const E=Me(t),b=Yp(E),T=(o=r.serializer)!=null?o:Qp[b],{pause:_,resume:k}=Bp(w,()=>D(w.value),{flush:l,deep:a,eventFilter:p});f&&s&&Pr(()=>{Ee(f,"storage",R),Ee(f,Cs,G),v&&R()}),v||R();function V(I,W){f&&f.dispatchEvent(new CustomEvent(Cs,{detail:{key:e,oldValue:I,newValue:W,storageArea:n}}))}function D(I){try{const W=n.getItem(e);if(I==null)V(W,null),n.removeItem(e);else{const $=T.write(I);W!==$&&(n.setItem(e,$),V(W,$))}}catch(W){h(W)}}function P(I){const W=I?I.newValue:n.getItem(e);if(W==null)return i&&E!=null&&n.setItem(e,T.write(E)),E;if(!I&&c){const $=T.read(W);return typeof c=="function"?c($,E):b==="object"&&!Array.isArray($)?{...E,...$}:$}else return typeof W!="string"?W:T.read(W)}function R(I){if(!(I&&I.storageArea!==n)){if(I&&I.key==null){w.value=E;return}if(!(I&&I.key!==e)){_();try{(I==null?void 0:I.newValue)!==T.write(w.value)&&(w.value=P(I))}catch(W){h(W)}finally{I?kt(k):k()}}}}function G(I){R(I.detail)}return w}function Xp(e){return ta("(prefers-color-scheme: dark)",e)}function Zp(e,t,n={}){const{window:r=it,...o}=n;let l;const a=zn(()=>r&&"ResizeObserver"in r),s=()=>{l&&(l.disconnect(),l=void 0)},i=A(()=>Array.isArray(e)?e.map(f=>ze(f)):[ze(e)]),c=oe(i,f=>{if(s(),a.value&&r){l=new ResizeObserver(t);for(const p of f)p&&l.observe(p,o)}},{immediate:!0,flush:"post"}),d=()=>{s(),c()};return tn(d),{isSupported:a,stop:d}}function e2(e,t={width:0,height:0},n={}){const{window:r=it,box:o="content-box"}=n,l=A(()=>{var f,p;return(p=(f=ze(e))==null?void 0:f.namespaceURI)==null?void 0:p.includes("svg")}),a=U(t.width),s=U(t.height),{stop:i}=Zp(e,([f])=>{const p=o==="border-box"?f.borderBoxSize:o==="content-box"?f.contentBoxSize:f.devicePixelContentBoxSize;if(r&&l.value){const h=ze(e);if(h){const v=h.getBoundingClientRect();a.value=v.width,s.value=v.height}}else if(p){const h=Array.isArray(p)?p:[p];a.value=h.reduce((v,{inlineSize:w})=>v+w,0),s.value=h.reduce((v,{blockSize:w})=>v+w,0)}else a.value=f.contentRect.width,s.value=f.contentRect.height},n);Pr(()=>{const f=ze(e);f&&(a.value="offsetWidth"in f?f.offsetWidth:t.width,s.value="offsetHeight"in f?f.offsetHeight:t.height)});const c=oe(()=>ze(e),f=>{a.value=f?t.width:0,s.value=f?t.height:0});function d(){i(),c()}return{width:a,height:s,stop:d}}const ks=["fullscreenchange","webkitfullscreenchange","webkitendfullscreen","mozfullscreenchange","MSFullscreenChange"];function na(e,t={}){const{document:n=ea,autoExit:r=!1}=t,o=A(()=>{var b;return(b=ze(e))!=null?b:n==null?void 0:n.querySelector("html")}),l=U(!1),a=A(()=>["requestFullscreen","webkitRequestFullscreen","webkitEnterFullscreen","webkitEnterFullScreen","webkitRequestFullScreen","mozRequestFullScreen","msRequestFullscreen"].find(b=>n&&b in n||o.value&&b in o.value)),s=A(()=>["exitFullscreen","webkitExitFullscreen","webkitExitFullScreen","webkitCancelFullScreen","mozCancelFullScreen","msExitFullscreen"].find(b=>n&&b in n||o.value&&b in o.value)),i=A(()=>["fullScreen","webkitIsFullScreen","webkitDisplayingFullscreen","mozFullScreen","msFullscreenElement"].find(b=>n&&b in n||o.value&&b in o.value)),c=["fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement"].find(b=>n&&b in n),d=zn(()=>o.value&&n&&a.value!==void 0&&s.value!==void 0&&i.value!==void 0),f=()=>c?(n==null?void 0:n[c])===o.value:!1,p=()=>{if(i.value){if(n&&n[i.value]!=null)return n[i.value];{const b=o.value;if((b==null?void 0:b[i.value])!=null)return!!b[i.value]}}return!1};async function h(){if(!(!d.value||!l.value)){if(s.value)if((n==null?void 0:n[s.value])!=null)await n[s.value]();else{const b=o.value;(b==null?void 0:b[s.value])!=null&&await b[s.value]()}l.value=!1}}async function v(){if(!d.value||l.value)return;p()&&await h();const b=o.value;a.value&&(b==null?void 0:b[a.value])!=null&&(await b[a.value](),l.value=!0)}async function w(){await(l.value?h():v())}const E=()=>{const b=p();(!b||b&&f())&&(l.value=b)};return Ee(n,ks,E,!1),Ee(()=>ze(o),ks,E,!1),r&&tn(h),{isSupported:d,isFullscreen:l,enter:v,exit:h,toggle:w}}function Bo(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function k4(e,t,n={}){const{window:r=it}=n;return gn(e,t,r==null?void 0:r.localStorage,n)}function Ho(e,t=Ct,n={}){const{immediate:r=!0,manual:o=!1,type:l="text/javascript",async:a=!0,crossOrigin:s,referrerPolicy:i,noModule:c,defer:d,document:f=ea,attrs:p={}}=n,h=U(null);let v=null;const w=T=>new Promise((_,k)=>{const V=R=>(h.value=R,_(R),R);if(!f){_(!1);return}let D=!1,P=f.querySelector(`script[src="${Me(e)}"]`);P?P.hasAttribute("data-loaded")&&V(P):(P=f.createElement("script"),P.type=l,P.async=a,P.src=Me(e),d&&(P.defer=d),s&&(P.crossOrigin=s),c&&(P.noModule=c),i&&(P.referrerPolicy=i),Object.entries(p).forEach(([R,G])=>P==null?void 0:P.setAttribute(R,G)),D=!0),P.addEventListener("error",R=>k(R)),P.addEventListener("abort",R=>k(R)),P.addEventListener("load",()=>{P.setAttribute("data-loaded","true"),t(P),V(P)}),D&&(P=f.head.appendChild(P)),T||V(P)}),E=(T=!0)=>(v||(v=w(T)),v),b=()=>{if(!f)return;v=null,h.value&&(h.value=null);const T=f.querySelector(`script[src="${Me(e)}"]`);T&&f.head.removeChild(T)};return r&&!o&&Pr(E),o||Hp(b),{scriptTag:h,load:E,unload:b}}function Mc(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const Fo=new WeakMap;function ra(e,t=!1){const n=U(t);let r=null,o="";oe(Vp(e),s=>{const i=Bo(Me(s));if(i){const c=i;if(Fo.get(c)||Fo.set(c,c.style.overflow),c.style.overflow!=="hidden"&&(o=c.style.overflow),c.style.overflow==="hidden")return n.value=!0;if(n.value)return c.style.overflow="hidden"}},{immediate:!0});const l=()=>{const s=Bo(Me(e));!s||n.value||(hl&&(r=Ee(s,"touchmove",i=>{t2(i)},{passive:!1})),s.style.overflow="hidden",n.value=!0)},a=()=>{const s=Bo(Me(e));!s||!n.value||(hl&&(r==null||r()),s.style.overflow=o,Fo.delete(s),n.value=!1)};return tn(a),A({get(){return n.value},set(s){s?l():a()}})}function Vc(e,t,n={}){const{window:r=it}=n;return gn(e,t,r==null?void 0:r.sessionStorage,n)}let n2=0;function r2(e,t={}){const n=U(!1),{document:r=ea,immediate:o=!0,manual:l=!1,id:a=`vueuse_styletag_${++n2}`}=t,s=U(e);let i=()=>{};const c=()=>{if(!r)return;const f=r.getElementById(a)||r.createElement("style");f.isConnected||(f.id=a,t.media&&(f.media=t.media),r.head.appendChild(f)),!n.value&&(i=oe(s,p=>{f.textContent=p},{immediate:!0}),n.value=!0)},d=()=>{!r||!n.value||(i(),r.head.removeChild(r.getElementById(a)),n.value=!1)};return o&&!l&&Pr(c),l||tn(d),{id:a,css:s,unload:d,load:c,isLoaded:jn(n)}}function o2(e={}){const{window:t=it,behavior:n="auto"}=e;if(!t)return{x:U(0),y:U(0)};const r=U(t.scrollX),o=U(t.scrollY),l=A({get(){return r.value},set(s){scrollTo({left:s,behavior:n})}}),a=A({get(){return o.value},set(s){scrollTo({top:s,behavior:n})}});return Ee(t,"scroll",()=>{r.value=t.scrollX,o.value=t.scrollY},{capture:!1,passive:!0}),{x:l,y:a}}function l2(e={}){const{window:t=it,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:r=Number.POSITIVE_INFINITY,listenOrientation:o=!0,includeScrollbar:l=!0}=e,a=U(n),s=U(r),i=()=>{t&&(l?(a.value=t.innerWidth,s.value=t.innerHeight):(a.value=t.document.documentElement.clientWidth,s.value=t.document.documentElement.clientHeight))};if(i(),Pr(i),Ee("resize",i,{passive:!0}),o){const c=ta("(orientation: portrait)");oe(c,()=>i())}return{width:a,height:s}}const jc=({type:e="info",text:t="",vertical:n,color:r},{slots:o})=>{var l;return u("span",{class:["vp-badge",e,{diy:r}],style:{verticalAlign:n??!1,backgroundColor:r??!1}},((l=o.default)==null?void 0:l.call(o))??t)};jc.displayName="Badge";var a2=z({name:"FontIcon",props:{icon:{type:String,default:""},color:{type:String,default:""},size:{type:[String,Number],default:""}},setup(e){const t=A(()=>{const r=["font-icon icon"],o=`${e.icon}`;return r.push(o),r}),n=A(()=>{const r={};return e.color&&(r.color=e.color),e.size&&(r["font-size"]=Number.isNaN(Number(e.size))?e.size:`${e.size}px`),Fn(r).length?r:null});return()=>e.icon?u("span",{key:e.icon,class:t.value,style:n.value}):null}});const s2=ct({enhance:({app:e})=>{qe("Badge")||e.component("Badge",jc),qe("FontIcon")||e.component("FontIcon",a2)},setup:()=>{Ho("https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6/js/brands.min.js",()=>{},{attrs:{"data-auto-replace-svg":"nest"}}),Ho("https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6/js/solid.min.js",()=>{},{attrs:{"data-auto-replace-svg":"nest"}}),Ho("https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6/js/fontawesome.min.js",()=>{},{attrs:{"data-auto-replace-svg":"nest"}}),r2(`@import url("//at.alicdn.com/t/c/font_4381716_dtn01hmwmvf.css");
+`)},rootComponents:[]}),i2=Object.freeze(Object.defineProperty({__proto__:null,default:s2},Symbol.toStringTag,{value:"Module"})),Ls=async(e,t)=>{const{path:n,query:r}=e.currentRoute.value,{scrollBehavior:o}=e.options;e.options.scrollBehavior=void 0,await e.replace({path:n,query:r,hash:t}),e.options.scrollBehavior=o},c2=({headerLinkSelector:e,headerAnchorSelector:t,delay:n,offset:r=5})=>{const o=Hn();Ee("scroll",Dc(()=>{var v,w;const a=Math.max(window.scrollY,document.documentElement.scrollTop,document.body.scrollTop);if(Math.abs(a-0)f.some(b=>b.hash===E.hash));for(let E=0;E=(((v=b.parentElement)==null?void 0:v.offsetTop)??0)-r,k=!T||a<(((w=T.parentElement)==null?void 0:w.offsetTop)??0)-r;if(!(_&&k))continue;const D=decodeURIComponent(o.currentRoute.value.hash),P=decodeURIComponent(b.hash);if(D===P)return;if(d){for(let R=E+1;RCe(e.title)?{title:e.title}:null;const Bc=Symbol(""),v2=e=>{Nc=e},g2=()=>Ae(Bc),_2=e=>{e.provide(Bc,Nc)};var b2={"/":{title:"目录",empty:"暂无目录"}};const y2=z({name:"Catalog",props:{base:{type:String,default:""},level:{type:Number,default:3},index:Boolean,hideHeading:Boolean},setup(e){const t=g2(),n=en(b2),r=Se(),o=ep(),l=yc(),s=Le(kp(o.value).map(([c,{meta:d}])=>{const f=t(d);if(!f)return null;const p=c.split("/").length;return{level:Cp(c,"/")?p-2:p-1,base:c.replace(/\/[^/]+\/?$/,"/"),path:c,...f}}).filter(c=>Bn(c)&&Ce(c.title))),i=A(()=>{const c=e.base?B1(sc(e.base)):r.value.path.replace(/\/[^/]+$/,"/"),d=c.split("/").length-2,f=[];return s.value.filter(({level:p,path:h})=>{if(!Mn(h,c)||h===c)return!1;if(c==="/"){const v=Fn(l.value.locales).filter(w=>w!=="/");if(h==="/404.html"||v.some(w=>Mn(h,w)))return!1}return p-d<=e.level}).sort(({title:p,level:h,order:v},{title:w,level:E,order:b})=>{const T=h-E;return T||(No(v)?No(b)?v>0?b>0?v-b:-1:b<0?v-b:1:v:No(b)?b:p.localeCompare(w))}).forEach(p=>{var w;const{base:h,level:v}=p;switch(v-d){case 1:{f.push(p);break}case 2:{const E=f.find(b=>b.path===h);E&&(E.children??(E.children=[])).push(p);break}default:{const E=f.find(b=>b.path===h.replace(/\/[^/]+\/$/,"/"));if(E){const b=(w=E.children)==null?void 0:w.find(T=>T.path===h);b&&(b.children??(b.children=[])).push(p)}}}}),f});return()=>{const c=i.value.some(d=>d.children);return u("div",{class:["vp-catalog-wrapper",{index:e.index}]},[e.hideHeading?null:u("h2",{class:"vp-catalog-main-title"},n.value.title),i.value.length?u(e.index?"ol":"ul",{class:["vp-catalogs",{deep:c}]},i.value.map(({children:d=[],title:f,path:p,content:h})=>{const v=u(mt,{class:"vp-catalog-title",to:p},()=>h?u(h):f);return u("li",{class:"vp-catalog"},c?[u("h3",{id:f,class:["vp-catalog-child-title",{"has-children":d.length}]},[u("a",{href:`#${f}`,class:"vp-catalog-header-anchor","aria-hidden":!0},"#"),v]),d.length?u(e.index?"ol":"ul",{class:"vp-child-catalogs"},d.map(({children:w=[],content:E,path:b,title:T})=>u("li",{class:"vp-child-catalog"},[u("div",{class:["vp-catalog-sub-title",{"has-children":w.length}]},[u("a",{href:`#${T}`,class:"vp-catalog-header-anchor"},"#"),u(mt,{class:"vp-catalog-title",to:b},()=>E?u(E):T)]),w.length?u(e.index?"ol":"div",{class:e.index?"vp-sub-catalogs":"vp-sub-catalogs-wrapper"},w.map(({content:_,path:k,title:V})=>e.index?u("li",{class:"vp-sub-catalog"},u(mt,{to:k},()=>_?u(_):V)):u(mt,{class:"vp-sub-catalog-link",to:k},()=>_?u(_):V))):null]))):null]:u("div",{class:"vp-catalog-child-title"},v))})):u("p",{class:"vp-empty-catalog"},n.value.empty)])}}}),E2=ct({enhance:({app:e})=>{_2(e),qe("Catalog",e)||e.component("Catalog",y2)}}),w2=Object.freeze(Object.defineProperty({__proto__:null,default:E2},Symbol.toStringTag,{value:"Module"}));var T2={"/":{backToTop:"返回顶部"}};const A2=z({name:"BackToTop",setup(){const e=we(),t=en(T2),n=Le(),{height:r}=e2(n),{height:o}=l2(),{y:l}=o2(),a=A(()=>e.value.backToTop!==!1&&l.value>100),s=A(()=>l.value/(r.value-o.value)*100);return de(()=>{n.value=document.body}),()=>u(Yt,{name:"back-to-top"},()=>a.value?u("button",{type:"button",class:"vp-back-to-top-button","aria-label":t.value.backToTop,onClick:()=>{window.scrollTo({top:0,behavior:"smooth"})}},[u("span",{class:"vp-scroll-progress",role:"progressbar","aria-labelledby":"loadinglabel","aria-valuenow":s.value},u("svg",u("circle",{cx:"26",cy:"26",r:"24",fill:"none",stroke:"currentColor","stroke-width":"4","stroke-dasharray":`${Math.PI*s.value*.48} ${Math.PI*(100-s.value)*.48}`}))),u("div",{class:"back-to-top-icon"})]):null)}}),C2=ct({rootComponents:[A2]}),k2=Object.freeze(Object.defineProperty({__proto__:null,default:C2},Symbol.toStringTag,{value:"Module"}));/**
  * NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress
  * @license MIT
- */const se={settings:{minimum:.08,easing:"ease",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,barSelector:'[role="bar"]',parent:"body",template:'
'},status:null,set:e=>{const t=se.isStarted();e=zo(e,se.settings.minimum,1),se.status=e===1?null:e;const n=se.render(!t),r=n.querySelector(se.settings.barSelector),o=se.settings.speed,l=se.settings.easing;return n.offsetWidth,L2(a=>{zr(r,{transform:"translate3d("+Ss(e)+"%,0,0)",transition:"all "+o+"ms "+l}),e===1?(zr(n,{transition:"none",opacity:"1"}),n.offsetWidth,setTimeout(()=>{zr(n,{transition:"all "+o+"ms linear",opacity:"0"}),setTimeout(()=>{se.remove(),a()},o)},o)):setTimeout(()=>a(),o)}),se},isStarted:()=>typeof se.status=="number",start:()=>{se.status||se.set(0);const e=()=>{setTimeout(()=>{se.status&&(se.trickle(),e())},se.settings.trickleSpeed)};return se.settings.trickle&&e(),se},done:e=>!e&&!se.status?se:se.inc(.3+.5*Math.random()).set(1),inc:e=>{let t=se.status;return t?(typeof e!="number"&&(e=(1-t)*zo(Math.random()*t,.1,.95)),t=zo(t+e,0,.994),se.set(t)):se.start()},trickle:()=>se.inc(Math.random()*se.settings.trickleRate),render:e=>{if(se.isRendered())return document.getElementById("nprogress");Os(document.documentElement,"nprogress-busy");const t=document.createElement("div");t.id="nprogress",t.innerHTML=se.settings.template;const n=t.querySelector(se.settings.barSelector),r=e?"-100":Ss(se.status||0),o=document.querySelector(se.settings.parent);return zr(n,{transition:"all 0 linear",transform:"translate3d("+r+"%,0,0)"}),o!==document.body&&Os(o,"nprogress-custom-parent"),o==null||o.appendChild(t),t},remove:()=>{Ps(document.documentElement,"nprogress-busy"),Ps(document.querySelector(se.settings.parent),"nprogress-custom-parent");const e=document.getElementById("nprogress");e&&S2(e)},isRendered:()=>!!document.getElementById("nprogress")},zo=(e,t,n)=>en?n:e,Ss=e=>(-1+e)*100,L2=function(){const e=[];function t(){const n=e.shift();n&&n(t)}return function(n){e.push(n),e.length===1&&t()}}(),zr=function(){const e=["Webkit","O","Moz","ms"],t={};function n(a){return a.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,function(s,i){return i.toUpperCase()})}function r(a){const s=document.body.style;if(a in s)return a;let i=e.length;const c=a.charAt(0).toUpperCase()+a.slice(1);let d;for(;i--;)if(d=e[i]+c,d in s)return d;return a}function o(a){return a=n(a),t[a]??(t[a]=r(a))}function l(a,s,i){s=o(s),a.style[s]=i}return function(a,s){for(const i in s){const c=s[i];c!==void 0&&Object.prototype.hasOwnProperty.call(s,i)&&l(a,i,c)}}}(),Hc=(e,t)=>(typeof e=="string"?e:oa(e)).indexOf(" "+t+" ")>=0,Os=(e,t)=>{const n=oa(e),r=n+t;Hc(n,t)||(e.className=r.substring(1))},Ps=(e,t)=>{const n=oa(e);if(!Hc(e,t))return;const r=n.replace(" "+t+" "," ");e.className=r.substring(1,r.length-1)},oa=e=>(" "+(e.className||"")+" ").replace(/\s+/gi," "),S2=e=>{e&&e.parentNode&&e.parentNode.removeChild(e)},O2=()=>{de(()=>{const e=Hn(),t=new Set;t.add(e.currentRoute.value.path),e.beforeEach(n=>{t.has(n.path)||se.start()}),e.afterEach(n=>{t.add(n.path),se.done()})})},P2=ct({setup(){O2()}}),x2=Object.freeze(Object.defineProperty({__proto__:null,default:P2},Symbol.toStringTag,{value:"Module"})),R2=JSON.parse(`{"encrypt":{"config":{}},"editLink":false,"pageInfo":["Date","Word","Tag"],"logo":"/logo.png","repo":"GuoXiCheng","docsDir":"src","docsBranch":"master","footer":"Made With vuepress-theme-hope Theme
Copyright © 2023-present GuoXiCheng","displayFooter":true,"locales":{"/":{"lang":"zh-CN","navbarLocales":{"langName":"简体中文","selectLangAriaLabel":"选择语言"},"metaLocales":{"author":"作者","date":"写作日期","origin":"原创","views":"访问量","category":"分类","tag":"标签","readingTime":"阅读时间","words":"字数","toc":"此页内容","prev":"上一页","next":"下一页","lastUpdated":"上次编辑于","contributors":"贡献者","editLink":"编辑此页","print":"打印"},"outlookLocales":{"themeColor":"主题色","darkmode":"外观","fullscreen":"全屏"},"encryptLocales":{"iconLabel":"文章已加密","placeholder":"输入密码","remember":"记住密码","errorHint":"请输入正确的密码"},"routeLocales":{"skipToContent":"跳至主要內容","notFoundTitle":"页面不存在","notFoundMsg":["这里什么也没有","我们是怎么来到这儿的?","这 是 四 零 四 !","看起来你访问了一个失效的链接"],"back":"返回上一页","home":"带我回家","openInNewWindow":"Open in new window"},"sidebar":{"/knowledge":"structure","/reading":"structure","/design-pattern":"structure","/develop":"structure","/article":"structure"},"navbar":["/article/","/reading/","/develop/","/design-pattern/",{"text":"站外链接","icon":"code","children":[{"text":"SKIP","link":"https://skip.guoxicheng.top"},{"text":"TinyCRUD","link":"https://tinycrud.guoxicheng.top"},{"text":"JSFullStack","link":"https://js.guoxicheng.top"}]}]}}}`),I2=U(R2),Fc=()=>I2,zc=Symbol(""),D2=()=>{const e=Ce(zc);if(!e)throw new Error("useThemeLocaleData() is called without provider.");return e},$2=(e,t)=>{const{locales:n,...r}=e;return{...r,...n==null?void 0:n[t]}},M2=ct({enhance({app:e}){const t=Fc(),n=e._context.provides[Yl],r=C(()=>$2(t.value,n.routeLocale.value));e.provide(zc,r),Object.defineProperties(e.config.globalProperties,{$theme:{get(){return t.value}},$themeLocale:{get(){return r.value}}})}}),V2=Object.freeze(Object.defineProperty({__proto__:null,default:M2},Symbol.toStringTag,{value:"Module"}));var j2={provider:"Giscus",lightTheme:"https://unpkg.com/vuepress-theme-hope@2.0.0-rc.48/templates/giscus/light.css",darkTheme:"https://unpkg.com/vuepress-theme-hope@2.0.0-rc.48/templates/giscus/dark.css",repo:"GuoXiCheng/guoxicheng.github.io",repoId:"MDEwOlJlcG9zaXRvcnkyNTQ1Nzk0ODc=",category:"Announcements",categoryId:"DIC_kwDODyyTH84Cdco8",strict:!0,lazyLoading:!0,reactionsEnabled:!0};const N2=j2,B2=U(N2),qc=Symbol(""),Uc=()=>Ce(qc),H2=Uc,F2=e=>{e.provide(qc,B2)},Wc=()=>u("svg",{xmlns:"http://www.w3.org/2000/svg",width:"32",height:"32",preserveAspectRatio:"xMidYMid",viewBox:"0 0 100 100"},[u("circle",{cx:"28",cy:"75",r:"11",fill:"currentColor"},u("animate",{attributeName:"fill-opacity",begin:"0s",dur:"1s",keyTimes:"0;0.2;1",repeatCount:"indefinite",values:"0;1;1"})),u("path",{fill:"none",stroke:"#88baf0","stroke-width":"10",d:"M28 47a28 28 0 0 1 28 28"},u("animate",{attributeName:"stroke-opacity",begin:"0.1s",dur:"1s",keyTimes:"0;0.2;1",repeatCount:"indefinite",values:"0;1;1"})),u("path",{fill:"none",stroke:"#88baf0","stroke-width":"10",d:"M28 25a50 50 0 0 1 50 50"},u("animate",{attributeName:"stroke-opacity",begin:"0.2s",dur:"1s",keyTimes:"0;0.2;1",repeatCount:"indefinite",values:"0;1;1"}))]);Wc.displayName="LoadingIcon";const xs=["ar","ca","da","de","en","eo","es","fa","fr","he","id","it","ja","ko","nl","pl","pt","ro","ru","th","tr","uk","uz","vi","zh-CN","zh-TW"],z2=z({name:"GiscusComment",props:{identifier:{type:String,required:!0},darkmode:Boolean},setup(e){const t=H2(),n=Ql(),r=C(()=>!!(t.value.repo&&t.value.repoId&&t.value.category&&t.value.categoryId)),o=U(!1),l=C(()=>{if(xs.includes(n.value))return n.value;const s=n.value.split("-")[0];return xs.includes(s)?s:"en"}),a=C(()=>({repo:t.value.repo,repoId:t.value.repoId,category:t.value.category,categoryId:t.value.categoryId,lang:l.value,theme:e.darkmode?t.value.darkTheme||"dark":t.value.lightTheme||"light",mapping:t.value.mapping||"pathname",term:e.identifier,inputPosition:t.value.inputPosition||"top",reactionsEnabled:t.value.reactionsEnabled===!1?"0":"1",strict:t.value.strict===!1?"0":"1",loading:t.value.lazyLoading===!1?"eager":"lazy",emitMetadata:"0"}));return de(async()=>{await y(()=>import("./giscus-D-fkNSKD.js"),[]),o.value=!0}),()=>r.value?u("div",{id:"comment",class:["giscus-wrapper",{"input-top":t.value.inputPosition!=="bottom"}]},o.value?u("giscus-widget",a.value):u(Wc)):null}}),q2=z({name:"CommentService",props:{darkmode:Boolean},setup(e){const t=Uc(),n=Se(),r=we(),o=C(()=>t.value.comment!==!1),l=C(()=>r.value.comment||o.value&&r.value.comment!==!1);return()=>u(z2,{id:"vp-comment",identifier:r.value.commentID||n.value.path,darkmode:e.darkmode,style:{display:l.value?"block":"none"}})}}),U2=ct({enhance:({app:e})=>{F2(e),e.component("CommentService",q2)}}),W2=Object.freeze(Object.defineProperty({__proto__:null,default:U2},Symbol.toStringTag,{value:"Module"})),G2=/language-(shellscript|shell|bash|sh|zsh)/,K2=({delay:e=500,duration:t=2e3,locales:n,selector:r,showInMobile:o,ignoreSelector:l=[],transform:a})=>{const s=ta("(max-width: 419px)"),i=C(()=>!s.value||o),c=en(n),d=Se(),f=E=>{var T;if(E.hasAttribute("copy-code-registered"))return;const b=document.createElement("button");b.type="button",b.classList.add("vp-copy-code-button"),b.setAttribute("aria-label",c.value.copy),b.setAttribute("data-copied",c.value.copied),(T=E.parentElement)==null||T.insertBefore(b,E),E.setAttribute("copy-code-registered","")};oe(()=>[d.value.path,i.value],async()=>{document.body.classList.toggle("copy-code-disabled",!i.value),i.value&&(await kt(),await Pc(e),document.querySelectorAll(r.join(",")).forEach(f))},{immediate:!0});const{copy:h}=Wp({legacy:!0}),v=new WeakMap,w=(E,b,T)=>{const _=b.cloneNode(!0);l.length&&_.querySelectorAll(l.join(",")).forEach(V=>V.remove()),a&&a(_);let k=_.textContent||"";G2.test(E.className)&&(k=k.replace(/^ *(\$|>) /gm,"")),h(k).then(()=>{if(t<=0)return;T.classList.add("copied"),clearTimeout(v.get(T));const V=setTimeout(()=>{T.classList.remove("copied"),T.blur(),v.delete(T)},t);v.set(T,V)})};Ee("click",E=>{const b=E.target;if(i.value&&b.matches('div[class*="language-"] > button.vp-copy-code-button')){const T=b.parentElement,_=b.nextElementSibling;if(!T||!_)return;w(T,_,b)}})};var J2={"/":{copy:"复制代码",copied:"已复制"}},Y2=['.theme-hope-content div[class*="language-"] pre'];const Q2=ct({setup:()=>{K2({selector:Y2,locales:J2,duration:2e3,delay:500,showInMobile:!1})}}),X2=Object.freeze(Object.defineProperty({__proto__:null,default:Q2},Symbol.toStringTag,{value:"Module"})),qr=gn("VUEPRESS_CODE_TAB_STORE",{});var Z2=z({name:"CodeTabs",props:{active:{type:Number,default:0},data:{type:Array,required:!0},id:{type:String,required:!0},tabId:{type:String,default:""}},slots:Object,setup(e,{slots:t}){const n=U(e.active),r=Le([]),o=()=>{e.tabId&&(qr.value[e.tabId]=e.data[n.value].id)},l=(c=n.value)=>{n.value=c{n.value=c>0?c-1:r.value.length-1,r.value[n.value].focus()},s=(c,d)=>{c.key===" "||c.key==="Enter"?(c.preventDefault(),n.value=d):c.key==="ArrowRight"?(c.preventDefault(),l()):c.key==="ArrowLeft"&&(c.preventDefault(),a()),e.tabId&&(qr.value[e.tabId]=e.data[n.value].id)},i=()=>{if(e.tabId){const c=e.data.findIndex(({id:d})=>qr.value[e.tabId]===d);if(c!==-1)return c}return e.active};return de(()=>{n.value=i(),oe(()=>qr.value[e.tabId],(c,d)=>{if(e.tabId&&c!==d){const f=e.data.findIndex(({id:p})=>p===c);f!==-1&&(n.value=f)}})}),()=>e.data.length?u("div",{class:"vp-code-tabs"},[u("div",{class:"vp-code-tabs-nav",role:"tablist"},e.data.map(({id:c},d)=>{const f=d===n.value;return u("button",{type:"button",ref:p=>{p&&(r.value[d]=p)},class:["vp-code-tab-nav",{active:f}],role:"tab","aria-controls":`codetab-${e.id}-${d}`,"aria-selected":f,onClick:()=>{n.value=d,o()},onKeydown:p=>s(p,d)},t[`title${d}`]({value:c,isActive:f}))})),e.data.map(({id:c},d)=>{const f=d===n.value;return u("div",{class:["vp-code-tab",{active:f}],id:`codetab-${e.id}-${d}`,role:"tabpanel","aria-expanded":f},[u("div",{class:"vp-code-tab-title"},t[`title${d}`]({value:c,isActive:f})),t[`tab${d}`]({value:c,isActive:f})])})]):null}});const Gc=({active:e=!1},{slots:t})=>{var n;return u("div",{class:["code-group-item",{active:e}],"aria-selected":e},(n=t.default)==null?void 0:n.call(t))};Gc.displayName="CodeGroupItem";const e3=z({name:"CodeGroup",slots:Object,setup(e,{slots:t}){const n=U(-1),r=Le([]),o=(s=n.value)=>{n.value=s{n.value=s>0?s-1:r.value.length-1,r.value[n.value].focus()},a=(s,i)=>{s.key===" "||s.key==="Enter"?(s.preventDefault(),n.value=i):s.key==="ArrowRight"?(s.preventDefault(),o(i)):s.key==="ArrowLeft"&&(s.preventDefault(),l(i))};return()=>{var i;const s=(((i=t.default)==null?void 0:i.call(t))||[]).filter(c=>c.type.name==="CodeGroupItem").map(c=>(c.props===null&&(c.props={}),c));return s.length===0?null:(n.value<0||n.value>s.length-1?(n.value=s.findIndex(c=>"active"in c.props),n.value===-1&&(n.value=0)):s.forEach((c,d)=>{c.props.active=d===n.value}),u("div",{class:"code-group"},[u("div",{class:"code-group-nav"},s.map((c,d)=>{const f=d===n.value;return u("button",{type:"button",ref:p=>{p&&(r.value[d]=p)},class:["code-group-nav-tab",{active:f}],"aria-pressed":f,"aria-expanded":f,onClick:()=>{n.value=d},onKeydown:p=>a(p,d)},c.props.title)})),s]))}}}),ge=({name:e="",color:t="currentColor",ariaLabel:n},{attrs:r,slots:o})=>{var l;return u("svg",{xmlns:"http://www.w3.org/2000/svg",class:["icon",`${e}-icon`],viewBox:"0 0 1024 1024",fill:t,"aria-label":n??`${e} icon`,...r},(l=o.default)==null?void 0:l.call(o))};ge.displayName="IconBase";const la=({size:e=48,stroke:t=4,wrapper:n=!0,height:r=2*e})=>{const o=u("svg",{xmlns:"http://www.w3.org/2000/svg",width:e,height:e,preserveAspectRatio:"xMidYMid",viewBox:"25 25 50 50"},[u("animateTransform",{attributeName:"transform",type:"rotate",dur:"2s",keyTimes:"0;1",repeatCount:"indefinite",values:"0;360"}),u("circle",{cx:"50",cy:"50",r:"20",fill:"none",stroke:"currentColor","stroke-width":t,"stroke-linecap":"round"},[u("animate",{attributeName:"stroke-dasharray",dur:"1.5s",keyTimes:"0;0.5;1",repeatCount:"indefinite",values:"1,200;90,200;1,200"}),u("animate",{attributeName:"stroke-dashoffset",dur:"1.5s",keyTimes:"0;0.5;1",repeatCount:"indefinite",values:"0;-35px;-125px"})])]);return n?u("div",{class:"loading-icon-wrapper",style:`display:flex;align-items:center;justify-content:center;height:${r}px`},o):o};la.displayName="LoadingIcon";const bo=(e,{slots:t})=>{var n;return(n=t.default)==null?void 0:n.call(t)},t3=e=>Lr(e)?e:`https://github.com/${e}`,aa=(e="")=>!Lr(e)||/github\.com/.test(e)?"GitHub":/bitbucket\.org/.test(e)?"Bitbucket":/gitlab\.com/.test(e)?"GitLab":/gitee\.com/.test(e)?"Gitee":null,Kc=()=>u(ge,{name:"github"},()=>u("path",{d:"M511.957 21.333C241.024 21.333 21.333 240.981 21.333 512c0 216.832 140.544 400.725 335.574 465.664 24.49 4.395 32.256-10.07 32.256-23.083 0-11.69.256-44.245 0-85.205-136.448 29.61-164.736-64.64-164.736-64.64-22.315-56.704-54.4-71.765-54.4-71.765-44.587-30.464 3.285-29.824 3.285-29.824 49.195 3.413 75.179 50.517 75.179 50.517 43.776 75.008 114.816 53.333 142.762 40.79 4.523-31.66 17.152-53.377 31.19-65.537-108.971-12.458-223.488-54.485-223.488-242.602 0-53.547 19.114-97.323 50.517-131.67-5.035-12.33-21.93-62.293 4.779-129.834 0 0 41.258-13.184 134.912 50.346a469.803 469.803 0 0 1 122.88-16.554c41.642.213 83.626 5.632 122.88 16.554 93.653-63.488 134.784-50.346 134.784-50.346 26.752 67.541 9.898 117.504 4.864 129.834 31.402 34.347 50.474 78.123 50.474 131.67 0 188.586-114.73 230.016-224.042 242.09 17.578 15.232 33.578 44.672 33.578 90.454v135.85c0 13.142 7.936 27.606 32.854 22.87C862.25 912.597 1002.667 728.747 1002.667 512c0-271.019-219.648-490.667-490.71-490.667z"}));Kc.displayName="GitHubIcon";const Jc=()=>u(ge,{name:"gitee"},()=>u("path",{d:"M512 992C246.92 992 32 777.08 32 512S246.92 32 512 32s480 214.92 480 480-214.92 480-480 480zm242.97-533.34H482.39a23.7 23.7 0 0 0-23.7 23.7l-.03 59.28c0 13.08 10.59 23.7 23.7 23.7h165.96a23.7 23.7 0 0 1 23.7 23.7v11.85a71.1 71.1 0 0 1-71.1 71.1H375.71a23.7 23.7 0 0 1-23.7-23.7V423.11a71.1 71.1 0 0 1 71.1-71.1h331.8a23.7 23.7 0 0 0 23.7-23.7l.06-59.25a23.73 23.73 0 0 0-23.7-23.73H423.11a177.78 177.78 0 0 0-177.78 177.75v331.83c0 13.08 10.62 23.7 23.7 23.7h349.62a159.99 159.99 0 0 0 159.99-159.99V482.33a23.7 23.7 0 0 0-23.7-23.7z"}));Jc.displayName="GiteeIcon";const Yc=()=>u(ge,{name:"bitbucket"},()=>u("path",{d:"M575.256 490.862c6.29 47.981-52.005 85.723-92.563 61.147-45.714-20.004-45.714-92.562-1.133-113.152 38.29-23.442 93.696 7.424 93.696 52.005zm63.451-11.996c-10.276-81.152-102.29-134.839-177.152-101.156-47.433 21.138-79.433 71.424-77.129 124.562 2.853 69.705 69.157 126.866 138.862 120.576S647.3 548.571 638.708 478.83zm136.558-309.723c-25.161-33.134-67.986-38.839-105.728-45.13-106.862-17.151-216.576-17.7-323.438 1.134-35.438 5.706-75.447 11.996-97.719 43.996 36.572 34.304 88.576 39.424 135.424 45.129 84.553 10.862 171.447 11.447 256 .585 47.433-5.705 99.987-10.276 135.424-45.714zm32.585 591.433c-16.018 55.99-6.839 131.438-66.304 163.986-102.29 56.576-226.304 62.867-338.87 42.862-59.43-10.862-129.135-29.696-161.72-85.723-14.3-54.858-23.442-110.848-32.585-166.84l3.438-9.142 10.276-5.157c170.277 112.567 408.576 112.567 579.438 0 26.844 8.01 6.84 40.558 6.29 60.014zm103.424-549.157c-19.42 125.148-41.728 249.71-63.415 374.272-6.29 36.572-41.728 57.162-71.424 72.558-106.862 53.724-231.424 62.866-348.562 50.286-79.433-8.558-160.585-29.696-225.134-79.433-30.28-23.443-30.28-63.415-35.986-97.134-20.005-117.138-42.862-234.277-57.161-352.585 6.839-51.42 64.585-73.728 107.447-89.71 57.16-21.138 118.272-30.866 178.87-36.571 129.134-12.58 261.157-8.01 386.304 28.562 44.581 13.13 92.563 31.415 122.844 69.705 13.714 17.7 9.143 40.01 6.29 60.014z"}));Yc.displayName="BitbucketIcon";const Qc=()=>u(ge,{name:"source"},()=>u("path",{d:"M601.92 475.2c0 76.428-8.91 83.754-28.512 99.594-14.652 11.88-43.956 14.058-78.012 16.434-18.81 1.386-40.392 2.97-62.172 6.534-18.612 2.97-36.432 9.306-53.064 17.424V299.772c37.818-21.978 63.36-62.766 63.36-109.692 0-69.894-56.826-126.72-126.72-126.72S190.08 120.186 190.08 190.08c0 46.926 25.542 87.714 63.36 109.692v414.216c-37.818 21.978-63.36 62.766-63.36 109.692 0 69.894 56.826 126.72 126.72 126.72s126.72-56.826 126.72-126.72c0-31.086-11.286-59.598-29.7-81.576 13.266-9.504 27.522-17.226 39.996-19.206 16.038-2.574 32.868-3.762 50.688-5.148 48.312-3.366 103.158-7.326 148.896-44.55 61.182-49.698 74.25-103.158 75.24-187.902V475.2h-126.72zM316.8 126.72c34.848 0 63.36 28.512 63.36 63.36s-28.512 63.36-63.36 63.36-63.36-28.512-63.36-63.36 28.512-63.36 63.36-63.36zm0 760.32c-34.848 0-63.36-28.512-63.36-63.36s28.512-63.36 63.36-63.36 63.36 28.512 63.36 63.36-28.512 63.36-63.36 63.36zM823.68 158.4h-95.04V63.36h-126.72v95.04h-95.04v126.72h95.04v95.04h126.72v-95.04h95.04z"}));Qc.displayName="SourceIcon";const n3=({link:e,type:t=aa(e??"")})=>{if(!t)return null;const n=t.toLowerCase();return u(n==="bitbucket"?Yc:n==="github"?Kc:n==="gitlab"?"GitLab":n==="gitee"?Jc:Qc)};function r3(){const e=U(!1),t=Nn();return t&&de(()=>{e.value=!0},t),e}function o3(e){return r3(),C(()=>!!e())}const l3=()=>o3(()=>typeof window<"u"&&window.navigator&&"userAgent"in window.navigator),a3=()=>{const e=l3();return C(()=>e.value&&/\b(?:Android|iPhone)/i.test(navigator.userAgent))},s3=e=>[/\((ipad);[-\w),; ]+apple/i,/applecoremedia\/[\w.]+ \((ipad)/i,/\b(ipad)\d\d?,\d\d?[;\]].+ios/i].some(t=>t.test(e)),i3=e=>[/ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i,/cfnetwork\/.+darwin/i].some(t=>t.test(e)),c3=e=>[/(mac os x) ?([\w. ]*)/i,/(macintosh|mac_powerpc\b)(?!.+haiku)/i].some(t=>t.test(e)),u3=(e,t=0)=>{let n=3735928559^t,r=1103547991^t;for(let o=0,l;o>>16,2246822507),n^=Math.imul(r^r>>>13,3266489909),r=Math.imul(r^r>>>16,2246822507),r^=Math.imul(n^n>>>13,3266489909),4294967296*(2097151&r)+(n>>>0)},Xc=(e,t)=>u3(e)%t,Zc=/#.*$/u,d3=e=>{const t=Zc.exec(e);return t?t[0]:""},Rs=e=>decodeURI(e).replace(Zc,"").replace(/\/index\.html$/iu,"/").replace(/\/(README|index)\.md$/iu,"/").replace(/\.(?:html|md)$/iu,""),eu=(e,t)=>{if(!xc(t))return!1;const n=Rs(e.path),r=Rs(t),o=d3(t);return o?o===e.hash&&(!r||n===r):n===r};var f3=e=>Object.prototype.toString.call(e)==="[object Object]",vr=e=>typeof e=="string";const tu=Array.isArray,Is=e=>f3(e)&&vr(e.name),Ds=(e,t=!1)=>e?tu(e)?e.map(n=>vr(n)?{name:n}:Is(n)?n:null).filter(n=>n!==null):vr(e)?[{name:e}]:Is(e)?[e]:(console.error(`Expect "author" to be \`AuthorInfo[] | AuthorInfo | string[] | string ${t?"":"| false"} | undefined\`, but got`,e),[]):[],nu=(e,t)=>{if(e){if(tu(e)&&e.every(vr))return e;if(vr(e))return[e];console.error(`Expect ${t} to be \`string[] | string | undefined\`, but got`,e)}return[]},p3=e=>nu(e,"category"),h3=e=>nu(e,"tag"),m3='',v3='',g3='';var _3={useBabel:!1,jsLib:[],cssLib:[],codepenLayout:"left",codepenEditors:"101",babel:"https://unpkg.com/@babel/standalone/babel.min.js",vue:"https://unpkg.com/vue/dist/vue.global.prod.js",react:"https://unpkg.com/react/umd/react.production.min.js",reactDOM:"https://unpkg.com/react-dom/umd/react-dom.production.min.js"};const qo=_3,$s={html:{types:["html","slim","haml","md","markdown","vue"],map:{html:"none",vue:"none",md:"markdown"}},js:{types:["js","javascript","coffee","coffeescript","ts","typescript","ls","livescript"],map:{js:"none",javascript:"none",coffee:"coffeescript",ls:"livescript",ts:"typescript"}},css:{types:["css","less","sass","scss","stylus","styl"],map:{css:"none",styl:"stylus"}}},b3=(e,t,n)=>{const r=document.createElement(e);return Bn(t)&&Fn(t).forEach(o=>{if(o.indexOf("data"))r[o]=t[o];else{const l=o.replace("data","");r.dataset[l]=t[o]}}),r},sa=e=>({...qo,...e,jsLib:Array.from(new Set([...qo.jsLib??[],...e.jsLib??[]])),cssLib:Array.from(new Set([...qo.cssLib??[],...e.cssLib??[]]))}),Pn=(e,t)=>{if(xc(e[t]))return e[t];const n=new Promise(r=>{var l;const o=document.createElement("script");o.src=t,(l=document.querySelector("body"))==null||l.appendChild(o),o.onload=()=>{r()}});return e[t]=n,n},y3=(e,t)=>{if(t.css&&Array.from(e.childNodes).every(n=>n.nodeName!=="STYLE")){const n=b3("style",{innerHTML:t.css});e.appendChild(n)}},E3=(e,t,n)=>{const r=n.getScript();if(r&&Array.from(t.childNodes).every(o=>o.nodeName!=="SCRIPT")){const o=document.createElement("script");o.appendChild(document.createTextNode(`{const document=window.document.querySelector('#${e} .vp-code-demo-display').shadowRoot; + */const se={settings:{minimum:.08,easing:"ease",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,barSelector:'[role="bar"]',parent:"body",template:'
'},status:null,set:e=>{const t=se.isStarted();e=zo(e,se.settings.minimum,1),se.status=e===1?null:e;const n=se.render(!t),r=n.querySelector(se.settings.barSelector),o=se.settings.speed,l=se.settings.easing;return n.offsetWidth,L2(a=>{zr(r,{transform:"translate3d("+Ss(e)+"%,0,0)",transition:"all "+o+"ms "+l}),e===1?(zr(n,{transition:"none",opacity:"1"}),n.offsetWidth,setTimeout(()=>{zr(n,{transition:"all "+o+"ms linear",opacity:"0"}),setTimeout(()=>{se.remove(),a()},o)},o)):setTimeout(()=>a(),o)}),se},isStarted:()=>typeof se.status=="number",start:()=>{se.status||se.set(0);const e=()=>{setTimeout(()=>{se.status&&(se.trickle(),e())},se.settings.trickleSpeed)};return se.settings.trickle&&e(),se},done:e=>!e&&!se.status?se:se.inc(.3+.5*Math.random()).set(1),inc:e=>{let t=se.status;return t?(typeof e!="number"&&(e=(1-t)*zo(Math.random()*t,.1,.95)),t=zo(t+e,0,.994),se.set(t)):se.start()},trickle:()=>se.inc(Math.random()*se.settings.trickleRate),render:e=>{if(se.isRendered())return document.getElementById("nprogress");Os(document.documentElement,"nprogress-busy");const t=document.createElement("div");t.id="nprogress",t.innerHTML=se.settings.template;const n=t.querySelector(se.settings.barSelector),r=e?"-100":Ss(se.status||0),o=document.querySelector(se.settings.parent);return zr(n,{transition:"all 0 linear",transform:"translate3d("+r+"%,0,0)"}),o!==document.body&&Os(o,"nprogress-custom-parent"),o==null||o.appendChild(t),t},remove:()=>{Ps(document.documentElement,"nprogress-busy"),Ps(document.querySelector(se.settings.parent),"nprogress-custom-parent");const e=document.getElementById("nprogress");e&&S2(e)},isRendered:()=>!!document.getElementById("nprogress")},zo=(e,t,n)=>en?n:e,Ss=e=>(-1+e)*100,L2=function(){const e=[];function t(){const n=e.shift();n&&n(t)}return function(n){e.push(n),e.length===1&&t()}}(),zr=function(){const e=["Webkit","O","Moz","ms"],t={};function n(a){return a.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,function(s,i){return i.toUpperCase()})}function r(a){const s=document.body.style;if(a in s)return a;let i=e.length;const c=a.charAt(0).toUpperCase()+a.slice(1);let d;for(;i--;)if(d=e[i]+c,d in s)return d;return a}function o(a){return a=n(a),t[a]??(t[a]=r(a))}function l(a,s,i){s=o(s),a.style[s]=i}return function(a,s){for(const i in s){const c=s[i];c!==void 0&&Object.prototype.hasOwnProperty.call(s,i)&&l(a,i,c)}}}(),Hc=(e,t)=>(typeof e=="string"?e:oa(e)).indexOf(" "+t+" ")>=0,Os=(e,t)=>{const n=oa(e),r=n+t;Hc(n,t)||(e.className=r.substring(1))},Ps=(e,t)=>{const n=oa(e);if(!Hc(e,t))return;const r=n.replace(" "+t+" "," ");e.className=r.substring(1,r.length-1)},oa=e=>(" "+(e.className||"")+" ").replace(/\s+/gi," "),S2=e=>{e&&e.parentNode&&e.parentNode.removeChild(e)},O2=()=>{de(()=>{const e=Hn(),t=new Set;t.add(e.currentRoute.value.path),e.beforeEach(n=>{t.has(n.path)||se.start()}),e.afterEach(n=>{t.add(n.path),se.done()})})},P2=ct({setup(){O2()}}),x2=Object.freeze(Object.defineProperty({__proto__:null,default:P2},Symbol.toStringTag,{value:"Module"})),R2=JSON.parse(`{"encrypt":{"config":{}},"editLink":false,"pageInfo":["Date","Word","Tag"],"logo":"/logo.png","repo":"GuoXiCheng","docsDir":"src","docsBranch":"master","footer":"Made With vuepress-theme-hope Theme
Copyright © 2023-present GuoXiCheng","displayFooter":true,"locales":{"/":{"lang":"zh-CN","navbarLocales":{"langName":"简体中文","selectLangAriaLabel":"选择语言"},"metaLocales":{"author":"作者","date":"写作日期","origin":"原创","views":"访问量","category":"分类","tag":"标签","readingTime":"阅读时间","words":"字数","toc":"此页内容","prev":"上一页","next":"下一页","lastUpdated":"上次编辑于","contributors":"贡献者","editLink":"编辑此页","print":"打印"},"outlookLocales":{"themeColor":"主题色","darkmode":"外观","fullscreen":"全屏"},"encryptLocales":{"iconLabel":"文章已加密","placeholder":"输入密码","remember":"记住密码","errorHint":"请输入正确的密码"},"routeLocales":{"skipToContent":"跳至主要內容","notFoundTitle":"页面不存在","notFoundMsg":["这里什么也没有","我们是怎么来到这儿的?","这 是 四 零 四 !","看起来你访问了一个失效的链接"],"back":"返回上一页","home":"带我回家","openInNewWindow":"Open in new window"},"sidebar":{"/knowledge":"structure","/reading":"structure","/design-pattern":"structure","/develop":"structure","/article":"structure"},"navbar":["/article/","/reading/","/develop/","/design-pattern/",{"text":"站外链接","icon":"code","children":[{"text":"SKIP","link":"https://skip.guoxicheng.top"},{"text":"TinyCRUD","link":"https://tinycrud.guoxicheng.top"},{"text":"JSFullStack","link":"https://js.guoxicheng.top"}]}]}}}`),I2=U(R2),Fc=()=>I2,zc=Symbol(""),D2=()=>{const e=Ae(zc);if(!e)throw new Error("useThemeLocaleData() is called without provider.");return e},$2=(e,t)=>{const{locales:n,...r}=e;return{...r,...n==null?void 0:n[t]}},M2=ct({enhance({app:e}){const t=Fc(),n=e._context.provides[Yl],r=A(()=>$2(t.value,n.routeLocale.value));e.provide(zc,r),Object.defineProperties(e.config.globalProperties,{$theme:{get(){return t.value}},$themeLocale:{get(){return r.value}}})}}),V2=Object.freeze(Object.defineProperty({__proto__:null,default:M2},Symbol.toStringTag,{value:"Module"}));var j2={provider:"Giscus",lightTheme:"https://unpkg.com/vuepress-theme-hope@2.0.0-rc.48/templates/giscus/light.css",darkTheme:"https://unpkg.com/vuepress-theme-hope@2.0.0-rc.48/templates/giscus/dark.css",repo:"GuoXiCheng/guoxicheng.github.io",repoId:"MDEwOlJlcG9zaXRvcnkyNTQ1Nzk0ODc=",category:"Announcements",categoryId:"DIC_kwDODyyTH84Cdco8",strict:!0,lazyLoading:!0,reactionsEnabled:!0};const N2=j2,B2=U(N2),qc=Symbol(""),Uc=()=>Ae(qc),H2=Uc,F2=e=>{e.provide(qc,B2)},Wc=()=>u("svg",{xmlns:"http://www.w3.org/2000/svg",width:"32",height:"32",preserveAspectRatio:"xMidYMid",viewBox:"0 0 100 100"},[u("circle",{cx:"28",cy:"75",r:"11",fill:"currentColor"},u("animate",{attributeName:"fill-opacity",begin:"0s",dur:"1s",keyTimes:"0;0.2;1",repeatCount:"indefinite",values:"0;1;1"})),u("path",{fill:"none",stroke:"#88baf0","stroke-width":"10",d:"M28 47a28 28 0 0 1 28 28"},u("animate",{attributeName:"stroke-opacity",begin:"0.1s",dur:"1s",keyTimes:"0;0.2;1",repeatCount:"indefinite",values:"0;1;1"})),u("path",{fill:"none",stroke:"#88baf0","stroke-width":"10",d:"M28 25a50 50 0 0 1 50 50"},u("animate",{attributeName:"stroke-opacity",begin:"0.2s",dur:"1s",keyTimes:"0;0.2;1",repeatCount:"indefinite",values:"0;1;1"}))]);Wc.displayName="LoadingIcon";const xs=["ar","ca","da","de","en","eo","es","fa","fr","he","id","it","ja","ko","nl","pl","pt","ro","ru","th","tr","uk","uz","vi","zh-CN","zh-TW"],z2=z({name:"GiscusComment",props:{identifier:{type:String,required:!0},darkmode:Boolean},setup(e){const t=H2(),n=Ql(),r=A(()=>!!(t.value.repo&&t.value.repoId&&t.value.category&&t.value.categoryId)),o=U(!1),l=A(()=>{if(xs.includes(n.value))return n.value;const s=n.value.split("-")[0];return xs.includes(s)?s:"en"}),a=A(()=>({repo:t.value.repo,repoId:t.value.repoId,category:t.value.category,categoryId:t.value.categoryId,lang:l.value,theme:e.darkmode?t.value.darkTheme||"dark":t.value.lightTheme||"light",mapping:t.value.mapping||"pathname",term:e.identifier,inputPosition:t.value.inputPosition||"top",reactionsEnabled:t.value.reactionsEnabled===!1?"0":"1",strict:t.value.strict===!1?"0":"1",loading:t.value.lazyLoading===!1?"eager":"lazy",emitMetadata:"0"}));return de(async()=>{await y(()=>import("./giscus-D-fkNSKD.js"),[]),o.value=!0}),()=>r.value?u("div",{id:"comment",class:["giscus-wrapper",{"input-top":t.value.inputPosition!=="bottom"}]},o.value?u("giscus-widget",a.value):u(Wc)):null}}),q2=z({name:"CommentService",props:{darkmode:Boolean},setup(e){const t=Uc(),n=Se(),r=we(),o=A(()=>t.value.comment!==!1),l=A(()=>r.value.comment||o.value&&r.value.comment!==!1);return()=>u(z2,{id:"vp-comment",identifier:r.value.commentID||n.value.path,darkmode:e.darkmode,style:{display:l.value?"block":"none"}})}}),U2=ct({enhance:({app:e})=>{F2(e),e.component("CommentService",q2)}}),W2=Object.freeze(Object.defineProperty({__proto__:null,default:U2},Symbol.toStringTag,{value:"Module"})),G2=/language-(shellscript|shell|bash|sh|zsh)/,K2=({delay:e=500,duration:t=2e3,locales:n,selector:r,showInMobile:o,ignoreSelector:l=[],transform:a})=>{const s=ta("(max-width: 419px)"),i=A(()=>!s.value||o),c=en(n),d=Se(),f=E=>{var T;if(E.hasAttribute("copy-code-registered"))return;const b=document.createElement("button");b.type="button",b.classList.add("vp-copy-code-button"),b.setAttribute("aria-label",c.value.copy),b.setAttribute("data-copied",c.value.copied),(T=E.parentElement)==null||T.insertBefore(b,E),E.setAttribute("copy-code-registered","")};oe(()=>[d.value.path,i.value],async()=>{document.body.classList.toggle("copy-code-disabled",!i.value),i.value&&(await kt(),await Pc(e),document.querySelectorAll(r.join(",")).forEach(f))},{immediate:!0});const{copy:h}=Wp({legacy:!0}),v=new WeakMap,w=(E,b,T)=>{const _=b.cloneNode(!0);l.length&&_.querySelectorAll(l.join(",")).forEach(V=>V.remove()),a&&a(_);let k=_.textContent||"";G2.test(E.className)&&(k=k.replace(/^ *(\$|>) /gm,"")),h(k).then(()=>{if(t<=0)return;T.classList.add("copied"),clearTimeout(v.get(T));const V=setTimeout(()=>{T.classList.remove("copied"),T.blur(),v.delete(T)},t);v.set(T,V)})};Ee("click",E=>{const b=E.target;if(i.value&&b.matches('div[class*="language-"] > button.vp-copy-code-button')){const T=b.parentElement,_=b.nextElementSibling;if(!T||!_)return;w(T,_,b)}})};var J2={"/":{copy:"复制代码",copied:"已复制"}},Y2=['.theme-hope-content div[class*="language-"] pre'];const Q2=ct({setup:()=>{K2({selector:Y2,locales:J2,duration:2e3,delay:500,showInMobile:!1})}}),X2=Object.freeze(Object.defineProperty({__proto__:null,default:Q2},Symbol.toStringTag,{value:"Module"})),qr=gn("VUEPRESS_CODE_TAB_STORE",{});var Z2=z({name:"CodeTabs",props:{active:{type:Number,default:0},data:{type:Array,required:!0},id:{type:String,required:!0},tabId:{type:String,default:""}},slots:Object,setup(e,{slots:t}){const n=U(e.active),r=Le([]),o=()=>{e.tabId&&(qr.value[e.tabId]=e.data[n.value].id)},l=(c=n.value)=>{n.value=c{n.value=c>0?c-1:r.value.length-1,r.value[n.value].focus()},s=(c,d)=>{c.key===" "||c.key==="Enter"?(c.preventDefault(),n.value=d):c.key==="ArrowRight"?(c.preventDefault(),l()):c.key==="ArrowLeft"&&(c.preventDefault(),a()),e.tabId&&(qr.value[e.tabId]=e.data[n.value].id)},i=()=>{if(e.tabId){const c=e.data.findIndex(({id:d})=>qr.value[e.tabId]===d);if(c!==-1)return c}return e.active};return de(()=>{n.value=i(),oe(()=>qr.value[e.tabId],(c,d)=>{if(e.tabId&&c!==d){const f=e.data.findIndex(({id:p})=>p===c);f!==-1&&(n.value=f)}})}),()=>e.data.length?u("div",{class:"vp-code-tabs"},[u("div",{class:"vp-code-tabs-nav",role:"tablist"},e.data.map(({id:c},d)=>{const f=d===n.value;return u("button",{type:"button",ref:p=>{p&&(r.value[d]=p)},class:["vp-code-tab-nav",{active:f}],role:"tab","aria-controls":`codetab-${e.id}-${d}`,"aria-selected":f,onClick:()=>{n.value=d,o()},onKeydown:p=>s(p,d)},t[`title${d}`]({value:c,isActive:f}))})),e.data.map(({id:c},d)=>{const f=d===n.value;return u("div",{class:["vp-code-tab",{active:f}],id:`codetab-${e.id}-${d}`,role:"tabpanel","aria-expanded":f},[u("div",{class:"vp-code-tab-title"},t[`title${d}`]({value:c,isActive:f})),t[`tab${d}`]({value:c,isActive:f})])})]):null}});const Gc=({active:e=!1},{slots:t})=>{var n;return u("div",{class:["code-group-item",{active:e}],"aria-selected":e},(n=t.default)==null?void 0:n.call(t))};Gc.displayName="CodeGroupItem";const e3=z({name:"CodeGroup",slots:Object,setup(e,{slots:t}){const n=U(-1),r=Le([]),o=(s=n.value)=>{n.value=s{n.value=s>0?s-1:r.value.length-1,r.value[n.value].focus()},a=(s,i)=>{s.key===" "||s.key==="Enter"?(s.preventDefault(),n.value=i):s.key==="ArrowRight"?(s.preventDefault(),o(i)):s.key==="ArrowLeft"&&(s.preventDefault(),l(i))};return()=>{var i;const s=(((i=t.default)==null?void 0:i.call(t))||[]).filter(c=>c.type.name==="CodeGroupItem").map(c=>(c.props===null&&(c.props={}),c));return s.length===0?null:(n.value<0||n.value>s.length-1?(n.value=s.findIndex(c=>"active"in c.props),n.value===-1&&(n.value=0)):s.forEach((c,d)=>{c.props.active=d===n.value}),u("div",{class:"code-group"},[u("div",{class:"code-group-nav"},s.map((c,d)=>{const f=d===n.value;return u("button",{type:"button",ref:p=>{p&&(r.value[d]=p)},class:["code-group-nav-tab",{active:f}],"aria-pressed":f,"aria-expanded":f,onClick:()=>{n.value=d},onKeydown:p=>a(p,d)},c.props.title)})),s]))}}}),ge=({name:e="",color:t="currentColor",ariaLabel:n},{attrs:r,slots:o})=>{var l;return u("svg",{xmlns:"http://www.w3.org/2000/svg",class:["icon",`${e}-icon`],viewBox:"0 0 1024 1024",fill:t,"aria-label":n??`${e} icon`,...r},(l=o.default)==null?void 0:l.call(o))};ge.displayName="IconBase";const la=({size:e=48,stroke:t=4,wrapper:n=!0,height:r=2*e})=>{const o=u("svg",{xmlns:"http://www.w3.org/2000/svg",width:e,height:e,preserveAspectRatio:"xMidYMid",viewBox:"25 25 50 50"},[u("animateTransform",{attributeName:"transform",type:"rotate",dur:"2s",keyTimes:"0;1",repeatCount:"indefinite",values:"0;360"}),u("circle",{cx:"50",cy:"50",r:"20",fill:"none",stroke:"currentColor","stroke-width":t,"stroke-linecap":"round"},[u("animate",{attributeName:"stroke-dasharray",dur:"1.5s",keyTimes:"0;0.5;1",repeatCount:"indefinite",values:"1,200;90,200;1,200"}),u("animate",{attributeName:"stroke-dashoffset",dur:"1.5s",keyTimes:"0;0.5;1",repeatCount:"indefinite",values:"0;-35px;-125px"})])]);return n?u("div",{class:"loading-icon-wrapper",style:`display:flex;align-items:center;justify-content:center;height:${r}px`},o):o};la.displayName="LoadingIcon";const bo=(e,{slots:t})=>{var n;return(n=t.default)==null?void 0:n.call(t)},t3=e=>Lr(e)?e:`https://github.com/${e}`,aa=(e="")=>!Lr(e)||/github\.com/.test(e)?"GitHub":/bitbucket\.org/.test(e)?"Bitbucket":/gitlab\.com/.test(e)?"GitLab":/gitee\.com/.test(e)?"Gitee":null,Kc=()=>u(ge,{name:"github"},()=>u("path",{d:"M511.957 21.333C241.024 21.333 21.333 240.981 21.333 512c0 216.832 140.544 400.725 335.574 465.664 24.49 4.395 32.256-10.07 32.256-23.083 0-11.69.256-44.245 0-85.205-136.448 29.61-164.736-64.64-164.736-64.64-22.315-56.704-54.4-71.765-54.4-71.765-44.587-30.464 3.285-29.824 3.285-29.824 49.195 3.413 75.179 50.517 75.179 50.517 43.776 75.008 114.816 53.333 142.762 40.79 4.523-31.66 17.152-53.377 31.19-65.537-108.971-12.458-223.488-54.485-223.488-242.602 0-53.547 19.114-97.323 50.517-131.67-5.035-12.33-21.93-62.293 4.779-129.834 0 0 41.258-13.184 134.912 50.346a469.803 469.803 0 0 1 122.88-16.554c41.642.213 83.626 5.632 122.88 16.554 93.653-63.488 134.784-50.346 134.784-50.346 26.752 67.541 9.898 117.504 4.864 129.834 31.402 34.347 50.474 78.123 50.474 131.67 0 188.586-114.73 230.016-224.042 242.09 17.578 15.232 33.578 44.672 33.578 90.454v135.85c0 13.142 7.936 27.606 32.854 22.87C862.25 912.597 1002.667 728.747 1002.667 512c0-271.019-219.648-490.667-490.71-490.667z"}));Kc.displayName="GitHubIcon";const Jc=()=>u(ge,{name:"gitee"},()=>u("path",{d:"M512 992C246.92 992 32 777.08 32 512S246.92 32 512 32s480 214.92 480 480-214.92 480-480 480zm242.97-533.34H482.39a23.7 23.7 0 0 0-23.7 23.7l-.03 59.28c0 13.08 10.59 23.7 23.7 23.7h165.96a23.7 23.7 0 0 1 23.7 23.7v11.85a71.1 71.1 0 0 1-71.1 71.1H375.71a23.7 23.7 0 0 1-23.7-23.7V423.11a71.1 71.1 0 0 1 71.1-71.1h331.8a23.7 23.7 0 0 0 23.7-23.7l.06-59.25a23.73 23.73 0 0 0-23.7-23.73H423.11a177.78 177.78 0 0 0-177.78 177.75v331.83c0 13.08 10.62 23.7 23.7 23.7h349.62a159.99 159.99 0 0 0 159.99-159.99V482.33a23.7 23.7 0 0 0-23.7-23.7z"}));Jc.displayName="GiteeIcon";const Yc=()=>u(ge,{name:"bitbucket"},()=>u("path",{d:"M575.256 490.862c6.29 47.981-52.005 85.723-92.563 61.147-45.714-20.004-45.714-92.562-1.133-113.152 38.29-23.442 93.696 7.424 93.696 52.005zm63.451-11.996c-10.276-81.152-102.29-134.839-177.152-101.156-47.433 21.138-79.433 71.424-77.129 124.562 2.853 69.705 69.157 126.866 138.862 120.576S647.3 548.571 638.708 478.83zm136.558-309.723c-25.161-33.134-67.986-38.839-105.728-45.13-106.862-17.151-216.576-17.7-323.438 1.134-35.438 5.706-75.447 11.996-97.719 43.996 36.572 34.304 88.576 39.424 135.424 45.129 84.553 10.862 171.447 11.447 256 .585 47.433-5.705 99.987-10.276 135.424-45.714zm32.585 591.433c-16.018 55.99-6.839 131.438-66.304 163.986-102.29 56.576-226.304 62.867-338.87 42.862-59.43-10.862-129.135-29.696-161.72-85.723-14.3-54.858-23.442-110.848-32.585-166.84l3.438-9.142 10.276-5.157c170.277 112.567 408.576 112.567 579.438 0 26.844 8.01 6.84 40.558 6.29 60.014zm103.424-549.157c-19.42 125.148-41.728 249.71-63.415 374.272-6.29 36.572-41.728 57.162-71.424 72.558-106.862 53.724-231.424 62.866-348.562 50.286-79.433-8.558-160.585-29.696-225.134-79.433-30.28-23.443-30.28-63.415-35.986-97.134-20.005-117.138-42.862-234.277-57.161-352.585 6.839-51.42 64.585-73.728 107.447-89.71 57.16-21.138 118.272-30.866 178.87-36.571 129.134-12.58 261.157-8.01 386.304 28.562 44.581 13.13 92.563 31.415 122.844 69.705 13.714 17.7 9.143 40.01 6.29 60.014z"}));Yc.displayName="BitbucketIcon";const Qc=()=>u(ge,{name:"source"},()=>u("path",{d:"M601.92 475.2c0 76.428-8.91 83.754-28.512 99.594-14.652 11.88-43.956 14.058-78.012 16.434-18.81 1.386-40.392 2.97-62.172 6.534-18.612 2.97-36.432 9.306-53.064 17.424V299.772c37.818-21.978 63.36-62.766 63.36-109.692 0-69.894-56.826-126.72-126.72-126.72S190.08 120.186 190.08 190.08c0 46.926 25.542 87.714 63.36 109.692v414.216c-37.818 21.978-63.36 62.766-63.36 109.692 0 69.894 56.826 126.72 126.72 126.72s126.72-56.826 126.72-126.72c0-31.086-11.286-59.598-29.7-81.576 13.266-9.504 27.522-17.226 39.996-19.206 16.038-2.574 32.868-3.762 50.688-5.148 48.312-3.366 103.158-7.326 148.896-44.55 61.182-49.698 74.25-103.158 75.24-187.902V475.2h-126.72zM316.8 126.72c34.848 0 63.36 28.512 63.36 63.36s-28.512 63.36-63.36 63.36-63.36-28.512-63.36-63.36 28.512-63.36 63.36-63.36zm0 760.32c-34.848 0-63.36-28.512-63.36-63.36s28.512-63.36 63.36-63.36 63.36 28.512 63.36 63.36-28.512 63.36-63.36 63.36zM823.68 158.4h-95.04V63.36h-126.72v95.04h-95.04v126.72h95.04v95.04h126.72v-95.04h95.04z"}));Qc.displayName="SourceIcon";const n3=({link:e,type:t=aa(e??"")})=>{if(!t)return null;const n=t.toLowerCase();return u(n==="bitbucket"?Yc:n==="github"?Kc:n==="gitlab"?"GitLab":n==="gitee"?Jc:Qc)};function r3(){const e=U(!1),t=Nn();return t&&de(()=>{e.value=!0},t),e}function o3(e){return r3(),A(()=>!!e())}const l3=()=>o3(()=>typeof window<"u"&&window.navigator&&"userAgent"in window.navigator),a3=()=>{const e=l3();return A(()=>e.value&&/\b(?:Android|iPhone)/i.test(navigator.userAgent))},s3=e=>[/\((ipad);[-\w),; ]+apple/i,/applecoremedia\/[\w.]+ \((ipad)/i,/\b(ipad)\d\d?,\d\d?[;\]].+ios/i].some(t=>t.test(e)),i3=e=>[/ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i,/cfnetwork\/.+darwin/i].some(t=>t.test(e)),c3=e=>[/(mac os x) ?([\w. ]*)/i,/(macintosh|mac_powerpc\b)(?!.+haiku)/i].some(t=>t.test(e)),u3=(e,t=0)=>{let n=3735928559^t,r=1103547991^t;for(let o=0,l;o>>16,2246822507),n^=Math.imul(r^r>>>13,3266489909),r=Math.imul(r^r>>>16,2246822507),r^=Math.imul(n^n>>>13,3266489909),4294967296*(2097151&r)+(n>>>0)},Xc=(e,t)=>u3(e)%t,Zc=/#.*$/u,d3=e=>{const t=Zc.exec(e);return t?t[0]:""},Rs=e=>decodeURI(e).replace(Zc,"").replace(/\/index\.html$/iu,"/").replace(/\/(README|index)\.md$/iu,"/").replace(/\.(?:html|md)$/iu,""),eu=(e,t)=>{if(!xc(t))return!1;const n=Rs(e.path),r=Rs(t),o=d3(t);return o?o===e.hash&&(!r||n===r):n===r};var f3=e=>Object.prototype.toString.call(e)==="[object Object]",vr=e=>typeof e=="string";const tu=Array.isArray,Is=e=>f3(e)&&vr(e.name),Ds=(e,t=!1)=>e?tu(e)?e.map(n=>vr(n)?{name:n}:Is(n)?n:null).filter(n=>n!==null):vr(e)?[{name:e}]:Is(e)?[e]:(console.error(`Expect "author" to be \`AuthorInfo[] | AuthorInfo | string[] | string ${t?"":"| false"} | undefined\`, but got`,e),[]):[],nu=(e,t)=>{if(e){if(tu(e)&&e.every(vr))return e;if(vr(e))return[e];console.error(`Expect ${t} to be \`string[] | string | undefined\`, but got`,e)}return[]},p3=e=>nu(e,"category"),h3=e=>nu(e,"tag"),m3='',v3='',g3='';var _3={useBabel:!1,jsLib:[],cssLib:[],codepenLayout:"left",codepenEditors:"101",babel:"https://unpkg.com/@babel/standalone/babel.min.js",vue:"https://unpkg.com/vue/dist/vue.global.prod.js",react:"https://unpkg.com/react/umd/react.production.min.js",reactDOM:"https://unpkg.com/react-dom/umd/react-dom.production.min.js"};const qo=_3,$s={html:{types:["html","slim","haml","md","markdown","vue"],map:{html:"none",vue:"none",md:"markdown"}},js:{types:["js","javascript","coffee","coffeescript","ts","typescript","ls","livescript"],map:{js:"none",javascript:"none",coffee:"coffeescript",ls:"livescript",ts:"typescript"}},css:{types:["css","less","sass","scss","stylus","styl"],map:{css:"none",styl:"stylus"}}},b3=(e,t,n)=>{const r=document.createElement(e);return Bn(t)&&Fn(t).forEach(o=>{if(o.indexOf("data"))r[o]=t[o];else{const l=o.replace("data","");r.dataset[l]=t[o]}}),r},sa=e=>({...qo,...e,jsLib:Array.from(new Set([...qo.jsLib??[],...e.jsLib??[]])),cssLib:Array.from(new Set([...qo.cssLib??[],...e.cssLib??[]]))}),Pn=(e,t)=>{if(xc(e[t]))return e[t];const n=new Promise(r=>{var l;const o=document.createElement("script");o.src=t,(l=document.querySelector("body"))==null||l.appendChild(o),o.onload=()=>{r()}});return e[t]=n,n},y3=(e,t)=>{if(t.css&&Array.from(e.childNodes).every(n=>n.nodeName!=="STYLE")){const n=b3("style",{innerHTML:t.css});e.appendChild(n)}},E3=(e,t,n)=>{const r=n.getScript();if(r&&Array.from(t.childNodes).every(o=>o.nodeName!=="SCRIPT")){const o=document.createElement("script");o.appendChild(document.createTextNode(`{const document=window.document.querySelector('#${e} .vp-code-demo-display').shadowRoot; ${r}}`)),t.appendChild(o)}},w3=["html","js","css"],T3=e=>{const t=Fn(e),n={html:[],js:[],css:[],isLegal:!1};return w3.forEach(r=>{const o=t.filter(l=>$s[r].types.includes(l));if(o.length){const l=o[0];n[r]=[e[l].replace(/^\n|\n$/g,""),$s[r].map[l]??l]}}),n.isLegal=(!n.html.length||n.html[1]==="none")&&(!n.js.length||n.js[1]==="none")&&(!n.css.length||n.css[1]==="none"),n},ru=e=>e.replace(/
/g,"
").replace(/<((\S+)[^<]*?)\s+\/>/g,"<$1>"),ou=e=>`
${ru(e)} -
`,C3=e=>`${e.replace("export default ","const $reactApp = ").replace(/App\.__style__(\s*)=(\s*)`([\s\S]*)?`/,"")}; -ReactDOM.createRoot(document.getElementById("app")).render(React.createElement($reactApp))`,A3=e=>e.replace(/export\s+default\s*\{(\n*[\s\S]*)\n*\}\s*;?$/u,"Vue.createApp({$1}).mount('#app')").replace(/export\s+default\s*define(Async)?Component\s*\(\s*\{(\n*[\s\S]*)\n*\}\s*\)\s*;?$/u,"Vue.createApp({$1}).mount('#app')").trim(),lu=e=>`(function(exports){var module={};module.exports=exports;${e};return module.exports.__esModule.exports.default:module.exports;})({})`,k3=(e,t)=>{const n=sa(t),r=e.js[0]??"";return{...n,html:ru(e.html[0]??""),js:r,css:e.css[0]??"",isLegal:e.isLegal,getScript:()=>{var o;return n.useBabel?((o=window.Babel.transform(r,{presets:["es2015"]}))==null?void 0:o.code)??"":r}}},L3=/