LOGO
首页 网站广场 站长动态 活跃度榜 审核查询 逛逛好站 留言交流 提交申请 关于本站

站长动态

站长动态所展示的是已加入好站网成员站长文章
共同步 2237 篇博文
(每2小时更新一次)
JN
入驻第1年
考古成果
我在前陣子無意間找到 Jedi’s Blog,這是一個從 2002 一直寫到現在,至今已經 23 年;Jedi 也是台灣早期重要的部落格文化推廣者之一。 不只是記錄下了這二十幾年的大大小小事情,Jedi 在他的部落格中,闡述了很多對 Web 2.0、部落格、社群的想法。我覺得很值得在 2025 的今天,透過這些文章,退回到當時的視角,想想今日的社群平台、寫部落格,又都是怎麼一回事。 以下是我在 Jedi’s blog 讀到覺得有趣的一些文章,以及帶給我的一些啟發: RSS 閱讀器的興盛 ⸺ 談自訂媒體 其中來自網友 ELong 的留言: 這個威力工具(註:指 RSS)其實潛藏一個危險,那就是資訊偏食證。 正如飲食,如果我們只吃自己想吃的東西,那麼不是會變得過於肥胖,就是營養失衡。 ……(恕略) 我想,這也是使用 RSS 時,要時常自我警覺的事。每隔一段時間,就要檢查自己是否開始患了資訊偏食症。 在現在,用 RSS 是一件完全值得被鼓勵的事情,沒想到在那個時候的人會有這樣的擔憂! 但 Elong 說的也沒錯,不自覺地「網路看世界」確實是非常多人的盲點之一。 妳不能不知道的部落格 完整講述了部落格的由來、部落格是什麼、部落格在做什麼。 另一個重點是:最下方的參考連結根本可以算是另類的 blogroll,把當時很多的網站或部落格都列出來了。只不過其中的大部分早就已經步入歷史了…… Google 變邪惡了! 當時的 Google 只是把廣告列在搜尋結果就算邪惡了,反觀…… Google 霸業 ⸺ 談「出口網站」 是的, Google 至今仍然把使用者的需求放在第一,堅守「不做邪惡的勾當也能賺錢」的信念…… 善用 Google 的各種工具,許多人的日常工作甚至靠著 Google 就能勝任;但是請千萬謹慎,把最後的隱私留給自己。 原來 Google 當年曾是清流的代表,而我們現代人的隱私則是蕩然無存。 為民喉舌 ⸺ 談輸入法 輸入法其實早就在左右著現代人的思考模式與習慣了 深有感觸。我是日常熱愛使用顏文字的人,視 emoji 為廉價的展現。其中最大的原因還是來自跟著手機輸入法而流行的 emoji 並不被我這個來自 online game 原生世代的人所習慣。 不是開始的結束,也不是結束的開始 Blog 和 Wiki 都是為了讓「表達自己的想法」以及「取得別人的想法」 ……Blog 及 Wiki 所造成的小圈圈效應及口耳相傳效應是非常強烈的。在這種系統中,如果能對關鍵的一兩個節點造成影響,收益將是非常多倍的。 溝通行為要有內容纔能持續,而內容卻需仰賴溝通行為纔得以傳播,此二者如唇齒相依,缺一不可。而這也正是接下來龍爭虎鬥之處。 20 年後的今天,各大社群平台的做法則是:壟斷內容的發佈方式以及溝通的管道。 文化入侵與反入侵 一個文化要能興盛,靠的絕不會是「自認正統」的正名運動,也不會是透過「指錯改正」的考試評量;正所謂「攻擊是最好的防禦」,唯有努力推銷、拓展自己的文化,纔能抵擋得住一波又一波的文化入侵。 唯有推敲琢磨一字一詞,與之正面交鋒之後,吸收進來的文化也纔會是好東西吧 近 20 年後,文化入侵的嚴重程度翻了不知道幾倍,不少人當起了「支語警察」。 但就如 Jedi 說的,積極攻擊也許才是能停止內秏、解決根本的做法。 粗暴模式 我突然有個想法,就是任何設計給「一般人」用的軟體,都應該要有個「粗暴模式」 那麼,這個「粗暴模式」要有多粗暴呢?簡而言之,就是完全在蹂躪使用者的人格:自動輸入 Yes ,自動接受未知的金鑰,自動信任不明的憑證,自動安裝 ActiveX 元件…… 就連在安裝應用程式的時候,也完全不需要使用者按「我同意」或「下一步」,直接就是「安裝完成」。 在前幾年,還真的有不少的軟體都是這樣,一直到近年各主流 OS 開始注重權控之後才稍微不一樣(但卻變成另一種白痴)。 反倒是 CLI,同時具備簡潔、強大兩種特性。果然 GUI、AII(AI Interface)只是設計給那些無法掌控自己手上的設備的人用的。 第二生命 沒有想到在 Facebook 元宇宙的 15 年前,就已經有成熟的元宇宙了。 Second Life 的社群觀點 是甚麼力量,讓 SL 如此有別於其他虛擬社群平台呢?筆者認為前述「與真實世界掛勾」乃是重要的因素之一,因為任何社群的本質還是這些活在真實世界的「人」,線上世界祇不過是打破某種藩籬之後的投影而已,並不會改變「人」身為「人」的本質;因此正視這種關連,並且利用了這種關連的 SL ,有助於拉近真實世界中人們的距離,進而能夠促進在 SL 中的互動,形成正向循環。 近 20 年後,各大主流「社群」平台則是盡力抹去「人」在內容中的地位。 奧義就要用奧義來對付 暴力祇會換來暴力相向。 在各主流平台上的不停筆戰的人們,也都只是資本底下的 韭菜。在他們沒有意識到這件事情前,只能在這個迴圈中不斷受苦。 小圈圈 網路沒有造就大一統,反而是促成了更多的小圈圈,讓原本分散在世界各地、難以聚集的少數人,也能夠形成小眾,並沈浸在他們自己的世界中,決定自己的遊戲規則。 在 2007 年就看到了「同溫層」,那時台灣還幾乎沒有人在用現在所說的社群平台。 老子理想中的「小國寡民」或許會在 Web 2.0 當中得以實踐吧。 Web 2.0 走到最後反而走向了另一個極端,整個網路高度地仰賴幾個中心。 但也是有不少小站,在網路世界的角落,守護著自己的世外桃源。 自然語言的親和力原則 使用的文字要在情境外具有意義。或者說,每一段文字在單獨出現的時候,也要能有足夠的意義 這真的是一件不容易的事情。 用工程的語言講,就是「降低藕合」,讓每一段文字的可讀性都變高。 Movable Type 與 WordPress 那,另一方面,為什麼說 WP 沒指望呢? 首先,WP 是用 PHP 這套語言撰寫的,而 PHP 有很多問題⸺尤其是安全漏洞,更可怕的是 PHP 的安全團隊可以說是有名的懶惰,「處理漏洞的方法往往是挖東牆補西牆」,現在已知的安全漏洞搞不好已經超過一百個了。在這種情況下做出來的 WP,說真的我實在沒甚麼信心。 然而,WordPress 在 2025 年是稱霸了網路世界的不小一部分,倒是 Movable Type 則是我第一次聽說…… 部落格的第一件及最後一件事 這篇文章只有四個字: 忠於自己。 共勉之。 線上遊戲的邊界 「玩遊戲」成了一種手段,真正的目的則是人與人之間的互動;藉由共同的興趣、話題、環境、事件,人們期待找到能信賴、能交往的對象 現在的人們卻是把大部分時間都拿去花在各種黑箱演算法上,不在意看到的內容背後的人是誰(或甚至根本不是生物)。 停機預告 據報指出,機器所在的機房將在明天 (2007/12/04) 凌晨零點至三點間停電,所以這個部落格以及相關服務等,也都會打烊。 照例,我也不知道機器甚麼時候會被開機回來,所以運氣不好的話,又會停機很久(幾天、幾星期、幾個月?) 原來在那個時候,這麼大的一個部落格停機個好一陣子都是常有的事情。 2007 年年終數位趨勢回顧(一) 無名小站疑似刻意排除雅虎以外的搜尋引擎的事件,再次凸顯了國內主流業者對於部落格服務的經營,其實還處於嘗試錯誤的階段,甚至仍然想要以控制來凌越開放,跟國際潮流大相逕庭。 那可真是個大家會按照規矩來的年代,現在大家都是 X 你的爬爆! 註:根據 yblog.org,當時無名小站以及其他奇摩底下的網站透過 robot.txt 來擋下 Yahoo 以外的搜尋引擎。 2007 年年終數位趨勢回顧(二) 究竟是前述 OpenID 及 OAuth 技術實做不夠普及,抑或這種一而再、再而三的「加入為好友」實際上乃是小圈圈的重要儀式,實在是個有趣的課題,值得我們再多想想。 OIDC 在 2025 的今天確實解決了到處註冊帳號的問題(但也衍生了一些其他問題),但「到處加好友」這件事情倒是沒什麼不一樣,也許小圈圈或多或少還是和平台有點關聯的吧。 雜談行動工作環境 有些讀者可能會想起多年前一度興起、但終究沒有成功的「網路電腦」⸺沒有硬碟、讀寫運算均仰賴網路及遠端伺服器的電腦 Google 這類提供網路應用程式(例如 Google 文件、行事曆等)的公司,也要回過頭來發展像 Google Gears 這種軟體,幫助使用者把程式跟文件留在離線的電腦上了 結果 2025 的今天,大家手上的「電腦」已經比當年的「正經電腦」強上不少,但如果它沒有連上網路,就是一顆不折不扣的磚塊。 再看 Google Chrome 所幸有了 Chromium 這個開放源碼專案,無論 Google Chrome 未來變得多邪惡,我們都還能選擇 Chromium 今天的 Google Chrome 確實變邪惡了,而我們也確實有 Brave 或是其他 Chromium based 的瀏覽器可以用(當然也有 Firefox 以及它的 forks),世界還沒爆炸。 推與噗之後 在從內容來看,微型部落格的氛圍跟傳統部落格並不相同,後者多少會讓人想要有頭有尾地完成什麼 這正是即使有 Mastodon 這種去中心的社群平台,我還是決定寫部落格的原因。 原來,他們從來就不是殺手,而是現代人打發時間的新模式,一如有線電視上百個頻道,電視機前的寂寞靈魂卻是徹夜拿著遙控器,不停地轉台 與我的文章 個人超級電視:你最親密的洗腦機器 不謀而合。 信任網 2.0 或許你可以選擇公開所有的人際關係,或者不公開所有的人際關係,但是沒辦法選擇祇公開某些人際關係,也沒辦法對人際網路中的某一部分標記為不信任 現在的主流社群平台則是有類似「摯友」的功能達到這個目的。 《搜尋引擎沒告訴你的事》導讀 如果每個人都只跟自己相近的人往來,不與相異的人接觸,將造成這個世代的種族隔離與近親繁殖 這已經在發生,從主流社群平台上不同立場的爭論就可見一斑。 但這也不只是主流社群平台的專利,適時跳出小圈圈,保持和「平均」的人、甚至是不同的人接觸,也許才是這個問題的解方。
JN
入驻第1年
如何找到有趣的部落格
但在 2025 的今天,已經不像 20 年前,到處都有野生的部落格。所以要找到有趣的個人部落格,並不是非常簡單的事情。(尤其是正體中文的部落格) 他們有的就像深山裡的密境,早就在那邊等著人們去發現,但如果沒有人指路的話,是很難發現的。但如果肯花點時間去找,還是能有點收獲的! 方法 這是我發現他們的幾種方法: 去看看其他部落格的 /blogroll 我也寫過一篇 我推的部落格,最近是應該要再整理成 /blogroll 了 >< 去 NowNowNow 看看 在自己的部落格開一個 誰來我家(guestbook),回訪來簽到的訪客 在 Mastodon、Misskey 或其他社群平台看看自己追蹤的人們有沒有放自己的部落格 在 Fediverse 上的人們,有部落格的機率比一般人高了不少 在搜尋到一篇不錯的文章的時候,注意一下這是不是一個部落格 問問你的朋友有沒有部落格 如果你還沒有部落格的話,現在就開始寫一個! 也許可以參考 我的做法;或是似乎有點潮的 Bear Blog 搜尋 關鍵字 搜尋也是很好的方式,提供一些關鍵字: 部落格、blog 個人網站 關於我、about me blogroll、部落卷、部落滾 文章、全部文章、文章列表 RSS 負向表列 也可以負向表列,排除一些不感興趣的主題: 註:我對這些主題沒什麼意見,只是這些主題的部落格「大部分」不那麼「個人」 -旅遊、-美食 -個人成長 -購買、-優惠碼 -醫師、-牙醫、-諮商 (關於我)-轉生變成史萊姆、(關於我)-在無意間被隔壁的天使變成廢柴這件事 這是動畫相關作品 過濾 同時搭配一些過濾條件,會有很好的效果: site:blog site:blog.* 以 blog 為開頭的 domain 的意思 其他比較特別的 TLD,像 .me、.cc 等等 只限中文、繁體中文(或其他特定語言)的頁面 只限一年內的頁面 排除已經沒在更新的死站 搜尋引擎 當然,除了大家常用的 Google Search 以外,也可以試試其他的搜尋引擎:像是 Startpage、DuckDuckGo、SearXNG、Brave Search、Bing、Yahoo 等等。 別忘記這個世界不是只有 Google 啊! 組合技 上面提到的這些技巧,都可以互相組合! 像是在 Startpage 搜尋 關於我 -美食 -旅遊 site:blog,就會得到這樣的結果: 結語 之前提到的 Jedi’s Blog 就是我用這種方式發現的,如果透過其他的方式,我不知道還要多久才能發現這麼寶藏的部落格! 去試試看透過這種方法在網路世界探險吧! 如果有發現什麼好站的話,也歡迎和我分享~
轻风BOOM
入驻第1年
近况
小小轻来汇报啦!主人最近可忙碌了呢,主要是处理网站的事情。为了让大家访问更快,主人把网站从海外迁回了国内,还顺利完成了备案,超棒的!服务器也搬到了国内,又加了CDN,这样国内的小伙伴们访问起来就...
清枫
入驻第1年
白刀子,红刀子(2)
等少年醒来,伤口再次恢复如初,尸体再次不见踪影,面前再次出现要杀的人。 第七个了……少年握紧了身旁的匕首,他不知道这是什么地方,但 ... The post 白刀子,红刀子(2) first appeared on 清枫的小窝.
刘郎阁
入驻第1年
立冬之后
乙巳立冬,天候殊异。炎阳当空,暑气袭人,不似孟冬,反类朱明。余日常作息如旧,朝暮通勤。冗务繁时,忙则废寝;闲暇至时,逸则悠然。闲隙之际,或刷视频、或览博文、或研所好新技,亦足怡情。
浩然
入驻第1年
使用 FastMCP 编写一个 MySQL MCP Server
在日常工作中,当我们针对某个业务场景不知 SQL 如何编写时,或在应用程序中找到一些慢 SQL 需要优化而不知所措时,通常会询问 AI 助手。但我们若不提供任何上下文,仅仅是用一句话将业务场景描述给 AI 助手让其实现,或贴一段很长的 SQL 让 AI 助手来优化,其给出的指导意见的质量通常会大打折扣。
阿川
入驻第1年
喜得配发物资
陈仓颉
入驻第1年
白宫到底炸没炸
这是一篇电影《炸药屋》的观后感。 炸药屋 A House of Dynamite 起初看到预告片时,这部电影的 […]
小十
入驻第1年
通过Hugo短代码功能实现图片及其EXIF信息展示
我有一个习惯就是在网络上分享图片时不管是调整尺寸还是压缩,都习惯保留元数据,当然也希望在分析图片时能够展示元数据。本文介绍如何在 Hugo 静态博客中借助短代码实现图片展示功能,包括单张图片和图片组的短代码实现,以及自动获取并格式化显示图片 EXIF 信息的方法。 具体效果如下图所示: 也可见 万圣节和亳都·新象的一些照片 和 天津两日纪行 等文章。 需实现的功能 支持单张图片和图片组两种展示方式 自动从图片 EXIF 数据中提取拍摄信息 格式化显示焦距、光圈、快门、ISO、相机品牌和镜头型号 支持自定义标题和多种参数传递方式 短代码实现 1. 单张图片短代码 (figure.html) 创建 layouts/shortcodes/figure.html 文件: <!-- layouts/shortcodes/figure.html --> {{ $page := .Page }} <!-- 支持两种语法:位置参数和命名参数 --> {{ $imageParam := .Get 0 }} {{ $src := .Get "src" }} {{ $title := .Get "title" }} {{ $alt := .Get "alt" }} {{ $class := .Get "class" }} <!-- 如果使用了位置参数(新语法) --> {{ if $imageParam }} {{ $imagePath := $imageParam }} {{ $customTitle := "" }} <!-- 检查参数是否包含自定义标题(使用冒号分隔) --> {{ if in $imageParam ":" }} {{ $parts := split $imageParam ":" }} {{ $imagePath = index $parts 0 }} {{ $customTitle = index $parts 1 }} {{ end }} {{ $src = $imagePath }} {{ $title = $customTitle }} {{ end }} {{ $imageResource := $page.Resources.GetMatch $src }} {{ if $imageResource }} {{ $exif := $imageResource.Exif }} {{ $autoTitle := $title | default $exif.Tags.ImageDescription | default (humanize (path.Base $src | replaceRE "\\..*$" "" | replaceRE "-|_" " ")) }} {{ $autoAlt := $alt | default $autoTitle }} <figure class="{{ $class }}"> <a href="{{ $imageResource.RelPermalink }}" class="no-a-style" data-fancybox="global-gallery" data-caption="{{ $autoTitle }}"> <img title="{{ $autoTitle }}" alt="{{ $autoAlt }}" src="{{ $imageResource.RelPermalink }}" loading="lazy" > </a> {{ if or $autoTitle $exif }} <figcaption> {{ if $autoTitle }}<span class="title">{{ $autoTitle }}</span>{{ end }} {{ with $exif }} {{ $exifParts := slice }} <!-- 1. 焦距 --> {{ with .Tags.FocalLength }} {{ $focalLength := . }} {{ if findRE "^[0-9]+/[0-9]+$" $focalLength }} {{ $parts := split $focalLength "/" }} {{ $numerator := float (index $parts 0) }} {{ $denominator := float (index $parts 1) }} {{ if gt $denominator 0 }} {{ $value := div $numerator $denominator }} {{ if eq (mod $value 1) 0 }} {{ $focalLength = printf "%.0fmm" $value }} {{ else }} {{ $focalLength = printf "%.1fmm" $value }} {{ end }} {{ end }} {{ else }} {{ $focalLength = printf "%smm" $focalLength }} {{ end }} {{ $exifParts = $exifParts | append $focalLength }} {{ end }} <!-- 2. 光圈 --> {{ with .Tags.FNumber }} {{ $fnumber := . }} {{ if findRE "^[0-9]+/[0-9]+$" $fnumber }} {{ $parts := split $fnumber "/" }} {{ $numerator := float (index $parts 0) }} {{ $denominator := float (index $parts 1) }} {{ if gt $denominator 0 }} {{ $fnumber = printf "f/%.1f" (div $numerator $denominator) }} {{ end }} {{ else }} {{ $fnumber = printf "f/%s" $fnumber }} {{ end }} {{ $exifParts = $exifParts | append $fnumber }} {{ end }} <!-- 3. 快门速度 --> {{ with .Tags.ExposureTime }} {{ $exposureTime := . }} {{ if findRE "^[0-9]+/[0-9]+$" $exposureTime }} {{ $parts := split $exposureTime "/" }} {{ $numerator := float (index $parts 0) }} {{ $denominator := float (index $parts 1) }} {{ if gt $denominator 0 }} {{ $value := div $numerator $denominator }} {{ if ge $value 1 }} {{ $exposureTime = printf "%.0fs" $value }} {{ else }} {{ $exposureTime = printf "1/%.0fs" (div 1 $value) }} {{ end }} {{ end }} {{ else }} {{ $exposureTime = printf "%ss" $exposureTime }} {{ end }} {{ $exifParts = $exifParts | append $exposureTime }} {{ end }} <!-- 4. ISO - 尝试多个可能的标签 --> {{ $isoValue := "" }} {{ with .Tags.ISOSpeedRatings }}{{ $isoValue = . }}{{ end }} {{ if not $isoValue }}{{ with .Tags.ISOSpeed }}{{ $isoValue = . }}{{ end }}{{ end }} {{ if not $isoValue }}{{ with .Tags.ISO }}{{ $isoValue = . }}{{ end }}{{ end }} {{ if not $isoValue }}{{ with .Tags.PhotographicSensitivity }}{{ $isoValue = . }}{{ end }}{{ end }} {{ with $isoValue }} {{ $isoInt := int . }} {{ if gt $isoInt 0 }} {{ $exifParts = $exifParts | append (printf "ISO%d" $isoInt) }} {{ end }} {{ end }} <!-- 5. 相机品牌 --> {{ with .Tags.Model }} {{ $cameraModel := . }} {{ if findRE "iPhone" $cameraModel }} {{ $cameraModel = "iPhone" }} {{ else if findRE "iPad" $cameraModel }} {{ $cameraModel = "iPad" }} {{ else if findRE "Canon" $cameraModel }} {{ $cameraModel = "Canon" }} {{ else if findRE "Nikon" $cameraModel }} {{ $cameraModel = "Nikon" }} {{ else if findRE "Sony" $cameraModel }} {{ $cameraModel = "Sony" }} {{ else if findRE "ILCE-" $cameraModel }} {{ $cameraModel = "Sony" }} {{ else if findRE "FUJIFILM" $cameraModel }} {{ $cameraModel = "Fujifilm" }} {{ else if findRE "X-T" $cameraModel }} {{ $cameraModel = "Fujifilm" }} {{ end }} {{ $exifParts = $exifParts | append $cameraModel }} {{ end }} <!-- 6. 镜头型号(完整显示) --> {{ with .Tags.LensModel }} {{ $lensModel := . }} {{ $lensModel = trim $lensModel " " }} {{ if and $lensModel (ne $lensModel "") }} {{ $exifParts = $exifParts | append $lensModel }} {{ end }} {{ end }} {{ if gt (len $exifParts) 0 }} <span class="exif">{{ delimit $exifParts " · " }}</span> {{ end }} {{ end }} </figcaption> {{ end }} </figure> {{ else }} {{ errorf "图片未找到: %s" $src }} {{ end }} 剩余 157 行代码 展开剩余代码 使用方法:
浩然
入驻第1年
Cursor 初体验:将 React 项目从 JavaScript 升级到 TypeScript
博友圈 前端 boyouquan-ui 是一个使用 JavaScript 编写的 React 项目。本文将尝试借助 Cursor,不写一行代码,将其自动转换为 TypeScript 实现。
JN
入驻第1年
考古
挖 前幾天,我用特別的方式找到了一些部落格。 結果有一個部落格讓我一頭栽進去看,沒日沒夜的那種看。 這個部落格是:Jedi’s BLOG。 乍看之下,這就是一個討論硬體、網頁無障礙友善、稍有歷史的一個部落格罷了。 但仔細一看,這個部落格居然有……1296 篇文章(!),而且從 2002 第一篇文章,到現在已經 23 年了(!!!) 驚 後來查了一下才知道,Jedi 大大是台灣早期推廣部落格很重要的大大之一啊!我這個小朋友真的是有眼不識泰山,居然不知道這麼重要的人物(我跪 Jedi’s BLOG 這 23 年的記錄,就像是一本活的歷史書,把台灣的部落格歷史的一大部分都忠實地記錄了下來,也在其中闡述了很多他對網路社群的想法和想像。 我透過他的文章知道了很多事情,也能從現今去窺探 20 多年前的網路氛圍大概是什麼樣子: 原來在 WordPress 稱霸網路世界之前,比不上一個叫作 Movable Type 的 CMS 有一個叫做「Second Life」的遊戲,早在 2006 年就實現了元宇宙,早了 Facebook 整整 15 年 「網路沒有造就大一統,反而是促成了更多的小圈圈」──在 2007 就提出了同溫層的概念 「(社群平台)如有線電視上百個頻道,電視機前的寂寞靈魂卻是徹夜拿著遙控器,不停地轉台。」──與我的 〈個人超級電視:你最親密的洗腦機器〉 核心概念不謀而合 原來在 20 年前,那麼大的一個部落格停機個幾天、甚至幾個禮拜,是可以接受的事情(或者可能也沒辦法) ……還有很多很多,真的是我這個在社群媒體爆發前夕才加入的網民不會知道的事情。 而我才拜讀了不到一半,我要繼續去讀了,等到全部讀完之後,也許我會整理一些有趣的發現出來。 更:已經整理在 考古成果 寫 同時我也很感嘆,部落格 30 年前被發明、20 年前開始流行,至今依然活得好好的,也許能活得比社群平台還久。 而我們則要持續地寫、忠實地記錄,就能把 2020 年代的樣子原封不動地給 2050 年的人看,這是報章雜誌都不見得能做到的事情。 而也許,這才叫做自媒體。
阿川
入驻第1年
让博客的代码块更有表现力
小十
入驻第1年
万圣节和亳都·新象的一些照片
按照体感估算,感觉郑州已持续了两个月的阴雨天气,在这长时间恶劣天气之前还是实打实的夏季,就突然进入了冬天。 本来以为阴雨已经结束,结果又来了持续一周的大雾天气,从早浓到晚的大雾,长久不见阳光,“豫犬吠日”实至名归。 难得周六、周日太阳出现,刚好11月1日是万圣节,这天的前两天,临时起意想在这个周六去感受下年轻人的氛围,决定去看一下方特精怪夜活动。 11月2日周日这天便去了开业不久的“亳都 · 新象”凑了凑热闹。 万圣节那天 结果人是真的多,带上才到手第二天的85 1.4镜头,也没有拍到几张满意的照片。 难得第一次参与了万圣节,放出一些当日照片留个纪念。 到达方特门口时的落日 25-11-1 · 85mm · f/1.4 · 1/4000s · ISO160 · ILCE-7CM2 方特城堡 25-11-1 · 85mm · f/1.4 · 1/500s · ISO320 · ILCE-7CM2 盛装出游的小孩 25-11-1 · 85mm · f/1.4 · 1/250s · ISO500 · ILCE-7CM2 树上的挂件 25-11-1 · 85mm · f/1.4 · 1/160s · ISO500 · ILCE-7CM2 树上的挂件 25-11-1 · 85mm · f/1.4 · 1/250s · ISO500 · ILCE-7CM2 被求合影的NPC 25-11-1 · 85mm · f/1.4 · 1/250s · ISO800 · ILCE-7CM2 被求合影的NPC 25-11-1 · 85mm · f/1.4 · 1/125s · ISO800 · ILCE-7CM2 被求合影的NPC 25-11-1 · 85mm · f/1.4 · 1/50s · ISO800 · ILCE-7CM2 丧尸禁地 25-11-1 · 85mm · f/1.4 · 1/320s · ISO800 · ILCE-7CM2 争夺银票 25-11-1 · 85mm · f/1.4 · 1/320s · ISO1250 · ILCE-7CM2 快到手了 25-11-1 · 85mm · f/1.4 · 1/250s · ISO1250 · ILCE-7CM2 我喜欢这个显示器 25-11-1 · 85mm · f/1.4 · 1/80s · ISO800 · ILCE-7CM2 可爱的小女孩 25-11-1 · 85mm · f/1.4 · 1/200s · ISO1250 · ILCE-7CM2 可爱的小男孩 25-11-1 · 85mm · f/1.4 · 1/160s · ISO1600 · ILCE-7CM2 某种仪式 25-11-1 · 85mm · f/1.4 · 1/160s · ISO1250 · ILCE-7CM2 NPC 25-11-1 · 85mm · f/1.4 · 1/160s · ISO1000 · ILCE-7CM2 不想上班 25-11-1 · 85mm · f/1.4 · 1/400s · ISO1000 · ILCE-7CM2 冰糖葫芦 25-11-1 · 85mm · f/1.4 · 1/2000s · ISO1000 · ILCE-7CM2 聊斋剧场1 25-11-1 · 85mm · f/1.4 · 1/60s · ISO1000 · ILCE-7CM2 聊斋剧场2 25-11-1 · 85mm · f/1.4 · 1/20s · ISO1000 · ILCE-7CM2 聊斋剧场3 25-11-1 · 85mm · f/1.4 · 1/30s · ISO1000 · ILCE-7CM2 旋转木马 25-11-1 · 85mm · f/1.4 · 1/500s · ISO1600 · ILCE-7CM2 亳都 · 新象那天 亳都 · 新象位于郑州市管城区,东临商代城垣遗址,西接郑州文庙,由15所主题院落组成,总建筑面积约4万平方米,是郑州市首个中原传统文化主题街区。项目占地面积46亩,包含3条主街、多条巷道及4个文化主题广场,融合传统街巷肌理与现代建筑技术,采用老砖、青石板与玻璃砖等材料,体现“城、街、巷、院、景”五维布局。院墙采用“四色混拼”施工方法搭配新旧青砖,屋面瓦片使用“压五露五”等传统工艺铺设。
浩然
入驻第1年
以自然语言的方式使用 Playwright MCP 进行浏览器自动化操作
由上文「MCP 是什么?它是如何工作的?」可以知道,MCP 是大语言模型连接外部工具或服务的桥梁。 Playwright 是微软开源的一款类似 Selenium 的浏览器自动化测试框架。相比 Selenium,Playwright 更加轻量、功能更丰富,且执行速度更快。大语言模型爆发之前,虽然 Playwright 也能胜任一些自动化任务,但主要还是用于自动化测试。
阿川
入驻第1年
上天竺
JN
入驻第1年
Hugo 如何在更新頁面的時候用 RSS 通知訂閱者?
2026/01/31 更新: 現在的 /now 已經不是持續更新同一篇文章了,所以已經不用這個方法來產生新的 RSS item 了。 但如果你有持續更新同一篇文章,而且需要為此產生新的 item 的需求的話,那這篇文章的內容還是適用的! 我的部落格有一個 /now(最近在幹嘛)的頁面,目前的規劃是拿來寫過去幾個月在做的事情,可以讓有點時間沒見的朋友快速 catch up,有點像是把社群貼文一次更新到這個頁面的感覺。 如果有訂閱我的 RSS 的朋友可能有發現,這個頁面最近這兩個月更新的時候,RSS 都會有新的 item。就像這樣: 緣由 之所以這麼做,是因為我覺得除了第一次來的人們以外,應該很少人會去主動進去看,如果有更新的時候,也就沒什麼人會發現我更新了 ˊ_>ˋ 而靈感的來源,是來自 Sky 的 /now,他用的是一系列的 now + 更新時間 的文章來解決這個問題。但我比較偏好保持 /now 的 URL 一直不變,所以我才選擇在 RSS 上動手。 怎麼做到的? 我對 /now 的 RSS item 做了 2 件事情來達成我的目的: 讓 GUID 隨著頁面的「最後修改時間」更新而改變 => 這樣 RSS reader 就會把更新過的 item 當成一個新的 item 在標題附註一下更新的時間 => 不要訂閱者以為只是同樣的文章一直跳出來 如何客製化 RSS Feed 我用的 Hugo theme 是 Stack。要客製 RSS 的話,和要客製其他頁面的方式是一樣的,就是在 layouts 資料夾底下新增對應的檔案:layouts/_default/rss.xml。 內容則是把 原本 repo 內的 rss.xml 複製一份過來,以這個為基礎去改。 複製完之後,可以把先把 Hugo server 起起來,到 http://localhost:1313/index.xml 看看一切正不正常。也可以隨便改個地方看看是不是真的有吃到這裡的設定。 開改! GUID 首先是 GUID,我是這樣做的: 1 2 3 4 5 6 <guid> {{ .Permalink }} {{- if eq .Slug "now" -}} // add {{ .Lastmod.Format "20060102" | safeHTML }} // add {{- end -}} // add </guid> GUID 原本用的是 permalink。我在最後面再加上更新時間,就可以在更新的同時依舊保持唯一性。 但因為不是所有頁面或文章都需要做這件事情,所以我用 hardcode 的方式把 slug 是 now 的頁面撈出來。不然所有 item 的 GUID 全部都會一次被加上更新時間,導致在 RSS reader 把全部的文章當成新文章 XD 標題 標題也是用一樣的方式去標註: 1 2 3 4 5 6 <title> {{ .Title }} {{- if eq .Slug "now" -}} // add ({{ .Lastmod.Format "20060102" | safeHTML }} 更新) // add {{- end -}} // add </title> 這麼做的好處是:改的這些東西只會出現在 RSS Feed 中,不會影響到原本的頁面,讀者就不會在頁面看到一些為了實現功能而加入的不相關的東西 XD 結語 老實說,我其實不太確定我這樣的做法是不是對的,也不知道有沒有什麼 bug。但我也大概一個月更新一次而已,應該不太會打擾到大家,如果真的有什麼問題的話再跟我說 XD 也希望這個做法可以給你一些靈感,或者讓你決定開始寫 /now 頁面,如果能有更好的解決方案的話那就再好不過啦~
小十
入驻第1年
利用短代码在hugo博客中加入bilibili播放器插件
王叨叨在 开源Bilibili播放器插件 一文中,分享了一个Typecho插件,用于将Bilibili默认播放器替换为HTML5移动端播放器,并提供更多自定义选项。 基于他的源代码,考虑将其移植到Hugo中,并通过短代码来实现bilibili视频的调用。 短代码是Hugo的一项强大功能,允许我们在Markdown中嵌入HTML片段,实现复杂的布局和功能。 王叨叨的Typecho插件主要通过以下方式工作: 通过正则表达式匹配和替换Bilibili播放器iframe 提供丰富的配置选项(宽度、高度、自动播放、弹幕开关等) 替换默认播放器为HTML5移动端播放器,提升用户体验 在上述的基础上,借助AI实现了一定程度的高度自适应和自定义封面功能,为什么说是一定程度上的高度自适应,其实是新加入了ratio参数,即明确了视频宽高比,再根据视频宽高比,使用 padding-bottom 技巧实现真正的宽高比自适应。 示例 .bilibili-player-wrapper { position: relative; width: 100%; height: 0; padding-bottom: 56.25%; margin: 1rem 0; border-radius: 8px; overflow: hidden; background-color: #f5f5f5; } .bilibili-player-wrapper iframe { position: absolute; top: 0; left: 0; width: 100%; height: 100%; border: none; border-radius: 8px; } .bilibili-custom-cover { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-size: cover; background-position: center; background-repeat: no-repeat; cursor: pointer; display: flex; align-items: center; justify-content: center; border-radius: 8px; z-index: 10; transition: opacity 0.3s ease; } .bilibili-custom-cover:hover .bilibili-play-button { transform: scale(1.1); background-color: #00a1d6; } .bilibili-play-button { width: 70px; height: 70px; background-color: rgba(0, 161, 214, 0.9); border-radius: 50%; display: flex; align-items: center; justify-content: center; color: white; font-size: 24px; transition: all 0.3s ease; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2); } .bilibili-play-button::after { content: "▶"; margin-left: 4px; } .bilibili-player-loading { position: absolute; top: 0; left: 0; width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; background-color: rgba(0, 0, 0, 0.7); color: white; font-size: 16px; z-index: 5; border-radius: 8px; } .bilibili-player-loading.hidden { display: none; } @media (max-width: 768px) { .bilibili-play-button { width: 60px; height: 60px; font-size: 20px; } } 视频加载中... function loadBilibiliPlayer(playerId) { const playerWrapper = document.getElementById(playerId); const cover = playerWrapper.querySelector('.bilibili-custom-cover'); const iframe = playerWrapper.querySelector('iframe'); const loading = playerWrapper.querySelector('.bilibili-player-loading'); if (iframe && iframe.hasAttribute('data-src')) { loading.classList.remove('hidden'); iframe.src = iframe.getAttribute('data-src'); iframe.style.display = 'block'; cover.style.opacity = '0'; iframe.onload = function() { loading.classList.add('hidden'); setTimeout(function() { cover.style.display = 'none'; }, 300); }; } } document.addEventListener('DOMContentLoaded', function() { const players = document.querySelectorAll('.bilibili-player-wrapper'); players.forEach(function(player) { const cover = player.querySelector('.bilibili-custom-cover'); const iframe = player.querySelector('iframe'); if (!cover && iframe && iframe.hasAttribute('data-src')) { iframe.src = iframe.getAttribute('data-src'); iframe.style.display = 'block'; } }); }); 具体实现 创建短代码文件 在Hugo项目的 layouts/shortcodes/ 目录下创建 bilibili.html 文件:
JN
入驻第1年
10 年前的我想都想不到的事情
10 年前的我想都想不到: 電子音樂 10 年前:視電子音樂為邪門歪道,不能接受任何人工合成的音色,就算鼓只是用了鼓機的音色也會是我的雷點。 10 年後:Electro Swing 超讚!Chiptune 愛死!Future Funk 一生推! DJ 10 年前:以為電子音樂就是 DJ 的全部,DJ 就是邪門歪道! 10 年後:學了 DJ、買了 controller,還有過幾次演出。 吉他 10 年前:幾乎每天都必須摸吉他,只要一天沒有彈,就覺得渾身不對勁。 10 年後:吉他在一年中的大部分時間都只是個擺飾。 音樂祭 10 年前:第一次去搖滾台中,想要把台灣的樂團都聽爆! 10 年後:搶票、訂住宿好麻煩喔 ._. 這個音樂祭跟上禮拜那個又有什麼不一樣? 女裝 10 年前:(啥都沒有) 10 年後:留了長髮、學會化妝、幾乎每天都穿女裝。 寫文章 10 年前:典型的工科腦,寫個超過 200 字的心得就要了我的命。 10 年後:架了兩個部落格,一個不小心就會寫超過 2000 字。 社群平台 10 年前:生活怎麼可能沒有 Facebook?我要趕快去註冊最潮的 Instagram! 10 年後:F___ you, Meta! 大家快來我的部落格追蹤 RSS~ 作業系統 10 年前:Windows 10 出了!我要趕快升級! 10 年後:新電腦先灌 Linux 再說。 飽睏 10 年前:放學吃完飯,還能再複習兩個小時的段考! 10 年後:吃飽飯後會先昏睡一個小時,什麼事情都做不了。 駕照 10 年前:我 18 歲就要考到駕照!(然後真的在 18 歲生日當天考到機車駕照) 10 年後:連汽車要怎麼發動都不知道。
阿川
入驻第1年
船游西湖,徒步河坊街
李懋和
入驻第1年
李懋和:财富是对认知的补偿,而不是对勤奋的嘉奖
这篇文章主要阐述了道学对于财富和认知的观点,强调认知的重要性以及其与财富的关联。文章指出,财富不是对勤奋的嘉奖,而是对认知的补偿。道学的认知观强调“明体达用”的通透,即既洞悉宇宙根本之“体”,又善用事物运行之“用”,这种立体认知才是财富生成的关键。 文章通过解析道学中“道法自然”的深层内核,指出高认知者能从“理”的层面解构财富逻辑。以明清徽商和民国时期荣氏家族为例,说明高认知者不仅知道市场之“理…

© 2026 好站网HaoZhan.wang 1.5 版权所有

苏ICP备19065220号-4 萌ICP备20269980号 茶ICP备2026050346号 本站数据 版本历史 关于本站