From a4fdb63d7b46bef6388fe397040d17a347a844e1 Mon Sep 17 00:00:00 2001 From: libaxuan <33255877+libaxuan@users.noreply.github.com> Date: Wed, 13 Dec 2023 10:59:26 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20lh-pages=20from=20@=20libaxuan?= =?UTF-8?q?/LearnHubs@dc1aa2262f65f9cd0974f6137d04eb01dfb6db0e=20?= =?UTF-8?q?=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 404.html | 4 ++-- DailyRoutine.html | 4 ++-- Fitness.html | 4 ++-- ai/AIEnjoy.html | 4 ++-- ai/ChatGPT.html | 4 ++-- ai/Midjourney.html | 4 ++-- ai/TaoAI/index.html | 4 ++-- ai/index.html | 4 ++-- apps/AppNotes.html | 4 ++-- apps/Applist.html | 4 ++-- apps/ChatGPT.html | 8 ++++---- apps/Chrome.html | 4 ++-- apps/design.html | 4 ++-- apps/index.html | 4 ++-- apps/livestreaming/0_live_equipments.html | 4 ++-- apps/livestreaming/1_obs_basic.html | 4 ++-- apps/livestreaming/2_obs_streamfx.html | 4 ++-- apps/livestreaming/3_obs_plugins.html | 4 ++-- apps/livestreaming/4_live_effects.html | 4 ++-- apps/livestreaming/5_live_platforms.html | 4 ++-- apps/livestreaming/6_live_positioning.html | 4 ++-- apps/livestreaming/index.html | 4 ++-- article/index.html | 4 ++-- ...-52568387.js => 0_live_equipments.html-7ee90793.js} | 2 +- ...c.html-fd19eee3.js => 1_obs_basic.html-b23d9b6c.js} | 2 +- ...s => 2017-04-18-wechat_multi_open.html-083325fc.js} | 2 +- ...s => 2017-04-22-rss_feed43_feedex.html-099a0750.js} | 2 +- ...07-28-office_2016_installer_error.html-c8d27bf6.js} | 2 +- ...-onenote_2016_cannot_be_logged_in.html-fcc852ca.js} | 2 +- ....js => 2017-09-02-forced_shutdown.html-9106acd7.js} | 2 +- ....js => 2017-09-03-smb_lan_sharing.html-7a69b98c.js} | 2 +- ...7-10-18-light_cat_e8-c-epon_admin.html-70a60119.js} | 2 +- ...7-10-18-light_cat_port_forwarding.html-4fc7cb61.js} | 2 +- ...d.js => 2018-01-19-forget_the_cdn.html-4b463cbc.js} | 2 +- ...b6c.js => 2018-01-31-hire_a_robot.html-823ab3c6.js} | 2 +- ...6.js => 2018-03-06-no_more_dinner.html-985b7953.js} | 2 +- ...js => 2018-04-30-baota_deploy_vps.html-4e06d008.js} | 2 +- ...05-01-jekyll_blog_on_github_pages.html-189a0a55.js} | 2 +- ... => 2018-05-02-jekyll_blog_on_vps.html-53ba212f.js} | 2 +- ...2018-05-03-jekyll_blog_autodeploy.html-45303d3b.js} | 2 +- ...js => 2018-05-04-audition_cut_mp3.html-727329ff.js} | 2 +- ...8-05-15-aria2_a_new_download_tool.html-4033b062.js} | 2 +- ...d1.js => 2018-05-24-airtable_noob.html-764fa008.js} | 2 +- ...a.js => 2018-06-08-baizhuo_gp1700.html-f722dc25.js} | 2 +- ....js => 2018-06-10-koolproxy_https.html-3099c7b9.js} | 2 +- ...0e.js => 2018-06-19-iptv_direckly.html-12b69b0c.js} | 2 +- ...10-07-huginn_scraping_any_website.html-c26d1c54.js} | 2 +- ....js => 2018-12-28-voice_input_try.html-739b51e6.js} | 2 +- ...> 2019-03-31-openvpn_back_to_home.html-7cfdcca9.js} | 2 +- ...c60d.js => 2019-04-01-rsshub_noob.html-4cbd0818.js} | 2 +- ...19-08-26-scrcpy_screen_projection.html-d2a01146.js} | 2 +- ...e_aka_hospital_skin_care_products.html-4430a60a.js} | 2 +- ...f1.js => 2020-03-25-rsshub_on_vps.html-507599ca.js} | 2 +- ...d0.js => 2020-09-13-wifi_speed_up.html-52b4279e.js} | 2 +- ....js => 2020-09-22-uefi_asus_board.html-13d155b4.js} | 2 +- ...2020-10-25-dpc_watchdog_violation.html-210083cd.js} | 2 +- ...20-11-01-gym_equipment_throw_away.html-3e708f6f.js} | 2 +- ...d2754.js => 2020-11-27-rime_input.html-2111c326.js} | 2 +- ...ef1e4.js => 2020-12-17-weight_log.html-ff4837d5.js} | 2 +- ...-02-keepass_the_real_lastpassword.html-312f80ff.js} | 2 +- ...21-01-27-blog_jekyll_to_wordpress.html-831c922c.js} | 2 +- ...ples_criticism_and_self-criticism.html-6e4b611d.js} | 2 +- ...-10-23-nas_with_rsshub_and_huginn.html-893f99d6.js} | 2 +- ...22-01-23-wechat_lucky_money_cover.html-b0808199.js} | 2 +- ... 2022-02-19-microsoft_store_fixed.html-a400e330.js} | 2 +- ...22-03-09-lenovo_black_card_member.html-0b3c7f70.js} | 2 +- ...17-rss_persistent_link_collection.html-e0611cdf.js} | 2 +- ...gest_software_manager_for_windows.html-fecb3706.js} | 2 +- ...urvivorship_bias_in_shanghai_2022.html-1fd49fd5.js} | 2 +- ...0af.js => 2022-04-21-uivision_rpa.html-e68a8aef.js} | 2 +- ...-22-surveillance_video_for_myself.html-2785faf0.js} | 2 +- ...> 2022-06-07-blog_md_to_wordpress.html-d638bef3.js} | 2 +- ...2-08-10-new_stuff_shaping_machine.html-937612c3.js} | 2 +- ...data_blog_to_knowledge_management.html-6c65611a.js} | 2 +- ...eme_branding_thinking_with_mate50.html-363f7666.js} | 2 +- ...022-11-03-ffmpeg_screen_recording.html-02549a77.js} | 2 +- ...> 2022-11-18-whisper_ai_subtitles.html-a9e89343.js} | 2 +- ...4.js => 2023-01-26-whiteboard_gtd.html-07efb255.js} | 2 +- ...-03-31-efficient_morning_5am_club.html-83a6966e.js} | 2 +- ...=> 2023-09-05-virtual_positioning.html-6cd0dd6e.js} | 2 +- ...b5c7.js => 2023-10-07-clone-voice.html-924a5a17.js} | 2 +- ...023-10-29-switch-firmware-updates.html-f177fe8a.js} | 2 +- ... => 2023-12-12-eu.org-free-domain.html-db363200.js} | 2 +- ...l-b42c3419.js => 2023-12-12-sd-op.html-6527f220.js} | 2 +- ... 2023-12-13-awesome-selfhosted-cn.html-751d3025.js} | 2 +- ...tml-0e2aa576.js => 2_obs_streamfx.html-ef0fb9e1.js} | 2 +- ...html-111c51c9.js => 3_obs_plugins.html-d6d2de3a.js} | 2 +- assets/{404.html-dc59705a.js => 404.html-890400ea.js} | 2 +- ...tml-1bb840c3.js => 4_live_effects.html-6356a206.js} | 2 +- ...l-44377617.js => 5_live_platforms.html-961e19ea.js} | 2 +- ...29d9d726.js => 6_live_positioning.html-1ab27c29.js} | 2 +- ...Enjoy.html-7f185b8a.js => AIEnjoy.html-70ee36aa.js} | 2 +- ...otes.html-d0552b1b.js => AppNotes.html-ecd92d85.js} | 2 +- ...plist.html-2b70e0fb.js => Applist.html-32e6a97e.js} | 2 +- ...ey.html-557788d1.js => AutoHotkey.html-dad503f2.js} | 2 +- assets/ChatGPT.html-329e195c.js | 1 - ...atGPT.html-e006ecf1.js => ChatGPT.html-36342337.js} | 2 +- ...atGPT.html-88afe4ff.js => ChatGPT.html-3864f52d.js} | 2 +- assets/ChatGPT.html-6766ad44.js | 1 + ...Chrome.html-f6b1063c.js => Chrome.html-446be051.js} | 2 +- ...html-9193fd73.js => CloudServices.html-d954c56e.js} | 2 +- ...re.html-946b9ef3.js => Cloudflare.html-050db08c.js} | 2 +- ...ents.html-b8fb0500.js => Comments.html-911d5a90.js} | 2 +- ...Coupon.html-53f49b75.js => Coupon.html-14d91805.js} | 2 +- assets/{DNS.html-39e11d24.js => DNS.html-64491632.js} | 2 +- ....html-b148ec8b.js => DailyRoutine.html-39b176d7.js} | 2 +- .../{Diet.html-7af402c8.js => Diet.html-9933277f.js} | 2 +- ...Docker.html-fc662514.js => Docker.html-042e1b4d.js} | 2 +- ...tron.html-e1f0f516.js => Electron.html-5b3e2a63.js} | 2 +- ...tness.html-704722ad.js => Fitness.html-d39a2db9.js} | 2 +- ...GitHub.html-ae0556fc.js => GitHub.html-08828d51.js} | 2 +- .../{HTML.html-bb5b5659.js => HTML.html-6b411f9a.js} | 2 +- ...tml-24bbd727.js => HomeAutomation.html-a23779d7.js} | 2 +- ...Huginn.html-36f26da1.js => Huginn.html-466cce0b.js} | 2 +- ...pt.html-300e7863.js => Javascript.html-c401632d.js} | 2 +- .../{Life.html-971d1c86.js => Life.html-ccfd313e.js} | 2 +- ...e.html-7f98eaf6.js => Maintenance.html-3c20e5fe.js} | 2 +- ...down.html-ce001cb7.js => Markdown.html-4b1e7df6.js} | 2 +- ...dical.html-2f6b4c5e.js => Medical.html-f7b20fa1.js} | 2 +- ...ey.html-f6b22221.js => Midjourney.html-d3c1542e.js} | 2 +- .../{MySQL.html-8f1f34d7.js => MySQL.html-1b3683ae.js} | 2 +- assets/{NAS.html-7c34a901.js => NAS.html-ac8512de.js} | 2 +- ...tem.html-e43fe61f.js => NewSystem.html-3a292023.js} | 2 +- ...Python.html-55396a09.js => Python.html-1aa7e29a.js} | 2 +- ...bBar.html-79ee3476.js => QTTabBar.html-b27c67bb.js} | 2 +- .../{Regex.html-44b866d1.js => Regex.html-7d212249.js} | 2 +- ...archResult-7eb87603.js => SearchResult-3a512c97.js} | 2 +- ....html-40674b0f.js => Shoppinglist.html-d0d34cbb.js} | 2 +- ...Static.html-c9e8a328.js => Static.html-9637b31b.js} | 2 +- .../{TTRSS.html-4e81b3cc.js => TTRSS.html-29c1226e.js} | 2 +- assets/{VPS.html-a561ad86.js => VPS.html-71f15415.js} | 2 +- assets/{Vue.html-23952fed.js => Vue.html-27b88ef1.js} | 2 +- ...ress.html-7392f3ea.js => VuePress.html-e8a203d8.js} | 2 +- assets/{app-378b5903.js => app-514297a1.js} | 10 +++++----- ...hing.html-ca0fc22a.js => birthing.html-3a678bbd.js} | 2 +- .../{blog.html-0c58a1f8.js => blog.html-b1d27045.js} | 2 +- assets/{cd.html-7a7e10a7.js => cd.html-88eb1e8b.js} | 2 +- .../{component-37b4b5ce.js => component-d4572d7c.js} | 2 +- ...html-f6dd507f.js => cors-anywhere.html-7a0bc063.js} | 2 +- ...design.html-8ac83d76.js => design.html-e981835f.js} | 2 +- ...csify.html-f30bd70d.js => docsify.html-6f20d15a.js} | 2 +- .../{emby.html-a34a1b07.js => emby.html-c8ad52bf.js} | 2 +- assets/{faq.html-9b622df1.js => faq.html-296ac29b.js} | 2 +- .../{grocy.html-bd8c5b30.js => grocy.html-a2e187f9.js} | 2 +- .../{index.html-1849b57e.js => index.html-00d0a3d3.js} | 2 +- .../{index.html-1a152fef.js => index.html-030899ea.js} | 2 +- .../{index.html-0133e012.js => index.html-036d867a.js} | 2 +- .../{index.html-09d01515.js => index.html-06e5edce.js} | 2 +- assets/index.html-0bd62ab7.js | 1 + assets/index.html-0e51f7d4.js | 1 + assets/index.html-0e9babe3.js | 1 + assets/index.html-0f797976.js | 1 + assets/index.html-110e6485.js | 1 + assets/index.html-1a4e1ae1.js | 1 + assets/index.html-1b545c10.js | 1 - assets/index.html-1cb11320.js | 1 + assets/index.html-1d14fc5b.js | 1 - assets/index.html-1e7ee72a.js | 1 - assets/index.html-1f11cb8e.js | 1 - assets/index.html-21e526a1.js | 1 - assets/index.html-223318a7.js | 1 - assets/index.html-22f92f6a.js | 1 - .../{index.html-253e7aa1.js => index.html-233fb11d.js} | 2 +- assets/index.html-23c505a3.js | 1 - assets/index.html-2475f012.js | 1 - assets/index.html-2b17f977.js | 1 - assets/index.html-2c117bd4.js | 1 - assets/index.html-2dc61fc7.js | 1 + assets/index.html-2e043e54.js | 1 + assets/index.html-2f8a3192.js | 1 + assets/index.html-2f8eaae6.js | 1 - assets/index.html-2fac98cf.js | 1 + assets/index.html-313a5f48.js | 1 + assets/index.html-362b5a98.js | 1 - assets/index.html-368e1ad7.js | 1 + assets/index.html-37a5fb9f.js | 1 + assets/index.html-385fd869.js | 1 + assets/index.html-38e2e1b5.js | 1 + assets/index.html-3a1f1c00.js | 1 + .../{index.html-f9998e05.js => index.html-3e64ff51.js} | 2 +- assets/index.html-3efed762.js | 1 + .../{index.html-6f136dda.js => index.html-406e3f2f.js} | 2 +- assets/index.html-4276438e.js | 1 - .../{index.html-76d429a7.js => index.html-4432c323.js} | 2 +- assets/index.html-44cb6628.js | 1 + assets/index.html-45428b17.js | 1 + assets/index.html-46031371.js | 1 - assets/index.html-481fcc0a.js | 1 - assets/index.html-4a098dec.js | 1 - assets/index.html-4bc35d28.js | 1 - assets/index.html-4bfc9d14.js | 1 + assets/index.html-4d4c3d9a.js | 1 + assets/index.html-4f075679.js | 1 - assets/index.html-50d56e85.js | 1 + assets/index.html-50e0fcd2.js | 1 + assets/index.html-5266b924.js | 1 - assets/index.html-52a16911.js | 1 + assets/index.html-53d23dba.js | 1 - assets/index.html-54089d9b.js | 1 - assets/index.html-549dd49d.js | 1 + assets/index.html-55252939.js | 1 - assets/index.html-57f7acb6.js | 1 - assets/index.html-5887e1b6.js | 1 - assets/index.html-595aa9ef.js | 1 - assets/index.html-59f156e6.js | 1 + assets/index.html-5d243dbd.js | 1 + assets/index.html-5e2920a5.js | 1 - assets/index.html-5e318919.js | 1 - assets/index.html-60a45641.js | 1 - assets/index.html-60f0a75b.js | 1 - assets/index.html-6255db08.js | 1 + assets/index.html-628e1080.js | 1 + assets/index.html-63dc7a6d.js | 1 - assets/index.html-642575b2.js | 1 - assets/index.html-65443bd6.js | 1 + .../{index.html-a792a9dd.js => index.html-655d0aa4.js} | 2 +- assets/index.html-67fcf803.js | 1 - assets/index.html-68cbe014.js | 1 + assets/index.html-69da61dc.js | 1 - assets/index.html-6e78d5d8.js | 1 + assets/index.html-6ec6af8d.js | 1 - assets/index.html-703fd342.js | 1 + .../{index.html-d81a0463.js => index.html-708074bf.js} | 2 +- assets/index.html-71f0a305.js | 1 + assets/index.html-73304dd1.js | 1 + assets/index.html-738f2672.js | 1 - assets/index.html-7486b0cd.js | 1 + assets/index.html-7828f0f7.js | 1 - assets/index.html-792e0230.js | 1 + assets/index.html-7a6d9863.js | 1 + assets/index.html-7c72507c.js | 1 - assets/index.html-7d49a275.js | 1 + assets/index.html-7dc51df2.js | 1 - assets/index.html-7f314e84.js | 1 + assets/index.html-80390e7e.js | 1 - assets/index.html-80910b35.js | 1 + assets/index.html-80dceddd.js | 1 - assets/index.html-8173c87f.js | 1 + assets/index.html-826f201a.js | 1 + assets/index.html-829a03f9.js | 1 - assets/index.html-82e1c5a2.js | 1 - assets/index.html-8356dc49.js | 1 + assets/index.html-841ced47.js | 1 + assets/index.html-8746e650.js | 1 - assets/index.html-87fd90ed.js | 1 + assets/index.html-88675a51.js | 1 + assets/index.html-8e98e168.js | 1 + assets/index.html-8e9c291f.js | 1 - assets/index.html-8fafb680.js | 1 + assets/index.html-8fe18dac.js | 1 - assets/index.html-94ce2876.js | 1 - assets/index.html-973eefe9.js | 1 - assets/index.html-97aae3a5.js | 1 - assets/index.html-99a08069.js | 1 + assets/index.html-99ffa845.js | 1 + assets/index.html-9c26cb1b.js | 1 + assets/index.html-9cc5c4ec.js | 1 - assets/index.html-9dbb56a6.js | 1 - assets/index.html-9de6a295.js | 1 + assets/index.html-9e562e0b.js | 1 - .../{index.html-d0be7581.js => index.html-9ef3e9c5.js} | 2 +- assets/index.html-9fc36594.js | 1 + assets/index.html-a138a218.js | 1 - assets/index.html-a24cd242.js | 1 - assets/index.html-a3fb2281.js | 1 + assets/index.html-a40bfcf1.js | 1 - assets/index.html-a487761f.js | 1 - assets/index.html-a599b55b.js | 1 + assets/index.html-a6b907ea.js | 1 - assets/index.html-a796921c.js | 1 - assets/index.html-aa0a2963.js | 1 - assets/index.html-aaaa5582.js | 1 - assets/index.html-abd45de9.js | 1 + assets/index.html-ac95d5e1.js | 1 + assets/index.html-ae498ecc.js | 1 - assets/index.html-af148d83.js | 1 + assets/index.html-af2d5747.js | 1 - assets/index.html-b11a6d83.js | 1 + assets/index.html-b225a160.js | 1 - assets/index.html-b274dee6.js | 1 + assets/index.html-b3edb696.js | 1 - assets/index.html-b4248a8a.js | 1 - assets/index.html-b47afadc.js | 1 - assets/index.html-b6c53cef.js | 1 - assets/index.html-b6ed9b39.js | 1 - assets/index.html-b6ef2faf.js | 1 - assets/index.html-b8b33bab.js | 1 - assets/index.html-b928cb3e.js | 1 - assets/index.html-ba6b3c43.js | 1 - assets/index.html-bb1a11ae.js | 1 + assets/index.html-bc3e6ee4.js | 1 - assets/index.html-bc4c13c1.js | 1 + assets/index.html-bebc7176.js | 1 + assets/index.html-bef10b53.js | 1 + assets/index.html-c003726e.js | 1 - assets/index.html-c3424145.js | 1 + assets/index.html-c44d69f7.js | 1 + assets/index.html-c48ba2ce.js | 1 - assets/index.html-c5dbcb7d.js | 1 + assets/index.html-c651a9c9.js | 1 - assets/index.html-c8d3117f.js | 1 - assets/index.html-c8e2a866.js | 1 + assets/index.html-ca070982.js | 1 + assets/index.html-caad08ca.js | 1 + assets/index.html-cb07acf4.js | 1 + assets/index.html-cc006914.js | 1 - assets/index.html-cc4280bf.js | 1 + assets/index.html-cc8c4833.js | 1 + assets/index.html-cceb4da9.js | 1 - assets/index.html-cd9adab9.js | 1 + assets/index.html-cda4fd8d.js | 1 - assets/index.html-cde888bc.js | 1 + assets/index.html-ce843006.js | 1 + .../{index.html-fd1945cc.js => index.html-cf74a461.js} | 2 +- assets/index.html-d21fddcf.js | 1 + assets/index.html-d2f1ac13.js | 1 - assets/index.html-d41bfe4a.js | 1 + assets/index.html-d4d932fa.js | 1 + assets/index.html-d51f39fd.js | 1 - assets/index.html-d718f98e.js | 1 - assets/index.html-d8b76fb0.js | 1 + assets/index.html-d8c176e8.js | 1 + assets/index.html-db3e67eb.js | 1 - assets/index.html-db563b70.js | 1 - assets/index.html-dc65da44.js | 1 - assets/index.html-dcb289c5.js | 1 - assets/index.html-dd2fa6a9.js | 1 + assets/index.html-dd5b1d21.js | 1 - assets/index.html-dff5c8dd.js | 1 + assets/index.html-e08fbde6.js | 1 - assets/index.html-e2f8d29c.js | 1 + assets/index.html-e5c61148.js | 1 - .../{index.html-518e4661.js => index.html-e5ece9df.js} | 2 +- assets/index.html-e61fd1cb.js | 1 + assets/index.html-e794dc7c.js | 1 + assets/index.html-e802eb63.js | 1 + assets/index.html-e80cd4e9.js | 1 - assets/index.html-e9f56882.js | 1 - assets/index.html-ea11413f.js | 1 + assets/index.html-ebf7c8a6.js | 1 - assets/index.html-ecf9528a.js | 1 - assets/index.html-ed38e92b.js | 1 - assets/index.html-ef7476f5.js | 1 + assets/index.html-f2d96dc1.js | 1 + assets/index.html-f484a8af.js | 1 + assets/index.html-f5163cd4.js | 1 + assets/index.html-f65f686f.js | 1 - assets/index.html-f72faa75.js | 1 + assets/index.html-f757edb6.js | 1 + assets/index.html-fd4f4f88.js | 1 - assets/index.html-fd710a7b.js | 1 + .../{intro.html-af76d45a.js => intro.html-7b1fe204.js} | 2 +- assets/{mac.html-b36382f1.js => mac.html-b17760cf.js} | 2 +- .../{memos.html-2c84e754.js => memos.html-33383c9d.js} | 2 +- ...tos.html-31a55b6d.js => mt-photos.html-d4d50d1b.js} | 2 +- ...ome.html-8f4f4680.js => navidrome.html-3d013343.js} | 2 +- ...wborn.html-087ef284.js => newborn.html-158c7943.js} | 2 +- assets/{pageview-c02e7838.js => pageview-c3030f96.js} | 2 +- ...long.html-46474812.js => qinglong.html-d71cbe87.js} | 2 +- ...reader.html-0c7f3652.js => reader.html-6ee0f1d4.js} | 2 +- ...html-74690e6f.js => reverse-proxy.html-93c989cf.js} | 2 +- ....html-d86a4086.js => stirling-pdf.html-0ca4a01a.js} | 2 +- ...ing.html-654c0342.js => syncthing.html-f30d8440.js} | 2 +- ...esk.html-880cae83.js => tachidesk.html-0fccc9b8.js} | 2 +- ...a.html-2821e010.js => uptime-kuma.html-e05a399d.js} | 2 +- blog.html | 4 ++-- category/index.html | 4 ++-- "category/\345\201\245\345\272\267/index.html" | 4 ++-- "category/\345\215\232\345\256\242/index.html" | 4 ++-- .../index.html" | 4 ++-- "category/\345\267\245\345\205\267/index.html" | 4 ++-- .../\346\234\215\345\212\241\345\231\250/index.html" | 4 ++-- "category/\347\263\273\347\273\237/index.html" | 4 ++-- "category/\347\275\221\347\273\234/index.html" | 4 ++-- .../\350\207\252\345\212\250\345\214\226/index.html" | 4 ++-- .../index.html" | 4 ++-- "category/\350\264\255\347\211\251/index.html" | 4 ++-- code/AutoHotkey.html | 4 ++-- code/Electron.html | 4 ++-- code/HTML.html | 4 ++-- code/Javascript.html | 4 ++-- code/Markdown.html | 4 ++-- code/Python.html | 4 ++-- code/Regex.html | 4 ++-- code/Vue.html | 4 ++-- code/index.html | 4 ++-- deploy/CloudServices.html | 4 ++-- deploy/Cloudflare.html | 4 ++-- deploy/DNS.html | 4 ++-- deploy/GitHub.html | 4 ++-- deploy/MySQL.html | 4 ++-- deploy/Static.html | 4 ++-- deploy/VPS.html | 4 ++-- deploy/index.html | 4 ++-- family/Coupon.html | 4 ++-- family/Diet.html | 4 ++-- family/HomeAutomation.html | 4 ++-- family/Life.html | 4 ++-- family/Maintenance.html | 4 ++-- family/Medical.html | 4 ++-- family/Shoppinglist.html | 4 ++-- family/baby/birthing.html | 4 ++-- family/baby/index.html | 4 ++-- family/baby/newborn.html | 4 ++-- family/index.html | 4 ++-- index.html | 4 ++-- intro.html | 4 ++-- posts/2017-04-18-wechat_multi_open.html | 4 ++-- posts/2017-04-22-rss_feed43_feedex.html | 4 ++-- posts/2017-07-28-office_2016_installer_error.html | 4 ++-- posts/2017-07-29-onenote_2016_cannot_be_logged_in.html | 4 ++-- posts/2017-09-02-forced_shutdown.html | 4 ++-- posts/2017-09-03-smb_lan_sharing.html | 4 ++-- posts/2017-10-18-light_cat_e8-c-epon_admin.html | 4 ++-- posts/2017-10-18-light_cat_port_forwarding.html | 4 ++-- posts/2018-01-19-forget_the_cdn.html | 4 ++-- posts/2018-01-31-hire_a_robot.html | 4 ++-- posts/2018-03-06-no_more_dinner.html | 4 ++-- posts/2018-04-30-baota_deploy_vps.html | 4 ++-- posts/2018-05-01-jekyll_blog_on_github_pages.html | 4 ++-- posts/2018-05-02-jekyll_blog_on_vps.html | 4 ++-- posts/2018-05-03-jekyll_blog_autodeploy.html | 4 ++-- posts/2018-05-04-audition_cut_mp3.html | 4 ++-- posts/2018-05-15-aria2_a_new_download_tool.html | 4 ++-- posts/2018-05-24-airtable_noob.html | 4 ++-- posts/2018-06-08-baizhuo_gp1700.html | 4 ++-- posts/2018-06-10-koolproxy_https.html | 4 ++-- posts/2018-06-19-iptv_direckly.html | 4 ++-- posts/2018-10-07-huginn_scraping_any_website.html | 4 ++-- posts/2018-12-28-voice_input_try.html | 4 ++-- posts/2019-03-31-openvpn_back_to_home.html | 4 ++-- posts/2019-04-01-rsshub_noob.html | 4 ++-- posts/2019-08-26-scrcpy_screen_projection.html | 4 ++-- ...019-10-04-fake_aka_hospital_skin_care_products.html | 4 ++-- posts/2020-03-25-rsshub_on_vps.html | 4 ++-- posts/2020-09-13-wifi_speed_up.html | 4 ++-- posts/2020-09-22-uefi_asus_board.html | 4 ++-- posts/2020-10-25-dpc_watchdog_violation.html | 4 ++-- posts/2020-11-01-gym_equipment_throw_away.html | 4 ++-- posts/2020-11-27-rime_input.html | 4 ++-- posts/2020-12-17-weight_log.html | 4 ++-- posts/2021-01-02-keepass_the_real_lastpassword.html | 4 ++-- posts/2021-01-27-blog_jekyll_to_wordpress.html | 4 ++-- ...-05-31-principles_criticism_and_self-criticism.html | 4 ++-- posts/2021-10-23-nas_with_rsshub_and_huginn.html | 4 ++-- posts/2022-01-23-wechat_lucky_money_cover.html | 4 ++-- posts/2022-02-19-microsoft_store_fixed.html | 4 ++-- posts/2022-03-09-lenovo_black_card_member.html | 4 ++-- posts/2022-03-17-rss_persistent_link_collection.html | 4 ++-- ...get_the_strongest_software_manager_for_windows.html | 4 ++-- .../2022-04-20-survivorship_bias_in_shanghai_2022.html | 4 ++-- posts/2022-04-21-uivision_rpa.html | 4 ++-- posts/2022-05-22-surveillance_video_for_myself.html | 4 ++-- posts/2022-06-07-blog_md_to_wordpress.html | 4 ++-- posts/2022-08-10-new_stuff_shaping_machine.html | 4 ++-- ...2-08-22-learndata_blog_to_knowledge_management.html | 4 ++-- ...22-09-07-extreme_branding_thinking_with_mate50.html | 4 ++-- posts/2022-11-03-ffmpeg_screen_recording.html | 4 ++-- posts/2022-11-18-whisper_ai_subtitles.html | 4 ++-- posts/2023-01-26-whiteboard_gtd.html | 4 ++-- posts/2023-03-31-efficient_morning_5am_club.html | 4 ++-- posts/2023-09-05-virtual_positioning.html | 4 ++-- posts/2023-10-07-clone-voice.html | 4 ++-- posts/2023-10-29-switch-firmware-updates.html | 4 ++-- posts/2023-12-12-eu.org-free-domain.html | 4 ++-- posts/2023-12-12-sd-op.html | 4 ++-- posts/2023-12-13-awesome-selfhosted-cn.html | 4 ++-- posts/index.html | 4 ++-- rss.xml | 4 ++-- search-pro.worker.js | 2 +- services/Docker.html | 4 ++-- services/Huginn.html | 4 ++-- services/NAS.html | 4 ++-- services/TTRSS.html | 4 ++-- services/dockers-on-nas/cors-anywhere.html | 4 ++-- services/dockers-on-nas/emby.html | 4 ++-- services/dockers-on-nas/grocy.html | 4 ++-- services/dockers-on-nas/index.html | 4 ++-- services/dockers-on-nas/memos.html | 4 ++-- services/dockers-on-nas/mt-photos.html | 4 ++-- services/dockers-on-nas/navidrome.html | 4 ++-- services/dockers-on-nas/qinglong.html | 4 ++-- services/dockers-on-nas/reader.html | 4 ++-- services/dockers-on-nas/reverse-proxy.html | 4 ++-- services/dockers-on-nas/stirling-pdf.html | 4 ++-- services/dockers-on-nas/syncthing.html | 4 ++-- services/dockers-on-nas/tachidesk.html | 4 ++-- services/dockers-on-nas/uptime-kuma.html | 4 ++-- services/index.html | 4 ++-- sitemap.xml | 2 +- star/index.html | 4 ++-- tag/ai/index.html | 4 ++-- tag/airtable/index.html | 4 ++-- tag/aria2/index.html | 4 ++-- tag/audition/index.html | 4 ++-- tag/blog/index.html | 4 ++-- tag/cdn/index.html | 4 ++-- tag/docker/index.html | 4 ++-- tag/feed43/index.html | 4 ++-- tag/feedex/index.html | 4 ++-- tag/free/index.html | 4 ++-- tag/games/index.html | 4 ++-- tag/github/index.html | 4 ++-- tag/gp1700/index.html | 4 ++-- tag/gtd/index.html | 4 ++-- tag/huginn/index.html | 4 ++-- tag/index.html | 4 ++-- tag/iptv/index.html | 4 ++-- tag/jekyll/index.html | 4 ++-- tag/keepass/index.html | 4 ++-- tag/koolproxy/index.html | 4 ++-- tag/microsoft-store/index.html | 4 ++-- tag/nas/index.html | 4 ++-- tag/obs/index.html | 4 ++-- tag/office/index.html | 4 ++-- tag/onenote/index.html | 4 ++-- tag/openvpn/index.html | 4 ++-- tag/rpa/index.html | 4 ++-- tag/rss/index.html | 4 ++-- tag/rsshub/index.html | 4 ++-- tag/scrcpy/index.html | 4 ++-- tag/smb/index.html | 4 ++-- tag/stablediffusion/index.html | 4 ++-- tag/travis-ci/index.html | 4 ++-- tag/ui.vision/index.html | 4 ++-- tag/vits/index.html | 4 ++-- tag/vuepress/index.html | 4 ++-- tag/whisper/index.html | 4 ++-- tag/wifi/index.html | 4 ++-- tag/winget/index.html | 4 ++-- tag/winstall/index.html | 4 ++-- tag/wordpress/index.html | 4 ++-- "tag/\344\270\273\346\235\277/index.html" | 4 ++-- .../index.html" | 4 ++-- "tag/\345\205\211\347\214\253/index.html" | 4 ++-- "tag/\345\205\263\346\234\272/index.html" | 4 ++-- .../index.html" | 4 ++-- "tag/\345\207\217\350\202\245/index.html" | 4 ++-- "tag/\345\214\226\345\246\206\345\223\201/index.html" | 4 ++-- "tag/\345\216\237\345\210\231/index.html" | 4 ++-- "tag/\345\220\210\351\233\206/index.html" | 4 ++-- "tag/\345\237\237\345\220\215/index.html" | 4 ++-- .../index.html" | 4 ++-- .../index.html" | 4 ++-- "tag/\345\252\222\344\275\223/index.html" | 4 ++-- "tag/\345\255\227\345\271\225/index.html" | 4 ++-- .../index.html" | 4 ++-- "tag/\345\260\217\347\213\274\346\257\253/index.html" | 4 ++-- "tag/\345\267\245\344\275\234\346\265\201/index.html" | 4 ++-- .../index.html" | 4 ++-- "tag/\345\273\272\347\253\231/index.html" | 4 ++-- "tag/\345\275\225\345\261\217/index.html" | 4 ++-- "tag/\345\276\256\344\277\241/index.html" | 4 ++-- .../index.html" | 4 ++-- .../index.html" | 4 ++-- "tag/\346\212\225\345\261\217/index.html" | 4 ++-- "tag/\346\226\255\350\210\215\347\246\273/index.html" | 4 ++-- "tag/\346\227\266\351\227\264/index.html" | 4 ++-- .../index.html" | 4 ++-- "tag/\347\224\273\347\224\273/index.html" | 4 ++-- "tag/\347\226\253\346\203\205/index.html" | 4 ++-- "tag/\347\231\275\345\253\226/index.html" | 4 ++-- "tag/\347\231\275\346\235\277/index.html" | 4 ++-- "tag/\347\231\276\345\256\235\347\256\261/index.html" | 4 ++-- "tag/\347\233\264\346\222\255/index.html" | 4 ++-- "tag/\350\201\224\346\203\263/index.html" | 4 ++-- .../index.html" | 4 ++-- "tag/\350\223\235\345\261\217/index.html" | 4 ++-- .../index.html" | 4 ++-- .../index.html" | 4 ++-- "tag/\350\276\223\345\205\245\346\263\225/index.html" | 4 ++-- "tag/\350\277\205\351\233\267/index.html" | 4 ++-- "tag/\351\237\263\351\242\221/index.html" | 4 ++-- timeline/index.html | 4 ++-- web/Comments.html | 4 ++-- web/VuePress.html | 4 ++-- web/docsify.html | 4 ++-- web/index.html | 4 ++-- windows/NewSystem.html | 4 ++-- windows/QTTabBar.html | 4 ++-- windows/cd.html | 4 ++-- windows/faq.html | 4 ++-- windows/index.html | 4 ++-- windows/mac.html | 4 ++-- 584 files changed, 732 insertions(+), 732 deletions(-) rename assets/{0_live_equipments.html-52568387.js => 0_live_equipments.html-7ee90793.js} (99%) rename assets/{1_obs_basic.html-fd19eee3.js => 1_obs_basic.html-b23d9b6c.js} (99%) rename assets/{2017-04-18-wechat_multi_open.html-a4c8b65b.js => 2017-04-18-wechat_multi_open.html-083325fc.js} (95%) rename assets/{2017-04-22-rss_feed43_feedex.html-614cc34c.js => 2017-04-22-rss_feed43_feedex.html-099a0750.js} (99%) rename assets/{2017-07-28-office_2016_installer_error.html-ce8b22fc.js => 2017-07-28-office_2016_installer_error.html-c8d27bf6.js} (97%) rename assets/{2017-07-29-onenote_2016_cannot_be_logged_in.html-019fe624.js => 2017-07-29-onenote_2016_cannot_be_logged_in.html-fcc852ca.js} (96%) rename assets/{2017-09-02-forced_shutdown.html-6f4cfb37.js => 2017-09-02-forced_shutdown.html-9106acd7.js} (98%) rename assets/{2017-09-03-smb_lan_sharing.html-a422dad5.js => 2017-09-03-smb_lan_sharing.html-7a69b98c.js} (96%) rename assets/{2017-10-18-light_cat_e8-c-epon_admin.html-cf10a12d.js => 2017-10-18-light_cat_e8-c-epon_admin.html-70a60119.js} (97%) rename assets/{2017-10-18-light_cat_port_forwarding.html-1182288c.js => 2017-10-18-light_cat_port_forwarding.html-4fc7cb61.js} (92%) rename assets/{2018-01-19-forget_the_cdn.html-74ea0d8d.js => 2018-01-19-forget_the_cdn.html-4b463cbc.js} (97%) rename assets/{2018-01-31-hire_a_robot.html-d83c4b6c.js => 2018-01-31-hire_a_robot.html-823ab3c6.js} (95%) rename assets/{2018-03-06-no_more_dinner.html-f9770006.js => 2018-03-06-no_more_dinner.html-985b7953.js} (96%) rename assets/{2018-04-30-baota_deploy_vps.html-741bdd45.js => 2018-04-30-baota_deploy_vps.html-4e06d008.js} (96%) rename assets/{2018-05-01-jekyll_blog_on_github_pages.html-2d7b55f6.js => 2018-05-01-jekyll_blog_on_github_pages.html-189a0a55.js} (97%) rename assets/{2018-05-02-jekyll_blog_on_vps.html-9792cb7e.js => 2018-05-02-jekyll_blog_on_vps.html-53ba212f.js} (89%) rename assets/{2018-05-03-jekyll_blog_autodeploy.html-f3a6c954.js => 2018-05-03-jekyll_blog_autodeploy.html-45303d3b.js} (99%) rename assets/{2018-05-04-audition_cut_mp3.html-1c257b2c.js => 2018-05-04-audition_cut_mp3.html-727329ff.js} (96%) rename assets/{2018-05-15-aria2_a_new_download_tool.html-07007d22.js => 2018-05-15-aria2_a_new_download_tool.html-4033b062.js} (99%) rename assets/{2018-05-24-airtable_noob.html-a5d238d1.js => 2018-05-24-airtable_noob.html-764fa008.js} (98%) rename assets/{2018-06-08-baizhuo_gp1700.html-74c2752a.js => 2018-06-08-baizhuo_gp1700.html-f722dc25.js} (97%) rename assets/{2018-06-10-koolproxy_https.html-e7708a43.js => 2018-06-10-koolproxy_https.html-3099c7b9.js} (97%) rename assets/{2018-06-19-iptv_direckly.html-3ca8900e.js => 2018-06-19-iptv_direckly.html-12b69b0c.js} (97%) rename assets/{2018-10-07-huginn_scraping_any_website.html-b6053671.js => 2018-10-07-huginn_scraping_any_website.html-c26d1c54.js} (98%) rename assets/{2018-12-28-voice_input_try.html-0f81c219.js => 2018-12-28-voice_input_try.html-739b51e6.js} (98%) rename assets/{2019-03-31-openvpn_back_to_home.html-e8691620.js => 2019-03-31-openvpn_back_to_home.html-7cfdcca9.js} (95%) rename assets/{2019-04-01-rsshub_noob.html-f3a1c60d.js => 2019-04-01-rsshub_noob.html-4cbd0818.js} (98%) rename assets/{2019-08-26-scrcpy_screen_projection.html-dc1f870a.js => 2019-08-26-scrcpy_screen_projection.html-d2a01146.js} (99%) rename assets/{2019-10-04-fake_aka_hospital_skin_care_products.html-4de9b4ef.js => 2019-10-04-fake_aka_hospital_skin_care_products.html-4430a60a.js} (97%) rename assets/{2020-03-25-rsshub_on_vps.html-fb9a29f1.js => 2020-03-25-rsshub_on_vps.html-507599ca.js} (97%) rename assets/{2020-09-13-wifi_speed_up.html-57ef00d0.js => 2020-09-13-wifi_speed_up.html-52b4279e.js} (97%) rename assets/{2020-09-22-uefi_asus_board.html-2dfd45ac.js => 2020-09-22-uefi_asus_board.html-13d155b4.js} (94%) rename assets/{2020-10-25-dpc_watchdog_violation.html-f5ee17cb.js => 2020-10-25-dpc_watchdog_violation.html-210083cd.js} (98%) rename assets/{2020-11-01-gym_equipment_throw_away.html-fd92186d.js => 2020-11-01-gym_equipment_throw_away.html-3e708f6f.js} (99%) rename assets/{2020-11-27-rime_input.html-8bbd2754.js => 2020-11-27-rime_input.html-2111c326.js} (99%) rename assets/{2020-12-17-weight_log.html-0eeef1e4.js => 2020-12-17-weight_log.html-ff4837d5.js} (99%) rename assets/{2021-01-02-keepass_the_real_lastpassword.html-911d7622.js => 2021-01-02-keepass_the_real_lastpassword.html-312f80ff.js} (99%) rename assets/{2021-01-27-blog_jekyll_to_wordpress.html-0eba805a.js => 2021-01-27-blog_jekyll_to_wordpress.html-831c922c.js} (98%) rename assets/{2021-05-31-principles_criticism_and_self-criticism.html-62c76233.js => 2021-05-31-principles_criticism_and_self-criticism.html-6e4b611d.js} (98%) rename assets/{2021-10-23-nas_with_rsshub_and_huginn.html-9a26fee1.js => 2021-10-23-nas_with_rsshub_and_huginn.html-893f99d6.js} (98%) rename assets/{2022-01-23-wechat_lucky_money_cover.html-ab9e7936.js => 2022-01-23-wechat_lucky_money_cover.html-b0808199.js} (97%) rename assets/{2022-02-19-microsoft_store_fixed.html-a785b73a.js => 2022-02-19-microsoft_store_fixed.html-a400e330.js} (95%) rename assets/{2022-03-09-lenovo_black_card_member.html-5c80a64b.js => 2022-03-09-lenovo_black_card_member.html-0b3c7f70.js} (98%) rename assets/{2022-03-17-rss_persistent_link_collection.html-c68651cd.js => 2022-03-17-rss_persistent_link_collection.html-e0611cdf.js} (97%) rename assets/{2022-03-21-winget_the_strongest_software_manager_for_windows.html-a6f67d82.js => 2022-03-21-winget_the_strongest_software_manager_for_windows.html-fecb3706.js} (98%) rename assets/{2022-04-20-survivorship_bias_in_shanghai_2022.html-a114306f.js => 2022-04-20-survivorship_bias_in_shanghai_2022.html-1fd49fd5.js} (98%) rename assets/{2022-04-21-uivision_rpa.html-c29680af.js => 2022-04-21-uivision_rpa.html-e68a8aef.js} (98%) rename assets/{2022-05-22-surveillance_video_for_myself.html-a414b26d.js => 2022-05-22-surveillance_video_for_myself.html-2785faf0.js} (99%) rename assets/{2022-06-07-blog_md_to_wordpress.html-87d717e7.js => 2022-06-07-blog_md_to_wordpress.html-d638bef3.js} (99%) rename assets/{2022-08-10-new_stuff_shaping_machine.html-229805a7.js => 2022-08-10-new_stuff_shaping_machine.html-937612c3.js} (98%) rename assets/{2022-08-22-learndata_blog_to_knowledge_management.html-b17a78b5.js => 2022-08-22-learndata_blog_to_knowledge_management.html-6c65611a.js} (99%) rename assets/{2022-09-07-extreme_branding_thinking_with_mate50.html-8de86de3.js => 2022-09-07-extreme_branding_thinking_with_mate50.html-363f7666.js} (98%) rename assets/{2022-11-03-ffmpeg_screen_recording.html-a850223c.js => 2022-11-03-ffmpeg_screen_recording.html-02549a77.js} (99%) rename assets/{2022-11-18-whisper_ai_subtitles.html-3b8e469e.js => 2022-11-18-whisper_ai_subtitles.html-a9e89343.js} (99%) rename assets/{2023-01-26-whiteboard_gtd.html-38b96144.js => 2023-01-26-whiteboard_gtd.html-07efb255.js} (99%) rename assets/{2023-03-31-efficient_morning_5am_club.html-c016d8d7.js => 2023-03-31-efficient_morning_5am_club.html-83a6966e.js} (99%) rename assets/{2023-09-05-virtual_positioning.html-d55b053b.js => 2023-09-05-virtual_positioning.html-6cd0dd6e.js} (98%) rename assets/{2023-10-07-clone-voice.html-e39fb5c7.js => 2023-10-07-clone-voice.html-924a5a17.js} (99%) rename assets/{2023-10-29-switch-firmware-updates.html-5aea9f96.js => 2023-10-29-switch-firmware-updates.html-f177fe8a.js} (98%) rename assets/{2023-12-12-eu.org-free-domain.html-42890bfa.js => 2023-12-12-eu.org-free-domain.html-db363200.js} (97%) rename assets/{2023-12-12-sd-op.html-b42c3419.js => 2023-12-12-sd-op.html-6527f220.js} (98%) rename assets/{2023-12-13-awesome-selfhosted-cn.html-ce663dba.js => 2023-12-13-awesome-selfhosted-cn.html-751d3025.js} (99%) rename assets/{2_obs_streamfx.html-0e2aa576.js => 2_obs_streamfx.html-ef0fb9e1.js} (98%) rename assets/{3_obs_plugins.html-111c51c9.js => 3_obs_plugins.html-d6d2de3a.js} (98%) rename assets/{404.html-dc59705a.js => 404.html-890400ea.js} (71%) rename assets/{4_live_effects.html-1bb840c3.js => 4_live_effects.html-6356a206.js} (98%) rename assets/{5_live_platforms.html-44377617.js => 5_live_platforms.html-961e19ea.js} (99%) rename assets/{6_live_positioning.html-29d9d726.js => 6_live_positioning.html-1ab27c29.js} (99%) rename assets/{AIEnjoy.html-7f185b8a.js => AIEnjoy.html-70ee36aa.js} (98%) rename assets/{AppNotes.html-d0552b1b.js => AppNotes.html-ecd92d85.js} (99%) rename assets/{Applist.html-2b70e0fb.js => Applist.html-32e6a97e.js} (99%) rename assets/{AutoHotkey.html-557788d1.js => AutoHotkey.html-dad503f2.js} (99%) delete mode 100644 assets/ChatGPT.html-329e195c.js rename assets/{ChatGPT.html-e006ecf1.js => ChatGPT.html-36342337.js} (90%) rename assets/{ChatGPT.html-88afe4ff.js => ChatGPT.html-3864f52d.js} (98%) create mode 100644 assets/ChatGPT.html-6766ad44.js rename assets/{Chrome.html-f6b1063c.js => Chrome.html-446be051.js} (99%) rename assets/{CloudServices.html-9193fd73.js => CloudServices.html-d954c56e.js} (98%) rename assets/{Cloudflare.html-946b9ef3.js => Cloudflare.html-050db08c.js} (99%) rename assets/{Comments.html-b8fb0500.js => Comments.html-911d5a90.js} (99%) rename assets/{Coupon.html-53f49b75.js => Coupon.html-14d91805.js} (98%) rename assets/{DNS.html-39e11d24.js => DNS.html-64491632.js} (95%) rename assets/{DailyRoutine.html-b148ec8b.js => DailyRoutine.html-39b176d7.js} (99%) rename assets/{Diet.html-7af402c8.js => Diet.html-9933277f.js} (99%) rename assets/{Docker.html-fc662514.js => Docker.html-042e1b4d.js} (99%) rename assets/{Electron.html-e1f0f516.js => Electron.html-5b3e2a63.js} (99%) rename assets/{Fitness.html-704722ad.js => Fitness.html-d39a2db9.js} (99%) rename assets/{GitHub.html-ae0556fc.js => GitHub.html-08828d51.js} (99%) rename assets/{HTML.html-bb5b5659.js => HTML.html-6b411f9a.js} (99%) rename assets/{HomeAutomation.html-24bbd727.js => HomeAutomation.html-a23779d7.js} (98%) rename assets/{Huginn.html-36f26da1.js => Huginn.html-466cce0b.js} (99%) rename assets/{Javascript.html-300e7863.js => Javascript.html-c401632d.js} (99%) rename assets/{Life.html-971d1c86.js => Life.html-ccfd313e.js} (97%) rename assets/{Maintenance.html-7f98eaf6.js => Maintenance.html-3c20e5fe.js} (98%) rename assets/{Markdown.html-ce001cb7.js => Markdown.html-4b1e7df6.js} (97%) rename assets/{Medical.html-2f6b4c5e.js => Medical.html-f7b20fa1.js} (97%) rename assets/{Midjourney.html-f6b22221.js => Midjourney.html-d3c1542e.js} (98%) rename assets/{MySQL.html-8f1f34d7.js => MySQL.html-1b3683ae.js} (96%) rename assets/{NAS.html-7c34a901.js => NAS.html-ac8512de.js} (99%) rename assets/{NewSystem.html-e43fe61f.js => NewSystem.html-3a292023.js} (99%) rename assets/{Python.html-55396a09.js => Python.html-1aa7e29a.js} (99%) rename assets/{QTTabBar.html-79ee3476.js => QTTabBar.html-b27c67bb.js} (97%) rename assets/{Regex.html-44b866d1.js => Regex.html-7d212249.js} (99%) rename assets/{SearchResult-7eb87603.js => SearchResult-3a512c97.js} (98%) rename assets/{Shoppinglist.html-40674b0f.js => Shoppinglist.html-d0d34cbb.js} (99%) rename assets/{Static.html-c9e8a328.js => Static.html-9637b31b.js} (99%) rename assets/{TTRSS.html-4e81b3cc.js => TTRSS.html-29c1226e.js} (98%) rename assets/{VPS.html-a561ad86.js => VPS.html-71f15415.js} (99%) rename assets/{Vue.html-23952fed.js => Vue.html-27b88ef1.js} (98%) rename assets/{VuePress.html-7392f3ea.js => VuePress.html-e8a203d8.js} (99%) rename assets/{app-378b5903.js => app-514297a1.js} (90%) rename assets/{birthing.html-ca0fc22a.js => birthing.html-3a678bbd.js} (97%) rename assets/{blog.html-0c58a1f8.js => blog.html-b1d27045.js} (71%) rename assets/{cd.html-7a7e10a7.js => cd.html-88eb1e8b.js} (98%) rename assets/{component-37b4b5ce.js => component-d4572d7c.js} (99%) rename assets/{cors-anywhere.html-f6dd507f.js => cors-anywhere.html-7a0bc063.js} (99%) rename assets/{design.html-8ac83d76.js => design.html-e981835f.js} (98%) rename assets/{docsify.html-f30bd70d.js => docsify.html-6f20d15a.js} (98%) rename assets/{emby.html-a34a1b07.js => emby.html-c8ad52bf.js} (97%) rename assets/{faq.html-9b622df1.js => faq.html-296ac29b.js} (98%) rename assets/{grocy.html-bd8c5b30.js => grocy.html-a2e187f9.js} (98%) rename assets/{index.html-1849b57e.js => index.html-00d0a3d3.js} (71%) rename assets/{index.html-1a152fef.js => index.html-030899ea.js} (71%) rename assets/{index.html-0133e012.js => index.html-036d867a.js} (71%) rename assets/{index.html-09d01515.js => index.html-06e5edce.js} (71%) create mode 100644 assets/index.html-0bd62ab7.js create mode 100644 assets/index.html-0e51f7d4.js create mode 100644 assets/index.html-0e9babe3.js create mode 100644 assets/index.html-0f797976.js create mode 100644 assets/index.html-110e6485.js create mode 100644 assets/index.html-1a4e1ae1.js delete mode 100644 assets/index.html-1b545c10.js create mode 100644 assets/index.html-1cb11320.js delete mode 100644 assets/index.html-1d14fc5b.js delete mode 100644 assets/index.html-1e7ee72a.js delete mode 100644 assets/index.html-1f11cb8e.js delete mode 100644 assets/index.html-21e526a1.js delete mode 100644 assets/index.html-223318a7.js delete mode 100644 assets/index.html-22f92f6a.js rename assets/{index.html-253e7aa1.js => index.html-233fb11d.js} (76%) delete mode 100644 assets/index.html-23c505a3.js delete mode 100644 assets/index.html-2475f012.js delete mode 100644 assets/index.html-2b17f977.js delete mode 100644 assets/index.html-2c117bd4.js create mode 100644 assets/index.html-2dc61fc7.js create mode 100644 assets/index.html-2e043e54.js create mode 100644 assets/index.html-2f8a3192.js delete mode 100644 assets/index.html-2f8eaae6.js create mode 100644 assets/index.html-2fac98cf.js create mode 100644 assets/index.html-313a5f48.js delete mode 100644 assets/index.html-362b5a98.js create mode 100644 assets/index.html-368e1ad7.js create mode 100644 assets/index.html-37a5fb9f.js create mode 100644 assets/index.html-385fd869.js create mode 100644 assets/index.html-38e2e1b5.js create mode 100644 assets/index.html-3a1f1c00.js rename assets/{index.html-f9998e05.js => index.html-3e64ff51.js} (98%) create mode 100644 assets/index.html-3efed762.js rename assets/{index.html-6f136dda.js => index.html-406e3f2f.js} (76%) delete mode 100644 assets/index.html-4276438e.js rename assets/{index.html-76d429a7.js => index.html-4432c323.js} (76%) create mode 100644 assets/index.html-44cb6628.js create mode 100644 assets/index.html-45428b17.js delete mode 100644 assets/index.html-46031371.js delete mode 100644 assets/index.html-481fcc0a.js delete mode 100644 assets/index.html-4a098dec.js delete mode 100644 assets/index.html-4bc35d28.js create mode 100644 assets/index.html-4bfc9d14.js create mode 100644 assets/index.html-4d4c3d9a.js delete mode 100644 assets/index.html-4f075679.js create mode 100644 assets/index.html-50d56e85.js create mode 100644 assets/index.html-50e0fcd2.js delete mode 100644 assets/index.html-5266b924.js create mode 100644 assets/index.html-52a16911.js delete mode 100644 assets/index.html-53d23dba.js delete mode 100644 assets/index.html-54089d9b.js create mode 100644 assets/index.html-549dd49d.js delete mode 100644 assets/index.html-55252939.js delete mode 100644 assets/index.html-57f7acb6.js delete mode 100644 assets/index.html-5887e1b6.js delete mode 100644 assets/index.html-595aa9ef.js create mode 100644 assets/index.html-59f156e6.js create mode 100644 assets/index.html-5d243dbd.js delete mode 100644 assets/index.html-5e2920a5.js delete mode 100644 assets/index.html-5e318919.js delete mode 100644 assets/index.html-60a45641.js delete mode 100644 assets/index.html-60f0a75b.js create mode 100644 assets/index.html-6255db08.js create mode 100644 assets/index.html-628e1080.js delete mode 100644 assets/index.html-63dc7a6d.js delete mode 100644 assets/index.html-642575b2.js create mode 100644 assets/index.html-65443bd6.js rename assets/{index.html-a792a9dd.js => index.html-655d0aa4.js} (76%) delete mode 100644 assets/index.html-67fcf803.js create mode 100644 assets/index.html-68cbe014.js delete mode 100644 assets/index.html-69da61dc.js create mode 100644 assets/index.html-6e78d5d8.js delete mode 100644 assets/index.html-6ec6af8d.js create mode 100644 assets/index.html-703fd342.js rename assets/{index.html-d81a0463.js => index.html-708074bf.js} (98%) create mode 100644 assets/index.html-71f0a305.js create mode 100644 assets/index.html-73304dd1.js delete mode 100644 assets/index.html-738f2672.js create mode 100644 assets/index.html-7486b0cd.js delete mode 100644 assets/index.html-7828f0f7.js create mode 100644 assets/index.html-792e0230.js create mode 100644 assets/index.html-7a6d9863.js delete mode 100644 assets/index.html-7c72507c.js create mode 100644 assets/index.html-7d49a275.js delete mode 100644 assets/index.html-7dc51df2.js create mode 100644 assets/index.html-7f314e84.js delete mode 100644 assets/index.html-80390e7e.js create mode 100644 assets/index.html-80910b35.js delete mode 100644 assets/index.html-80dceddd.js create mode 100644 assets/index.html-8173c87f.js create mode 100644 assets/index.html-826f201a.js delete mode 100644 assets/index.html-829a03f9.js delete mode 100644 assets/index.html-82e1c5a2.js create mode 100644 assets/index.html-8356dc49.js create mode 100644 assets/index.html-841ced47.js delete mode 100644 assets/index.html-8746e650.js create mode 100644 assets/index.html-87fd90ed.js create mode 100644 assets/index.html-88675a51.js create mode 100644 assets/index.html-8e98e168.js delete mode 100644 assets/index.html-8e9c291f.js create mode 100644 assets/index.html-8fafb680.js delete mode 100644 assets/index.html-8fe18dac.js delete mode 100644 assets/index.html-94ce2876.js delete mode 100644 assets/index.html-973eefe9.js delete mode 100644 assets/index.html-97aae3a5.js create mode 100644 assets/index.html-99a08069.js create mode 100644 assets/index.html-99ffa845.js create mode 100644 assets/index.html-9c26cb1b.js delete mode 100644 assets/index.html-9cc5c4ec.js delete mode 100644 assets/index.html-9dbb56a6.js create mode 100644 assets/index.html-9de6a295.js delete mode 100644 assets/index.html-9e562e0b.js rename assets/{index.html-d0be7581.js => index.html-9ef3e9c5.js} (98%) create mode 100644 assets/index.html-9fc36594.js delete mode 100644 assets/index.html-a138a218.js delete mode 100644 assets/index.html-a24cd242.js create mode 100644 assets/index.html-a3fb2281.js delete mode 100644 assets/index.html-a40bfcf1.js delete mode 100644 assets/index.html-a487761f.js create mode 100644 assets/index.html-a599b55b.js delete mode 100644 assets/index.html-a6b907ea.js delete mode 100644 assets/index.html-a796921c.js delete mode 100644 assets/index.html-aa0a2963.js delete mode 100644 assets/index.html-aaaa5582.js create mode 100644 assets/index.html-abd45de9.js create mode 100644 assets/index.html-ac95d5e1.js delete mode 100644 assets/index.html-ae498ecc.js create mode 100644 assets/index.html-af148d83.js delete mode 100644 assets/index.html-af2d5747.js create mode 100644 assets/index.html-b11a6d83.js delete mode 100644 assets/index.html-b225a160.js create mode 100644 assets/index.html-b274dee6.js delete mode 100644 assets/index.html-b3edb696.js delete mode 100644 assets/index.html-b4248a8a.js delete mode 100644 assets/index.html-b47afadc.js delete mode 100644 assets/index.html-b6c53cef.js delete mode 100644 assets/index.html-b6ed9b39.js delete mode 100644 assets/index.html-b6ef2faf.js delete mode 100644 assets/index.html-b8b33bab.js delete mode 100644 assets/index.html-b928cb3e.js delete mode 100644 assets/index.html-ba6b3c43.js create mode 100644 assets/index.html-bb1a11ae.js delete mode 100644 assets/index.html-bc3e6ee4.js create mode 100644 assets/index.html-bc4c13c1.js create mode 100644 assets/index.html-bebc7176.js create mode 100644 assets/index.html-bef10b53.js delete mode 100644 assets/index.html-c003726e.js create mode 100644 assets/index.html-c3424145.js create mode 100644 assets/index.html-c44d69f7.js delete mode 100644 assets/index.html-c48ba2ce.js create mode 100644 assets/index.html-c5dbcb7d.js delete mode 100644 assets/index.html-c651a9c9.js delete mode 100644 assets/index.html-c8d3117f.js create mode 100644 assets/index.html-c8e2a866.js create mode 100644 assets/index.html-ca070982.js create mode 100644 assets/index.html-caad08ca.js create mode 100644 assets/index.html-cb07acf4.js delete mode 100644 assets/index.html-cc006914.js create mode 100644 assets/index.html-cc4280bf.js create mode 100644 assets/index.html-cc8c4833.js delete mode 100644 assets/index.html-cceb4da9.js create mode 100644 assets/index.html-cd9adab9.js delete mode 100644 assets/index.html-cda4fd8d.js create mode 100644 assets/index.html-cde888bc.js create mode 100644 assets/index.html-ce843006.js rename assets/{index.html-fd1945cc.js => index.html-cf74a461.js} (93%) create mode 100644 assets/index.html-d21fddcf.js delete mode 100644 assets/index.html-d2f1ac13.js create mode 100644 assets/index.html-d41bfe4a.js create mode 100644 assets/index.html-d4d932fa.js delete mode 100644 assets/index.html-d51f39fd.js delete mode 100644 assets/index.html-d718f98e.js create mode 100644 assets/index.html-d8b76fb0.js create mode 100644 assets/index.html-d8c176e8.js delete mode 100644 assets/index.html-db3e67eb.js delete mode 100644 assets/index.html-db563b70.js delete mode 100644 assets/index.html-dc65da44.js delete mode 100644 assets/index.html-dcb289c5.js create mode 100644 assets/index.html-dd2fa6a9.js delete mode 100644 assets/index.html-dd5b1d21.js create mode 100644 assets/index.html-dff5c8dd.js delete mode 100644 assets/index.html-e08fbde6.js create mode 100644 assets/index.html-e2f8d29c.js delete mode 100644 assets/index.html-e5c61148.js rename assets/{index.html-518e4661.js => index.html-e5ece9df.js} (99%) create mode 100644 assets/index.html-e61fd1cb.js create mode 100644 assets/index.html-e794dc7c.js create mode 100644 assets/index.html-e802eb63.js delete mode 100644 assets/index.html-e80cd4e9.js delete mode 100644 assets/index.html-e9f56882.js create mode 100644 assets/index.html-ea11413f.js delete mode 100644 assets/index.html-ebf7c8a6.js delete mode 100644 assets/index.html-ecf9528a.js delete mode 100644 assets/index.html-ed38e92b.js create mode 100644 assets/index.html-ef7476f5.js create mode 100644 assets/index.html-f2d96dc1.js create mode 100644 assets/index.html-f484a8af.js create mode 100644 assets/index.html-f5163cd4.js delete mode 100644 assets/index.html-f65f686f.js create mode 100644 assets/index.html-f72faa75.js create mode 100644 assets/index.html-f757edb6.js delete mode 100644 assets/index.html-fd4f4f88.js create mode 100644 assets/index.html-fd710a7b.js rename assets/{intro.html-af76d45a.js => intro.html-7b1fe204.js} (88%) rename assets/{mac.html-b36382f1.js => mac.html-b17760cf.js} (99%) rename assets/{memos.html-2c84e754.js => memos.html-33383c9d.js} (95%) rename assets/{mt-photos.html-31a55b6d.js => mt-photos.html-d4d50d1b.js} (97%) rename assets/{navidrome.html-8f4f4680.js => navidrome.html-3d013343.js} (97%) rename assets/{newborn.html-087ef284.js => newborn.html-158c7943.js} (98%) rename assets/{pageview-c02e7838.js => pageview-c3030f96.js} (55%) rename assets/{qinglong.html-46474812.js => qinglong.html-d71cbe87.js} (97%) rename assets/{reader.html-0c7f3652.js => reader.html-6ee0f1d4.js} (98%) rename assets/{reverse-proxy.html-74690e6f.js => reverse-proxy.html-93c989cf.js} (98%) rename assets/{stirling-pdf.html-d86a4086.js => stirling-pdf.html-0ca4a01a.js} (95%) rename assets/{syncthing.html-654c0342.js => syncthing.html-f30d8440.js} (96%) rename assets/{tachidesk.html-880cae83.js => tachidesk.html-0fccc9b8.js} (97%) rename assets/{uptime-kuma.html-2821e010.js => uptime-kuma.html-e05a399d.js} (97%) diff --git a/404.html b/404.html index e76eff16..0fc56cb9 100644 --- a/404.html +++ b/404.html @@ -38,7 +38,7 @@ } - + @@ -46,7 +46,7 @@
跳至主要內容

