Skip to content

index

關於CSV的各種編碼,還有BOM的雜記

各種CSV格式

Windows的Notepad++轉換編碼後輸出,用hexdump看內容結果。

欄位名稱加雙引號

d 的編碼: 64

00000000  22 64 61 74 61 49 44 22  2c 22 65 76 65 6e 74 49  |"dataID","eventI|
00000010  44 22 2c 22 65 76 65 6e  74 44 61 74 65 22 2c 22  |D","eventDate","|
00000020  73 65 61 73 6f 6e 22 2c  22 79 65 61 72 22 2c 22  |season","year","|

欄位名稱沒有雙引號,沒有BOM header

d 的編碼: 64

00000000  64 61 74 61 49 44 2c 65  76 65 6e 74 49 44 2c 65  |dataID,eventID,e|
00000010  76 65 6e 74 44 61 74 65  2c 73 65 61 73 6f 6e 2c  |ventDate,season,|
00000020  79 65 61 72 2c 72 65 67  69 6f 6e 2c 6c 6f 63 61  |year,region,loca|

轉換成UTF-8 BOM

開頭: EF BB BF

d 的編碼: 64 (同ASCII)

00000000  ef bb bf 22 64 61 74 61  49 44 22 2c 22 65 76 65  |..."dataID","eve|
00000010  6e 74 49 44 22 2c 22 65  76 65 6e 74 44 61 74 65  |ntID","eventDate|
00000020  22 2c 22 73 65 61 73 6f  6e 22 2c 22 79 65 61 72  |","season","year|

轉換成UTF-16 LE BOM (Little Endian)

開頭: FF FE (11111111 11111110)

d 的編碼: 64 00

00000000  ff fe 22 00 64 00 61 00  74 00 61 00 49 00 44 00  |..".d.a.t.a.I.D.|
00000010  22 00 2c 00 22 00 65 00  76 00 65 00 6e 00 74 00  |".,.".e.v.e.n.t.|
00000020  49 00 44 00 22 00 2c 00  22 00 65 00 76 00 65 00  |I.D.".,.".e.v.e.|

轉換成UTF-16 BE BOM (Big Endian)

開頭: FE FF (11111110 11111111)

d 的編碼: 00 64

00000000  fe ff 00 22 00 64 00 61  00 74 00 61 00 49 00 44  |...".d.a.t.a.I.D|
00000010  00 22 00 2c 00 22 00 65  00 76 00 65 00 6e 00 74  |.".,.".e.v.e.n.t|
00000020  00 49 00 44 00 22 00 2c  00 22 00 65 00 76 00 65  |.I.D.".,.".e.v.e|

其他:

  • 用LibreOffice、Google Spreadsheet匯出的預設欄位沒有雙引號,也沒加BOM header

(有空再來補各種版本Excel的匯出)

自然攝影中心 (nc.biodiv.tw)

系統狀態

系統板本: vBulletin 3.6.3 (付費版本) - PHP: 5.6 - MySQL: 5.5

附加檔案: - 磁碟空間: 202,188MB - 檔案數: 1,669,049 (包含.attach跟.thumb)

問題

  • 系統老舊
  • 資安風險 -常被通報
  • index.php, includes目錄等被植入莫名程式碼 (2021年底-2022年初移除)

目標

  • 把內容取出,結構化部分內容 (植物圖鑑 小圖連大圖)
  • 以靜態HTML頁面呈現,查詢
  • 封存並關閉現有網站

方法

  • 從 vBulletin 資料庫擷取"小圖連大圖"的文章串
  • 下載並整理相關的圖片檔案
  • 轉換內容為 11ty 可用的 Markdown 格式
  • 生成靜態 HTML 網站

實際處理紀錄

分析Database Schema

文字內容

  • 主要內容在post資料表裡,thread會關聯很多筆post
  • post有些是科的目錄,有些是種的內容,要區分
  • "小圖連大圖"是從一個threadid: 27653開始,主要是科(family)的連結
  • 大部分的各科的post包含屬(genus),會有科以下的物種(Species) 學名,少部分比較大的科如豆科菊科會是thread,然後再關聯許多筆post
  • 內容有很多BBCode

照片檔

  • 路徑是/src/html/nc/vbb35data/[1-9]/的目錄
  • 副檔名是.attach跟.thumb
  • 讀取照片是attachment.php處理
  • 路徑規則是user_id位數分開,如: 1234,檔案的路徑就是 ~/vbb35data/1/2/3/4/xxx.attachment (xxx即attachmentid)
MySQL to SQLite

