2021年7月5日 星期一

epub電子書轉直排加段落縮排

EPUB中文直書需要做幾項設定,一是改主要的OPF檔(通常是content.opf、metadata.opf或volume.opf),二是需要修改主要的CSS檔(通常是內容最多的那個)。


首先在主要的OPF檔找到 <spine> 標籤,加入屬性 page-progression-direction 並設定為 "rtl" 右至左(右翻)。若有特殊需要當然也可以指定 "ltr" 左至右(左翻),就會變成反向翻頁。
例如:<spine toc="ncx" page-progression-direction="rtl">

若OPF檔內有 language 標籤,個人習慣把它改成中文比較安心。
例如:<dc:language>zh-TW</dc:language>


再來在主要的CSS檔,加入 writing-mode: vertical-rl 的設定,一般放在<html>或<body>都可以。vertical 設定直排, rl 則是右到左。為了增加相容性,我們除了基本 writing-mode 屬性,也放入兩個 -webkit- 與 -epub- 開頭的 writing-mode 屬性,確保瀏覽器或EPUB閱讀器有支援。
具體寫成這樣:
html {
   writing-mode: vertical-rl;
   -webkit-writing-mode: vertical-rl;
   -epub-writing-mode: vertical-rl;
}

然後是段落首字縮排,有的電子書使用空格,私以為不妥。最好使用 text-indent 語法,並直接用 em 設定字級來當作縮排距離,以避免縮排參差不齊。
一般中文段落縮排二個字這麼設定:
p {
   text-indent: 2em;
}


至此這本epub電子書應該就會乖乖直排兼段落留空格。
以上。

2021年3月1日 星期一

使用 VMware ThinApp 製作獨立環境綠色免裝軟體跨越作業系統版本限制

前幾天電腦強迫自動更新成「版本 2004 (OS 組建 19041.804) 」,結果我多年前為了升級 Win 7 以 ThinApp 打包的陳年 XP 版軟體,突然不能正常開啟了,開相容模式以管理權限也無用,去查了事件檢視器,發現是錯誤「事件 1000,Application Error」、「例外狀況代碼: 0xc0000005」。網路一查主要原因是「Access Violation」,這範圍廣得不行。

嘗試了網路解法,關閉「資料執行防止」:
按 [Windows] + [R] 執行「sysdm.cpl」以開啟系統內容設定畫面,到「進階」頁面點選效能區的設定按鈕,在跳出的「效能選項」視窗中開啟「資料執行防止」頁面,點選第二個選項「為所有...開啟DEP,除了我選擇的這些」,然後在下面選擇例外的執行檔。設定好需要重開機,然後我的軟體還是不能正常執行,事件檢視器內容都一樣,除了多了個資訊「事件 1001,Windows Error Reporting」、「事件名稱: APPCRASH」,並沒有其他效果。另外找了幾個解法都不合用,最後乾脆找新版 ThinApp 再打包一次軟體試試。

在不同版本甚至不同作業系統下,大家常用虛擬機器來模擬指定版本作業系統環境,比如近來很香的 M1 版 Apple Macbook ,不使用 Intel X86 架構、改ARM以後不能雙系統了,就只能裝 Parallels Desktop 跑 Win10 虛擬機器執行視窗版軟體。
但是模擬整個作業系統要佔用許多資源,這時候有個軟體可以把必要的執行檔、登錄碼、數據庫等東西打包,同時保有封閉的指定作業環境,極大地精簡了體積及所需資源、也提高了執行效率。比如說網頁設計師需測試各版本IE相容性,只要開啟單獨WINXP版IE6或WIN7版IE10的執行檔。或是偶爾需要在別人電腦執行個 PS、Illustrator ,又或陳年老軟體只能在WinXP正確執行,這時這個不需要安裝、不需要切換作業系統的解決方案真是太方便了。

