<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>牧天的酒吧</title>
<link></link>
<description>我在苍天牧，笑挽白云归。不闻人间事，随风自在飞。</description>
<image><url>/conf/profile.png</url><title>牧天</title><link></link></image>
<item>
<title>2025，奔跑的人生</title>
<link>/post/2025--ben-pao-de-ren-sheng/</link>
<author>牧天</author><pubDate>2025-12-27T16:40:45+08:00</pubDate>
<guid isPermalLink="true">/post/2025--ben-pao-de-ren-sheng/</guid>
<comment>/post/2025--ben-pao-de-ren-sheng/#comment-2025--ben-pao-de-ren-sheng</comment>
<description><![CDATA[<p>天还没亮，我带着行李，坐上空荡荡的地铁，到达机场。引擎启动，飞机起飞，一段陌生的旅程就此展开。<br>这是一场早就注定的旅行，是人生旅途中偶然也必然会去经历的一段路。无论如何选择，最终都会走向某些特定的方向。<br>飞机滑上跑道，缓慢加速，继而疾驰。伴随着震耳欲聋的轰鸣声，它脱离地面，飞向高空。<br>熟悉的环境被远远甩在身后，那些缠绕的烦恼，仿佛也一起被抛在了后面。<br>杭州这片土地，熟悉又陌生。二十年，转瞬即逝。走过很多条路，翻过许多座山。那条最著名的江，昼夜不息地奔向大海。酸甜苦辣，在这座城市尝遍，人生，也悄然走过了将近一半。<br>从天空俯瞰大地，山川变得渺小，城市与村庄缩成斑点，人影消失不见。<br>阳光洒遍世间的每一个角落，它带来温暖，让人间始终充满生机。大海一望无际，托起朵朵白云。云朵像羊群，像棉花，像一场浪漫的美梦。天地在此时显得辽阔而安静。</p><p>我爱这个世界吗？是的。它总有美景，让我愿意沉浸其中，带着兴奋，也带着沉静；想要呐喊，也想要放空。<br>无数次仰望宇宙，用脚步丈量世界。可是我太渺小，在一个小圈里，或者是在一个大圈里，没有走过重复的路，可是仍然不知道尽头在何处。<br>曾在太空中停留过的人，回望地球时，会发现它不过是一粒尘埃，悬浮在浩瀚的宇宙之中。他为之奋斗的财产、家庭、事业，全部压缩在这粒尘埃上，而他自己不过是尘埃之上更微小的尘埃。<br>当一切被缩到如此之小，胜负不再喧哗，得失也不再锋利。原来重要的，是在有限的时间里，是否真实地感受过风、光和彼此的体温。<br>在尘埃之上生活，在尘埃之中去爱，这或许就是我们能给予宇宙的全部回应。</p><p>飞机逐渐靠近地面，朝着另一座城市的跑道滑翔而去。群山的轮廓逐渐清晰，轮船在水面上拉起雪白的波涛。城市里楼宇林立，芸芸众生，各自编织着属于自己的故事。<br>从一个城市跨越到另外一个城市，会遇见什么呢？<br>澳门，从来不只是地图上的一座城市。它的面积为三十多平方公里，如果折算成正方形，宽度不足六公里。它很小，却承载过巨大的欲望、信仰与命运。<br>上个世纪九十年代之前，澳门是亚洲最后的江湖城市，叠码仔、赌厅、灰色地带，构成了这座城市不被写进旅游手册的另一面。<br>在这里，可以一夜暴富，也可以万劫不复。这里曾有人在赌桌前一夜翻身，也有人在灯火散尽后输掉一生。辉煌与失落，在同一张桌面上反复上演。</p><p>“贵宾们，欢迎来到澳门。本地时间是上午的 11 点，气温是摄氏 20 度。为了您的安全，请留在座位上。等飞机完全停稳，系好安全带的信号灯熄灭后再解开安全带。请勿在非紧急情况下触碰机舱门手柄，及带有红色标识的机舱门紧急设备。当您打开行李架时，请小心物品滑落。下机时，请记得携带所有的手提物品。我们希望您度过了一段愉快的旅程，并期待与您再次见面。感谢您乘坐澳门航空公司和我们的合作伙伴中国国际航空、深圳航空以及山东航空公司的联航班机。感谢凤凰知音会员的诚挚加入，下次旅途再会。同时我们提醒您，航机仍在滑行，请您留在座位上，并系好安全带，请不要打开上方行李架，直到系好安全带的信号灯熄灭为止。祝您周末愉快。”</p><p>飞机停稳在航站楼前。各大酒店的发财车大巴、黑色的士、公交车、轻轨组成了这座城市的公共交通网络。<br>从机场穿梭到银河酒店，水晶大堂、钻石大堂、娱乐场、商场，构成了这个商业集团令人惊叹的奢华。<br>雄伟的银河娱乐建筑群西面，是百老汇娱乐建筑群，东面是威尼斯人酒店、伦敦人酒店、巴黎人酒店，还有新濠影汇、新濠天地、美狮美高梅酒店。<br>聚集起千亿规模旅游博彩产业集群的路氹城，成为澳门娱乐产业的核心区域，吸引着大量游客前来体验奢华生活。</p><p>又是一个天还没亮的清晨，起床，开始从澳门机场的酒店走向奥林匹克体育中心。<br>从中国大地五湖四海赶过来的运动狂人们，即将开始用脚步刷新澳门的道路。<br>行走，奔跑，拼搏，热爱，这是体育带给人的快乐源泉。<br>各种各样的人，不管是什么性别和年龄，在这一刻，他们都是快乐的。<br>去遇见、去看见、去感受，让多巴胺分泌，让肾上腺素飙升，让心跳加快，让躯体恢复到原始状态，释放生命的能量，成为这个世界的一部分。<br>这一刻，他们被我记录在视频里，这是他们鲜活的一刻。</p><p>黎明，万众齐聚，整装待发。<br>一声枪响，迈开步伐，进行不顾劳累、不知疲倦的奔跑。<br>这是澳门第44届国际马拉松，从 1981 年开始，到现在已经走过了 44 年。即使在疫情的那几年，也如常开展。参赛人数从最初的 400 人，发展到现在的 12000 人，从小众运动变成了五湖四海相聚的狂欢。</p><p>远处的天空已经泛红了，太阳逐渐要从地平线上冒出来。<br>人们跑上嘉乐庇总督大桥。大桥是以第121任澳门总督嘉乐庇的名字命名的，桥的这一头是氹仔岛，跑到另一头的时候，就到了澳门半岛，也就是澳门的老城区。它是连接澳门半岛与氹仔岛的第一座跨海大桥，也是澳门的标志性建筑之一。<br>大桥最高点距离海面 35 米，这相当于 10 层楼，所以对于跑步的人来说，这是一段极陡的坡。有些人开始慢下来，有些人仍然大步流星向前跑去。<br>桥上的路灯还在亮着，像一条尚未退场的星河。<br>从桥上向左边看去，月亮还在天空中安静地挂着，澳门旅游塔在它下方站得笔直，仿佛仍在守夜。<br>这座城市还在睡眠的边缘。赌场的灯光收敛起来，昨夜的喧闹被折叠进时间里。<br>脚步声在清晨的空气中显得格外清楚。我的心跳和呼吸的起伏，随着这座桥轻轻震动。<br>从桥上向右看去，友谊大桥的轮廓渐渐清晰，美高梅的高楼映着东方的红与蓝，那些色彩不急着分界，彼此渗透，像昼夜交替时短暂的妥协。</p><p>当你在跑步时，都在想些什么？<br>曾经有一个朋友这么问我。我当时没有回答出来这个问题，因为真的想不起来了，跑步的时候都想了什么。<br>跑步的时候想过很多很多，两个多小时，在那些轻松快乐的时段、步履沉重的时段、咬牙坚持的时段，无数个想法会冒出来，又转瞬即逝。就像我做过的那些奇奇怪怪的梦，如果不记录下来，可能就再也想不起来了。</p><p>我有多爱跑步呢？上学的时候，嫌走路太慢，经常跑步前进。初中时，每个课外活动时间，我都在操场的跑道上一直奔跑。然后是运动会的中长跑。从人生中的第一个马拉松开始，到现在已经参加过了 26 次马拉松比赛。<br>跑步的时候，跟着风一起飞翔，思绪像天上的云一样流淌，呼吸是自由的，所有束缚都被挣脱。<br>一直奔跑，像阿甘那样。那是我很喜欢的一部电影。<br>在西湖边奔跑，在太湖边奔跑。在群山中奔跑，在大海边奔跑。在城市里奔跑，在旷野里奔跑。在阳光下奔跑，在暴雨中奔跑。在人群中奔跑，独自一个人奔跑。<br>跑步大概已经成了我最大的一项体育爱好。<br>有那么一段时间，你不用扮演任何角色，不必证明什么，只需把一步交给下一步。人在这时候，会暂时回到一种更早的状态，像还不懂得比较、计算与权衡的时候，只知道向前。<br>它不承诺奇迹，也不制造传奇，只在每一次出发时提醒你，世界依然辽阔，身体依然可靠，而你，仍然可以选择继续向前。</p><p>翻过大桥最高点，人们的步伐加快了。<br>新葡京的轮廓在前方出现，那朵金色的莲花在晨光中逐渐显形。它锋利又华丽，像一把竖立的标志，迎接所有从海上、从桥上而来的目光。<br>这一刻，你并不需要理解它象征的财富、风水或欲望。它只是站在那里，见证着一群人在黎明时分，用最朴素的方式穿过城市。跑过桥，跑进老城区，跑进即将完全醒来的澳门。</p><p>跑过新葡京酒店，天已经完全亮了，人们开始在平地上奋力奔跑。道路开始变窄，人群又开始密集起来。<br>跑的快的人，这时已经在折返了。迎面而来的选手一批批掠过，脸上写着不同阶段的疲惫与专注。<br>我很喜欢这种迎面奔跑的感觉，节奏在不知不觉中被拉快。那是一种被感染的加速，来自对强者的本能敬意。<br>澳门的天气还是暖和的，20 度左右，绝大多数跑者都是短裤加 T 恤的搭配。汗水在挥洒，呼吸着带着海风的空气，这是一场快意十足的奔跑。<br>太阳从海面完全跃出时，光落在妈祖的塑像上，轮廓被勾得明亮而安静。它只是存在着，像路边的一棵树，默默看着人来人往。<br>跑完老城区，在西湾大桥之前，停下来喝水、吃香蕉补充能量，迎接下一阶段的挑战。<br>西湾大桥出现在前方，线条冷静而克制。竖琴式的索在空中拉开，像一首被拉长的乐曲。坡度开始变得漫长，力量被一点点抽走。有人走着，有人还在跑，每一种选择都显得诚实。到这里，比赛不再关于速度，而是关于是否愿意继续向前。<br>登上大桥最高点，世界忽然松开，又可以放肆奔跑了。长长的下坡是巨大的助力，那掉下去的速度在风中快速补回来。<br>桥下，半马与全马各自分流，有人即将结束征程，有人仍要继续更远的路。<br>终点的声音开始出现。加油声从路边传来，带着陌生人的善意。<br>身体已经很重了，但这是一个可以接受的重量。它来自过往几天的积累，也来自此刻仍在坚持的意志。<br>七天前在千岛湖参加半程马拉松，昨天走了大约十公里在澳门闲逛，早晨又走了三公里到达起点，所以对于我自己来说，这样的状态已经很好了，跑步的速度接近上一次比赛。<br>最后一圈跑道，奥林匹克体育中心在视野中旋转。当脚步踏过终点线，那一刻并没有想象中的喧嚣。更多的是一种安静的确认。你完成了，又一次，把自己送到了这里。</p><p>这是一次完整的马拉松参赛记录，从出发来澳门，到离开，拍了很多照片和视频。<br>来澳门参加马拉松，既是一次冲动的选择，也是一次预谋已久的计划。马拉松新规让我以为千岛湖马拉松很可能被取消，所以看到澳门马拉松的报名信息时，毫不犹豫就报了名。朋友前一年去澳门给我带了特产，那是第一次和澳门的直接联系，所以当有了机会时，便有了这次澳门马拉松之行。</p><p>澳门的繁华之光在一座座高楼之间流动，夜晚更加流光溢彩。这片土地诞生着各种传奇，也书写着酸甜苦辣的不同生活。这里有富豪、中产，有世界各地前来掘金的人，也有很多来自落后地区只为混一口饭的人。不同的肤色、不同的语言、不同的文化在这里混合。有人在这里完成跃迁，有人只是短暂停靠。不同的来处，不同的去向，在同一片灯火下各自生活。<br>有序和混乱交织，这是社会，也是人生。有人站上高峰放眼绝世风景，有人还在山脚辛苦攀登。可无论位置如何，脚下的土地始终真实，时间也从不偏袒谁。</p><p>2025 年过去得很快，对于我来说，它只有半年的长度。<br>我既喜欢安安稳稳待在一个地方，享受风轻云淡的生活，也喜欢不时去外面探索不同的风景。安稳不是停滞，出走也不是逃离。它们更像呼吸的两端，彼此需要，互相成全。<br>未来还有很长，只要走出去，世界就会给出回应。有些是风景，有些是疲惫，有些只是安静地告诉你，此刻正在生活。这样就已经足够了。</p><p>坐上人生这趟列车，跟着时间一起向前走去。四十年的风雨没有让道路变得平坦，只是让人学会在颠簸中站稳。<br>有些人走进了我的生活，停留下来，成为至交。有些人来了又走了，可能再也不会见到。有些人永远地离开了，只有在另外一个世界才能相会。人与人的相遇，终究无法排序。有的并肩很久，有的擦肩而过，有的只留下一个缺口，却在记忆里反复回声。</p><p>人随着年龄变大、变老，会发生很多变化。比如更加务实了，认为财富是一切的基础，所有精力围绕财富展开行动。比如更加悲观了，认为人生不过是一场苦旅毫无意义，所以要么日渐消沉要么及时行乐。也有的更加激进了，认为人生前半段的遗憾都是世界带给他的伤害，必须一一讨还回来。<br>人生到站，人生谢幕，艰难困苦，酸甜苦辣，喜怒哀乐，爱恨情仇，随风散尽。<br>你我相识一场，皆是缘分，抑或造化。夹一片树叶放入书本，让它成为独特的痕迹，留在时间的长河里。</p>]]></description>
</item>
<item>
<title>直播流量及费用计算</title>
<link>/post/zhi-bo-liu-liang-ji-fei-yong-ji-suan/</link>
<author>牧天</author><pubDate>2025-08-03T16:23:45+08:00</pubDate>
<guid isPermalLink="true">/post/zhi-bo-liu-liang-ji-fei-yong-ji-suan/</guid>
<comment>/post/zhi-bo-liu-liang-ji-fei-yong-ji-suan/#comment-zhi-bo-liu-liang-ji-fei-yong-ji-suan</comment>
<description><![CDATA[<p>要计算 <strong>1000人同时观看2小时直播</strong> 所消耗的流量，我们可以使用以下公式：</p><h3><strong>流量计算公式</strong></h3><p><img src="/storage/777cddae.png" alt="" title=""></p><h3><strong>假设条件</strong></h3><ul><li><strong>直播码率</strong>：通常视频直播的码率在 <strong>1Mbps</strong>（标清）到 <strong>3Mbps</strong>（高清）之间。这里我们以 <strong>1Mbps</strong> 为例计算。</li><li><strong>直播时长</strong>：2小时 = <strong>7200秒</strong>。</li><li><strong>观看人数</strong>：1000人。</li></ul><h3><strong>计算过程</strong></h3><p><img src="/storage/09bac164.png" alt="" title=""></p><h3><strong>结果</strong></h3><ul><li><strong>1000人观看2小时直播（1Mbps码率）约消耗 900GB 流量</strong>。</li><li>如果码率提高到 <strong>2Mbps</strong>，流量消耗会翻倍至 <strong>1800GB</strong>；若 <strong>3Mbps</strong>，则 <strong>2700GB</strong>。</li></ul><h3><strong>费用估算（以0.26元/GB为例）</strong></h3><p><img src="/storage/59ec8a03.png" alt="" title=""></p><h3><strong>优化建议</strong></h3><ol><li><strong>降低码率</strong>：使用 <strong>H.265编码</strong> 或动态调整码率以减少流量消耗。</li><li><strong>使用CDN</strong>：优化分发效率，降低服务器压力。</li><li><strong>选择合适计费方式</strong>：部分云服务商提供包月带宽套餐，可能更经济。</li></ol><p>如需更精确的计算，可根据实际直播参数（如分辨率、帧率）调整码率。</p>]]></description>
</item>
<item>
<title>使用FFmpeg压缩mp4视频</title>
<link>/post/post-202508031047/</link>
<author>牧天</author><pubDate>2025-08-03T10:50:36+08:00</pubDate>
<guid isPermalLink="true">/post/post-202508031047/</guid>
<comment>/post/post-202508031047/#comment-post-202508031047</comment>
<description><![CDATA[<p>适合技术用户，支持高度自定义压缩参数。</p><p>常用命令示例：</p><h3>降低比特率（控制文件大小）：</h3><pre><code>
ffmpeg -i input.mp4 -b:v 1000k -bufsize 1000k output.mp4
</code></pre><p>-b:v 1000k：设置视频比特率为1000kbps（数值越小，文件越小，但画质越低）。</p><h3>降低分辨率（减少像素）：</h3><pre><code>
ffmpeg -i input.mp4 -vf &quot;scale=640:-1&quot; -c:a copy output.mp4
</code></pre><p>scale=640:-1：将宽度调整为640px，高度按比例缩放。</p><h3>更改编码格式（H.265更高效）：</h3><pre><code>
ffmpeg -i input.mp4 -c:v libx265 -crf 28 -c:a copy output.mp4
</code></pre><p>libx265：H.265编码（比H.264节省约30%~50%空间）。<br>-crf 28：画质参数（18~28是常用范围，值越大压缩率越高）。</p>]]></description>
</item>
<item>
<title>使用FFmpeg下载m3u8文件为视频</title>
<link>/post/shi-yong-ffmpeg-xia-zai-m3u8-wen-jian-wei-shi-pin/</link>
<author>牧天</author><pubDate>2025-08-02T19:03:59+08:00</pubDate>
<guid isPermalLink="true">/post/shi-yong-ffmpeg-xia-zai-m3u8-wen-jian-wei-shi-pin/</guid>
<comment>/post/shi-yong-ffmpeg-xia-zai-m3u8-wen-jian-wei-shi-pin/#comment-shi-yong-ffmpeg-xia-zai-m3u8-wen-jian-wei-shi-pin</comment>
<description><![CDATA[<h3>使用 FFmpeg</h3><p>FFmpeg 是最简单高效的工具，支持直接合并和转码：</p><h4>安装 FFmpeg</h4><ul><li>Windows：从 <a href="https://ffmpeg.org/download.html">官网（https://ffmpeg.org/download.html）</a> 下载 并添加环境变量</li><li>Mac：<code>brew install ffmpeg</code></li><li>Linux：<code>sudo apt install ffmpeg</code></li></ul><h4>执行下载命令</h4><pre><code>ffmpeg -i &quot;您的M3U8链接&quot; -c copy output.mp4</code></pre><p>替换 您的 M3U8 链接 为完整 URL（用引号包裹）</p><p>示例：</p><pre><code>ffmpeg -i &quot;https://www.baidu.com/v.f100230.m3u8&quot; -c copy video.mp4</code></pre><p>完成后会在当前目录生成 video.mp4</p>]]></description>
</item>
<item>
<title>阿里云ECS CentOS7挂载数据盘到/www目录操作指南</title>
<link>/post/a-li-yun-ecs-centos7-gua-zai-shu-ju-pan-dao-www-mu-lu-cao-zuo-zhi-nan/</link>
<author>牧天</author><pubDate>2025-07-19T14:56:52+08:00</pubDate>
<guid isPermalLink="true">/post/a-li-yun-ecs-centos7-gua-zai-shu-ju-pan-dao-www-mu-lu-cao-zuo-zhi-nan/</guid>
<comment>/post/a-li-yun-ecs-centos7-gua-zai-shu-ju-pan-dao-www-mu-lu-cao-zuo-zhi-nan/#comment-a-li-yun-ecs-centos7-gua-zai-shu-ju-pan-dao-www-mu-lu-cao-zuo-zhi-nan</comment>
<description><![CDATA[<h2>系统环境</h2><ul><li>操作系统：CentOS 7</li><li>服务器：阿里云ECS</li><li>数据盘：/dev/nvme1n1 (42.9GB NVMe 磁盘)</li><li>目标目录：/www</li></ul><h2>操作步骤</h2><h3>1. 确认磁盘状态</h3><p><code>fdisk -l</code></p><h3>2. 创建GPT分区表</h3><p><code>parted /dev/nvme1n1 mklabel gpt</code></p><h3>3. 创建主分区</h3><p><code>parted -a optimal /dev/nvme1n1 mkpart primary 0% 100%</code></p><h3>4. 格式化分区</h3><p><code>mkfs.ext4 /dev/nvme1n1p1</code></p><h3>5. 创建挂载目录</h3><p><code>mkdir -p /www</code></p><h3>6. 获取分区UUID</h3><p><code>blkid /dev/nvme1n1p1</code><br>记录输出的UUID值（例如：d6a5e5c3-7f2b-4a1d-9c8d-3b6f9e8d7c6a）</p><h3>7. 更新/etc/fstab</h3><p><code>vi /etc/fstab</code><br>在文件末尾添加（替换为实际UUID）：<br><code>UUID=你的实际UUID /www ext4 defaults,nofail 0 0</code></p><h3>8. 应用挂载配置</h3><pre><code>partprobe /dev/nvme1n1
mount -a
df -hT | grep /www</code></pre><h3>9. 设置目录权限</h3><p><code>chmod 755 /www</code></p><p>如果是Web服务器，额外执行：<br><code>chown -R www:www /www</code></p><h3>10. 验证自动挂载</h3><pre><code>reboot
df -hT | grep /www</code></pre><h2>验证操作</h2><pre><code>echo &quot;Data Disk Mount Test&quot; &gt; /www/test.txt
cat /www/test.txt
lsblk -f</code></pre><h2>常见问题解决</h2><h3>1. mount -a 报错 "special device UUID=... does not exist"</h3><pre><code>blkid /dev/nvme1n1p1
vi /etc/fstab  # 确认UUID正确```
### 2. 重启后无法进入系统（fstab配置错误）
1. 重启时按任意键中断启动
2. 选择启动项后按 `e` 进入编辑模式
3. 在 `linux16` 行末尾添加 `rd.break`
4. 按 Ctrl+X 进入救援模式
5. 执行：</code></pre><p>mount -o remount,rw /sysroot<br>chroot /sysroot<br>vi /etc/fstab # 修正错误<br>exit<br>reboot</p><pre><code>### 3. 磁盘空间未完全使用
```resize2fs /dev/nvme1n1p1```

## 最终检查清单

1. 确认数据盘无重要数据

2. 正确记录分区UUID

3. /etc/fstab 中使用UUID而非设备名

4. 添加了 `nofail` 参数

5. 执行 `mount -a` 无报错

6. 重启后挂载正常</code></pre>]]></description>
</item>
<item>
<title>2024，命运已定</title>
<link>/post/2024--ming-yun-yi-ding/</link>
<author>牧天</author><pubDate>2025-07-19T14:15:20+08:00</pubDate>
<guid isPermalLink="true">/post/2024--ming-yun-yi-ding/</guid>
<comment>/post/2024--ming-yun-yi-ding/#comment-2024--ming-yun-yi-ding</comment>
<description><![CDATA[<p>2023年在不知不觉中结束了，有时觉得时间飞快，有时又觉得时间缓慢。</p><p>在很多个瞬间，都有很多话想对这一年说，可是真的静下来想写点什么的时候，又突然没了话，不知道该说点什么。  <br>这就像和那个人在一起一样，没时间联系的时候，脑子里攒满了想说的话，可是等到空下来可以联系的时候，脑子里突然空白了。</p><p>这一年似乎仍然过得浑浑噩噩，没有做出来什么自己值得庆贺的事情，能够安慰自己的，是运动量多了很多。</p><p>回望这一年的旅途，很多旅途现在都感觉像是梦境一般不太真实了，觉得它很遥远。我在那个村子里走过的路，在那个山脚停留的片刻，现在都显得很不真实，恍惚间以为是一年前的事情，可是才过去了三个月而已。</p><p>这一年的记忆，从寒冷的北京街头开始，穿过杭州的寒冬，走过春夏秋，又来到了冬天。  <br>今年的冬天显得特别冷，零下五度的市区温度，让室外的几盆绿植奄奄一息。雪若有若无地下了一场，而我没有看到。</p><p>很多个夜晚辗转反侧，难以入睡，入睡时间从十点变成了十一点、十二点，然后是一点、两点、三点……  <br>经过漫长的自我治疗，总算可以在12点前入睡了。虽然还是睡得不太踏实，但总算情况越来越好。</p><p>该经历的劫难还是要经历的，一步一步变得更加坚毅，是此生必定要修的功课。  <br>很多人觉得人这一生太累，太辛苦。</p><blockquote>上面在2023年12月28日写完后就再也没动，现在是2024年8月29日。</blockquote><p>很多人觉得人这一生太累，太辛苦。  <br>是这样，谁的人生都不轻松，一帆风顺的人生实在太少。</p><p>站在山脚下的人，会仰望山顶的人，感觉那里风光无限，人生惬意。  <br>站在山顶的人，俯视山脚的人，又觉得平平淡淡才是真，位置越高越身不由己。</p><p>透过人生无数个间隙，越来越深切感受“普通人”这三个字。  <br>我告诫自己，我只是一个普通人。承认自己是普通人，意味着我不需要再去为我达不到的目标耗费时间，我不需要再去为我承担不了的责任感到愧疚，我接受自己所遭遇的挫折可能解决不了的现实。</p><p>我不是天之骄子，也不是旷世奇才，甚至连一个堪堪优秀的人也算不上，此时此刻，我就是一个微不足道的普通人。  <br>我是个凡人而已，不要太苛求自己，也不要太高看自己。踏踏实实走好当下每一步，其他听天由命。</p><p>这个时代的问题是，资本、精英裹挟着普通人在前进，让普通人的欲望越来越大，觉得自己有希望逆袭改变命运。所以很多人自命不凡，始终在追逐自己达不到的目标，辛辛苦苦却又感觉不幸福。</p><p>如今我们已经有能力过上不错的生活，如果一直疲于奔命，就容易忘记自己是谁了，然后掉进陷阱里面。</p><p>人世一切皆虚浮，但人又摆脱不了欲望的纠缠，责任加身，又不能自暴自弃。所以看透欲望，不被它束缚，不迷失自己，是一件非常重要的事情。  <br>作为一个普通人，直面自己的欲望，看清它，与它共处，接受自己的缺点，也许才能过得安心一些。</p><p>站在2023的结尾，看向2024的时候，并不知道未来一年会遭遇什么，这艘生命的小船始终在漂荡，期望靠岸，却又不肯划桨往岸边去靠。  <br>就连这篇总结，都拖到了2024年的下半年，所以可以说状态是非常不好，如果按照以往的标准的话。</p><p>时不时会蹦出来一些想法，比如做个浪子，比如做个魔道中人。把自己放低，低到尘埃里，重新积聚能量。  <br>总想告诉自己停下来，要认真回望，不要再浑浑噩噩。</p><p>2023就这样吧，结束了一种状态，进入到另一种状态，不管是叫它低谷，还是挫折，或者不如意，终归还是需要接受阳光照射，寻一个明媚的世界，再继续活着。</p><blockquote>2024年8月29日写完此文，2025年7月19日发出。</blockquote>]]></description>
</item>
<item>
<title>关于GeoJson与SVG格式的转换</title>
<link>/post/guan-yu-geojson-yu-svg-ge-shi-de-zhuan-huan/</link>
<author>牧天</author><pubDate>2024-04-25T22:26:17+08:00</pubDate>
<guid isPermalLink="true">/post/guan-yu-geojson-yu-svg-ge-shi-de-zhuan-huan/</guid>
<comment>/post/guan-yu-geojson-yu-svg-ge-shi-de-zhuan-huan/#comment-guan-yu-geojson-yu-svg-ge-shi-de-zhuan-huan</comment>
<description><![CDATA[<p>高级UI工程师必备：矢量地图问题汇总<br><a href="https://zhuanlan.zhihu.com/p/74047925">https://zhuanlan.zhihu.com/p/74047925</a></p><p>geojson.io：这个网站最牛的地方在于，你可以在线用路径工具生成一个geojson文件。</p><p>具体操作步骤是这样的：首先你把这个县级市的json文件加载上去。这个就会定位到你要编辑的地区上（其实就是在线加载你的json文件并展示）。然后，重点来了，用路径工具对着客户给的截屏，一个点一个点的画行政区域（注意！一定要细心！每一个区域的边界最好对齐一点，对的严丝合缝当然最好，不过挺难的也不必要）。最后，每个行政区域给他命名，简单编辑一下属性，保存。下载得到的json文件扔给前端。</p><p>阿里云DataV.GeoAtlas：<a href="https://datav.aliyun.com/portal/school/atlas/area_generator">https://datav.aliyun.com/portal/school/atlas/area_generator</a></p><p>geojson-to-svg-cli：<a href="https://github.com/derhuerst/geojson-to-svg-cli">https://github.com/derhuerst/geojson-to-svg-cli</a></p><p>村镇级别geojson获取方法：<a href="https://juejin.cn/post/7257333598468997178">https://juejin.cn/post/7257333598468997178</a></p><p>Vector Magin：用于将png转换为svg工具<br>Svg2geojson工具：<a href="https://github.com/Phrogz/svg2geojson">https://github.com/Phrogz/svg2geojson</a><br>geojson添加属性工具：<a href="http://geojson.io/">http://geojson.io/</a>（需要T子）<br>geojson压缩工具：<a href="https://mapshaper.org/">https://mapshaper.org/</a>（需要T子）</p><p>高德地图中的行政区域绘制：/storage/16da7d45.html</p>]]></description>
</item>
<item>
<title>Typora 的 Markdown 语法</title>
<link>/post/typora--de--markdown--yu-fa/</link>
<author>牧天</author><pubDate>2024-03-13T12:16:01+08:00</pubDate>
<guid isPermalLink="true">/post/typora--de--markdown--yu-fa/</guid>
<comment>/post/typora--de--markdown--yu-fa/#comment-typora--de--markdown--yu-fa</comment>
<description><![CDATA[<p>概述<br>Markdown 由 Daring Fireball 创建，原始指南在 这里。但是，它的语法因不同的解析器或编辑器而异。Typora 正在使用 GitHub Flavored Markdown。</p><p>大纲</p><p>概述<br>块元素<br>段落和换行符<br>标题<br>引用文字<br>列表<br>任务列表<br>（栅栏式）代码块<br>数学公式块<br>表格<br>脚注<br>水平线<br>YAML Front Matter<br>目录 (TOC)<br>图表 (Sequence, Flowchart and Mermaid)<br>Span 元素<br>链接<br>内部链接<br>参考链接<br>URL网址<br>图片<br>强调（斜体）<br>粗体<br>代码<br>删除线<br>下划线<br>表情符号 :smile:<br>内联数学公式<br>下标<br>上标<br>高亮<br>HTML<br>嵌入内容<br>视频<br>其他 HTML 支持<br>块元素<br>段落和换行符<br>段落只是一行或多行连续的文本。在 markdown 源代码中，段落由多个空行分隔。在Typora中，您只需按下 Return 即可创建新段落。</p><p>按 Shift + Return 可创建单个换行符。但是，大多数 markdown 解析器将忽略单行中断，要使其他 markdown 解析器识别您的换行符，可以在行尾留下两个空格，或者插入 &lt;br/&gt;.</p><p>标题<br>标题在行的开头使用1-6个＃字符，对应于标题级别1-6。例如：</p><h1>这是一级标题</h1><h2>这是二级标题</h2><h6>这是六级标题</h6><p>在typora中，输入’＃’后跟标题内容，按下 Return 键将创建标题。</p><p>引用文字<br>Markdown 使用电子邮件样式&gt;字符进行块引用。它们表示为：</p><blockquote>这是一个有两段的块引用。这是第一段。</p><p>这是第二段。Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.</blockquote><blockquote>这是另一个只有一个段落的块引用。有三个空行分隔两个块引用。<br>在typora中，只需输入’&gt;’后跟引用内容即可生成块引用。Typora将为您插入正确的“&gt;”或换行符。通过添加额外级别的“&gt;”允许在块引用内嵌入另一个块引用。</blockquote><p>列表<br>输入 <em> list item 1 将创建一个无序列表，该 </em> 符号可以替换为 + 或 -.</p><p>输入 1. list item 1 将创建一个有序列表，其 markdown 源代码如下：</p><h2>无序列表</h2><ul><li>红色</li><li>绿色</li><li>蓝色</li></ul><h2>有序列表</h2><ol><li>红色</li><li>绿色</li><li>蓝色</li></ol><p>任务列表<br>任务列表是标记为[ ]或[x]（未完成或完成）的项目的列表。例如：</p><ul><li>[ ] 这是一个任务列表项</li><li>[ ] 需要在前面使用列表的语法</li><li>[ ] normal <strong>formatting</strong>, @mentions, #1234 refs</li><li>[ ] 未完成</li><li>[x] 完成</li></ul><p>您可以通过单击项目前面的复选框来更改完成/未完成状态。</p><p>（栅栏式）代码块<br>Typora仅支持 Github Flavored Markdown 中的栅栏式代码块。不支持 markdown 中的原始代码块。</p><p>使用栅栏式代码块很简单：输入<code>`</code>之后输入一个可选的语言标识符，然后按return键后输入代码，我们将通过语法高亮显示它：</p><p>这是一个例子：</p><pre><code>function test() {
  console.log(&quot;notice the blank line before this function?&quot;);
}</code></pre><p>语法高亮：</p><pre><code class="ruby">require 'redcarpet'
markdown = Redcarpet.new(&quot;Hello World!&quot;)
puts markdown.to_html</code></pre><p>数学公式块<br>您可以使用 MathJax 渲染 LaTeX 数学表达式。</p><p>输入 $$, 然后按“return”键将触发一个接受Tex / LaTex源代码的输入区域。以下是一个例子： V1×V2=∣∣∣∣∣∣i∂X∂u∂X∂vj∂Y∂u∂Y∂vk00∣∣∣∣∣∣<br>在 markdown 源文件中，数学公式块是由’$$’标记包装的 LaTeX 表达式：</p><p>$$
\mathbf{V}_1 \times \mathbf{V}_2 =  \begin{vmatrix} 
\mathbf{i} &amp; \mathbf{j} &amp; \mathbf{k} \\
\frac{\partial X}{\partial u} &amp;  \frac{\partial Y}{\partial u} &amp; 0 \\
\frac{\partial X}{\partial v} &amp;  \frac{\partial Y}{\partial v} &amp; 0 \\
\end{vmatrix}
$$</p><p>表格<br>输入 | First Header | Second Header | 并按下 return 键将创建一个包含两列的表。</p><p>创建表后，焦点在该表上将弹出一个表格工具栏，您可以在其中调整表格，对齐或删除表格。您还可以使用上下文菜单来复制和添加/删除列/行。</p><p>可以跳过以下描述，因为表格的 markdown 源代码是由typora自动生成的。</p><p>在 markdown 源代码中，它们看起来像这样：</p><table><thead><tr><th>First Header</th><th>Second Header</th></tr></thead><tbody><tr><td>Content Cell</td><td>Content Cell</td></tr><tr><td>Content Cell</td><td>Content Cell</td></tr></tbody></table><p>您还可以在表格中包括内联 Markdown 语法，例如链接，粗体，斜体或删除线。</p><p>最后，通过在标题行中包含冒号：您可以将文本定义为左对齐，右对齐或居中对齐：</p><table><thead><tr><th align="left">Left-Aligned</th><th align="center">Center Aligned</th><th align="right">Right Aligned</th></tr></thead><tbody><tr><td align="left">col 3 is</td><td align="center">some wordy text</td><td align="right">$1600</td></tr><tr><td align="left">col 2 is</td><td align="center">centered</td><td align="right">$12</td></tr><tr><td align="left">zebra stripes</td><td align="center">are neat</td><td align="right">$1</td></tr></tbody></table><p>最左侧的冒号表示左对齐的列; 最右侧的冒号表示右对齐的列; 两侧的冒号表示中心对齐的列。</p><p>脚注<br>您可以像这样创建脚注<sup id="fnref-1"><a href="#fn-1" class="footnote-ref">1</a></sup>.</p><p>将产生：</p><p>您可以像这样创建脚注1.</p><p>鼠标移动到‘footnote’上标中查看脚注的内容。</p><p>水平线<br>输入 <em>*</em> 或 --- 在空行上按 return 键将绘制一条水平线。</p><p>YAML Front Matter<br>Typora 现在支持 YAML Front Matter 。 在文章顶部输入 --- 然后按 Enter 键将引入一个，或者从菜单中插入一个元数据块。</p><p>目录 (TOC)<br>输入 [toc] 然后按 Return 键将创建一个“目录”部分，自动从文档内容中提取所有标题，其内容会自动更新。</p><p>图表 (Sequence, Flowchart and Mermaid)<br>Typora 支持, sequence, flowchart and mermaid, 使用前要先从偏好设置面板启用该功能。</p><p>详细信息请参阅此 文档</p><p>Span 元素<br>在您输入后Span元素会被立即解析并呈现。在这些span元素上移动光标会将这些元素扩展为markdown源代码。以下将解释这些span元素的语法。</p><p>链接<br>Markdown 支持两种类型的链接：内联和引用。</p><p>在这两种样式中，链接文本都写在[方括号]内。</p><p>要创建内联链接，请在链接文本的结束方括号后立即使用一组常规括号。在常规括号内，输入URL地址，以及可选的用引号括起来的链接标题。例如：</p><p>This is <a href="http://example.com/">an example</a> inline link.</p><p><a href="http://example.net/">This link</a> has no title attribute.<br>将产生：</p><p>This is an example inline link. (&lt;p&gt;This is <a href="http://example.com/" title="Title">)</p><p>This link has no title attribute. (&lt;p&gt;<a href="http://example.net/">This link</a> has no)</p><p>内部链接<br>您可以将常规括号内的 href 设置为文档内的某一个标题，这将创建一个书签，允许您在单击后跳转到该部分。例如：</p><p>Command(在Windows上：Ctrl) + 单击 此链接 将跳转到标题 块元素处。 要查看如何编写，请移动光标或按住 ⌘ 键单击以将元素展开为 Markdown 源代码。</p><p>参考链接<br>参考样式链接使用第二组方括号，在其中放置您选择的标签以标识链接：</p><p>This is <a href="http://example.com/">an example</a> reference-style link.</p><p>然后，在文档中的任何位置，您可以单独定义链接标签，如下所示：</p><p>在typora中，它们将呈现为：</p><p>This is an example reference-style link.</p><p>隐式链接名称快捷方式允许您省略链接的名称，在这种情况下，链接文本本身将用作名称。只需使用一组空的方括号，例如，将“Google”一词链接到google.com网站，您只需写下：</p><p>[Google][]<br>然后定义链接：</p><p>在typora中单击链接将其展开以进行编辑，command + 单击将在 Web 浏览器中打开超链接。</p><p>URL网址<br>Typora允许您将 URL 作为链接插入，用 &lt;括号括起来&gt;。</p><p>&lt;i@typora.io&gt; 成为 i@typora.io.</p><p>Typora也将自动链接标准URL。例如： www.google.com.</p><p>图片<br>图像与链接类似， 但在链接语法之前需要添加额外的 ! 字符。 图像语法如下所示：</p><p><img src="/path/to/img.jpg" alt="替代文字" title="替代文字"></p><p><img src="/path/to/img.jpg" alt="替代文字" title="替代文字"><br>您可以使用拖放操作从图像文件或浏览器来插入图像。并通过单击图像修改 markdown 源代码。如果图像在拖放时与当前编辑文档位于同一目录或子目录中，则将使用相对路径。</p><p>有关图像的更多提示，请阅读 <a href="http://support.typora.io//Images/">http://support.typora.io//Images/</a></p><p>强调（斜体）<br>Markdown 将星号 (<em>) 和下划线(_) 视为强调的指示。用一个 </em> or _ 包裹文本将使用HTML <em> 标签包裹文本。例如：</p><p><em>单个星号</em></p><p><em>单个下划线</em><br>输出：</p><p>单个星号</p><p>单个下划线</p><p>GFM将忽略单词中的下划线，这通常用在代码和名称中，如下所示：</p><p>wow_great_stuff</p><p>do_this_and_do_that_and_another_thing.</p><p>要在用作强调分隔符的位置生成文字星号或下划线，可以用反斜杠转义：</p><p>*这个文字被文字星号包围*<br>Typora建议使用 * 号.</p><p>粗体<br>用两个 * 或 _ 包裹的文本将使用HTML <strong> 标签包裹，例如：</p><p><strong>双星号</strong></p><p><strong>双重下划线</strong><br>输出：</p><p>双星号</p><p>双重下划线</p><p>Typora 建议使用 ** 号。</p><p>代码<br>要指示代码范围，请使用反引号（`）进行包裹。与预格式化的代码块不同，代码跨度表示正常段落中的代码。例如：</p><p>使用<code>printf()</code>函数。<br>将产生：</p><p>使用 printf() 函数。</p><p>删除线<br>GFM通过添加语法来创建删除线文本，标准的Markdown中缺少该文本。</p><p><del>错误的文字。</del> 变成 错误的文字。</p><p>下划线<br>下划线由原始HTML提供支持。</p><p>&lt;u&gt;下划线&lt;/u&gt; 变成 下划线</p><p>表情符号 :smile:<br>输入表情符号的语法是 :smile:</p><p>用户可以通过 ESC 按键触发表情符号的自动完成建议，或者在偏好设置面板里启用后自动触发表情符号。此外，还支持直接从 Edit -&gt; Emoji & Symbols 菜单栏输入UTF8表情符号字符。</p><p>内联数学公式<br>要使用此功能，首先，请在 偏好设置 面板 -&gt; Markdown扩展语法 选项卡中启用它。然后使用 $ 来包裹TeX命令，例如： $lim_{x to infty} exp(-x) = 0$ 将呈现为LaTeX命令。</p><p>要触发内联公式的预览提示功能：输入“$”, 然后按 ESC 键, 然后输入TeX命令, 预览工具提示将如下所示：</p><p>下标<br>要使用此功能，首先，请在 偏好设置 面板 -&gt; Markdown扩展语法 选项卡中启用它。然后用 ~ 来包裹下标内容，例如： H~2~O, X~long text~/</p><p>上标<br>要使用此功能，首先，请在 偏好设置 面板 -&gt; Markdown扩展语法 选项卡中启用它。然后用 ^ 来包裹上标内容，例如： X^2^。</p><p>高亮<br>要使用此功能，首先，请在 偏好设置 面板 -&gt; Markdown扩展语法 选项卡中启用它。然后用 == 来包裹高亮内容，例如： ==highlight==。</p><p>HTML<br>您可以使用HTML来设置纯 Markdown 不支持的内容，例如， &lt;span style=&quot;color:red&quot;&gt;this text is red&lt;/span&gt; 用于添加红色文本。</p><p>嵌入内容<br>有些网站提供基于iframe的嵌入代码，您也可以将其粘贴到Typora中，例如：</p><p>&lt;iframe height='265' scrolling='no' title='Fancy Animated SVG Menu' src='<a href="http://codepen.io/jeangontijo/embed/OxVywj/?height=265&amp">http://codepen.io/jeangontijo/embed/OxVywj/?height=265&amp</a>;theme-id=0&amp;default-tab=css,result&amp;embed-version=2' frameborder='no' allowtransparency='true' allowfullscreen='true' style='width: 100%;'&gt;&lt;/iframe&gt;<br>视频<br>您可以使用 &lt;video&gt; HTML标记嵌入视频，例如：</p><p>&lt;video src=&quot;xxx.mp4&quot; /&gt;<br>其他 HTML 支持<br>你可以在 这里找到细节。</p><p>Here is the text of the footnote. ↩</p><div class="footnotes"><hr><ol><li id="fn-1"> Here is the <em>text</em> of the <strong>footnote</strong>. <a href="#fnref-1" class="footnote-backref">&#8617;</a></li></ol></div>]]></description>
</item>
<item>
<title>TDuckX开源表单收集系统</title>
<link>/post/tduckx-kai-yuan-biao-dan-shou-ji-xi-tong/</link>
<author>牧天</author><pubDate>2023-12-26T17:45:01+08:00</pubDate>
<guid isPermalLink="true">/post/tduckx-kai-yuan-biao-dan-shou-ji-xi-tong/</guid>
<comment>/post/tduckx-kai-yuan-biao-dan-shou-ji-xi-tong/#comment-tduckx-kai-yuan-biao-dan-shou-ji-xi-tong</comment>
<description><![CDATA[<p>TDuckX 是一款基于Vue3全新技术栈打造的国际化表单收集系统，是全新一代企业私有数据收集底座和私有化业务流转平台。<br>支持数据采集、考试测评、工作流审批、订单收款、活动预约、核销投票、模板打印等功能。<br>并支持国际化适配、针对不同表单之间的数据关联、数据结果自动化处理。<br>内置40+内置组件，巧妙搭配使用，能够轻松满足90%的日常业务需求。 同时支持私有化、源码交付方案，使用填鸭表单进行二次开发让效率倍增。</p><p><strong>演示环境</strong><br><a href="https://x.tduckcloud.com">https://x.tduckcloud.com</a><br>使用微信扫码/注册账号即可登录<br>演示环境是提供给您用作功能体验、采购调研评估使用；我们不能保证在这个环境上的数据持久性，为了安全起见，我们设置了定时重置任务；请您不要将此环境创建的任何表单用作正式环境使用。</p><p><strong>技术架构</strong><br>Maven 多模块单体架构，Mvc设计模式，前后端分离。支持横向多节点集群部署。<br>tduck-x-platform是填鸭表单旗舰版的后端服务项目，为项目提供全部的接口支持。<br>tduckx前端，使用 Vue3、Vite、Element-Plus、TypeScript、Pinia等主流技术栈开发。</p><p><strong>开发环境</strong><br>语言：Java 8+ (小于17)<br>IDE (JAVA)： IDEA (必须安装Lombok插件 )<br>依赖管理：Maven 3.5.4+<br>缓存：Redis 3.0+<br>数据库脚本：MySQL5.7 +<br>后端技术栈介绍<br>基础框架：Spring Boot 2.7.8<br>微服务框架： Spring Cloud Alibaba 2021.0.1.0<br>持久层框架：MybatisPlus 3.5.3.1<br>安全框架：Spring Security 2.7.8<br>数据库连接池：Hikari<br>Servlet容器：Undertow:2.7.8<br>流程引擎：Flowable 6.6.0<br>其他： Hutool knife4j WxJava 等</p><p><strong>前端技术栈介绍</strong><br>tduckx前端，使用 Vue3、Vite、Element-Plus、TypeScript、Pinia等主流技术栈开发</p><p>目前非全部完成ts以及setup语法化，存在部分js和option语法，之后计划逐步setup语法化。</p>]]></description>
</item>
<item>
<title>Nginx禁止未绑定域名和IP访问服务器</title>
<link>/post/nginx-jin-zhi-wei-bang-ding-yu-ming-he-ip-fang-wen-fu-wu-qi/</link>
<author>牧天</author><pubDate>2023-12-13T16:18:01+08:00</pubDate>
<guid isPermalLink="true">/post/nginx-jin-zhi-wei-bang-ding-yu-ming-he-ip-fang-wen-fu-wu-qi/</guid>
<comment>/post/nginx-jin-zhi-wei-bang-ding-yu-ming-he-ip-fang-wen-fu-wu-qi/#comment-nginx-jin-zhi-wei-bang-ding-yu-ming-he-ip-fang-wen-fu-wu-qi</comment>
<description><![CDATA[<p>nginx的配置文件参考如下思路</p><pre><code>server {
 listen 80 default_server;
 listen 443 ssl default_server;
 server_name _;
 return 444;
 ssl_certificate default_server.com_bundle.crt;
 ssl_certificate_key default_server.com.key;
}

server {
    listen 80;
    server_name default_server;
    rewrite ^(.*)$ https://${server_name}$1 permanent;
}
server {
    listen       443 ssl;
    server_name  tool.os000.com;
        index _;
        root /alidata/www/tool;
        ssl on;
        ssl_certificate 1default_server_bundle.crt;
        ssl_certificate_key default_server.key;
        ssl_session_timeout 5m;
        ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256::!MD5;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        add_header Strict-Transport-Security &quot;max-age=31536000&quot;;
        location / {
                proxy_pass http://127.0.0.1:8980/;
                #proxy_redirect off;
                proxy_set_header Host $host;
                #proxy_set_header X-Real-Ip $remote_addr;
                #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_redirect http:// https//;
       }

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
                expires 30d;
        }

        location ~ .*\.(js|css)?$
        {
                expires 1h;
        }

        access_log  /alidata/log/nginx/access/default.log;
}</code></pre><p>参考来源：<br><a href="https://zhuanlan.zhihu.com/p/616732358">https://zhuanlan.zhihu.com/p/616732358</a><br><a href="https://cloud.tencent.com/developer/article/2189226">https://cloud.tencent.com/developer/article/2189226</a><br><a href="https://www.cnblogs.com/mayanan/p/16727764.html">https://www.cnblogs.com/mayanan/p/16727764.html</a></p>]]></description>
</item>
<item>
<title>php的open_basedir问题</title>
<link>/post/php-de-open_basedir-wen-ti/</link>
<author>牧天</author><pubDate>2023-12-13T16:11:54+08:00</pubDate>
<guid isPermalLink="true">/post/php-de-open_basedir-wen-ti/</guid>
<comment>/post/php-de-open_basedir-wen-ti/#comment-php-de-open_basedir-wen-ti</comment>
<description><![CDATA[<p>LNMP环境中，出现以下报错：<br>Warning: require(): open_basedir restriction in effect. File(/media/psf/Code/test/vendor/autoload.php) is not within the allowed path(s): (/www/web/kaola/www.kaolazufang.com/public/:/tmp/) in /media/psf/Code/test/public/index.php on line 34</p><p>vi /usr/local/nginx/conf/fastcgi.conf ，修改open_basedir的值<br>fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/../:/tmp/:/proc/";</p><p>无尾熊项目完整配置如下</p><pre><code>fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REQUEST_SCHEME     $scheme;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;
fastcgi_param PHP_ADMIN_VALUE &quot;open_basedir=$document_root/../:/tmp/:/proc/&quot;;</code></pre>]]></description>
</item>
<item>
<title>定义antd vue admin的&lt;a-range-picker&gt;的初始值</title>
<link>/post/ding-yi-antd-vue-admin-de-a-range-picker-de-chu-shi-zhi/</link>
<author>牧天</author><pubDate>2023-12-10T10:36:19+08:00</pubDate>
<guid isPermalLink="true">/post/ding-yi-antd-vue-admin-de-a-range-picker-de-chu-shi-zhi/</guid>
<comment>/post/ding-yi-antd-vue-admin-de-a-range-picker-de-chu-shi-zhi/#comment-ding-yi-antd-vue-admin-de-a-range-picker-de-chu-shi-zhi</comment>
<description><![CDATA[<p>Template内容</p><pre><code>&lt;a-range-picker format=&quot;YYYY-MM-DD&quot;  v-decorator=&quot;['betweenTime',{ initialValue: defaultDates }]&quot; /&gt;</code></pre><p>Script内容</p><pre><code>import moment from 'moment'
export default {
    data () {
      return {
        // 设置默认日期为今天
        defaultDates: [moment(), moment()],
      }
    }
  }</code></pre><p>扩展内容：</p><pre><code>      &lt;a-form-item
        label=&quot;时间范围&quot;
        :labelCol=&quot;{span: 7}&quot;
        :wrapperCol=&quot;{span: 17}&quot;
                :required=&quot;true&quot;
      &gt;
        &lt;a-range-picker  
                    :ranges='timeRange'
                    :default-value=&quot;[
                       moment().startOf('month'),
                       moment().startOf('day'),
                    ]&quot;
                    :placeholder=&quot;['开始时间', '结束时间']&quot;
                    @change=&quot;createChange&quot;
                    style=&quot;width: 100%&quot; 
                /&gt;
      &lt;/a-form-item&gt;</code></pre><pre><code>import moment from 'moment'
export default {
  name: 'SampleChoice',
    data () {
      return {
            trainForm: {
                dateRange: {
                    beginTime: moment().startOf('month').format('YYYY-MM-DD'),
                    endTime: moment().startOf('day').format('YYYY-MM-DD')
                }
            },
            timeRange:
            {
                今天: [moment().startOf('day'), moment()],
                昨天: [moment().startOf('day').subtract(1,'days'), moment().endOf('day').subtract(1, 'days')],
                最近三天: [moment().startOf('day').subtract(2, 'days'), moment().endOf('day')],
                最近一周: [moment().startOf('day').subtract(1, 'weeks'), moment()],
                本月: [moment().startOf('month'), moment()],
                本年: [moment().startOf('year'), moment()]
            },
      }
    },
  methods: {
        moment,
        createChange(dates, dateStrings) {
          this.trainForm.dateRange.beginTime = dateStrings[0]
          this.trainForm.dateRange.endTime = dateStrings[1]
        },
  }
}
</code></pre><p>参考资料：<a href="https://www.jianshu.com/p/3246f0ce98d6">https://www.jianshu.com/p/3246f0ce98d6</a></p>]]></description>
</item>
<item>
<title>伤</title>
<link>/post/shang/</link>
<author>牧天</author><pubDate>2023-12-01T21:29:07+08:00</pubDate>
<guid isPermalLink="true">/post/shang/</guid>
<comment>/post/shang/#comment-shang</comment>
<description><![CDATA[<p>人在同一个地方受的伤，只能在同一个地方被治愈。<br>可是，又有几个人拥有这样的机会，可以回到原来那个地方。<br>所以，伤痕累累，逐渐沧桑。</p>]]></description>
</item>
<item>
<title>Android Studio汉化教程</title>
<link>/post/android-studio-han-hua-jiao-cheng/</link>
<author>牧天</author><pubDate>2023-11-21T17:30:49+08:00</pubDate>
<guid isPermalLink="true">/post/android-studio-han-hua-jiao-cheng/</guid>
<comment>/post/android-studio-han-hua-jiao-cheng/#comment-android-studio-han-hua-jiao-cheng</comment>
<description><![CDATA[<blockquote>Android Studio的默认界面是英文的，那么，怎么设置中文呢？</blockquote><p>Android Studio的插件是在IntelliJ Platform应用市场下载的，所以，我们只要在这个网站下载离线插件就可以了。<br>具体步骤如下：</p><p>1、点击下方链接进入IntelliJ Platform插件页面</p><p><a href="https://plugins.jetbrains.com/plugin/13710-chinese-simplified-language-pack----/versions#tabs">Chinese (Simplified) Language Pack / 中文语言包 - IntelliJ IDEs Plugin | Marketplace</a></p><p>2、点击download</p><p><img src="http://pub.mutian.net/storage/5c6426df.webp" alt="" title=""></p><p>3、打开刚刚下载的zip，解压</p><p>4、打开Android Studio设置界面，然后按下图操作</p><p><img src="http://pub.mutian.net/storage/afc8ac70.webp" alt="" title=""></p><p>5、找到刚刚解压的jar文件，点击OK</p><p><img src="http://pub.mutian.net/storage/e6a70aee.webp" alt="" title=""></p><p>(如果提示版本不兼容则下载兼容版本）</p><h2>以下方法已无效</h2><h2>准备</h2><p>Android Studio</p><h2>开始</h2><p>打开Android Studio</p><p><img src="http://pub.mutian.net/storage/1f35c4f0.webp" alt="" title=""></p><p>点击&lt;Configure&gt;,选择&lt;Settings&gt;</p><p><img src="http://pub.mutian.net/storage/d6295df5.webp" alt="" title=""></p><p>在弹出的界面，单击&lt;Plugins&gt;</p><p><img src="http://pub.mutian.net/storage/3223a579.webp" alt="" title=""></p><p>搜索&lt;Chinese&gt;，下载第二个</p><p><img src="http://pub.mutian.net/storage/3b200200.webp" alt="" title=""></p><p>单击&lt;Accept&gt;</p><p><img src="http://pub.mutian.net/storage/076be659.webp" alt="" title=""></p><p>等待安装，网络环境取决于安装速度</p><p><img src="http://pub.mutian.net/storage/9331ced4.webp" alt="" title=""></p><p>安装完成后，单击&lt;Restart IDE&gt;</p><p>再次点击&lt;Restart &gt;</p><p><img src="http://pub.mutian.net/storage/dae13926.webp" alt="" title=""></p><p>看看效果吧</p><p><img src="http://pub.mutian.net/storage/6f43ec10.webp" alt="" title=""></p>]]></description>
</item>
<item>
<title>自乐词  调一翦梅四首</title>
<link>/post/zi-le-ci----diao-yi-jian-mei-si-shou/</link>
<author>牧天</author><pubDate>2023-08-22T16:28:37+08:00</pubDate>
<guid isPermalLink="true">/post/zi-le-ci----diao-yi-jian-mei-si-shou/</guid>
<comment>/post/zi-le-ci----diao-yi-jian-mei-si-shou/#comment-zi-le-ci----diao-yi-jian-mei-si-shou</comment>
<description><![CDATA[<p>小门深巷巧安排，没有尘埃，却有莓苔。</p><p>自然潇洒胜蓬莱，山也幽哉，水也幽哉。</p><p>东风昨夜送春来，才见梅开，又见桃开。</p><p>十分相称主人怀，诗是生涯，酒是生涯。</p><p>一生风月且随缘，穷也悠然，达也悠然。</p><p>日高三丈我犹眠，不是神仙，谁是神仙。</p><p>绿杨深处昼鸣蝉，卷起湘帘，放出炉烟。</p><p>荷花池馆晚凉天，正好谈禅，又好谈玄。</p><p>扶舆清气属吾曹，莫怪粗豪，莫笑风骚。</p><p>算来名利也徒劳，何处为高，闲处为高。</p><p>一庭疏竹间芭蕉，风也潇潇，雨也潇潇。</p><p>木樨香里卧吹箫，且度今朝，谁管明朝。</p><p>于今挥手谢浮生，非不闲争，是不闲争。</p><p>扁舟湖上放歌行，渔也知名，牧也知名。</p><p>归来风景逼心清，雪满中庭，月满中庭。</p><p>一炉松火暖腾腾，看罢医经，又看丹经。</p><p>作者：李廷机，字尔张，号九我，晋江人。万历癸未，进士第一。除修撰，累官户部尚书，武英殿大学士、加少傅、赠太傅，谥文恪。</p><p>译文：在深巷中有这样的所在，布置得实在是精巧得很，四周环境洁净，路面上还有青苔。这真是浑然天成潇洒自在，与蓬莱相比还胜出几分，山也清幽，水也清幽。东风昨夜送来春的消息，让人刚欣赏过梅花的风姿，又见到桃花的艳丽。这和主人的的风格很搭，诗是人生，酒是生活。</p><p>一生情事就随缘吧，穷困时也闲适，发达时也安闲。太阳都日上三竿我还在睡，这样的日子不是神仙，那谁又是神仙呢。绿油油的白杨树深处白天鸣蝉阵阵，卷起了湘帘，让炉子里的烟散一散。荷花池馆晚上很凉快，正好谈禅，也是谈玄的好时机。</p><p>勉强维持这天地正气是我辈的责任，莫怪我们粗犷豪放，也莫要笑话我们行为举止没正形。想想名利终究也是空耗费力气，什么才是最高的状态，清闲处世才是最高明的。</p><p>庭院的几竿竹中有种有几尾芭蕉，听着风吹着叶片的声音好不醉人，听着雨点敲击着叶片的声音好不悦耳。在桂花香飘的季节里躺着吹吹萧，只管享受当下这刻的美好，谁还会去操心明天的事情。</p><p>到如今，挥一挥手感谢我这一生，是非均不沾染涉足。乘一叶扁舟我在湖上纵情歌唱，不管是打渔的还是养家畜的都知道我是谁。归来的风景让我不觉清澈舒朗，放眼望去看到雪把中庭映照得光亮异常，月亮似乎也更加皎洁。我在松木点燃的炉火旁边，看完医经后又把丹经拿起来。</p>]]></description>
</item>
<item>
<title>vue开发微信H5页面打开内置地图</title>
<link>/post/vue-kai-fa-wei-xin-h5-ye-mian-da-kai-nei-zhi-di-tu/</link>
<author>牧天</author><pubDate>2023-08-14T17:12:44+08:00</pubDate>
<guid isPermalLink="true">/post/vue-kai-fa-wei-xin-h5-ye-mian-da-kai-nei-zhi-di-tu/</guid>
<comment>/post/vue-kai-fa-wei-xin-h5-ye-mian-da-kai-nei-zhi-di-tu/#comment-vue-kai-fa-wei-xin-h5-ye-mian-da-kai-nei-zhi-di-tu</comment>
<description><![CDATA[<p><a href="https://blog.csdn.net/qq_35057009/article/details/129204249">https://blog.csdn.net/qq_35057009/article/details/129204249</a></p><p><a href="https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#37">https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#37</a></p>]]></description>
</item>
<item>
<title>时间2</title>
<link>/post/shi-jian-2/</link>
<author>牧天</author><pubDate>2023-08-05T07:24:00+08:00</pubDate>
<guid isPermalLink="true">/post/shi-jian-2/</guid>
<comment>/post/shi-jian-2/#comment-shi-jian-2</comment>
<description><![CDATA[<p>时间开始模糊一切。</p><p>日日夜夜无数心血建立起来的深刻实体关系，又在时间里开始变得缥缈，像雾像雨又像风，像是一场梦，像即将飘散的灵魂，已经有一部分开始化作光尘，消失在空气里。</p>]]></description>
</item>
<item>
<title>可怕</title>
<link>/post/ke-pa/</link>
<author>牧天</author><pubDate>2023-08-04T21:29:00+08:00</pubDate>
<guid isPermalLink="true">/post/ke-pa/</guid>
<comment>/post/ke-pa/#comment-ke-pa</comment>
<description><![CDATA[<p>孤独不可怕<br>想念时的孤独才可怕<br>想念不可怕<br>求不得的想念才可怕<br>求不得不可怕<br>求不得又放不下才可怕<br>求不得又放不下不可怕<br>无法挣脱循环的求不得又放不下才可怕</p>]]></description>
</item>
<item>
<title>Nginx屏蔽国外IP访问服务器</title>
<link>/post/nginx-ping-bi-guo-wai-ip-fang-wen-fu-wu-qi/</link>
<author>牧天</author><pubDate>2023-08-02T20:23:00+08:00</pubDate>
<guid isPermalLink="true">/post/nginx-ping-bi-guo-wai-ip-fang-wen-fu-wu-qi/</guid>
<comment>/post/nginx-ping-bi-guo-wai-ip-fang-wen-fu-wu-qi/#comment-nginx-ping-bi-guo-wai-ip-fang-wen-fu-wu-qi</comment>
<description><![CDATA[<p>最近遇到个现象，服务器被国外IP疯狂访问，带宽被占满，导致应用不能正常运行。<br>在网上查了一下，不是个例，2021年就有人发帖讲过解决方案。<br>经过一番努力，没有找到问题根源。经过推测，服务器被入侵后，留下木马，国外IP通过变成肉鸡的服务器，发起请求去访问别的IP，导致服务器流入流出的流量都很大。<br>所以这是把服务器当成跳板了。<br>不想重装系统，所以搜索了一些屏蔽国外IP的方案。</p><p>参考来源：<br><a href="https://www.cnblogs.com/RainBol/p/15147967.html">https://www.cnblogs.com/RainBol/p/15147967.html</a><br><a href="https://blog.51cto.com/u_64214/6098467">https://blog.51cto.com/u_64214/6098467</a><br><a href="https://blog.51cto.com/u_15080021/2654549">https://blog.51cto.com/u_15080021/2654549</a><br><a href="https://blog.51cto.com/u_15127657/3837941">https://blog.51cto.com/u_15127657/3837941</a></p><p>方案一：<br>拿到所有国外ip段，更新到nginx中来做限制。用脚本每周更新国外IP库，利用nginx deny功能直接拒绝这些IP地址。<br>1、先到/usr/local/tools下新建black_nginx.sh。<br>2、添加到crontab</p><pre><code>0 0 * * 5 /bin/bash /usr/local/tools/black_nginx.sh</code></pre><p>3、编写black_nginx.sh如下</p><pre><code>#!/bin/bash
rm -f legacy-apnic-latest black_`date +%F`.conf &amp;&amp; wget http://ftp.apnic.net/apnic/stats/apnic/legacy-apnic-latest
awk -F '|' '{if(NR&gt;2)printf(&quot;%s %s/%d%s\n&quot;,&quot;deny&quot;,$4,24,&quot;;&quot;)}' legacy-apnic-latest &gt; black_`date +%F`.conf &amp;&amp; rm -f /usr/local/nginx/conf/black.conf &amp;&amp; ln -s $PWD/black_`date +%F`.conf /usr/local/nginx/conf/black.conf &amp;&amp; /etc/init.d/nginx reload</code></pre><p>以上代码中，要注意替换nginx的配置文件的位置，以及nginx的启动命令。<br>4、在nginx.conf中加入black.conf<br><img src="http://pub.mutian.net/storage/09e77dc8.png" alt="" title=""><br>5、预先执行脚本</p><pre><code>sh /usr/local/tools/black_nginx.sh</code></pre><p>6、重启nginx</p><p>实践了本方案，没有起作用，不知道是设置不对，还是这个方法有问题。上述获得的IP地址段不知道是不是涵盖了所有的国外IP，没有验证过。</p><p>方案二：<br>使用防火墙工具iptables来过滤和拦截请求。<br>Iptables中包含了一个叫Ipset的模块，支持匹配大批量IP地址段，同时兼具良好的性能。<br><a href="https://www.ipdeny.com/">https://www.ipdeny.com/</a> 这个网站会定期更新全球分配的IP地址段。<br>首先把国内的IP地址段整理到到Ipset中，接着从Iptables中调用Ipset模块判断来源IP是否在国内的IP地址段中，最后如果来源IP是国内IP地址就放行，否则就将数据包丢弃。<br>实现步骤（CentOS7.6）：<br>1、下载IP地址段文件<br>访问网址<a href="http://www.ipdeny.com/ipblocks/data/countries/cn.zone">http://www.ipdeny.com/ipblocks/data/countries/cn.zone</a> ，另存为国内IP地址段，然后将文件上传到服务器；<br>也可以直接在服务器上执行如下命令直接下载文件到服务器：（一般是下载不了的 国外网站）</p><pre><code>wget http://www.ipdeny.com/ipblocks/data/countries/cn.zone</code></pre><p>2、将IP地址段转换为Ipset指令<br>执行如下脚本，将IP地址段中的记录转换为Ipset指令，保存在 ipset_result.sh 可执行文件中</p><pre><code>for i in `cat cn.zone`; do echo &quot;ipset add china $i&quot; &gt;&gt;ipset_result.sh; done
chmod +x ipset_result.sh</code></pre><p>3、Ipset写入地址段数据<br>首先，创建一个名字叫 china 的Ipset的链<br>然后，执行前面生成的 ipset_result.sh 脚本，为 china 链添加国内地址段</p><pre><code>ipset create china hash:net hashsize 10000 maxelem 1000000
sh ipset_result.sh</code></pre><p>接着，添加局域网IP地址段，防止局域网IP地址被拦截</p><pre><code>ipset add china 10.0.0.0/8
ipset add china 172.16.0.0/12
ipset add china 192.168.0.0/16</code></pre><p>我们来检查一下china 链的数据，大概8000多条数据</p><pre><code>ipset list china
ipset list china | wc -l</code></pre><p>最后，为了性能考虑，Ipset数据保存在内存中。<br>如果服务器重启，将会导致Ipset中的IP地址段数据失效。<br>我们需要将数据持久化到 /etc/ipset.conf 这个文件中。</p><pre><code>ipset save china &gt; /etc/ipset.conf
ipset restore &lt; /etc/ipset.conf</code></pre><p>让服务器重启时，通过脚本在加载 /etc/ipset.conf 中的数据。</p><pre><code>chmod +x /etc/rc.d/rc.local
echo &quot;ipset restore &lt; /etc/ipset.conf&quot; &gt;&gt; /etc/rc.d/rc.local</code></pre><p>4、调整或建立Iptables规则<br>Iptables中的指令有从上到下匹配顺序的，我们需要注意拦截指令顺序<br>假设我们已经有Iptables指令，需要通过 iptables -I 指令插件到现有INPUT链中<br>注意：需要修改下面指令中的数值，即插入到INPUT链中的第几个位置</p><pre><code>iptables -I INPUT 5 -m set ! --match-set china src -j DROP</code></pre><p>如果之前没有启用Iptables，可以通过如下脚本清除重建Iptables<br>注意：不同服务器需要开放的端口和服务不同，请修改和调整如下udp或tcp端口规则</p><pre><code>iptables -F  # 清除预设链中规则
iptables -X  # 清除自定义链中规则

iptables -A INPUT -i lo -j ACCEPT                                  # 允许来自本机的全部连接
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT   # 允许已建立的连接不中断
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT       # 允许icmp协议，即允许ping服务器
iptables -A INPUT -m set ! --match-set china src -j DROP           # 匹配china链，非国内IP则直接丢弃包

iptables -A INPUT -p udp --dport 5060 -j ACCEPT                    # 允许UDP协议的5060端口
iptables -A INPUT -p udp --dport 20000:30000 -j ACCEPT             # 允许UDP协议的20000-30000端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT                      # 允许TCP协议的80端口
iptables -A INPUT -p tcp --dport 443 -j ACCEPT                     # 允许TCP协议的443端口

iptables -A INPUT -j DROP                                          # 未匹配以上规则的请求直接丢弃
iptables -A OUTPUT -j ACCEPT                                       # 允许全部出网数据包
iptables -A FORWARD -j DROP                                        # 不允许Iptables的FORWARD转发
</code></pre><p>5、持久化Iptables规则<br>让服务器重启时，通过脚本在加载 /etc/sysconfig/iptables 中的数据。</p><pre><code>iptables-save &gt; /etc/sysconfig/iptables  # 持久化Iptables规则

chmod +x /etc/rc.d/rc.local
echo &quot;/usr/sbin/iptables-restore &lt; /etc/sysconfig/iptables&quot; &gt;&gt; /etc/rc.d/rc.local
</code></pre><p>方案二在执行的时候，命令ipset restore和iptables-save有异常提示。没有仔细去研究解决方案。<br>方案二最终也没有起作用。</p><p>方案三：<br>禁用服务器80端口的访问，所有web服务走443端口。<br>具体配置这里就不说了，主要是SSL的使用。</p>]]></description>
</item>
<item>
<title>祝愿</title>
<link>/post/zhu-yuan/</link>
<author>牧天</author><pubDate>2023-07-31T23:49:00+08:00</pubDate>
<guid isPermalLink="true">/post/zhu-yuan/</guid>
<comment>/post/zhu-yuan/#comment-zhu-yuan</comment>
<description><![CDATA[<p>祝愿我今夜好梦。</p><p>祝愿你今夜平安。</p><p>时光的轨道岔开两边。</p><p>何时何事，相看无言。</p><p>愿一切安好，</p><p>了无牵挂时，</p><p>万千思绪化清风，</p><p>无声无形伴飞燕。</p><p>我作清风时，</p><p>拂动额前发，</p><p>拂过双脸颊，</p><p>轻握你的手，</p><p>看你笑似花。</p>]]></description>
</item>
</channel></rss>