把需要的資料取出來,轉成Sqlite方便處理

  1. Dump vbb35post and encoded as latin1
mysqldump -u root -p nc_biodiv --default-character-set=latin1 nc_biodiv vbb35post > post.sql
mysqldump -u root -p nc_biodiv --default-character-set=latin1 nc_biodiv vbb35attachment > attachment.sql
  1. Change encoding to utf8, edit post.sql and attachment.sql (latin1 -> utf8mb4)

    • !SET NAMES utf8mb4
    • DEFAULT CHARSET utf8mb4
  2. Import back to mysql (utf8 client readable for better check)

    1. create database nc_nice
    2. mysql -u root -p nc_nice < post.sql
    3. mysql -u root -p nc_nice < attachment.sql
  3. Use adminer.php to export csv

  4. import to sqlite3

sqlite> .headers on
sqlite> .mode csv
sqlite> .import post.csv post

Note

  1. 跟 4. 步驟也可以mysql直接轉csv或sql, import sqlite 甚至,python mysql client 直接讀取mysql也可以,但是我比較熟adminer.php,也習慣用adminer.php查看資料,所以才花點力氣轉來轉去。
Transform Data

寫一個script處理: 1-parse-data.py

  1. 從小圖連大圖, 複製貼上產生family.txt,純手工,寫parser效益太低
  2. 這一串thread的post取出所有科跟種的資料
  3. parse物種post的內容

  4. 取得higher taxa (很大概,視情況手工處理細節)

  5. 圖檔列表attach (list)

    • 小圖連大圖系列只需要26635張圖
  6. 產出整理後的資料: eggs.csv (4千多筆)

11ty Static Site Generator for Render

2-make-markdown.py

  • 從整理好的csv轉換成11ty的markdown格式跟metadata
  • 產生所有科跟屬的清單頁面,直接匯出到 11ty_folder/posts/plantae-index
  • 種的頁面匯出到 11ty_folder/posts/plantae
  • 首頁的科清單是用產出的family.txt,手動貼到index.njk裡

11ty build:

11ty配合High Performance Blog template產生最終呈現網頁。

處理參考High Performance Blog的指令

Note

有4千多個檔案,會發生JavaScript heap out of memory error 執行 NODE_OPTIONS="--max-old-space-size=4096" npx eleventy 似乎就好了

待辦事項

New Site (NC2)

  • build all pages (2025-02-03)
  • 11ty deployment to (Cloundflare or S3/Cloudfront?)
  • image transfer and link
  • decorate 11ty layout
  • search (install findpage plugin?)

Legacy Site (nc.biodiv.tw)

  • archive

貢獻

歡迎任何貢獻!

Zotero

管理研究文獻的Zotero真的太好用了,我一直沒有用的原因是自己沒有在做研究,所以覺得用不到,但拿來當筆記軟體,處理輸入的資料也是超級好用的,相用恨晚。 Zotero的好用不是他有多強大花俏的功能,而是簡單到剛剛好就可以! 之前用過各種筆記軟體,EverNote, OneNote, Dropbox paper, HackMD, LogSeq, Notion… 現在花錢買Heptabase,(有空再來寫使用心得)結果也是建立一堆很難再被看到的垃圾資訊的卡片,也很難走到用視覺化處理、產出。input的東西還是要靠工具或紀律做最低限度的整理,例如,收藏資料要選型別 (blog, video, journal, website…)決定使用的資料欄位,一開始覺得很煩,但後來覺得很重要, 匯出的時候看到自己的垃圾曾經被過去的自己整理過會很感動🥹 然後,匯出方便、格式單純不囉嗦,有手機App版本,桌機也支援Linux,open source 加分… 誠摯推薦 https://www.zotero.org 我沒有做研究,所以我也不知道跟Endnote, Mendelay… 的差別,我也沒用過匯出的引用格式,畢竟我收錄的都是一些廢文、短影音、幹話… 難登大雅之堂。

分類

letter: my words (特有) bill: note (特有) manuscript: 討論

/⭐️

AWS EC2 計價

大分類

  • On-Demand: 用多少算多少
  • Savings Plans: 先講用多少、用多久,會比較便宜,改type比較彈性
  • Reserved Instances: 先講用多少、用多久,會比較便宜,但要用1~3年
  • Spot Instances: 競價,價格是浮動的,出價太低instance會被砍掉
  • Dedicated: 專屬

我還沒有plan,考慮on-demand

EC2 Instance Type Pricing

pricing: hourly (monthly) USD