VMware ThinApp 是個付費軟體,可以到官網加入會員後、下載軟體並取得60天試用碼(我這次使用免洗電郵「https://getnada.com/」)。目前 ThinApp 最新版是5.2.9,但不支援我需要的Windows XP,所以我也下載有支援的最後版本5.2.3。我常用的虛擬機器軟體是免費的Oracle VM VirtualBox,開啟乾淨的WinXP並安裝 ThinApp 5.2.3 後,就準備來打包。

它的逐項運作過程是:
  1. Prescan:先掃描系統檔案及登錄碼,掃描完畢以後,按Next到下一步驟;
  2. Install Application:不要急著按下「Postscan」,先安裝好要打包的軟體再回來按;
  3. Postscan:軟體會再掃描一次找出不同之處,準備複製進專案資料夾;
  4. Configure:依照執行需求調整參數;
    • Entry Points:有時軟體有多項功能或附屬工具程式,ThinApp在此步驟會列出可執行項目、並預先勾選推薦的程式「進入點」。有時候會誤判或者勾選不必要的功能,需要自已檢查清楚決定好,選錯的話之後得手動改參數重新打包。
    • Manage With VMware Workspace:選擇「是/否」整合「VMware Horizon Application Manager」,類似軟體商店管理。通常不加入。
    • Groups:使用者群組權限設定,一般個人或中小企業用不太到,需要的話須小心,錯了沒得改得重新打包。 
    • Isolation:隔離模式分為「Merged」和「WriteCopy」;
      • 「Merged Isolation Mode」擁有打包檔外部(也就是執行環境)讀寫權限,相對不封閉,適合Microsoft、Adobe這種微軟認證軟體,個人的經驗以未認證軟體選這個模式,可能會被認定是蠕蟲或木馬病毒。
      • 「WriteCopy Isolation Mode」能讀取打包檔外部(執行環境)資料,但不能直接寫入,會放置在Sandbox(沙盒)中。適合舊版或大部分的其他軟體。
    • Sandbox:安全且獨立的沙盒用來放置改變過的登錄參數及設定檔,可選User Profile 使用者軟體資料夾、Same directory 打包軟體位置(適合隨身碟)、或任意指定資料夾。可以手動改參數指定軟體開啟或關閉時清除。
    • Quality Assurance Statistics:選擇「是/否」傳資料給VMware以協助他們改善品質。我選否避免造成防火牆示警。
    • Project Settings 頁1:輸入「Inventory Name」封裝資料夾的名稱、選擇或輸入「Project Location」存放位置。
    • Project Settings 頁2:
      • Primary Data Container:選擇封裝在執行檔本身或另外放在單獨的「.dat」資料檔(適合多功能/程式)。
      • MSI Package Generation:選擇是否同時封裝微軟「.msi」安裝檔。
      • Compression:對封裝進行壓縮,相對的打包時間會較長。
    • Save Project:點Next後ThinApp匯出相關資料到專案資料夾,結束再按Next下一步。
    • Ready to Build:可以選擇修改「Package.ini」內的詳細設定值、或直接按Build打包。
  5. Build Project:打包成跨版本綠色免裝軟體,只要把專案資料夾內的「bin」資料夾複製出來即可單獨使用,此資料夾名稱可手動改 Package.ini 自訂。
上述最後的打包動作,為求謹慎,我把 Windows 10 更新到20H2最新版,利用Windows Sandbox 內建沙盒,在裡面安裝ThinApp最新版,然後把專案資料夾複製進去,在裡面執行「build.bat」打包。分開以新版封裝的作法是參考某忘了出處官方文件,Sandboxie 作為第三方沙盒軟體雖速度快,但覺得比較不適合用來做封裝。

以下幾個 Package.ini 設定值供參考,詳細可查官方手冊
  • [Isolation]
    • RegistryIsolationMode=WriteCopy、RegistryIsolationMode=Merged (隔離模式選擇)
  • [BuildOptions]
    • MSIIs64Bit=1 (64bit安裝檔)
    • Wow64=1 (64bit環境跑32bit必選)
    • AltArchitectureShortcut=1 (64bit環境跑32/64bit混用)
    • SandboxPath=.、SandboxPath=LocalSandbox\Subdir1、SandboxPath=%AppData%\Thinstall (選擇或修改Sandbox存放位置)
    • SandboxRemovableDisk=1 (USB隨身碟)
    • RemoveSandboxOnExit=1 (關閉軟體時清空沙盒)
    • PermittedGroups=Administrator;OfficeUsers (使用者群組權限)
    • OptimizeFor=Memory、OptimizeFor=Disk (效率還是體積優先)
    • OutDir=bin (封裝檔輸出位置)
  • [Compression]
    • CompressionType=Fast、CompressionType=None (壓縮與否)
  • [app.exe]
    • Disabled=1 (封裝時不建立該執行檔)

反覆修改封裝了幾個版本,最後留了完整版和精簡版個別zip起來,任務完成。

關閉 Windows 10 自動更新

自從使用 Windows 10 以來,常常被它的自動更新搞得人仰馬翻,後來微軟改成關機時更新影響有減少一點,但是更新版本之後有時會有意想不到的問題,而且有時候古董老電腦會跑不動了。

停用 Windows 10 自動更新,常用的方式有:
  1. Win+R 執行 services.msc 開啟「服務」,往下找到「Windows Update」,點進去按「停止」,並在啟動類型下拉選單選擇「手動」或「已停用」。
  2. 執行 gpedit.msc 開啟「本機群組原則編輯器」,
    • 若開啟不了,需以管理權限用命令提示字元輸入:「:"%SystemRoot%\servicing\Packages\{{Microsoft-Windows-GroupPolicy-ClientExtensions-Package*.mum}}」和「:"%SystemRoot%\servicing\Packages\{{Microsoft-Windows-GroupPolicy-ClientTools-Package*.mum}}」。
    • 開啟後在左側找到「電腦設定/系統管理範本/Windows 元件/Windows Update」,然後右側找到「設定自動更新」選項並打開,選擇「已停用」。或者可以選「已啟用」然後下面設定自動更新選項選「2 - 通知我...」。  
    • 另外在左側找到「使用者設定/系統管理範本/系統」,然後右側找到「Windows 自動更新」選項並打開,選擇「已停用」。
  3. 將使用中的 Wifi 設為計費網路,藉此阻止更新的下載,個人不推薦。
  4. 使用DISM++,這是個功能相當全面的優化設定軟體,向強者致敬。
    • https://www.chuyu.me/zh-Hant/
    • 左側選擇「系統最佳化」、右側選「Windows Update」,將Windows Update 自動更新調整為「僅檢查更新」。
  5. 使用 BlockWin10AU 開源批次檔,簡單方便。
    • https://github.com/f1tz/BlockWin10AU
    • 下載後以管理員權限執行即可,一次性關掉許多東西非常簡便,但是以後要恢復需一一處理會比較麻煩。
完全關閉系統更新會有風險,建議斟酌使用。

2021年2月15日 星期一

不裝軟體直接下載臉書高畫質影片 Download Facebook video in FHD without other software

今日要在FB下載一個自家孩子的小影片,網路上查發現不是要用軟體,就是方法過時了不管用,於是自己嘗試了一下,最後順利不依靠軟體直接下載最高畫質。

現在很流行影像聲音分開放,從網頁原始碼看得出來FB是以MP4格式存audio、WEBM格式存video。


一、影片部分:

FB電腦版網頁開啟到要下載的影片貼文,按右鍵檢視原始碼;以「FBQualityClass」或「FBQualityLabel」這二個參數搜尋,應該不會很多個,選品質最高的複製一整段,以下1080p範例:

========以下目標原始碼斷行方便閱讀========
FBQualityClass=\"hd\" FBQualityLabel=\"1080p\">\u003CBaseURL>
https:\/\/video.**************************&oe=????????
\u003C\/BaseURL>
========以上目標原始碼斷行方便閱讀========

被「\u003CBaseURL>」和「\u003C\/BaseURL>」夾住的那段就是目標網址參數,還需要清理一下。移除(搜尋並取代為空值)網址中的「\」及「amp;」,結果就是我們要的網址了,以瀏覽器開啟後直接可以下載。


二、聲音部分:

以「"audio":[」搜尋,找到幾筆跟下面字串差不多的資料。

"audio":[{"url":"https:\/\/****省略許多字****&oe=????????",之後忽略

我們要的是"https:\~"這段被「"」夾住的網址參數,移除其中的「\」,就是我們要的網址了,以瀏覽器開啟後直接可以下載。


三、合併:
最後把影片與聲音合併,網路上有許多方便快速的開源軟體,在此先不贅述。
不知道FB什麼時候會改變網頁結構/寫法,所以上述擷取方法有效期限未知。

2021年2月2日 星期二

在 Windows 輕鬆用 NirCmd 批次修改檔案/資料夾建立時間、修改時間

幾年前做一鍵改解析度時,使用過 NirCmd 這個軟體,功能很多印象深刻。最近需要大量修改檔案時間,它也能夠輕鬆做到。

NirCmd 是一套免費的命令列指令集,提供許多控制 Windows 的參數,讓你執行命令列的方式,來執行一些重複性的動作,例如寫入、删除註冊表項、值,寫入 ini 檔案,撥號連接到你的網路帳戶以及 VPN 網路,重啟、關閉電腦,建立檔案快捷方式,改變檔案的建立 / 修改日期,改變顯示設置,關閉顯示器,彈出/關閉光碟,增加或減少電腦音量,以及更多更多。

x64版本的 NirCmd 執行檔是「nircmdc.exe」,需放在path路徑或安裝路徑(C:\Windows)下,以管理員身份執行。這邊簡述一下改檔案/資料夾建立及修改時間的指令:

改檔案日期時間:
nircmdc.exe setfiletime "檔案路徑" "dd-MM-yyyy hh:mm:ss" "dd-MM-yyyy hh:mm:ss"
改資料夾日期時間:
nircmdc.exe setfilefoldertime "資料夾路徑" "dd-MM-yyyy hh:mm:ss" "dd-MM-yyyy hh:mm:ss"

還有很多其他有趣/方便指令可以在官網找到說明。
NirCmd 官網:

[轉貼] windows用powershell修改文件/資料夾建立時間、修改時間

最近再次用到檔案時間大量修改,網路看到不同作法筆記一下

用win7自帶的powershell可以輕鬆修改文件/資料夾建立時間、修改時間。而且可以批量修改。

1. 步驟

新建一個bat檔案,在其中新增語句:

@ECHO OFF  powershell.exe -command "ls 'folder_path\*.dll' | foreach-object { $_.LastWriteTime = Get-Date; $_.CreationTime = Get-Date }"  PAUSE

2. 解釋

程式碼將folder_path路徑下的所有dll檔案的建立時間修改時間改成現在的時間。

  • -command: tells powershell to run the following command and return immediately

  • ls: list all matching files at the path specified

  • foreach-object: run the following block on each file that ls found

  • $_.LastWriteTime = Get-Date: for each file, set the LastWriteTime to the value returned by Get-Date (today's date and time)

  • $_.CreationTime = Get-Date: for each file, set the CreationTime to the value returned by Get-Date (today's date and time)

3. 修改至指定時間

$_.LastWriteTime = Get-Date:改為$_.LastWriteTime = '01/11/2004 22:13:36'

@ECHO OFF  powershell.exe -command "ls 'folder_path\*.*' | foreach-object { $_.LastWriteTime = '01/11/2004 22:13:36'; $_.CreationTime = '01/11/2004 22:13:36' }"  PAUSE

4. 遞迴資料夾中所有檔案

@ECHO OFF  powershell.exe -command "Get-Childitem -path 'E:\project_llj\install\test\' -Recurse | foreach-object { $_.LastWriteTime = Get-Date; $_.CreationTime = Get-Date }"   PAUSE
來源:itread01