最新发布
-
听到被裁员的那天,我笑了 最近公司里都在讨论裁员的事儿。周三快下班的时候,项目经理单独找我聊,说因为项目没签合同,系统运维维保费又少得可怜,公司打算精简调整,把这个项目合并到其他项目里,我就在这次被优化的名单里。 听到这话的时候愣了一下。其实也在意料之中,现场经理已经提前透露出我们部门要裁员的信息了,但没具体说是谁被优化。等回过神来,发现自己没想象中那么难受。 但真要说起来,心里还是有点难受。毕竟在这公司也拼了两年半(是真的两年半),流了不少汗。但难受也就那么一小下,后面涌上来的是一种很奇怪的感觉,那就是轻松。 不知道是不是年纪上来了,最近越来越不想做那种纯靠脑子转的工作。以前觉得技术人就该死磕技术,越深越好,越难越有成就感。现在有时候反而挺羡慕那些干体力活的,干完就完了,回家不用惦记服务器挂没挂,不用半夜被电话吵醒。 说不上来这算成熟还是摆烂,可能都有点吧。 周五,跟公司HR谈好补偿事宜并确定离职时间,公司正常按照裁员规章制度来操作,赔偿金额是按员工每月平均工资算的,我工作两年半,总共赔偿三月工资,还有未调休时长也按照1:1换算为钱了。等离职手续办完之后,先去进行失业登记领取失业金 接下来干什么,还没想好。不过这次想慢一点,不急着投简历,先想想自己到底想过什么样的日子。干了这么多年,好像一直在赶路,难得有机会停下来问问自己这个问题。 也许被裁这个事,也不全是坏事。 -
贵州不知名小县城,建过皇都,发现“金字塔”,“加油”一词也起源于此! 贵州省,偏居中国西南,素有“八山一水一分田”之说,是全国唯一没有平原支撑的省份,自汉武帝灭夜郎国将贵州纳入版图以来,这里一直都是中原王朝鞭长莫及、分合多变的边疆地区,所以也从来没有哪个中原王朝会考虑将皇都建在多山的贵州。 直至明朝灭亡后的第八年,逃亡的南明政权辗转来到安龙,当时这里是明朝初年设置的安笼守御千户所,为了迎接不是在逃跑,就是在准备逃跑的南明永历帝朱由榔到来,“安笼”被改为“安龙”,这里成为了南明永历政权的“皇都”,全国抗清斗争的政治、军事中心,直至四年后永历政权又逃亡昆明。所以可以说安龙县是贵州历史上唯一建过皇都的地方。 mdmvlnkm.png图片 1652年,永历帝被大西军首领孙可望接到安龙,在此设立行宫指挥抗击清军,当地人把行宫称为“永历皇宫”,“永历皇宫”毁于清朝同治年间。 mdmvngj4.png图片 1652年,永历帝被大西军首领孙可望接到安龙,在此设立行宫指挥抗击清军,当地人把行宫称为“永历皇宫”,“永历皇宫”毁于清朝同治年间。 mdmvo7uk.png图片 mdmvomn0.png图片 安龙博物馆是一座中国传统宫殿式仿古建筑,城墙高耸,建筑威严,雕梁画栋,黄瓦琉璃,不知当年的“永历皇宫”是否有此规模,但如今的安龙博物馆倒是颇有几分故宫的感觉。 mdmvpvvd.png图片 目前,安龙博物馆共设置展厅4个,分别是南明历史、安龙历史、石刻陈列、民族民俗,可看性不大,也就是南明这段历史有些与众不同之处,当时的永历帝已经30岁,之后还有10年的逃亡历程。 mdmvqgrt.png图片 安龙博物馆旁边有座天主教堂,别看安龙如今是座不知名的小县城,但自明朝以来这里历史都非常丰富,天主教还在中国贵州省西南部和广西西北部专门设立了天主教安龙教区。 mdmvrh9k.png图片 mdmvrtbh.png图片 安龙博物馆后方是兴义府试院,清嘉庆年间设兴义府,府署设在今安龙县城,兴义府试院就是当年考生赶考的地方。 mdmvsevy.png图片 mdmvsoq2.png图片 现有的兴义府试院虽然地面建筑都是重建,但这里确实是清道光年间试院的旧址,将试院迁于此地的是兴义府知府张瑛,他儿子名气比他还大点,叫做张之洞。 mdmvteo9.png图片 mdmvts5i.png图片 当时历时一年建成的试院有房屋209间,规模宏阔,号称“甲天下”,后来清同治年间,试院毁于兵火。光绪十五年(1889)复建,后来因为延续了1300年的科举考试就被废除,试院没有竣工,后来改成学校,培育了不少人才。 mdmvuf1t.png图片 mdmvuq79.png图片 安龙县城不大,历史古迹比较集中,说起南明的历史,还有一处古迹不得不提,那就是“明十八先生墓”,这也是贵州境内唯一保存完好的南明历史遗迹。 mdmvv8hs.png图片 mdmvvln3.png图片 关于明十八先生的故事,可以参看《明十八先生墓,贵州境内唯一保存完好的南明历史遗迹!》一文,简单来说,就是永历皇帝和十八位大臣为了摆脱大西军孙可望的控制,想要密谋翦除他,结果败露被反杀的历史事件。 mdmvxpcs.png图片 mdmvxx8n.png图片 安龙县城各个时代的历史建筑确实不少,离十八先生墓不远处,还有一处安龙中华苏维埃国家银行旧址,这是一座民国时期修建的建筑。 mdmvyeqf.png图片 1935年4月20日,中国工农红军第一军团2师4团及中央军委纵队后梯队到达安龙,中华苏维埃国家银行也随之进入安龙县城,住在这座当时属于地主蒋德安的私宅内,并在此开展银行业务。 mdmvz5d3.png图片 mdmvzeyr.png图片 安龙还有一处不可错过的自然与历史结合景点,那就是安龙招堤。 mny9dmj9.png图片 mny9etwo.png图片 安龙招堤是贵州省十大风景区之一,也是贵州省文物保护单位。始建于清康熙三十三年(1694年),当时为了解决水患,驻安笼(安龙)游击招国遴捐俸修筑,因此得名招堤,这个命名方式类似于杭州西湖的白堤、苏堤。 mny9gty5.png图片 mny9h90m.png图片 到了清乾隆五年(1740年)南笼府(今安龙县)知府于堤两岸遍植垂柳。清乾隆二十八年(1768年)又进一步维修。 mny9hpbt.png图片 mny9i5n7.png图片 清道光二十八年(1848年)兴义府知府张锳又将堤加高五尺,于堤西侧开辟荷花池,建“半山亭”。清咸丰四年(1854)张锳于金星山上“筑屋三楹”,名“省耕亭”。 mny9im6k.png图片 到安龙,就不得不提张瑛,张锳先后任兴义府知府10余年,修招堤风景名胜,修葺“明十八先生”祠墓,开辟府城通广西的驿道,主修《兴义府志》,政绩卓著,尤以兴学育人受到社会广泛称赏。 mny9jb76.png图片 安龙有“加油之城”之称,我们鼓励助威的“加油”一词其实就是来自安龙,始于张瑛,张锳倾心于教育事业,重视人才,他自掏腰包购置桐油,每晚派差役为苦读学子“添灯油”,并鼓励道:“府台给相公添灯油啰!”这一“加油”坚持了十四年,让当地学风大振,“加油”这个词也从一个添油的动作,演变为激励奋进的文化符号。 mny9k6qz.png图片 如果说安龙最有名的人物,还不是张瑛,而是张瑛的第四子张之洞,张之洞4岁随父亲来到安龙,他在安龙度过了少年时光,11岁的张之洞,就在招堤挥笔写就了洋洋洒洒九百余字的《半山亭记》。 mny9lkv6.png图片 mny9lrpp.png图片 招堤之于安龙,就像西湖之于杭州,是到了安龙不可错过的地方,特别是荷花盛开的季节,这里更是远近闻名的景点。 mny9m7uh.png图片 mny9mh48.png图片 近些年,安龙还有一种地貌成为网红打卡地,那就是安龙金字塔,安龙金字塔其实只是长得像金字塔的山体,和金字塔一毛钱关系没有。 mny9n1fb.png图片 mny9n802.png图片 这地方如今也开发成景点了,但现在还没有收门票,你可以导航“安龙金字塔打卡点”,有停车场,顺着山路爬到山顶观景台,正对着的就是一众形似金字塔的山体了。 mny9nt64.png图片 mny9o679.png图片 在观景台上看到的金字塔就是这个样子,据说冬天草木枯黄时,再赶上落日时分会更像一点,金字塔也就是从这个角度看比较像,换一个角度就不像金字塔了。 mny9ojn3.png图片 也有人说这金字塔棱角如此分明,会不会是人造的,其实当你看过贵州各种奇形怪状的山体后,例如离安龙不远的贞丰双乳峰后,你可能就会打消这种想法,大自然的鬼斧神工比你想象的更出色。 安龙县隶属于贵州省黔西南布依族苗族自治州,位于贵州省西南部,安龙在贵州省内也是一座不太出名的小县城,没有特别出名的景点,也没有很有名的特产,很少有人将这里作为旅游目的地,最近几年凭着“安龙金字塔”在网上小火了一把,但这个还是不足以吸引游客专程而去,但我觉得这座小县城历史文化还是比较丰富,特别是关于十八先生的那段南明历史,还是值得探访,属于那种比较小众又有故事的地方,这里还是值得花上一两天时间慢慢游览。 附录 上文转载自公众号木子弓长的驴游记。身为土生土长的安龙人,家乡的这些风景,过去我反而未曾细心体会。 原文地址 -
给Typecho增加自定义导航独立页面模板 一直想做一个网址导航页,之前是用的wordpress做的导航站,奈何服务器资源不足,导致数据库经常崩溃,后面放弃了。 试过多种方法,最后还是决定用typecho独立页面模板实现了,效果差强人意,总体还算不错 mne11k6x.png图片 代码实现 <?php /** * 现代网址导航 * * @package custom * @description 现代化响应式网址导航页,支持分类筛选与搜索 */ if (!defined('__TYPECHO_ROOT_DIR__')) exit; // --- 1. 处理内容解析 --- $content = $this->content; // 将 <br> <p> 等标签转换为换行符 $content = preg_replace('/<(br|p|div)[^>]*>/', "\n", $content); // 去除 HTML 标签 $content = strip_tags($content); // 按行分割 $lines = explode("\n", $content); // --- 2. 解析数据 --- $navItems = []; foreach ($lines as $line) { $line = trim($line); // 检查是否以 --- 开头 if (strpos($line, '---') === 0) { $line = substr($line, 3); // 去掉 --- $parts = explode('|', $line); if (count($parts) >= 3) { $title = trim($parts[0]); $desc = trim($parts[1]); $url = trim($parts[2]); // 第4个参数是手动指定的图标URL(可选),第5个是分类 $customIcon = isset($parts[3]) ? trim($parts[3]) : ''; $category = isset($parts[4]) ? trim($parts[4]) : '默认'; if (strpos($url, 'http://') === 0 || strpos($url, 'https://') === 0) { $navItems[] = [ 'title' => $title, 'desc' => $desc, 'url' => $url, 'icon' => $customIcon, // 存入自定义图标 'category' => $category ]; } } } } // --- 3. 随机渐变函数 --- function getRandomGradient() { $h1 = mt_rand(0, 360); $h2 = ($h1 + mt_rand(30, 180)) % 360; $s = mt_rand(60, 85); $l = mt_rand(88, 96); // 提高亮度,保证文字清晰 return "linear-gradient(135deg, hsl($h1, {$s}%, {$l}%) 0%, hsl($h2, {$s}%, {$l}%) 100%)"; } // --- 新增:统计分类数量 --- $categories = ['全部' => count($navItems)]; // 默认“全部”,数量为总数量 foreach ($navItems as $item) { $catName = $item['category']; if (isset($categories[$catName])) { $categories[$catName]++; } else { $categories[$catName] = 1; } } ?> <!DOCTYPE html> <html lang="zh-CN"> <head> <?php $this->need('module/head.php'); ?> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> <style> :root { --primary-color: #4f46e5; --bg-color: #f3f4f6; --text-main: #1f2937; --text-sub: #6b7280; --card-border: #e5e7eb; --card-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05); } /* 夜间模式适配 */ body[data-theme="dark"], body.dark { --bg-color: #121212; --text-main: #e5e5e5; --text-sub: #a3a3a3; --card-border: #333333; --card-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); } body { background-color: var(--bg-color); font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; color: var(--text-main); margin: 0; transition: background 0.3s; } .nav-container { max-width: 1200px; margin: 0 auto; padding: 40px 20px; } .header-section { text-align: center; margin-bottom: 40px; } .site-title { font-size: 2.5rem; font-weight: 800; background: linear-gradient(135deg, var(--primary-color), #818cf8); -webkit-background-clip: text; -webkit-text-fill-color: transparent; margin-bottom: 10px; } .search-box { position: relative; max-width: 600px; margin: 0 auto 30px; } .search-input { width: 100%; padding: 16px 20px 16px 50px; border-radius: 50px; border: 2px solid var(--card-border); background: var(--bg-color); color: var(--text-main); font-size: 1rem; outline: none; box-sizing: border-box; } .search-icon { position: absolute; left: 20px; top: 50%; transform: translateY(-50%); color: var(--text-sub); } .grid-container { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 20px; } .nav-card { /* 背景由内联样式动态控制 */ border-radius: 12px; padding: 20px; text-decoration: none; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); border: 1px solid rgba(0,0,0,0.05); display: flex; align-items: center; box-shadow: var(--card-shadow); } /* 夜间模式下的边框微调 */ body.dark .nav-card { border: 1px solid rgba(255,255,255,0.1); } .nav-card:hover { transform: translateY(-3px); box-shadow: 0 10px 20px rgba(0,0,0,0.15); } .card-icon { width: 44px; height: 44px; border-radius: 10px; background: rgba(255,255,255,0.5); /* 半透明白底 */ backdrop-filter: blur(4px); display: flex; align-items: center; justify-content: center; margin-right: 15px; flex-shrink: 0; overflow: hidden; } .card-icon img { width: 28px; height: 28px; object-fit: contain; display: block; } /* 当图片加载失败时显示的默认图标样式 */ .card-icon i { font-size: 20px; color: var(--primary-color); } .card-info { flex: 1; } .card-title { font-weight: 700; font-size: 1.1rem; margin-bottom: 4px; color: var(--text-main); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .card-desc { font-size: 0.85rem; color: var(--text-sub); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .tag-badge { font-size: 0.75rem; background: rgba(255,255,255,0.4); padding: 2px 8px; border-radius: 4px; color: var(--text-main); } @media (max-width: 768px) { .grid-container { grid-template-columns: 1fr; } } /* --- 分类筛选栏样式 --- */ .category-filter { display: flex; justify-content: center; flex-wrap: wrap; gap: 10px; margin-top: 20px; padding: 10px; } .cat-item { padding: 6px 14px; border-radius: 20px; background: var(--card-bg); border: 1px solid var(--card-border); color: var(--text-sub); font-size: 0.9rem; cursor: pointer; transition: all 0.2s; display: inline-flex; align-items: center; user-select: none; } .cat-item:hover { border-color: var(--primary-color); color: var(--primary-color); transform: translateY(-1px); } .cat-item.active { background: var(--primary-color); color: #fff; border-color: var(--primary-color); box-shadow: 0 4px 10px rgba(79, 70, 229, 0.3); } .cat-count { background: rgba(0,0,0,0.05); padding: 2px 6px; border-radius: 10px; font-size: 0.75rem; margin-left: 6px; min-width: 18px; text-align: center; } /* 夜间模式下的数字背景微调 */ body.dark .cat-count { background: rgba(255,255,255,0.1); } body.dark .cat-item.active .cat-count { background: rgba(255,255,255,0.2); color: #fff; } </style> </head> <body> <?php $this->need('module/header.php'); ?> <div id="Joe"> <div class="joe_container"> <main class="joe_main"> <div class="nav-container"> <div class="header-section"> <h1 class="site-title"><?php $this->title(); ?></h1> <div class="search-box"> <i class="fas fa-search search-icon"></i> <input type="text" id="searchInput" class="search-input" placeholder="搜索网站名称或描述..."> </div> <!-- 新增:分类筛选栏 --> <div class="category-filter"> <?php foreach ($categories as $name => $count) : ?> <span class="cat-item <?php echo ($name === '全部') ? 'active' : ''; ?>" data-cat="<?php echo $name; ?>"> <?php echo $name; ?> <span class="cat-count"><?php echo $count; ?></span> </span> <?php endforeach; ?> </div> </div> <div class="grid-container" id="navGrid"> <?php if (empty($navItems)) : ?> <div class="no-result" style="grid-column:1/-1;text-align:center;padding:40px;"> 未找到数据。<br>请检查正文格式是否为 <code>---标题|描述|链接</code> </div> <?php else : ?> <?php foreach ($navItems as $item) : ?> <?php // 生成随机背景 $randomBg = getRandomGradient(); // 获取域名 $domain = parse_url($item['url'], PHP_URL_HOST); $iconSrc = $item['icon'] ? $item['icon'] : "https://" . $domain . "/favicon.ico"; ?> <a href="<?php echo $item['url']; ?>" class="nav-card" style="background: <?php echo $randomBg; ?>;" target="_blank" rel="noopener noreferrer"> <div class="card-icon"> <!-- 图片加载失败时,显示 globe 图标 --> <img data-src="<?php echo $iconSrc; ?>" data-timeout="3000" onerror="this.style.display='none'; this.parentNode.innerHTML='<i class=\'fas fa-globe\'></i>'" alt="" class="lazy-favicon"> </div> <div class="card-info"> <div class="card-title"><?php echo $item['title']; ?></div> <div class="card-desc"><?php echo $item['desc']; ?></div> </div> <span class="tag-badge"><?php echo $item['category']; ?></span> </a> <?php endforeach; ?> <?php endif; ?> </div> </div> </main> <?php joe\isPc() ? $this->need('module/aside.php') : null ?> </div> <?php $this->need('module/bottom.php'); ?> </div> <?php $this->need('module/footer.php') ?> <script> function loadFaviconWithTimeout() { // 获取所有带有 data-src 的图片 const images = document.querySelectorAll('img.lazy-favicon'); images.forEach(img => { const url = img.getAttribute('data-src'); const timeout = parseInt(img.getAttribute('data-timeout')) || 3000; // 默认3秒 // 创建一个临时的 Image 对象 const loader = new Image(); // 超时逻辑 const timer = setTimeout(() => { // 超时后,移除加载中的占位符或错误处理 if (img.parentNode) { img.style.display = 'none'; img.parentNode.innerHTML = '<i class="fas fa-globe"></i>'; } console.warn('Favicon 加载超时:', url); }, timeout); // 加载成功 loader.onload = function() { clearTimeout(timer); img.src = url; // 将 URL 赋值给真正的 src img.style.display = 'block'; // 显示图片 }; // 加载失败 (404/500等) loader.onerror = function() { clearTimeout(timer); // 触发 onerror 逻辑,显示地球图标 if (img.onerro) img.onerror(); }; // 开始加载 loader.src = url; }); } document.addEventListener('DOMContentLoaded', function() { const searchInput = document.getElementById('searchInput'); const catItems = document.querySelectorAll('.cat-item'); const cards = document.querySelectorAll('.nav-card'); // 1. 分类点击事件 catItems.forEach(item => { item.addEventListener('click', function() { // 移除其他项的 active 状态 catItems.forEach(i => i.classList.remove('active')); // 给当前项添加 active 状态 this.classList.add('active'); const selectedCat = this.getAttribute('data-cat'); const searchVal = searchInput.value.toLowerCase(); // 执行筛选 filterCards(selectedCat, searchVal); }); }); // 2. 搜索框输入事件 searchInput.addEventListener('input', function(e) { const val = e.target.value.toLowerCase(); // 获取当前选中的分类 const activeCatItem = document.querySelector('.cat-item.active'); const selectedCat = activeCatItem ? activeCatItem.getAttribute('data-cat') : '全部'; filterCards(selectedCat, val); }); // 3. 统一的筛选函数 function filterCards(category, keyword) { cards.forEach(card => { const cardCat = card.querySelector('.tag-badge').innerText; const title = card.querySelector('.card-title').innerText.toLowerCase(); const desc = card.querySelector('.card-desc').innerText.toLowerCase(); // 判断分类是否匹配 const isCatMatch = (category === '全部' || cardCat === category); // 判断搜索词是否匹配 const isSearchMatch = (title.includes(keyword) || desc.includes(keyword)); // 同时满足才显示 if (isCatMatch && isSearchMatch) { card.style.display = 'flex'; } else { card.style.display = 'none'; } }); } loadFaviconWithTimeout(); }); </script> </body> </html>使用方法 在typecho主题根目录新建mynav.php(也可以是其他名称)文件保存,独立页面新建使用模版名称:现代网址导航 正文部分放网址导航数据,格式如下:导航标题|说明|网址|网站图标(这个默认是空的就行)|分类 ---Google|全球最大的搜索引擎|https://www.google.com||搜索 ---GitHub|全球最大代码托管平台|https://github.com||开发 ---Bilibili|国内知名的视频弹幕网站|https://www.bilibili.com||视频 ---Stack Overflow|程序员问答社区|https://stackoverflow.com||开发 ---知乎|中文互联网高质量的问答社区|https://www.zhihu.com||资讯 ---在线工具|在线工具大全|https://tool.lu||工具 -
那头养了八年的老黄牛,最后换了一万五千块钱 2026年2月23日,去娘家接媳妇的途中,接到父亲的来电说把家里的老牛卖了,我把车停靠路边沉默了几秒,才问父亲卖了多少,他说一万五千块。虽然父亲很平淡的说出了这串数字,但我知他心中的不舍,毕竟这头老牛喂养了八年,也在它身上花费了太多心血。 刚来我家的前几年,家里的地全靠它拉犁干活,后来有了耕地机,它就下岗休息了。也就是这几年,天天在牛棚里吃草睡觉,被父亲喂养得很好。 说实话,我这婚结得挺窝囊的。基本上全靠我父亲拉下老脸,去跟亲戚朋友那儿凑出来的,事情结束后,家里也无任何积蓄了,为了能尽快还这笔人情账,只能牺牲家里的“老伙计”了,尽管是多么不舍。 我与父亲的话不多,基本是有事说事。但我知道,他心里是有我们的。牛卖了,家里空了,但心却沉甸甸的