自新世界 #0x01:少女週末旅行

日期:
分類: 週報
標籤: 八方旅人 pdf.js CSS Svelte

為了記錄自己的精神狀態,我決定開始寫週報。說是週報,但不保證每週都會寫,也不保證內容的跨度剛好是一週。名稱來源於交響曲 Z nového světa

我在寫什麼

這周 Wakatime 時長 40 小時,時間都花在了重構部落格和折騰 pdf.js 上。

重構部落格用了 Astro,之後會寫一篇文章銳評一下。

CSS 如何裁剪一個元素

想要實現的效果
想要實現的效果

在 CSS 中,如果我們想要使一個元素只顯示一部分,可以透過設定 parent 元素 .parent {position: relative;}、child 元素 .child {position: absolute;} 來實現。(tribute to @ 魔法小貓

原理
原理

不過是次的情況有些棘手:child 是兩個元素,其中一個元素 A 在另一個元素 B 之上,設定了 z-index。這導致即使 parent 設定更高的 z-index,也無法覆蓋掉 child 的 A。

錯誤的效果
錯誤的效果

正確的做法是,不要設定 A 元素的 z-index,而是加一層 wrapper,並且將 A 和 B 都採用 absolute 定位來實現層級的效果。這樣就不會出現上述的問題了。

正確的效果
正確的效果

See the Pen Crop-component by Overflow Cat (@overflowcat) on CodePen.

Svelte 4

Svelte 4 建立新專案只能選 SvelteKit / library 了,library 裡還帶一個 SvelteKit。雖然聲稱支援 SPA,但是不支援 hash-based routing,這樣你就用不了它的路由了。第三方庫也只支援到 Svelte 3。而且 Svelte 4 的空白專案直接加入 SSG 的 adapter 還會報錯,無法 build,貌似是裡面有動態 endpoint。而且報錯甚至倒退了,出錯常常 trace 不到我的程式碼中。

React 最近也在推 RSC,文件中一上來展示了 4 個不同的框架(包括 Expo 什麼的),要是初學者的話真的會被嚇住。真是噁心它媽給噁心開門。

pdf.js

pdf.js 分為 3 個層級:Core,Display,Viewer。Display 提供了渲染 canvas 和文字層的功能,Viewer 則是 Firefox 那個帶控制元件的 PDF 閱讀器。嘗試使用 Viewer,但是始終無法使它正常工作。

Display 層中可選擇的文字是由 textLayer 層提供的。使用方式也很扭曲,有幾個注意事項:

  • 匯入的方式是 import type { PageViewport } from 'pdfjs-dist';
  • 需要設定 worker(不知道如何從包匯入):
    pdfjsLib.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjsLib.version}/pdf.worker.js`;
  • 頁面的座標原點在左下角。典型的 PDF 檔案的大小為
  • 需要引入 textLayer 的 CSS:
    <link
        href="https://cdn.jsdelivr.net/npm/pdfjs-dist@3.8.162/web/pdf_viewer.min.css"
        rel="stylesheet"
    />
  • 需要在渲染 textLayer 前設定 CSS 變數 --scale-factor 使 textLayer 縮放與 canvas 一致。
  • textLayer 的預設 CSS 還設定了 opacity: 0.25,我建議覆蓋掉,然後直接設定高亮顏色的透明度。

pdf.js 開發的困難之處還在於其提供的 API 少得可憐。比如,想要獲得使用者的選擇,只能透過和 HTML 一樣的方式來實現,即 window.getSelection()

這周的成果如下:

我在玩什麼

八方旅人Ⅱ

這周照例是玩《八方旅人Ⅱ》。與第一作相比,這一作的每章節內容多寡分配得不是十分均勻。比如 Osvald 的前兩章都是回憶,而 Throné 的第二章很短,還沒有戰鬥。不過,類似觀影的劇情多了起來,頗有以前 66RPG(奠)中「R 劇」的味道。

Hikari, the Warrior
Hikari, the Warrior
Partitio, the Merchant
Partitio, the Merchant
Agnea, the Dancer
Agnea, the Dancer

LunarVim

嘗試了下 LunarVim。文件裡只說了加了哪些外掛,但沒有一個快速上手的教程,我都不知道它包管理器用的哪個。

我在看什麼

為啥你數學沒有更強Why ain’tcha better at math

然而,我認為我的基本觀點是好的。如果我的方法有任何價值,那麼使用它的人應該能夠學習並記住重要的東西。事實上,我對那些熱衷於生產力/生活駭客的人有這樣的批評:如果你的「記筆記方法/學習方法/待辦事項列表系統/生活方式/無論什麼」真的那麼好,那麼,你的成果是什麼呢?你用它做了什麼?所以我確實覺得我需要證明我在數學方面很好/過得去,不一定是從常規的角度,但至少是從某些特殊的角度上說,我對之感到滿意,且任何一個公道的人都會對之滿意。


I tried 8 different Postgres ORMs

FireShip 的影片質量一如既往地高。看下來還是 Prisma 最好。去年用過一次,但是當時用的 SQLite,沒體會出它的好處,現在用 PostgreSQL,migration 就很方便了。


番劇

  • 【推しの子】 EP11

undefined 影片封面影片 AV / BV1PV411T7yG去嗶哩嗶哩觀看也可以點選影片封面載入影片。注意嗶哩嗶哩彈幕網可能會收集您的資訊,這與本站無關。在閣下進行操作前,網頁不會與嗶哩嗶哩彈幕網建立連線。

作りましょう 作りましょう
あなたと私の世界をさぁ作りましょう
始めましょう 始めましょう
なにから始めましょう(ん~!?)
踴りましょう 踴りましょう
ノリノリで踴りましょう(イェイ イェイ)
しゅうまつ旅行がはじまるぞ!

本作品採用 知識共享署名-非商業性使用 4.0 國際許可協議CC BY-NC 4.0 International) 進行許可。閣下可自由地共享(複製、發行)和演繹(修改、轉換或二次創作)本作品,唯須遵守許可協議條款。

評論

評論將在稽覈後顯示,閣下可以在本部落格的 Github 倉庫的 拉取請求列表 中檢視。提交成功後會自動跳轉。

本站不支持 Dark Reader 的暗色模式,请对本站关闭后再访问。
(亮色模式的对比度、亮度等选项不受影响)