404

页面不存在

这 是 四 零 四 !

- + diff --git a/DailyRoutine.html b/DailyRoutine.html index 842c6789..4640baff 100644 --- a/DailyRoutine.html +++ b/DailyRoutine.html @@ -38,7 +38,7 @@ } - + @@ -52,7 +52,7 @@ Sleep, 500000 Run, PowerShell.exe -NoExit -Command &{dvr-scan -i output.mp4 -o %A_YYYY%-%A_MM%-%A_DD%_Scanned.avi}, D:\Backup\Libraries\Desktop
  • 使用 VLC 播放器可以以 31.25 倍的速度回放监控视频,并结合 ManicTime 来回顾当日内容。要轻松实现 VLC 的高倍速播放,可以在「菜单栏」->「视图」中开启「状态栏」。此外,通过剪映,可以达到 100 倍的播放速度。

  • 时间管理

    GTD 的存在是让大脑清空不混乱目的,明确知道下一步应该做什么。GTD 流程依次为捕获(Capture),明晰(Clarify),组织(Organize),回顾(Reflect),执行(Engage)

    执行时,将 GTD 按功能与目的划分为多个清单。

    当任务捕获到收集箱后,参考下方的固定流程将其整理不同的清单中。

    GTD 任务转移到清单

    从 GTD 流程角度,执行任务和计划。

    GTD 流程步骤

    GTD 工具原本用的是 Microsoft To Do,「我的一天」功能非常适合聚焦,但有次出现了同步问题,就转用滴答清单。滴答清单除基础 Todo 功能外,还能用日视图管理具体时间安排,添加跨天长时间任务,并在日历、看板和甘特图中查看。

    滴答清单的缺点也很明显,功能过于追求全,功能打磨得不够细节,无法满足定制需求。比如,没有任务跳过功能,对于循环任务只能点完成,导致记录与实际不符;跨越多天的任务不想在「今天清单」中出现出现,但一直在提醒,导致无法清空;过滤器逻辑单一,筛选元素教少。如果你的任务都可以一天内完成,不需要记录持续多天的计划,不需要买滴答的高级会员,基础功能足够满足你了。

    本节内容来自 Topbook 的 GTD 自我管理 - 时间管理教程open in new window,改变了我对 GTD 的认知,把事情做好,而不是把事情做完。建议完整阅读。

    日常习惯

    锚点在我……我会……庆祝
    20s 休息提示拿下眼镜,画板上添笔画后深蹲 15 个双手肘向后
    5mins 休息提示拿下眼镜,画板上添笔画后重力拉伸 15 次,2 组双手肘向后
    上完厕所洗好手,画板上添笔画后俯卧撑 15 个双手肘向后
    出书房画板上添笔画后俯卧撑 15 个双手肘向后
    午餐放下碗筷吃维生素想象自己发光
    午睡打开大排灯设置 30 分钟的闹钟想象自己发光
    洗澡打开花洒深蹲 15 个哼歌
    刷完牙放下牙刷俯卧撑 15 个双手肘向后
    晚上上床伸展并触碰脚趾;读书想象自己发光
    睡觉关灯打开白噪音想象自己发光

    休息选项:喝口水、洗脸、看看窗外、眼部按摩仪、按摩头皮。

    运动选项:跳绳、有氧拳击、B 站轻度健身操(Jo 姐?)。

    睡眠知识:睡眠时的体温理想情况下会比正常体温低二到三度,因此睡前应尽量降低低温,避免激烈运动。同时,手机屏幕等产生的光线会非常影响睡眠,建议尽量避免睡前使用手机。睡醒后应尽快暴露在室外,让自然光线把身体唤醒,只需要短短十分钟。

    美容仪器

    为了避免家里的美容仪器闲置浪费,我制定了定期使用计划。(请勿参考型号购买)


    1. 睡前淋浴有助于快速入睡open in new window ↩︎

    已到达文章底部,欢迎留言、表情互动~
    • 赞一个
      0
      赞一个
    • 支持下
      0
      支持下
    • 有点酷
      0
      有点酷
    • 啥玩意
      0
      啥玩意
    • 看不懂
      0
      看不懂
    评论
    • 按正序
    • 按倒序
    • 按热度
    Powered by Waline v2.15.8
    - + diff --git a/Fitness.html b/Fitness.html index 78e35444..2bb918c5 100644 --- a/Fitness.html +++ b/Fitness.html @@ -38,7 +38,7 @@ } - + @@ -46,7 +46,7 @@
    跳至主要內容

    健身计划

    约 3162 字大约 11 分钟...

    早餐必吃,午餐吃饱,晚餐少吃且不吃主食。

    消除饥饿感:10 秒内原地高抬腿快跑 20 次!当你进行快速跑的时候,肌肉的糖分会补充到血液中,产生给身体增加糖分的错觉。大脑就以为你吃饭了,饥饿感也被消除了。

    晨间锻炼使用八段锦(12mins)热身。每天保持 9000 步open in new window,日常做凯格尔运动。下午 3 点进行重训或 HITT,晚上做睡前瑜伽。

    K 歌减肥

    K 歌减肥open in new window容易吵到邻居,没找到隔音口罩,用发泄壶代替。

    • 每天唱三首歌,选择 key 比较高、换气多的歌效果会更好。比如三天三夜、死了都要爱......这些听起来就感觉会唱断气的歌。非母语的美声唱法所消耗的热量最大。唱歌的时候要一边按住 E 点,一边用力发声唱歌

      E 点
      E 点位置
    • 喊叫减肥:臀桥的同时,将眼睛、鼻孔和嘴巴都用尽全力张到最大,然后气沉丹田,用力地怒吼出声:啊——啊——啊!啊!啊!喊的时候一定要用全力,一直叫,叫足 3 分钟。如果声音过大,可以咬毛巾,降低音量。

      喊叫减肥动图
      喊叫减肥动图

    该方法类似于上面的《卡拉 OK 健康法》,里面提到唱 K 不仅可以增加肺活量,还有瘦身作用。这原理就和瑜伽中常用的腹式呼吸法差不多,利用腹部肌肉收缩,促进新陈代谢,吸收脂肪分解时所需的氧气,从而达到减肥效果。

    坐立减肥

    研究者开创了一种名叫比目鱼俯卧撑(SPU)open in new window的方式,可以在数个小时内将局部的氧化代谢提升到很高的水平。我们平时在站立和步行时都会用到比目鱼肌,而所谓的比目鱼肌俯卧撑就是尽最大可能使用这块肌肉。方法也很简单,如下方动图所示,你坐着的时候双脚处于放松状态,然后提起后脚跟,脚趾仍然需要紧贴地面不动。

    比目鱼俯卧撑演示图
    比目鱼俯卧撑演示图

    当你的后脚跟提到极限的时候,小腿的肌肉会产生紧张拉伸的感觉,然后你会自主地放松,将脚后跟放回地面。这样就完成了一次 SPU。

    健身理论

    • 早餐一定要吃!吃早餐的人比不吃早餐的人更容易减少体重。因为在睡觉的时候,身体的新陈代谢会减慢,而只有在你再次进食的时候,它才会回升。所以,如果你跳过早餐不吃,身体消耗卡路里的能力在午餐前都无法达到正常水平。这也就是为什么新的一天最好从一顿拥有 300 ~ 400 卡路里的早餐开始,它能立刻把你的新陈代谢带入「工作状态」。另外,早餐应该尽量多食用些高纤维食物。习惯吃高热量早餐的人更容易很快感到饥饿;而高纤维碳水化合物的消化和吸收时间更长,不会导致身体里血糖的迅速改变,你自然也就不那么容易饿了。
    • 高于或者低于靶心率 142~154 的运动算无效运动,基本没有减脂的作用。所以说,神马仰卧起坐瘦小腹,蹬腿瘦大腿都是扯淡,那些运动都达不到有氧运动的下限,根本燃烧不了脂肪。可进行适当的拉伸运动,开始 HIIT,然后用 5 分钟整理运动结束训练,然后接着进行全面的拉伸。

    每周健身 4 小时

    早上半小时内要吃早餐,饭前 60 个深蹲或推墙俯卧撑。早餐:蛋、小扁豆、菠菜。

    • 别吃水果,水果的糖分太多,可以一天一个牛油果
    • 瓶颈期时,加大蛋白摄入,早餐吃 3 个鸡蛋
    • 晚上冰敷:冰袋放在脖子后部和上斜方肌附近,保持 20 ~ 30 分钟。

    早饭前、睡前:各 5 ~ 10 分钟的冷水澡。先用热水把整个身体淋湿,大概用时 1~2 分钟。然后,用洗发水洗头、用洗面奶洗脸,把淋浴调成完全的冷水清洗头发和脸部,身体别的部分先别碰冷水。洗干净后,转身,背对淋浴喷头,让水浇在你的后脖颈下方和背部上方的区域,保持这个姿势 1 ~ 3 分钟不动。然后,转过身,正常清洗身体就可以了。

    室内健身

    注意

    本部分的内容,我不确定其来源,也未加以理解和消化,仅将其作为参考资料。

    如果你只是想降低体重,提高身体素质,那么 Slim in 6 和 P90 已经够了,可以来回多刷几周目,如果你还想对自己进行更深入的训练,那么就可以试试 Les Mills BodyCombat 和 T25,如果需要挑战自己,P90X 和 insanity 在等着你。

    在锻炼过程中,先把动作做标准,而不是勉强去跟上视频的动作数量,当你觉得自己需要休息,就停一下,不要 over do it,做好热身和关节保护,锻炼期间吃好睡好。

    Slim in 6

    这是一套专门针对无运动基础、体重基数大、身体状态较差的人的健身操,没有太剧烈的动作,基本没有跳跃动作,非常注意对膝盖等关节的保护,各种动作里糅合了大量拉伸,教练非常 nice。课程不复杂,只有三套主题操和一个核心肌肉附加训练和一个拉伸附件训练,每一套主题操反复做两周然后进入下一套,附加训练视自己的情况逐渐加入主题操之后。这套操好评如潮,无数购买者在官网留下评论表示坚持这套操给自己的身体带来了显著的良性变化,体重明显降低、线条更优美、体态更匀称等等......

    我上手便是做这套,但是虽然看的时候觉得也还挺容易的,真正做起来也并不是那么轻松,但是难度真的控制得很好,很多动作的难度和频率都刚好在让你觉得“吃力但是咬一咬牙就坚持下来并且很有成就感”的程度,这套操所需的东西仅仅是一张大一点的瑜伽垫,几条拉力绳,几个平方的空地,在哪都能做,我就是在办公室利用中午时间做的。

    当然这套操也有缺点,一个是从第二套主题操开始时间变得很长,如果做完附件训练,需要大概 1 个多小时,第三套更长一些。一个是相对比较枯燥,每天重复同样的动作,容易厌烦,这也是为什么我只做到第四周的一般就放弃的原因之一,另一个原因是我肩膀比较弱,这个操又有大量的保持手臂平举的动作......

    但是这三周多的效果是很明显的,我的体重有接近 5 公斤的下降幅度,最重要的是肺活量和肌肉力量有了很明显的提高,为进入下一步打好了基础。我推荐所有从零开始或者长期不运动的同学从这套操开始恢复,我相信如果能坚持做完六周,你们会感谢我的推荐的。

    哦,对了,这套操有很多深蹲动作,大家做的时候一定要注意正确的姿势,保护好膝盖。

    P90

    注意,这个是 P90 而不是 P90X,虽然只差一个字,但是难度有天壤之别,都是金牌教练豪顿的作品,P90 是他整个健身操系列的基石,也是面对缺乏运动基础的人来设计的,同样有很好的评价,这套训练是一天有氧一天肌肉抗阻训练的模式,但是强度都比较低,肌肉抗阻训练比起健身房差很远,但是对刚起步的人来说很合适。这套训练我没有系统性地做过,在放弃 Slim in 6 之后短暂地做过几天,因为跳的动作比较多,而且我不是很喜欢豪顿那样的块状肌肉,也没有打算进军 P90X,而且当时我的身体状态做 P90 已经感觉不到太大的效果了。

    P90 和 Slim in 6 一样,只需要一块垫子,哑铃或者拉力绳就可以做,推荐想进入 P90X 的同学从这个开始,这套操的难度和强度与 Slim in 6 是很接近的。

    Les Mills BodyCombat

    到我最喜欢的部分了,这是莱美健身房推出的一套搏击操,这套操总体上强度高于上面两个,这套操一共有十三个视频,分别是有氧搏击系列,HITT 系列和核心肌肉训练系列,然后根据每天做的视频不同,编排了三个 60 天的课程表,难度一个大于一个,我只做完了第一个。我之所以喜欢这套操的原因如下:跳跃动作不多、非常好玩、教练帅气逼人。

    这套操比起前面两个需要的空间略大,因为有一些滑步动作和一些各个方向的踢腿动作,但是也只是略大,器械也就是部分课程需要两只哑铃而已。这套操的有氧搏击部分我个人认为是最精华所在,它将拳击、跆拳道、泰拳等格斗技术的一些基础动作编排在一起,通过各种出拳、踢腿、顶膝等动作大量消耗热量,而且非常好玩,脑补能力稍微强一点的,提高一点中二值,一节课很容易就过去了。

    这套操的难度体现在 HITT 和核心肌肉训练部分,开始出现急速提高心率的剧烈动作和组合型动作,比如俯卧撑跳跃深蹲再跳趴俯卧撑,这部分需要锻炼者有不错的肺活量和肌肉力量基础,不然会承担比较高的运动受伤风险。

    推荐有了基础的大家来做这一套,我每天在办公室做完真的是全身湿透,桌子地板都要擦一遍,哪哪都是汗水,非常爽。

    T25

    这个的难度与 Les Mills BodyCombat 相仿,是大名鼎鼎的熊 T,也就是可怕的 insanity 健身操的教练推出的一套难度低于 insanity 的训练计划,你可以把他看做简化版的 insanity,里面的很多动作都会在 insanity 里面出现,只是频率和强度没那么大。

    这套在我刷完 Les Mills BodyCombat,进军 insanity 之前做过,真的很累,因为这套计划有很多都是 HIIT,短时间高强度的重复动作,比如 30 秒急速高抬腿马上接 30 秒虎跳之类的,但是 HIIT 的效果是非常明显的,坚持一段时间可以让你的身体素质在原有基础上进入一个新的阶段。

    对于所有想进军 insanity 的朋友,真诚推荐这一套作为预热,如果能很好地掌控这套,那么在 insanity 里你肯定能坚持下去。

    P90X 和 insanity

    把这两个放在一起,是因为它们在家庭训练计划界的地位实在是难分伯仲,大名鼎鼎的腹肌撕裂者就出自 P90X 的项目,而 insanity 更是让无数家庭健身者得到了梦寐以求的良好身体素质和美妙的身体线条。首先 P90X 我没有做过,原因和我不喜欢 P90 是一样的,我不喜欢豪顿那样的块状肌肉,所以对 P90X 里面大量的独立肌群抗阻训练无感,而 insanity 的熊 T 很少设计单一肌肉的训练动作,都是大量的 HIIT 和核心肌肉训练,更注重整体的塑造。

    已到达文章底部,欢迎留言、表情互动~
    • 赞一个
      0
      赞一个
    • 支持下
      0
      支持下
    • 有点酷
      0
      有点酷
    • 啥玩意
      0
      啥玩意
    • 看不懂
      0
      看不懂
    评论
    • 按正序
    • 按倒序
    • 按热度
    Powered by Waline v2.15.8
    - + diff --git a/ai/AIEnjoy.html b/ai/AIEnjoy.html index 9cf305b4..0e2e83f1 100644 --- a/ai/AIEnjoy.html +++ b/ai/AIEnjoy.html @@ -38,7 +38,7 @@ } - + @@ -46,7 +46,7 @@
    跳至主要內容

    AiEnjoy

    约 810 字大约 3 分钟...

    AiEnjoy

    https://autoaigpt.cnopen in new window 是一个多功能网站,提供快速使用GPT、万能IT工具、博客资源、每日热棒、音乐欣赏和互动等服务。该网站汇集了丰富的资源,为用户提供了广泛的信息和工具,旨在满足用户对于技术、新闻和娱乐的需求。本报告将详细介绍https://autoaigpt.cnopen in new window 网站的各项功能和特点。

    GPT快速使用

    https://sensechat.vipopen in new window 网站提供了GPT(生成对抗网络)的快速使用功能。GPT是一种强大的人工智能技术,可以生成自然语言文本。通过https://sensechat.vipopen in new window ,用户可以轻松输入问题或主题,并获得由GPT生成的高质量、有用的回答或文章。这项功能适用于各种应用场景,包括研究、写作、学习和解决问题等。

    万能IT工具

    https://itools.siteopen in new window 网站提供了一系列万能IT工具,旨在帮助用户解决各种技术问题和提升工作效率。这些工具包括代码转换器、数据处理工具、图像处理工具、文本处理工具等。用户可以根据自己的需求选择适当的工具,并通过简单的操作完成复杂的任务。

    博客资源

    https://gpt-vip.topopen in new window 网站的博客资源栏目为用户提供了丰富的技术和行业相关文章。这些文章涵盖了各种主题,包括人工智能、数据科学、编程、网络安全、云计算等。用户可以通过阅读这些文章,获取最新的技术趋势、学习新知识和拓宽视野。

    每日热棒

    https://dailytops.eu.orgopen in new window 网站的每日热棒栏目提供了当天最热门的新闻和热点话题。用户可以通过浏览这些内容,了解国内外的时事动态、科技进展和社会热点。每日热棒栏目保持更新,确保用户始终掌握最新的信息。

    音乐欣赏

    https://autoaigpt.cnopen in new window 网站还提供了音乐欣赏功能,用户可以在这里收听各种风格和流派的音乐。无论是放松身心、提升工作效率还是享受音乐的美妙,用户都可以在这里找到适合自己的音乐作品。

    互动社区

    https://gpt-vip.topopen in new window 网站的互动社区为用户提供了交流和互动的平台。用户可以在社区中发表观点、提问问题、分享经验和结识新朋友。这个社区是一个开放、友好和知识共享的环境,让用户能够与其他用户共同成长和学习。

    结论

    https://autoaigpt.cnopen in new window 网站是一个多功能的网站,为用户提供了GPT快速使用、万能IT工具、博客资源、每日热棒、音乐欣赏和互动社区等服务。通过这个网站,用户可以获取到丰富的资源,包括高质量的文本生成、实用的IT工具、专业的技术文章、时事热点、音乐享受和交流互动。https://autoaigpt.cnopen in new window 致力于满足用户对于技术、新闻和娱乐的需求,为用户提供一个全方位的在线平台。

    已到达文章底部,欢迎留言、表情互动~
    • 赞一个
      0
      赞一个
    • 支持下
      0
      支持下
    • 有点酷
      0
      有点酷
    • 啥玩意
      0
      啥玩意
    • 看不懂
      0
      看不懂
    评论
    • 按正序
    • 按倒序
    • 按热度
    Powered by Waline v2.15.8
    - + diff --git a/ai/ChatGPT.html b/ai/ChatGPT.html index b8878bb4..27c0df6d 100644 --- a/ai/ChatGPT.html +++ b/ai/ChatGPT.html @@ -38,7 +38,7 @@ } - + @@ -46,7 +46,7 @@
    跳至主要內容

    ChatGPT

    约 673 字大约 2 分钟...

    ChatGPT

    公司介绍

    OpenAI是一家致力于确保人工智能(AI)能够为所有人带来好处的人工智能研究实验室。该公司成立于2015年,由Elon Musk、Sam Altman等人联合创立,旨在推动友好AI的发展,避免其集中在少数几家公司或政府手中。OpenAI的使命是确保人工智能的广泛应用能够造福全人类。

    产品能力与目前模型

    OpenAI的最新产品是ChatGPT,这是一种基于GPT-3模型的对话AI。GPT-3是OpenAI的第三代生成预训练转换器,它是目前最大、最强大的语言模型之一。GPT-3拥有1750亿个训练参数,能够生成极其逼真的人类语言。

    OpenAI最近发布了GPT-4,这是一种更先进的语言模型。GPT-4拥有更多的训练参数,能够生成更高质量和更多样化的文本。GPT-4的发布标志着人工智能在理解和生成人类语言方面的又一重大突破。

    OpenAI也正在研发GPT-5。这个模型预计将拥有更多的训练参数,进一步提高语言生成的质量和多样性。

    功能与意义影响

    ChatGPT的功能强大且多样。它可以理解和生成语言,进行对话,帮助编程,提供写作建议,甚至可以创作诗歌和故事。这使得ChatGPT可以在各种场景中发挥作用,包括客户服务,教育,娱乐,内容创作等。

    ChatGPT的意义影响深远。首先,它是人工智能技术的重要突破,展示了AI在理解和生成人类语言方面的强大能力。其次,ChatGPT可以帮助人们更有效地完成各种任务,提高生产力。最后,ChatGPT的出现也引发了关于AI伦理和社会影响的重要讨论。

    如何使用

    使用ChatGPT非常简单。首先,你需要访问OpenAI的网站并注册账号。然后,你可以通过OpenAI的API来使用ChatGPT。你只需要发送一个包含你的对话内容的请求,ChatGPT就会返回一个生成的响应。你也可以通过设置一些参数来调整ChatGPT的行为,例如温度(决定输出的随机性)和最大令牌数(决定输出的长度)。

    总的来说,OpenAI的ChatGPT是一个强大的对话AI,它展示了人工智能在理解和生成人类语言方面的巨大潜力。无论你是开发者,创作者,还是普通用户,ChatGPT都能为你提供巨大的帮助。

    已到达文章底部,欢迎留言、表情互动~
    • 赞一个
      0
      赞一个
    • 支持下
      0
      支持下
    • 有点酷
      0
      有点酷
    • 啥玩意
      0
      啥玩意
    • 看不懂
      0
      看不懂
    评论
    • 按正序
    • 按倒序
    • 按热度
    Powered by Waline v2.15.8
    - + diff --git a/ai/Midjourney.html b/ai/Midjourney.html index 5522224e..bbf0e297 100644 --- a/ai/Midjourney.html +++ b/ai/Midjourney.html @@ -38,7 +38,7 @@ } - + @@ -46,7 +46,7 @@
    跳至主要內容

    Midjourney

    约 686 字大约 2 分钟...

    Midjourney

    Midjourney是一款基于人工智能技术的绘画软件,它融合了深度学习算法的精髓,为用户提供了独特的绘画体验。在本文中,我们将探讨Midjourney所基于的技术以及它如何帮助用户创作个性化风格的绘画作品。

    Midjourney的技术基础

    Midjourney的核心技术基础是人工智能,具体而言,是深度学习算法。这些算法在绘画领域发挥了巨大的作用,让用户能够轻松地创造独特的艺术作品。这一技术能力的支持使Midjourney成为专业画家和绘画爱好者的理想选择。

    文字生成图片

    一种独特的生成方式是文字生成图片。Midjourney允许用户输入文字描述,然后将其转化为令人惊叹的绘画作品。无需绘画技能,用户可以用文字表达他们的创意,而Midjourney将会将其呈现为生动的图像。

    图片生成图片

    Midjourney还支持图片生成图片的方式。用户可以上传现有的图片,然后让人工智能技术将其转化为全新的绘画作品。这为用户提供了一种以既有图像为基础,创造出令人惊叹的艺术作品的方式。

    混合图片生成图片

    最后,Midjourney还提供了混合图片生成图片的选项。这意味着用户可以将文字和图片相结合,创造出充满创意的绘画作品。这种多元化的生成方式为用户提供了更多可能性,让他们能够实现他们的创意梦想。

    Midjourney的用户群体

    Midjourney的多样化生成方式使它适用于各种用户群体。专业画家可以利用这一工具来扩展他们的创作能力,将想法转化为艺术作品。同时,绘画爱好者也可以在无需绘画经验的情况下,轻松创建独特的绘画作品。无论您是想要展示专业技能还是纯粹追求兴趣,Midjourney都为您提供了一个创意的平台。

    结语

    Midjourney是一款基于人工智能技术的绘画软件,利用深度学习算法赋予用户无限的创造力。无论您是专业画家还是绘画爱好者,Midjourney都能满足您的需求,帮助您轻松创作个性化风格的绘画作品。不管您是追求艺术的极致还是寻找灵感的初学者,Midjourney都将引领您踏上一段充满创造力的绘画之旅。试试Midjourney,探索您的无限创意潜力吧!

    已到达文章底部,欢迎留言、表情互动~
    • 赞一个
      0
      赞一个
    • 支持下
      0
      支持下
    • 有点酷
      0
      有点酷
    • 啥玩意
      0
      啥玩意
    • 看不懂
      0
      看不懂
    评论
    • 按正序
    • 按倒序
    • 按热度
    Powered by Waline v2.15.8
    - + diff --git a/ai/TaoAI/index.html b/ai/TaoAI/index.html index e13dddb8..8175cf92 100644 --- a/ai/TaoAI/index.html +++ b/ai/TaoAI/index.html @@ -38,7 +38,7 @@ } - + @@ -46,7 +46,7 @@
    跳至主要內容

    展望未来

    约 789 字大约 3 分钟...

    展望未来

    引言

    人工智能(AI)已经成为我们生活中不可或缺的一部分,从智能手机,自动驾驶汽车,到智能家居,AI的应用无处不在。AI不仅改变了我们的生活方式,也正在改变我们对世界的理解。本文将探讨AI在画画,对话,解决问题等多个方面的应用,以及它如何让我们的生活变得更美好。

    AI与艺术:AI的绘画能力

    AI的绘画能力已经达到了令人惊叹的程度。例如,Google的DeepDream可以生成梦幻般的图像,而OpenAI的DALL-E可以根据描述生成各种各样的图像。这些AI不仅可以复制人类的绘画风格,还可以创造出全新的艺术形式。

    AI的绘画能力不仅为艺术家提供了新的创作工具,也让那些没有绘画技巧的人能够创作出美丽的艺术作品。通过AI,艺术变得更加民主化,每个人都可以成为艺术家。

    AI与交流:AI的对话能力

    AI的对话能力也在不断提高。例如,OpenAI的GPT-3和ChatGPT可以进行自然语言处理,理解和生成人类语言,进行对话,写作,甚至创作诗歌和故事。这些AI可以用于各种应用,包括客户服务,教育,娱乐,内容创作等。

    AI的对话能力不仅可以帮助我们更有效地完成各种任务,也可以让我们与机器进行更自然的交流。通过AI,我们可以更好地理解和使用语言,更有效地传达我们的思想和情感。

    AI与问题解决:AI的解决问题能力

    AI的解决问题能力也在不断提高。例如,Google的AlphaGo和DeepMind的AlphaFold已经在围棋和蛋白质折叠等复杂问题上超越了人类。这些AI不仅可以解决我们无法解决的问题,也可以帮助我们找到新的解决问题的方法。

    AI的解决问题能力不仅可以提高我们的生产力,也可以帮助我们解决一些重要的全球问题,如气候变化,疾病,贫困等。通过AI,我们可以更好地理解和改变世界。

    结论:AI让生活更美好

    总的来说,AI正在各个方面改变我们的生活,让我们的生活变得更美好。AI的绘画能力让艺术变得更加民主化,AI的对话能力让我们与机器进行更自然的交流,AI的解决问题能力帮助我们解决一些重要的全球问题。

    然而,AI的发展也带来了一些挑战,如数据隐私,工作自动化,AI伦理等。我们需要在推动AI的发展的同时,也要关注这些挑战,并寻找解决方案。

    未来,AI将继续发展,带来更多的可能性。我们期待AI能够为我们的生活带来更多的美好。

    已到达文章底部,欢迎留言、表情互动~
    • 赞一个
      0
      赞一个
    • 支持下
      0
      支持下
    • 有点酷
      0
      有点酷
    • 啥玩意
      0
      啥玩意
    • 看不懂
      0
      看不懂
    评论
    • 按正序
    • 按倒序
    • 按热度
    Powered by Waline v2.15.8
    - + diff --git a/ai/index.html b/ai/index.html index 58efc2df..c081c845 100644 --- a/ai/index.html +++ b/ai/index.html @@ -38,7 +38,7 @@ } - + @@ -46,7 +46,7 @@
    跳至主要內容

    Ai

    约 1 字小于 1 分钟...

    已到达文章底部,欢迎留言、表情互动~
    • 赞一个
      0
      赞一个
    • 支持下
      0
      支持下
    • 有点酷
      0
      有点酷
    • 啥玩意
      0
      啥玩意
    • 看不懂
      0
      看不懂
    评论
    • 按正序
    • 按倒序
    • 按热度
    Powered by Waline v2.15.8
    - + diff --git a/apps/AppNotes.html b/apps/AppNotes.html index afbf14f5..80509d2a 100644 --- a/apps/AppNotes.html +++ b/apps/AppNotes.html @@ -38,7 +38,7 @@ } - + @@ -84,7 +84,7 @@

    TheBrain

    TheBrain 可以把知识无限扩充,都连接在一起。但将工作流导图放入 TheBrain 后发现并不合适,比较适合更细化的内容?

    Zinc

    Zincopen in new window 是一个进行全文索引的搜索引擎。它是 Elasticsearch 的轻量级替代品,运行在不到 100 MB 的 RAM 中。它使用 bluge 作为底层索引库。[4]

    原本想对 Windows 本地盘进行搜索,但应该只支持 json 处理过后的索引库,不能对本地硬盘进行索引。

    Zinc 初次启动

    1. 点击「系统属性」>「高级」>「环境变量」>「用户变量」,新建变量 ZINC_FIRST_ADMIN_USERZINC_FIRST_ADMIN_PASSWORD。这是后面要用到的账户密码,可自由设置,但密码需要包含大小写字母,

    2. 在应用目录下打开终端,执行命令:

    mkdir data
     .\zinc.exe
     

    成功执行后,打开 http://localhost:4080/,就能看到图形化界面了。

    全文索引-Bluge

    启动 Zinc,但需要有 Bluge 索引数据库,才能进行全文搜索。

    Blugeopen in new window 是基于 GO 的索引/搜索库,使用简单,有如基于磁盘和内存的索引功能。

    如果启动过程中报错,ZINC_FIRST_ADMIN_USER and ZINC_FIRST_ADMIN_PASSWORD must be set on first start. You should also change the credentials after first login.,可能是没有配置好环境变量,或是没有以管理员身份运行终端(win+X,A)所导致的。


    1. 注册免费 Teams 经典open in new window ↩︎

    2. Power Automate Desktop 免费 RPA 实现定时启动或按照频率运行自动化流的三种办法open in new window ↩︎

    3. How to Set Up an Automated Daily Template in Logseqopen in new window ↩︎

    4. 搜索引擎漫谈以及 Zinc 简介open in new window ↩︎

    已到达文章底部,欢迎留言、表情互动~
    • 赞一个
      0
      赞一个
    • 支持下
      0
      支持下
    • 有点酷
      0
      有点酷
    • 啥玩意
      0
      啥玩意
    • 看不懂
      0
      看不懂
    评论
    • 按正序
    • 按倒序
    • 按热度
    Powered by Waline v2.15.8
    - + diff --git a/apps/Applist.html b/apps/Applist.html index c6660366..daa05237 100644 --- a/apps/Applist.html +++ b/apps/Applist.html @@ -38,7 +38,7 @@ } - + @@ -46,7 +46,7 @@
    跳至主要內容

    必备应用

    约 2100 字大约 7 分钟...

    Windows 自用软件,以开源软件为主。

    知识记录

    本地笔记:Logseq & Obsidian & 妙笔 & Joplin & Wiz 笔记 & OneNote

    在线笔记:Notion & 飞书 & flomo & Airtable & 简悦

    清单日历:滴答清单 & Trello & Habitify & 桌面日历 & Workflowy

    记忆复习:思源笔记 & SuperMemoopen in new window & kopiaopen in new window(备份) & Anki

    文本编辑:Visual Studio Code & Notepad++ & HbuilderX & WPS & office tab & MarkTextopen in new window & Slide & 方方格子 & Typora & Yu Writer & UltraEdit

    文字识别:TTimeopen in new window & 白描 & 天若 OCR & ABBYY Screenshot Reader OCR

    平面设计

    设计:Figma & SVG-Editoropen in new window & Stable Diffusionopen in new window(AI 绘图) & Photoshop & 字由 & GIMP & FastStone & illustrator & Dreamweaver & lightroom

    截图:Snipaste & ShareX & webshot & SETUNA

    图像管理:Honeyview & Eagle & PicGo 图床 & imageglass(界面好,但不支持全图拖拽和压缩包预览图片) & Google 相册 & 看图王 & 呱呱看图

    图像处理:PP 鸭(免费版单次 10 张)& gifski(动图)& RIOTopen in new window(压缩) & Inpaint(去水印) & PhotoZoom(无损放大) & 智图

    音频视频

    音频播放:foobar2000(MKing 皮肤open in new window)& MusicTagopen in new window & 163MusicLyricsopen in new window(云歌词下载,支持日文转罗马音)& Listen1 & 洛雪音乐助手open in new window & Moon FM(播客) & 百度音乐 & AIMP3 & 酷我 K 歌 & Airplay

    音频处理:Reaper+ Ultraschallopen in new window & Audacityopen in new window & iZotope rx9 & Audition & 神舌变声器 & Goldwave

    视频播放:Potplayeropen in new window & LAVFiltersopen in new window & madVRopen in new window & XySubFilter & VLC & 恒星播放器 & QQ 影音 & 暴风影音 & 射手,播放器设置参考 Potplayer + LAVFilters + madVR 配置教程open in new window

    视频剪辑:剪映 & LosslessCut(音频提取·视频切割合并) & ShanaEncoderopen in new window(视频压缩) & Quick Cutopen in new window (自动剪辑) & HandBrake(视频转换) & Premiere & Shotcut & 500th Video Converter & 小丸工具箱

    字幕工具:ChineseSubtitleConversionToolopen in new window(繁简转换)& Arctime Pro & VideoSrtopen in new window & 人人译视界

    视频下载:youtube-dlopen in new window & 哔哩下载姬open in new window & BBDownopen in new window(命令行式哔哩哔哩下载器)

    影视管理:tinyMediaManager(刮削),易影视(本地管理)

    屏幕录制

    录屏直播:OBS & Capturaopen in new window & SplitCamopen in new window (摄像头多开) & terminalizeropen in new window(终端录制) & ScreenToGifopen in new window & FlashBack Express

    换脸特效:Snap Camera(操作简单) & Avatarify Pythonopen in new window

    按键可视化:Carnacopen in new window & Keyvizopen in new window & ClickShowopen in new window & KeyCastOWopen in new window

    投屏工具:scrcpyopen in new window (手机投屏) & Macastopen in new window(手机视频投屏到电脑)& 蓝莓投屏

    效率工具

    快速启动:

    剪切板:Ditto & PinStack & CopyQ

    时间管理:ManicTime & Toggl Track & RescueTime(订阅)

    爬虫监测:OpenWebMonitor & spider-flowopen in new window

    本地搜索:Everything(拼音扩展open in new window) & AnyTXT Searcher(全文|OCR)& DocFetcher & Archivarius 3000

    文档管理

    重命名:FFRenamePro & SubRenameropen in new window(字幕批量重命名)& ReNamer & Bulk Rename Utility & 拖把更名器

    文本比较:Beyond Compare & WinMergeopen in new window(开源)

    局域网传输:FastCopyopen in new window & Snapdropopen in new window & LocalSendopen in new window & 局域网通讯 (酷安) & Send Anywhere & Pushbullet

    文件归档:Syncthing(异地同步) & GoodSync(同设备同步) & Dropitopen in new window(自动文件归档) & DropPointopen in new window(复制中转框)

    网盘同步:坚果云 & 阿里云盘 & 百度网盘 & 115 (转存脚本open in new window) & 亿方云 & 金山快盘 & 微云

    系统日常

    资源管理器:One Commanderopen in new window & Q-Diropen in new window & FreeCommander & QTTabBar(Win10) & 360 文件夹 & Clover(UI 不好看)

    浏览器:Chrome & Firefox(资源) & Brave(工具/书签) & Edge(移动端) & Tor & Vivaldi & Tor & 猎豹 & 360 & 搜狗 & Maxthon & 百度

    输入法:小狼毫 & Win+H(系统语音输入)& QuickCut & 讯飞语记 & 微软输入法 & 影子输入法 & 搜狗输入法 & 讯飞输入法 & 百度输入法

    通讯:TIM & 微信 & 飞书 & Telegram & Discord & 腾讯防撤回补丁open in new window & Slack & 钉耙 & 千牛 & 阿里旺旺

    下载:Aria2open in new window & IDM & Kinhdownopen in new window(百度云解析) & FDM(不支持 ed2k、磁力) & 迅雷

    杀毒:火绒 & 360 & 金山卫士

    压缩:Bandizip & PeaZip & 好压

    PDF:PDFelement & 文电通 & foxit 领鲜版(轻量编辑 PDF)

    硬件驱动:360 驱动大师 & Open Hardware Monitoropen in new window(旧电脑风扇转速) & Afterburneropen in new window(显卡风扇转速) & 图吧硬件工具箱open in new window & AIDA64 & SDI Snappy & 驱动精灵 & 鲁大师

    系统优化:PowerToysopen in new windowRBTrayopen in new window(最小化到托盘)、ContextMenuManageropen in new window(右键管理,遇过 bug,推荐火绒右键)、WizTree(磁盘空间分析)、优效日历、StartIsBack++、O&O ShutUp10++open in new window、Dism++、Windows Update Blockeropen in new window(禁止更新)

    低频工具

    编程工具:FileZilla(FTP)、PuTTY(SSH)、MobaXTerm(SSH)、GitHubDesktop、DBeaver(数据库open in new window)、Postman、Fiddler(手机抓包)、Regex Match Tracer

    翻译词典:DeepL & GoldenDict & 欧陆词典 & 有道词典 & QTranslate & Lingoes

    思维导图:TheBrain(无限思维扩展) & Xmind & MindManager

    虚拟机:VMware & VirtualBox

    远程管理:RustDesk & ToDesk & AnyDesk & Teamviewer & Remote Utilities & XT800

    卸载清理:IObit Uninstaller & Glary Utilities(注册表清理) & Geek Uninstaller

    护眼健康:Stretchlyopen in new window & EyeLoveU & iris & f.luxS

    偶尔使用:VeraCrypt(本地加密)、Recuva(文件恢复)、12306Bypassopen in new window、爱思助手、Bluestacks(安卓模拟器)、Ventoyopen in new window(制作可启动 U 盘)、微 PE 工具箱、傲梅分区open in new window

    飞书妙记:倍速、跳过空白片段、字幕搜索定位视频,将视频(最长 4 小时)转为文字大纲,了解视频梗概,建立基础认知。等到自己上手实操的时候,遇到问题直接搜索文字定位到相关内容,再看文字对应的视频截图确定配置细节。如果视频过大,可以提取音频来上传。[1]

    开源工具

    • Whipseropen in new window:自动语音识别应用,除了可以用于语音识别,Whisper 还能实现多种语言的转录,以及将这些语言翻译成英语。或通过 Clipchamp 识别各种字幕。
    • Whisper Desktopopen in new window:Windows 本地音频转录的开源工具,支持音视频转录字幕,并且能够从麦克风捕获、转录或翻译实时音频。
    • CodeFormeropen in new window:使用 AI 算法修复图像和视频中的人脸。注意:路径与文件名不能出现中文。
    • AutoCutopen in new window:通过字幕来剪切视频
    • style2paintsopen in new window:一款给线稿上色的 AI 辅助工具。能够帮助用户给没有上色的图片,快速完成上色的 AI 工具,上色效果广受好评,完全免费开箱即用。
    • uncle-novelopen in new window:一个全网小说下载器及阅读器,可部署在 PC 和安卓上,目录解析与书源结合,支持有声小说与文本小说,可下载 mobi、epub、txt 格式文本小说。
    • VoceChatopen in new window:可以部署在网页的轻型客服系统?是否有其他开源选项。

    Android


    已弃

    • 全局手势:StrokesPlus.netopen in new window & WGestures
    • 桌面管理:Fences 3 & 火萤视频桌面 & UPUPOO & 360 桌面助手 & 搜狗桌面 & Q+
    • 进程管理:Process Lasso(避免老电脑卡顿?会自动删除启动项,不适合主力电脑)& Security Process Explorer(屏蔽垃圾进程)
    • 文件夹锁定/隐藏:Anvide Lock Folder
    • 桌面便签:小黄条、URNotes 意唯桌面便签 (2015 停止更新,复制经常出错)
    • 网络电台:龙卷风
    • 英文写作:易改
    • 流量管理:cFosSpeed
    • 游戏平台:VS & 4399
    • 客服:飞豆客服聊天助手 & mirai(qq 机器人)open in new window & 酷 Q(已关)
    • 其他:按键精灵、DisplayCal(屏幕)、One Quik(虚拟桌面切换)、Auslogics Disk Defrag(磁盘整理)、Reflector 3(手机投屏)、VoiceBot(声控游戏)
    • DockItopen in new window:主显示屏中,非全屏状态下,快速将窗口局部化。如何默认不全屏;应用不自动吸边?

    部分应用推荐来自 @vector090。


    1. 视频课程学习留档open in new window ↩︎

    已到达文章底部,欢迎留言、表情互动~
    • 赞一个
      0
      赞一个
    • 支持下
      0
      支持下
    • 有点酷
      0
      有点酷
    • 啥玩意
      0
      啥玩意
    • 看不懂
      0
      看不懂
    评论
    • 按正序
    • 按倒序
    • 按热度
    Powered by Waline v2.15.8
    - + diff --git a/apps/ChatGPT.html b/apps/ChatGPT.html index 3b1a6f06..23b21ef1 100644 --- a/apps/ChatGPT.html +++ b/apps/ChatGPT.html @@ -3,7 +3,7 @@ - ChatGPT | LearnHubs + ChatGPT | LearnHubs \",\"当图床图片无法显示时,尝试屏蔽自己网站的 referrer,在源码中添加:。\"]},\"619\":{\"h\":\"纯色背景\",\"t\":[\"body 铺满页面,添加纯色背景。\",\" \",\"或使用 bootstrap 的样式class=\\\"bg-light\\\"。\"]},\"620\":{\"h\":\"鼠标经过变色\",\"t\":[\"鼠标经过重链接,则该区域变色。\",\".tg td a:hover { background: #f29901; display: block; } \"]},\"621\":{\"h\":\"隐藏元素\",\"t\":[\"隐藏网页元素\",\"# 将元素的显示设为无,元素在网页中不占任何的位置。 style=\\\"display:none;\\\" # 将元素隐藏,但是元素在网页中的位置还是被占着。 style=\\\"visibility:hidden;\\\" # 显示隐藏元素 $('#hidden_sort').show(); # 继续隐藏#hidden_sort $('#hidden_sort').hide();
    标题数过大
    # 当无法使用,继续隐藏#hidden_sort document.getElementById('hidden_alert').style.display=\\\"none\\\"; document.getElementById('hidden_alert').style.display=\\\"block\\\"; # 显示 div span 的文本内容 hidden_alert.textContent=\\\"标题数超过,请减少标题数或取消勾选「避重」\\\"; \"]},\"622\":{\"h\":\"高亮\",\"t\":[\"对选择文章进行着色高亮。\",\"xxx \"]},\"623\":{\"h\":\"页面布局\"},\"624\":{\"h\":\"自适应布局\",\"t\":[\"自适应布局以 Bootstrap 为主,具体说明参考 Bootstrap 文档。\",\"# 分别为距离上下左右, class=\\\"mt-5 mb-5 ms-4 me-4\\\" # 修改间距 style=\\\"margin-top:-15px;margin-bottom:-15px\\\" # 图片自动拉伸宽度 style=\\\"background-size:contain|cover;width:100%;height:auto;\\\" # 视频将宽度设置大些,然后让其自动缩放 width=\\\"2400px\\\" \"]},\"625\":{\"h\":\"客户端自适应\",\"t\":[\"判断设备是移动还是 PC,然后显示不同样式内容。\",\"
    \"]},\"626\":{\"h\":\"本地压缩 HTML\",\"t\":[\"html-minifier 能在本地批量压缩 HTML、CSS 和 JavaScript 源码。\",\"# 全局安装 html-minifier npm install html-minifier -g # 终端中执行压缩命令,默认压缩 input 下所有文件,压缩选项参照 http://kangax.github.io/html-minifier/ html-minifier --collapse-boolean-attributes --collapse-whitespace --decode-entities --no-html5 --minify-css true --minify-js true --process-conditional-comments --process-scripts text/html --remove-attribute-quotes --remove-comments --remove-empty-attributes --remove-optional-tags --remove-redundant-attributes --remove-script-type-attributes --remove-style-link-type-attributes --remove-tag-whitespace --sort-attributes --sort-class-name --trim-custom-fragments --use-short-doctype --input-dir D:\\\\Backup\\\\raw --output-dir D:\\\\Backup\\\\1 \",\"开源 JavaScript 插件和库↩︎\"]},\"627\":{\"h\":\"JavaScript\",\"t\":[\"JavaScript 是一种具有函数优先的轻量级,解释型或即时编译型的编程语言,最新标准是 ECMAScript 6.0。虽然它是作为开发 Web 页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,并长年居于最受欢迎编程语言排行榜榜首。\",\"推荐学习流程:「JavaScript」>「ES6」>「TypeScript」。\"]},\"628\":{\"h\":\"ES6\",\"t\":[\"sayHi(){console.log(\\\"Hi\\\");} 等同于 sayHi:function(){console.log(\\\"Hi\\\");}。\",\"let 声明的变量只在 let 命令所在的代码块内有效,尤其适合用于 for 循环的计数器。\",\"const 声明一个只读的常量,一旦声明,常量的值就不能改变。\",\"=> 是指箭头函数,是一种函数的简写方式,语法为 (参数)=>{函数体};。\",\"x => 2x //等于下方函数 function (x) { return 2x; } \"]},\"629\":{\"h\":\"数据结构\",\"t\":[\"Set 类似于数组,但是成员的值都是唯一的,没有重复的值。向 Set 加入值的时候,不会发生类型转换。\",\"// 例一 const set = new Set([1, 2, 3, 4, 4]); [...set] // [1, 2, 3, 4] // 例二 const items = new Set([1, 2, 3, 4, 5, 5, 5, 5]); items.size // 5 \",\"Map 类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。\",\"Map 的键实际上是跟内存地址绑定的,只要内存地址不一样,就视为两个键。因此有时看起来是针对同一个键,但实际上这是两个不同的数组实例,内存地址是不一样的,因此 get 方法无法读取该键,返回 undefined。\"]},\"630\":{\"h\":\"常用函数\",\"t\":[\"document.getElementById() document.getElementsByClassName(\\\"v-modal\\\")[0] document.getElementsByTagName(\\\"body\\\")[0].remove(); //通过 Tagname 获取元素,删除指定元素 for (var i=0;i\\\");} //循环语句,i++会在代码被执行后增加一个值 break; //跳出当前循环但继续函数 //js 暂停 while (true){ //100 毫秒延时 setTimeout(f1,100) //直接跳出循环和函数 return; } //截取中间的字符串,A 有多少字符就需要加多少位置 str = str.substring(str.indexOf(\\\"A\\\") + 1,str.indexOf(\\\"B\\\")) //取特定字符前后的字符串 var ture_tkl01 = taokouling.value.trim().split('打')[0]; //取第 4 位后的字符串 (4 代表开始位置,相当于从 5 开始截取到尾部) var ture_tkl = ture_tkl01.substring(4); //报错处理 function f1(){ try{ if (document.getElementById(\\\"pro-operation\\\").getElementsByClassName(\\\"product-button02 disabled\\\")[0].innerHTML.indexOf(\\\"立即申购\\\")!=-1) { window.location.reload(); }else{ window.location.reload(); } }catch(e){ //下单 document.getElementById(\\\"product-operation\\\").getElementsByClassName(\\\"product-button02\\\")[0].click(); } } //js 函数为同步处理,只有 if else、setTimeour、for each 等函数才能按序运行 //setInterval 不要包含多个函数,否则 clearInterval 容易出错 //替换,不添加/g,则替换只发生一次 text.value = text.value.replace(\\\" \\\", \\\"----\\\"); //全局替换,如果使用/\\\\s/g,则换行符也会被替换 text.value = text.value.replace(/ /g, \\\"----\\\"); //载入完成后,自动或取焦点。textSour 为元素 id,需配合 jquery window.onload = function(){ textSour.focus(); }; //按钮点击后使用函数 $(\\\"#clearEmoji\\\").click(function () { } //去除每行首尾空格,支持特殊字符,首尾的空格、制表符、特殊字符的组合都倍清除 strResult += split_result[i].replace(/(^[\\\\t\\\\s]*)|([\\\\t\\\\s]*$)/g, \\\"\\\") + '\\\\n'; \"]},\"631\":{\"h\":\"JavaScript 对象\",\"t\":[\"对象由花括号分隔。在括号内部,对象的属性以名称和值对的形式 (name : value) 来定义。 对象一定要用英文冒号来注明,否则整段代码失效。属性由逗号分隔:\",\"var person={firstname:\\\"John\\\", lastname:\\\"Doe\\\", id:5566}; //对象属性有两种寻址方式 name=person.lastname; name=person[\\\"lastname\\\"]; //对象的方法定义了一个函数,并作为对象的属性存储。对象方法通过添加 () 调用 (作为一个函数)。

    \"]},\"632\":{\"h\":\"全局变量\",\"t\":[\"js 的全部变量要用 window. 来定义。如果变量在函数内没有声明(没有使用 var),该变量为全局变量。\",\"局部变量:在函数中通过 var 声明的变量。全局变量:在函数外通过 var 声明的变量。\",\"没有声明就使用的变量,默认为全局变量,不论这个变量在哪被使用。\",\"

    \"]},\"633\":{\"h\":\"变量类型\",\"t\":[\"当您声明新变量时,可以使用关键词 \\\"new\\\" 来声明其类型:\",\"var carname = new String(); 字符串; var x = new Number(); 数字; var y = new Boolean(); 布尔; var cars = new Array(); 数组; var person = new Object(); 对象; var y = new String(\\\"John\\\"); 对象; // 数据赋值 var length = 16; // Number 通过数字字面量赋值 var points = x * 10; // Number 通过表达式字面量赋值 var lastName = \\\"Johnson\\\"; // String 通过字符串字面量赋值 var cars = [\\\"Saab\\\", \\\"Volvo\\\", \\\"BMW\\\"]; // Array 通过数组字面量赋值 var person = { firstName: \\\"John\\\", lastName: \\\"Doe\\\" }; // Object 通过对象字面量赋值 \"]},\"634\":{\"h\":\"运算符\",\"t\":[\"//后置++是将自身的值赋给新变量,然后才自身加 1. //前置++是将自身加 1 的值赋值给新变量,同时自身也加 1; int a; a=i++;//将 i 的值赋值给 a,即 a=i;然后再执行 i=i+1;也就是【a=i++;】与【a=i; i=i+1;】等价。 a=++i;//将 i+1 的值赋给 a,即 a=i+1;然后再执行 i=i+1;也就是【a=++i;】与【a=i+1;i=i+1;】等价。 \",\"// 描述 (x=5) 比较 // == 等于 x==8 false x==5 true // === 绝对等于(值和类型均相等) x===\\\"5\\\" false x===5 true // != 不等于 x!=8 true // !== 不绝对等于(值和类型有一个不相等,或两个都不相等) x!==\\\"5\\\" true x!==5 false && 且 || 或 \"]},\"635\":{\"h\":\"JavaScript 应用\"},\"636\":{\"h\":\"取随机值\",\"t\":[\"//[任意随机值](https://www.runoob.com/w3cnote/js-random.html) Math.floor(Math.random() * (max - min + 1) + min); // var arr01 = textSour.value.split(\\\"\\\\n\\\"); //分割字符数组,主要用于淘口令网 var arr01 = [\\\"打\\\", \\\"哒\\\", \\\"达\\\"]; //循环语句,i++会在代码被执行后增加一个值 for (var x = 0; x < arr01.length; x++) { //存在循环后分割,并跳出循环 if (taokouling.value.indexOf(arr01[x]) != -1) { ture_tkl01 = taokouling.value.trim().split(arr01[x])[0]; break; } } // https://segmentfault.com/q/1010000006819233 //不重复获取 for (var i = 0; i < rn; ++i) { var index = ~~(Math.random() * count) + i; result[i] = split_result[index]; split_result[index] = split_result[i]; count--; strResult = strResult + result[i] + \\\"\\\\n\\\"; } \"]},\"637\":{\"h\":\"文本框清空\",\"t\":[\"input 文本框获取焦点后,自动清空内容。\",\"onfocus = \\\"this.value=''\\\"; \"]},\"638\":{\"h\":\"内部文件读取\",\"t\":[\"以下代码用于服务器读取文档,本地无法直接使用。\",\"$.ajax({ url: \\\"./xx.txt\\\", success: function (result) { var strs = result.split(\\\"\\\\n\\\"); addTableTR(strs, true); }, }); \"]},\"639\":{\"h\":\"选择框状态\",\"t\":[\"调用 attr 给选择框 radio、checkbox 添加 checked 属性和移调,并不能真实改变不能单选和选中框的真实状态,可用下方代码改变。[1]\",\"//取消导航项的 checked,同类名称都会取消 checked 状态 $(\\\"input[name=daoruRadio]\\\").prop(\\\"checked\\\", false); //点击对映 id 的单选框 $(\\\"input[id=Radio1]\\\").prop(\\\"checked\\\", true); \"]},\"640\":{\"h\":\"复制隐藏内容\",\"t\":[\"clipboardjs 可复制隐藏区域内容。\",\"//新设将粘贴板设在特定按钮上,#copyresult 为按钮 id,#CopyValue 为区域 id var clipboard2 = new ClipboardJS(\\\"#copyresult\\\", { text: function () { return $(\\\"#CopyValue\\\").val(); }, }); clipboard2.on(\\\"success\\\", function (e) { toastr[\\\"success\\\"](\\\"复制成功!\\\"); }); clipboard2.on(\\\"error\\\", function (e) { toastr[\\\"error\\\"](\\\"复制失败,请手动重新复制!\\\"); }); \"]},\"641\":{\"h\":\"引入 html 页面\",\"t\":[\"利用 link 标签的 rel=import 引入 html 页面\",\" \"]},\"642\":{\"h\":\"视频全屏弹窗\",\"t\":[\"品牌首页经常需要在动加载视频,可将下方代码放入首页源码的 body 区。\",\" \",\"插入视频代码\",\"
    \",\"radio、checkbox 选中状态研究↩︎\"]},\"643\":{\"h\":\"Markdown\",\"t\":[\"Markdown 是一种轻量级标记语言,易读易写,并对于图片、图表、数学式都有支持,目前许多网站与应用都支持了 Markdown。\",\"Markdown 入门:Markdown 基本撰写和格式语法,Markdown 转 HTML 语法介绍\"]},\"644\":{\"h\":\"图片尺寸\",\"t\":[\"md 格式调整图片尺寸,在不同编辑器中显示效果不同,不一定会生效。使用 html 格式调整图片尺寸能确保成功率。\",\" ![同时设置宽度和高度](https://files.mdnice.com/logo.png =150x150) ![只设置宽度,推荐使用百分比](https://files.mdnice.com/logo.png =40%x) ![name](https://docsify.js.org/_media/icon.svg \\\"图片说明\\\") \",\"七牛云图床提供图片流量优化压缩策略,可用于调整图片的分辨率、大小和格式,具体参数请参考七牛云图片高级处理。此外,我还会定期使用 PP 鸭对图床中的图片进行重新压缩。\",\" ?imageMogr2/thumbnail/!60p ?imageMogr2/thumbnail/500x ?imageMogr2/thumbnail/500x/strip/quality/50/format/webp \"]},\"645\":{\"h\":\"资料引用\",\"t\":[\"文章中加 ^[引用内容] 会在底部自动添加引用资料。如果想添加链接标题,则为 ^[[标题](链接)]。\",\"如果同一引用要在多个地方使用,则需要手动编号。\",\"这是一条引用 [^1] 这是一条引用 [^2] 这是一条引用 [^1] 这是一条引用 [^3] [^1]:链接 [^2]:[标题](链接) [^3]:
    ![图片描述](图片链接) \"]},\"646\":{\"h\":\"代码块自动换行\",\"t\":[\"自动换行需要 css 支持,暂不能自动启用。\"]},\"647\":{\"h\":\"整段删除线\",\"t\":[\"~~ 只支持对本行内容添加删除线。\",\"如果要对大段内容添加删除线,可以用 HTML 标签 ,被该标签包围的内容会全部添加删除线。VuePress 暂不支持该代码,会将标签识别为不完整而报错。\"]},\"648\":{\"h\":\"Python\",\"t\":[\"Python 很久没用了,暂时只做记录作用。\"]},\"649\":{\"h\":\"入门文档\",\"t\":[\"Python3 语法\",\"Scrapy 入门 浮点数:1.23x109 就是 1.23e9,或者 12.3e8,0.000012 可以写成 1.2e-5\",\"requests 模块 - 获取数据\",\"BeautifulSoup4 模块 - 解析 HTML\",\"openpyxl 模块 - 读写 Excel 文件\",\"Pillow 模块 - 图片\",\"re 模块 - 正则表达式\"]},\"650\":{\"h\":\"简单示例\",\"t\":[\"import requests #载入指定库 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:63.0) Gecko/20100101 Firefox/63.0', 'Content-Type': 'text/html; charset=utf-8'} r = requests.get(\\\"\\\", headers=headers) #r.encoding = 'utf-8' #如果没设置表头,可以设置编码防止中文出现乱码 r.encoding = r.apparent_encoding #使用网页固定编码 print(r.text) print(r.headers) from bs4 import BeautifulSoup soup = BeautifulSoup(r.text, \\\"html.parser\\\") print(soup.title.string) from PIL import Image # 打开一个 jpg 图像文件,注意是当前路径 im = Image.open('test.jpg') # 获得图像尺寸 w, h = im.size print('Original image size: %sx%s' % (w, h)) # 缩放到 50% im.thumbnail((w//2, h//2)) print('Resize image to: %sx%s' % (w//2, h//2)) # 把缩放后的图像用 jpeg 格式保存 im.save('thumbnail.jpg', 'jpeg') \",\"if __name__ = \\\"__main__\\\" 是只在主程序中运行,如果是作为模块引用,则不运行。sys.path.append(\\\"c:\\\\\\\\\\\\\\\\Python37\\\\\\\\\\\\\\\\test) 添加模块的搜索路径文件夹。\\\\\\\\ 在 Pythone 中会转义,所以要输入两个。\"]},\"651\":{\"h\":\"基础语法\",\"t\":[\"# end=\\\" \\\"为后缀,可空,默认为换行符 print(\\\"密码不能含有“*”,你还有\\\",count,\\\"次机会\\\", end=\\\" \\\") # ''' 三引号可以用多行,或在每行后添加 \\\\\\\\ ,或每行用引号括起来 type(a) #判别变量种类,容易出问题,不要用于判定 isinstance(a,float) #判断变量是否是该类型,主要使用 # s 为字符串 s.isalnum() #所有字符都是数字或者字母,为真返回 True, 否则返回 False s.isalpha() #所有字符都是字母,为真返回 True, 否则返回 False s.isdigit() #所有字符都是数字,为真返回 True, 否则返回 False s.islower() #所有字符都是小写,为真返回 True, 否则返回 False s.isupper() #所有字符都是大写,为真返回 True, 否则返回 False s.istitle #所有单词都是首字母大写,为真返回 True, 否则返回 False s.isspace #所有字符都是空白字符,为真返回 True, 否则返回 False \"]},\"652\":{\"h\":\"序列类型\",\"t\":[\"#列表 list =[1,2,3,\\\"a\\\",\\\"b\\\"] list.append([4,1]) list =[1,2,3,\\\"a\\\",\\\"b\\\",[4,1]] #append() 函数是方法向列表的尾部添加一个新的元素 #元组 tuple = (1,2,3,\\\"a\\\",\\\"b\\\") tuple = (1,) #元组只有一个元素时,必须在后面加逗号 #字符串 set() 是个集合函数,括号里的参数可以是字典类型,列表类型,元组类型,字符串类型,不能是数字类型。 s1 = \\\"abc123\\\" s2 = \\\"abc,123\\\" s2.split(\\\",\\\")) #字符串分割后变为列表,使用逗号进行分割 [\\\"abc\\\",123] print(\\\"|\\\".join(list)) #join 只能对字符串进行操作,用\\\"|\\\"中的符号连接字符串,比如 ab r1 = range(1, 4) #集合是无序列的,每次出现顺序都不同,不支持按索引提取 set() set1 = set(list) =([1,2,3,\\\"a\\\",\\\"b\\\"]) college1 = {\\\"哲学\\\", \\\"经济学\\\", \\\"法学\\\"} print(college1) #每次集合排列顺序是随机的 college2 = set([\\\"哲学\\\", \\\"经济学\\\", \\\"法学\\\"]) #将其他数据转换为集合 #字典 dict() {} \"]},\"653\":{\"h\":\"字符串用法\",\"t\":[\"len(string) #返回字符串长度 join(seq) # 以指定字符串作为分隔符,将 seq 中所有的元素 (的字符串表示) 合并为一个新的字符串 startswith(str, beg=0,end=len(string)) #检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果 beg 和 end 指定值,则在指定范围内检查。 endswith(suffix, beg=0, end=len(string)) # 检查字符串是否以 obj 结束,如果 beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False. count(str, beg= 0,end=len(string)) # 返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数 find(str, beg=0 end=len(string)) #检测 str 是否包含在字符串中,如果指定范围 beg 和 end,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回 -1 rfind(str, beg=0,end=len(string)) #类似于 find() 函数,不过是从右边开始查找。 index(str, beg=0, end=len(string)) # 跟 find() 方法一样,只不过如果 str 不在字符串中会报一个异常。 rindex( str, beg=0, end=len(string)) #类似于 index(),不过是从右边开始。 strip([chars]) #在字符串上执行 lstrip() 和 rstrip(),移除头尾指定字符 replace(old, new [, max]) #把 将字符串中的 str1 替换成 str2,如果 max 指定,则替换不超过 max 次。 split(str=\\\"\\\", num=string.count(str)) #num=string.count(str)) 以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num 个子字符串 splitlines([keepends]) #按照行 ('\\\\\\\\r', '\\\\\\\\r\\\\\\\\n', \\\\\\\\n') 分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。 lower() #转换字符串中所有大写字符为小写。 upper() #转换字符串中的小写字母为大写 swapcase() #将字符串中大写转换为小写,小写转换为大写 \"]},\"654\":{\"h\":\"运算符\",\"t\":[\"运算符\",\"描述\",\"实例\",\"%\",\"取模 - 返回除法的余数\",\"21 % 10 输出结果 1\",\"**\",\"幂 - 返回 x 的 y 次幂\",\"10**21 为 10 的 21 次方\",\"//\",\"取整除 - 返回商的整数部分\",\"9//2 输出结果 4 , 9.0//2.0 输出结果 4.0\",\"优先级:not > and > or not 1 or 0 and 1 or 3 and 4 or 5 (not 1) or (0 and 1) or (3 and 4) or 5\",\"Python 运算符优先级\"]},\"655\":{\"h\":\"条件三元表达式\",\"t\":[\"x, y = 4, 5 if x < y: small = x else: small = y # 可以缩略为下面一句 small = x if x < y else y x,y,z=6,5,5 if x 4 \",\"#条件循环参考,用户只有三次输入错误,内容中包含“*”不计算在内 count=3 password=\\\"xxxxdfd\\\" while count: # 0 为 False,其他为 True passwd = input(\\\"请输入密码:\\\") if passwd == password: print(\\\"密码正确,进入程序\\\") break elif \\\"*\\\" in passwd: # end=\\\" \\\"为后缀,可空,默认为换行符 print(\\\"密码不能含有“*”,你还有\\\",count,\\\"次机会\\\", end=\\\" \\\") continue else: print(\\\"密码错误,你还有\\\",count-1,\\\"次机会\\\", end=\\\" \\\") count-=1 \"]},\"657\":{\"h\":\"range() 函数\",\"t\":[\"range(stop)\",\"range(start, stop[, step])\",\"range 函数具有一些特性:\",\"如果 step 参数缺省,默认 1;如果 start 参数缺省,默认 0。\",\"如果 step 是正整数,则最后一个元素(start + i _ step)小于 stop。\",\"如果 step 是负整数,则最后一个元素(start + i _ step)大于 stop。\",\"step 参数必须是非零整数,否则抛出 VauleError 异常。\"]},\"658\":{\"h\":\"向列表添加元素\",\"t\":[\"向列表添加元素\",\"list =[1,\\\"xxxx\\\",3.14,[1,3,3]] list.append(3) # 添加元素 list.extend([1,2,\\\"或\\\"]) # 添加列表 list.insert(index, obj) # index -- 对象 obj 需要插入的索引位置 (从 0 开始 ); obj -- 要插入列表中的对象。 list.remove(\\\"xxxx\\\") # 删除第一个含有相同内容的元素 del list[2] #删除指定索引位置的元素 list.pop(obj=list[-1]) #obj -- 可选参数,从列表要移除指定索引位置的对象,默认为最后以为,返回被移出的元素对象 list.reverse() #将列表彻底反转 list.sort() #从小往大排训 list.sort(reverse=True) #从大往小排序 将指定列表的小甲鱼改为小鱿鱼 list1 = [1, [1, 2, ['小甲鱼']], 3, 5, 8, 13, 18] list1[1][2][0] = '小鱿鱼' \"]},\"659\":{\"h\":\"列表切片\",\"t\":[\"L = ['Google', 'Runoob', 'Taobao']\",\"L(start: stop[: step]) step 可以使用负数,从尾部往左走。\",\"结果 Python 表达式\",\"结果\",\"描述\",\"L[2]\",\"'Taobao'\",\"读取列表中第三个元素\",\"L[-2]\",\"'Runoob'\",\"读取列表中倒数第二个元素\",\"L[1:]\",\"['Runoob', 'Taobao']\",\"从第二个元素开始截取列表\",\"L[:]\",\"['Google', 'Runoob', 'Taobao']\",\"获取完整列表\",\"元祖 tuple 与列表 list 用法类似,但元祖不能直接修改元素,只能用切片的方法来修改\",\"temp=(1,\\\"xxxxx\\\",\\\"迷途\\\",2) #元祖 temp=temp[:2]+(“y”,)+temp[2:] del temp #删除元祖 \"]},\"660\":{\"h\":\"列表解析\",\"t\":[\"list1 = [x**2 for x in range(10)] #list1 为 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] #相当于 list1 = [] for x in range(10): list1.append(x**2) >>> list1 = [(x, y) for x in range(10) for y in range(10) if x%2==0 if y%2!=0] #相当于 list1 = [] for x in range(10): for y in range(10): if x%2==0: if y%2!=0: list1.extend([(x,y)]) print(list1) \"]},\"661\":{\"h\":\"变量\",\"t\":[\"Python 变量是贴标签,而非存储数据\",\"list1=[1,3,2,9,7,8] list2=list1[:] list3=list1 # list2 和 list3 的值此时相同,但一旦对 list1 内部进行调整,比如排序、增减变量 list1.sort() # list3 会随着 list1 发生变化,list2 不变 \",\"lambda、filter、map\",\"g=lambda x,y : x+y g(3,4) 7 list(filter(lambda x:x%2,range(10))) #过滤 0-9 中能整除 2 的数字 list(map(lambda x : x%2, range(10))) #罗列 0-9 每个数字乘 2 的结果 \"]},\"662\":{\"h\":\"Coding\",\"t\":[\"代码编程的学习路径:\",\"基础知识:ES6, MySQL,HTML,Markdown,正则表达式\",\"脚本/开发工具:AutoHotkey,Electron\",\"编程语言:TypeScript 4.x + JavaScript\",\"前端框架:Vue 3.x\",\"构建工具:Vite 2.x\",\"路由工具:Vue Router 4.x\",\"状态管理:Vuex 4.x\",\"UI 框架:Element Plus\",\"CSS 预编译:Stylus / Sass / Less\",\"CSS 后处理器:PostCSS,tailwindcss\",\"Node.js 框架:Midway\",\"HTTP 工具:Axios\",\"Git Hook 工具:husky + lint-staged\",\"代码规范:EditorConfig + Prettier + ESLint + Airbnb JavaScript Style Guide\",\"提交规范:Commitizen + Commitlint\",\"单元测试:vue-test-utils + jest + vue-jest + ts-jest\",\"自动部署:GitHub Actions\",\"Documate:用于在文档网站中嵌入人工智能聊天对话框,根据内容回答用户问题。中间会调用 OpenAI API 用于回答问题。\"]},\"663\":{\"h\":\"Visual Studio Code\",\"t\":[\"本地代码编辑器使用 Visual Studio Code,其插件生态成熟,能实现大部分的需求。\",\"GitHub Copilot,CodeGeeX,Tabnine,aiXcoder 插件均可以辅助补全代码。Tabnine 和 aiXcoder 有免费版,可以预测一到两行的代码。CodeGeeX 由清华大学开发,提供完整补全功能。\"]},\"664\":{\"h\":\"修改快捷键\",\"t\":[\"选择「菜单栏」>「文件」>「首选项」>「键盘快捷方式」,修改或解绑快捷键。\",\"以 PicGo 图床为例,其默认配置放置于 %AppData%\\\\picgo\\\\data.json,推荐快捷键为\",\"剪贴板图片上传:ctrlOrCmd+alt+q\",\"打开文件管理器上传:ctrlOrCmd+alt+e\",\"打开输入框输入路径上传:ctrlOrCmd+alt+x\",\"另外,右键对应快捷方式,点击「重置按键绑定」,即可将快捷键设为默认。\"]},\"665\":{\"h\":\"排除文件夹\",\"t\":[\"在 VS Code 中点击快捷键 Ctrl/Command+Shift+P,输入「setting」,在设置中添加排除文件夹选项。注意:排除文件夹不能使用全路径,只能使用规则排除。\",\"\\\"files.exclude\\\": { \\\"**/blog\\\": true, //隐藏指定文件夹 \\\"**/[Pp]lugins\\\": true, //使用中括号时表示不区分大小写 \\\"**/*.pyc\\\": true, //隐藏所有 pyc 文件 \\\"**/*.d.ts\\\": true, //隐藏所有 d.ts 文件 } \"]},\"666\":{\"h\":\"在线 IDE\",\"t\":[\"在线 IDE 最大的优势是开箱即用,无需搭建环境,避免本地环境错误导致的各类 bug。\",\"StackBlitz:StackBlitz 界面类似 Visual Studio Code,可以直接 push 和拉取 GitHub 仓库的代码进行查看和编辑,项目支持离线开发,同时所有应用程序会自动部署在其服务器上。[1]\",\"CodePen:CodePen 是一个在线的 HTML、CSS 和 JavaScript 代码编辑器,能够编写代码并即时预览效果,便于项目分享预览。CodePen 也一个庞大的前端社区,上面有来自全球开发者分享的各种各样炫酷的效果,并且这些代码都是开源和共享的。\",\"CodeSandbox:CodeSandbox 编辑体验与 VSCode 类似,并支持 GitHub 导出、静态文件托管、本地项目导入等。缺点:不能直接导入 GitHub 项目。\",\"六个好用的在线代码编辑器,你选哪个?↩︎\"]},\"667\":{\"h\":\"正则表达式\",\"t\":[\"正则表达式,又称规则表达式,是使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式(规则)的文本。\",\"正则入门:正则 30 分钟入门,LEARN REGEX 中文版\"]},\"668\":{\"h\":\"实用表达式\",\"t\":[\"{} 限定符 (表示固定位数)。比如:\\\\\\\\d{5} 匹配长度有 5 个的数字,\\\\\\\\d{1,5} 最少匹配 1 个,最长匹配 5 个数字。\",\".{30,} 指匹配长度 30 以上的任意字符串。\",\"[aeiou] 匹配中括号中任意字符。[^aeiou] 匹配除了 aeiou 这几个字母以外的任意字符。\",\"HTTP 链接匹配:https?://[^\\\\s\\\"。?,,?)#]+,句尾不含空格、中英文逗号、中文句号、问号,仅包含 http 和 https 链接\",\"万能链接匹配:[a-zA-Z]+://[^\\\\s\\\"。?,,?)#]+ 匹配万能前缀,如 ftp、tencent、lark。\",\"匹配行:\",\"//匹配含某个字符的行 var ZZMactch = \\\".*\\\" + inputMatch.value + \\\".*\\\"; //匹配不含指定字符的行 var ZZMactch = \\\"^((?!\\\"+inputMatch.value+\\\").)*$\\\"; //匹配所有不包括 CSDN 的行 ^((?!CSDN).)*$ \",\"匹配不同文本组,id= 或 contentId= 后的多个数字符号\",\"(?<=id=)\\\\d* (?<=[?&](id|contentId)=)\\\\d+ \",\"^((?!abc).)*admin((?!abc).)*$ 匹配 不包含 abc 但包含 admin 的字符串,匹配整行。[1]\",\"((?!social.tmall.com)(?!ugc/detail.html).)*$ 匹配不包含 social.tmall.com 和 ugc/detail.html 的字符串,匹配整行。[2]\",\"[₳$¢₴€₤¥$《]([a-zA-Z0-9]{11})[₳$¢₴€₤¥$《] 匹配淘口令,[] 指中内容任意匹配一项皆可。\"]},\"669\":{\"h\":\"前后匹配\",\"t\":[\"前后匹配,前后元素只能出现一次,否则容易覆盖过多。\",\"//匹配任意以 a 开头并以 b 结尾的字符,匹配内容不含 a、b //如果 a 有 n 个,则同一行也会匹配 n 次 (?<=a).+(?=b) //如果 b 有 n 个,则匹配最后一个 b; //如果需要匹配第一个 b,则匹配区加懒惰限定符?,代表重复 1 次或更多次,但尽可能少重复 (?<=.*a).+?(?=b) //匹配任意以 a 开头并以 b 结尾的字符,匹配内容包含 a、b a(?<=a).+(?=b)b //匹配字符串中 a 和词组 abc 间的字符,如果 abc 不存在则去尾部 (?<=.*a).+(?=abc) \"]},\"670\":{\"h\":\"正则替换\",\"t\":[\"正则全局替换不能带 \\\\\\\\,此时用分割替换更方便。\",\"var str = \\\"dogdogdog\\\"; var str2 = str.replace(/dog/g,\\\"cat\\\"); #全局替换 var str2 = str.split(\\\"dog\\\").join(\\\"cat\\\"); #分割替换 \"]},\"671\":{\"h\":\"表达式修饰符\",\"t\":[\"元字符:区分大小写\",\"常用正则代码\",\"说明\",\".\",\"匹配除换行符以外的任意字符\",\"*\",\"匹配 0 个或多个.(有多少匹配多少,贪婪模式)\",\"?\",\"匹配 0 个或 1 个 (至少匹配一个)\",\"$\",\"以什么结尾的,如\\\\\\\\d+0$ (以 0 结尾)\",\"^\",\"以什么开头的,如^http匹配以 http 开头的字符串\",\"\\\\w\",\"匹配字母或数字或下划线或汉字\",\"\\\\W\",\"匹配任意不是字母,数字,下划线,汉字的字符\",\"\\\\d\",\"匹配数字\",\"\\\\D\",\"匹配任意非数字的字符\",\"\\\\s\",\"匹配任意的空白符(空格 ,制表符 )\",\"\\\\S\",\"匹配任意不是空白符的字符\",\"\\\\r\",\"回车符\",\"\\\\n\",\"换行符 (一般情况下使用\\\\r\\\\n 匹配回车换行)\",\"\\\\t\",\"制表符,Tab\",\"\\\\u4e00-\\\\u9fa5\",\"非中文\",\"常用分组语法\",\"分类\",\"代码/语法\",\"说明\",\"捕获\",\"(exp)\",\"匹配 exp,并捕获文本到自动命名的组里\",\"(?exp)\",\"匹配 exp,并捕获文本到名称为 name 的组里,也可以写成 (?'name'exp)\",\"(?:exp)\",\"匹配 exp,不捕获匹配的文本,也不给此分组分配组号\",\"零宽断言\",\"(?=exp)\",\"匹配 exp 前面的位置\",\"(?<=exp)\",\"匹配 exp 后面的位置\",\"(?!exp)\",\"匹配后面跟的不是 exp 的位置\",\"(? // component:传递参数必须为 `modelValue`,传递方法必须为 `update:modelValue` app.component('counter', { props: ['modelValue'], methods: { handleClick() { this.$emit('update:modelValue', this.modelValue + 3); }, }, template: `
    {{modelValue}}
    `, }); // v-model 传递多个参数 count 和 count1 // template // component app.component('counterx', { props: ['count', 'count1'], methods: { handleClick2() { this.$emit('update:count', this.count + 1); }, handleClick3() { this.$emit('update:count1', this.count1 + 10); }, }, template: `
    {{count}}
    {{count1}}
    `, }); \"]},\"675\":{\"h\":\"组件命名\",\"t\":[\"全局组件,建议「小写字母单词,单次间用横线间隔」;局部组件,建议「每个单次都用大写字母开头(驼峰命名)」。按这个规则命名,Vue 才能自动转换。\",\"// Vue 会自动将 Counter(局部组件)转为 counter(全局组件),将 HelloWorld(局部组件)转为 hello-world(局部组件)。 const Counter = { data() { return { count: 1, }; }, template: `
    {{count}}
    `, }; const HelloWorld = { template: `
    hello world
    `, }; const app = Vue.createApp({ // 引入局部组件(需放在引入之前) components: { // 手动定位 // counter: Counter, // 'hello-world': HelloWorld, Counter, HelloWorld, }, template: `
    11111111 222222
    `, }); \"]},\"676\":{\"h\":\"CDN 使用 vue\",\"t\":[\"
    {{ message }}
    \",\"使用
    来引入 html 元素,功能类似于 innerHTML,不能加载外部 HTML,实现 类似的功能。\"]},\"677\":{\"h\":\"云计算服务\"},\"678\":{\"h\":\"CDN\",\"t\":[\"国内服务器带宽限制较高,高带宽按量付费,随着访客数量的增加,费用也会急剧上升。而固定流量宽带,网站打开速度明显变慢。为减少服务器的带宽压力,可将静态文件、图片放在 CDN 上托管,而非服务器上。\"]},\"679\":{\"h\":\"静态文件\",\"t\":[\"静态文件原本使用公开资源库,但国外库有被不稳定,国内又有时碰上服务崩溃,访问速度慢。最终还是选择自建部署 oss.gpt-vip.top。\"]},\"680\":{\"h\":\"图床\",\"t\":[\"自建图床的成本并不高,只需续费域名就能确保图片的长期保存。我目前使用七牛云配合 Picgo 来搭建图床,每月费用大约十几元。\",\"曾经尝试过将第三方图床作为临时图床,但仅三天后,图片就全部失效了,导致了大量图片的丢失。这次经历让我深刻认识到,即使是临时需求,也不应依赖第三方图床。\"]},\"681\":{\"h\":\"全站加速\",\"t\":[\"使用 CDN 全站加速,能实现用户就近访问,不过也存在些问题。\",\"一个 CDN 只能为一个域名加速,加速的域名即为目标域名。\",\"CDN 服务商可能要求使用其自有 DNS,比如阿里云。\",\"如果加速区域选择「全球(不包含中国内地)」。国内用户会访问国外 CDN 节点,而非国内的源站服务器。\",\"迁移阿里云 DNS 时,注意关闭静态协议跟随回源,否则会网站重复调整。\"]},\"682\":{\"h\":\"第三方服务\"},\"683\":{\"h\":\"Vercel\",\"t\":[\"Vercel 是一家提供开发、预览和部署网页前端的云平台服务商。它主要用于前端项目,不原生支持 PHP 和 node 项目,每月提供 100G 免费流量。\",\"如果你的项目超出流量,可以参考 How do I use a Cloudflare domain with Vercel?,使用 CloudFlare 进行代理,但需注意检查是否出现过多重定向。在国内可能定位到被屏蔽的 CloudFlare 节点,从而导致有时无法访问。Vercel 现已支持国内电话认证。如流量超出不多,可切换账户部署。\"]},\"684\":{\"h\":\"fly.io\",\"t\":[\"Fly.io 是一家提供容器化部署的服务商,能根据流量动态调整资源。由于国内无法部署 Google Auth,因此我将认证服务放在 Fly.io 上,使用了两台 shared-cpu-1x@512MB 的机器,每月账单 1.5 刀。但不清楚是不是配置不够,fly.io 的机器很容易报错。\",\"# 初次构建 fly launch # 部署,官方建议开两台机器 flyctl deploy # 将机器内存改为 512 fly scale memory 512 # 控制机器数量,默认为 2 fly scale count 2 # 无法连接docker,则使用 fly wireguard websockets enable \"]},\"685\":{\"h\":\"CloudFlare Tunnel\",\"t\":[\"CloudFlare Tunnel 可作为 NAS 的轻量级扩展,一个 Tunnel 能将多个服务托管到不同的子域名。具体部署流程,请参考 CloudFlare Tunnel 免费内网穿透的简明教程。需注意,该服务与宝塔的官方 Docker 镜像存在冲突,因此不要同时使用。\",\"目前,我已通过 CloudFlare Tunnel 部署了 RSS 订阅源、GoogleAuth、PodCast 等服务。\",\"# 本地 Dockerfile 架构镜像 sudo docker build -t strapiauth . sudo docker run -d -p 1337:1337 --name strapiauth strapiauth # tunnel sudo docker run --name cloudflaretunnel cloudflare/cloudflared:latest tunnel --no-autoupdate run --token \"]},\"686\":{\"h\":\"腾讯云境外\",\"t\":[\"腾讯云香港已无轻量服务器供应,但可购买新加坡、日本的服务器。价格实惠,2 核 2G,30M 宽带,每月 33 元。但国内连接速度较慢,仅适合境外用户。\"]},\"687\":{\"h\":\"Cloudflare\",\"t\":[\"官方文档:Cloudflare Docs\",\"Cloudflare 云端代理后,能帮加速国内访问国外网站的速度。比如,notion 的个人博客用 Cloudflare 代理,原本速度很慢,使用 Cloudflare 后加速明显。\",\"但 Cloudflare 免费计划不支持单独子域名托管,需要完整域名托管。\"]},\"688\":{\"h\":\"反向代理\",\"t\":[\"Cloudflare Workers 反向代理不适合 google 和 cloudflare cdn 网站,其他网站大都可以。\"]},\"689\":{\"h\":\"镜像整个网站\",\"t\":[\"// 替换成你想镜像的站点 const upstream = \\\"www.youtube.com\\\"; // 如果那个站点有专门的移动适配站点,否则保持和上面一致 const upstream_mobile = \\\"www.youtube.com\\\"; // 你希望禁止哪些国家访问 const blocked_region = [\\\"RU\\\"]; // 禁止自访问 const blocked_ip_address = [\\\"0.0.0.0\\\", \\\"127.0.0.1\\\"]; // 替换成你想镜像的站点 const replace_dict = { $upstream: \\\"$custom_domain\\\", \\\"//www.youtube.com\\\": \\\"\\\", }; //以下内容都不用动 addEventListener(\\\"fetch\\\", (event) => { event.respondWith(fetchAndApply(event.request)); }); async function fetchAndApply(request) { const region = request.headers.get(\\\"cf-ipcountry\\\").toUpperCase(); const ip_address = request.headers.get(\\\"cf-connecting-ip\\\"); const user_agent = request.headers.get(\\\"user-agent\\\"); let response = null; let url = new URL(request.url); let url_host = url.host; if (url.protocol == \\\"http:\\\") { url.protocol = \\\"https:\\\"; response = Response.redirect(url.href); return response; } if (await device_status(user_agent)) { upstream_domain = upstream; } else { upstream_domain = upstream_mobile; } url.host = upstream_domain; if (blocked_region.includes(region)) { response = new Response( \\\"Access denied: WorkersProxy is not available in your region yet.\\\", { status: 403, } ); } else if (blocked_ip_address.includes(ip_address)) { response = new Response( \\\"Access denied: Your IP address is blocked by WorkersProxy.\\\", { status: 403, } ); } else { let method = request.method; let request_headers = request.headers; let new_request_headers = new Headers(request_headers); new_request_headers.set(\\\"Host\\\", upstream_domain); new_request_headers.set(\\\"Referer\\\", url.href); let original_response = await fetch(url.href, { method: method, headers: new_request_headers, }); let original_response_clone = original_response.clone(); let original_text = null; let response_headers = original_response.headers; let new_response_headers = new Headers(response_headers); let status = original_response.status; new_response_headers.set(\\\"access-control-allow-origin\\\", \\\"*\\\"); new_response_headers.set(\\\"access-control-allow-credentials\\\", true); new_response_headers.delete(\\\"content-security-policy\\\"); new_response_headers.delete(\\\"content-security-policy-report-only\\\"); new_response_headers.delete(\\\"clear-site-data\\\"); const content_type = new_response_headers.get(\\\"content-type\\\"); if (content_type.includes(\\\"text/html\\\") && content_type.includes(\\\"UTF-8\\\")) { original_text = await replace_response_text( original_response_clone, upstream_domain, url_host ); } else { original_text = original_response_clone.body; } response = new Response(original_text, { status, headers: new_response_headers, }); } return response; } async function replace_response_text(response, upstream_domain, host_name) { let text = await response.text(); var i, j; for (i in replace_dict) { j = replace_dict[i]; if (i == \\\"$upstream\\\") { i = upstream_domain; } else if (i == \\\"$custom_domain\\\") { i = host_name; } if (j == \\\"$upstream\\\") { j = upstream_domain; } else if (j == \\\"$custom_domain\\\") { j = host_name; } let re = new RegExp(i, \\\"g\\\"); text = text.replace(re, j); } return text; } async function device_status(user_agent_info) { var agents = [ \\\"Android\\\", \\\"iPhone\\\", \\\"SymbianOS\\\", \\\"Windows Phone\\\", \\\"iPad\\\", \\\"iPod\\\", ]; var flag = true; for (var v = 0; v < agents.length; v++) { if (user_agent_info.indexOf(agents[v]) > 0) { flag = false; break; } } return flag; } \"]},\"690\":{\"h\":\"镜像网站指定目录\",\"t\":[\"// 你要镜像的网站。 const upstream = \\\"objectstorage.ap-seoul-1.oraclecloud.com\\\"; // 镜像网站的目录,比如你想镜像某个网站的二级目录则填写二级目录的目录名,镜像 google 用不到,默认即可。 const upstream_path = \\\"/test/\\\"; // 镜像站是否有手机访问专用网址,没有则填一样的。 const upstream_mobile = \\\"objectstorage.ap-seoul-1.oraclecloud.com\\\"; // 屏蔽国家和地区。 const blocked_region = [\\\"\\\"]; // 屏蔽 IP 地址。 const blocked_ip_address = [\\\"0.0.0.0\\\", \\\"127.0.0.1\\\"]; // 镜像站是否开启 HTTPS. const https = true; // 文本替换。填你要镜像的网站 const replace_dict = { $upstream: \\\"$custom_domain\\\", \\\"//objectstorage.ap-seoul-1.oraclecloud.com\\\": \\\"\\\", }; // 以下保持默认,不要动 addEventListener(\\\"fetch\\\", (event) => { event.respondWith(fetchAndApply(event.request)); }); async function fetchAndApply(request) { const region = request.headers.get(\\\"cf-ipcountry\\\").toUpperCase(); const ip_address = request.headers.get(\\\"cf-connecting-ip\\\"); const user_agent = \\\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36\\\"; let response = null; let url = new URL(request.url); let url_hostname = url.hostname; if (https == true) { url.protocol = \\\"https:\\\"; } else { url.protocol = \\\"http:\\\"; } if (await device_status(user_agent)) { var upstream_domain = upstream; } else { var upstream_domain = upstream_mobile; } url.host = upstream_domain; if (url.pathname == \\\"/\\\") { url.pathname = upstream_path; } else { url.pathname = upstream_path + url.pathname; } if (blocked_region.includes(region)) { response = new Response( \\\"Access denied: WorkersProxy is not available in your region yet.\\\", { status: 403, } ); } else if (blocked_ip_address.includes(ip_address)) { response = new Response( \\\"Access denied: Your IP address is blocked by WorkersProxy.\\\", { status: 403, } ); } else { let method = request.method; let request_headers = request.headers; let new_request_headers = new Headers(request_headers); new_request_headers.set(\\\"Host\\\", url.hostname); new_request_headers.set(\\\"Referer\\\", url.hostname); let original_response = await fetch(url.href, { method: method, headers: new_request_headers, }); let original_response_clone = original_response.clone(); let original_text = null; let response_headers = original_response.headers; let new_response_headers = new Headers(response_headers); let status = original_response.status; new_response_headers.set(\\\"access-control-allow-origin\\\", \\\"*\\\"); new_response_headers.set(\\\"access-control-allow-credentials\\\", true); new_response_headers.delete(\\\"content-security-policy\\\"); new_response_headers.delete(\\\"content-security-policy-report-only\\\"); new_response_headers.delete(\\\"clear-site-data\\\"); const content_type = new_response_headers.get(\\\"content-type\\\"); if (content_type.includes(\\\"text/html\\\") && content_type.includes(\\\"UTF-8\\\")) { original_text = await replace_response_text( original_response_clone, upstream_domain, url_hostname ); } else { original_text = original_response_clone.body; } response = new Response(original_text, { status, headers: new_response_headers, }); } return response; } async function replace_response_text(response, upstream_domain, host_name) { let text = await response.text(); var i, j; for (i in replace_dict) { j = replace_dict[i]; if (i == \\\"$upstream\\\") { i = upstream_domain; } else if (i == \\\"$custom_domain\\\") { i = host_name; } if (j == \\\"$upstream\\\") { j = upstream_domain; } else if (j == \\\"$custom_domain\\\") { j = host_name; } let re = new RegExp(i, \\\"g\\\"); text = text.replace(re, j); } return text; } async function device_status(user_agent_info) { var agents = [ \\\"Android\\\", \\\"iPhone\\\", \\\"SymbianOS\\\", \\\"Windows Phone\\\", \\\"iPad\\\", \\\"iPod\\\", ]; var flag = true; for (var v = 0; v < agents.length; v++) { if (user_agent_info.indexOf(agents[v]) > 0) { flag = false; break; } } return flag; } \"]},\"691\":{\"h\":\"镜像网站带密码访问\",\"t\":[\"// 替换成你想镜像的站点 const upstream = \\\"google.com\\\"; // 如果那个站点有专门的移动适配站点,否则保持和上面一致 const upstream_mobile = \\\"m.google.com\\\"; // 密码访问 const openAuth = false; const username = \\\"username\\\"; const password = \\\"password\\\"; // 你希望禁止哪些国家访问 const blocked_region = [\\\"RU\\\"]; // 禁止自访问 const blocked_ip_address = [\\\"0.0.0.0\\\", \\\"127.0.0.1\\\"]; // 替换成你想镜像的站点 const replace_dict = { $upstream: \\\"$custom_domain\\\", \\\"//google.com\\\": \\\"\\\", }; function unauthorized() { return new Response(\\\"Unauthorized\\\", { headers: { \\\"WWW-Authenticate\\\": 'Basic realm=\\\"goindex\\\"', \\\"Access-Control-Allow-Origin\\\": \\\"*\\\", }, status: 401, }); } function parseBasicAuth(auth) { try { return atob(auth.split(\\\" \\\").pop()).split(\\\":\\\"); } catch (e) { return []; } } function doBasicAuth(request) { const auth = request.headers.get(\\\"Authorization\\\"); if (!auth || !/^Basic [A-Za-z0-9._~+/-]+=*$/i.test(auth)) { return false; } const [user, pass] = parseBasicAuth(auth); return user === username && pass === password; } async function fetchAndApply(request) { if (request.method === \\\"OPTIONS\\\") // allow preflight request return new Response(\\\"\\\", { status: 200, headers: { \\\"Access-Control-Allow-Origin\\\": \\\"*\\\", \\\"Access-Control-Allow-Headers\\\": \\\"*\\\", \\\"Access-Control-Allow-Methods\\\": \\\"GET, POST, PUT, HEAD, OPTIONS\\\", }, }); if (openAuth && !doBasicAuth(request)) { return unauthorized(); } const region = request.headers.get(\\\"cf-ipcountry\\\").toUpperCase(); const ip_address = request.headers.get(\\\"cf-connecting-ip\\\"); const user_agent = request.headers.get(\\\"user-agent\\\"); let response = null; let url = new URL(request.url); let url_host = url.host; if (url.protocol == \\\"http:\\\") { url.protocol = \\\"https:\\\"; response = Response.redirect(url.href); return response; } if (await device_status(user_agent)) { upstream_domain = upstream; } else { upstream_domain = upstream_mobile; } url.host = upstream_domain; if (blocked_region.includes(region)) { response = new Response( \\\"Access denied: WorkersProxy is not available in your region yet.\\\", { status: 403, } ); } else if (blocked_ip_address.includes(ip_address)) { response = new Response( \\\"Access denied: Your IP address is blocked by WorkersProxy.\\\", { status: 403, } ); } else { let method = request.method; let request_headers = request.headers; let new_request_headers = new Headers(request_headers); new_request_headers.set(\\\"Host\\\", upstream_domain); new_request_headers.set(\\\"Referer\\\", url.href); let original_response = await fetch(url.href, { method: method, headers: new_request_headers, }); let original_response_clone = original_response.clone(); let original_text = null; let response_headers = original_response.headers; let new_response_headers = new Headers(response_headers); let status = original_response.status; new_response_headers.set(\\\"access-control-allow-origin\\\", \\\"*\\\"); new_response_headers.set(\\\"access-control-allow-credentials\\\", true); new_response_headers.delete(\\\"content-security-policy\\\"); new_response_headers.delete(\\\"content-security-policy-report-only\\\"); new_response_headers.delete(\\\"clear-site-data\\\"); const content_type = new_response_headers.get(\\\"content-type\\\"); if (content_type.includes(\\\"text/html\\\") && content_type.includes(\\\"UTF-8\\\")) { original_text = await replace_response_text( original_response_clone, upstream_domain, url_host ); } else { original_text = original_response_clone.body; } response = new Response(original_text, { status, headers: new_response_headers, }); } return response; } addEventListener(\\\"fetch\\\", (event) => { event.respondWith( fetchAndApply(event.request).catch((err) => { console.error(err); new Response(JSON.stringify(err.stack), { status: 500, headers: { \\\"Content-Type\\\": \\\"application/json\\\", }, }); }) ); }); async function replace_response_text(response, upstream_domain, host_name) { let text = await response.text(); var i, j; for (i in replace_dict) { j = replace_dict[i]; if (i == \\\"$upstream\\\") { i = upstream_domain; } else if (i == \\\"$custom_domain\\\") { i = host_name; } if (j == \\\"$upstream\\\") { j = upstream_domain; } else if (j == \\\"$custom_domain\\\") { j = host_name; } let re = new RegExp(i, \\\"g\\\"); text = text.replace(re, j); } return text; } async function device_status(user_agent_info) { var agents = [ \\\"Android\\\", \\\"iPhone\\\", \\\"SymbianOS\\\", \\\"Windows Phone\\\", \\\"iPad\\\", \\\"iPod\\\", ]; var flag = true; for (var v = 0; v < agents.length; v++) { if (user_agent_info.indexOf(agents[v]) > 0) { flag = false; break; } } return flag; } \"]},\"692\":{\"h\":\"域名 DNS 托管\",\"t\":[\"国内访问为主的话,域名建议备案后托管在国内厂商。之前试过 Cloudflare,光域名解析就用了 500 ms,换回阿里云后速度稳定许多。\",\"DNS 迁移是在域名管理商处修改。比如我的域名是在阿里云购买,试过 DNS 迁移到 Cloudflare,之后再次迁移 DNS,需要回到阿里云操作。\",\"如果阿里云的安全验证一直被卡住,可以换个浏览器,比如 Firefox。\",\"子域名可以使用 NS 记录,托管到其他域名服务商。但 Cloudflare 不支持单独子域名托管。\",\"域名 DNS 服务器修改(阿里云):https://help.aliyun.com/document_detail/121648.html\"]},\"693\":{\"h\":\"GitHub\"},\"694\":{\"h\":\"GitHub Actions\",\"t\":[\"GitHub Actions 是一个持续集成和持续交付 (CI/CD) 平台,可用于自动执行构建、测试和部署管道。您可以创建工作流程来构建和测试存储库的每个拉取请求,或将合并的拉取请求部署到生产环境。将 GitHub Actions 命令保存为 main.yml,放于 .github\\\\workflows 目录下,repo 发生指定调节的改变时,Actions 会自动运行。[1]\",\"GitHub Actions 官方市场\",\"Awesome Actions\",\"如果 GitHub Actions 命令中有涉及密码等私密信息,则进入项目仓库的「Settings」>「Secrets and variables」>「Actions」,添加密钥进行加密处理。比如新建密钥 PERSONAL_TOKEN,Actions 命令中使用 ${{ secrets.PERSONAL_TOKEN }} 来指代该密钥。\"]},\"695\":{\"h\":\"不同仓库间复制\",\"t\":[\"复制文件到目的地,文档没变化则不会执行。案例为将当前仓库 main 分支下 docs 的 README.md 文件复制到另一个仓库 libaxuan/LearnHubs/ 路径下,如果目标路径存在相同文件,则将覆盖。如果让 clean: true 生效,Actions 会将目标路径情况,然后执行复制。\",\"此动作需按 Creating a personal access token 建立个人访问令牌,勾选权限「repo Full control of private repositories」,然后将该 token 值其保存在项目仓库的 Action 密钥。\",\"- name: Copy file uses: andstor/copycat-action@v3 with: personal_token: ${{ secrets.PERSONAL_TOKEN }} src_path: docs/README.md dst_path: / dst_owner: rockbenben dst_repo_name: LearnHubs dst_branch: main src_branch: main #clean: true \"]},\"696\":{\"h\":\"Actions 失败重试\",\"t\":[\"在 job 和 step 中使用 if 语句,只有满足条件时才执行具体的 job 或 step。[2]\",\"# 任务状态检查函数 success() # 当上一步执行成功时返回 true always() # 总是返回 true cancelled() # 当 workflow 被取消时返回 true failure() # 当上一步执行失败时返回 true \",\"first_step 会总是执行,second_step 需要上一步 first_step 执行成功才会执行,third_step 只有上一步 second_step 执行失败才执行。当 third_step 与 second_step 命令相同时,就可以达到失败重试的效果了。\",\"jobs: first_job: name: My first job runs-on: ubuntu-latest steps: - name: first_step if: always() - name: second_step if: success() - name: third_step if: failure() \"]},\"697\":{\"h\":\"uses 版本号\",\"t\":[\"uses: SamKirkland/FTP-Deploy-Action@4.3.1:uses 会指定此步骤运行 SamKirkland/FTP-Deploy-Action 存储库中的 4.3.1 版本。\",\"但有时 Actions 的版本不会这么快更新,又必须使用最新版,可以将版本号改为 branch name,比如 uses: SamKirkland/FTP-Deploy-Action@master。\"]},\"698\":{\"h\":\"Git Commit\",\"t\":[\"标准化的 Commit message 可以提供清晰、易读的历史记录,使我们更容易理解每个提交的目的和内容,这有助于追踪和审查代码变更。通过 conventional-changelog-cli 可以自动生成 CHANGELOG.md。建议都按照 Conventional Commits 的规范来进行提交。\",\"[optional scope]: [optional body] [optional footer(s)] \"]},\"699\":{\"h\":\"Type\",\"t\":[\"Type 用于说明 git commit 的类别,只允许使用下面的标识。[3]\",\"feat: 新特性或功能(feature)\",\"fix: 修复 bug\",\"docs: 文档更新(documentation)\",\"style: 代码风格或者组件样式更新(不影响代码运行的变动)\",\"refactor: 代码重构,不引入新功能和缺陷修复\",\"perf: 优化相关,比如提升性能、体验\",\"test: 增加测试\",\"chore: 构建过程或辅助工具的变动\",\"revert: 回滚到上一个版本\"]},\"700\":{\"h\":\"Scope\",\"t\":[\"Scope 用于说明 commit 影响的范围,比如 Controller、DAO、View 等等,视项目不同而不同。如果其中包含了多个 scope,可以使用 * 代替。\"]},\"701\":{\"h\":\"Footer\",\"t\":[\"如果当前代码与上一个版本不兼容,则 Footer 部分以 BREAKING CHANGE 开头,后面是对变动的描述、以及变动理由和迁移方法。[4]\",\"如果当前 commit 针对某个 issue,那么可以在 Footer 部分使用 Closes #265 关闭这个 issue。也可以在任意位置输入 #265,将 commit 与对应问题相关联。\"]},\"702\":{\"h\":\"常见问题\"},\"703\":{\"h\":\"GitHub 忽略指定文件\",\"t\":[\"项目路径新建一个命名为 .gitignore 的文件,将想要忽略的文件夹和文件写入 .gitignore 文件,换行分隔。\",\"比如要忽略 node_modules 文件夹,就直接在文件中输入 node_modules。\"]},\"704\":{\"h\":\"添加 Github 源作为依赖\",\"t\":[\"一般情况下,依赖包会使用 npm 进行管理。但有时开发者可能并不会立即更新到 npm 上,这时我们可以选择使用 GitHub 源作为备用方案。\",\"另外,在国内服务器连接不上 GitHub 的情况下,可以先使用 npm 安装依赖包,然后手动替换 node_modules 目录中对应的源为下载好的文件。\",\"yarn add strapi-google-auth yarn add https://github.com/arjusmoon860/strapi-google-auth.git \",\"了解 GitHub Actions↩︎\",\"最全总结,GitHub Action 自动化部署↩︎\",\"Git Commit 规范↩︎\",\"Commit message 和 Change log 编写指南↩︎\"]},\"705\":{\"h\":\"数据库管理\",\"t\":[\"我的数据库是通过 MySQL 和 phpMyAdmin 进行管理的。本页面将记录遇到的日常问题及其解决办法。\"]},\"706\":{\"h\":\"本地 MySQL 使用\",\"t\":[\"在 Windows 平台上,你需要首先安装 MySQL Server,然后使用数据库软件进行连接。如果你正在使用本地数据库并且没有将 MySQL Server 设为自动启动,那么每次开机后都需要手动启动它。启动步骤如下:右键点击菜单栏最左侧,依次选择「计算机管理」>「服务和应用程序」>「服务」>「MYSQL57」,然后双击以启动。\"]},\"707\":{\"h\":\"数据库恢复\",\"t\":[\"数据库备份是至关重要的工作,一旦数据丢失,恢复起来会非常困难。如果你只想恢复特定的数据库,可以复制数据库的字段内容。在 phpMyAdmin 中,选择你需要的数据库,点击 \\\"SQL\\\",然后将你的 SQL 代码粘贴到执行窗口,最后点击 \\\"Go\\\" 按钮以运行代码。字段的分隔通常以 -- Table structure for table xxx 开始。\",\"如果出现错误 #1217 - Cannot delete or update a parent row: a foreign key constraint fails,这意味着你尝试删除或更新表中的记录,但是这个记录在另一个表中作为外键被引用。如果确实需要进行恢复,可以使用以下命令暂时关闭 MySQL 的外键约束检查:\",\"-- 禁用外键约束检查 SET FOREIGN_KEY_CHECKS=0; -- 执行您的操作... -- 启用外键约束检查 SET FOREIGN_KEY_CHECKS=1; \"]},\"708\":{\"h\":\"数据库启动失败或损坏\",\"t\":[\"在 MySQL 配置文件中,找到 mysqld 行并添加 innodb_force_recovery=4。这个值可以在 0-6 之间调整,数值越大对数据库的损害就越大。在成功启动 MySQL 后,备份所有数据库和管理密码,并将它们下载到本地。\",\"在宝塔面板的「数据库」选项中删除所有数据库,然后卸载并重新安装 MySQL。\",\"重新导入数据库。\"]},\"709\":{\"h\":\"静态部署\"},\"710\":{\"h\":\"静态托管\",\"t\":[\"如果在国内静态资源库找不到所需的静态包,建议使用 npm i 命令将其下载到本地,然后部署到阿里云/七牛云的国内服务器上,以避免因 UNPKG 和 jsDelivr 等静态节点被屏蔽而导致网页样式显示出错。\",\"静态资源库:\",\"Staticfile CDN:国内维护最稳定的 CDN。\",\"字节 CDN:测速表现不错,缓存过期时间最长设置一年,而自 2022 年 3 月起,静态资源已不再更新。\",\"emoji 等可以使用静态资源库上的项目,比如 twemoji,上面有集成 png 图片。\"]},\"711\":{\"h\":\"NPM 包\",\"t\":[\"UNPKG:有墙风险且不稳定,默认为最新版本,无需 @latest 标签。 \",\"将静态文件发布为 npm 包,参考一分钟教你发布 npm 包。\",\"加速:在 npm 官方源中搜索包位置,然后使用前缀 https://unpkg.com/。\",\"NPM MIRROR:NPM 项目的国内镜像镜像,不能做静态托管用途。https://registry.npmmirror.com/项目名/版本号 可以看见项目的各种信息,但看不了里面的文件。\",\"UNPKG 镜像:有资源可以用服务器自建服务,反向代理 unpkg。 \",\"饿了么 CDN(已关):国内唯一能用的 npm 镜像,2022.07.13 发现外部访问被拒绝。之前饿了么并没说支持对外,可能已经彻底取消了。使用饿了么 CDN 时,注意 https://npm.elemecdn.com/react@latest/ 需要时间更新,具体频率未知,可固定大版本号来获取更新 https://npm.elemecdn.com/react@^18/。\",\"GitHub:基于 GitHub 公共仓库的资源托管,资源不会失效,但有时需要根据 CDN 服务商而更换域名。 \",\"Statically:jsDeliver 的替代品,在中国大陆所有地区连接异常。\",\"jsDelivr(已墙):速度最快,原本是最稳的,但域名暴雷后,经常断开,2022.06.01 彻底打不开。配合 Github action,更新后自动访问 jsdelivr CDN 缓存刷新链接,保持页面常新。刷新命令参考 curl https://purge.jsdelivr.net/gh/username/project/file。\",\"由于第三方托管过于不稳定,目前我使用自托管 oss.gpt-vip.top。\"]},\"712\":{\"h\":\"部署平台\",\"t\":[\"Cloudflare:Pages 和 Workers 两类部署方式。 \",\"Workers:复制镜像网站,可直接访问,但反向代理稳定性成疑。\",\"Pages:部署简单,外网速度很快,但国内速度不稳,而且 page.dev 域名有时会被墙,可购买便宜的临时域名(一年)来解决该问题。\",\"Netlify:国内速度慢点,图片容易卡死,但还算稳定。\",\"Vercel:推荐使用 GitHub 账户登录,需绑定手机号(不支持 Voice),支持国内手机号。2022.08.26,「*.vercel.app」域名被 DNS 污染,需要绑定自定义域名。\",\"AWS: 邮箱注册,不过需要信用卡认证。\",\"国内平台:Gitee、WuliHub、CODING,都需要实名认证。\"]},\"713\":{\"h\":\"IPFS\",\"t\":[\"IPFS 无需服务器就可建立静态网站,号称永不失效,但国内稳定性成疑问,实用性一般。IPFS 托管在一个网关上,并不会自动复制到所有网关。\",\"pinata 上传网站构建的目录文件夹,上传后,即可通过 IPFS Hash 访问。网站目录中必须有 index.html,否则网页中将显示网站目录。即使有 index.html,其他人在拥有 CID 后,可以通过 IPFS Desktop 来获取网站的完整目录。为确保私密性,建议只上传单文件。使用单文件 CID 视为单一网站,不可调用原目录中的文件。[1]\",\"上传 ipfs 到 pinata 之后,cloudflare 等其他网关不一定会完全复制文件,php 无法抓取加载,所以不建议使用 cloudflare 网关。\",\"cloudflare 接管 pinata 后,ipfs 域名需通过「pinata 托管」>「cloudflare DNS」>「cloudflare SSL」。如果中途将 DNS 指向 http://gateway.pinata.cloud 等非 cloudflare ipfs 网关域名,cloudflare SSL 证书将失效。即便把链接改为非加密的 http,pinata 依然会视之为无效链接而拒绝访问。\",\"对于文件较少且链接有效的域名,可按 Cloudflare IPFS 页面说明来设置 DNS,提交 IPFS 域名 30 分钟后,即可获取 SSL 证书。\",\"添加 CNAME 记录,将你的 IPFS 域名 xxx.example.com 指向 cloudflare-ipfs.com。\",\"_dnslink.xxx.example.com 设置为 dnslink=/ipfs/。\"]},\"714\":{\"h\":\"GitHub 同步到 VPS\",\"t\":[\"代码、文章推送到 GitHub 后,会自动生成可访问的网页,但国内访问 GitHub Pages 的速度极不稳定,为了确保网站能被正常访问,必须增加国内的访问节点。\",\"很多人选择 Gitee Pages 作为国内节点,GitHub Actions 将新文档同步到 Gitee,生成位于国内的静态页面 Gitee Pages。但是,Gitee Pages 的限制非常多,免费版无法自定义域名,必须实名验证,更别提近期的下架风波。因此,我没选 Gitee,而是把文档同步到国内服务器(域名需备案)。\",\"文件夹名称请勿使用大写字母,否则在同步时容易产生错误。\"]},\"715\":{\"h\":\"同步到 FTP\",\"t\":[\"如果你有 FTP 服务器,可使用 FTP-Deploy-Action 将 github 代码推送到服务器上。Actions 步骤参考 GitHub 说明。\",\"on: push name: 🚀 Deploy website on push jobs: web-deploy: name: 🎉 Deploy runs-on: ubuntu-latest steps: - name: 🚚 Get latest code uses: actions/checkout@v3 - name: 📂 Sync files uses: SamKirkland/FTP-Deploy-Action@4.3.3 with: server: ${{ secrets.ftp_host }} username: ${{ secrets.ftp_username }} password: ${{ secrets.ftp_password }} port: ${{ secrets.ftp_port }} # 建议更改默认的 21 端口 \",\"新建 FTP 时,需在云服务商的安全组和服务器上开放 FTP 端口,并临时暂停宝塔系统加固等安全插件(新建 FTP 容易与安全插件冲突)。\",\"如果出现 FTPError: 530 Login authentication failed,则说明 FTP 密码错误或账号不存在,需用 FileZilla 测试 FTP 的有效性。确认 FTP 无效后,检查 FTP 密码是否填写正确,是否只有大小写字母和数字。如果密码错误,则在 github secrets 重新 update 密钥。如果密码正确,则进入 /www/server/pure-ftpd/etc/pureftpd.passwd,检查是否有该 FTP 账户。没有 FTP 账户的话,暂停宝塔系统加固等安全插件后,重新新建 FTP。\",\"如果出现 Error: Timeout (control socket),则说明同步服务器超时,可进入 Actions 页面点击右侧按钮「Re-run all jobs」,重新进行部署。如果错误连续出现,可以尝试关闭防火墙,测试是否 GitHub 服务器被拉黑了。\"]},\"716\":{\"h\":\"SSH 同步\",\"t\":[\"如果你有服务器的 SSH 权限,可以使用 web-deploy 以 SSH 同步方式发布页面。但与 FTP 相比,不确定安全性、速度、时间是否会区别。我尝试连接一直报错 Permission denied (publickey,password)。(有可能是服务器需要非 root 用户,adduser 一直加不上。)\",\"on: push name: Publish Website jobs: web-deploy: name: 🚀 Deploy Website Every Commit runs-on: ubuntu-latest steps: - name: 🚚 Get Latest Code uses: actions/checkout@v3 - name: 📂 Sync Files uses: SamKirkland/web-deploy@v1 with: source-path: docs/.vuepress/dist/ target-server: ${{ secrets.host }} remote-user: ${{ secrets.ssh_username }} private-ssh-key: ${{ secrets.SSH_KEY }} destination-path: ${{ secrets.destination_folder }} ssh-port: ${{ secrets.ssh_port }} # 建议更改默认的 22 端口 \",\"如果出现报错 error in libcrypto,说明 SSH 密钥错误,需要登陆服务器终端,运行以下命令。\",\"ssh-keygen -m PEM -t rsa -b 4096 cat id_rsa.pub >> authorized_keys cat id_rsa \"]},\"717\":{\"h\":\"同步到 oss\",\"t\":[\"如果没有服务器,可以把文件部署在云运营商的云存储上。比如用 aliyun-oss-website-action,将 repo 文件 build 成网站文件,然后同步到阿里云 oss 并运行网站。\",\"name: deploy md to oss on: push: branches: [ \\\"main\\\" ] pull_request: branches: [ \\\"main\\\" ] jobs: build: runs-on: ubuntu-latest steps: # load repo to /github/workspace - uses: actions/checkout@v3 - name: Use Node.js uses: actions/setup-node@v3 with: node-version: '14.x' # 打包文档命令 # - run: npm install yarn@1.22.4 -g # - run: yarn install # - run: yarn docs:build #需要配合 yarn 的 package.json - name: aliyun-oss-website-action uses: fangbinwei/aliyun-oss-website-action@v1.3.0 with: accessKeyId: ${{ secrets.ACCESS_KEY_ID }} accessKeySecret: ${{ secrets.ACCESS_KEY_SECRET }} bucket: learndata-notes # use your own endpoint endpoint: oss-cn-shanghai.aliyuncs.com # 全目录上传 folder: . # 不上传的文件 exclude: | .github/ .gitattributes \",\"How to Easily Host a Website on IPFS↩︎\"]},\"718\":{\"h\":\"服务器 VPS\"},\"719\":{\"h\":\"环境部署\",\"t\":[\"部署应用前,为服务器配置好包管理工具,以便节省部署时间。主流的前端包管理工具有 npm、yarn、pnpm、以及国内的镜像 cnpm、tyarn 等,这些包管理器都是基于 nodejs。\"]},\"720\":{\"h\":\"包管理安装\",\"t\":[\"通过集成了 npm 的 Node.js 来安装 npm,然后执行 npm i 命令安装其他。\",\"全局安装 yarn 是 npm i yarn -g,pnpm 是 npm i pnpm -g。如果不想全局安装,则去除 -g。\"]},\"721\":{\"h\":\"包管理源\",\"t\":[\"包管理源的修改命令类似,将下方的 npm 替换 yarn 或 pnpm 即可修改包管理源。\",\"#查看源 npm config get registry #更换国内源 npm config set registry https://registry.npmmirror.com/ #换回默认源 npm config set registry https://registry.npmjs.org/ \"]},\"722\":{\"h\":\"部署包\",\"t\":[\"npm、yarn 和 pnpm 的包安装及管理命令。\",\"#全局安装 npm i 包 -g yarn global add 包 pnpm add 包 -g #移除全局包 pnpm remove 包 --global #更新全局包 pnpm upgrade 包 --global #升级当前目录的依赖以确保你的项目只包含单个版本的相关包 #本方法能解决大部分的部署报错 npm i && npm update yarn && yarn upgrade pnpm i && pnpm up \"]},\"723\":{\"h\":\"本地测试\",\"t\":[\"有些静态文件不支持直接打开,可以用 anywhere 架构本地服务器来进行测试。\",\"# 安装静态服务 anywhere npm install anywhere -g # 进入静态页面存放目录,执行 anywhere anywhere -p 8081 \"]},\"724\":{\"h\":\"服务器 ECS\",\"t\":[\"服务器系统为 Debian 11,配置包管理器 nodejs 和 yarn。[1]\",\"apt-get update # 从数据源更新软件包的列表,运行产生软件包数据库 apt-get install wget && apt-get install sudo # 安装 wget 和 sudo # 大版本升级必须先建立快照 apt-get upgrade # 更新所有软件包(慎用,不要用!)之前 CentOS 系统错误就是使用了 upgrade 命令。 # 新建用户,非 root 权限 adduser xxx # 为新用户设置密码 passwd xxx # 安装 Node.js 18 和 yarn curl -fsSL https://deb.nodesource.com/setup_18.x | bash - apt-get install -y nodejs sudo apt-get install yarn \",\"如果服务器的 Node.js 安装遇到问题,可以用宝塔面板的 Node.js 版本管理器来进行部署。\"]},\"725\":{\"h\":\"网站重定向\",\"t\":[\"更改 nginx 配置后,nginx 重载配置后实现网站重定向。$1 表示第一个 () 内的正则匹配内容,$2 为第二个。[2]\",\"网站重定向\",\"#隐性链接跳转 location /xx1 {proxy_pass } #404 前,将旧文章链接格式转为新的,使用绝对路径 location ^~ /p{ rewrite ^/p/(.*)$ https://gpt-vip.top/posts/$1.html; } # huginn 设置中 location 添加 301 定向,兼容老路径链接 if ( $request_uri = \\\"/users/1/web_requests/21/guoke.xml\\\" ) { rewrite ^ http://xxx.com/users/1/web_requests/19/guoke.xml permanent; } #只匹配主页,将主页跳转为其中一个子页面 location = / { rewrite https://xxx.com/ permanent; } \"]},\"726\":{\"h\":\"全新安装服务器\",\"t\":[\"安装宝塔面板。\",\"删除阿里云主机监控。\",\"service aegis stop #停止服务 chkconfig --del aegis # 删除服务 \",\"配置阿里云端口开放,导入安全规则。\",\"宝塔上修改默认账号密码,并修改登录 22 的默认 SSH 端口。如果开通了 FTP,修改 FTP 端口。\",\"选择「网站」>「添加站点」,将站点根目录放在 /www/wwwroot/xxx,同时新建数据库。\",\"上传全站文件并解压,然后按照安装提示重新安装一次,最后导入备份数据库。\",\"404.html 起效,宝塔网站配置文件中,删除 error_page 404 /404.html; 中的 #。\",\"SSL 证书设置,开启强制 HTTPS;PHP 版本;301 重定向;添加伪静态设置(metinfo 或其他网站后台有代码)。如果 301 设置失败,直接在「伪静态」配置中,放入跳转代码。\",\"服务器设置参考 NginxConfig 适合新手配置高性能、安全、稳定的 NGINX 服务器的最简单方法。\",\"ECS 宝塔设置优化:\",\"添加计划任务,定期释放内存,建议设置每天释放一次,执行时机为半夜,如:04:00。\",\"打开 Linux 工具箱添加 Swap。Swap 推荐与物理内存相同。\",\"安装 PHP 缓存扩展,尽量使用更高的 PHP 版本,另外安装 opcache(脚本缓存)、redis(内容缓存)、imagemagick、fileinfo、exif。\",\"Redis 优化,在/etc/sysctl.conf 中添加 net.core.somaxconn = 2048,然后终端运行 sysctl -p。\",\"防火墙白名单(自定义),如:添加 url 规则 ^/rss.php 到防火墙 URL 白名单,防止 rss 服务被屏蔽。\"]},\"727\":{\"h\":\"服务器迁移\",\"t\":[\"购买按量付费服务器。\",\"用服务器迁移中心 SMC 将旧服务器同步到临时服务器。\",\"将域名解析到临时系统,确定服务基本正常。\",\"对旧服务器先建立云盘快照,然后更换操作系统,进行全新部署。\",\"对比新旧服务器,确认配置正常。\"]},\"728\":{\"h\":\"网站设计\"},\"729\":{\"h\":\"网站字体\",\"t\":[\"网站为了提高访问速度并保持设计的一致性,通常会选默认字体。这导致网站设计难以突出重点。针对这点,我通常会修改网站的导航栏字体,将其从默认字体改为 思源黑体 - 粗。\",\"进入 iconfont‑webfont,输入导航栏内所有文字,并设置所需字体。\",\"点击「生成字体」后,在选中字体的下方,点击「本地下载」。\",\"将字体包上传到服务器,修改新字体的位置参数。\",\"在导航栏的 class 属性中添加 web-font。\"]},\"730\":{\"h\":\"米拓\",\"t\":[\"早期的动态网站通过米拓开发的,记录:\",\"后台忘记密码,使用 Metinfo 米拓重置工具。\",\"metinfo 新版静态页会删除 index.html,后续都改用 index.php。\"]},\"731\":{\"h\":\"常见问题\"},\"732\":{\"h\":\"CPU 100%\",\"t\":[\"当服务器 CPU 或内存突然飙升 100% 时,依次排除当前运行进程,检查是否安装更新了插件、应用或服务。\",\"如果找不到原因,可以临时设置定期任务。每隔 3 小时重启一次 nginx/apache。有时重启不正常,因此重启命令后 10 秒,再启动一次 nginx/apache。\",\"/etc/init.d/nginx restart sleep 10s /etc/init.d/nginx start \"]},\"733\":{\"h\":\"SSL 证书\",\"t\":[\"如果 SSL 证书部署报错,可以按自动生成来部署。\",\"#证书设置修改 /www/server/panel/vhost/nginx if ($server_port !~ 443){ rewrite ^(.*) permanent; } #证书修改 /www/server/panel/vhost/cert/ #证书位置 /www/server/panel/vhost/ssl \",\"如果同一网站部署了多个域名,并且都需要部署 SSL,则需要在 /www/server/panel/vhost/cert 目录下为每个域名创建独立的证书文件夹。同时,在网站的配置文件中创建两个独立的server配置,确保它们之间有换行。请注意,宝塔面板中的网站配置在重启 Nginx 后有时会被重置,所以请务必进行检查和确认配置的正确性。[3]\"]},\"734\":{\"h\":\"CORS 跨域\",\"t\":[\"POST 表单等操作需要涉及第三方 API,需要添加扩域域名,避免 CORS 报错。\",\" add_header Access-Control-Allow-Origin \\\"*\\\"; add_header Access-Control-Allow-Credentials \\\"true\\\"; add_header Access-Control-Allow-Methods \\\"GET, POST, OPTIONS\\\"; add_header Access-Control-Allow-Headers \\\"DNT,web-token,app-token,Authorization,Accept,Origin,Keep-Alive,User-Agent,X-Mx-ReqToken,X-Data-Type,X-Auth-Token,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range\\\"; add_header Access-Control-Expose-Headers \\\"Content-Length,Content-Range\\\"; \"]},\"735\":{\"h\":\"piwik 手动升级\",\"t\":[\"Matomo/Piwik 是免费的统计服务。有时无法使用自动安装包,需要手动升级。\",\"下载最新版应用,并解压到服务器。\",\"将原目录中的 config/config.ini.php 粘贴到新版中,然后就可以更新数据库进行升级了。\",\"选择「设置」>「系统」>「地理位置」,拖到页面底部,按页面要求下载 DBIP 包,并重命名保存为 /www/wwwroot/piwik/misc/DBIP-City.mmdb。\",\"通过包管理器方式安装 Node.js↩︎\",\"Nginx rewrite 设置↩︎\",\"针对宝塔面板一个站点多个域名使用 SSL 证书的解决方案↩︎\"]},\"736\":{\"h\":\"网购攻略\",\"t\":[\"家电先看看闲鱼上是否有代下或代理商渠道,一般会有 5-8 折。\",\"电商平台为了促进购买,有各种购物优惠,但领取优惠环节比较复杂,让人很容易忽略。为了避免这种情况,我把各平台的优惠攻略记录下来,方便查询。\"]},\"737\":{\"h\":\"淘宝\",\"t\":[\"当没有省钱卡和商品优惠券时,使用「一淘 app」下单,拿购物返利。\",\"购物节(618、双 11)的大额券,一定要凑满使用,凑单部分凑好后立即退掉。 \",\"大额券一般有 92 折,可以用于预购,但不能与省钱卡叠加。\",\"购物节日前一天的预购和节日当天,是最优惠时候。 \",\"商家在活动前说的保价,并不包含大额券,不用提前下单。\"]},\"738\":{\"h\":\"拼多多\",\"t\":[\"拼多多的很多商品价格完全不受购物节影响,除了大额消费券外,拼多多通常具有价格优势。\",\"99 以上消费品,记得用拼多多的大额券,拼多多会员分享 3 个好友,即可任意领 99-20 券,大部分产品都适用。\",\"无门槛大额券 - 立减 50,有几率抢到的,同样需要分享,有需要可以试试。\"]},\"739\":{\"h\":\"京东\",\"t\":[\"京东新会员已经没有优惠券了,不过它的以旧换新经常有活动。特别是购物节期间,一般坏的电器也能有 50 的补贴,品类并不需要与新家电完全相同。比如换冰箱,你可以用坏的电饼铛来拿补贴。\"]},\"740\":{\"h\":\"1688\",\"t\":[\"1688 上能找到很多品牌的代工厂,它们未贴牌或自家产品的品质不比大品牌差,但因为剥离了溢价,价格可以便宜不少。不过食品类需注意,代工厂的品质不等于贴牌!贴牌方要求的品质与代工厂的生产的品质不一定一致,原料、品控可能都会更改。[1]\",\"持续消耗类:擦手纸、一次性清洁布、各种清洁液、消毒液、一次性保鲜袋、垃圾网袋等。\",\"日用纺织品:袜子、内裤、秋衣、毛巾、T 恤等。此类产品多为基本款,不追求品质,只要简单舒适即可,剔除品牌溢价。\",\"日化类产品:棉签、发夹、皮筋、肥皂、卸妆纸、洗脸巾等。\",\"医疗防护类消耗品:口罩、一次性手套、防护服等。比如医用外科口罩,原本是 0.5,但阿里巴巴上宇安是 0.08,现在是 0.11-0.12。\",\"食品或食品包装:小零食、保鲜袋、咖啡挂耳包、食品储藏盒等。很多大品牌的零食都不是由品牌自己建厂生产的,而是交给第三方代工。因此,如果能循着线索找到代工厂,就有可能买到物美价廉的产品,参考手把手教你如何找 1688 代工厂天猫店半价买零食(附超全代工厂旗舰店链接)。\",\"数码科技小物:充电宝、TWS 耳机、充电头、充电线等。此类多只有核心功能,须不在意设计、品牌、细节体验。\",\"餐具和文具:餐具的品牌溢价非常高,文具也能获得批发价,即使是知名的进口文具,1688 上也能买到更低价格的正品。\",\"购买技巧:有的时候只需要一件,但是商家两件起发!这种时候选「代发下单」,可能稍贵一点点,但是一件就能发货!\"]},\"741\":{\"h\":\"抢购辅助\",\"t\":[\"Auto.js:免费版不再更新。买了 Pro,但它不支持淘宝等。\",\"八戒任务:按顺序完成多坐标点击,适用秒杀?\",\"冰狐智能辅助:自动构建脚本,需付费,未实际使用,较复杂\",\"喵惠助手:第三方辅助代拍,安全性未知。旧手机上抢购。用旧手机一直挂着。\",\"抢购助手脚本:网页 js 脚本,需搭配浏览器扩展 Tampermonkey。\"]},\"742\":{\"h\":\"BP 模式\",\"t\":[\"BP 即 ByPass,是一键下单的链接,可以跳过商品页缓存、选择尺码规格、结算这一系列繁琐的步骤,直接进入订单确认页,最大限度减少操作和页面跳转带来的延时,为大家抢购带来最快的下单体验。\",\"手机端操作,可以把 BP 链接提前给淘宝/京东里面的好友或客服,到了点再进入下单。\",\"BP 链接均为移动链接,电脑上使用需要提前登录网页。BP 下单时,可以先不付款,先提交锁定订单,然后再支付选择分期方式。\",\"以京东 BP 链接为例:https://p.m.jd.com/norder/order.action?wareId=100033551654&wareNum=1&enterOrder=true,wareId=100012043978 中 100012043978 是商品 ITEM ID,Num=1 中 1 是购买数量。\"]},\"743\":{\"h\":\"购物思考\",\"t\":[\"优惠券、抢购除了是让你下单,也是为了让你成为平台的忠实用户。正如劳力辩证:当你对某事或某人投入了精力和劳力,你也会对他们有更高的评价。而抢购成功,会让人有种不可自拔的快感。\",\"1688「扫货」指南↩︎\"]},\"744\":{\"h\":\"健康饮食\",\"t\":[\"16:8 断时法:每天 8 小时进食,8 点钟早餐,3 点后禁食。\",\"早餐:燕麦牛奶 + 坚果、桃李面包 + 鲜牛奶。每天 3 个坚果(纸核桃)。\",\"午餐:沙拉 + 鸡蛋 + 白肉(鸡、鸭、鱼)。\",\"晚餐:6 点停止进食,饿了吃苹果、沙拉、鸡蛋,鸡蛋只吃蛋白。\"]},\"745\":{\"h\":\"饮食\"},\"746\":{\"h\":\"零食\",\"t\":[\"炸 (烘烤):烘烤预热-200 度,20 分钟,芝士鸡排 (胖)> 泰森上校鸡块> 鸡米花,炸鸡排、牛肉馅饼外面有面粉,不适合烘烤。\",\"安井肉丸:撒尿牛肉丸> 包心鱼丸> 仿墨鱼丸?>牛肉丸> 蟹味宝 + 鱼籽包。安井肉丸质量都不错,不过别买量贩装,这是不同种类。\"]},\"747\":{\"h\":\"饮料\",\"t\":[\"现磨咖啡味道不错,每天用量需控制在 2 杯黑咖啡或 4 杯奶咖,相关数据参考适量喝咖啡对身体有哪些好处?。有时喝的频繁就比较折腾,考虑入手白咖啡,不过据传白咖啡糖分高,而且含反式脂肪酸。\",\"马来西亚的土特产,约有 100 多年的历史。白咖啡并不是指咖啡的颜色是白色的,而是采用特等 Liberia(利比里亚)、Arabica(阿拉比卡)和 Robusta(罗布斯塔)咖啡豆及特级的脱脂奶精原料,经中轻度低温烘焙及特殊工艺加工后大量去除咖啡碱,去除高温碳烤所产生的焦苦与酸涩味,将咖啡的苦酸味、咖啡因含量降到最低,甘醇芳香不伤肠胃,保留咖啡原有的色泽和香味,口感爽滑、纯正,颜色比普通奶咖更清淡柔和,呈现出淡淡的奶金黄色。\",\"夏天喝适合冷泡的绿茶、红茶、白茶、花茶等,而岩茶与普洱生茶冷泡就不容易好喝。[1] 蛮喜欢泰厨的花茶,有新鲜的香茅,但淘宝卖的花茶放了很多糖块。\"]},\"748\":{\"h\":\"冷泡燕麦\",\"t\":[\"牛奶/酸奶/燕麦奶/椰奶 + 燕麦,前一天晚上配好,放在密封容器里,冰箱冷藏。第二天拿出来再加配料(奇亚籽、坚果、果干、椰子片、即食燕麦、水果、酸奶块)即可食用。需要注意的有几个点:\",\"主材一定要用生燕麦或烤燕麦,不要用即食的,即食的泡一夜就变成糊了,既不好吃也不健康,升糖很高。\",\"配料之所以在吃前再添加是为了避免口感拉胯,所以不会带来脆的口感的配料也可以冷藏前添加,即食燕麦片、椰子片、坚果、酸奶块这些可以丰富口感的建议在吃前添加。\",\"配料有两个作用,除了提升口感层次还有丰富营养的作用,但建议酌情添加,特别是有减脂需求的人士,毕竟大部分配料都是热量炸弹。而且不加配料其实已经很好吃了,个人较为推荐的配料是一袋每日坚果或一小把燕麦脆片(如卡乐比)。\",\"容器可以选用梅森杯、玻璃饭盒,若对配料有要求而且想路上吃可以选择乐扣双层多用保鲜盒。\",\"放冰箱这一步很重要!不放可能会化身喷射战士。\",\"唯一的缺点就是冷吃可能不是所有人都适合,也可以早上再用微波炉打一下,对口感和营养肯定会有影响。\"]},\"749\":{\"h\":\"健康理论\"},\"750\":{\"h\":\"程序员延寿指南\",\"t\":[\"程序员延寿指南:\",\"输入 \",\"固体:吃白肉(-11%~-3% ACM)、蔬果为主(-26%~-17% ACM),多吃辣(-23% ACM),多吃坚果(-27%~-4% ACM),少吃蛋黄(否则 +7% ACM/0.5 颗/天),中量碳水、多吃植物蛋白(-10% ACM),少吃超加工食物(-62%~-18%)\",\"液体:喝咖啡(-22%~-12% ACM),喝牛奶(-17%~-10% ACM),喝茶(-15%~-8% ACM),少喝或不喝甜味饮料(否则每天一杯 +7% ACM,+多巴胺),戒酒或每周 100g(纯酒精量 (g)=饮酒量 (ml)× 酒精浓度 (%)× 酒精密度 0.8g/ml)内(否则+~50% ACM,无上限)\",\"气体:不吸烟(否则+~50% ACM,-12~-11 年寿命)\",\"光照:晒太阳(-~40% ACM)\",\"药物:二甲双胍(糖尿病人相比正常人可以 +3 年)、复合维生素(-8% 癌症风险)、亚精胺(-60%~-30% ACM)、葡萄糖胺(-39% ACM)\",\"输出 \",\"运动:每周 3 次 45 分钟挥拍运动(-47% ACM)\",\"日常:刷牙(-25% ACM)\",\"睡眠:每天睡 7 小时全因死亡率最低;且 22-24 点间最好,早睡 +43% ACM,晚睡 +15% ACM(存在争议)\",\"上下文 \",\"体重:减肥(-54% ACM)\"]},\"751\":{\"h\":\"其他\",\"t\":[\"在发表在《细胞》杂志的综述文章中描述了长寿饮食,这是一种基于从食物成分和卡路里摄入等饮食各个方面研究的多支柱方法。研究人员报告说,理想情况下,一天的饭菜都在 11—12 小时的窗口内进行,允许每天禁食,每 3—4 个月进行为期 5 天的禁食也可能有助于降低胰岛素抵抗、血压和其他疾病风险因素。朗格描述了长寿饮食在现实生活中的样子:大量的豆类、全谷物和蔬菜;一些鱼;没有红肉或加工肉和极少量的白肉;低糖和精制谷物;一定量的坚果和橄榄油;一些黑巧克力。\"]},\"752\":{\"h\":\"泡澡\",\"t\":[\"浸泡 42℃ 以上的水温最多泡 3-5 分钟,40℃ 可以泡 10 分钟,37℃ 到 39℃ 的温水,可以泡 20-30 分钟。泡浴后的清水冲淋是有必要的,头发部位和面部用冷水冲淋则有极其良好的保健和延缓衰老的功效。\",\"泡浴作用:\",\"低温、长时间的泡浴 - 失眠、压力带来的疲劳。\",\"上班前或者重大活动前高温或者低温并且短时间的泡浴 - 打起精神。\",\"0-21°,收敛组织器官和神经系统--冷水浴。\",\"32-40°,舒缓、愉快 - 温水浴。\",\"32-42°,止痛、镇静,浴后无力需要休息 - 热水浴。\",\"全身浴:覆盖肩膀为主,温水 - 提高新陈代谢。\",\"半身浴:肚脐平齐,不增加心脏负担,30-40 分钟,慢慢发汗,上半身披毛巾或间断性加水 - 改善心脏功能,改善冷性体质,特别适合老年人。注意:39°,肚脐,30 分钟以上。\",\"坐浴:20 厘米高度的水平线,浸入腰椎、尾椎、臀部,15 分钟 - 痔疮、便秘、尿路感染、生殖系统护理。\",\"另外,饮酒后最好不要立即去洗澡,这很容易引发心血管病。洗澡时出现头晕、胸闷、眼花等“澡堂综合征”,也需立即停浴,到医院就诊。\"]},\"753\":{\"h\":\"减肥食谱\",\"t\":[\"使用食谱前,先需要养成正确的减重习惯和心态。\",\"不要让自己饿肚子,每天至少要吃 3 顿正餐。\",\"吃点心或正餐之前和之后都要喝一杯水,进食顺序按蔬菜> 鱼肉蛋> 主食\",\"饭后半小时不要坐下\",\"临睡前至少 1 小时停止用餐,并且要多喝水。\",\"每咬一口食物,都要咀嚼一段时间。从身体真正饱足到大脑产生饱足感需要 15 分钟。吃慢一点,就不容易吃得过多。\",\"每天称体重,然后找出 7 天的平均值。确保体重持续下降就好,不需要规定自己每周必须减掉多少体重。有时候体重可能会增加,尤其是女性在月经期间体内水分潴留,容易水肿,和你的饮食或锻炼习惯没有关系。\",\"每周只减掉 0.5-1 公斤。快速减肥会减掉肌肉,而不是脂肪,而且也很难长期维持体重。\",\"早餐\",\"午餐\",\"晚餐\",\"Day01\",\"谷物牛奶 (燕麦片 40g+ 全脂奶粉 40g+ 蛋白粉 5g+ 黑咖啡 2g);12 粒巴旦木;苹果 200g\",\"什锦饭 (大米 30g+ 小米 30g+ 甜豌豆 15g+ 松子仁 5g+ 酱牛肉碎 30g+ 胡萝卜丁 30g);蔬菜沙拉 (生菜 100g+ 熟鸡蛋 + 油醋汁半汤匙 4g);猕猴桃 120g;无糖酸奶 100g\",\"燕麦米饭 (燕麦粒 20g+ 大米 15g);油煮蘑菇鸡肉菠菜 (菠菜 200g+ 蘑菇 50g+ 鸡腿 40g+ 香油 1 汤匙 8g);豆浆 (黄豆 50g)\",\"Day02\",\"全麦三明治 (生菜 70g+ 鸡蛋 + 全麦吐司 60g+ 香油 2g);12 粒原味开心果;牛奶 250g\",\"双色菜花 (西兰花 100g+ 菜花 100g+ 香油 5g);茄汁虾仁 (虾仁 75g+ 番茄酱 30g+ 油 8g);二米饭 (小米 30g+ 糙米 30g);牛奶咖啡 (低脂奶粉 20g+ 黑咖啡 2g)(先吃一半菜花)\",\"木耳小白菜杂煮 (小白菜 150g+ 北豆腐 60g+ 鸡心 60g+ 黑木耳 6g+ 香油 3g);红豆紫米薏米粥 (紫红糯米 30g+ 薏米 15g+ 赤小豆 30g);蜜橘 100g(加餐)\",\"Day03\",\"红豆紫米薏米粥 (紫红糯米 30g+ 薏米 15g+ 赤小豆 30g);水煮蛋;果仁菠菜 (菠菜 80g+ 花生仁 10g+ 香油 3g);牛奶咖啡 (低脂奶粉 20g+ 黑咖啡 2g)\",\"土豆沙拉 (土豆 200g+ 甜豌豆 30g+ 白芝麻 3g+ 鸡蛋 + 千岛酱 1 汤匙 8g);酱卤鸭肝 60g;无糖酸奶 100g;10 粒小番茄\",\"燕麦小米粥 (燕麦片 30g+ 小米 30g+ 小麦胚芽 10g);蒸虾皮小油菜 (小油菜 180g+ 虾皮 5g+ 全麦粉 30g+ 花椒油 3g);烤鸡腿 80g\",\"Day04\",\"奶香醪糟燕麦 (醪糟 100g+ 燕麦片 30g+ 全脂奶粉 40g);鸡蛋;12 粒巴旦木\",\"紫菜蛋花汤 (海苔 4g+ 熟芝麻 1g+ 鸡蛋);牛奶燕麦 (燕麦片 20g+ 全脂牛奶 250g);酸奶 100g;小叶橘 150g;全麦吐司 30g\",\"火腿木耳煮油菜 (油菜 250g+ 木耳 10g+ 方火腿 60g+ 香油 1 汤匙 8g);蒸红薯 180g;无糖酸奶 (酸奶 100g+ 蛋白粉 5g)(先吃油菜)\",\"Day05\",\"蒸食物套餐 (铁棍山药 80g+ 糯玉米带轴 150g+ 胡萝卜半根 100g);奶香黄豆浆 (黄豆 20g+ 黑芝麻 5g+ 全脂奶粉 20g);鸡蛋羹 (鸡蛋 + 香油 2g);桂圆 150g\",\"冲杂粮糊 (烤红豆粉 15g+ 燕麦粉 20g+ 小米粉 15g+ 全脂奶粉 10g);生菜沙拉 (生菜 150g+ 千岛酱 10g);酸奶 200g;蓝莓 100g;葡萄干 10g\",\"坚果土豆泥 (土豆 250g+ 烤花生碎 12g+ 方火腿 70g);油煮木耳小白菜 (小白菜 200g+ 木耳 6g+ 香油 4g);酸奶 100g\",\"Day06\",\"香蕉燕麦蛋糕 (香蕉 120g+ 燕麦片 30g+ 鸡蛋 + 牛奶 200g);核桃仁拌豌豆苗 (豌豆苗/鸡毛菜 100g+ 核桃仁 15g+ 芝麻油 4g)\",\"鸡腿炖四宝 (鸡腿肉 100g+ 鲜蘑 80g+ 黄花菜 10g+ 甜豌豆 80g+ 木耳 10g);银耳西兰花 (西兰花 200g+ 银耳 8g+ 香油 4g)\",\"炖素三鲜 (冬笋 80g+ 香菇 10g+ 黄豆芽 120g+ 香油半汤匙 4g);清蒸鱼 (蒸鲈鱼 120g+ 花生油 4g);烤红薯 250g(按序食用)\",\"Day07\",\"苹果全麦煎饼 (苹果肉 180g+ 全麦粉 20g+ 葡萄干 3g+ 全脂奶粉 10g+ 油 3g);麦胚红枣豆浆 (烤黄豆 15g+ 烤黑芝麻 8g+ 大枣肉 10g+ 熟小麦胚芽 10g)\",\"生菜鸡蛋沙拉 (生菜 200g+ 鸡蛋*2+ 千岛沙拉酱 8g);麦胚红枣豆浆 (烤黄豆 15g+ 烤黑芝麻 8g+ 大枣肉 10g+ 熟小麦胚芽 10g);酸奶 150g;猕猴桃 120g\",\"甘薯红米饭 (红薯 100g+ 红米 20g+ 白米 20g);牛肉炖菜 (牛肉 100g+ 香菇 8g+ 胡萝卜 40g+ 魔芋粉丝 20g);果仁菠菜 (菠菜 200g+ 花生仁 8g+ 香油 4g)\",\"Day08\",\"全麦面包 70g;牛奶 240g;水煮鸡蛋;桂圆 120g;9 粒巴旦木\",\"油煮木耳小白菜鸡 (小白菜 25g+ 卤水豆腐 100g+ 鸡心 50g+ 黑木耳 2g+ 香油 3g);炖素三鲜 (冬笋 40g+ 香菇 4g+ 黄豆芽 20g+ 香油 2g);蒸红薯 200g;去皮小叶橘 200g\",\"杂粮糊 (烤红豆粉 13g+ 燕麦粉 13g+ 小米粉 13g+ 脱脂奶粉 4g);火腿木耳煮油菜 (油菜 100g+ 木耳 5g+ 方火腿 75g+ 香油 5g);无糖酸奶 130g\",\"Day09\",\"香蕉燕麦蛋糕 (香蕉 120g+ 燕麦片 50g+ 鸡蛋 + 牛奶 240g);15 粒开心果\",\"燕麦小米浓粥 (燕麦片 25g+ 小米 13g+ 小麦胚芽 13g);生菜沙拉 (生菜 200g+ 千岛酱 4g);清蒸鱼 (蒸鲈鱼 80g+ 花生油 4g);豆浆 (黄豆 44g)\",\"二米饭 (小米 38g+ 糙米 15g);蒸虾皮小油菜 (小油菜 200g+ 虾皮 6g+ 全麦粉 10g);茄汁虾仁 (虾仁 80g+ 番茄酱 10g+ 花生油 4g);烤鸡腿肉 45g\",\"Day10\",\"苹果全麦煎饼 (苹果肉 105g+ 全麦粉 50g+ 葡萄干 3g+ 全脂奶粉 30g+ 油 3g);鸡蛋羹 (鸡蛋 + 香油 2g)\",\"蒸土豆 (土豆 200g+ 方火腿 75g+ 花生碎 2g);茄汁虾仁 (虾仁 80g+ 番茄酱 10g+ 花生油 3g);猕猴桃 150g\",\"甘薯红米饭 (红薯 50g+ 红米 25g+ 白米 25g);油煮木耳小白菜鸡 (小白菜 100g+ 卤水豆腐 50g+ 鸡心 50g+ 木耳 4g);豆浆 (黄豆 30g)\",\"Day11\",\"谷物牛奶 (燕麦片 50g+ 全脂奶粉 30g+ 黑咖啡 2g);鸡蛋;10 粒巴旦木;蜜橘 120g\",\"什锦饭 (大米 50g+ 小米 25g+ 甜豌豆 8g+ 松子仁 2g+ 酱牛肉碎 70g+ 胡萝卜丁 20g);银耳西兰花 (西兰花 50g+ 银耳 4g+ 香油 4g)\",\"燕麦米饭 (燕麦粒 25g+ 大米 38g);牛肉炖菜 (牛肉 50g+ 香菇 7g+ 胡萝卜 20g+ 魔芋粉丝 20g);烤鸡腿肉 50g\",\"Day12\",\"奶香醪糟燕麦 (醪糟 69g+ 燕麦片 38g+ 全脂奶粉 30g);果仁菠菜 (菠菜 150g+ 花生仁 3g+ 香油 3g);鸡蛋羹\",\"土豆鸡蛋豌豆沙拉 (土豆 300g+ 甜豌豆 16g+ 白芝麻 3g+ 鸡蛋 + 千岛酱 4g);牛肉炖菜 (牛肉 50g+ 香菇 4g+ 胡萝卜 20g+ 魔芋粉丝 20g+ 香油 2g)\",\"蒸食物套餐 (铁棍山药 100g+ 糯玉米带轴 300g+ 胡萝卜 20g);油煮蘑菇鸡肉菠菜 (菠菜 50g+ 蘑菇 35g+ 鸡腿 50g+ 香油 5g);无糖酸奶 120g\",\"Day13\",\"红豆紫米薏米粥 (紫红糯米 25g+ 薏米 25g+ 红小豆 13g);蔬菜沙拉 (生菜 200g+ 熟鸡蛋 + 油醋汁 5g);牛奶咖啡 (牛奶 240g+ 咖啡 2g)\",\"核桃仁拌豌豆苗 (豌豆苗/鸡毛菜 100g+ 核桃仁 8g+ 香油 3g);烤红薯 200g;酱牛肉 70g;猕猴桃 150g\",\"麦胚红枣豆浆 (烤黄豆 30g+ 烤黑芝麻 16g+ 大枣肉 20g+ 熟小麦胚芽 20g);清蒸鱼 (蒸鲈鱼 80g+ 花生油 2g);果仁菠菜 (菠菜 150g+ 花生仁 2g+ 香油 1g)\",\"Day14\",\"鸡蛋生菜三明治 (生菜 150g+ 鸡蛋 + 全麦吐司 88g+ 香油 5g);牛奶 240g\",\"鸡腿炖四宝 (鸡腿肉 50g+ 鲜蘑 35g+ 黄花菜 4g+ 甜豌豆 8g+ 木耳 4g);燕麦米饭 (燕麦粒 25g+ 大米 25g);葡萄干 25g\",\"双色菜花 (西兰花 50g+ 菜花 40g+ 油醋汁 2g);茄汁虾仁 (虾仁 80g+ 番茄 10g+ 油 2g);二米饭 (小米 38g+ 糙米 25g);紫菜蛋花汤 (海苔 2g+ 鸡蛋*1)\",\"Day15\",\"红豆紫米薏米粥 (紫红糯米 25g+ 薏米 25g+ 赤小豆 13g);核桃仁拌豌豆苗 (豌豆苗/鸡毛菜 75g+ 核桃仁 3g+ 香油 2g);鸡蛋羹 (鸡蛋*1+ 香油 1g);无糖酸奶 240g\",\"油煮木耳小白菜鸡 (小白菜 100g+ 卤水豆腐 100g+ 鸡心 50g+ 木耳 4g+ 油 5g);二米饭 (小米 50g+ 糙米 25g)\",\"甘薯红米饭 (红薯 50g+ 红米 25g+ 大米 25g);牛肉炖菜 (牛肉 50g+ 香菇 4g+ 胡萝卜 20g+ 魔芋粉丝 20g+ 油 5g);烤鸡腿肉 50g\",\"Day16\",\"奶香醪糟燕麦 (醪糟 35g+ 燕麦片 38g+ 全脂奶粉 30g);鸡蛋;蜜橘 120g\",\"蔬菜沙拉 (生菜 200g+ 鸡蛋 + 油醋汁 5g);清蒸鱼 (蒸鲈鱼 80g+ 花生油 5g);蒸土豆 300g\",\"油煮鸡肉蘑菇菠菜 (菠菜菜 100g+ 蘑菇 35g+ 鸡腿肉 75g+ 香油 5g);蒸红薯 250g;豆浆 (黄豆 50g)\",\"Day17\",\"香蕉燕麦蛋糕 (香蕉 80g+ 燕麦片 50g+ 鸡蛋 + 牛奶 240g)\",\"粉蒸土豆鸡肉 (土豆 200g+ 鸡腿肉 50g+ 蒸肉米粉 5g+ 烤花生碎 3g);双色菜花 (西兰花 50g+ 菜花 80g+ 油醋汁 3g);酱牛肉 150g;猕猴桃 35g\",\"麦胚红枣豆浆 (烤黄豆 30g+ 烤黑芝麻 16g+ 大枣肉 20g+ 熟小麦胚芽 20g);火腿木耳煮油菜 (油菜 100g+ 木耳 4g+ 方火腿 75g+ 香油 4g)\",\"Day18\",\"鸡蛋生菜三明治 (生菜 150g+ 鸡蛋 + 全麦吐司 88g+ 香油 3g);奶香黄豆浆 (黄豆 13g+ 黑芝麻 3g+ 全脂奶粉 20g)\",\"杂粮糊 (烤红豆粉 13g+ 燕麦粉 13g+ 小米粉 13g+ 脱脂奶粉 2g);油煮木耳小白菜鸡 (小白菜 150g+ 卤水豆腐 40g+ 鸡心 75g+ 木耳 4g+ 香油 5g);苹果 150g\",\"蒸食物套餐 (铁棍山药 60g+ 糯玉米带轴 200g+ 胡萝卜 100g);鸡腿炖四宝 (鸡腿肉 50g+ 鲜蘑 17g+ 黄花菜 2g+ 甜豌豆 4g+ 黄豆芽 10g);生菜沙拉 (生菜 50g+ 千岛酱 4g);无糖酸奶 130g\",\"Day19\",\"苹果全麦煎饼 (苹果肉 60g+ 全麦粉 50g+ 葡萄干 3g+ 全脂奶粉 20g+ 油 5g);牛奶 240g\",\"土豆鸡蛋豌豆沙拉 (土豆 300g+ 甜豌豆 32g+ 白芝麻 2g+ 鸡蛋 + 千岛酱 4g);茄汁虾仁 (虾仁 80g+ 番茄酱 2g+ 油 10g)\",\"燕麦小米浓粥 (燕麦片 13g+ 小米 38g+ 小麦胚芽 13g);火腿木耳煮油菜 (油菜 100g+ 木耳 4g+ 方火腿 75g);无糖酸奶 130g\",\"Day20\",\"蒸食物套餐 (铁棍山药 60g+ 糯玉米带轴 200g+ 胡萝卜 100g);紫菜蛋花汤 (海苔 2g+ 鸡蛋*1);果仁菠菜 (菠菜 100g+ 花生仁 3g+ 香油 3g)\",\"炖素三鲜 (冬笋 40g+ 香菇 17g+ 黄豆芽 20g+ 香油 3g);牛肉炖菜 (牛肉 50g+ 香菇 4g+ 胡萝卜 10g+ 魔芋粉丝 20g);燕麦米饭 (燕麦粒 25g+ 大米 50g);烤鸡腿肉 50g\",\"什锦饭 (大米 38g+ 小米 25g+ 甜豌豆 8g+ 松子仁 3g+ 酱牛肉碎 70g+ 胡萝卜丁 20g);银耳西兰花 (西兰花 25g+ 银耳 4g+ 香油 2g)\",\"Day21\",\"谷物牛奶 (燕麦片 50g+ 全脂奶粉 30g+ 黑咖啡 2g);鸡蛋;桂圆 120g\",\"油煮鸡肉蘑菇菠菜 (菠菜菜 100g+ 蘑菇 70g+ 鸡腿肉 50g+ 香油 5g);烤红薯 200g;猕猴桃 150g;无糖酸奶 130g\",\"粉蒸土豆鸡肉 (土豆 100g+ 鸡腿肉 50g+ 蒸肉米粉 5g+ 烤花生碎 2g);茄汁虾仁 (虾仁 80g+ 番茄酱 10g+ 油 1g);二米饭 (小米 25g+ 糙米 13g);核桃仁拌豌豆苗 (豌豆苗/鸡毛菜 75g+ 核桃仁 5g+ 香油 2g)\",\"以上食谱整理自范志红老师的《吃出好身材-21 天营养食谱》,侵权删。\",\"食谱注意:\",\"晚餐时补充复合 B 族维生素药片,乳糖敏感者可以将纯牛奶换成低乳糖奶。\",\"蒸蛋羹可以用水煮蛋替代;鸡心、鸭肝、方火腿可以用鸡腿肉、酱牛肉替换;什锦饭中的酱牛肉碎换成炒鸡丁;松子仁可以换成熟芝麻或开心果碎;小叶橘可以替换成等量其他甜度低的新鲜水果,如草莓或半个苹果等;桂圆可以换成其他自己爱吃、吃了之后胃肠舒服的应季水果,比如橘子、橙子、猕猴桃等。水果可以午饭前一小时食用。\",\"小米、燕麦提前浸泡半小时到一小时再和大米一起煮口感较好。如果没有杂粮粉,可以直接用这些杂粮煮成饭,每次煮多一点,分成几份冷冻起来,每次蒸热吃一份。\",\"食谱部分可进行微调,如果不会做,可直接按原料食用。\",\"冷泡茶和热茶放凉,好喝级别能一样吗?↩︎\"]},\"754\":{\"h\":\"智能家居\",\"t\":[\"智能家居是家庭自动化最基础的一部分。之前一直偷懒直接用米家,但当我想把传感器与电脑联接起时,就开始了研究 Home Assistant 和 Node-RED。\"]},\"755\":{\"h\":\"Home Assistant\",\"t\":[\"Home Assistant 是开源的家庭自动化平台,可自定义集中管理各品牌的智能家居设备。\",\"Home Assistant 原生支持的米家设备较少,需要使用 hacs 下的集成 Xiaomi Miot Auto。默认 Docker 容器不带 hacs,需要手动部署。\",\"下载 hacs,将其解压到 Home Assistant 配置的 config\\\\custom_components\\\\hacs 文件夹下。\",\"重启 Home Assistant 容器后,在集成中搜索 hacs,安装时按要求提供 github 账户授权。\",\"选择「HACS」>「集成」>「浏览并下载存储库」,下载 Xiaomi Miot Auto 并重启 Home Assistant 容器。[1]\",\"Home Assistant 虽然一直被吹得很厉害,但即时性的传感器可能不能及时触发,使用时需要注意这点。\",\"对于人体传感器、门磁、无线开关类设备,它们的状态通常为瞬时状态 (即:事件),部分型号支持获取最后一次事件触发的时间,且默认轮询时长为 15 秒,对于无法获取最后触发事件的设备,即使修改轮询时间到 1 秒,也可能无法获取正确的状态。因此此类设备通过本插件集成后不太推荐用于触发实时自动化,仅适合作为如几分钟无人移动关灯这类自动化的条件。如果需要实时更新状态,推荐使用多模网关配合 XiaomiGateway3 集成。[2]\"]},\"756\":{\"h\":\"Node-RED\",\"t\":[\"Node-RED 是本地版的 IFTTT,能与 Home Assistant 打通,实现本地化的互联。新手推荐 node-red 的入门教程集合。\",\"部署 Node-RED 时,Node-RED 对存储文件夹的读写权限要求较高,Docker 部署的话需修改 data 的文件夹权限,为避免麻烦,我给了最高权限 chmod 777 /volume1/docker/nodered/data。\",\"Node-RED 上安装 node-red-contrib-home-assistant-websocket。 \",\"选择「设置」>「节点管理」>「控制板」>「安装」,点击右侧刷新按钮,加载节点目录,第一次加载要比较长时间,不用关闭网页。\",\"搜索并安装「node-red-contrib-home-assistant-websocket」。\",\"选择「Home Assistant」>「HACS」>「集成」>「浏览并下载存储库」,下载 Node-RED Companion。\",\"选择「Home Assistant」>「配置」>「设备与服务」>「集成」,添加集成 Node-RED Companion,然后重启 Home Assistant 容器。\",\"进入 nodered 页面,配置 home assistant websocket,点击右上角的部署。[3]\"]},\"757\":{\"h\":\"常用节点\",\"t\":[\"inject: 定时启动,周期性触发执行。\",\"call service:改变智能设备状态,比如开灯。 \",\"Domain:触发方式\",\"Service:触发命令\",\"Device:设备与服务\",\"Entity:设备执行模块\"]},\"758\":{\"h\":\"自动化场景\",\"t\":[\"记录主卧关灯时间,默认其为睡眠时间,但实际关掉是关电源,不会在智能后端记录。或者用明暗度测试记录,每天最后暗的时候,记录为睡眠时间。\",\"书房检测到没人时,对电脑发送暂停视频的快捷键。这步卡在硬件,需要有个硬件能被 Node-RED 识别并给电脑发送按键。\"]},\"759\":{\"h\":\"智能硬件\"},\"760\":{\"h\":\"Zigbee2MQTT\",\"t\":[\"Zigbee2MQTT 是开源的智能网关,支持大部分的智能设备。其辐射范围更大,能同时联接 200 个设备,它的插网线版更稳定不易掉线。\",\"不过,我的设备都是米家系,暂时用不到开源网关,等买了其他品牌的设备,再考虑 Zigbee2MQTT。\"]},\"761\":{\"h\":\"智趣盒子\",\"t\":[\"智趣盒子集成了 Home Assistant 和 Node-RED 的 Docker,Home Assistant 能部署 Addons、supervisor,能直接插开源网关。\",\"盒子基于 arm 的 linux 的 debian 系统上运行 docker,在 docker 的基础上构建了 supervisor 版本,跟 homeassistant 开发官方的 hassos 的最大差异就是打开了 root 的权限,可以在底层进行操作。这些比较适合国内的使用环境(网络改善,装第三方工具等).\",\"不过与 NAS 相比,智趣这类硬件盒子同样是 Docker 容器,除了能直连网关和想象中的简便攻略,并没什么其他优势。\"]},\"762\":{\"h\":\"其他硬件\",\"t\":[\"远程键盘控制器:基于易微联的第三方产品,手机通过 APP 远程控制电脑按键,不过只能按一个按键或者连续 6 个的自定义键值。不确定是否支持 HA。\",\"MQTT 转 usb 虚拟键盘鼠标注入器:通过 wifi 来控制,店家不清楚 HA。\",\"从零开始,基于群晖轻松玩转开源 homeassistant 智能家居前期搭建↩︎\",\"为什么设备状态会有延迟?如何减小延迟?↩︎\",\"树莓派 HomeAssistant 系列(四)NodeRed 安装配置↩︎\"]},\"763\":{\"h\":\"生活窍门\"},\"764\":{\"h\":\"个人护理\"},\"765\":{\"h\":\"理发\",\"t\":[\"电推子理发:先用 1.5 号限位器铲平两边和后面,然后用 9 号限位器从后向前修整头发(包括刘海),最后用 6 号限位器修理过渡区域。\",\"不要从前向后理发,否则限位器不起作用,头发都被推平。\",\"短发方案:限位器分别使用 1.5、6 和 4.5。\"]},\"766\":{\"h\":\"衣物\",\"t\":[\"色彩:全身上下衣服的颜色不要超过 3 种,喜欢色彩饱和度偏低的颜色。单纯的黑白灰容易显得单调、路人。​\",\"图案:单一主题,小图案不要太大、条纹对齐不繁杂。横条纹显高显瘦,竖条纹相反。​[1]\",\"T 恤:250g 32 支的纯棉面料,支数越高,面料就越柔软、越强韧 ​。\",\"5 分裤:不要七分裤或太宽松,裤长放在膝盖上方 5-10 厘米处。\"]},\"767\":{\"h\":\"妙用\"},\"768\":{\"h\":\"磁铁\",\"t\":[\"铷磁铁或强磁铁在生活中有许多用途,如:整理线材,吸附窗帘,悬挂物品,密封。\",\"磁铁使用方便,不留痕迹,比小夹子有用。\"]},\"769\":{\"h\":\"小众记录\"},\"770\":{\"h\":\"去客厅化\",\"t\":[\"宝宝出生后,扔掉了家里的欧式沙发和茶几,转而采用模块沙发。模块沙发的好处是可以灵活使用,需要时可以拆分来变成床。我买了三组,每组有两个沙发垫,可以让三个人舒适地睡觉。不过,模块沙发的价格差异很大,很难区分哪个更优。\"]},\"771\":{\"h\":\"玻璃自爆\",\"t\":[\"2022.06.11 更换阳台 90*90 的弧形玻璃,要价 1100。\",\"阳台玻璃自爆后,即使玻璃没碎也要及早拆下来,否则有可能发生事故。拆旧玻璃前,需要清理下方停放的车辆,并暂时不让行人通行。拆好后,如果掉落碎玻璃较多,可以拿包烟让环卫工人帮忙清理。\",\"新玻璃未到之前,可以拿大的硬纸板挡住缺口,不要用薄膜遮掩,会被吸走。\"]},\"772\":{\"h\":\"花洒水小\",\"t\":[\"手持花洒尾部与软管的连接处,有节水止逆阀。\",\"如果家里水压不足时,拆下节水止逆阀后安装花洒,可以解决花洒出水不足问题。\"]},\"773\":{\"h\":\"网线更换\",\"t\":[\"客厅网络连接不稳定,加上原本装修的网线不好,想着把埋在墙里的网线都更换掉,就搜索「墙内网线更换」找到本地的服务商询价,准备把埋在墙里的网线都升到 7 类,但对方说超六和七类的网线都比较粗,很难拉进管道,可能会拉到一半给卡住。6 类线据传可以稳定支持 2.5Gbps/5Gbps 网络;在特定布线环境下,最大可支持 10Gbps 传输速率。\",\"师傅上门发现:除了客厅的 3 条网线是 6 类,其他房间都是超 5 类,可以上千兆,但不算稳定;管道里线特别多,无法更换网线。另外,单口网口面板改为双网口,需要连两根网线。\",\"平层户型换线报价(包含 6 类网线,6 类水晶头及人工):网线能不能换。只能我们工作人员,上门查看来确认。确认没法换的,只收上门费 100 元。可以换的话。换首根 6 类网线 380 元。每增加 1 根收取 140 元。管道里包含 10 米,超出的每米 12 元。客户需要管道外面延长网线的,每米 12 元。除复式和大型场所外,绝大多数情况是超不过 10 米。 实际付费:上门维修就是按户计算,不管问题大小都是 300 起。我原本的问题不大,所以让他把家里的网线全部检查了遍,替换坏掉的水晶头和网口面板,最终费用是 430.\",\"网线情况:客厅 TV,客厅沙发(2 条网线,一条放在电话线下),客卧床头,客卧 TV,主卧床头,主卧 TV,书房书桌。书房备用网口更换面板后,依然不能使用,可能是线断了,不再使用。\",\"无线方面,我闲鱼买了个二手路由,与原本的华硕路由进行 有线 mesh 组网。AiMesh 主路由连接 LAN 口,节点路由连接 WAN 口。\",\"横纹衣服更显胖?你可能一直都弄错了↩︎\"]},\"774\":{\"h\":\"维修/保养\"},\"775\":{\"h\":\"牛皮席\",\"t\":[\"平时隔一段脏了用温水毛巾擦就可以了,如果流汗很多的话,可以用淡肥皂水擦拭后再用清水毛巾擦。不宜暴晒,可以傍晚的阳光晾晒。\",\"秋天收藏之前,用淡肥皂水湿毛巾彻底清洁牛皮席表面,然后再用清水擦干净,在阳台晾晒一天后,可以卷也可以折起打包起来收藏,也可以直接垫在床上,上面再铺被子使用。\"]},\"776\":{\"h\":\"升降桌\",\"t\":[\"升降桌报错时,长按向下键,桌子会逐渐复位到最低,然后恢复正常。\"]},\"777\":{\"h\":\"通马桶\",\"t\":[\"塑料袋套在马桶搋或马桶刷,把塑料袋绑好。一插到底,快速抽动。多套上几个,尽量把它弄得比马桶的口大一点点哦。因为塑料袋在前面能起到一个遮挡的作用,快速的抽动它会形成一股冲击,从而达到快速的疏通马桶的作用。\",\"如果使用下方的疏通器,也在疏通头上绑好塑料袋,在气口位置撕开个小口,最后按通气开关。\",\"疏通器说明 1\",\"疏通器说明 2\"]},\"778\":{\"h\":\"林内锅炉\",\"t\":[\"左侧为冬季采暖模式,地暖模式下温度设置在 45—55℃,原则上不超过 60℃。因为地暖管道是塑料的,如果温度太高,那么会影响到采暖管的使用寿命,还会导致锅炉内壁结垢。\",\"燃气壁挂炉配备有手动注水/补水阀,当运行过程中,采暖系统压力下降至 1bar 以下时 (因水中气体蒸发等原因引起),用户应慢慢打开此阀对系统进行补水增压,直到系统压力恢复到规定的水压为止,一般在静态常温下,系统应保持 1bar 左右,工作时水压应保持在 1bar~1.5bar 之间,补水过程中请不要离开现场。\"]},\"779\":{\"h\":\"锅炉补水\",\"t\":[\"先检查采暖系统中是否有漏水的地方,确认系统完全密闭。\",\"关闭燃气壁挂炉,切断电源。\",\"逆时针(向左)旋紧注水/补水阀约一周,听到有“呲”的声音。\",\"观察操作面板上的水压表,当水压表指针在 1bar~1.5bar 之间时,顺时针(向右)旋转注水/补水阀手柄关闭注水/补水阀。\",\"开机运行燃气壁挂炉。\",\"注意事项:\",\"注水时,必须切断燃气壁挂炉总电源,以免因接头漏水而导致漏电;\",\"补水结束后必须将注水/补水阀旋紧关闭,否则燃气壁挂炉将过压溢水;\",\"如果您补水时不小心将采暖系统内的水压补到 3bar 左右,安全阀会泄水,所以再次提示您安全阀必须用接管与地漏连接,且中间不许有阀门。\"]},\"780\":{\"h\":\"地暖温控器\",\"t\":[\"地暖温控器 1\",\"地暖温控器 2\"]},\"781\":{\"h\":\"医疗药品\"},\"782\":{\"h\":\"自身健康\",\"t\":[\"尿素乳膏:柔软皮肤,防止干裂,深层滋润。\",\"维 a 酸乳膏:更新表皮,去除角质,避光只能晚上用。\",\"壬二酸:疏通毛孔堵塞,改善黑头。需建立耐受,遵循 SCT 法则:从短时间到长时间,每天每次 5-10 分钟递增;刚开始涂抹,可以在脸上停留 5-10 分钟后立即清水清洗掉,然后继续下一步护肤步骤,第二天时间拉长到 20 分钟,以此类推,直到在面部停留超过 1-2 小时以上无不适,可以尝试过夜。\",\"黑头:白天用壬二酸(5 分钟),晚上用维 a 酸。\"]},\"783\":{\"h\":\"维生素\",\"t\":[\"维生素:维生素 B 和 C 国内非常便宜,几元一瓶。但其他维生素国内只有保健品,价格严重虚高,优先考虑国外购买。\",\"护眼:叶黄素,玉米黄质,Lutemax® 2020 万寿菊花提取物。\",\"补钙:吃钙片要同时补充维他命 D 和维他命 K。钙本身是无法直接被身体吸收的,维他命 D 的作用是运输,带动钙元素在血液中流动。但光流动不行,需要给钙找个目标,才能把钙变成骨骼。所以就需要维他命 K,维他命 K 的作用则是把血钙转化为骨钙,让钙元素真正沉积在骨骼上。D 和 K 相结合,才能最大程度地提升钙的吸收率。\"]},\"784\":{\"h\":\"看病技巧\",\"t\":[\"如果在网上挂不到专家的号,可以尝试电话联系科室问一下能不能当天加号,有的专家是允许加号的,只不过可能会加到当天比较晚的时候,出检查结果的时候专家就下班了。[1]\",\"如果对自己病情没有很多了解的话,建议早上空腹去,以免抽不了血。如果对自己要做的检查有大致了解的话,建议查一下注意事项,提前做好准备,比如做核磁共振身上不要带金属,女生最好穿无钢圈无挂钩的 bra,比如散瞳后不要驾驶等等。\",\"人这一生中还是得常见病的概率大,没必要迷信主任医师。建议首次看病不必找资历太高的医生,如果你的病真的到了需要找老大夫看看的地步,年轻大夫会领着你去找的。\",\"上午看病的人多,下午少,周一多,周五少,尽量避开周一上午。刮风下雨是看病的最佳时机,雨越大,人越少。[2]\",\"不用迷信主任,要是真有大病,年轻大夫会领着你去找的……↩︎\",\"“为了您和家人的健康,请不要在星期一上午看病”,超实用看病指南↩︎\"]},\"785\":{\"h\":\"购物评价\"},\"786\":{\"h\":\"书房\"},\"787\":{\"h\":\"摄像头\",\"t\":[\"摄像头品牌众多,但实际像素都仅为 200 万像素。例如,罗技 C930 标称拥有 1500 万像素,售价 469 元,但这个像素数是通过软件算法提升的,实际像素仍然为 200 万像素。\",\"谷客和奥尼是高性价比的摄像头品牌,而高端款则有影石 Insta360 Link(费用为 1800 元,目前还未下单)。\"]},\"788\":{\"h\":\"键盘\",\"t\":[\"罗技 ERGO K860 是一款无线蓝牙键盘,具有人体工学设计,并配备手托。我替换下来的海盗船机械键盘则留作备用。\",\"机械键盘 ikbc c104 和高斯 GS104D 销量高。办公场合适合使用静音红轴需求。高斯是国产品牌,提供多种颜色选择。\"]},\"789\":{\"h\":\"游戏手柄\",\"t\":[\"如果不是在客厅玩游戏,建议买有线手柄,否则价格会高得多。\",\"100-200 预算:北通阿修罗 2、八位堂、致动 O。\",\"400+ 预算:XBOX SERIES 手柄。\",\"廉价手柄的性能通常很差,比如,摇杆只支持四个方向,而遥控一般是可以 360 度控制的。\"]},\"790\":{\"h\":\"显示器\",\"t\":[\"书桌上装有三台显示器。主显示器是小米 27 英寸 2K 165Hz,尽管存在轻微漏光,但对日常使用影响不大。两侧的显示器是 2012 年生产的 DELL 2412M。显卡为 3080Ti,考虑以后将三台都升级为 4K,使用每英寸像素数(PPI)来评估显示器清晰度更为合理和直观。4K 显示屏让眼睛更舒适,绝对提高幸福感。[1]\",\"显示器疑问:\",\"使用不同分辨率和刷新率的显示器是否对视觉和视力产生影响?(之前看到的说法是影响不大。)\",\"旧显示器需要多久更换一次?如何判断它们的寿命已到?\",\"放在屏幕上方的防蓝光灯是否有效?\",\"DIY 显示器(面板 + 公版控制器):\",\"便宜,但没有厂家优化,显示效果打折扣。\",\"需要确认购买的显示面板是否为二手。\",\"我连续购买了两个面板都出了问题,分别是碎屏和无显示。\"]},\"791\":{\"h\":\"台式电脑\",\"t\":[\"2022.03.16 淘宝入手 DIY 台机 i7+3080ti,费用 16500。虽然价格贵了点,不过赶在疫情封控两个月前,用上新电脑。原本想入手联想 刃 9000K 2022(i7+3070ti,价格 14000),但一直无货。这款机箱由联想定制,散热更好,配置足够日常使用,另外还有品牌机售后优势。相比联想,入手的 DIY 电脑内存频率从 4400 升至 5200,显卡从 3070ti 升至 3080ti,性价比更高,而且是现货。\",\"如果使用悬挂主机托架,需考虑主机重量、升降桌承重。\"]},\"792\":{\"h\":\"书桌灯\",\"t\":[\"我在书桌上使用了米典护眼读写灯,众筹价为 400 元。这款灯的光线级别达到 AA 级,可以替代屏幕上的挂灯。\",\"通常情况下,我会开着书桌灯,而顶灯一般是关着的。当只有屏幕和桌面上有光,其他区域都处于黑暗中,我能更专心地工作。\",\"未来,我希望能在书房里增加一些色彩,考虑使用 yeelight 灯带。\"]},\"793\":{\"h\":\"升降桌\",\"t\":[\"电动升降桌的调节高度范围一般在 0.6 至 1.2 米之间,可以考虑乐歌和京造。如果你想站着阅读,还可以考虑添置一个阅读架。\"]},\"794\":{\"h\":\"静电墙贴\",\"t\":[\"@chen 出的绝妙主意,将静电墙贴当白板用,可以任意随时的记录。不过为用红色白板笔不好擦,准备试试 PVC 材质的静电墙贴。\"]},\"795\":{\"h\":\"数码\"},\"796\":{\"h\":\"降噪耳机\",\"t\":[\"以下是降噪耳机的比较,按降噪效果从低到高排列:\",\"Freebuds Studio:华为生态。\",\"Sony 1000XM4:于 20 年发布,降噪效果强,但偶尔会翻车。\",\"Bose 700:于 19 年发布,长时间佩戴舒适,但佩戴时间过长会感到很热,有人说这款不如旧款 QC 35 II。我于 2021 年 6 月以 1300 元购入,后来在闲鱼以 899 元售出。\",\"还试用过其他无线耳机,如下所述:\",\"10 元:购买自拼多多,通话效果勉强,但音乐质量非常差,声音仿佛来自另一个世界。\",\"50 元:倍思,通话和音乐效果都还不错,但在地铁里几乎听不到声音。不知是不是因为习惯了降噪耳机,带普通耳机只能听到地铁的噪音。\",\"小度半入耳耳机:容易松动,甚至在走路时容易脱落;偶尔无法识别,必须重新放入电池仓进行充电。\",\"悦虎 1562M:闲鱼山寨品牌,据说音质不错(?),但主要适用于苹果设备。如果使用安卓设备,对音质要求不高,可以选择 QCY。\"]},\"797\":{\"h\":\"充电器\",\"t\":[\"充电器用了几年后,注意及时更换,因为老化会导致充电速度变慢。\",\"氮化镓充电器非常适合外出快速充电。不要购买无品牌的廉价充电器,虽然它们可能具有高参数和强大功能,但充电芯片质量没有保障,容易导致过热充电,从而影响设备的寿命。\"]},\"798\":{\"h\":\"UPS\",\"t\":[\"随着 NAS 硬盘数量的增加,建议使用 UPS 以防止因突然断电而导致的硬盘损坏。\",\"在考虑 NAS UPS 时,可以考虑购买 APC BK650M2-CH 和山特(SANTAK)TG-BOX 850。\"]},\"799\":{\"h\":\"3D 打印机\",\"t\":[\"3D 打印机使用时,打印原料会产生有害气体,不适合在家中使用。如果偶尔需要打印,建议在网上寻找专业人士定制。\"]},\"800\":{\"h\":\"健康\"},\"801\":{\"h\":\"代餐\",\"t\":[\"代餐:无营养,不能起到减肥作用,容易掉肌肉。\"]},\"802\":{\"h\":\"体重秤\",\"t\":[\"华为体脂秤 2 Pro 太过敏感,经常不准确。\"]},\"803\":{\"h\":\"椭圆机\",\"t\":[\"椭圆机的稳定性至关重要,机身越重越好。一般型号只有 68 公斤,好的型号可以达到 86 公斤。飞轮重量必须达到 12 公斤,否则使用时可能不够稳定。\",\"按照这些标准,推荐斯诺德 E690 和迪卡侬 EL 900。\"]},\"804\":{\"h\":\"眼部按摩仪\",\"t\":[\"严选眼部按摩仪噪音较大,但其他品牌也没好多少。如果买新的眼睛按摩仪,建议选择蛋白皮材质,适合长期使用。\",\"倍轻松:睡眠模式只有热敷。\",\"小米有品摩摩哒:无法关闭音乐,震动效果较弱,气囊挤。\"]},\"805\":{\"h\":\"泡脚桶\",\"t\":[\"泡脚桶的新旧款别不大,比较特别的功能是蒸汽泡脚,但评价普遍一般。建议选择传统深桶,可以漫过小腿。\"]},\"806\":{\"h\":\"睡眠监测\",\"t\":[\"在健康监测方面,我比较重视睡眠时间的监测。\",\"曾使用过 37 度睡眠监测带,但准确性不高,只适合用于家庭自动化(例如,作为触发器自动拉开窗帘)。我也考虑过更换为 Apple Watch 8/SE。然而,戴上 Apple Watch 会舒适吗?另外,我的手机是安卓系统,Apple Watch 是否兼容安卓手机或 iPad?\",\"试过小米手环和华为 GT 手表,但无论使用何种手环,始终感到不舒适,尤其是在炎热的天气里容易出汗。我尝试过硅胶、金属和尼龙编织表带,都没有明显改善。\",\"@木木:用过 Nike 的那个孔状的表带改善了,然后我用洗眼镜的超声波盒子每天洗表带汗藓情况进一步改善,于是我最后通过实验,每天用酒精消毒液洗表带\",\"@ZxoudXc:硅胶(最舒服的材质了) + 一点点风油精 不能说根治把。但是体感很爽,特别是在空调房里面。希望有帮助。\"]},\"807\":{\"h\":\"厨房\"},\"808\":{\"h\":\"冰柜\",\"t\":[\"与其他人不同,我想要冰柜只是冰箱放不下了。我喜欢买速冻包子、饺子,这类一买就得买很多包,否则价格高很多。换个思路,趁着优惠多买些速冻产品,冰柜的费用很快就回来了。我看中的是 135L 的卧式冰柜,价格 700,如果家里用不到了,扔起来也不会心疼。\",\"比起卧式冰柜,立式拿取方便,但分层后存储空间受限,没法放体积特别大的东西,比如大包的生鲜,整条的羊腿。立式占地虽小,但小的有限,容量相等的情况下,基本是 0.4 平和 0.5 平的区别,而且立式高度更高,容易影响视线。\"]},\"809\":{\"h\":\"切肉机\",\"t\":[\"电动切肉机用起来蛮慢的,切 5 斤肉需要 30 分钟。机器清洗也很麻烦,建议每次切肉时都将整条一起切好。\",\"使用前,向滑轨喷食用油,可以降低切肉卡顿的几率。使用时,为了避免冻手,两只手都先带一层劳保手套,外面再套一层 PVC。左手固定肉块左侧,右手扶助肉块后端。不要过分往前推,避免肉切得太厚。\"]},\"810\":{\"h\":\"净水器\",\"t\":[\"RO 膜方案:纯水过滤,可直饮。RO 膜机器较大,一定要量好厨柜尺寸。在选择时,不必参考废水量,废水量越低对滤芯压力更大。一些攻略指出 RO 膜的出水速度较慢,而滤芯更换频率较高(最快 1-3 个月一次)。然而,这些问题早已得到解决。相反,我因为滤芯更换速度过慢而感到焦虑。通常,DIY 前置滤芯寿命是 3-6 个月,但我购买的 DIY 净水器用了一年,还没提醒更换滤芯。最后我只能盲换,跟超滤方案一样了。\",\"建议购买小米、美的等成熟净水器方案。它们的价格通常在 1500-2000 之间,仅需要更换两个滤芯:复合滤芯(2 年更换一次,售价 299 元)和 RO 膜滤芯(5 年更换一次,售价 999 元)。仅更换滤芯的年均成本为 350 元。总体来看,DIY 所谓的性价比并不太高。\",\"超滤方案:保留矿物质(?),无需通电,大通量过滤。不足之处难以确认滤芯更换的时间,只能根据滤芯使用时间来预估。全套新机器的价格为 1500 元,之后每两年更换一次 EF-900P 滤芯(售价 350 元),每四年更换一次超滤 LU3B-5C 滤芯(售价 600 元),仅更换滤芯的年均成本为 325 元,如果全套更换,年均成本为 425 元。\",\"旧配置:立升 LU3B-5C + 爱惠浦 EF-900P (别要赠品,折现) + 爱惠浦滤头垡头 QL2U + 无铅水龙头。这是用了几年的方案,但随着立升的超幅涨价,超滤玩家的变少,越来越难以实现了。另外,配机时记得买好配件。比如买爱惠浦滤头垡头 QL2U 时,问清楚是几分进几分出。常用的两边都是 3 分口,要配 2 个 3 分进 2 分出的接头,方便接 2 分水管。接口是可以送的,要跟店家说送接口、水管。没送的话,可以自己买 1 根 5 米的 2 分 PE 管、1 个 4 分转 2 分的接头 (立升转爱惠浦)、2 个 3 分转 2 分的接头、1 个 2 分球阀。\",\"超滤净水示意图\"]},\"811\":{\"h\":\"家居\"},\"812\":{\"h\":\"维修\",\"t\":[\"日常维修以京东到家为主,或使用商家外包常用的鲁班到家。之前净水器的安装服务是鲁班到家,服务还不错,可以线上让师傅报价。\"]},\"813\":{\"h\":\"电熨斗\",\"t\":[\"挂烫机体积较大且使用频率低,长时间闲置后,性能也减弱,无法熨平衣物。考虑使用传统电熨斗 + 分熨台。\"]},\"814\":{\"h\":\"牛皮席\",\"t\":[\"夏天使用牛皮席更凉爽,避免因出汗而粘皮肤,有助于提高睡眠质量。\",\"最初购买的是无涂层牛皮席,上面存在许多瑕疵,后来更换为便宜的涂层款,反而看不到瑕疵。\"]},\"815\":{\"h\":\"消毒液\",\"t\":[\"参考消毒剂选购不完全指南:\",\"84 消毒液:爱特福、龙安、蓝月亮、康威龙。\",\"二氧化氯消毒片:星帮尼,从安全性角度看,二氧化氯消毒剂优于含氯消毒剂。 \",\"用于餐具、水果、蔬菜等的消毒,有效的二氧化氯浓度应为 100–150mg/L,浸泡作用时间 10–20 分钟。\",\"尽管二氧化氯目前被认为是对人体无毒害的成分,但为了保险起见,应及时用清水洗净残留消毒液才能继续使用。\",\"季铵盐消毒液:适用于衣物消毒,建议品牌包括康威龙和洛娃 \",\"不要将消毒液与洗衣液及柔顺剂同时使用,以免使各自的功效减弱。清洁、消毒是两个独立的过程,建议先洗干净再进行消毒,消毒效果更佳。\"]},\"816\":{\"h\":\"小物\",\"t\":[\"能面具 (树脂),但带眼镜不方便使用。\",\"宝工(Pro'sKit)NT-309-C 智慧型非接触式感应电笔:测电笔、验电笔\",\"内裤清洗机\",\"洗杯器:一按就能清洗杯子,非常方便,可惜需要水槽有多余的出水口。[2]\",\"插座:公牛、德力西、aigo(突破),公牛质量下滑了,可以看看其他品牌。\"]},\"817\":{\"h\":\"可能放弃\"},\"818\":{\"h\":\"电子书\",\"t\":[\"我通常使用 iPad 来阅读小说。国产电子书设备基于安卓系统,可以满足小说阅读的基本需求,而且使用墨水屏有助于保护眼睛。因此,考虑是否可以用电子书设备代替 iPad。\",\"电子书要求:支持开放系统(可以安装第三方应用程序),并且支持蓝牙遥控翻页。\"]},\"819\":{\"h\":\"微单相机\",\"t\":[\"原计划购买索尼 a7m4 微单相机,但随着疫情的发展,这个想法逐渐淡化,优先级下调。\",\"关于镜头选择:F 值越小,光圈越大,适合虚化背景。\",\"腾龙 28-75mm F2.8(适合日常旅行)\",\"索尼 FE 85mm F1.8 中远摄定焦镜头(适合人像摄影)\"]},\"820\":{\"h\":\"无线麦克风\",\"t\":[\"RODE Wireless Go II 与 DJI Mic:RODE Wireless Go 音质多受好评;而 DJI Mic 相对较新,但更符合人性化需求,可以轻松连接到手机。不过,需要注意的是 DJI Mic 的底噪略微高一些。\",\"鉴于录音中存在较多的杂音,需要使用降噪软件或者单独使用一部手机进行录音,因此目前暂不考虑入手无线麦克风。\"]},\"821\":{\"h\":\"洗碗机\",\"t\":[\"由于厨房空间有限,且洗碗机过于笨重,考虑找人上门设计解决方案?\",\"选择合适自己的显示器↩︎\",\"Room Tour |新家的厨房里有什么?↩︎\"]},\"822\":{\"h\":\"Docker\",\"t\":[\"Docker 是一个开源的应用容器引擎,可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。简单点说,用 Docker 你不懂太多代码知识,直接用其他人的打包容器,小白也可以部署复杂的服务应用。\",\"Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来管理多个 Docker 容器,并配置应用程序需要的所有服务。在配置文件中,所有的容器通过 services 来定义,然后使用 docker-compose 脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。强烈推荐使用 Compose 搭建所有 Docker,流程参考 NAS 上搭建 Docker。\"]},\"823\":{\"h\":\"Docker 命令\",\"t\":[\"Docker 使用查看 Docker — 从入门到实践。\",\"列出所有容器:sudo docker ps -a。\",\"停止容器运行:sudo docker stop 。部分容器名有可能无法识别,最好在容器名称中添加数字。\",\"删除指定容器:sudo docker rm ,删除前需先停止容器。\",\"清理容器(慎重):sudo docker system prune -a,用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及无 tag 和没使用的镜像。\",\"清理数据卷(慎重):sudo docker volume prune,关闭的容器数据卷会被删除,有可能破坏有用数据,需极度谨慎。\",\"导出容器中的 mysql 数据库 sudo docker exec mysqldump -u root -p your_database_name > 。将 替换为实际的容器 ID,将 替换为你想要保存导出文件的路径和文件名。请将 替换为你的 MySQL root 用户密码。完成后,你将得到一个 MySQL 数据库备份文件。比如导出 Huginn 数据库,sudo docker exec 3de3058e4468 mysqldump -u root -p huginn_production > /volume1/docker/huginn/backup.sql。\"]},\"824\":{\"h\":\"定制 Docker 镜像\",\"t\":[\"有时官方镜像可能不满足我们的需求。这时,我们可以使用 docker commit 命令定制自己的镜像。如何使用,可以查看如何保存修改后的容器为镜像。\",\"例如:\",\"sudo docker commit \\\\ --message \\\"基于 Ubuntu 18.04 构建的 Huginn\\\" \\\\ ubuntu \\\\ huginnxubuntu:1.0 \",\"另外,可以使用 Dockerfile 来构建镜像,如:\",\" build: context: /volume1/docker/danmuji dockerfile: Dockerfile \",\"如何将镜像推送到 DockerHub:\",\"echo \\\"您的密码\\\" | docker login --username=您的用户名 --password-stdin docker build -t rockben/cors-anywhere:0.4.4 . docker push rockben/cors-anywhere:0.4.4 \"]},\"825\":{\"h\":\"Docker 数据库管理\",\"t\":[\"在 Docker 中,数据库可以引用外部资源并被永久保留。但保存的外部数据是多个小文件而不是完整的 MySQL 文件。在实际操作中,我们应关注正在运行的数据库,而非外部存储文件。\",\"首先,应将 Docker 数据库的端口暴露给外部,如将 MySQL 的默认端口 3306 映射到外部的 3307 端口。随后,使用数据库工具连接到 192.168.3.3:3307。这类似于使用 phpMyAdmin,可以轻松查看、编辑和导出 Docker 内的数据库。如果数据库连接遭到拒绝,可以参照 Huginn 的内部数据库连接设置,确保当前外部连接 IP 是允许的。\"]},\"826\":{\"h\":\"其他使用\"},\"827\":{\"h\":\"Windows Docker\",\"t\":[\"在 Windows 系统上,可以使用 Docker Desktop 来管理容器,配置方法可参考 Windows Docker 环境配置。\",\"Windows 本地磁盘被挂载到 Linux 的 mnt 目录下,因此,如果需要在 WSL 中访问 Windows 文件,需要在路径前添加 /mnt/ 前缀,并将磁盘符号改为小写字母,将反斜杠 \\\\ 替换为正斜杠 /。例如,如果 Windows 文件位于「D:\\\\Backup\\\\Libraries\\\\Desktop\\\\stable-diffusion-webui-docker」目录下,则其在 Linux 中的路径为「/mnt/d/Backup/Libraries/Desktop/stable-diffusion-webui-docker」。Windows 上的 WSL 本地路径为 \\\\\\\\wsl.localhost\\\\。\",\"请注意:WSL 上的 Linux 环境与其他环境有所不同,须查看在适用于 Linux 的 Windows 子系统 (WSL2) 上安装 Node.js。\"]},\"828\":{\"h\":\"宝塔镜像\",\"t\":[\"如果要在 Docker 上部署网站,推荐使用宝塔官方的集成镜像。它基于 CentOS 7.9,解决了 Docker 内部链接问题,还支持将数据库定时备份到本地。有关配置信息,请参考宝塔面板定制 docker 镜像发布 - 集成 LN/AMP 支持和 Docker 安装宝塔环境。但是,该镜像不适用于 Huginn 的部署,因为 Huginn 不支持 CentOS。我曾尝试将安装命令从 apt-get 替换为 yum,但仍然无法部署。当我尝试在 Docker 中直接安装宝塔而不使用官方集成镜像时,遇到了无法启动数据库的问题。\",\"# 按需求修改映射端口和目录,1024 以下的端口不能给普通用户用 sudo docker run -d --restart unless-stopped --name baota -p 8889:8888 -p 1033:22 -p 1044:443 -p 1081:80 -p 1889:888 -v /volume1/docker/btpanel/website_data:/www/wwwroot -v /volume1/docker/btpanel/mysql_data:/www/server/data -v /volume1/docker/btpanel/vhost:/www/server/panel/vhost btpanel/baota:lnmp \",\"在站点设置中,绑定你的本地域名 home.xx.com 和内部地址 192.168.x.x,这样你就可以通过访问 home.xx.com:1081 来访问该站点。\",\"默认地址 http://192.168.x.x:8889/btpanel 上的宝塔面板。\",\"默认用户:btpanel\",\"默认密码:btpaneldocker\",\"镜像默认 SSH 密码:btpaneldocker\",\"如果宝塔镜像仅用于测试环境,可以使用 rm -f /www/server/panel/data/admin_path.pl 命令来关闭面板入口。如果你关闭了 NAS 的 SSH 功能,宝塔面板也将停止,但不会影响已运行的网站。\"]},\"829\":{\"h\":\"Huginn\",\"t\":[\"Huginn 部署:查看 deploy Huginn inside of Docker 和 .env 设置,或按下方的教程手动部署到服务器上,轻量使用推荐部署到 Docker。\",\"Huginn 抓取教程:RSS 进阶篇:Huginn - 真·为任意网页定制 RSS 源(PhantomJs 抓取)\"]},\"830\":{\"h\":\"常用 Agent\",\"t\":[\"Huginn Agents:\",\"Website Agent 解析网页、XML 文档和 json 数据,最常使用\",\"Event Formatting Agent 事件信息格式化,可以对收到的信息内容进行格式化,允许添加自定义新内容\",\"Phantom Js Cloud Agent 借助 Phantom 抓取动态页面源码,防止部门网站屏蔽爬虫\",\"Trigger Agent 监控事件反馈信息的触发器,多用来过滤部分内容\",\"De Duplicate Agent 去重\",\"Data Output Agent 将数据以 RSS 和 Json 的形式向外部推送\",\"Liquid Output Agent 自定义格式数据输出,可以用它创建 HTML 页面,json 数据等\",\"Webhook Agent\",\"Trigger Agent 监测敏感事件,然后可以用来发送邮件等提醒。\",\"Javascript Agent 允许执行自定义的 JS 代码,可以用于个性化操作\",\"Digest Agent 汇总节点,收集所有收到的事件再作为一个事件发送出去\",\"Email Agent 用邮箱发送最新接收到的讯息\",\"Post Agent 可以由其他节点触发,根据固定模板合并事件信息,并以 POST 或 GET 方式向指定的 URL 发起请求\",\"Delay Agent 可以作为事件或者副本的暂存器或者缓冲区,统一触发发布\",\"Scheduler Agent 定时器节点\",\"Attribute Difference Agent 数值差异比较\",\"Commander Agent 触发器代理,可以用于向其他节点发起指令控制,控制节点的执行和停止等\",\"{{created_at}} 为自带抓取时间,Agent 设置中的特殊字符+,需要用反义符\\\\\\\\。\"]},\"831\":{\"h\":\"Huginn 部署\",\"t\":[\"Huginn 的任务有时会卡住,导致后续任务无法进行,重启容器也无法恢复正常。因此,我改为手动部署 Huginn,并定期使用重置命令以防止任务卡住。\",\"cd /home/huginn/huginn sudo bundle exec rake production:force_stop sudo bundle exec rake production:export \",\"服务器重启后,需执行以下命令:\",\"sudo docker exec -it huginn bash sudo service mysql restart sudo service mysql start sudo service nginx restart cd /home/huginn/huginn git config --global --add safe.directory /home/huginn/huginn sudo runsvdir /etc/service & sudo bundle exec rake production:export \",\"Huginn 经常用到的位置包括 /home/huginn/huginn(env 环境设置)和 /var/lib/mysql(数据库)。为了使这些位置能够在外部存储上工作,需要将外部存储位置的权限设置为 everyone,否则会出现错误。\",\"需要注意的是,内部数据库默认情况下不会被外部识别。为了使其能够与外部进行连接,需要进行以下操作:\",\"使用 sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf 命令找到 bind-address 行,并注释掉(在行的前面添加 #):#bind-address = 127.0.0.1。同时,将 max_allowed_packet 设置为 200M。\",\"根据连接反馈获取连接 IP 并授权,同时开放 process 权限,方便后期数据库备份。数据库备用可使用 backup_script.sh 脚本,定期将 sql 文件导出到外部存储。\",\"mysql -u root -p GRANT ALL PRIVILEGES ON *.* TO 'huginn'@'172.17.0.1' IDENTIFIED BY 'YourPassword'; GRANT PROCESS ON *.* TO 'huginn'@'localhost'; FLUSH PRIVILEGES; \\\\q sudo service mysql restart \",\"2 个疑问:\",\"测试当任务卡住时,rake production:export 是否有效。(优化后,一直没出现卡住问题?)\",\"部署时 production:export 步骤会提示 unable to lock supervise/lock: temporary failure,但此报错似乎不影响 Huginn 的运行,等有时间看看是否有相关报错。\"]},\"832\":{\"h\":\"Ubuntu 手动部署\",\"t\":[\"部署环境:Ubuntu 18.04 的 Docker 镜像(同样适用于服务器) 安装参考:Manual Installation on Debian/Ubuntu,Novice-setup-guide 手动升级:manual Update\",\"Huginn 部署步骤:\",\"# 进入 huginn 容器命令行,某些容器命令为 /bin/bash sudo docker exec -it huginn bash # run as root! apt-get update -y apt-get upgrade -y apt-get install sudo -y # Install vim and set as default editor sudo apt-get install -y vim sudo update-alternatives --set editor /usr/bin/vim.basic # Install the required packages sudo apt-get install -y runit build-essential git zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libreadline-dev libncurses5-dev libffi-dev curl openssh-server checkinstall libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev logrotate pkg-config cmake nodejs graphviz jq shared-mime-info # Ubuntu 18.04 Bionic sudo apt-get install -y runit-systemd # Download Ruby and compile it: mkdir /tmp/ruby && cd /tmp/ruby curl -L --progress-bar https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.7.tar.bz2 | tar xj cd ruby-2.7.7 ./configure --disable-install-rdoc make -j`nproc` sudo make install # curl -L --progress-bar https://cache.ruby-lang.org/pub/ruby/3.2/ruby-3.2.2.tar.xz | tar xJ # cd ruby-3.2.2 sudo gem update --system --no-document sudo gem install foreman --no-document # Create a user for Huginn: sudo adduser --disabled-login --gecos 'Huginn' huginn # Install the database packages sudo apt-get install -y mysql-server mysql-client libmysqlclient-dev \",\"输入 service mysql start 启动数据库,否则下一步数据库设置容易报错 Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'。[1]\",\"# 逐步设置数据库 root 密码 sudo mysql_secure_installation # 用上方设置的密码登陆数据库 mysql -u root -p # ⚠️逐行输入代码到数据库命令行 `mysql>`,需将 `$password` 替换为你要设置的密码 CREATE USER 'huginn'@'localhost' IDENTIFIED BY '$password'; SET default_storage_engine=INNODB; GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, LOCK TABLES ON `huginn_production`.* TO 'huginn'@'localhost'; FLUSH PRIVILEGES; \\\\q \",\"数据库设置好后,拉取 huginn 主体程序,此段命令可以整段复制到 ssh。\",\"# We'll install Huginn into the home directory of the user \\\"huginn\\\" cd /home/huginn # Clone Huginn repository,不能直接使用 master,避免 ruby 3.2 问题 # sudo -u huginn -H git clone https://github.com/huginn/huginn.git -b master huginn sudo -u huginn -H git clone https://github.com/huginn/huginn.git -b latest_rubygems huginn # Go to Huginn installation folder cd /home/huginn/huginn # Copy the example Huginn config sudo -u huginn -H cp .env.example .env # Create the log/, tmp/pids/ and tmp/sockets/ directories sudo -u huginn mkdir -p log tmp/pids tmp/sockets # Make sure Huginn can write to the log/ and tmp/ directories sudo chown -R huginn log/ tmp/ sudo chmod -R u+rwX,go-w log/ tmp/ # Make sure permissions are set correctly sudo chmod -R u+rwX,go-w log/ sudo chmod -R u+rwX tmp/ sudo -u huginn -H chmod o-rwx .env # Copy the example Unicorn config sudo -u huginn -H cp config/unicorn.rb.example config/unicorn.rb \",\"sudo -u huginn -H editor .env 设置 huginn 环境依赖,更多选项查看 .env 设置案例。编辑器为上面安装的 vim,i 在光标所在的位置插入,esc 退出编辑,:wq 保存并退出。\",\"DATABASE_ADAPTER=mysql2 #DATABASE_ENCODING=utf8 # 修改点 DATABASE_RECONNECT=true DATABASE_NAME=huginn_production # 修改点 DATABASE_POOL=20 DATABASE_USERNAME=huginn # 修改点 DATABASE_PASSWORD='$password' # 修改点,换为你自己的密码 #DATABASE_HOST=your-domain-here.com #DATABASE_PORT=3306 #DATABASE_SOCKET=/tmp/mysql.sock # MySQL only: If you are running a MySQL server >=5.5.3, you should # set DATABASE_ENCODING to utf8mb4 instead of utf8 so that the # database can hold 4-byte UTF-8 characters like emoji. DATABASE_ENCODING=utf8mb4 #修改点 ... RAILS_ENV=production # 修改点 USE_GRAPHVIZ_DOT=dot # 取消注释,启用 GRAPHVIZ 来生成 diagram TIMEZONE=\\\"Beijing\\\" # bundle exec rake time:zones:local,时区需按指定格式填写,否则会报错 runsv not running DEFAULT_HTTP_USER_AGENT=\\\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36\\\" # 浏览器访问 # 邮件发送设置 SMTP_DOMAIN=gpt-vip.top SMTP_USER_NAME=benson@gpt-vip.top SMTP_PASSWORD=somepassword SMTP_SERVER=smtp.feishu.cn SMTP_PORT=465 SMTP_AUTHENTICATION=plain SMTP_ENABLE_STARTTLS_AUTO=true SMTP_SSL=true SEND_EMAIL_IN_DEVELOPMENT=true \",\"Install Gems 前用子账户重新设置运行目录权限 sudo chown -R huginn:huginn /home/huginn,防止报错 Your user account isn't allowed to install to the system RubyGems。\",\"# 注意看黄字警告 gem install bundler # Docker 环境中,时区容易丢失(6-70) apt-get install tzdata # Install Gems sudo -u huginn -H bundle config set deployment 'true' sudo -u huginn -H bundle config set without 'development test' sudo -u huginn -H bundle install # 备用 Gems 修复命令 # bundle update # gem update bundler # vim /home/huginn/huginn/Gemfile # Initialize Database # Create the database sudo -u huginn -H bundle exec rake db:create RAILS_ENV=production # Migrate to the latest version sudo -u huginn -H bundle exec rake db:migrate RAILS_ENV=production # ⚠️设置登陆账户密码,Create admin user and example agents using the default admin/password login sudo -u huginn -H bundle exec rake db:seed RAILS_ENV=production SEED_USERNAME=admin SEED_PASSWORD=password # Compile Assets sudo -u huginn -H bundle exec rake assets:precompile RAILS_ENV=production \",\"sudo -u huginn -H editor Procfile 修改 huginn 设置。如果需多现成运行,可移除 Multiple DelayedJob workers 部分的注释。\",\"# 在下两行前,添加符号「#」 #web: bundle exec rails server -p ${PORT-3000} -b ${IP-0.0.0.0} #jobs: bundle exec rails runner bin/threaded.rb # 删除以下下两行前的符号「#」 web: bundle exec unicorn -c config/unicorn.rb jobs: bundle exec rails runner bin/threaded.rb \",\"'sv stop huginn-web-1' exited with a non-zero return value: fail: huginn-web-1: runsv not running 的报错,使用 foreman export runit -a huginn -l /home/huginn/huginn/log /etc/service 和 chown -R huginn:huginn /etc/service/huginn*。[2][3] 如果是重启 Huginn 时出现此报错,则检查 sudo -u huginn -H editor .env 设置。\",\"# 切换到 cd /home/huginn/huginn # 设置 git config --global --add safe.directory /home/huginn/huginn # 设置开机启动 sudo runsvdir /etc/service & sudo bundle exec rake production:export # Setup Logrotate sudo cp deployment/logrotate/huginn /etc/logrotate.d/huginn # Ensure Your Huginn Instance Is Running sudo bundle exec rake production:status \",\"Nginx 站点设置:\",\"sudo apt-get install -y nginx # Site Configuration sudo cp deployment/nginx/huginn /etc/nginx/sites-available/huginn sudo ln -s /etc/nginx/sites-available/huginn /etc/nginx/sites-enabled/huginn # Change YOUR_SERVER_FQDN to the fully-qualified domain name of your host serving Huginn. sudo editor /etc/nginx/sites-available/huginn # 不需要 https,则改为下方配置 server { listen 80; # 监听的端⼝ server_name localhost home.gpt-vip.top; # 域名或ip,这里启用了两个地址,用空格分开 # 测试设置是否正确 sudo nginx -t # 移除默认网站设置,只有当服务器/容器只存在 Huginn 网站方执行下行命令 sudo rm /etc/nginx/sites-enabled/default \",\"以上完成了 Huginn 的所有部署,执行 sudo service nginx restart 即可访问网站。\"]},\"833\":{\"h\":\"Huginn Docker\",\"t\":[\"Huginn multi-process 镜像基于 Ubuntu 18.04,没有 root 权限。如果不导出卷,或者使用单独的数据库容器,则无法在不丢失数据的情况下更新 Huginn。可以手动设置数据库对外端口和外部存储路径。\",\"此外,官方镜像路径与手动版不同,不支持 force_stop 命令。官方建议 Docker 中使用下方命令删除数据库中卡住的任务。这个命令实测是有效的,但我有次碰到了未知 bug,卡住的任务被删除,后续任务却没继续。\",\"# get a shell inside the docker container (replace huginn with the name or id of the container) sudo docker exec -it huginn /bin/bash # source the environment file source .env # get a rails console bundle exec rails console # inside the rails console delete the job Delayed::Job.where('locked_at IS NOT NULL AND locked_by IS NOT NULL AND failed_at IS NULL').destroy_all \"]},\"834\":{\"h\":\"Agents\"},\"835\":{\"h\":\"Trigger Agent\",\"t\":[\"Trigger Agent 挑选符合条件的事件。\",\"# content 字段中不包含 周雅萌 或 邓雅萌 { \\\"expected_receive_period_in_days\\\": \\\"2\\\", \\\"keep_event\\\": \\\"true\\\", \\\"rules\\\": [ { \\\"type\\\": \\\"!regex\\\", \\\"value\\\": \\\"周雅萌 | 邓雅萌\\\", \\\"path\\\": \\\"$.content\\\" } ], \\\"message\\\": \\\"Looks like your pattern matched in '{{value}}'!\\\" } # title 中包含品牌词 iluminage 或 易美肌 { \\\"expected_receive_period_in_days\\\": \\\"4\\\", \\\"keep_event\\\": \\\"true\\\", \\\"rules\\\": [ { \\\"type\\\": \\\"regex\\\", \\\"value\\\": \\\"iluminage|易美肌\\\", \\\"path\\\": \\\"$.title\\\" } ], \\\"message\\\": \\\"Looks like your pattern matched in '{{value}}'!\\\" } \"]},\"836\":{\"h\":\"Liquid Output Agent\",\"t\":[\"用自定义模板将数据整理,输出为 HTML,json 和 xml 格式链接。\",\"模式一般选 Last X events,将接收到的所有数据对外输出,默认为 1000。\",\"Last X events 模式下,可以设置 Event limit 以控制输出数据的数量和时间段。Event limit 可以设为 100,即输出数据为 100;也可以设为「1 day」或「5 minutes」,即仅输出最近一天的内容。\"]},\"837\":{\"h\":\"Event Formatting Agent\",\"t\":[\"Event Formatting Agent 允许您格式化传入的事件,根据需要添加新的字段。可以用正则来替换输入中的某些元素。具体样例参考,新京报 #5 清理版面字段格式。\",\"# strftime() 方法中常用的占位符 # %Y 表示年份,%m 表示月份,%d 表示日期,%H 表示小时(24小时制),%M 表示分钟,%S 表示秒,%B 代表英文的月份,`%I` 代表小时(12小时制),`%p` 代表 AM/PM。`%e` 代表日期,不会在首位添加零。 \\\"created_at\\\": \\\"{{created_at | date:'%Y-%m-%d'}}\\\" # 将 2023-03-02 23:33:30 +0800 替换为 2023-03-02 \\\"created_at\\\": \\\"{{created_at | regex_replace: ' ', ''| regex_replace: '(([0-1]?[0-9])|([2][0-3])):([0-5]?[0-9])(:([0-5]?[0-9]))?', ''| regex_replace: '\\\\\\\\+0800', ''}}\\\" \"]},\"838\":{\"h\":\"正则重构\",\"t\":[\"比如生成时间规则为 \\\"created_at\\\": \\\"{{created_at}}\\\",默认时间 2022-07-06 21:09:51 +0800,使用正则删除规则为\\\"created_at\\\": \\\"{{created_at | regex_replace: ' ', ''| regex_replace: '(([0-1]?[0-9])|([2][0-3])):([0-5]?[0-9])(:([0-5]?[0-9]))?', ''| regex_replace: '\\\\\\\\+0800', ''}}\\\"。\"]},\"839\":{\"h\":\"加前后缀\",\"t\":[\"抓取链接不完整时,需要完善链接,比如 \\\"url_link\\\": \\\"https://so.toutiao.com{{temp_link}}\\\"。\",\"For example, here is a possible Event:\",\"{ \\\"high\\\": { \\\"celsius\\\": \\\"18\\\", \\\"fahreinheit\\\": \\\"64\\\" }, \\\"date\\\": { \\\"epoch\\\": \\\"1357959600\\\", \\\"pretty\\\": \\\"10:00 PM EST on January 11, 2013\\\" }, \\\"conditions\\\": \\\"Rain showers\\\", \\\"data\\\": \\\"This is some data\\\", } \",\"You may want to send this event to another Agent, for example a Twilio Agent, which expects a message key. You can use an Event Formatting Agent's instructions setting to do this in the following way:\",\"\\\"instructions\\\": { \\\"message\\\": \\\"Today's conditions look like {{conditions}} with a high temperature of {{high.celsius}} degrees Celsius.\\\", \\\"subject\\\": \\\"{{data}}\\\", \\\"created_at\\\": \\\"{{created_at}}\\\" } \",\"Names here like conditions, high and data refer to the corresponding values in the Event hash.\",\"The special key created_at refers to the timestamp of the Event, which can be reformatted by the date filter, like {{created_at | date:\\\"at %I:%M %p\\\" }}.\",\"The upstream agent of each received event is accessible via the key agent, which has the following attributes: name, options, sources, type, url, id, disabled, memory, controllers, schedule, keep_events_for, propagate_immediately, working, receivers, control_targets.\",\"Have a look at the Wiki to learn more about liquid templating.\",\"Events generated by this possible Event Formatting Agent will look like:\",\"{ \\\"message\\\": \\\"Today's conditions look like Rain showers with a high temperature of 18 degrees Celsius.\\\", \\\"subject\\\": \\\"This is some data\\\" } \",\"In matchers setting you can perform regular expression matching against contents of events and expand the match data for use in instructions setting. Here is an example:\",\"{ \\\"matchers\\\": [ { \\\"path\\\": \\\"{{date.pretty}}\\\", \\\"regexp\\\": \\\"A(?