type Mem vCPU T2 T3a T3 T4g
tokyo
nano 0.5 1 0.0076 (5.472) 0.0061 0.0068 0.0054
micro 1 1 0.0152 (15.5) 0.0122 0.0136 0.0108
small 2 1 0.0304 (31.008) 0.0245 (24.99) 0.0272 (27.744) 0.0216 (22.032)
medium 4 2 0.0608 (62.106) 0.049 (49.98) 0.0544 (55.488) 0.0432 (44.064)
large 8 2 0.1216 (124.032) 0.0979 0.1088 0.0864
xlarge 16 4 0.2432 (248.064) 0.1958 0.2176 0.01728
2xlarge 32 8 0.4864 0.3917 0.4352 0.3456
oregon
nano 0.5 1
micro 1 1
small 2 1 0.0168 (17.136)
medium 4 2
large 8 2
xlarge 16 4
2xlarge 32 8

via: https://aws.amazon.com/ec2/pricing/on-demand/

Diff Type

T2: Intel CPU

  • Up to 3.3 GHz Intel Xeon Scalable processor (Haswell E5-2676 v3 or Broadwell E5-2686 v4)

T3a: AMD CPU, 比T3省10%

  • AMD EPYC 7000 series processors (AMD EPYC 7571) with an all core turbo clock speed of 2.5 GHz

T3: Inter CPU

  • Up to 3.1 GHz Intel Xeon Scalable processor (Skylake 8175M or Cascade Lake 8259CL)

T4g: Arm-based, 最便宜, 某些情況會更快? (大部分時間,都不全速使用CPU的應用程式設計?)

  • custom built AWS Graviton2 processors

Diff Regions

Which AWS Region Is Cheapest? A Costing Report

Diff Latency Test

Speed Test

結論

便宜程度: N.Virginia (us-east-1), Ohio (us-east-2), Oregon (us-west-2)

Latency: Tokyo, Singapore, California, Oregon, Ohio, N.Virginia

[讀書] 作弊 - 安德魯.克萊門斯

The School Story, Andrew Clements

圖片來源: 安德魯.克萊門斯 6: 作弊 (第2版) | 成長/校園小說 | 商品 | 誠品線上

有一天收到圖書館預約書通知,書名是「作弊」,以為是老婆或小孩用我的借書證預約的,總之搞不清楚的狀態下去拿書了。看到書的封面才想起來,可能很久很久以前忘記看到那位朋友介紹這位作者,覺的可以讓小孩多看一些讀物,於是上網預約這系列的書: 「我們叫它粉靈豆」、「成績單」...,很熱門,等了幾個月書才到,而當然後來書在家放超過借書期限後,又原封不動還回去了。

這本認真的看了一下,故事很流暢的翻完,真是很有趣

整本書跟作弊根本沒什麼直接關係

Python Tkinter的Listbox無法scroll

環境: Windows 11, Python 3.8

用鍵盤上下鍵觸發Listbox.yview_scroll也沒反應。

這個很詭異的問題是下拉選單原本是用python預設的srcoll動作,但是選項小於15個時, 不會有scroll的反應, 目前用手動加上scrollbar解決。

動感南島電音: Te Vaka

有一天在幼稚園戶外活動,被背景音樂吸引,查了一下,歌曲是Pate Pate,來自紐西蘭的樂團Te Vaka,第二章專輯Ki Mua (1999)。動感的音樂、好聽的合音、大海的味道,這首歌也是2016年迪士尼動畫「海洋奇緣」(Moana)的配樂。

官方網站可以試聽,有歌詞: Pate Pate by Te Vaka

Te Vaka是一個結合波里尼西亞各地(托克勞、薩摩亞、吐瓦魯、紐西蘭)的音樂家跟舞者團體。靈魂人物是薩摩亞出生,紐西蘭長大的Opetaia Foaʻi

Dancing with AI | 簡立峰老師於中央研究院的演說

Dancing with AI | 簡立峰老師於中央研究院的演說 - Labs of Botsnova

  • 訓練語料70%是英文
  • AI很會寫程式,因為有open source
  • 現在AI的神經元數量跟人類差不多,7000億個。
  • Perfect Storm:
    • AI (Deep Learning Algorithms)
    • Big Data (Internet Data)
    • Cloud Computing
  • GenAI/LLM非萬能
    • 不像傳統AI(google search),弭平地方差異 (NTU在各個國家是不同意思),LLM是一言堂。沒有時間感。
  • 用AI最重要是generating ideas (就像聊天獲得靈感)

dancing with AI dancing with AI dancing with AI